Hyper-Vはペアレントパーティションがドライバを抱えているのでそこがI/Oのボトルネックになるんでしょ?の件
「なりません」
と、この一年あちこちでお話ししてそろそろ疲れたので、ブログに書いてみることにしました。ちょうどBen Armstrongのブログにも同じネタがあったので。
これ、よく言われるんです。先日のTech Edの際もAsk The Speakerコーナーでこの件に関するご質問をいただきました。
要約すると、
「Hyper-Vって全仮想マシンのI/Oがペアレント パーティションを通るんでしょ?ってことはペアレントパーティションがボトルネックになるよね?」
いえいえ。
ペアレントパーティションは単一障害点にはなっても、I/Oボトルネックにはなりません。なぜなら、、、
と説明する前に、仮想マシン環境を考えるときに、当たり前中の当たり前なのですが無意識のうちに忘れてしまうことがあるポイントを押さえておきましょう。
仮想化は所詮パーティショニング
物理マシンが出せる以上の性能は
逆立ちしたって出せっこない
Hyper-VもESXもXenも、要は物理マシンを論理分割しているソフトウェアなので、
「物理マシンの性能を余さず引き出し、その性能を各パーティションに配分する、何らかの主体」
が必ず存在します。そして、それがペアレントパーティションだったり、VMKernelだったり、Domain-0だったりするのです。つまり、 「すべての仮想マシンのI/Oを一手に引き受ける、I/O集中部分」 というのはHyper-VにもESXにもXenにも等しく存在します。
以上を前提として「ボトルネック」について考えると、確かに 「I/Oが集中する部分」 が物理マシンの性能を引き出しきれない場合は、ハードウェアには余力があるのに仮想環境のスループットが頭打ちになってしまう、という事態も発生するかもしれません。こうなれば確かに「ボトルネックがある」といえるでしょう。
しかし、Hyper-Vのペアレントパーティションは、以下のような性質を持ちます。
- ペアレントパーティションは、物理マシンに実装されているすべてのプロセッサを使用する(すべてのLPで、Root VPが実行される)
- ペアレントパーティションは、ディスクドライブやNIC等のデバイスを 「直接」 制御する(ハイパーバイザは介在しない)
つまり、ペアレントパーティションは物理マシンの性能を限界まで引き出すことができ、ペアレントパーティションの性能≒物理マシンの性能です。
ペアレントパーティションがイッパイイッパイになったとしたら、それは物理マシンがイッパイイッパイだと言うこと。「ハードウェアに余力があるのにペアレントがネック」になっているわけではありません。
繰り返しますが、
物理マシンが出せる以上の性能は
逆立ちしたって出せっこない
のです。