2012年、いよいよ来るか?SRIOV (Single Root I/O Virtualization)

最近SRIOV (Single Root IO Virtualization)を触る機会があったので今日はその話。
最初に結論を言うとかなりちゃんとパフォーマンスがでるので仮想化環境でいけそうな気配だ。

今日は最初にそもそもSRIOVって何?て人もいると思うのでこの辺りから話を始めよう。
一言で言えばVirtual Machineのスループットと遅延を大幅改善するテクノロジー

下の動画をまずは見ていただきたい。

要点を抽出すると、
– SRIOVのSingle Rootとは「1台のサーバーで 」という意味。
(Multi-Rootとなれば「複数台のサーバーで」となる。 )

– 通常の仮想化環境の場合、NICに到達したパケットが当該VMへ到達するまでに
Kernelのところで何度もCPUのインタラプト、Memory間でコピーがかかってしまう。
(動画でマスコットが前後に動いて、パケットを受け渡ししてたのがその意味。)

–  すると当然VMからみればパケット処理に時間がかかってしまうわけで、ユーザーから見ればスループットがでない、内部遅延が大きいという体感になってしまう。なので10Gb NICを
入れても使い切れないのが現状。

– SRIOVのいいところは、VMに対して直接ドライバーを割り当てる。(Virtual Functionといっていた機能)逆に言うとVMがPCIeをすっ飛ばして直接HWからデータの送受信が可能になる。(動画ではKernelのCPU Interuptが全く起こらないこととして表現されている)
なので、余計なインタラプトやコピーがなくなるので仮想化環境でスループットや遅延が大幅に改善されるというのがポイント。

さて、実は動画ではしっかり語られていないひじょーーーに重要なポイントがあります。
それは、、、、使っているサーバーのBIOSがそもそもこのSRIOV対応か否か、ということ。

このSRIOV、既に標準化は完了しており以下3点のBIOSサポートが必須。

– IOMMU (I/O Memory Management Unit)
VMが直接NICにタッチ(DMAアクセス)するためには、メインメモリー上でそのNICのメモリアドレスがアサインされていないといけない。それを可能にするための機能

– PCI Passthrough
IOMMUでアドレスが割り振られただけではダメで、VMからNICへのタッチを通してあげないと
いけない。普通はPCIバスを介してCPUのインタラプトだ、メモリーコピーだ、といった処理が走るが、この機能のおかげでそのような中間処理を省略させられる。

– ARM (Alternative Routing-ID Interpretation)
PCIeで使えるアドレス空間を拡張して、Virtual Functionにもアサイン可能にする。

あと2つあるのだが、最低この3つがあれば動くので詳細は上記Specのドキュメントをご参照あれ。SRIOV対応のNICを乗せてドライバーだけいれてもBIOSサポートしてなかったら
全く動かないのでご注意を。ちゃんと事前に確認しましょう。

 

広告

2012年、いよいよ来るか?SRIOV (Single Root I/O Virtualization)」への1件のフィードバック

  1. ピンバック: How to enable SR-IOV on Ubuntu 14.04 | technical note

コメントを残す

コメントを投稿するには、以下のいずれかでログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中