Shammer's Philosophy

My private adversaria

SRIOVとは

この記事について

業務でSRIOVについて触れる機会があった。言葉は聞いたことがあるが、詳細はよくわからなかったので内容をメモ。

SRIOVとは

Single Root I/O Virtualization の略のようだ。要は、VMNICにアクセスする際に管理VMやハイパーバイザを経由せずに直接NICにアクセスするというもの。
本来、NICは一つというかVMの数だけないことが一般的。つまり、複数のVMが限られたハードをうまくシェアできないとこの動作は実現しない。
VMが直接NICにアクセスできる、ということは、一つのNICを複数に見せるための技術、と言えなくもない。

これまでとの違い

今の時点では準仮想化が多いのだろうか。これは、SRIOVとは逆で大半のVMは直接NICにアクセスせずに管理用のVMを経由してネットワークに接続するような仕組み。
VM上のプロセスはそんなことは露知らず、ひたすら自分のNIC(実際は仮想NIC)にデータを送るが、このデータは一度管理VMに渡たされ、管理VMが物理ドライバを経由して物理NICにデータが渡される。
戻りはその逆で、物理NICから管理VM、管理VMからそれぞれのVMへという流れになる。個々のVMにとってはトランスパレントプロキシがあるような感じだろうか。

SRIOVを使用した場合の動作

外部と通信する際に管理VMにデータを渡すこれまでの方法でなく、各VMが直接ハードウェアを制御するようになる。管理VMへのプロキシ処理等のオーバーヘッドがなくなり、完全仮想化、準仮想化以上に物理ホストに近いパフォーマンスを期待できる。

SRIOVを使用するには

いくつかの条件があるらしい。BIOSというかハードレベルで以下がサポートされている必要がある。

IOMMU

I/O Memory Management Unit の略。簡単に言うと、仮想アドレスと物理アドレスマッピングを行う機能、となるだろうか。つまり、VMが認識しているメモリアドレスを実メモリのメモリアドレスに変換する機能、という感じだ。VMがこのアドレスのデータを対象にしてください、と言ってきたときに、ハードウェア側で認識している実メモリのどのアドレスなのかを把握できないといけない。VMが直接ハードウェアを制御できるというのは、裏返すと実ハード側がVMの言ってきたアドレスが自分のどこかを判断できるのが前提となる、ということだ。
これは言葉は一つだが、いくつか確認すべきポイントある。ハードと言ってもいくつかある。まずはBIOS、またはUEFI。そしてCPU。CPUの機能としてはIntel VT-d または AMD-Vi のことだ。

PCI パススルー

VMでは様々なデバイスをエミュレートして、仮想のデバイスを使用して様々な処理をさせる。このデバイスのエミュレートはハイパーバイザが主体で行うが、これを行わずに直接VMに物理ドライバをインストールして直接VMがハードを制御する、これがデバイス・パススルーというもので、PCI パススルーはPCIに接続されたデバイスでこれを可能にすること。

ARI

Alternative Routing ID Interpretation の略。簡単に言うと、一つのハードを複数に見せるための仕組み。PF(Physical Function)と VF(Virtual Function)という仕組みを使用する。
PFはそのデバイスを制御するための実際のコントローラ的なものと言えるだろうか。PFの数が多いPCIバイスほど高価になりそうだ。VFというのは仮想PF的なもので、いわばVMとPFの橋渡し的な機能だろうか。
まあ、専任でこれをやっているわけではないので聞いた話とGoogle先生の情報を断片的に整理してまとめると、、、という感じだ。まあ、今の立場でARIの詳細理解が必要になることはない。SRIOVを実現するために必要なPCI-Eの機能の一つ、程度の理解でも十分なのかもしれない。