34.12. 调优中断合并设置
中断合并是一种减少网卡产生的中断数的机制。通常,较少的中断可能会提高网络的延迟和整体性能。
调优中断合并设置涉及调整其控制的参数:
- 合并到单个中断的数据包数量。
- 产生中断前的延迟。
最佳合并设置取决于特定的网络条件和在使用的硬件。因此,可能需要多次尝试才能找到最适合您环境和需要的设置。
34.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 来进行监控。