ページの本文へ

Hitachi
お問い合わせお問い合わせ

[連載]第1回 仮想化のもう一つの選択肢・KVM

Linuxカーネルに含まれるKVM(Kernel-based Virtual Machine)は、シンプルな設計によるオーバーヘッドの少なさや多くの企業が開発に参加できるオープン性が大きな魅力です。KVMを利用して仮想化することで、増えてしまったサーバを集約してコスト削減を実現できるのが大きなメリットです。また物理サーバのメンテナンス停止時にライブマイグレーションを利用すればサービスを停止する必要がなく、従来よりも柔軟な運用が可能になる点も魅力といえます。

KVMの宿命

KVMは2005年にイスラエルのQumranet Inc.(以降、Qumranet社)により開発が始まりました。 Qumranet社はLinuxベースの仮想化ハイパーバイザであるXenを開発したXen Source Inc.社からスピンアウトしたエンジニア達によって設立されたベンチャーで、VDI(Virtual Desktop Infrastructure:仮想デスクトップインフラストラクチャー)の製品開発を目指していました。

VDI製品のコストには、VDI製品そのものの性能・価格および、多数のデスクトップOSを動作させるVDS(Virtual Dedicated Server:仮想デスクトップサーバ)の集約度が大きく影響します。 上述の経緯からXenの短所、特にスケーラビリティの低さを熟知していたQumranet社は、XenをVDSのハイパーバイザの候補から外すと共に、ライセンスコストが高い商用ハイパーバイザも候補から外しました。
そこで、Qumranet社が選択したのは、同時期にIntel Corporation(以降、Intel社)とAdvanced Micro Devices, Inc.(以降、AMD社)から出荷が開始された仮想化支援機構を持つCPUを最大限に活用して、軽量で高速な仮想化ハイパーバイザを独自に開発してコストを抑える、という戦略でした。

したがって、KVMはその誕生時点からXen以上に優れたスケーラビリティを持ち、商用ハイパーバイザを遙かに下回る低コストであることを運命づけられた仮想化ハイパーバイザだったのです。

CPUの仮想化支援機構

歴史的にIntel Architecture(以降、IA)では「1つのハードウェア(のセット)を1つのOSが専有することを前提にハードウェアもOSも設計・実装」されていました。
一方、メインフレーム(汎用機)の設計方針はIAと異なり、複数のOS(環境)で1つのハードウェアを共有する集中処理を想定しておりました。

IAが誕生した当初、ハードウェア性能を上げるためにはCPUの動作周波数の向上が必要でした。 しかし、時代が進みCPUの動作周波数の向上に技術的な限界が明らかになると、Intel社を始めとするCPUベンダはCPUのコアを増やして並列度を向上させることでCPUの性能向上を図るようになります。 この並列度の向上では、特に並列処理での性能向上が期待されました。 しかしながら、アプリケーションのレベルで並列度を上げることは技術的に難しく、一方で利用率の低いサーバを集約するのに十分なハードウェア性能が得られるようになったことから、IAにも仮想化支援機構による集中処理の実現が求められるようになりました。

その結果、2005年にはIntel社がVT(Intel® Virtualization Technology)、2006年にはAMD社がAMD-V(AMD Virtualization™)と呼ばれる仮想化支援機構を搭載したCPUを発表することになります。 この仮想化支援機構では、IAのハードウェアを仮想化するにあたって性能上の大きな障害となる、センシティブ命令(*1)の検出や仮想マシンに対するメモリのアドレス変換などを含み、従来ソフトウェアで実装していたこれらの機能をCPUが肩代わりしてくれるようになったわけです。

*1
ハードウェアの状態を変更するようなCPU命令のこと。
例えば、2つのOSが1つのCPU上で動作している場合に、一方のOSがCPUのレジスタに値をセットして、他方のOSがそのレジスタ値を書き換えた場合、先にセットしたOSとしては「覚えの無い」値に勝手に変わったように見えてしまいます。このCPUのレジスタを設定するような、複数のOSが同時に実行すると悪影響をおよぼす命令をセンシティブ命令と呼びます。

KVMの仕組み

KVMの仕組み

KVMはLinux標準機能として実装されているLinuxカーネルのモジュールです。 モジュールの代表例は「デバイスドライバ」なのですが、KVMもご多分にもれず「CPUの仮想化支援機構を利用する」デバイスドライバです。 そして、KVMはQEMUというプログラムと一緒に動作します。QEMUは"Quick Emulator"の略で、各種デバイスのエミュレーションやCPU命令の動的な変換を担っています。

仮想マシン上のゲストOSが発行したCPU命令のうちセンシティブ命令をCPUの仮想化支援機構が検出するとKVMに通知され、命令によってはQEMUのハンドラが呼び出され適切なデバイスのエミュレーションや命令の変換が実行されます。 実デバイスを利用するためのデバイスドライバを仮想マシン上のゲストOSが持っていない場合、そのゲストOSが持っているデバイスドライバで利用可能なデバイスの「ふり」をするのはQEMUの代表的な仕事です。

Linuxの標準機能

前述したようにKVMはLinux標準機能であり、弊社のRed Hat Enterprise LinuxだけではなくKVMを有効にしてビルドされているすべてのLinuxカーネルで利用可能です。 そのため、弊社やIntel社、株式会社 日立製作所を始め多くのベンダが開発に参加しており、KVMそのものだけでなくLinuxカーネルの他の機能との連携など、今後も技術的な進歩を低コストで享受できる可能性が高いと言えます。 長期的な視点に立ったITシステムの策定において、決して無視できない技術の一つであることは間違いないと言えるでしょう。

次回予告

次回はKVMの事例をベースに、KVMのビジネスメリットを検証してみます。お楽しみに。