5 ポイント 投稿者 GN⁺ 2024-07-29 | まだコメントはありません。 | WhatsAppで共有

Linux ネットワーキングスタック

Linux ネットワークパケット受信

  • ネットワークデバイスでは、NIC(Network Interface Card)がパケットの到着を通知するために IRQ(Interrupt Request)を発生させる
  • IRQ ハンドラは非常に高い優先度で実行され、追加の IRQ 生成を遮断する
  • softIRQ システムは、デバイスドライバの IRQ コンテキスト外で処理を行うために使用される
  • softIRQ カーネルスレッドが生成され、softnet_data 構造体が作成される
  • NIC は、ネットワークデータが RAM 上のリングバッファに書き込まれるよう DMA(Direct Memory Access)を使用する
  • NAPI softIRQ ポーリングループが開始される
  • net_rx_action ループが NAPI 構造体を確認し、パケットを napi_gro_receive に渡す
  • パケットは netif_receive_skb を通じてプロトコルスタックへ渡される

Linux カーネルのネットワーク送信

  • アプリケーションがメッセージを送信すると TCP ヘッダが作成され、L3 ハンドラが呼び出される
  • パケットがフラグメント化され、L2 送信関数が呼び出される
  • ドライバがパケットを tx リングバッファにキューイングする
  • NIC が RAM からパケットを取得して送信する
  • 送信が完了すると NIC がハード IRQ を発生させる
  • ドライバがこの IRQ を処理し、NAPI ポーリングシステムをスケジューリングする

ネットワーク性能チューニング

クイック HOWTO

/proc/net/softnet_stat & /proc/net/sockstat
  • /proc/net/softnet_stat ファイルは各 CPU コアの統計を提供する
  • /proc/net/sockstat ファイルはソケット使用統計を提供する
ss
  • ss はソケット統計を調査するユーティリティで、メモリ使用量を確認できる
netstat
  • netstat はネットワーク接続およびプロトコルスタック統計を提供するコマンドラインユーティリティである
sysctl
  • sysctl コマンドを使ってシステム/ネットワーク設定を変更できる
  • /etc/sysctl.conf ファイルを編集することで値を永続的に変更できる

NIC リングバッファ

  • NIC リングバッファは固定サイズの FIFO バッファで、RAM 上に配置される
  • バースト接続を円滑に受け入れるため、このキューを増やす必要がある

GN⁺の要約

  • このガイドは Linux ネットワークスタックの動作方式を詳しく説明し、ネットワーク性能を最適化するためのさまざまな方法を提示している
  • ネットワークパケットの受信および送信過程で発生する IRQ と softIRQ の役割を理解することが重要である
  • sysctl コマンドを使ってシステム設定を調整し、NIC リングバッファのサイズを調整することで性能を向上できる
  • ネットワーク性能チューニングはシステム固有の要件によって異なる可能性があり、さまざまな設定を試してみる必要がある

まだコメントはありません。

まだコメントはありません。