先日このブログにて仮想化環境を実現する為のソフトウェアについて概要を書いてみましたが、今回はその続きで仮想化環境に関わるハードウェアについてのお話です。
前回と前々回の記事にて少し記述いたしましたが、仮想化環境を構築する為には仮想化環境を構築するソフトウェアまたはOS」を 「対応しているハードウェア(サーバ機やPC及びそれらの部品)」にインストールする必要があります。ここで「対応しているハードウェア」と書きましたが裏を返せば対応していないハードウェアが存在するという事にもなるのですが、このハードウェアの対応・非対応という言葉には「そのハードウェアに仮想化支援機能が付いているかどうか」という意味と、「仮想化環境構築ソフトウェアがそのハードウェアが使用出来るかどうか」という意味の二つの意味があります。
- 1:ハードウェアの仮想化支援機能の有無
近年ITの世界では何かと仮想化が話題となっておりますが、現在言われている仮想化というのは基本的にはソフトウェアによる実現がその始まりとなっております。仮想化ではソフトウェア上に擬似ハードウェアを作成し、その擬似ハードウェア上でOS等のソフトウェアを複数同時に動作させるといった仕組みになっておりますが、これは悪く言い換えれば元々仮想化せずに単独で動作させる事を目的としているハードウェアをソフトウェア処理で無理矢理共有しているという事でもあります。ソフトウェア上でそのような無理矢理の処理をしているのですからどうしても余計なオーバーヘッドが発生してしまう事になってしまい、同じハードウェア構成でも仮想化してない場合に比べ、仮想化を行った場合の方が性能的には目減りしてしまいます。
しかし、近年ではそのような問題に対応して行く為にハードウェア上に仮想化を想定した機能が組み込まれるようになって来ております。代表的なものしてはコンピュータの命とも言えるCPUに搭載されている仮想化支援機能「VT-x」や「VT-d」等が挙げられます。(※VT-x・VT-dはIntel社製CPUの機能です。AMD社の場合はAMD-V等の仮想化支援機能があります)
【 インテル バーチャライゼーション・テクノロジー 】 (ウィキペディア (Wikipedia): フリー百科事典より引用)
- VT-x
- VMXという動作モードの追加
i386以降の32ビットOSでは通常、リング0でカーネル等が動作するが、仮想マシンモニタはそれより高い特権モードで動作させることが望まれる(VT支援がない場合、カーネルをリング1で動作させる方法も取られた)。このため、リング0-3とは独立して、VMX rootとVMX non-rootという動作モードを新たに設けた。VMX rootモードで仮想マシンモニタを動作させ、VMX non-rootモードでゲストOSを動作させる。ゲストOSで仮想化に影響のある命令が発行された場合、VMX rootモードに遷移し、仮想マシンモニタは適切な処理を行うことになる。「リングプロテクション」も参照
- VMCS(Virtual Machine Control Structure)
仮想マシンモニタは、VMCSと呼ばれるデータ領域を利用し、各仮想マシンを制御する。VMX non-rootモードで動作していたCPUの状態の保存や読み出しをこの構造を利用して行う。ゲストOSを切り替える際のオーバーヘッドを軽減することができる。その他、仮想マシンを起動する命令や、再開する命令、VMXモードへ遷移・離脱する命令などが追加されている。
- VT-d
I/O処理の仮想化を支援する機能。VT-dなどのハードウェア的な仮想化支援が無い場合、仮想マシンモニタは、I/Oデバイスをエミュレートし、DMAのメモリ領域のリマッピングを行う必要がある。VT-dでは、ハードウェア的にDMA転送時のリマッピングを行うようにする。この場合、通常のデバイスドライバを使用することができ、利便性や性能が向上することになる。 メモリアクセスはチップセット側の機能であるため、次世代のチップセットで対応する予定である。
仮想化環境構築ソフトウェアではこのようなハードウェアに組み込まれた仮想化支援機能を利用する事により、前述のようなオーバーヘッドを減らし、仮想化環境上でもそのハードウェアの性能を最大限に引き出す事が出来るようになっています。今回は代表的な物としてCPUに搭載された仮想化について記述しましたが、今後はCPU以外の個別ハードウェアモジュールにも仮想化を支援するような機能が組み込まれて行く事も考えられますので、実際に仮想化環境を構築する場合には使用するハードウェアに仮想化支援機能が存在しているかどうかを確認する必要があるという事になります。
なお、Intel社のCPUの場合、個人向けの物であってもCorei5やCorei7等のシリーズであればVT-xやVT-dに対応している物がほとんどです。しかし、Corei7の中にもその目的に応じた色々なシリーズが存在しており、主にホビー等での利用を目的としている(と聞いた事がある気がする)末尾にKが付くシリーズ(Corei7 875K等)や、ビジネスPC向けの安価なラインのCPUではVT-dが非対応となっていたりしますので、CPUを選択する場合には必ずカタログスペック等を確認するようご注意ください。
仮想化はまだまだ新しい技術ですので、比較的新しいハードウェアでないと前述のような仮想化支援機能が付いていない場合があります。また、新しいハードウェアを導入したとしてもすぐにまた新たな仮想化支援機能が搭載されたハードウェアが発売されてしまう状況も考えられます。既存のハードウェアを流用しなければならない環境等ではそもそも仮想化環境構築自体が選択肢から外れてしまう事もありえます。仮想化環境を構築する際にはハードウェアの仮想化支援技術の動向にも注目しておかなければなりせん。
- 2:仮想化環境構築ソフトウェアのハードウェア対応状況
実際に仮想化環境の構築を行う場合、何らかの仮想化環境構築ソフトウェアを用いる事になります。仮想化環境構築ソフトウェアは現実の物理ハードウェアをソフトウェア的に分割統合管理する事により仮想化を実現しています。つまり、仮想化環境構築ソフトウェアはその使用する物理ハードウェアについて詳しく知っている必要があるという事になります。簡単に言えばWindowsやLinux等と同じようにドライバが有るとか無いとかそのような理由により対象のハードウェアが使用出来ないといった事態が発生する場合があります。
また、前回の説明に記述しましたが仮想化環境構築ソフトウェアはハイパーバイザ型やホストOS型等、実現方式によっていくつかの種類がある為、これらの違いによってもハードウェアの対応度が変わってきます。例えばVMWareの場合、ハイパーバイザ型のVMWareESXiではOSとしてインストールする形態を採っている為か、対応している機器が少ない傾向にあるようです。逆にホストOS型のVMWareServer等の場合は元のOSのドライバを利用出来る為か、大体の機種で動作させる事が出来るようです。(※仮想化環境構築ソフトウェアとしてVMWareを使用する場合はVMWareのWebサイトの「VMware Compatibility Guide」 にてハードウェアの対応状況を確認する事が出来ます)
なお、仮想化環境は主にサーバ目的での利用がメインターゲットとなっている為か、 サーバ向けに作られたハードウェアであれば対応している事が多いようです。 しかし、企業等の業務で使ういわゆるサーバ機と個人で使用するPCではその規模やハードウェアのレベルが大きく異なってしまいます。 企業では高い負荷がかかる処理を高い安定性で業務を止めることなく続ける必要がある為、高品質なハードウェア、一言で言えば高価な物を使っています。 このような企業の業務向けの機器は個人で気軽に購入出来るような価格ではありませんので、個人で仮想化環境を構築したいと考えた場合は対応度が低い個人向けの物からの選定となり、なかなか難しい場合もあるようです。
というわけで今回は仮想化環境を構築する際はあらかじめハードウェアの対応状況を調べる事が大切というお話をさせていただきました。「よーし、今日からウチも仮想化だ!」と喜び勇んでハードウェアを取り揃えて早速仮想化環境構築ソフトウェアをインストールした所、「非対応なので動きません。むしろ動かす気がありません。」等とエラーが出てしまうと色々と悲しい思いをします。会社の業務等で利用する場合なんかだと「(#゚ω゚)一体どういう事なんだねキミィ!」となってしまったりと笑えない事態も起こりえますので細心の注意を払ってハードウェアの選定を行いましょう。(=゚ω゚) イロイロアリマス




