【问题标题】:Measuring RTT for TCP in linux kernel在 Linux 内核中测量 TCP 的 RTT
【发布时间】: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 &lt;&lt; 3 而不是测量的 rtt

【问题讨论】:

  • 它不是应用于传递到例程中的 RTT 值的平滑算法的一部分吗?可能需要阅读源码中cmets中链接的论文:ee.lbl.gov/papers/congavoid.pdf
  • 是的,但是平滑算法要求第一次 RTT 测量应直接用作 SRTT,并且应使用第二次 RTT 测量中的适当公式。 tools.ietf.org/html/rfc6298中的第 2.2 节

标签: linux tcp linux-kernel


【解决方案1】:

我从https://lkml.org/lkml/1998/9/12/41LKML 上的一个邮件链中发现了这一点

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

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

【讨论】:

    猜你喜欢
    • 2011-09-17
    • 2012-02-09
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    相关资源
    最近更新 更多