87
カーネル/VM探検隊 第二回 Tsuyoshi Ozawa Twitter oza_x86 1 2009119日月曜日

Memory Virtualization

Embed Size (px)

Citation preview

Page 1: Memory Virtualization

カーネル/VM探検隊第二回Tsuyoshi OzawaTwitter oza_x86

12009年11月9日月曜日

Page 2: Memory Virtualization

はじめに

22009年11月9日月曜日

Page 3: Memory Virtualization

32009年11月9日月曜日

Page 4: Memory Virtualization

コレ!

42009年11月9日月曜日

Page 5: Memory Virtualization

誤報です

52009年11月9日月曜日

Page 6: Memory Virtualization

KVMの内容ないです

62009年11月9日月曜日

Page 7: Memory Virtualization

今日の内容

仮想マシン上における

メモリの仮想化について

for x86

72009年11月9日月曜日

Page 8: Memory Virtualization

そもそも仮想化とは

使い手(=OS)から実物と同じに見える

Linux on Real Machine Linux on Virtual Machine

82009年11月9日月曜日

Page 9: Memory Virtualization

実物を知ろう

92009年11月9日月曜日

Page 10: Memory Virtualization

実機の仮想アドレスの仕組み

x86 実機におけるお話をします

その後で仮想化(Shadow Page Table)の話

102009年11月9日月曜日

Page 11: Memory Virtualization

仮想メモリの概要

CPU

PhysicalMemory

VirtualMemory

仮想アドレス 物理アドレス

0x1000 0x11000

0x2000 0x12000

... ...

112009年11月9日月曜日

Page 12: Memory Virtualization

仮想メモリの利点

• 物理メモリより多くのメモリが使える

• プロセス毎にメモリを管理するので、より安全にプロセスが動作

122009年11月9日月曜日

Page 13: Memory Virtualization

仮想メモリの実現のために必要な

管理情報

• ページテーブル

• メモリアクセスの履歴

132009年11月9日月曜日

Page 14: Memory Virtualization

ページテーブル

• OSが管理

• バイナリの構造体

• 仮想アドレスを物理アドレスに変換する「表」

仮想アドレス 物理アドレス

0x1000 0x11000

0x2000 0x12000

... ...

142009年11月9日月曜日

Page 15: Memory Virtualization

ページテーブルの特徴• ページテーブルはプロセスの数だけある

• OSは参照するページテーブルを切り替えながら実行

仮想アドレス 物理アドレス

0x1000 0x11000

0x2000 0x12000

... ...

152009年11月9日月曜日

Page 16: Memory Virtualization

メモリアクセスの履歴• いつ、どのくらいの頻度でそのアドレスにアクセス?

• スワップイン・スワップアウトに利用

PhysicalMemory

swap inswap out

162009年11月9日月曜日

Page 17: Memory Virtualization

仮想メモリの実現に使われている

ハードウェア1. ページテーブルの場所を格納するレジスタ CR3

2. アドレス変換を行う MMU

3. キャッシュ TLB CPU

x86の場合はCPU上に載っている MMU

CR3

TLB

172009年11月9日月曜日

Page 18: Memory Virtualization

ページテーブルの場所を格納するレジスタ

• ページテーブルのアドレスを格納する

• Control Register の 3 番目

CR3

182009年11月9日月曜日

Page 19: Memory Virtualization

アドレス変換を行うハードウェア

• ページテーブルのエントリを解釈して、物理アドレスへ変換を行う

• Memory Management Unit

MMU

192009年11月9日月曜日

Page 20: Memory Virtualization

変換のキャッシュ

• Translation Look-aside Buffer

• メモリアクセスの度にページテーブルにアクセスすると遅い メモリアクセスの度にページテーブルへのメモリアクセスが生じる

• CPU内のSRAMに保存しておく

TLB

202009年11月9日月曜日

Page 21: Memory Virtualization

アドレス変換の仕組み

CR3

TLB

