仮想化ってなんですか?

自分が仮想化技術を本格的に使い始めてからもう7年くらい経ち、今では使われているところでは当たり前のように使われているので、記事を書く方としては今更感もあって若干躊躇もしたのですが、今でも知っている人は当たり前のように知っている、知らない人はなんのこっちゃ、というものかと思いましたので、今回は仮想化技術についてまとめてみました。

IT屋さんの世界で言う仮想化技術というものは、1台のPC・サーバーのハードウェアの中で、同時に複数のOSを動作させるための技術で、現在のインターネットのインフラ構築を見えないところから支える技術の一つとなっています。
普通皆さんが購入されるPCの上では、Windows PCならWIndowsだけ、MacならmacOSだけが動いています。
しかし、最近のPCはハードウェア技術の進展により、1つのOSだけを動かすには飽き足らないほどの性能を持つまでに至りました。
そこで、1台のハードウェアで複数のOSを同時に動かせないかというニーズに応える形で実用化されたのがこの仮想化技術です。

例えば下の画像。


自分は普段Mac使いなので、画面全体を見ると確かにMacが動いているのですが、画面右半分ではWindows 10の上でInternet Explorerが動いてます。
これも仮想化の形態の一つ(ホスト型仮想化)です。
ちょっとMacの上では動かないブラウザであるIEやEdgeで表示を確認したい、とかいうちょい使いのときには、私も時々こうやってMacの上でWindowsを動かしています。
(但しマシンが今となってはやや非力なMac mini 2012なので、重たいですが…それはさておき)

このように、ホスト型仮想化でMacやWindowsの上で、同時に別のバージョンのWindowsとかLinuxを動作させることもできるのですが、なにぶんハードウェア上ではそれだけで十分に重たいMacやWindowsが既に動作している状態で、もう一つOSを立ち上げるとなると、実用上十分な性能はホスト型仮想化では出にくいです。

ここで仮想化の形態の主な方式について図にしてみました。


仮想化の形態には、上で紹介したホスト型の他にもう一つ、ハイパーバイザー型仮想化という方式があり、仕事では主にこちらを使っています。
ハイパーバイザーとは、動作させたい複数のゲストOSを制御することに特化した非常に軽量なOSのレイヤーで、ホスト型と違い別に組み込む仮想化ソフトも必要としません。
そのため、複数のOSを同時に、性能の低下を最小限に抑えて実行できるようになっています。

実際に、職場でも普通に市販されている高性能な部類のデスクトップPC(Core i7クラス)にメモリを32GB積んだ状態で、ゲストOS(Linuxが多い)をPC1台あたり8〜10個くらい動かしていることが多いですが、大きな性能低下もなく平気な顔をして動いています。

7年前に大学と自治体との共同実験としてやったことのある実績としては、CPUを2個搭載したサーバー×2台(メモリは合計72GB)で、高速なディスクアレイを併用して、Windows 7を同時に40個動作させ、シンクライアント端末を介してまずまずのレスポンスを得ることができたということもありました。
(7年前の時点でもうここまでできていたというのも結構驚きですが)
ちなみにこの実験を一緒にやっていた学生さんの論文は、情報処理学会で学生奨励賞を頂いていました。

このブログを運営しているサーバーも、VPSと呼ばれるサーバーを借りて運用していますが、実際にはどこかのデータセンターの超高性能なサーバーに入っているハイパーバイザーの上で動作しているゲストOSの1つであるはずです。
本格的なネットのインフラ構築には欠かせなくなっているのがハイパーバイザー型仮想化であると言えるでしょう。