Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
「ハイパーバイザの作り方」
読書会#1
@syuu1228
13年8月22日木曜日
はじめに:SDMの読み方
• VT-xの範囲はVolume 3, Chapter 23-33 + Appendix A-C
• VMCSの構造:Chapter 24
• VT-x拡張命令:Chapter 30
• VMExit Reason:Appendix C
13年8月22日木曜日
「仮想化可能」とは
(POPEKとGOLDBERGの仮想化用件)
• システムに影響を及ぼすセンシティブ命令が全て特権命令なら、ユーザ権限で実行
することでトラップ可能
• センシティブでない命令はCPUで実行、センシティブな命令だけエミュレーション
User
(Ring 3)
Kernel
(Ring 0)
Hypervisor
(Ring 0)
ハイパー
バイザなし
ハイパー
バイザあり
User/
Kernel
(Ring 3)
センシティブ命令の
発行などでトラップ
13年8月22日木曜日
X86は「仮想化可能」でない
• トラップできないセンシティブ命令がある
• ゲストOSを直接CPUで実行するとホスト環境が壊れる
User
(Ring 3)
Kernel
(Ring 0)
Hypervisor
(Ring 0)
ハイパー
バイザなし
ハイパー
バイザあり
User/
Kernel
(Ring 3)
センシティブ命令の
発行などでトラップ
13年8月22日木曜日
VMWARE’S APPROACH
• BinaryTranslation(BT)
• ゲストマシンで実行される予定のプログラムを先回り
してチェック、問題のある命令を置き換え
• 性能の出るBTを実装するのは大変だが、そこそこ高速
に動作していた
13年8月22日木曜日
XEN’S APPROACH
• 準仮想化(Para-virtualization)
• ゲストOSをXen専用に書き換え、ゲストOSのカーネルをRing1で実行
させる
• 仮想デバイスへのI/Oはソフト割り込みを用いてハイパーバイザに要求
• 本来センシティブ命令を実行していた部分はハイパーバイザ呼び出し
に書き換え
• 速いがゲストOSの移植が必要(結局Windowsは公式対応ならず)
13年8月22日木曜日
INTELVT-X
• アーキテクチャ拡張で仮想化に対応
• Ring Protectionから独立した2つのモードを導入
• VMX root mode(ハイパーバイザ)、VMX non-root mode(ゲストマシン)
User
(Ring 3)
Kernel
(Ring 0)
User
(Ring 3)
Kernel
(Ring 0)
VMX
root mode
VMX
non-root
mode
VMEntry
VMExit
13年8月22日木曜日
INTELVT-X
• VMX non-root modeでセンシティブ命令を実行するとトラップされて
VMX root modeへ切り替わる
• VMX non-root modeへの切り替え:VMEntry、VMX root modeへ戻る:VMExit
User
(Ring 3)
Kernel
(Ring 0)
User
(Ring 3)
Kernel
(Ring 0)
VMX
root mode
VMX
non-root
mode
VMEntry
VMExit
13年8月22日木曜日
VMCS
• どんなイベントでVMExitしたいかはハイパーバイザの実装による→VMCSで設定可能(メモリ上の設
定用構造体)
• ゲストステートの保持、ホストステートの待避、VMExitした理由の通知などにも利用されている
• 4KBアラインの4KB長のデータ構造 内部構造は非公開、専用命令でアクセス
• 詳しくは→SDMVolume 3, Chapter 24
VMCS revision identifier
VMX-abort indicator
VMCSdata
Guest-state area
Host-state area
VM-exection control fields
VM-exit control fields
VM-entry control fields
VM-exit information fields
13年8月22日木曜日
VMCS
• VMCS revision identifier:VMCSのデータフォーマットのリビジョン番号。CPUにより書き込まれる。
• VMX-abort indicator:VMExitが失敗した時にCPUによりエラーコードが書き込まれる。
• Guest-state area:VMExit時にゲストレジスタを待避し、VMEntry時に復帰するための領域。
• Host-state area:VMEntry時にハイパーバイザのレジスタを待避し、VMExit時に復帰するための領域。
• VM-execution control fields:ゲストマシン実行時のCPUの挙動を設定する。(例:どのイベントで
VMExitするか
• VM-exit control fields:VMExit時のCPUの挙動を設定する。(例:外部割り込み発生時のCPUの挙動
• VM-entry control fields:VMEntry時のCPUの挙動を設定する。(例:ゲストマシンへの割り込み挿入
• VM-exit information fields:VMExit時にCPUによりVMExit Reasonが書き込まれる。
13年8月22日木曜日
VT-X拡張命令
• VT-xを有効・無効:VMXON/VMXOFF
• VMEntry:VMLAUNCH(初回)/VMRESUME(再開)
• VMCSをCPUにセット・クリア:VMPTRLD/VMCLEAR
• VMCS読み・書き:VMREAD/VMWRITE
• 詳しくは→SDMVolume 3, Chapter 30
13年8月22日木曜日
VMEXIT REASON
• VMExitが発生すると、CPUはモードをVMX root modeへ切り
替えてVMCSのVM-exit information fieldsにExit Reasonを書き込
む
• Exit Reasonの一覧はAppendix Cにある
• IO命令・RDMSR/WRMSR命令の実行・CRレジスタへのアク
セスなどセンシティブ命令に相当するものの他にも外部割
り込みの着信などゲストマシン由来ではない要因も存在
13年8月22日木曜日
EXIT QUALIFICATION
• Exit Reasonによっては追加の情報が提供される:Exit
Qualification
• Volume3, Chapter 27.2.1
• CRレジスタアクセスの場合:
レジスタ番号・使われた命令・使われたレジスタ、etc
13年8月22日木曜日
ハイパーバイザのライフサイ
クル
• 何かあるとVMExit、ハイパーバイザでエミュレーション
してVMEntryの繰り返し
①初期化
②VMEntry
③VMExit
③エミュレ
ーション
VMLAUNCH
VMExitイベント発生
VMRESUME
VMExit要因に対応した
エミュレーション処理を呼び出し
13年8月22日木曜日

More Related Content

「ハイパーバイザの作り方」読書会#1