31.5. 使用 nmcli 增加环缓冲区的大小,以减少数据包丢弃率
如果数据包丢包率导致应用程序报告数据丢失、超时或其他问题,请增加以太网设备的环缓冲区的大小。
接收环缓冲在设备驱动程序和网络接口控制器(NIC)之间共享。该卡分配一个传输(TX)和接收(RX)环缓冲。名称意味着,环缓冲是循环缓冲区,溢出会覆盖现有数据。可以通过两种方法将数据从 NIC 移至内核,硬件中断和软件中断也称为 SoftIRQ。
内核使用 RX 环缓冲区来存储传入的数据包,直到设备驱动程序可以处理它们。设备驱动程序排空 RX 环,通常是使用 SoftIRQ,其将传入的数据包放在名为 sk_buff
或 skb
的内核数据结构中,以通过内核开始其过程,直到拥有相关套接字的应用程序。
内核使用 TX 环缓冲区来存放应发送到网络的传出数据包。这些环缓冲区位于堆栈的底部,是可能发生数据包丢弃的关键点,这反过来会对网络性能造成负面影响。
流程
显示接口的数据包丢包统计信息:
ethtool -S enp1s0
# ethtool -S enp1s0 ... rx_queue_0_drops: 97326 rx_queue_1_drops: 63783 ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,命令的输出取决于网卡和驱动程序。
discard
或drop
计数器中的高值表示可用缓冲区的填满速度快于内核可以处理数据包的速度。增加环缓冲有助于避免此类丢失。显示最大环缓冲大小:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果
Pre-set maximums
部分中的值大于Current hardware settings
部分的值,您可以在下一步中更改设置。确定使用接口的 NetworkManager 连接配置文件:
nmcli connection show
# nmcli connection show NAME UUID TYPE DEVICE Example-Connection a5eb6490-cc20-3668-81f8-0314a27f3f75 ethernet enp1s0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新连接配置文件,并增加环缓冲:
要增加 RX 环缓冲区,请输入:
nmcli connection modify Example-Connection ethtool.ring-rx 4096
# nmcli connection modify Example-Connection ethtool.ring-rx 4096
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要增加 TX 环缓冲区,请输入:
nmcli connection modify Example-Connection ethtool.ring-tx 4096
# nmcli connection modify Example-Connection ethtool.ring-tx 4096
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
重新载入 NetworkManager 连接:
nmcli connection up Example-Connection
# nmcli connection up Example-Connection
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要根据 NIC 使用的驱动程序,环缓冲中的更改可能会短暂中断网络连接。