...

サーバーのパケット処理パイプライン:ホスティング・ネットワークにおける最適化

ホスティング・ネットワークでは、パケット処理パイプラインは、以下のことを決定する。 レイテンシー, スループットとコストイングレスからイグレスまでのすべてのステップを最適化することで、パケットをより速く到着させ、CPUの占有を減らし、コストを削減します。 ホスティング遅延 が減少する。この記事では、サーバー、スイッチ、リナックス・ネットワーク・スタックについて、優先順位、測定ポイント、実用的なレバーを含む明確な手順を示す。.

中心点

  • イングレス とヘッダーの解析:早期の決定がCPU時間を節約する
  • ルーティング とECMP:正しいハッシュが並び替えを防ぐ
  • 再注文-エンジンとMTU:フローごとに一貫したシーケンス
  • リナックス-ファストパス:ゼロコピー、オフロード、eBPF
  • プログラマブル パイプライン:P4、GPU、NPU

小包がサーバーを流れる仕組み

入ってくる小包はまず イングレス-処理:最初の~128バイトを解析し、ペイロードを効率的にメモリに格納し、コピ ー作業を減らしてから決定を下す(出典: [1])。この後、IPv4/IPv6の最長プレフィックスマッチかL2ルックアップが行われる。 スタティックランダムアクセスメモリ-テーブルを使用してネクストホップを決定する(出典: [1])。ネクストホップ処理はポート、ECMP/LAGパスを選択し、必要なMPLSラベル処理を実行することで、パイプラインがより多くのスループットを生み出す(出典: [1])。ポリシングとカウンタが早い段階で有効になるため、クリティカルなパスの速度を落とすことなく、負荷をコントロールし、パケット統計が意味のあるものになる(出典:[1])。フロー内のパケットに異なるパスが発生した場合、正しい順序を確立するためにリオーダーエンジンを使用する。 ホスティング遅延 安定している(出典:[1])。.

ホスティングにおけるLinuxネットワークスタック

時点では ネットワーク スタックLinuxでは、NICはカーネルをトリガーする割り込みをトリガーする。私は割り込みの嵐を避けるためにNAPIポーリングを使用し、バッチでパケットをフェッチする(出典: [9])。ドライバはフレームをネットフィルタとルーティングに渡し、そこでフィルタ、NAT、フォワーディングルールを設定し、必要なパスだけが有効になるようにすることで、CPUの使用量を減らしている(出典:[9]、[11])。ゼロコピーメカニズムやファストパスバイパスはホットパスを高速化し、GRO/LROのようなオフロードはレイテンシが重要なフレームに対して並び替えのリスクを伴わずに的を絞った効果を発揮する。 フロー (出典:[11])。100Gbps以上の場合、私はNPUをホストスタックと並ぶ特殊なハードウェアとして計画し、ホストが本当に必要なタスクだけを引き受けるようにしています(出典:[13])。詳細は以下の通りです。 割り込み合体 P99のレイテンシーを悪化させないように、パケットサイズとバーストプロファイルによって調整している。.

XDP、DPDK、ユーザースペースのバイパスの比較

特にホットなパスの場合、私は意図的にカーネル高速パスとユーザー空間スタックのどちらかを選択する。. XDP (AF_XDPを含む)によって、ドライバの非常に早い段階でパスを短縮したり、フレームを破棄したり、専用のキューにルーティングしたりすることができる。. DPDK 一方、カーネルをほぼ完全にバイパスし、キューをプロセスのみにバインドすることで、計算されたCPU負荷で最高のパケット・レートを達成しますが、クリーンな分離、巨大なページ、厳格なNUMA規律を必要とします(出典:[13])。.

  • XDP/AF_XDP:高速、柔軟、カーネルに近い。フィルター、サンプリング、ライトフォワーディングに適している。.
  • DPDK:最大限の制御とパフォーマンス。明確なSLOを持つゲートウェイ、VNF、プロキシ・サービスに最適。.
  • 組み合わせ:「コールド」なパスはカーネルに残し、ホットなパスはeBPF/XDPでウォームアップするか、専用のDPDKパイプラインにアウトソースする。.

実際には、必要なオフロード、ライブデータの可視性、フローごとのレイテンシSLO、デプロイとデバッグのための運用コストなどを評価する。決定的な要因は ホスティング遅延 はどちらの世界でも安定しており、観測可能性はeBPF、カウンタ、ppsメトリクスによって維持される(出典:[11]、[13])。.

ホスティング・レイテンシの目標削減