Virtual Address 0xc000312012bit20bit

ページテーブル

PhysicalMemory

1.TLBを見る

2.ページテーブルを参照

3.何番目のページか求める

4.オフセットを計算してアクセス

MMU

実際には3段ページングというのもある

212009年11月9日月曜日

Page 22: Memory Virtualization

ここまで実物の話

222009年11月9日月曜日

Page 23: Memory Virtualization

ここからVMの

メモリ仮想化の話

232009年11月9日月曜日

Page 24: Memory Virtualization

の前に

242009年11月9日月曜日

Page 25: Memory Virtualization

VMの概要について

252009年11月9日月曜日

Page 26: Memory Virtualization

VMの概要

• OSが動作できる環境を提供する

262009年11月9日月曜日

Page 27: Memory Virtualization

VMを管理するための

ソフトウェア

Virtual Machine Monitor

VMM

Hardware

272009年11月9日月曜日

Page 28: Memory Virtualization

VMMの種類

• 大雑把に分けて3種類のVMMが存在

• Robert P. Goldberg. ,Architectural Principles for Virtual Computer Systems.

282009年11月9日月曜日

Page 29: Memory Virtualization

Type I VMM

• ハードウェアを直接制御

• Xen, VMware ESX

VMM

Hardware

292009年11月9日月曜日

Page 30: Memory Virtualization

Type II VMM

• OS 上で動作するプロセスとして動作

• QemuLilyVMBochs

VMM

Hardware

OS

Proc

302009年11月9日月曜日

Page 31: Memory Virtualization

Hybrid 型 VMM

• Type I + Type II

• 現在の主流

• VMware WorkstationLinux KVM VMM

Hardware

OS

VMMProc

312009年11月9日月曜日

Page 32: Memory Virtualization

Hybrid 型 VMM

• コレの話がメイン

VMMHardware

OS

VMM

322009年11月9日月曜日

Page 33: Memory Virtualization

ようやくVMの

メモリ仮想化の話

332009年11月9日月曜日

Page 34: Memory Virtualization

2つの仮想化の手法

• Shadow Page Table ( SPT )ソフトウェアのみで実装

• Nested Page Table (Extended Page Table)ハードウェアの支援が必要

342009年11月9日月曜日

Page 35: Memory Virtualization

Shadow Page Table

• ゲストOSのページテーブルの Shadow をホストOS側で作る

• ゲストOSは Shadow を見て動作

352009年11月9日月曜日

Page 36: Memory Virtualization

SPTの概要

VMMHardware

OS

Hybrid 型VMMで説明します!

362009年11月9日月曜日

Page 37: Memory Virtualization

SPTの概要

VMMHardware

OS

CR3TLB

Guest side

Host side

VMvCR3vTLB

372009年11月9日月曜日

Page 38: Memory Virtualization

SPTの概要

VMMHardware

OS

CR3TLB

Guest side

Host side

VMvCR3vTLB

Guestpage table

create page table

382009年11月9日月曜日

Page 39: Memory Virtualization

SPTの概要

VMMHardware

OS

CR3TLB

Guest side

Host side

VMvCR3vTLB

Guestpage table

何らかのタイミングで...

392009年11月9日月曜日

Page 40: Memory Virtualization

SPTの概要

VMMHardware

OS

CR3TLB

Guest side

Host side

VMvCR3vTLB

Guestpage table

VMMに処理を渡す

402009年11月9日月曜日

Page 41: Memory Virtualization

SPTの概要

VMMHardware

OS

CR3TLB

Guest side

Host side

VMvCR3vTLB

Guestpage table

VMMはゲストPT を見る

412009年11月9日月曜日

Page 42: Memory Virtualization

SPTの概要

VMMHardware

OS

CR3TLB

Guest side

Host side

VMvCR3vTLB

Guestpage table

Shadowpage table

create SPT

422009年11月9日月曜日

Page 43: Memory Virtualization

HostPhysicalMemory

