基礎解説 仮想化技術の性能を向上させる、ハードウェア仮想化支援機能とは? ── Intel VT-x技術を理解する ── 1. 仮想化技術が抱えていた問題点インテル株式会社ソフトウェア&ソリューション統括部 分散並列技術部 大原 久樹 2008/08/28 |
|
仮想化支援機能が仮想化の用途を広げる
仮想化技術の歴史は古く、メインフレーム・コンピュータ時代から多くの環境でサポートされてきた。Windowsサーバ(PCサーバ)においても、1990年代から利用されていたものの、目的はサポートが終了した古いOS環境を新しいサーバで稼働させるためであったり、ソフトウェア開発の現場で仮想マシン上に開発環境やテスト環境を構築するためであったりと、その用途は限定されていた。これは、仮想化技術がコンピュータ・ハードウェア上に仮想的なコンピュータをソフトウェアで構築するという技術であるため、さまざまなオーバーヘッドが生じ、広く一般的な用途で利用するには性能面での制約が多かったためだ。
しかし「インテル バーチャライゼーション・テクノロジー(VT-x)」*1と呼ばれる仮想化支援機能の登場により、状況は大きく変わっている。VT-xは、VMM(Virtual Machine Monitor:仮想マシン・モニタ)がソフトウェアで行ってきた仮想化の処理の一部をプロセッサが肩代わりすることで、大幅にオーバーヘッドを軽減するというものだ。こうしたプロセッサの進化により、仮想化技術の性能向上を実現し、幅広い用途で利用できるものとしている。では、VT-xとは具体的にどのような技術なのか、本稿で明らかにしていくことにしよう。
*1 AMDも同様の技術としてAMD-Vを提供している。ただしVT-xとAMD-Vは、機能面での類似性は高いものの、命令の互換性はない。 |
VMMとは
仮想化の基盤となるソフトウェアがVMMである。OSがユーザー・アプリケーションに対して果たしているのと同じような役割を、VMMはゲスト環境に対して提供している。OSがデバイスやメモリなどの物理リソースを管理し、メモリ空間をユーザー・アプリケーション(プロセス)ごとに隔離するように、VMMはゲスト環境ごとに物理リソースをエミュレーションして、ゲスト環境からの要求を調停し、ゲスト環境ごとにメモリ空間を隔離する役割を持つ。VMMが置かれる場所やデバイスの取り扱いによって、VMMは「ホスト型」「ハイパーバイザ型」「ハイブリッド型」の3種類に大きく分類することが可能である。それぞれの違いについては「基礎解説 仮想化技術はじめの一歩」を参照していただきたい。
ホスト型 | ハイパーバイザ型 | ハイブリッド型 | |
仮想化のオーバーヘッド | 多い | 少ない | 中間 |
デバイスへの対応 | ◎(ゲスト側での対応は不要) | △(VMM側での対応が必要) | ○(ホスト型とハイパーバイザ型の中間) |
VMMの主なアーキテクチャ |
従来技術の問題点
もともとインテル・アーキテクチャ(IA:x86プロセッサ)上の仮想化はソフトウェア・エミュレーションをベースにしたものであった。プロセッサがハードウェアで処理することをソフトウェアによって実行するため、仮想化によるオーバーヘッドは無視できないものとなっていた。特にデバイス、OSカーネル、アプリケーションとの間でデータの処理が行われるI/O処理でそのオーバーヘッドは顕著であった。オーバーヘッドを低減するために、VMwareのバイナリ・トランスレーションのように、ゲストOSからの命令をVMMでキャプチャ/変換し、VMM内で複数の処理をまとめるなどして高速化を図る技術もある。しかしながらその実現には、技術的に高度な多くの独自ノウハウが必要であった。またXen(XenSource、現Citrix SystemsのVMM)では、ゲストのOSカーネルを仮想化向けに変更を加える準仮想化(para-virtualization)によって仮想化のオーバーヘッドを削減する手法が提案されて広く受け入れられた。だが、すべてのOSカーネルをXenの仮想化用に変更できるわけではないため、ゲストOSとして使える対象に制限があった(Windowsには対応できなかった)。
インテル・マイクロプロセッサのリング構造
そのような状況の中、仮想化をハードウェアから支援する技術として2005年にインテルから発表されたのがVT-xである。VT-xを説明するために、まず簡単にインテル・マイクロプロセッサのリング構造について説明しておく。
インテル・アーキテクチャでは、4種類の特権レベルを設定することができる。Ring 0が最も特権レベルが高く、あらゆる命令を実行し、あらゆるリソースにアクセスできる。これに対し、Ring 3は最も特権レベルが低く、実行できる命令やリソースに制限がある。一般的にユーザー・アプリケーションはRing 3上で実行される。通常はRing 0とRing 3の2種類のみが用いられており、図1のようにRing 0にOSカーネルやドライバが割り当てられ、ユーザー・アプリケーションはRing 3で実行されるのが一般的である。OSの機能(API)を呼び出したり、割り当てられたアドレス空間以外へのアクセスなどを行ったりすると、トラップ(捕捉)されて、制御がRing 0へ移る。これにより、(ほかのアプリケーションによってメモリ領域が書き換えられるといった)不正な干渉/行為からアプリケーション同士を保護/隔離している。
図1 インテル・アーキテクチャにおけるリング構造 |
インテル・アーキテクチャでは、Ring 0から3の4種類の特権レベルがあり、プログラムはこのいずれかのRingに割り当てられ、実行される。 |
VT-x登場以前のVMMは、図2のようにゲストのOSがRing 1に置かれるアプローチが採用された。これは、複数のOSがハードウェアを実行するに当たり、それぞれをRing 0で動作させると、ほかのOSの知らないところで特権命令が発行されることになり、不整合が生じるためだ。ゲストのOSに改変を加えられるかどうかで実装のアプローチは異なるが、前述のように従来の手法ではさまざまな課題を抱えていた。
図2 VT-x以前のVMMのリング構造 |
VMMは特権モードがRing 0で実行され、ゲストOSのカーネルはそれより特権レベルが低いRing 1で実行される。 |
VMMは特権モードを利用するため、Ring 0に置かれる。そしてゲストOSのカーネルはそれより特権レベルが低いRing 1に配置される。ゲストOSのカーネル中で特権命令を実行しようとするとトラップされ、VMMで処理(エミュレーション)されるが、そのオーバーヘッドは少なくない。またx86の命令セット・アーキテクチャの仕様上、本来ならばVMMで処理しなければならないいくつかの命令がトラップできず、そのまま実行されてしまうものがある(例えば、セグメント・レジスタの値を読み出すMOV命令やステータス・フラグの状態を保存するPUSHF命令を実行すると、現在の「真の」特権レベルなどの情報を知ることができるが、これらの命令をRing 0以外で実行してもトラップされない。結果、Ring 0以外で実行されていることがゲストOSに露見してしまったり、Ring 0を想定しているコードが正しく動作しなくなったりする可能性がある)。これに対処するため実際のx86用のVMMでは、命令を実行する前に解析して対処するなどの処理を行っているが、これが大きなオーバーヘッドとなっている。
そこで、こうしたオーバーヘッドの軽減を実現する技術として、プロセッサに仮想化支援機能「VT-x」が実装されることになった。次ページでは、VT-xの機能について、少し詳しく説明しよう。
INDEX | ||
[基礎解説]仮想化技術の性能を向上させる、ハードウェア仮想化支援機能とは? | ||
1.仮想化技術が抱えていた問題点 | ||
2.仮想化技術の性能向上を実現するプロセッサの仮想化支援機能 | ||
基礎解説 |
- Azure Web Appsの中を「コンソール」や「シェル」でのぞいてみる (2017/7/27)
AzureのWeb Appsはどのような仕組みで動いているのか、オンプレミスのWindows OSと何が違うのか、などをちょっと探訪してみよう - Azure Storage ExplorerでStorageを手軽に操作する (2017/7/24)
エクスプローラのような感覚でAzure Storageにアクセスできる無償ツール「Azure Storage Explorer」。いざというときに使えるよう、事前にセットアップしておこう - Win 10でキーボード配列が誤認識された場合の対処 (2017/7/21)
キーボード配列が異なる言語に誤認識された場合の対処方法を紹介。英語キーボードが日本語配列として認識された場合などは、正しいキー配列に設定し直そう - Azure Web AppsでWordPressをインストールしてみる (2017/7/20)
これまでのIaaSに続き、Azureの大きな特徴といえるPaaSサービス、Azure App Serviceを試してみた! まずはWordPressをインストールしてみる
|
|