Red Hat Training
A Red Hat training course is available for RHEL 8
34.12. 割り込み結合設定のチューニング
割り込み結合は、ネットワークカードによって生成される割り込みの数を減らすためのメカニズムです。一般に、割り込みが少なくなると、ネットワークのレイテンシーと全体的なパフォーマンスが向上します。
割り込み結合設定のチューニングには、以下を制御するパラメーターの調整が含まれます。
- 1 つの割り込みに結合されるパケットの数。
- 割り込みを生成するまでの遅延。
最適な結合設定は、特定のネットワーク条件と使用しているハードウェアによって異なります。したがって、環境とニーズに最適な設定を見つけるには、何度か試すことが必要な場合があります。
34.12.1. 遅延またはスループットの扱いに注意が必要なサービス向けに RHEL を最適化する
結合チューニングの目標は、特定のワークロードに必要な割り込みの数を最小限に抑えることです。高スループットの状況では、高いデータレートを維持しながら、割り込みをできるだけ少なくすることが目標となります。待ち時間が短い状況では、より多くの割り込みを使用してトラフィックを迅速に処理できます。
ネットワークカードの設定を調整して、1 つの割り込みに結合されるパケットの数を増減できます。その結果、トラフィックのスループットまたは遅延を向上させることができます。
手順
ボトルネックが発生しているネットワークインターフェイスを特定します。
# 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
が無効になっている間に、RX パケットの割り込みを生成するまでの遅延を 100 マイクロ秒に設定するようにethtool.coalesce-rx-usecs
を設定します。# nmcli connection modify enp1s0 ethtool.coalesce-rx-usecs 100
ethtool.coalesce-rx-usecs
がデフォルト値に設定されている間、ethtool.coalesce-adaptive-rx
を有効にします。# nmcli connection modify enp1s0 ethtool.coalesce-adaptive-rx on
Red Hat では、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 またはそれに近い値 (ネットワークトラフィックとシステムリソースに応じて最大数百まで) である必要があります。これらのフィールドの値が高い場合は、ネットワークに問題があることを示します。カウンターには異なる名前を付けることができます。名前に "drop"、"discard"、または "error" を含むパケットカウンターを注意深く監視します。rx_packets
、tx_packets
、rx_bytes
、およびtx_bytes
の値は時間の経過とともに増加します。値が増加しない場合は、ネットワークに問題がある可能性があります。パケットカウンターは、NIC ドライバーに応じて異なる名前を持つことができます。重要ethtool
コマンドの出力は、使用している NIC とドライバーによって異なる場合があります。極めて低いレイテンシーを重視するユーザーは、監視目的でアプリケーションレベルのメトリクスまたはカーネルパケットタイムスタンプ API を使用できます。