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 キュー、モジュールパラメーター、アダプターオフロード、ジャンボフレーム、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」 を参照してください。