🎃

Hypervisorを学ぶためにintel vmxの仕様を読む

に公開

Hypervisorを学ぶためにintel vmxの仕様を読む

概要

Hypervisorがどういうものなのか勉強したいと思ったのだけど、
IOMMUや、2階層の仮想メモリはともかく
Intel VT-xのような権限の分離回りがよく理解できなかったので、
もうIntelの仕様書から直接の動作を見に行くことにしました。

それのメモになります。


今回まとめる対象

Intel Software Developpers Manual
https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html
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全体の流れ

これまでの内容をまとめて以下の形になる

  1. VMXONでVMX環境を開始する
  2. VMMがguest softwareを開始する
  3. 適宜VM ExitでVMM側で必要な処理を行い、VM Enterで戻す
  4. 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