GuestPhysicalMemory

SPTでのメモリアクセス

VMMHardware

CR3TLB

OSVM

vCR3vTLB

Guestpage table

Shadowpage table

ゲストOSがvCR3

に書き込み

432009年11月9日月曜日

Page 44: Memory Virtualization

HostPhysicalMemory

GuestPhysicalMemory

SPTでのメモリアクセス

VMMHardware

CR3TLB

OSVM

vCR3vTLB

Guestpage table

Shadowpage table

HookしてVMMに処理が移る

442009年11月9日月曜日

Page 45: Memory Virtualization

HostPhysicalMemory

GuestPhysicalMemory

SPTでのメモリアクセス

VMMHardware

CR3TLB

OSVM

vCR3vTLB

Guestpage table

Shadowpage table

作ったSPTを実機CR3にロード

452009年11月9日月曜日

Page 46: Memory Virtualization

これでメモリアクセスが発生すると

462009年11月9日月曜日

Page 47: Memory Virtualization

SPTでのメモリアクセス

VMMHardware

CR3TLB

OSVM

vCR3vTLB

Guestpage table

Shadowpage table Host

PhysicalMemory

GuestPhysicalMemory

472009年11月9日月曜日

Page 48: Memory Virtualization

SPTでのメモリアクセス

VMMHardware

CR3TLB

OSVM

vCR3vTLB

Guestpage table

Shadowpage table Host

PhysicalMemory

GuestPhysicalMemory

ゲストの視点

482009年11月9日月曜日

Page 49: Memory Virtualization

SPTでのメモリアクセス

VMMHardware

CR3TLB

OSVM

vCR3vTLB

Guestpage table

Shadowpage table Host

PhysicalMemory

GuestPhysicalMemory

現実

492009年11月9日月曜日

Page 50: Memory Virtualization

SPTの動作のポイント

• ゲストOSの作ったページテーブルは

メモリアクセス時に見ない• VMMが作ったSPTを見て動作

502009年11月9日月曜日

Page 51: Memory Virtualization

SPTの実装

• Pre-Validation

• Virtual TLB

• Virtual TLB + Memory Trace

512009年11月9日月曜日

Page 52: Memory Virtualization

Pre-validation

• CR3 への書き込みをフック

• ゲストの作ったPTを見る

• SPTを全て再構築

522009年11月9日月曜日

Page 53: Memory Virtualization

Pre-validation

VMMHardware

OS

CR3TLB

Guest side

Host side

VMvCR3vTLB

Guestpage table

create page table

532009年11月9日月曜日

Page 54: Memory Virtualization

Pre-validation

VMMHardware

OS

CR3TLB

Guest side

Host side

VMvCR3vTLB

Guestpage table

ゲストOSは勝手にPTを作る

542009年11月9日月曜日

Page 55: Memory Virtualization

Pre-validation

VMMHardware

OS

CR3TLB

Guest side

Host side

VMvCR3vTLB

Guestpage table

CR3への書き込みをフック

552009年11月9日月曜日

Page 56: Memory Virtualization

Pre-validation

VMMHardware

OS

CR3TLB

Guest side

Host side

VMvCR3vTLB

Guestpage table

VMMに処理を渡す

562009年11月9日月曜日

Page 57: Memory Virtualization

Pre-validation

VMMHardware

OS

CR3TLB

Guest side

Host side

VMvCR3vTLB

Guestpage table

VMMはゲストPT を見る

572009年11月9日月曜日

Page 58: Memory Virtualization

Pre-validation

VMMHardware

OS

CR3TLB

Guest side

Host side

VMvCR3vTLB

Guestpage table

Shadowpage table

create SPT

582009年11月9日月曜日

Page 59: Memory Virtualization

HostPhysicalMemory

GuestPhysicalMemory

Pre-validation

VMMHardware

CR3TLB

OSVM

vCR3vTLB

Guestpage table

Shadowpage table

作ったSPTを実機CR3にロード

