在linux内核中测量TCP的RTT

时间:2016-10-18 15:32:11

标签: linux tcp linux-kernel

我在自定义协议中实现类似TCP的RTT估计。当我查看函数

static void tcp_rtt_estimator(struct sock *sk, long mrtt){
long m = mrtt; /* RTT */

对于第一次迭代,当没有完成先前的RTT估计时,代码片段是

srtt = m << 3;          /* take the measured time to be rtt */

为什么m直接取代srtt的价值?根据我的理解,参数mrtt_us只是当前往返时间测量的jiffies值。

关于mrtt_us的上述假设是否不正确?如果是,那么我应该传递给这个函数的值是多少?

P.S.-我已经测量了当前传递给这个函数的jiffies的RTT。显然,这是不正确的,因为srtt

导致第一个srtt = m << 3值变为测量rtt以外的值

1 个答案:

答案 0 :(得分:1)

我在https://lkml.org/lkml/1998/9/12/41

的LKML上的一个邮件链中找到了这个

它提到存储的SRTT实际上是真实SRTT的8倍。我认为这样做是为了提供更高的计算精度。

所以要回答这个问题,RTT的测量值应该在jiffies中传递给这个函数(内核版本3.13)