SO_TIMESTAMP为tsc不timeval?

从socket手册页中可以看出,可以使用带setsockopt SO_TIMESTAMP来度量Linux内核将接收到的networking包传递给用户空间所花费的时间。

这里有一个很好的描述这个function的方法: 测量内核和用户空间之间的Linuxnetworking栈的延迟 。

在内核收到数据包的时候,有没有办法读取tsc而不是timeval

没有。

  • 它是特定于平台的。
  • TSC可以改变一些(P4时代)处理器的频率,并且在核心之间历史上没有同步(一些现代CPU在相同封装中的核心之间同步它)。
  • 理想情况下,你希望数据包由网卡加盖时间戳。 PTP通常要求达到其目标精度。

您可以合理要求的最多的是CLOCK_MONOTONIC时基中的struct timespec 。 我不认为它存在,但添加并不难。