592009年11月9日月曜日

Page 60: Memory Virtualization

SPTでのメモリアクセス

VMMHardware

CR3TLB

OSVM

vCR3vTLB

Guestpage table

Shadowpage table Host

PhysicalMemory

GuestPhysicalMemory

SPTを見てアクセス

602009年11月9日月曜日

Page 61: Memory Virtualization

Pre-validationの欠点• プロセス切り替え毎

( CR3 への書き込み毎 ) にSPTを

全て再構築• コンテキストスイッチのオーバヘッドが非常に大きくなる

612009年11月9日月曜日

Page 62: Memory Virtualization

Virtual TLB

• CR3 に書き込みがあったらSPTの1段目だけを作る

• 残りはTLBミスが起きたところでSPTを作る

• TLBミスが起こると、それを補う「キャッシュ」をVMMが追加

622009年11月9日月曜日

Page 63: Memory Virtualization

Virtual TLB

VMMHardware

OS

CR3TLB

Guest side

Host side

VMvCR3vTLB

Guestpage table

create page table

632009年11月9日月曜日

Page 64: Memory Virtualization

Virtual TLB

VMMHardware

OS

CR3TLB

Guest side

Host side

VMvCR3vTLB

Guestpage table

ゲストOSは勝手にPTを作る

642009年11月9日月曜日

Page 65: Memory Virtualization

Virtual TLB

VMMHardware

OS

CR3TLB

Guest side

Host side

VMvCR3vTLB

Guestpage table

CR3への書き込みをフック

652009年11月9日月曜日

Page 66: Memory Virtualization

Virtual TLB

VMMHardware

OS

CR3TLB

Guest side

Host side

VMvCR3vTLB

Guestpage table

VMMに処理を渡す

662009年11月9日月曜日

Page 67: Memory Virtualization

Virtual TLB

VMMHardware

OS

CR3TLB

Guest side

Host side

VMvCR3vTLB

Guestpage table

VMMはゲストPT を見る

672009年11月9日月曜日

Page 68: Memory Virtualization

Virtual TLB

VMMHardware

OS

CR3TLB

Guest side

Host side

VMvCR3vTLB

Guestpage table

Shadowpage table1st stage

create SPT

682009年11月9日月曜日

Page 69: Memory Virtualization

Virtual TLB

VMMHardware

OS

CR3TLB

Guest side

Host side

VMvCR3vTLB

Guestpage table

Shadowpage table1st stage

create SPT

VMMはページテーブル

1段目のみを作成

692009年11月9日月曜日

Page 70: Memory Virtualization

HostPhysicalMemory

GuestPhysicalMemory

Virtual TLB

VMMHardware

CR3TLB

OSVM

vCR3vTLB

Guestpage table

Shadowpage table1st stage

作ったSPTを実機CR3にロード

702009年11月9日月曜日

Page 71: Memory Virtualization

Virtual TLBでのメモリアクセス

VMMHardware

CR3TLB

OSVM

vCR3vTLB

Guestpage table

Shadowpage table1st stage

HostPhysicalMemory

GuestPhysicalMemory

712009年11月9日月曜日

Page 72: Memory Virtualization

Virtual TLBでのメモリアクセス

VMMHardware

CR3TLB

OSVM

vCR3vTLB

Guestpage table

Shadowpage table1st stage

HostPhysicalMemory

GuestPhysicalMemory

ページフォールト

722009年11月9日月曜日

Page 73: Memory Virtualization

Virtual TLBでのメモリアクセス

VMMHardware

CR3TLB

OSVM

vCR3vTLB

Guestpage table

Shadowpage table1st stage

HostPhysicalMemory

GuestPhysicalMemory

ページフォールトハンドラ起動

732009年11月9日月曜日

Page 74: Memory Virtualization

Virtual TLBでのメモリアクセス

VMMHardware

CR3TLB

OSVM

vCR3vTLB

Guestpage table

Shadowpage table1st stage

