是否可以检测内核生成 epoll 的时刻与 Sun JVM 读取 epoll 的时刻之间的时间差?
即时间 A = 电压到达 NIC; Time B = Java NIO 包中的选择器能够选择 I/O 的套接字通道。
i.e. Time A = voltage hits the NIC; Time B = Selector from Java NIO package is able to select socket channel for I/O.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用 SO_TIMESTAMP 并找到一个真正支持时间戳的网卡以及一个支持毫秒级时间戳的网卡解决。那么如果你能让 Java 读取传入的
cmsg
< /a> 辅助数据。如果没有良好的硬件支持,数据包将被内核标记为很可能是低分辨率不稳定计时器。
(编辑 #1) C 中的示例代码需要 2.6.30 或更新的内核,我认为:
http://www.mjmwired.net/kernel/Documentation/networking/timestamping/timestamping.c
(编辑 #2) 确定的示例代码C 语言中的内核到用户空间延迟:
http://vilimpoc.org/research/ku-latency/< /a>
(编辑 #3) 我建议遵循 J-OWAMP 项目,该项目依赖于高分辨率计时器和数据包延迟测试。 OWAMP 团队一直在推动 Linux 内核团队提供更好的 SO_TIMESTAMP 支持。
http://www.av.it.pt/jowamp/
Use SO_TIMESTAMP and find a NIC that actually supports timestamps and one that supports timestamps with better than millisecond resolution. Then you should have a chance if you can get Java to read incoming
cmsg
ancillary data.Without good hardware support the packets are going to be tagged by the kernel with most likely a low resolution unstable timer.
(edit #1) Example code in C requiring 2.6.30 or newer kernel I think:
http://www.mjmwired.net/kernel/Documentation/networking/timestamping/timestamping.c
(edit #2) Example code to determine kernel to user-space latency in C:
http://vilimpoc.org/research/ku-latency/
(edit #3) I recommend following the J-OWAMP project which is dependent upon high resolution timers and packet latency testing. The OWAMP team have been pushing the Linux kernel team for better SO_TIMESTAMP support.
http://www.av.it.pt/jowamp/
您需要使用类似 tcpdump 的东西,然后将应用程序日志和应用程序日志之间的时间戳相关联“嗅探器”日志来确定这一点,单独从 jvm 是不可能的。
you'll need to use something like tcpdump and then correlate timestamps between your application logs and the "sniffer" logs to determine this, it's not possible from the jvm alone.