即时间 A = 电压击中 NIC;时间 B = 来自 Java NIO 包的选择器能够为 I/O 选择套接字 channel 。
最佳答案
使用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 支持。
关于java - 是否可以检测内核生成 epoll 的时刻与 Sun JVM 读取它的时刻之间的时间差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4494625/