设置和观察
我有一台配备英特尔i350 T2网卡的个人电脑,我想在这两个界面上同时使用tcpdump捕捉。两个接口都连接到一个100 Both集线器(sic!)它将来自外部业务源的各种流量“同时”转发到两个接口,因此我可以测量各自的以太网MACs所做时间戳的差异。
同时捕获:
user@rt:~$ sudo tcpdump -j adapter --time-stamp-precision nano -B 1048576 -i eth2 -w test_eth2.pcap
user@rt:~$ sudo tcpdump -j adapter --time-stamp-precision nano -B 1048576 -i eth3 -w test_eth3.pcap之后,我将这两个文件合并在一起,比较时间戳:
user@rt:~$ mergecap -F nseclibpcap -w merged.pcap test_eth2.pcap test_eth3.pcap然后,Wireshark向我展示,对于几个数据包,我得到了大约20-40 40nsec的重复帧的时间戳差异(这对我的应用程序来说很好,也足够了!)但是也有很多帧,当比较各自的重复时,会显示出几十微秒的差异。
环境
user@rt:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 15.04
Release: 15.04
Codename: vivid
user@rt:~$ uname -r
3.19.0-28-generic
user@rt:~$ lscpu | grep "Model name"
Model name: Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz问题
phc2sys将所有适配器时钟同步到CLOCK_REALTIME?寻求帮助或指出我的错误!
发布于 2015-10-07 18:58:41
快速地浏览一下igb_ethtool.c,您的NIC确实能够完成硬件时间戳。您观察到的抖动(20-40 is )就在预期的PHY抖动范围内,从同步到以太网时钟。(100 40ns的时钟为25 the或40 is。)
到目前为止看上去还不错,多亏了英特尔。没有多少NIC/驱动程序具有此功能。
现在最糟糕的是:我怀疑目前是否有任何东西是将CLOCK_REALTIME同步到NIC适配器时钟。这些时钟很可能是自由运转的,频率略有不同。这些振荡器通常被指定在50 5ppm左右,典型的漂移将在5 5ppm左右,这意味着它们每秒钟漂移约5us,随室温而变化。在使用纳秒精度时要记住这一点。如果您的系统使用NTP,您甚至可能会看到NTP漂移调整发生。
但好消息是,除非您真的需要绝对时间戳,否则您可能不需要同步它们。NIC支持硬件时间戳的主要原因可能是支持IEEE1588 PTP (精确时间协议)。如果你需要绝对的时间和亚微秒的精度,你应该看看这个协议和/或购买全球定位系统接收器。
如果您只需要相对的时间戳,您可以尝试-j adapter_unsynced而不是-j adapter,或者您可以尝试阻止NTP试图漂移-校正您的系统时钟。如果所有这些都失败了,您可以尝试启动linuxptp,即使您没有PTP网络,它也可能具有正确同步NIC和系统时间的能力。
最后..。你在使用集线器,这意味着以太网在半双工模式下运行,这意味着.碰撞。除非你的NIC绝对安静。理论上,我想这并不重要,因为您在两个NIC中观察到相同的碰撞,并且帧不会根据它们的路径不同而被延迟或排队。但是由于现在半双工非常罕见,所以NIC时间戳支持的实现可能没有考虑到这一点。这些实现中的典型错误是返回以前帧的时间戳,而不是当前框架的时间戳。
发布于 2015-11-06 08:21:29
英特尔i350数据表第7.9章可能会帮助您回答第三个问题。它提供了您可以在igb驱动程序中配置的PTP寄存器集。
http://www.intel.com/content/dam/www/public/us/en/documents/datasheets/ethernet-controller-i350-datasheet.pdf
https://stackoverflow.com/questions/32970988
复制相似问题