サウス IDC
PRACTICAL ENGINEERING · TUTORIAL

Linuxカーネルネットワークスタックの100GbEラインレート最適化――XDP/eBPFによるDDoS防御とIRQアフィニティ調律

2026-11-04 | サウス IDC インフラ運用チーム
概要:100Gbps回線が直結されたエッジルータやキャッシュノードにおいて、標準設定のLinuxカーネルは毎秒数百万パケット(Mpps)のトラフィックで容易にCPUボトルネックに陥る。本稿では、Mellanox ConnectX / Intel E810 NICを前提に、NICリングバッファの拡大、マルチキューIRQのCPUコア固定(SMP IRQ Affinity)、およびXDP(eXpress Data Path)を用いたカーネル前段ドライバ層での毎秒1,500万パケットDDoSドロップフィルタの実装実務を詳解する。

1. NICハードウェアリングバッファとOffload機能の最適化

ethtool -G を用いてRX/TXリングバッファを最大値(通常4096)まで拡張し、トラフィック急増時のバッファ枯渇パケットロスを抑止する。さらにGRO(Generic Receive Offload)、GSO、TSOが正しく有効化されていることを確認し、ethtool -C によるパケット合流割り込み適応型調律(adaptive-rx on)を設定して割り込みストームを低減する。

2. マルチキューIRQのNUMAノード整合とCPUコア分離

NICが接続されたPCIeスロットのNUMAノードを lspci -v で特定し、そのNUMAノードに属する物理CPUコアにのみNICの受信割り込み(IRQ)をバインドする。irqbalance デーモンを停止し、各キューの /proc/irq/{IRQ}/smp_affinity を1対1で独立した物理コア(ハイパースレッディングの兄弟コアを避ける)に固定することで、コア間キャッシュコヒーレンシ損失を根絶する。

3. XDP (eXpress Data Path) によるドライバ層での超高速パケット破棄

Linuxのsk_buff構造体アロケーションが行われる前段階(NICドライバ層)でパケットを評価するXDPプログラムをコンパイル・ロードする。SYNフラッド、DNSアンプ攻撃、未許可IPからのUDPパケットを判定し、XDP_DROP でミリ秒未満に破棄する。実測ベンチマークにおいて、単一CPUコアあたり1,400万パケット/秒のワイヤスピードフィルタリングを達成できる。

← チュートリアル一覧に戻る