从系统cache中查看 tcp_metrics itemip tcp_metrics show
tcp_metrics会记录下之前已关闭TCP连接的状态,包括发送端CWND和ssthresh,如果之前网络有一段时间比较差或者丢包比较严重,就会导致TCP的ssthresh降低到一个很低的值,这个值在连接结束后会被tcp_metrics cache 住,在新连接建立时,即使网络状况已经恢复,依然会继承 tcp_metrics 中cache 的一个很低的ssthresh 值,对于rrt很高的网络环境,新连接经历短暂的“慢启动”后(ssthresh太小),随即进入缓慢的拥塞控制阶段(rt太高,CWND增长太慢),导致连接速度很难在短时间内上去。而后面的连接,需要很特殊的场景之下(比如,传输一个很大的文件)才能将ssthresh 再次推到一个比较高的值更新掉之前的缓存值,因此很有很能在接下来的很长一段时间,连接的速度都会处于一个很低的水平。
TCP Metrics
是Per-Host
的。也就是说,TCP Metrics
表项应该是基于<源IP,目的IP>
二元组的。从一台主机的角度,到达另一个特定地址主机的网络链路状况应该是被两台主机之间的所有连接所共享的。
内核使用tcp_metrics_block
表示一条Metrics
表项,这些表项根据<源IP,目的IP>
组织在tcp_metrics_hash
冲突链表表中,记录的值保存在内部tcpm_vals
数组
当新建TCP连接时,内核使用下面的接口来为TCP套接字设置TCP Metrics
指导下的参数
void tcp_init_metrics(struct sock *sk)
当某条TCP连接收的运行参数发生变化时,比如重新计算RTT了,内核会使用下面的接口来更新它对应的TCP Metrics
表项。切记,TCP Metrics
表项是Per-Host
的,因此,多条TCP连接的套接字可能会更新同一条表项。
void tcp_update_metrics(struct sock *sk)
内核提供ip-tcp_metrics
ip tcp_metrics show
命令查看主机上的TCP Metrics
表项.
标签:Metrics,表项,cache,TCP,metrics,tcp,连接 From: https://www.cnblogs.com/codestack/p/18119799