Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第9章 ネットワーク

ネットワークサブシステムは、精度の高い接続で多くの異なるパーツから形成されています。したがって Red Hat Enterprise Linux 7 のネットワークはほとんどの作業に最適なパフォーマンスを提供し、またそのパフォーマンスを自動的に最適化するよう設計されています。このため通常は手作業によるネットワークパフォーマンスのチューニングは必要ありません。本章では実用的なネットワーク設定のシステムに適用可能な最適化について説明しています。
ネットワークパフォーマンスの問題は、ハードウェアの誤作動やインフラストラクチャーの障害が原因であることがあります。これらの問題の解決については、本書では扱いません。

9.1. 留意事項

チューニングに関して適切な決定をするには Red Hat Enterprise Linux のパケット受信について十分に理解しておく必要があります。本セクションではネットワークパケットの受信と処理について、また障害が発生しやすい箇所について説明しています。
Red Hat Enterprise Linux システムへ送信されるパケットはネットワークインターフェイスカード (NIC) で受信され、内蔵ハードウェアバッファーまたはリングバッファーのいずれかに置かれます。次に NIC によりハードウェア割り込み要求が送信され、その割り込み要求を処理するソフトウェア割り込み動作の作成が求められます。
ソフトウェア割り込み動作の一部としてパケットがバッファーからネットワークスタックへ転送されます。パケットおよびネットワークの設定に応じてパケットは転送または破棄されるかアプリケーションのソケット受信キューに渡され、ネットワークスタックから削除されます。このプロセスは、NIC ハードウェアバッファーにパケットがなくなるか、特定のパケット数( /proc/sys/net/core/dev_weightで指定)が転送されるまで継続されます。
Red Hat カスタマーポータルで利用可能な Red Hat Enterprise Linux Network Performance Tuning Guide には、Linux カーネルでのパケット受信に関する情報が含まれ、NIC チューニングの SoftIRQ ミス(netdev budget)、tuned チューニングデーモン、numad NUMA デーモン、CPU 電源状態、割り込み分散、一時停止フレーム、割り込み結合などを説明します。 アダプターキュー(netdev バックログ)、アダプター RX および TX バッファー、アダプター TX キュー、モジュールパラメーター、アダプターオフロード、Jumbo Frames、TCP および UDP プロトコルのチューニング、および NUMA 局所性。

9.1.1. チューニングを行う前に

ネットワークパフォーマンス関連の問題はほとんどの場合ハードウェアが正常に機能していないかったり、インフラストラクチャーが不完全であることが原因で発生します。ネットワークスタックのチューニングを行う前に、まずハードウェアおよびインフラストラチャーが期待通りに動作しているか必ず確認されることを強く推奨しています。

9.1.2. パケット受信におけるボトルネック

ネットワークスタックは大幅に自己最適化されていますが、ネットワークパケットの処理中にはボトルネックとなり、パフォーマンスが低下する可能性のあるポイントが多数あります。
NIC ハードウェアバッファーまたはリングバッファー
大量のパケットがドロップされるとハードウェアバッファーがボトルネックとなる場合があります。ドロップされたパケットを監視する方法については、「ethtool」 を参照してください。
ハードウェアまたはソフトウェアの割り込みキュー
割り込みにより、レイテンシーやプロセッサーの競合が増大する可能性があります。プロセッサーで割り込みがどのように処理されるかについては、「IRQ (Interrupt Request ー 割り込み要求) の処理」 を参照してください。システムで割り込み処理を監視する方法については、「/proc/interrupts」 を参照してください。割り込み処理に影響を与える設定オプションについては、「AMD64 および Intel 64 での割り込み親和性の設定」 を参照してください。
アプリケーションのソケット受信キュー
アプリケーションの受信キューのボトルネックは、要求元のアプリケーションにコピーされない多数のパケット、または /proc/net/snmp の UDP 入力エラー(InErrors)の増加によって示されます。こうしたエラーを監視する方法については、「ss」 および 「/proc/net/snmp」 を参照してください。