Hypervisorを学ぶためにintel vmxの仕様を読む
Hypervisorを学ぶためにintel vmxの仕様を読む
概要
Hypervisorがどういうものなのか勉強したいと思ったのだけど、
IOMMUや、2階層の仮想メモリはともかく
Intel VT-xのような権限の分離回りがよく理解できなかったので、
もうIntelの仕様書から直接の動作を見に行くことにしました。
それのメモになります。
今回まとめる対象
Intel Software Developpers Manual
Chapter 25
INTRODUCTION TO VIRTUAL MACHINE EXTENSIONS
Intelの仮想マシン支援機能であるVMXの概要をまとめた章
VMX
まず、vmxに関してprocessorのレベルを二段階定義し、それぞれの段階で動くソフトウェアを
Virtual-machine monitor, Guest softwareとする。

-
Guest software
OS含めた仮想化対象のsotware -
Virtual-machine monitor(VMM)
仮想化を管理するホスト側のsoftware。物理リソースを管理し、Guestに抽象化した各種リソースを提供する
(これが所謂Hypervisorのこと?)
VMX operation
VMX環境で追加されるCPUの命令について
これらはroot operationとnon root operationに分けられる
基本的にVMMがroot operationを、guestがnon root operationを実行する
また、root operationへの遷移をVM Exit, non root operationへの遷移をVM Enterと呼ぶ。

-
root operation
root operationはvmx外の命令に近くて、ほとんど制約などがない
(VMXにとって重要な一部のregisterなどにアクセスできない) -
non root operation
仮想化のために制約を課される側の命令。
そのため一部の命令は本来の動作の代わりにVM Exitが実行される。
(そしてVMM側で必要な処理を行う?)
VMM側にはVMCSという構造、VMCS pointerを使って情報を伝える
VMX全体の流れ
これまでの内容をまとめて以下の形になる

- VMXONでVMX環境を開始する
- VMMがguest softwareを開始する
- 適宜VM ExitでVMM側で必要な処理を行い、VM Enterで戻す
- VMXOFFでVM環境を終了する
VMXの有効化
VMXを有効にするための手順、条件について
そもそもCPUがVMXをサポートしているかどうか
CPUID.01H:ECX.VMX[5] = 1
VMXのどんな機能をサポートしているか
IA32_VMX_CR0_FIXED0
IA32_VMX_CR0_FIXED1
VMXONのための手順
CR4.VMXE[bit 13] = 1.
IA32_FEATURE_CONTROL
- Bit 0 (Lock bit)
このMSRに対する書き込みをlockするbit。このbit自体はVMXに直接関係しないけど、
同MSRの他のbitがVMXに関係するため、必要とされているみたい - Bit 1 (VMXON in SMX operation.)
- Bit 2 (VMXON outside SMX operation.)
それぞれSMX内で/外でVMXONを有効にするかどうかを決定するbit。
SMX (Safet Mode Extention. Intel TXT用の追加命令)
VMXに伴う制約について
- 関連するレジスタのbitを操作できなくなる
- A20M modeが使えなくなる
A20 Mask. リアルモード(16bit)でメモリ空間が1MB(20bit)だった時のふるまいを再現する機能 - INIT signalの無効化
Discussion