Hatena::Group::Virtualization::takaochan RSSフィード

日記はこちら
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 11 |

2006/10/26 (木)

[]AMD Virtualization (AMD-F) AMD Virtualization (AMD-F) - Hatena::Group::Virtualization::takaochan を含むブックマーク はてなブックマーク - AMD Virtualization (AMD-F) - Hatena::Group::Virtualization::takaochan

元々,x86アーキテクチャは,同時稼働OSは1つだけであることが前提となっている。そのようなアーキテクチャ上で,仮想化システムは複数のOSを同時稼働させる。この2つは全く異なったパラダイムであり,仮想化ソフトウエアは,このパラダイム間のギャップを埋めるために多数の課題を克服して,仮想化システムを実現している。

http://itpro.nikkeibp.co.jp/article/COLUMN/20061017/250873/?ST=cpu&P=1

x86アーキテクチャがあまりにも普及してしまったために、アーキテクチャが変更できない点が問題といえば問題なのだが、CPUによるハードウェア的な支援によってこの問題を解決しましょう、というアプローチがAMDIntelがそれぞれ提供を始めたいわゆる「CPUの仮想化支援機能」である。

仮想化ソフトウエアは,ゲストとなる複数のOSを同時に正しく動作させるため,各ゲストOSの動作を把握し,調整する。そのためには,各ゲストOSが,システム状態を変更するような命令(レジスタ設定や特権命令など)を発行する前に,仮想化ソフトウエアがそれらを横取りし,適切な処理を実行する必要がある。

ハードウェアOSに汎用性を持たせたためにx86アーキテクチャは一般化したが、逆にハードウェアOSの間には垣根があるというデメリットもある。UNIXの世界では基本的にIBMであればAIXというOSとpSeiresというハードウェアを組み合わせて使用することが前提となっているために、pSeriesハードウェアアーキテクチャ進歩に対してAIXを対応させることが出来るし、逆もまた然りといえる。しかしWindowsLinuxなどとx86アーキテクチャに対応したハードウェアはそうはいかない。

x86プロセッサでは,システム状態を変更するような命令なのに特権命令でない命令が存在する。

この点はx86アーキテクチャの初期設計が不十分であったが為だが、逆に言えばこうした点がずっと以前から明らかになっていながら、対応することが出来ないということでもある。

AMD-Vでは,1つのプロセッサで複数のOSを同時稼働できるよう,「ゲストモード」を新たに追加した。複数のゲストOSを管理する「ホスト」と,ホストによって管理・運用される「ゲスト」の2つの動作モードがある

x86アーキテクチャの命令系統をCPU側の支援を受けることにより、よりシンプルに制御できる仕組みを作り出すことこそ「CPUの仮想化」といえる。

ゲストモードホストモードのそれぞれに,リング0からリング3までの特権レベルがある。つまり,仮想化ソフトウエアゲストOSの双方がリング0で動作する。

積み重ねられたリング機構に加え、横に並べるモードという仕組みを用意したという部分ではAMDの仮想化機能もIntelの仮想化機能も同様の発想に基づいている。

AMD-Vに対応した仮想化環境では,ゲストモード/VMRUN命令/#VMEXIT処理によって,プロセッサは,その命令がゲストホストのどちらで発行されたものかを識別できる。

複数OSを1つのシステム上で同時稼動させるためには、「どのモードで動作しているOSから発行された命令なのか」を区別することが必要になる。CPUの仮想化支援機能が登場する以前は、仮想化ソフトウェアソフトウェア的な処理によって対応してた部分だ。この部分をCPUハードウェア的に制御できるようになることは安定性という面でも処理スピードという面でも、そして仮想化ソフトウェアがよりシンプルになるという面でもメリットがある。

CPUの仮想化により、汎用的につくられたx86アーキテクチャに基づいたシステムは本格的に仮想化環境へ対応していくことになる。

2006/07/20 (木)

[][][]x86 CPU仮想化支援機能 x86 CPU仮想化支援機能 - Hatena::Group::Virtualization::takaochan を含むブックマーク はてなブックマーク - x86 CPU仮想化支援機能 - Hatena::Group::Virtualization::takaochan

直接的なメリットはないかもしれないが、こういう記事によって仮想化技術に積極的に取り組んでいる姿勢を見せることは企業にとって重要だと思う。そういう意味で、HPは仮想化技術に対して積極的に取り組んでいるように「みえる」。

x86アーキテクチャ向けのOSは「コンピュータのすべてのリソースを占有している」という前提で動作している。従ってそのようなOSを,同一のコンピュータ上で複数同時に実行することはできない。なぜならば,複数のOS間で,リソースの競合が発生するからである。

http://itpro.nikkeibp.co.jp/article/COLUMN/20060713/243263/