HostPhysicalMemory

GuestPhysicalMemory

VMMはゲストPT を見る

742009年11月9日月曜日

Page 75: Memory Virtualization

Virtual TLBでのメモリアクセス

VMMHardware

CR3TLB

OSVM

vCR3vTLB

Guestpage table

Shadowpage table

2nd stageHost

PhysicalMemory

GuestPhysicalMemory

2段目のページテーブル埋まる

752009年11月9日月曜日

Page 76: Memory Virtualization

Virtual TLBでのメモリアクセス

VMMHardware

CR3TLB

OSVM

vCR3vTLB

Guestpage table

Shadowpage table

2nd stageHost

PhysicalMemory

GuestPhysicalMemory

この瞬間表が完成!

(注)ページテーブルの段数はCPUモード固有762009年11月9日月曜日

Page 77: Memory Virtualization

Virtual TLBでのメモリアクセス

VMMHardware

CR3TLB

OSVM

vCR3vTLB

Guestpage table

Shadowpage table

2nd stageHost

PhysicalMemory

GuestPhysicalMemory

ゲストOS

メモリアクセス再開

(注)ページテーブルの段数はCPUモード固有772009年11月9日月曜日

Page 78: Memory Virtualization

Virtual TLBでのメモリアクセス

VMMHardware

CR3TLB

OSVM

vCR3vTLB

Guestpage table

Shadowpage table

2nd stageHost

PhysicalMemory

GuestPhysicalMemory

ページがひけて無事アクセスできる

(注)ページテーブルの段数はCPUモード固有782009年11月9日月曜日

Page 79: Memory Virtualization

Virtual TLBの問題

• 整合性を保つのにひと工夫必要

• ページテーブルを変更したとき

• ページテーブルを追加したとき

• 作ったSPTは、結局吹き飛ばす

792009年11月9日月曜日

Page 80: Memory Virtualization

Virtual TLBにおけるフックポイントまとめ

• TLBが無効になったとき

• CR3 に書き込んだとき

• invlpg 命令が発効されたとき

• ゲストOSのコンテキストでページフォールトが生じたとき

• メモリへのアクセス保護例外が発生したとき(PTE変更への対処)

802009年11月9日月曜日

Page 81: Memory Virtualization

SPTを長生きさせるには

• TLBフラッシュが起きたときにSPTを吹き飛ばさないようにする

• ゲストOSの作ったPTとSPTの整合性がとれていれば可能

812009年11月9日月曜日

Page 82: Memory Virtualization

Memory Trace

• ゲストOSの作成したPTへのアクセスアクセス保護例外を使ってフック

• ゲストOSで生じたイベントを記録して吹き飛ばすことなくSPTを再現する(Trace)

822009年11月9日月曜日

Page 83: Memory Virtualization

神は細部に宿り給う• x86特有の問題

• ページテーブルの段数がCPUのモードによって切り替わる

• Linux KVM ではマクロを使ってひな形を用意してコード量を削減

832009年11月9日月曜日

Page 84: Memory Virtualization

見てみましょう

kvm-88/kernel/x86/paging_tmpl.h

842009年11月9日月曜日

Page 85: Memory Virtualization

Nested Page Table(Extended Page Table)• ページングの段階をもう一段階増やす

ゲスト仮想アドレス

ゲスト物理アドレス

ホスト物理アドレス

0x1000 0x11000 0x21000

0x2000 0x12000 0x42000

... ...

852009年11月9日月曜日

Page 86: Memory Virtualization

NPT/EPTの特徴• AMDのCPUではほとんどのCPUでサポートされている

• Intel CPUでは割と最近のCPU(i7以降)で実装された

• VMMの実装がシンプルになる

• SPTより速いとは限らない

862009年11月9日月曜日

Page 87: Memory Virtualization

まとめ

• VMにおけるメモリの仮想化

• SPT

• Pre-validation

• Virtual TLB

• NPT/EPT

872009年11月9日月曜日