前回はサーバの仮想化技術について、その概要を説明した。その際にも触れたが、現状の仮想化ブームを後押ししているのはサーバの仮想化だ。そのサーバの仮想化を後押ししているのが、VMwareやXenといった仮想化を実現するソフトウェアの普及であり、IntelやAMDなどのプロセッサが提供するサーバ仮想化をサポートする技術の登場であろう。
プロセッサにもさまざまなものがあるが、LinuxやWindowsといった現在最も身近に普及しているOSの仮想サーバを実現するのであれば、いわゆるx86アーキテクチャをサポートするIntelとAMDのプロセッサ搭載マシンがプラットホームとなる。今回は、Intel、AMDが提供する仮想化サポート技術をひも解いてみたい。
本来は1台のマシンに1つのOS
一部のハードウェアを除き、これまでは物理的に1台のマシンでは1つのOSだけが動くようなアーキテクチャになっていた。そのため、1つのOSがすべてのハードウェアリソースを占有できたが、仮想化により複数のOSが1台で動くようになると、本来1つのOS用に用意されていたリソースを複数のOSで共有して利用しなければならない。
ストレージのようにゲストOS 1の領域、2の領域と分けられるリソースならば問題はないが、もともと1つのOS用に用意されたリソースには分離できないものもある。そのため、仮想サーバを実現しようとすると、仮想化ソフトウェアがゲストOSの要求に応じ、分離できないリソースを切り分けてゲストOSに渡す必要がある。
プロセッサによる仮想化サポート技術がない場合は、この切り分け処理をソフトウェア的に行わなければならない。そのためにゲストOSのソースコードを変更したり、ゲストOSからのハードウェアに対する命令を仮想化ソフトウェアでバイナリ変換する必要があった。OSのソースコードを変更するとなると、ソースコードが公開されている必要がある。また、OSパッチを適用する際には、その都度動作を検証する必要があるかもしれない。
当然ながら、複数のゲストOS間で頻繁にリソースの切り替えが発生する場合、ソフトウェアのバイナリ変換処理で仮想化すると仮想化ソフトウェアに大きな負荷が発生する。また、このゲストOSの命令を代理実行する実装はかなり複雑で、仮想化ソフトウェアを提供するベンダーは、システムの信頼性を確保するためにそれなりの時間と手間が必要だ。ゲストOSに対しソースコードの改変が必要となるのが、旧来のXenの仮想化実現方法だ。一方、ソフトウェアでバイナリ変換処理をするのが、VMwareのハイパーバイザーということになる。
最初から仮想サーバが動くようにする
このような仮想化の問題点を大幅に解決したのが、プロセッサの仮想化サポートの技術だ。簡単に言ってしまえば、従来1台につき1つのOSしか動かなかったプロセッサのアーキテクチャを、最初から複数のOSが動くように変えてしまうというものだ。
この仮想化のための拡張をIntelでは「Intel-VT(Virtualization Technology)」、AMDでは「AMD-V(Virtualization)」と呼んでいる。