2012/09/22 カーネル/VM探検隊@つくば 発表資料「Nested VMMとはなんぞや」2. Nested
VMMについて
• Nested
VMMとは
– 読んで字のごとく、VMMをネストする
• Nested
VMMの例
– KVM
on
KVM
– BHyVe
on
VMWare
– BitVisor
on
VMWare
4. Nested
VMM
して何が嬉しい?
• VMMを動かすのに実マシンを用意せず済む
• VMMのデバッグが楽になる
– GDBとか使ってサクッとVMMデバッグできる
– 当研究室は主に実マシンで動作確認してて辛い
• VMMと共に僕らの眼の輝きも死んでゆく
• @m_bird
さん「Nested
VMMで飯が美味い」
5.
(
˘⊖˘)
。o(待てよ……どうすればVMMをネストで
きるんだ……?)
6. Nested
VMM
の設計のお話
• どうすればVMMをネスト出来るか?
• The
Turtles
Project[OSDI’10]やXen
Summit
の
Nested
VMMについての記述をまとめてみた
7. Intel
VT解説(VMXその1)
• ハードでVMを動かす為のモードを提供
– x86ではセンシティブ命令の扱いが面倒
– VM専用モード(VMX
non-‐root
mode)を用意
• トラップすべき命令が実行されたらVMX
root
mode
へ遷移
(VMExit)
• 適切なエミュレーションをしてVMX
non-‐root
modeに戻る
(VMEntry)
VMX
root
mode
VMX
non-‐root
mode
VMExit
VMEntry
VMX命令で制御
9. Intel
VT解説(EPT)
• 仮想化においてページングの扱いが面倒
– 物理アドレスを引くのに二重の変換を要する
– 一発で引けるよう自前でページテーブル用意する
• shadow
page
table
• EPT(Extended
Page
Table)
– VMMがやらなきゃならない煩雑なアドレス変換をハード
がやってくれる
– 仮想化のオーバーヘッド低減
11. VMX命令のトラップとエミュレーション
• L1ではVMX命令を実行できない
– L1
はVMX
non-‐root
mode
で動いてる
– →
L0
に仕事を投げる!
• L1
のVMX命令実行時の処理
1. L1-‐>L0
へVMExit
L2
ゲストOS
2. L0でエミュレーション
Virtual
VMEntry
3. L0-‐>L1
へVMEntry
L1
ゲストVMM
2.
VMEntry
• L1-‐>L2へのVMEntry
1.
VMExit
2.
VMEntry
1. L1-‐>L0
へVMExit
L0
ホストVMM
2. L0-‐>L2
へVMEntry
ハードウェア
12. VMCS
shadowing
• VMXをネストする上でVMCSも複数用意
1. L0,
L1制御用のVMCS0,1
2. L1,
L2制御用のVMCS1,2
3. L0,
L2制御用のVMCS0,2
L2
ゲストOS
• VMCS1,2
をshadowing
• L0<-‐>L2遷移を可能に
VMCS1,2
L1
ゲストVMM
shadowing
L0
ホストVMM
VMCS0,1
VMCS0,2
ハードウェア
14. L0絡みのイベント処理
• L0で処理すべきイベント
• VMCS0,2
に記述されていてVMCS1,2
に記述されていない処理
• 外部割り込み,NMIなど
• L0でイベントをハンドリングして,L2をレジューム
L2
ゲストOS
1.
VMExit
3.
VMEntry
L1
ゲストVMM
VMCS1,2
shadowing
L0
ホストVMM
VMCS0,1
VMCS0,2
2.
イベント処理
ハードウェア
15. L1絡みのイベント処理
• VMCS1,2
に記述されているイベントの処理
• L0からL1にイベントをフォワード
– VMCS1,2のExit
Reason
を更新しL2からExit
したように見せる
• L1をレジュームし,イベント処理後L0を経由しL2をレジューム
L2
ゲストOS
Virtual
VMEntry/VMExit
1.
VMExit
4.
イベント
L1
ゲストVMM
VMCS1,2
処理
6.
VMEntry
shadowing
3.
VMEntry
5.
VMExit
2.
VMCS
L0
ホストVMM
VMCS0,1
VMCS0,2
更新
ハードウェア
17. Shadow
Page
Table
で頑張る方針
• Shadow-‐on-‐shadow
– L0,L1
でそれぞれshadow
page
table
を持つ
– L0物理アドレスのアクセスはL0のSPT02で一気に変換
• Shadow-‐on-‐EPT
– L0
でEPTを使用し,L1でshadow
page
nested MMU virtualization models.
ent
table
を持つ
– オーバーヘッド大
• L2でpage
fault
する度,L0へVMExit
した後L1
でSPT更新する必要有…
Figure 4: MMU alternatives for neste
18. Mulc-‐dimensional
Paging
• 一つのEPTでL2物理→L0物理変換を可能にする
– 二つのEPTを合成したEPT02を持つ
• L0のEPT01,
L1のEPT12
– ページフォルトによるVMExit
が減少しオーバーヘッド低減
ent nested MMU virtualization models. a
– L1のEPT12への更新を検出しEPT02に反映する必要有り
e
• L1におけるEPT12の更新とINVEPTをトラップする
p
a
c
f
c
i
t
o
t
Figure 4: MMU alternatives for nested virtualization
20. 参考資料
• The
Turtles
Project[OSDI’10]の論文
– hgp://stacc.usenix.org/events/osdi10/tech/
full_papers/Ben-‐Yehuda.pdf
• kvm
の実装
– arch/x86/kvm/vmx.c