ECMPハッシュを5タプルと キュー フロー単位(出典:[1])。柔軟なパイプラインが異なるパケットを処理する場合、フローまたはポートごとのリオーダーエンジンは一貫した順序付けを保証し、リオーダーに必要な時間を著しく短縮します。 レイテンシー (出典: [1])。クラウドのセットアップでは、MTUが物事を遅くする傾向があります。プライベートネットワークでは、フラグメントを発生させずにトンネリングが安定的に実行されるように、1450バイトで動作することがよくあります(出典:[4])。ホストまたはゲートウェイがMTUを調整しない場合、ICMPの問題や再送のリスクがあり、その結果p95の異常値が発生します。したがって、私はかなり早い段階でパスのMTUとトンネルヘッダをチェックします(出典:[4])。過負荷に対しては、レート制限、バーストおよびキュー管理によるトラフィック・シェーピングを使用し、輻輳を減らし、ドロップを予測可能にします(出典:[11])。.

キューイング、スケジューリング、ECN

エグレスでは、私は適切な判断をしている。 キューディスク 待ち時間とドロップ。マルチキューNICの場合、私は ムクプリオ を基本フレームワークとし、それを fq 或いは fq_codel, ショートフローに有利でバッファーブロートを抑える。. ECN DCTCPのような作業負荷のデータセンターでは、ハードドロップを発生させることなく、p99のピークが大幅に低下する(出典:[11])。.

  • ボトルネックが発生する前にエグレスシェーピングを行うことで、輻輳を抑制し ホスティング遅延 は予測可能なままだ。.
  • NIC(ETS/DCB)内の優先度とトラフィッククラスのマッピングにより、メモリやレイテンシが重要なフローを保護。.
  • 侵入ポリサーを端に寄せて、キューを溜める前に逃走を断つ。.

柔軟でプログラム可能なパイプライン

プログラミング P4 FPGAや特殊なASICが直接実行できるマッチアクションテーブルについて説明する(出典:[3])。ハイブリッド・メモリー・キューブを使用した環境では、プロトタイプは1チャネルあたり約30Mppsを達成し、ヘッダーの多いワークロードを大幅に軽減した(出典:[3])。セントラルオフィスの設計では、リジッドパスをMPLS-SR/IPパイプラインに置き換え、MACアドレスのイグレステーブルを効率的に利用することで、フローを細かく制御しています(出典:[7])。GPUは標準化されたオペレーションを並列処理し、利用可能なRAMを効率的に使用することで、特定の構文解析と分類タスクを高速に実行します(出典:[5])。Linux側のホットパスの絞り込みには イービーピーエフ リブートすることなく、フィルター、テレメトリー、最小限のアクションをカーネル・パスに取り込む。.

ホスティングにおけるネットワーク・アーキテクチャ

私は、スケーリングが優先され、東西トラフィックが広範囲に分散している場合、3層トポロジー(コア、ディストリビューション、アクセス)を計画している(出典:[2])。コラプス・コア・レイアウトはルーティングを束ね、プロトコルの多様性を減らし、ポートを節約します。 効率性 (ソース: [2])。ファイアウォールやWLANコントローラなどのサービスについては、EVPNを使用してIPアンダーレイ経由でレイヤー3のサービスをクリーンに提供している(出典:[2])。高可用性を実現するには、コンポーネントの二重化とクリーンなフェイルオーバー・パスが必要です。 ダウンタイム (出典:[6]、[10])。APIと仮想化はプロビジョニングを加速させる。これが、私が自動化を良いおまけではなく、義務と考える理由である(出典:[8])。.

実際の最適化ステップ

ヘッダーファーストのパースから始めて、早い段階で判断し、ペイロードを メモリ を必要なときだけ実行する(出典: [1])。トンネルのワークロードについては、カプセル化されたパケットが正しく実行され続けるように、ヘッダーストリップの後に2回目のパイプラインパスをスケジュールする(出典:[1])。を最適化するために、ECMP/LAGハッシュを5タプルにチューニングし、テレメトリーで並び替え率とout-of-sequenceドロップをチェックする。 ホスティング遅延 低い(出典:[1])。NICとカーネル側でバッチ処理を行うことで、システムコールのオーバーヘッドを減らし、バーストバッファを選択することで、短いフローが空白になるのを待たないようにしている。カウンタとポリサーを使うことで、高価なメモリ・アクセスを最小限に抑えるが、後で解析の信頼性を維持できるよう、十分なログを記録する。.

