测量Linux内核的TCP延迟



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

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

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

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

  1. 为数据包调用的第一个TCP级别函数(是TCP_sendmsg吗)
  2. 最后一个TCP级别的函数调用了一个将其传递到IP网络级别的数据包

调用这两个系统函数的时刻之间的差异(delta)是我想知道的延迟。

  1. 为数据包调用的第一个TCP级别函数是来自"net/ipv4/TCP.c"系统源文件的*TCP_sendmsg*
  2. 为数据包调用的最后一个TCP级别函数是"net/ipv4/TCP_output.c"系统源文件中的*TCP_transmit_skb*

一个有趣的站点提供了关于Linux中TCP源文件的信息,它是:TCP_output

最新更新