java - 在 Java + Linux 中,测量跨 CPU 内核延迟的正确方法是什么?

标签 java linux kernel real-time benchmarking

我听说 System.nanoTime() 在 Java + Linux 中跨 CPU 内核不一致。那么我如何测量单向消息在环回上的延迟,换句话说,在同一台机器上。流程是:

  • 客户端向服务器发送带有时间戳的消息
  • 服务器获取消息
  • 服务器从消息中解析出时间戳
  • 服务器计算单向延迟(现在 - 时间戳)

请注意,服务器和客户端在同一台机器上运行,但固定在不同的 cpu 内核上。

最佳答案

您可以使用 System.nanoTime()。这只是旧操作系统上的问题,例如运行 Windows XP 的多路计算机。

在机器内。

  • 在一个线程中写下时间戳
  • 读取另一个线程中的时间戳。

注意:以这种方式测量延迟存在严重问题,例如协同遗漏。更好的方法是

  • 根据您要测量的目标吞吐量计算何时应该开始测试。
  • 忙着等待那个时间到来,如果它还没有落后的话。
  • 写下消息应该发送的时间,而不是实际发送的时间。
  • 读取时间戳并进行比较。
  • 记录分布情况。

通过往返测试,您甚至可以在机器之间使用 System.nanoTime()

  • 发送时间戳
  • 让另一端发回。
  • 与当前时间进行比较。

关于java - 在 Java + Linux 中,测量跨 CPU 内核延迟的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38703364/

相关文章:

c - 链接器错误 : undefined reference to `user_input'

java - 从另一个 apk 加载资源(布局)

Java2D Alpha 映射图像

linux - 笔式驱动器中的 libusb 批量传输

linux - 如何在开发服务器上执行 rm -rf/* 后恢复服务器上的文件?

kernel - 将内核调试器连接到 Azure VM

linux - 系统时间和文件系统时间不一样

java - Android 操作系统如何读取 MP3 文件中的 id3 标签?

java - 如何使用 java.text.MessageFormat 格式化小数百分比

php - 适用于 Linux/Ubuntu 的 iPhone 测试仪