2010-12-20 10 views
3

即时间A =电压命中NIC;时间B =来自Java的选择器NIO包能够为I/O选择套接字通道。是否有可能检测到内核生成epoll和Sun JVM读取它之间的时间差?

+0

您可以确定从设置的行到实际到达JVM的时间。我怀疑纯粹用软件是否有办法这样做。如果你只关心在内核中花费多少时间,你可以编译一个内核来记录时间戳并查看它们。 – 2010-12-20 22:31:35

+0

为什么你需要知道这个? – 2010-12-20 22:45:52

回答

0

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

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/

相关问题