测量Linux内核的TCP延迟

时间:2011-06-17 11:45:26

标签: tcp linux-kernel hook delay systemtap

TCP不像IP那样优先处理流量。当打开许多正在上传数据的TCP后台连接时(比如BitTorrent在后台播种时),特定套接字可能会出现延迟,因为TCP一次只能选择一个套接字将其数据包发送到IP级别。因此,特定套接字必须等待许多其他连接,而不会有任何优先级导致延迟。

我目前正在做一些实验,我正在尝试测量TCP在这种拥塞情况下产生的延迟。因为这种延迟发生在传输(TCP)级别,所以我想通过在使用某些Linux系统调用时钩住精确的时刻来精确测量延迟。

我愿意使用TCP将数据上传到服务器(我可以使用Iperf工具)。对于挂钩系统调用,我想使用SystemTap。这个工具可以告诉我调用特定系统调用的确切时刻。

我想知道发送数据包时使用的两个系统调用的名称:

  1. 第一个TCP级别函数调用了一个数据包(是* tcp_sendmsg *);
  2. 最后一个TCP级别函数是否需要一个通过IP网络级别的数据包?
  3. 调用这两个系统函数的时刻之间的差异(delta)是我想知道的延迟。

1 个答案:

答案 0 :(得分:1)

  1. 调用数据包的第一个TCP级别函数是来自'net / ipv4 / tcp.c'系统源文件的* tcp_sendmsg *。
  2. 调用数据包的最后一个TCP级别函数是来自'net / ipv4 / tcp_output.c'系统源文件的* tcp_transmit_skb *。
  3. 有关来自Linux的TCP源文件的有趣网站是:tcp_output