31.12. 调整中断合并设置
中断合并是一种减少网卡产生的中断数量的机制。通常,较少的中断可能会提高网络的延迟和整体性能。
调整中断合并设置涉及调整控制的参数:
- 合并成一个中断的数据包的数量。
- 产生中断前的延迟。
最佳合并设置取决于使用的特定网络条件和硬件。因此,可能需要进行一些尝试,来找到最适合您的环境和需要的设置。
31.12.1. 为延迟或吞吐量敏感服务优化 RHEL
合并调优的目标是最小化给定工作负载所需的中断的数量。在高吞吐量情况下,目标是尽可能有少的中断,同时保持高数据率。在低延迟情况下,可以使用更多的中断来快速处理流量。
您可以调整网卡上的设置,以增加或减少组合成一个中断的数据包数。因此,您可以提高流量的吞吐量或延迟。
流程
识别遇到瓶颈的网络接口:
# 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 enp1s0 Settings for enp1s0: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supported pause frame use: No Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised pause frame use: No Advertised auto-negotiation: Yes Speed: 1000Mb/s Duplex: Full Port: Twisted Pair PHYAD: 0 Transceiver: internal Auto-negotiation: on MDI-X: Unknown Supports Wake-on: g Wake-on: g Current message level: 0x00000033 (51) drv probe link Link detected: yes
在此输出中,监控
Speed
和Duplex
字段。这些字段显示有关网络接口操作的信息,以及它是否以预期的值运行。检查当前的中断合并设置:
# 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 。
其他资源
- 对任何性能问题的初始调查
- 用于网络调优的内核参数是什么?(红帽知识库)
- 如何使 NIC ethtool 设置持久(在引导时自动应用)(红帽知识库)
- 时间戳