対して汎用機やハードウェアOSがかなり高レベルに統合されたUNIX製品などは「仮想化」に対応するようにOS側もつくられているので、x86と比較してかなり早い段階から仮想化技術が取り込まれている。

x86命令の中には,特権命令と呼ぶ命令がある。例えばI/Oアクセス命令などだ。特権命令を,権限が低いリングプログラムで実行すると,より権限が高いリングプログラムがそれを横取りできる(これを「トラップ」と呼ぶ)。ほとんどのOSでは,カーネルリング0アプリケーションリング3で動かしている(リング1とリング2は使っていない)。こうすることで,例えば複数のアプリケーションから同時にI/O処理要求が発行された場合に,それらをOS がトラップし,OS排他制御調停できるようにしている。

ここがx86仮想化を理解するための基本となる重要な部分。

仮想化ソフトウエア(VMM)は,いわばゲストOSをだますことにより,ゲストOSからするとあたかも自身のカーネルリング0で動作しているかのように見せかけている。実際には,VMMがリング0で動作し,ゲストOSカーネルリング1で動作させている。

いかなるx86アーキテクチャにおける仮想化ツールもこの方法で動作している(やり方はそれぞれ微妙に異なるが)。

ゲストOSリング1で動かすことで,ゲストOSで実行しようとした特権命令をVMMがトラップできるようになる。複数のゲストOSが実行しようとした特権命令をVMMが調停することで,複数のOSを同時に動かしているわけだ。ただしx86には,システムハードウエア)の状態を変更する命令なのに特権命令ではない命令がある。そのような命令をゲストOSが実行すると,そのままではVMMはトラップできず,システムクラッシュする。

この問題をどう乗り越えるかが製品としての完成度につながる。

x86は設計の時点で仮想化を意識していないので、どうしても「きわどい方法」で「どうにかする」仕組みを作る必要がある。

そこで,VMware製品は,ゲストOSで使われているそれらの命令を,VMMがトラップできるよう動的に書き換えて,実行している。このような仮想化の方式を「バイナリトランスレーション」と呼ぶ。これに対して,VMM上で動作するようにあらかじめ変更しておいたゲストOSのみを実行できる仮想化ソフトウエアもある。Xenがその代表例で,このような方式を「パラバーチャライゼーション(準仮想化)」と呼ぶ。

汎用的に使えるようにするにはVMwareバイナリトランスレーションは有効だが、その分オーバーヘッドが生じてしまう。対してXenの取るパラバーチャリゼーションはより高速に(=オーバーヘッドを最小限にして)動作させることが出来る。

この連載はx86アーキテクチャにおける仮想化に携わる人は「理解しておくべき」事項がまとめられていきそうなので、非常に期待している。

2006/07/06 (木)

[][]Intel/VT & AMD/SVM Intel/VT & AMD/SVM - Hatena::Group::Virtualization::takaochan を含むブックマーク はてなブックマーク - Intel/VT & AMD/SVM - Hatena::Group::Virtualization::takaochan

CPUレベルにおける仮想化技術はIAサーバを本格的に仮想化に対応させるためには必須だとは思う。

IBMHPUNIXで実現されているハードウェア論理的な分割機能にIAサーバが一歩近づくことになる。

ただ、IAサーバは汎用機であり、様々なメーカーや様々なOSが動作するだけにどう進めるかが難しい。たとえばIBMのpSeriesならAIXと対応したLinuxだけを考慮すればいいが、IAサーバ用のCPUで仮想化に対応するには「仮想化にも」対応するがこれまでどおりの使い方に一切影響を与えないように発展させる必要がある。

SVMまたはVT上でOSが実行されると、特権命令の処理すべては完了前にインターセプトされ、ハイパーバイザ(スーパーバイザのスーパーバイザ)によってセットアップされた入口点に送られる。この場合、ハイパーバイザだけが、システム状態の変更を実施および許可する権限を持つ。

例えば、ゲストからの仮想メモリ・セグメントのマッピングリクエストインターセプトした場合、ハイパーバイザのコードは、そのゲスト用に前もって割り振られていたメモリ・セグメントを渡すことで、そのリクエストに対応する。

仮想化されたサーバ上では、このような特権処理は1秒間に数百~数千回生じるので、ソフトウェアで処理することは予想以上に厄介だ。

http://www.computerworld.jp/topics/Vtl/43641.html

Intel VTに対応した製品はVMware ServerやXen3.0など、チラホラ出始めているが、技術使用としてはAMDの方がすぐれているという話もある。

Intelのやり方とAMDのやり方に互換性がないだけに、こんごの展開が少々心配だが、こんなところからCPU争いの状況に大きな変化がもたらされるかもしれない。