概要
Linuxネットワークスタック全体の構成要素と最適化ポイントを解説。 仮想化やLinuxコンテナ、ネットワークソケットからデバイスドライバまで網羅。 各層ごとに最適化や統計取得のヒントを紹介。 Ericsson Nikola Teslaによる図解資料の内容を要約。 参考文献:『Operativni sustavi i računalne mreže - Linux u primjeni』。
Linuxネットワークスタック全体図の解説
- Linuxネットワークスタック の全体構成図
- 仮想化 および Linuxコンテナ のサポート
- エミュレーション と パラバーチャライゼーション の技術
- ネットワークソケット の役割
- ネットワークスタック上位層
- TCP および UDP プロトコルの処理
- ネットワークスタック下位層
- GRO (Generic Receive Offload)、 RPS (Receive Packet Steering)、 RFS (Receive Flow Steering)、 GSO (Generic Segmentation Offload)の利用
- ネットワークスケジューラ によるパケット処理の最適化
- NetFilter および トラフィック制御 機能
- Bridge インターフェース、 Bond インターフェースの実装
- Tapインターフェース などの仮想ネットワークデバイス
- デバイスドライバ層
- キュー 管理、 NAPI (New API)、 IRQハンドラ
- NICによるネットワーク機能のハードウェアオフロード
- Checksum offload、 VLAN、 VxLAN、 GRE、 TSO (TCP Segmentation Offload)、 LRO (Large Receive Offload)、 RSS (Receive Side Scaling)
- ネットワークカード 自体の役割
- 各層での 最適化ポイント や 統計情報取得 のヒント
各層の最適化・統計取得のヒント
- 仮想化/コンテナ
- オーバーヘッド削減のため パラバーチャライゼーション 推奨
- ネットワークネームスペース 利用による隔離性向上
- ネットワークソケット
- SO_REUSEPORT オプションでスケーラビリティ向上
- 非同期I/O の活用による遅延削減
- 上位プロトコル層(TCP/UDP)
- TCPウィンドウサイズ と バッファ設定 の最適化
- UDPバッファ の監視と調整
- 下位プロトコル層(GRO/RPS/RFS/GSO)
- GRO/GSO でパケット分割・結合の効率化
- RPS/RFS でマルチコア最適化
- ネットワークスケジューラ
- qdisc(キューイングディシプリン) の選択とチューニング
- NetFilter/トラフィック制御
- iptables/nftables ルールの最小化でパフォーマンス向上
- tc コマンドによる帯域制御
- デバイスドライバ層
- NAPI による割り込み負荷の軽減
- IRQバランス の最適化
- NICオフロード機能
- ethtool で各種オフロード設定の有効化
- ハードウェアVLANタギング の活用
- 統計情報取得
- /proc/net/dev や ethtool -S でインターフェースごとの統計確認
- nstat や ss コマンドによる詳細なネットワーク統計
参考文献・資料
- Operativni sustavi i računalne mreže - Linux u primjeni
- DOI: https://doi.org/10.5281/zenodo.8119310
- Linux Network Stack - EN.pdf (5.4 MB)
- Ericsson Nikola Tesla による詳細解説