Linux网络性能瓶颈:深入剖析skb缓冲区丢包

Linux skb丢包根源分析

Ref : https://mp.weixin.qq.com/s/T35jPvqV55NPpoYiH_8GlQ

在这里插入图片描述

在这里插入图片描述

skb缓冲区丢包的三大核心原因:

一、RingBuffer skb分配失衡

1、驱动层:硬件缓冲区溢出(RX_OVERRUNS)
● cat /proc/net/dev 关注fifo字段是否存在持续增长,代表硬件缓冲区存在溢出
在这里插入图片描述

● ifconifg关注 rx_overruns 指标,也代表硬件缓冲区溢出
在这里插入图片描述

2、skb 分配失败(RX_DROPPED)
cat /proc/net/dev 查看 drops
或者 dmesg | grep -i ‘skb allocation failed’

二、内核层:队列与软中断处理瓶颈

1、接收队列溢出(Softnet Backlog)
cat /proc/net/softnet_stat

行:CPU0~CPU7 ,列:第二列代表backlog溢出丢包数的增加。
在这里插入图片描述

2、软中断处理不足(NET_RX_SOFTIRQ 瓶颈)
netdev_budget(默认值为 300)限制了单次软中断处理的最大 skb 数量。
cat /proc/sys/net/core/netdev_budget
在这里插入图片描述

如果这个值设置得过小,软中断在一次处理中所能处理的 skb 数量就会受限,导致大量 skb 滞留队列。随着滞留 skb 的增多,网络延迟会不断升高,重传机制也会频繁触发,最终可能引发丢包。
mpstat -P ALL 1 查看系统中单核软中断(si%)的使用情况
在这里插入图片描述

如果单核软中断长期高于 50%,就说明软中断处理能力不足,可能存在 NET_RX_SOFTIRQ 瓶颈,需要对netdev_budget参数进行适当调整 。

三、硬件层:多核 CPU 中断负载不均

在硬件层,多核 CPU 的中断负载不均是导致 skb 缓冲区丢包的另一个关键因素,主要体现在 RSS 队列未启用和中断亲和性配置错误两个方面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ray.so

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值