測定 待ち時間への影響 スループットへの影響 CPU要件 ヒント
ヘッダーファースト解析 低いer p95/p99 小包装で増加 部数減による減少 必要な場合のみペイロードに触れる
5タプルのECMPハッシュ 並び替えが少ない スケール いくつかの経路で 最小限 デバイス間でハッシュの一貫性をチェック
フローごとの再注文エンジン 安定したシーケンス 一定 微増 フレキシブルなパイプラインに便利
トンネルのMTU 1450 断片化の減少 一定 より良い 変わらず パスMTUディスカバリーの確保
ゼロコピー/バイパス 著しく低い かなり高い シンク/パッケージ 適切なフローでのみ作動

測定可能な効果を持つカーネルとドライバーのチューナブル

パイプラインをシャープにするために、カーネルとドライバーの設定を慎重に調整し、すべての変更をp50/p95/p99(出典:[11])でクロスチェックする。.

  • ethtoolを使用してRX/TXリングサイズを選択し、バーストはバッファリングされるが、レイテンシが不必要に長くならないようにする。.
  • net.core.rmem_max/wmem_maxを使用し、RTTの長いパスがスロットルしないようにTCPバッファを設定する。.
  • GRO/LROは並べ替えのリスクがない場合にのみ作動させ、小規模なインタラクティブ・フローではテストとして作動させない。.
  • 選択したソケットでビジー・ポーリング(sk_busy_poll)を使用することで、システムを „焼き尽くす “ことなく、マイクロ秒単位で利益を得ることができる。.
  • 合体パラメータの微調整:適度なバッチサイズ、トラフィックプロファイルごとの動的調整(出典:リンク先の記事)。.

NICキュー、フローステアリング、ハッシュ一貫性

私は、キャッシュの局所性と並び替えの自由度が維持されるように、フローを一貫してコアとキューに向ける。. RSS/RPS/RFS とXPSの送受信CPUがフローごとに一致するようにしている。ハッシュキー(Toeplitz)とシードを制御することで、リブート時に不要なマイグレーションを引き起こすことなく、負荷分散が安定するようにしている。必要に応じて、特殊なフローをキューにハードピンするために、ntuple/flowerルールを設定する(出典:[1]、[11])。.

CPU、NUMA、メモリのパスをシャープにする

ホスト上では、IRQとRX/TXキューを適切なものにバインドする。 CPU-キャッシュのローカリティとNUMAの所属が正しくなるように、RSS/RPS/RFSをコアに分散させる。RSS/RPS/RFSは、フローが一貫して同じコアに着地し、ロックリテンションが待ち時間を発生させないように分散させている。巨大なページとワーカーのピン留めによってTLBのミスを回避し、選択されたオフロードによって高価なソフトウェアパスを節約する。微調整には 割り込み処理 合体、バッチサイズ、レイテンシSLOの適切なバランスで。キューごとにp50/p95/p99を別々に測定することで、外れ値が平均値で失われないようにしています。 ホスティング遅延 は信頼できる。

正確なレイテンシーのための時間と同期

クリーンなレイテンシ測定には、正確なタイムベースが必要です。私はPTP/ハードウェアのタイムスタンプを使用し、ホストを綿密に同期させ、TSCの安定性を検証している。これが、p99のピークとIRQ負荷、キュー満杯レベル、ECNイベントとの相関を信頼できる唯一の方法です。正確なペーシングのために、私は高解像度タイマーを使用し、電源管理(Cステート)が不規則なウェイクアップ時間を発生させないようにしている。 ホスティング遅延 マイクロバーストの場合(出典:[11])。.

ホスティングにおける仮想化とオーバーレイ

仮想化環境では、私はvhost-net、vhost-vDPA、SR-IOVのいずれかを選択します。パフォーマンスを最大化するために、VFキューをVM/コンテナに直接バインドするが、アイソレーションとライブマイグレーション要件に注意する。ただし、分離とライブ・マイグレーションの要件には注意が必要です。 OVS/TC-パイプラインに基づき、マッチとアクションがNICに着地し、ホストスタックが緩和されるようにオフロード機能をチェックする。オーバーレイ(VXLAN/GRE/Geneve)を、保守的なMTU、一貫したECMPハッシュベース、アンダーレイパスの明確なモニタリングで計画し、フラグメンテーションとリオーダリングを早い段階で認識する(出典:[4]、[8]、[11])。.

交通管理と保護

