33.12. 调整中断合并设置
中断合并是一种减少网卡产生的中断数量的机制。通常,较少的中断可能会提高网络的延迟和整体性能。
调整中断合并设置涉及调整控制的参数:
- 合并成一个中断的数据包的数量。
- 产生中断前的延迟。
最佳合并设置取决于使用的特定网络条件和硬件。因此,可能需要进行一些尝试,来找到最适合您的环境和需要的设置。
33.12.1. 为延迟或吞吐量敏感服务优化 RHEL 复制链接链接已复制到粘贴板!
coalesce 调优旨在最小化给定工作负载的中断。在高吞吐量情形中,目的是在维护高数据率的同时尽可能使用几个中断。在低延迟情况下,可以使用更多的中断来快速处理流量。
您可以调整网卡上的设置,以增加或减少组合成一个中断的数据包数。因此,您可以提高流量的吞吐量或延迟。
流程
识别遇到瓶颈的网络接口:
# ethtool -S enp1s0 NIC statistics: rx_packets: 1234 tx_packets: 5678 rx_bytes: 12345678 tx_bytes: 87654321 rx_errors: 0 tx_errors: 0 rx_missed: 0 tx_dropped: 0 coalesced_pkts: 0 coalesced_events: 0 coalesced_aborts: 0识别在其名称中包含
drop、discard或error的数据包计数器。这些特定统计测量网络接口卡(NIC)数据包缓冲区的实际数据包丢失,这可能是由 NIC 合并造成的。监控您在上一步中识别的数据包数的值。
将它们与网络的预期值进行比较,以确定任何特定接口是否遇到瓶颈。网络瓶颈的一些常见迹象包括:
- 网络接口上有很多错误
- 高数据包丢失
网络接口使用率过高
注意在识别网络瓶颈时,其他重要因素是 CPU 使用率、内存使用率和磁盘 I/O。
检查当前的中断合并设置:
# ethtool -c enp1s0 Coalesce parameters for enp1s0: Adaptive RX: off Adaptive TX: off RX usecs: 100 RX frames: 8 RX usecs irq: 100 RX frames irq: 8 TX usecs: 100 TX frames: 8 TX usecs irq: 100 TX frames irq: 8-
usecs值指的是接收方或传输方在产生中断前等待的微秒数。 -
frames值指的是接收方或传输方在产生中断前等待的帧数。 irq值用于在网络接口已经处理中断时配置中断调节。注意不是所有网络接口卡都支持报告和更改示例输出中的所有值。
-
Adaptive RX/TX值表示自适应中断合并机制,它动态调整中断合并设置。根据数据包条件,当启用Adaptive RX/TX启用时,NIC 驱动程序会自动计算合并值(每个 NIC 驱动程序的算法不同)。
-
根据需要修改合并设置。例如:
在
ethtool.coalesce-adaptive-rx被禁用时,请配置ethtool.coalesce-rx-usecs,来将 RX 数据包的产生中断前的延迟配置为 100 微秒:# nmcli connection modify enp1s0 ethtool.coalesce-rx-usecs 100启用
ethtool.coalesce-adaptive-rx,同时ethtool.coalesce-rx-usecs设为其默认值:# nmcli connection modify enp1s0 ethtool.coalesce-adaptive-rx on修改 Adaptive-RX 设置,如下所示:
-
关注低延迟(低于 50us)的用户不应启用
Adaptive-RX。 -
关注吞吐量的用户可能启用
Adaptive-RX,而没有伤害。如果他们不希望使用自适应中断合并机制,他们可以尝试对ethtool.coalesce-rx-usecs设置大值,如 100us 或 250us 。 - 在出现问题前,不清楚自己需求的用户不应修改此设置。
-
关注低延迟(低于 50us)的用户不应启用
重新激活连接:
# nmcli connection up enp1s0
验证
监控网络性能并检查丢弃的数据包:
# ethtool -S enp1s0 NIC statistics: rx_packets: 1234 tx_packets: 5678 rx_bytes: 12345678 tx_bytes: 87654321 rx_errors: 0 tx_errors: 0 rx_missed: 0 tx_dropped: 0 coalesced_pkts: 12 coalesced_events: 34 coalesced_aborts: 56 ...rx_errors、rx_dropped、tx_errors和tx_dropped字段的值应该为 0 或接近 0(最多几百,取决于网络流量和系统资源)。这些字段中的高值表示网络问题。您的计数可以有不同的名称。仔细监控其名称中包含"drop"、"discard"或"error"的数据包计数。rx_packets、tx_packets、rx_bytes和tx_bytes的值应该随着时间而增加。如果值没有增加,则可能会有网络问题。数据包计数可以有不同的名称,具体取决于您的 NIC 驱动程序。重要ethtool命令输出可能会因使用的 NIC 和驱动程序而异。专注于非常低延迟的用户出于监控目的,可以使用应用程序级指标或内核数据包时间戳 API 。