【发布时间】:2016-10-19 19:43:22
【问题描述】:
我正在自定义协议中实现类似 TCP 的 RTT 估计。当我查看函数时
static void tcp_rtt_estimator(struct sock *sk, long mrtt){
long m = mrtt; /* RTT */
对于第一次迭代,当之前没有做过 RTT 估计时,代码 sn-p 是
srtt = m << 3; /* take the measured time to be rtt */
为什么不直接为srtt 取m 的值?据我了解,mrtt_us 参数只是当前往返时间测量的 jiffies 值。
上述关于mrtt_us 的假设不正确吗?如果是,那么我应该将什么值传递给这个函数?
P.S.- 我已经在 jiffies 中测量了 RTT,我目前正在传递给这个函数。显然,这是不正确的,因为第一个 srtt 值由于 srtt = m << 3 而不是测量的 rtt
【问题讨论】:
-
它不是应用于传递到例程中的 RTT 值的平滑算法的一部分吗?可能需要阅读源码中cmets中链接的论文:ee.lbl.gov/papers/congavoid.pdf
-
是的,但是平滑算法要求第一次 RTT 测量应直接用作 SRTT,并且应使用第二次 RTT 测量中的适当公式。 tools.ietf.org/html/rfc6298中的第 2.2 节
标签: linux tcp linux-kernel