●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とは異なると考えるべきか??)