我可以使用tcpdump来测量端到端延迟(包括内核时间)吗?

时间:2017-03-06 20:16:39

标签: linux networking linux-kernel tcpdump

在Ubuntu 14.04服务器上,我试图测量我的软件堆栈处理UDP数据包并发出相应的TCP响应的结束时间。我至少在寻找微秒级精度。

我的策略是使用tcpdump捕获计算机上的网络流量,然后分析流量以配对UDP和TCP数据包,并使用相对时间戳生成相同的静态数据。这似乎工作正常,因为我获得的时间与应用程序级别跟踪的时间一致。

但是,我想知道我是否实际上捕获了在Linux内核处理UDP和TCP(这是我的意图)所花费的大部分时间,或者是否tcpdump对数据包的时间戳过早或过晚都无法进行此测量有用吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

如今,tcpdump支持硬件时间戳。如果打开硬件时间戳并且NIC和驱动程序支持它,则可以获得微秒精度。在例如英特尔i210(良好的,非昂贵的千兆位/秒NIC)发送时间戳是在MAC将数据包发送到PHY之前进行的,延迟MAC-> PHY是众所周知的并由驱动程序补偿。

如果要测量从用户空间到PHY的时间,可以使用关联NIC时钟和系统时钟的方法,并将用户空间中的时间戳与HW时间戳进行比较。如果这样做,您可能需要补偿时钟漂移。例如,如果我没记错的话,i210上的时钟漂移高达30ppm,除了温度变化外,它还会随着时钟晶体的老化而增加。

有关详细信息,请参阅例如http://lxr.free-electrons.com/source/Documentation/networking/timestamping.txt

我也制作了一些测试程序,请参阅https://github.com/alapaa/timestamping/tree/send_queue