virtualization

Last-modified: 2011-11-23 (水) 08:26:01

●Link
kvm

●用語
VMM(Virtual Machine Monitor)・・・仮想化を実現するソフトウェア


通常、VMMをリング0、ゲストOSをリング1、アプリ等をリング3で動作させ、
ゲストOSが特権命令を発行した場合にtrapすることにより
仮想環境を可能とする。
しかしながらx86の場合、上記がうまくいかない場合がある。

●センシティブ命令
x86仮想化におけるキモ
1.HW(システムも?)の状態を変更する命令
2.動作リングによって挙動が変わる命令

センシティブ命令には特権命令違反を起こさないものがある。
(非特権センシティブ命令)
この場合、
特権命令違反によるトラップ-->VMMに制御を移す
という遷移をたどれないため問題となる。
(NL2010.11)

●CPUの仮想化支援機能
ゲストモードというモードを追加し、
その間はセンシティブ命令をトラップしてカーネルに処理を渡す。

1.VMX root・・・
2.VMX non-root・・・ゲストOSがリング0で動作、ゲストOS上のアプリはリング3で動作

1->2の遷移を「VM Enter」、(センシティブ命令発行などによる)2->1の遷移を「VM Exit」という

●qemu,kvm,vmの関係
qemuはカーネル経由でvmにアクセスする

qemu(ユーザプロセス)/ユーザモード
|
| <--ioctl()
|
kernel(kvm)/カーネルモード
|
|(VMX root)
------
|(VMX non-root)
|
ゲストOS/カーネルモード
|
ゲストOS上のアプリ等/ユーザモード

※階層的にqemuの上にゲストOSが乗っているイメージだったが
 カーネル(vmm)を挟んでqemu、ゲストOSが処理遷移しているイメージか?
 難しいな・・・。
 qemuはHWエミュレータ。そのレイヤ上でゲストOSがどうこうと考えるべきではない?

●SL6.1でKVM
インストールタイプは「Virtual Host」
「今すぐカスタマイズ」で「次」
後はNL201104参照

●シャドウページテーブル
メモリについては
ゲスト仮想 -> ゲスト物理 -> ホスト仮想 -> ホスト物理
という遷移

シャドウページテーブル使用時のエントリの更新は上記の
フル遷移で取得できたホスト物理をエントリに更新するイメージか。

ゲストOSでのcr3レジスタの設定をkvmでフックして、
シャドウページテーブルのアドレスをcr3レジスタに設定するということ?

ゲストOS上のページテーブルはあくまでも
ゲスト仮想アドレス->ゲスト物理アドレスの変換テーブルのため、
そのまま実CPUのMMUに設定するわけにもいかない。
(ホストOSの物理アドレスを参照してしまうため)

上記の理由からKVMでシャドウページテーブルというものを用意し、
そこでゲスト仮想アドレス->ホスト物理アドレス変換を管理することにより
適切な変換がなされるようにする。
(シャドウページテーブルのアドレスをcr3レジスタに設定することによる/
ゲストOSのページテーブルはあまり重要ではない??/
ゲストOSが(vm-nonrootの)リング0で動作するqemu-kvm独自のもので
qemuとは異なると考えるべきか??)