我在自定义协议中实现类似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以外的值
答案 0 :(得分:1)
我在https://lkml.org/lkml/1998/9/12/41
的LKML上的一个邮件链中找到了这个它提到存储的SRTT实际上是真实SRTT的8倍。我认为这样做是为了提供更高的计算精度。
所以要回答这个问题,RTT的测量值应该在jiffies中传递给这个函数(内核版本3.13)