DPDKによるパケット処理高速化イントロ
本記事では、自分が某通信会社研究所のサマーインターンで学んだことをシェアします。
クラウドネイティブ導入への期待
モバイルインフラにも、クラウドネイティブ導入の期待が高まっています。
従来のモバイルインフラでは、高いコストを支払って専用ハードウェアを調達しており、特定のベンダに依存してしまっているという背景がありました。
そこで近年では、NFVを用いた仮想化が導入され、汎用機器を用いたインフラの構築化が進められてきました。
しかし、単なる仮想化だけでは上手く行かず、以下が問題となってきます。
・管理コストの増大(物理リソースに加えて仮想リソースの管理が必要)
・仮想化によるパフォーマンスの低下
・運用が煩雑でスケールしない
そこでクラウドネイティブ技術を用いたオーケストレーションの導入により、これらの問題を解決したいというモチベーションがあるそうです。
とはいえ、クラウドネイティブの導入にも以下のハードルがあり、道のりは長そうです。
・既存機能のマイクロサービスへの分割
・仮想化によるパフォーマンスの低下
・技術が未成熟で変化が激しい
・テレコム独自のCI/CDサイクル設計が必要(普通のWebサービスとは異なる)
・現行のシステムからのシームレスな移行
ここでは、仮想化によるパフォーマンス低下を解決するための技術として、DPDKを紹介します。
なお、ホストマシンのOSとしてはLinuxを前提として話を進めます。
仮想化によるパフォーマンス低下とは?
そもそも、仮想化によるパフォーマンス低下とは何なのでしょうか?
Linuxカーネル+仮想マシンの構成では、NICから届いたパケットはまずカーネルで処理され、そこからユーザー空間のVMに渡されます。すなわち、通常の場合に比べてカーネル空間における処理のレイヤーごとの遅延が乗っかってきます。
大量のパケットを捌くモバイルインフラではこれは致命的であり、パケット処理高速化の必要性があるというわけです。
この問題のアプローチとしては、FPGAやASICによる専用ハードウェアを作成して処理をオフロードさせるという方法もありますが、ハードウェアの設計・実装には時間がかかります。
ソフトウェア的な解決方法として、カーネルモジュールを独自実装するか、高速パケットI/Oライブラリの利用があります。前者は辛いので、後者が採用されることが多いようです。
DPDKについて
DPDKは高速パケットI/Oライブラリの一つで、物理NICとアプリケーションをバイパスし,ユーザー空間からNICをポーリングして制御するものです。
メリットとしては、カーネルでの処理をスキップしてNICとアプリケーションを直接つなぐので、カーネルによる処理のオーバーヘッドを大幅に解消することが期待できます。
一方デメリットとして、以下の点が挙げられます。
・対応NICが限られる
・必要なパケット処理をユーザーが全て実装する必要あり
・NICに対して1コアが占有される
DPDKの動作確認がしたかった話
インターンはリモートだったので、GCEインスタンス上で動作確認を試みました。
以下のような検証アーキテクチャを考えました。
結論から言えば、上手く動きませんでした...
高速化のベンチマークなど出したかったのですが、GCEの内部構成はブラックボックスな部分が多く、あまり色々触れる感じではありませんでしたね汗
とはいえ、雰囲気だけは掴めました。
以下のように、DPDKの起動によりコアが占有されることは確認できました。(vCPU×4のインスタンス)
具体的には、物理NICに触れず仮想NICに対して検証を試みたのですが、
・Promiscuousモードが無効でパケットフォワーディングできない
・アタッチするドライバによってカーネルパニックが起きる
など困難が多かったです(?)
少なくとも、DPDKはパブリッククラウドで使うものじゃないな〜という所感は得られました。
その他の考察としては以下の通りです。
・シングルコアでの性能は高そう、分散処理には疑問
・Hugepage上にバッファを置くので潤沢なメモリが必要
・コアを占有してしまうので、 利用率が低い場合はもったいない
いつか物理サーバーを構築してリベンジしたいです。
参考
[1]「ネットワーク仮想化の技術動向」, KDDI総合研究所, 2019年7月 https://www.soumu.go.jp/main_content/000633422.pdf
[2]「パケット処理の独自実装や高速化手法の比較と実践」, 海老沢・日下部, 2020年1月 https://www.janog.gr.jp/meeting/janog45/program/pktfwd
[3] 「情報畑で捕まえて」DPDK関連記事, 2019年9月18日アクセス https://www.ntt-tx.co.jp/column/DPDK.html