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

  • 1,203 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,203
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
11
Comments
0
Likes
6

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 「ハイパーバイザの作り方」 読書会#1 @syuu1228 13年8月22日木曜日
  • 2. はじめに: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日木曜日
  • 3. 「仮想化可能」とは (POPEKとGOLDBERGの仮想化用件) • システムに影響を及ぼすセンシティブ命令が全て特権命令なら、ユーザ権限で実行 することでトラップ可能 • センシティブでない命令はCPUで実行、センシティブな命令だけエミュレーション User (Ring 3) Kernel (Ring 0) Hypervisor (Ring 0) ハイパー バイザなし ハイパー バイザあり User/ Kernel (Ring 3) センシティブ命令の 発行などでトラップ 13年8月22日木曜日
  • 4. X86は「仮想化可能」でない • トラップできないセンシティブ命令がある • ゲストOSを直接CPUで実行するとホスト環境が壊れる User (Ring 3) Kernel (Ring 0) Hypervisor (Ring 0) ハイパー バイザなし ハイパー バイザあり User/ Kernel (Ring 3) センシティブ命令の 発行などでトラップ 13年8月22日木曜日
  • 5. VMWARE’S APPROACH • BinaryTranslation(BT) • ゲストマシンで実行される予定のプログラムを先回り してチェック、問題のある命令を置き換え • 性能の出るBTを実装するのは大変だが、そこそこ高速 に動作していた 13年8月22日木曜日
  • 6. XEN’S APPROACH • 準仮想化(Para-virtualization) • ゲストOSをXen専用に書き換え、ゲストOSのカーネルをRing1で実行 させる • 仮想デバイスへのI/Oはソフト割り込みを用いてハイパーバイザに要求 • 本来センシティブ命令を実行していた部分はハイパーバイザ呼び出し に書き換え • 速いがゲストOSの移植が必要(結局Windowsは公式対応ならず) 13年8月22日木曜日
  • 7. 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日木曜日
  • 8. 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日木曜日
  • 9. 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日木曜日
  • 10. 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日木曜日
  • 11. VT-X拡張命令 • VT-xを有効・無効:VMXON/VMXOFF • VMEntry:VMLAUNCH(初回)/VMRESUME(再開) • VMCSをCPUにセット・クリア:VMPTRLD/VMCLEAR • VMCS読み・書き:VMREAD/VMWRITE • 詳しくは→SDMVolume 3, Chapter 30 13年8月22日木曜日
  • 12. 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日木曜日
  • 13. EXIT QUALIFICATION • Exit Reasonによっては追加の情報が提供される:Exit Qualification • Volume3, Chapter 27.2.1 • CRレジスタアクセスの場合: レジスタ番号・使われた命令・使われたレジスタ、etc 13年8月22日木曜日
  • 14. ハイパーバイザのライフサイ クル • 何かあるとVMExit、ハイパーバイザでエミュレーション してVMEntryの繰り返し ①初期化 ②VMEntry ③VMExit ③エミュレ ーション VMLAUNCH VMExitイベント発生 VMRESUME VMExit要因に対応した エミュレーション処理を呼び出し 13年8月22日木曜日