netstat -st输出的两个重要信息来源分别是/proc/net/snmp和/proc/net/netstat
本文将分类整理这些counterd的含义以及一些注意事项。
当执行以下命令查看netstat统计信息来源时,发现一个重要的来源是/proc/net/snmp接口的输出信息
因此在刨根问底分析源码的过程中,找到了这个接口对应的RFC2012文档。本wiki就记录下
相关的解读,以便后续更加透彻的立即netstat的统计信息。
# strace -e open netstat -s
注:netstat -s的另一个重要的数据来源是/proc/net/netstat下的信息,但鉴于
该接口信息量较大,因此会单独独立整理。
Early Retransmit(ER)机制的提出主要解决的是在某些特定场景下,没有足够的
dupack触发fast retransmit造成的问题。
本质上就是通过检测出某些考虑到的特定场景,然后降低触发FR的dupack threshold值。
具体需要考虑那些特定场景后续后详细介绍。
想法: tcp timestamp选项会引入额外的12字节的包头开销,因此关闭tcp timestamp选项理论上能够少量的提高有效数据的吞吐率
评测: 使用qperf benchmark评测关闭tcp timestamp后,能提升大约1%的吞吐率
对于10GE NIC,关闭timestamp能将下载速度从9370Mbits/s提升至9460Mbits/s
点评: 关闭timestamp正常情况下确实能提高有效数据的吞吐率,但在某些情况下可能就不那么理想了。
比如timestamp提出的初衷之一就是解决RTT测量不准,导致spurious retransmission的情况。如果关闭timestamp导致了更多的RTO,则肯定是划不来的。
正如文中建议的:
Results show that it is reasonable to turn off timestamps on 10GE interfaces,
but keep in mind that it should be performed only in low latency networks.
使用10GE网卡是为了1%的提升效果更明显,强调低延迟是因为RTO有系统最小值200ms限制。低延迟下更难出现spurious retransmission
相关阅读:
Is it fine to turn off tcp window scaling and tcp timestamps on server?
What benefit is conferred by TCP timestamp?