1、引子
某日14:45分,调用某台服务器的应用出现几十个超时,怀疑网络有丢包。
经一系列排查,发现交换机连接该服务器的端口在该时刻有126个discard计数。
问题来了:服务器监控千兆网卡速率为180Mbps, 为何交换机会丢包?
下图为服务器网卡流量监控,一分钟采集一次。
2、交换机out方向discard原理
switch out Discard:接口在物理层检测时发现的,由于队列拥塞导致的丢弃报文数目。
怎么理解?
如下图,背景流量为A1以1Gbps的速率发送流量到服务器B,交换机的Port_B此时已经是满带宽工作;
此时如果A2也发送报文到B(burst方式),此时交换机Port_B已经满带宽,就会进入交换机的缓存。
所以:如果A2–>B的burst < 交换机缓存, 部分进入队列缓存的报文延时增大,没有丢包;
如果A2–>B的burst > 交换机缓存, 部分进入队列缓存的报文延时增大,队列缓存溢出报文将丢弃,并在交换机对应端口增加discard计数;
3、观测尺度问题
回到引子的问题:服务器监控千兆网卡速率为180Mbps(1分钟), 为何交换机会丢包?
答案很简单:1分钟的观测尺度太粗,在更小的观测尺度上端口带宽已经满了。
但是,也经常发生在1秒钟的速率才100Mbps时,也有discard。
下一个问题来了: 1分钟的尺度太粗,要多精细才足够?
答案:交换机缓存/最大缓存写入速率
例子1,在idc spine-leaf两级网络架构中,2*10G上联的千兆接入交换机,假设对某台千兆服务器,流量都是南北向(都从上联口来的),
交换机缓存=8Mbytes, 最大缓存写入速率=2*10Gbps,
观测尺度: 8M*8/20Gbps = 3.2ms
解读:假设服务器的千兆网卡带宽已满,极限情况下从2个10G上联口来的burst报文可在3.2ms把缓存全部用完,随即队列溢出,发生丢包。
例子2,在idc spine-leaf两级网络架构中,2*40G上联的万兆兆接入交换机,假设对某台万兆服务器,流量都是南北向(都从上联口来的),
交换机缓存=16Mbytes, 最大缓存写入速率=2*40Gbps,
观测尺度: 16M*8/80Gbps = 1.6ms
解读:假设服务器的万兆网卡带宽已满,极限情况下从2个40G上联口来的burst报文可在1.6ms把缓存全部用完,随即队列溢出,发生丢包。
结论:
1、需精确到毫秒尺度才能直接观测到导致丢包的满带宽流量,目前无手段;
2、间接观测手段:交换机的discard统计;
4、引申:不同观测尺度下的流量
观测对量:万兆服务器iperf3 打流,band=1M,burst=10000Mbytes
遗留问题:如上的观测对象,对于单个报文,发送速率为多少?1Mbps ? 50Mbps? 500Mbps? 4.3Gbps?