是否有可能检测到内核生成epoll的时刻与Sun JVM读取它的时刻之间的时差?

时间:2010-12-20 22:29:18

标签: java linux sockets nio epoll

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

2 个答案:

答案 0 :(得分:4)

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

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

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

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/

答案 1 :(得分:0)

你需要使用类似tcpdump之类的内容,然后关联你的应用程序日志和“嗅探器”日志之间的时间戳来确定这一点,单独使用jvm是不可能的。