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

2,220 views

Published on

Published in: Technology
0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,220
On SlideShare
0
From Embeds
0
Number of Embeds
88
Actions
Shares
0
Downloads
15
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide

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

  1. 1. 「ハイパーバイザの作り方」 読書会#2 @syuu1228 13年9月11日水曜日
  2. 2. はじめに:本日の資料 • ハイパーバイザの作り方∼ちゃんと理解する仮想化技 術∼ 第2回 IntelVT-xの概要とメモリ仮想化 http://d.hatena.ne.jp/syuu1228/20130823/1377223503 13年9月11日水曜日
  3. 3. はじめに:SDMの読み方 • VT-xの範囲はVolume 3, Chapter 23-33 + Appendix A-C • アドレス変換:Chapter 28 • メモリ仮想化:Chapter 32.3 13年9月11日水曜日
  4. 4. ゲストメモリ空間が 仮想化されていないと CPU上で直接ゲストOSの命令列を実行する           ↓ メモリアクセス命令も直接実行される           ↓ ホストマシン上の全メモリ空間にアクセス可能になる           ↓ ハイパーバイザのメモリ領域にアクセス出来てしまう ホストマシン上のデバイスへMMIO出来てしまう 13年9月11日水曜日
  5. 5. ページング • 仮想メモリ(仮想マシンの話とは関係ない)をサポートするOS/アーキテクチャでは、プロセス1つ 1つに独立した仮想的なメモリ空間を提供している • 個別のメモリ空間を提供する事により、他のプロセスやカーネルのメモリ空間への不正なアクセスを 防ぐことができる(メモリ保護) • メモリ空間を固定長のページに分割し、仮想ページ番号:物理ページ番号の割り当て表(ページテー ブル)を使ってメモリアクセスを行うページング方式が主流 (仮想アドレスから物理アドレスへの変換はMMUがページテーブルを用いて行う) プロセス A 1 2 3 4 5 6 7 8 物理メモリ 1 2 2 3 1 5 62 3 ページテーブル A ページテーブル B 1 2 プロセス B 1 ▼図2 ページテーブル 13年9月11日水曜日
  6. 6. ページングと仮想化 • ゲストマシン上のページテーブルが指す物理ページ番号と、ハイ パーバイザがゲストマシンへ割り当てたい実際の物理ページの範 囲が異なる • ゲスト物理ページ番号:ホスト物理ページ番号の変換を行いたい プロセス A 1 2 3 4 ゲスト 物理メモリ 1 2 3 4 5 6 7 8 物理メモリ 1 1 2 ページテーブル A ゲストA 1 プロセス B 1 2 3 4 ページテーブル B 1 2 プロセス A 1 2 3 4 ゲスト 物理メモリ1 1 2 ページテーブル A ゲストB 1 プロセス B 1 2 3 4 ページテーブル B 1 2 13年9月11日水曜日
  7. 7. X86/X64のページング機構 • 1ページ=4KB(CPUの設定によっては2MB, 4MB, 1GBのページもサポートする が、あまり使われていない) • 多段化されたページテーブルを用いる(x86では2段、x64・PAEでは4段) • MMUがページテーブルへアクセス、アドレス変換はソフトウェアに対して透 過的に行われる • CR3:ページテーブルのアドレスを指定/CR0:ページング有効化ビット (PG) • ページが存在しないと#PF(exception 14)が発生 13年9月11日水曜日
  8. 8. 二段ページテーブル(X86) • ページテーブル=4MBの範囲(1024エントリ) • ページディレクトリ=4GBの範囲(1024エントリ) CR3 Page Directory 4MB* 1024 Directory 31 22 Table 21 12 Offset 11 0 Page Table Page Table 4KB* 1024 Physical Page Physical Page Physical Page Physical Page 4KB 13年9月11日水曜日
  9. 9. 四段ページテーブル(X64) • ページテーブル=2MBの範囲(512エントリ) • ページディレクトリ=1GBの範囲(512エントリ) • ページディレクトリポインタ=512GBの範囲(512エントリ) • ページマップレベル4=256TBの範囲(512エントリ) CR3 Page Map Level 4 512GB* 512 PML4 47 39 Directory Ptr 38 30 Directory 29 21 Table 20 12 Offset 11 0 Page Directory Pointer Page Directory Pointer 1GB* 512 Page Directory Page Table Page Table Page Table 2MB* 512 Page Table Page Table Page Table Page Table 4KB* 512 Physical Page Physical Page Physical Page Physical Page 4KB 13年9月11日水曜日
  10. 10. メモリの仮想化手法 • ゲスト物理ページ番号からホスト物理ページ番号への変換を行う方法として、ソフトウェアにより実現するものとハ ードウェアにより実現するものの二種類がある • シャドーページング • ソフトウェア上のテクニックにより仮想化を実現 • ソフトウェアによるテクニックのため、元々初期のVMwareのようにVT-xを使わない仮想化方式で利用されていた • それなりに大きなオーバーヘッドが生じる • ネステッドページング(Intel EPT) • ゲスト物理ページ番号からホスト物理ページ番号の変換を行うための新たなページテーブル(EPT)を導入 • VMX non-root mode(ゲストモード)でのメモリアクセス時にEPTを参照してアドレス解決を行うようMMUを拡張 • 高速だが、対応CPUが限られる 13年9月11日水曜日
  11. 11. シャドーページング ゲスト上での物理ページ番号1∼4が5∼8になるように、ハイパーバイザからアドレス変 換の結果を曲げたい                     ↓ ゲストOSにはページテーブルAを使っているように見せかけて、実際にはハイパーバイザが ページテーブルAをコピーして必要な変更を加えたページテーブルA”をCPUへセットしよう プロセス A 1 2 3 4 1 2 3 4 5 6 7 8 物理メモリ 1 2 2 ページテーブル A ゲストA 1 プロセス B 1 2 3 4 ページテーブル B 1 5 2 ページテーブル A” 1 2 7 8 ページテーブル B” 1 2 ゲスト 物理メモリ ゲスト 物理メモリ 6 13年9月11日水曜日
  12. 12. シャドーページングの実装 • CR3への書き込み(=ページテーブルのセット)のトラップ CR3への書き込みでVMExit 指定されたページテーブルの複製(シャドーページテーブル)を作り、シャドーページテーブルのアドレス をCR3へセット • CR3の読み込み(=ページテーブルアドレスの読み込み)のトラップ CR3の読み込みでVMExit シャドー元のアドレスを返す • ページテーブルエントリの書き込みのトラップ ページテーブルエントリが存在する範囲のページを書き込み禁止にしてアクセスがあったら#GP 例外が発生 するようにしておく #GPでVMExit ページテーブルエントリへの読み書きの 褄が合うように、シャドー元とシャドー先ページテーブルを書き 換え 13年9月11日水曜日
  13. 13. EPT • 仮想マシンの初期化時にEPTを作成、ページ割り当てを決めてEPTに設定(通常のページングと同じく、未割り 当てにしておいてページフォールト契機にデマンド割り当てする事も可能) • EPTの構造はx64の四段ページテーブルと同じ(ページテーブルエントリの構造は異なる) • VMCSのVM Execution control field→Extended PageTable Pointer(EPTP)にEPTのアドレスを設定 • シャドーページングのようにページング周りでトラップを行う必要なく、MMUが透過的にアドレス変換を実行 プロセス A 1 2 3 4 ゲスト 物理メモリ 1 2 3 4 5 6 7 8 物理メモリ 1 2 2 ページテーブル A ゲストA 1 プロセス B 1 2 3 4 ページテーブル B 1 2 5 6 3 4 7 8 EPT A 1 2 13年9月11日水曜日
  14. 14. EPTVIOLATION • EPT上に存在しないページやアクセス権限がないページ へのアクセスが発生すると、EPTViolationVMExitが発生 する • not presentを使ってデマンドページングを行ったり、ア クセス権限エラーを使ってMMIOのエミュレーションを 行う事が可能(MMIOについては今回は詳しく触れな い) 13年9月11日水曜日
  15. 15. VPID • TLBにホスト側でのアドレス変換結果がキャッシュされている状態でVMEntry、ま たはTLBにゲスト側のアドレス変換結果がキャッシュされている状態でVMExit し、キャッシュを保持したまま実行を続けると誤動作を起こす • VMEntry時/VMExit時に毎回TLBフラッシュが必要 →効率が悪い • TLBエントリにゲストマシン固有のIDをタグ付け出来るようにした(ASIDの仮想 マシン版) • VMCSのVM Execution control fieldでVPIDを設定、INVVPID命令で特定タグのTLBエ ントリのみフラッシュ 13年9月11日水曜日

×