私は区画を以下のように分類している。 イングレス, 私はシェーピングを使用し、過密キューが発生するのを未然に防ぐために早期にポリシーを設定する(出典: [11])。一貫してネットフィルターのルールを半減させ、ヒット率のルールをテストして、コールドパスを除去し、ディシジョン・レイテンシーを減らしている(出典:[9])。ローカル・サービスが不必要に高価なパスに傾かないように、ローカル・デリバリーとフォワーディングの間のルーティングを意識的に選択している(出典:[11])。きれいなレート制限ロジックと事前に定義されたドロップ戦略は、ボリュメトリック・アタックを防ぐのに役立ち、正当な トラフィック スペア。握手攻撃には、スリムな SYN洪水防御 を高速パスに入れて、接続を適切なタイミングでスローダウンさせる。.

日常生活におけるトランスポート・プロトコルとオフロード

私は、待ち時間のピークを調整し、スループットを安定させるトランスポート機能を使用しています:fq経由のTCPペーシング、最新の輻輳制御(RTTプロファイルに応じてBBR/CUBICなど)、アンダーレイが許可していればECNなどです。. kTLS および暗号オフロードは、追加のコピーを強制することなく、接続数が多い場合に CPU の負荷を顕著に軽減する。サイト間トラフィックの場合、IPsecオフロードまたはTLS終端をエッジの近くで計算することで、ホストCPUがアプリケーション・ロジックのためのヘッドルームを確保できるようにしている(出典:[11])。QUICは、クリーンなECMPハッシュと安定したパスMTUの恩恵を受けている。 ホスティング遅延 は計算可能である。.

運転中の測定と観測可能性

私は、インターフェイスとフローグループごとに、ドロップカウンタ、キュー長、リオーダークォータを記録しています。 原因 eBPFプログラムは、ホットパスにほとんど干渉しない軽量のプローブを提供し、意思決定ポイントのための正確なメトリックを提供する。 私は、p99のレイテンシをIRQ統計およびバッチサイズと相関させ、合体および応答時間のバランスを微調整している。トンネルについては、カプセル化の有無によるレイテンシーの比較、MTUイベントのチェック、ICMP到達性の定期的な検証を行っている(出典:[4])。結果をランブックに変換することで、構造化された方法で変更を展開し、再現性のある結果を得ることができます。 効果 を達成する。

テスト戦略、ロールアウト、リスクの最小化

本番ネットワークでスイッチを入れる前に、再現可能なテストがあることを確認する。シンセティック・ジェネレーターは制御された負荷プロファイル(小パケット、バースト、混合RTT)を提供し、A/Bとカナリアは実際のユーザー・パスを検証する。オフロード、合体、新しいECMPハッシュを段階的にオンにし、P99とエラー率をモニターし、明確なロールバックパスを定義する。ランブックはシーケンス、期待されるカウンター値、キャンセル基準を記録する。 ホスティング遅延 が変更された場合にも制御することができる(出典:[8]、[11])。.

典型的なボトルネックと迅速な解決策

小さなパケットでp95のレイテンシーが上がる場合、私はまず最初にチェックする。 合体, バッチサイズとRXキューの分布。カプセル化中にドロップが増えた場合は、スケジューラに行く前にMTUとフラグメンテーションをチェックする(出典:[4])。フローがスループットを失った場合は、ECMP/LAGのハッシュ整合性をチェックし、リオーダーエンジンが不必要にトリガーされないことを検証する(出典:[1])。CPUのピークが発生した場合は、オフロードを選択的に停止または調整し、追加のコピーや並べ替えが発生しないようにする。カーネルパスがボトルネックのままであれば、ゼロコピー・バイパスを検討し、選択的に測定する。 p99-値。.

簡単にまとめると

高性能サーバー パケット 処理パイプラインは、イングレスの明確な決定、予測可能なルーティング、クリーンなイグレスの結果であり、待ち時間のピークを平滑化するリオーダーとシェーピングのロジックと対になっている。Linuxスタックでは、CPUが負荷のピークに対処し、p99が安定した状態を維持できるように、NAPI、ネットフィルタの衛生、ゼロコピー、ウェルドーズド合体などが重要である。P4、eBPF、GPU、NPUは、スループットと柔軟性を高める必要があり、標準パスが限界に達したときの選択肢を広げる。3ティア、EVPN、一貫したMTUなどのアーキテクチャ上の問題は、基礎を確保し、テレメトリーは、私がどこに向かえばよいかを時間通りに示してくれる。これらのビルディング・ブロックを体系的に組み合わせることで、以下のことが削減される。 ホスティング遅延, メンテナンスと運用を混乱させることなく、スループットを向上させ、既存のハードウェアをさらに活用することができます。.

現在の記事