第24章 ネットワーク決定のヒント
TCP はレイテンシーに大きな影響を及ぼす可能性があります。TCP は、効率を高め、輻輳を制御し、信頼できる配信を保証するためにレイテンシーを追加します。チューニング時には、以下の点を考慮してください。
- 順番どおりの配信が必要か。
パケットロスに対して保護する必要があるか。
複数回パケットを送信すると遅延が発生する可能性があります。
TCP を使用する必要があるか。
ソケットで
TCP_NODELAYを使用して Nagle バッファリングアルゴリズムを無効にすることを検討してください。Nagle アルゴリズムはすべてを一度に送信するために小さな送信パケットを収集するので、レイテンシーに悪影響を及ぼす可能性があります。
24.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 -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 100ethtool.coalesce-rx-usecsがデフォルト値に設定されている間、ethtool.coalesce-adaptive-rxを有効にします。# nmcli connection modify enp1s0 ethtool.coalesce-adaptive-rx onAdaptive-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 を使用できます。