なぜ SR-IOV vs DPDK をテーマに
5G ネットワークの三大特徴高速度、低遅延、多接続の中、高速度と低遅延を実現するために、Core & RAN の VNF / CNF が高いスループットと低遅延のネットワーク要件をクリアしなければいけません。
その要件を実現するための技術として、SR-IOV と DPDK がよく挙げられています。それぞれの定義および2つの違いと利用シーンはこちらの Blog と Intel さんの論文には詳しく記載されています。この Blog は私個人の勉強のためのメモとなります。
通常の VM のネットワークフロー
アプリは OS カーネルを通して VM vNIC からパケットを送出し、さらにハイパーバイザーの vSwith を経由して、最終的に物理サーバの NIC から外の物理ネットワークに出て行きます。受信する時も同じプロセスを経て受信します。
SR-IOV とは
SR-IOV (Single Root IO Virtualization) は物理 NIC が提供する仮想機能であり、1つの物理 NIC(PF)から複数の仮想 NIC(VF)を作り出し、直接 vNIC として VM にアサインする技術です。ハイパーバイザーも vNIC -> VF への PCI Pass Through をサポートしなければいけません。
SR-IOV を使う場合、ハイパーバイザーの vSwitch での処理が省かれるため、より高スループットと低遅延が実現されます。一方で、vSwitch が提供する運用に利便な機能(例えば vSphere VDS / vMotion)が使えなくなります。
※ vSphere 環境での SR-IOV 実装
DPDK とは
DPDK
DPDK(Data Plane Development Kit)はその名と通り、開発キットなので、アプリに組み込み型で高速通信を実現する技術です。
アプリが DPDK を使い、ネットワーク IO 処理をカーネルを飛ばして、直接 NIC 経由で外と通信します。
素の DPDK はアプリ向けの技術なので、サーバは VM / 物理マシンを問わないです。
DPDK + OVS
DPDK の特性を VM の世界で生かして、ハイパーバイザに内蔵する vSwitch と結合したのは DPDK + OVS です。
OVS も Linux ベースなので、DPDK を入れることによって、vSwith での処理もアプリ VM と同じように、カーネルを飛ばすことができます。
この場合、アプリには DPDK が入ってないですが、OVS の DPDK は OVS のパフォーマンスを上げられます。
※ vSphere + NSX-T の場合、NSX-T の Enhanced Data Path 機能を使い、N-VDS で DPDK が実装されます。(ただ、VM が DPDK を対応しないと、vSwitch のみの DPDK は性能改善の効果があんまりよくない)
※ NSX-T 3.2 Enhanced Data Path の実装
DPDK + OVS & VNF
アプリの DPDK と OVS の DPDK を併用することによって、VM のカーネルと vSwitch のカーネルを両方飛ばすことによって、更なる性能改善が期待できます。
DPDK vs SR-IOV
DPDK と SR-IOV は両方ともネットワーク処理性能を上げるための技術ですが、どれを使うべきかとの質問がよくあります。
NFV 環境において、ベアメタルに近い性能を追求するケースがよくありますので、SR-IOV がよく使われます。でも DPDK は SR-IOV と比べるともメリットがあります。
1つは DPDK が vSwitch の機能を影響しなく、運用に利便性を提供しつつ性能を上げることができます。
もう1つ、DPDK は vSwitch を使うので、VM-VM 間の E-W 通信は物理 NW に出ず、仮想 NW 内で完結することができ場合もありますので、特定のシナリオにおいて、SR-IOV より高い性能を出すことができます。
こちらの Intel さんの論文 は異なるシナリオにおいて、DPDK と SR-IOV の性能差異に関する検証結果を示しています。
逆に、N-S のトラフィックが多い場合、SR-IOV は著しい性能改善効果があります。
DPDK + SR-IOV
上記 DPDK と SR-IOV を比較しましたが、実は DPDK と SR-IOV 仕組み上コンフリクトしていないので、両方合わせて構成することもできます。
いわゆる、アプリ/VM レイヤに DPDK + ハイパーバイザレイヤに SR-IOV の組み合わせです。単独より組み合わせの方は改善効果が期待できます。
ただ、前章で比較されているのはハイパーバイザレイヤでの DPDK vs SR-IOV なので、こちらの組み合わせと前提が違うので、気を付けておく必要があります。
最後に
今回は SR-IOV と DPDK の概要、違いおよび利用シーンについてまとめました。CNF の場合も同じ考え方をシェアします。ただ、CNF の場合は Multus 等の実装方法も絡んで来るので、そこらへんは次回以降書いていきます。