O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
「ハイパーバイザの作り方」
読書会#2
@syuu1228
13年9月11日水曜日
はじめに:本日の資料
• ハイパーバイザの作り方∼ちゃんと理解する仮想化技
術∼ 第2回 IntelVT-xの概要とメモリ仮想化
http://d.hatena.ne.jp/syuu1228/20130823/1377223503
13年9月1...
はじめに:SDMの読み方
• VT-xの範囲はVolume 3, Chapter 23-33 + Appendix A-C
• アドレス変換:Chapter 28
• メモリ仮想化:Chapter 32.3
13年9月11日水曜日
ゲストメモリ空間が
仮想化されていないと
CPU上で直接ゲストOSの命令列を実行する
          ↓
メモリアクセス命令も直接実行される
          ↓
ホストマシン上の全メモリ空間にアクセス可能になる
          ↓
...
ページング
• 仮想メモリ(仮想マシンの話とは関係ない)をサポートするOS/アーキテクチャでは、プロセス1つ
1つに独立した仮想的なメモリ空間を提供している
• 個別のメモリ空間を提供する事により、他のプロセスやカーネルのメモリ空間への不正なア...
ページングと仮想化
• ゲストマシン上のページテーブルが指す物理ページ番号と、ハイ
パーバイザがゲストマシンへ割り当てたい実際の物理ページの範
囲が異なる
• ゲスト物理ページ番号:ホスト物理ページ番号の変換を行いたい
プロセス A
1
2
3...
X86/X64のページング機構
• 1ページ=4KB(CPUの設定によっては2MB, 4MB, 1GBのページもサポートする
が、あまり使われていない)
• 多段化されたページテーブルを用いる(x86では2段、x64・PAEでは4段)
• MM...
二段ページテーブル(X86)
• ページテーブル=4MBの範囲(1024エントリ)
• ページディレクトリ=4GBの範囲(1024エントリ)
CR3 Page
Directory
4MB* 1024
Directory
31 22
Table
...
四段ページテーブル(X64)
• ページテーブル=2MBの範囲(512エントリ)
• ページディレクトリ=1GBの範囲(512エントリ)
• ページディレクトリポインタ=512GBの範囲(512エントリ)
• ページマップレベル4=256TBの...
メモリの仮想化手法
• ゲスト物理ページ番号からホスト物理ページ番号への変換を行う方法として、ソフトウェアにより実現するものとハ
ードウェアにより実現するものの二種類がある
• シャドーページング
• ソフトウェア上のテクニックにより仮想化を実...
シャドーページング
ゲスト上での物理ページ番号1∼4が5∼8になるように、ハイパーバイザからアドレス変
換の結果を曲げたい
                    ↓
ゲストOSにはページテーブルAを使っているように見せかけて、実際にはハイパー...
シャドーページングの実装
• CR3への書き込み(=ページテーブルのセット)のトラップ
CR3への書き込みでVMExit
指定されたページテーブルの複製(シャドーページテーブル)を作り、シャドーページテーブルのアドレス
をCR3へセット
• C...
EPT
• 仮想マシンの初期化時にEPTを作成、ページ割り当てを決めてEPTに設定(通常のページングと同じく、未割り
当てにしておいてページフォールト契機にデマンド割り当てする事も可能)
• EPTの構造はx64の四段ページテーブルと同じ(ペー...
EPTVIOLATION
• EPT上に存在しないページやアクセス権限がないページ
へのアクセスが発生すると、EPTViolationVMExitが発生
する
• not presentを使ってデマンドページングを行ったり、ア
クセス権限エラー...
VPID
• TLBにホスト側でのアドレス変換結果がキャッシュされている状態でVMEntry、ま
たはTLBにゲスト側のアドレス変換結果がキャッシュされている状態でVMExit
し、キャッシュを保持したまま実行を続けると誤動作を起こす
• VM...
Próximos SlideShares
Carregando em…5
×

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

  • Entre para ver os comentários

「ハイパーバイザの作り方」読書会#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日水曜日

×