Linux系统如何查看网卡的Ring Buffer 解决高并发丢包问题

星婷吖_8688

星婷吖_8688

2026-05-06

212人浏览

原创

查当前ring buffer大小用ethtool -g eth0,输出中current hardware settings下的rx/tx值即为当前深度,常见默认256或512,高并发udp小包场景常不足。

linux系统如何查看网卡的ring buffer 解决高并发丢包问题

查当前 Ring Buffer 大小用 ethtool -g

直接运行 ethtool -g eth0(把 eth0 换成你实际的网卡名),输出里会显示:Current hardware settings 下的 RX 和 TX 值,这就是当前 Ring Buffer 的深度。常见默认值是 256 或 512,对高并发 UDP 小包场景明显不够。

注意:ethtool -g 只显示当前设置,不反映是否已达硬件上限;有些网卡(如 ixgbe)最大支持 4096 或 8192,但 igb 可能只到 4096,得查对应驱动文档确认。

常见误操作:ethtool -G eth0 rx 8192 执行失败时,别硬试更大值——先看 ethtool -g eth0 输出里的 Max 行,只允许设在 Min~Max 范围内。

确认丢包是否来自 Ring Buffer 溢出

真正要定位问题,不能只看 ifconfig 或 netstat -i 里的 overruns,它只是最终结果。得结合两处统计交叉验证:

  • cat /proc/net/dev 中对应网卡行的 fifo 列:非零说明 Ring Buffer 溢出已发生
  • ethtool -S eth0 | grep -i "rx_fifo\|rx_missed\|rx_no_buffer":重点看 rx_fifo_errors(FIFO 溢出)、rx_missed_errors(DMA 缓冲区满、驱动没及时取走)、rx_no_buffer_count(SKB 分配失败)

如果 rx_fifo_errors 持续上涨,而 UdpOverflows(来自 netstat -s | grep Udp)增长缓慢,基本可断定丢包卡在 Ring Buffer 层,还没进协议栈。

Zynq Linux Hardware Debug
Zynq Linux Hardware Debug

Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。

下载

ethtool -G 调大 RX Ring Buffer 的实操要点

调大本身很简单:ethtool -G eth0 rx 4096,但容易忽略几个关键点:

  • 必须用 root 权限执行,普通用户会报 Operation not permitted
  • 部分虚拟化环境(如 virtio_net)不支持动态调整,ethtool -S eth0 可能返回 no stats available,此时需改用 virsh edit 调整 vNIC 配置或换物理网卡
  • 增大后要验证是否生效:ethtool -g eth0 再跑一次,确认 Current 值已更新
  • TX Ring Buffer 对 UDP 接收无影响,一般无需调大;强行设大可能浪费内存,还可能触发某些驱动 bug

临时生效后务必做持久化:写入 /etc/rc.local(Debian/Ubuntu)或添加 POST_UP_CMD="ethtool -G eth0 rx 4096" 到网卡配置文件(RHEL/CentOS),否则重启就回退。

Ring Buffer 调大 ≠ 丢包消失,还得看软中断和 CPU 分布

即使 rx_fifo_errors 归零,/proc/net/softnet_stat 第二列(dropped)还在涨,说明包进了 Ring Buffer,但内核 softirq 没来得及处理,被 softnet 队列丢弃了。

这时候得检查:

  • cat /proc/interrupts | grep eth0:看中断是否全挤在单个 CPU 上
  • cat /proc/net/softnet_stat | awk '{print $2}':持续监控 dropped 计数
  • 启用 RPS:echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus(f 是 4 核掩码,按实际 CPU 数调整)

最容易被跳过的是:调大 Ring Buffer 后没同步调大 net.core.rmem_max 和应用层 SO_RCVBUF。网卡“装得下”,内核 socket “接不住”,照样丢包——这阶段的丢包会记在 UdpOverflows 里,不是 rx_fifo_errors。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux linux系统

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4090

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3473

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2673

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6510

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

6162

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3573

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

3065

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3299

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习