3

即时间 A = 电压击中 NIC;时间 B = Java NIO 包中的选择器能够为 I/O 选择套接字通道。

4

2 回答 2

4

使用SO_TIMESTAMP并找到一个实际支持时间戳的 NIC,以及一个支持比毫秒分辨率更好的时间戳的 NIC。那么你应该有机会让 Java 读取传入的cmsg辅助数据。

如果没有良好的硬件支持,数据包将被内核标记,很可能是一个低分辨率的不稳定计时器。

(编辑#1)我认为需要 2.6.30 或更新内核的 C 中的示例代码:

http://www.mjmwired.net/kernel/Documentation/networking/timestamping/timestamping.c

(编辑#2)用于确定 C 中内核到用户空间延迟的示例代码:

http://vilimpoc.org/research/ku-latency/

(编辑#3)我建议遵循依赖于高分辨率计时器和数据包延迟测试的 J-OWAMP 项目。OWAMP 团队一直在推动 Linux 内核团队提供更好的 SO_TIMESTAMP 支持。

http://www.av.it.pt/jowamp/

于 2010-12-21T03:10:14.857 回答
0

您需要使用tcpdump之类的东西,然后关联应用程序日志和“嗅探器”日志之间的时间戳来确定这一点,仅从 jvm 是不可能的。

于 2010-12-21T01:15:46.383 回答