通过数据包/段测量TCP堆栈中花费的时间

时间:2016-07-11 07:51:13

标签: c linux sockets tcp hook

对于传入的TCP段,我想测量TCP段可用于内核(来自NIC的驱动程序)的时刻与同一段通过用户级应用程序可用的时刻之间的时间间隔socket api(在通过TCP堆栈之后)。

为了简化问题,我通过TCP发送不频繁的数据包并且网络相当稳定,因此您可以假设TCP段与我发送的逻辑应用程序级数据包/消息之间存在1对1的映射。

内核级别时间戳:

为了在段到达时获得第一个内核级时间戳,我使用了netfilter的NF_INET_PRE_ROUTING挂钩,并从skbuff读取时间戳,这部分似乎工作正常。

用户级时间戳:

然而,当从插座读取消息(相应的缓冲区)时,我很难获得精确的时刻测量。问题是用户级应用程序调用{​​{1}}的时间与缓冲区可用的时间不严格相关。例如,如果系统处于负载状态,则应用程序的连续读取调用之间的间隔将增加。因此,当我读取缓冲区并对其进行时间戳(在应用程序级别)时,此时间将不对应于该缓冲区实际准备好被读取的时间。

因此,有没有办法可以获得TCP堆栈处理段时的精确时间戳?也许我可以使用其他一些内核挂钩?

谢谢!

0 个答案:

没有答案