以下是来自三个不同服务器的路由缓存的部分内容不是在高负载下。
# ip route show cache | grep -B 1 rtt
local 127.0.0.1 from 127.0.0.1 dev lo
cache <local> mtu 16436 rtt 106ms rttvar 155ms cwnd 7 advmss 16396 hoplimit 64
...
local 127.0.0.1 from 127.0.0.1 dev lo
cache <local> mtu 16436 rtt 145ms rttvar 130ms cwnd 6 advmss 16396 hoplimit 64
...
local 127.0.0.1 from 127.0.0.1 dev lo
cache <local> mtu 16436 rtt 172ms rttvar 205ms cwnd 5 advmss 16396 hoplimit 64
为什么 rtt 这么高而且噪音这么大 (rttvar 也很高)?我该如何解释这些值?
答案1
低于 200 毫秒 (TCP_RTO_MIN) 的 RTT 值是没有意义的。低于 250 毫秒的 rttvar 值是没有意义的(因为另一端可能没有足够准确的计时器)。RTT/RTTVAR 测量值在如此快速的接口上是不相关的。
从include/net/tcp.h
:
#define TCP_RTO_MIN ((unsigned)(HZ/5))
从net/ipv4/tcp_input.c
:
* 1. If rtt variance happened to be less 50msec, it is hallucination.
* It cannot be less due to utterly erratic ACK generation made
* at least by solaris and freebsd.