Virtualizing a Multiprocessor Machine on a Network of Computers 東京大学米澤研究室D2 金田憲二 発表の流れ • • • • • • 背景 基本設計 VMMの実装 共有メモリの一貫性制御 関連研究 まとめと今後の課題 発表の流れ • • • • • • 背景 基本設計 VMMの実装 共有メモリの一貫性制御 関連研究 まとめと今後の課題.
Download
Report
Transcript Virtualizing a Multiprocessor Machine on a Network of Computers 東京大学米澤研究室D2 金田憲二 発表の流れ • • • • • • 背景 基本設計 VMMの実装 共有メモリの一貫性制御 関連研究 まとめと今後の課題 発表の流れ • • • • • • 背景 基本設計 VMMの実装 共有メモリの一貫性制御 関連研究 まとめと今後の課題.
Virtualizing a Multiprocessor Machine
on a Network of Computers
東京大学米澤研究室D2
金田憲二
発表の流れ
•
•
•
•
•
•
背景
基本設計
VMMの実装
共有メモリの一貫性制御
関連研究
まとめと今後の課題
2
発表の流れ
•
•
•
•
•
•
背景
基本設計
VMMの実装
共有メモリの一貫性制御
関連研究
まとめと今後の課題
3
グリッド計算
広域に分散した多数の計算資源上での並列計算
例)複数の地理的に分散したクラスタ上で高性能計算
例)多数の遊休PC群を利用して地球外生命体を探索
4
グリッド計算の実現には…
• Customizableかつ安全な実行環境が必須
– ヘテロ環境上に、自分に適した環境を構築したい
例)全計算機に同一OS・ライブラリをインストールしたい
– 信頼できないプログラムを安全に実行したい
Linux2.6
Linux2.4
Solaris
Win2000
5
一つのアプローチ
• Virtual Machine Monitor (VMM)の利用
– 個々のユーザは、それぞれ別々の仮想機械上で
プログラムを実行するようにする
6
VMMによるアプローチの利点
• 仮想機械は実機械から独立しているので
– 各ユーザごとに使用するOS・ライブラリを
カスタマイズ可能
– 仮想機械をサンドボックスとして利用可能
Linux2.6
Linux2.6
Linux2.6
Linux2.6
Linux2.6
Linux2.4
Solaris
Win2000
7
既存研究
• [1~5]など
例)VMPlant [3]
• 仮想機械の柔軟な生成
• 仮想機械の設定の自動化
8
既存研究の問題点
• 並列計算のための枠組みとしては不十分
– VMM自体は、遠隔ジョブ投入・スケジューリング
などの機能を提供しない
• 既存の並列計算ツールとの組み合わせが必須
• 計算機の利用にかかる手間が増大
9
本研究の目的
• より並列計算の実行に適したVMMの実現
– 分散した資源を非常に簡便に利用できるようにする
10
提案するシステム
• 複数の分散した計算機上に
仮想的な並列計算機を構築するシステム
仮想空間
Nプロセッサのマルチプロセッサマシン
実空間
N台のシングルプロセッサマシン
11
本システムの利点
• 分散資源の簡便な利用
– ゲストOSのスケジューラが、個々の計算機にプロセスを
自動的に割り振ってくれる
仮想空間
プロセス
プロセス
プロセス
プロセス
プロセス
プロセス
プロセス
プロセス
Nプロセッサのマルチプロセッサマシン
実空間
N台のシングルプロセッサマシン
12
動作デモ
• 2台のラップトップPC(シングルプロセッサ)上に
仮想デュアルプロセッサマシンを構築
– その仮想機械上でLinuxをブートさせる
• まだ実装がナイーブなため非常に遅いが
13
イメージ図
目標とする性能
VMWareとの性能比
100%
1
2
4
8 16 32
プロセッサ数
14
発表の流れ
•
•
•
•
•
•
背景
基本設計
VMMの実装
共有メモリの一貫性制御
関連研究
まとめと今後の課題
15
基本設計
• 仮想機械のインターフェース
– 対象とするプロセッサ
• システム構成
– 仮想ハードウェアと実ハードウェアの対応
16
仮想機械のインターフェース
• Instruction Set Architecture (ISA)を仮想化
– IA-32を対象とする
• Paravirtualization
– 仮想機械と実機械は基本的には同一アーキテクチャ
– ただし、一部カーネルコードの改変が必要
• 仮想機械のプロセッサ数 = 実機の総プロセッサ数
17
対象とするプロセッサの詳細
ゆるい
• Pentium 4, Intel® XeonTM, P6
• Pentium®, Intel486TM
メモリの
一貫性
厳しい
18
システムの構成
• Hosted architecture
– VMMはホストOS上のユーザプロセス
ゲストOS
仮想機械
実機械
プロセッサ
プロセッサ
プロセッサ
プロセッサ
メモリ
VMM
VMM
VMM
VMM
ホストOS
ホストOS
ホストOS
ホストOS
プロセッサ
プロセッサ
プロセッサ
プロセッサ
メモリ
メモリ
メモリ
メモリ
19
Hosted Architectureの特徴
• IA-32の仮想化に適している
– sensitiveな特権命令の扱い(後述)
• 数多くの周辺デバイスを扱うのに適している
– ホストOSのドライバが利用可能なので
• インストール済みのホストOSとゲストOSとを
共存させることができる
※ハードウェアの上に直にVMMが置かれる場
合と比較すると、性能面では劣る
20
仮想ハードウェアと実ハードウェアの
対応
• プロセッサ 1対1対応
• メモリ、I/Oデバイス 1対多
ゲストOS
仮想機械
実機械
プロセッサ
プロセッサ
プロセッサ
プロセッサ
メモリ
VMM
VMM
VMM
VMM
ホストOS
ホストOS
ホストOS
ホストOS
プロセッサ
プロセッサ
プロセッサ
プロセッサ
メモリ
メモリ
メモリ
メモリ
21
仮想ハードウェアと実ハードウェアの
対応
• プロセッサ 1対1対応
• メモリ、I/Oデバイス 1対多
ゲストOS
仮想機械
実機械
プロセッサ
プロセッサ
プロセッサ
プロセッサ
メモリ
VMM
VMM
VMM
VMM
ホストOS
ホストOS
ホストOS
ホストOS
プロセッサ
プロセッサ
プロセッサ
プロセッサ
メモリ
メモリ
メモリ
メモリ
22
発表の流れ
•
•
•
•
•
•
背景
基本設計
VMMの実装
共有メモリの一貫性制御
関連研究
まとめと今後の課題
23
VMMの実装
• 以下のハードウェアを仮想化する
– プロセッサ
– (共有)メモリ
– I/Oデバイス
24
プロセッサの仮想化
• ほとんどの命令は、実機上でNative実行
• 実機やホストOSの状態と干渉する命令のみ、
ソフトウェアでエミュレーション実行
– 以降、エミュレーションを必要とする特殊な命令を
sensitive命令と呼ぶ
25
Sensitive命令の例
• in命令、out命令
– I/Oポートへの入出力
• mov cr3命令
– ページディレクトリを指す物理アドレスの書き換え
• invtlb命令
– TLBのフラッシュ
26
Sensitive命令の分類
• 特権命令
例)lgdt命令(GDTRレジスタへの書き込み)
– CPUの特権レベルがもっとも高い時のみ実行可能
– 低い特権レベルで実行すると、例外が発生
• 非特権命令
例)sgdt命令(GDTRレジスタからの読み込み)
– CPUの特権レベルに関わらず実行可能
27
Sensitive命令のエミュレーション
• 以下の2つのプロセスを用意する
– VMプロセス
• ゲストOS上のコードをNativeに実行
– モニタプロセス
• VMプロセスを監視
• sensitive命令の実行を捕捉し
エミュレーション
VMプロセス
監視
モニタプロセス
28
Sensitive命令の実行の捕捉
• 特権命令の場合
– 実行時に発生する例外を捕捉
※ユーザプロセスなので、特権レベルが低い
• 非特権命令の場合
– カーネルコードを(静的に)書き換え、
実行時に例外が発生するようにする
– そうして発生した例外を捕捉
※LiLyVMと基本的には同じ手法
29
Sensitiveな非特権命令の
エミュレーション (1/4)
1. カーネルのコードをコンパイル時に変換
– 非特権命令の直前にundefined instructionを挿入
※アセンブリからアセンブリへの簡単な変換器を作成
変換前
…
sgdt 0x012345
…
変換後
…
ud2a
sgdt 0x012345
…
30
Sensitiveな非特権命令の
エミュレーション (2/4)
2. VMプロセスがundefined instructionを実行
シグナルが発生する
…
ud2a
sgdt 0x012345
…
シグナル
VMプロセス
監視
モニタプロセス
31
Sensitiveな非特権命令の
エミュレーション (3/4)
3. 発生したシグナルをモニタプロセスが捕捉
– ptraceシステムコールを利用
…
ud2a
sgdt 0x012345
…
シグナル
VMプロセス
監視
モニタプロセス
32
Sensitiveな非特権命令の
エミュレーション (4/4)
4. 命令をデコードし、エミュレーション実行
– エミュレーション終了後、VMプロセスの実行を
再開
0f 0b
…
ud2a
VMプロセス
sgdt 0x012345
…
0f 01 05 45 23 01 00 監視
モニタプロセス
33
メモリの仮想化
• ページング機構の仮想化
– LiLyVMとほぼ同様
• 共有メモリ機構の仮想化
34
ページング機構の仮想化
• ページの物理メモリへのマップ
– 仮想機械のページディレクトリ・テーブルを参照
• カーネル空間の重複の回避
– ゲストOSのカーネルコードを書き換え
• ページフォルトのエミュレーション
– SIGSEGVシグナルを捕捉
35
ページの物理メモリへのマップ (1/3)
• ユーザアドレス空間を以下のよう分割
仮想機械のリニアアドレス空間
仮想機械の物理メモリを
保持するための領域
0x00000000
ユーザ空間
0xc0000000
0xffffffff
(ホストOSの)
カーネル空間
36
ページの物理メモリへのマップ (1/3)
• ユーザアドレス空間を以下のよう分割
リニアアドレス空間の開始アドレス
仮想機械のリニアアドレス空間
物理メモリの開始アドレス
0x00000000
0x00000000
0x00000000
ユーザ空間
仮想機械の物理メモリを
保持するための領域
0xc0000000
0xffffffff
(ホストOSの)
カーネル空間
37
ページの物理メモリへのマップ (2/3)
• 仮想機械のページディレクトリ・テーブルを
参照し、ページのマッピングを行う
– mmap、munmapシステムコールを利用
0x10001000
0x00001000
0x00000000
リニアアドレス 物理アドレス
0x10001000 0x00001000
0x90002000
0x00002000
…
…
0x00000000
リニアアドレス空間 物理メモリ
0x00000000
0xc0000000
38
0xffffffff
ページの物理メモリへのマップ (2/3)
• 仮想機械のページディレクトリ・テーブルを
参照し、ページのマッピングを行う
– mmap、munmapシステムコールを利用
0x90002000
0x00002000
0x00000000
リニアアドレス 物理アドレス
0x10001000 0x00001000
0x90002000
0x00002000
…
…
0x00000000
リニアアドレス空間 物理メモリ
0x00000000
0xc0000000
39
0xffffffff
ページの物理メモリへのマップ (3/3)
• ページディレクトリ・テーブルの更新にあわせて
マッピングも更新
例)cr3レジスタの値が更新された際
例)TLBのフラッシュされた際
40
カーネル空間の重複の回避
• ゲストOSとホストOSのカーネル空間が同じ
領域を使用
– ゲスト・ホストともにLinuxの場合
ゲストOSのカーネル空間のベースアドレス
を変更
ゲストOSのカーネル空間
0x00000000
0xa0000000
リニアアドレス空間 物理メモリ
0x00000000
ホストOSの
カーネル空間
0xc0000000
41
0xffffffff
共有メモリ機構の仮想化
• ソフトウェアDSMと同様の仕組みで実現
– ハードウェアのメモリ保護機能を利用
42
Naïveな実装 (1/2)
• ページごとに以下の状態を管理
– Exclusively Shared
• (自プロセッサのみが)最新の状態をローカルに保持し
ているページ
• 読み込み・書き込み可能
– Shared
• (複数プロセッサが)最新の状態をローカルに保持して
いるページ
• 読み込みのみ可能なページ
– Invalid
• 読み込み・書き込み共に不可能なページ
43
Naïveな実装 (2/2)
• 動作例
– Invalidなページへの読み込み
仮想プロセッサ1
メモリ
VMプロセス
モニタプロセス
仮想プロセッサ2
Invalid
shared
メモリ
Ex.
shared
shared
VMプロセス
ページの最新の状態を送信
SIGSEGVを捕捉
モニタプロセス
44
~注意~
SIGSEGVシグナルの取り扱い
• ページフォルトによってもSIGSEGVシグナル
は発生する
– InvalidなページへのアクセスによるSIGSEGVと、
ページフォルトによるSIGSEGVとを、
きちんと区別して扱う必要がある
45
I/Oデバイスの仮想化
• 全I/Oデバイスの状態を監視するサーバを用意
– 各プロセッサは、I/Oをエミュレーションする際に
このサーバと通信する
仮想プロセッサ1
VMプロセス
モニタプロセス
仮想プロセッサ2
I/Oサーバ
VMプロセス
モニタプロセス
46
基本的な動作例
• I/Oポートからの読み込み
…
in命令
仮想プロセッサ
…
I/Oポートへの読み込み
をエミュレーション
VMプロセス
in命令を
捕捉
モニタプロセス
サーバに
リクエストを送信
I/Oサーバ
in命令のソースオペランド
に値を格納
読み込み結果を返信
47
特殊なI/Oデバイス
• Advanced Programmable Interrupt
Controller (APIC)
– Memory Mapped I/O
例)物理アドレス0xee00020への読み込み
APICのIDを返す
例)物理アドレス0xee0300への書き込み
プロセッサ間割り込みを発生
プロセッサ間割り込み
= リモートプロセッサに割り込みを発生させる機構
(TLBのフラッシュ要求、CPUの起動要求などに用いる)48
APICのエミュレーション
• APICのmapされた物理アドレス領域への
読み書きを捕捉し、エミュレーションする
– ページを読み書き禁止にしておく
• プロセッサ間割り込みなども、適宜マシン間
で通信することによりエミュレーションする
49
発表の流れ
•
•
•
•
•
•
背景
基本設計
VMMの実装
共有メモリの一貫性制御
関連研究
まとめと今後の課題
50
共有メモリの一貫性制御
• 前述のNaïveな実装は非常に遅い
• IA-32のメモリモデルを満たす限りにおいて、
最適化する
51
IA-32のメモリモデル
• あるPUから見えるメモリの状態と、別のPUから
見えるメモリの状態とは、必ずしも一致しない
• ただし以下の制約を満たす
– Processor consistency
– Write atomicity
アドレス0x1000の値は0
アドレス0x1000の値は1
プロセッサ
プロセッサ
メモリ
52
Processor Consistency (1/2)
• あるプロセッサが行った書き込みは,
– 同一プロセッサには,すぐに反映される
– 異なるプロセッサには,遅れて反映されうる
PU1
write X to p
X
?
read from p
=
=
read from p
=
read from p
PU2
X
53
Processor Consistency (2/2)
• あるプロセッサが行った書き込みは,
同じ順序でリモートプロセッサに反映される
PU1
write X to p
PU2
PU3
write Y to q
write Z to r
54
Write Atomicity
• 書き込みはリモートプロセッサにatomicに
反映される
PU1
write X to p
PU2
PU3
(アドレスpに対する)
読み書きは,この間に
発生しない
55
同期命令
• 一時的にメモリ一貫性を強めるために用いる
– 直列化命令
– アトミック命令
56
直列化命令
• 例) mfence命令
– 書き込みがリモートプロセッサに反映されたことを保障
PU1
write X to p
PU2
PU3
write Y to q
write Z to r
mfence
57
アトミック命令
• LOCK prefix
– 例)lock; cmpxchg
– このprefixのついたread-modify-write命令は,
atomicに実行されることが保証される
• Exchange命令
– 例) XCHG命令
• Exchange Register/Memory with Register
58
最適化の例
• Multiple writes
– 一つのページに対して複数のプロセスが同時に
書き込み可能にする
– Processor Consistencyは満たしつつも
59
Multiple Writes (1/4)
• 直列化命令実行時に,ローカルの書き込み
結果を他の全てのマシンに反映させる
PU1
Write X to p
PU2
Write Y to q
Write Z to r
mfence
p, q, rへの書き込み
結果を送信
書き込み結果を
反映
60
Multiple Writes (2/4)
1. 全てのページを書き込み禁止にする
– mprotectシステムコールを利用
PC1
Twins
Memory
PC2
Memory
Write X to p
Write Y to q
Write Z to r
mfence
…
61
Multiple Writes (3/4)
2. ページに対して書き込みがあると
– そのページのコピー(= twin)を作成する
– そのページへの書き込みを許可する
PC1
PC2
Twins
Memory
Memory
Write X to p
Write Y to q
Write Z to r
mfence
p
X
q
Y
r
Z
…
62
Multiple Writes (4/4)
3. 直列化命令を実行する時に,
– twinと現在のメモリを比較してdiffを作成する
– diffをリモートマシンに送信する
PC1
PC2
Twins
Memory
Memory
Write X to p
Write Y to q
Write Z to r
mfence
p
X
q
Y
r
Z
…
63
発表の流れ
•
•
•
•
•
•
背景
基本設計
VMMの実装
共有メモリの一貫性制御
関連研究
まとめと今後の課題
64
関連研究 (1/3)
Virtual Machine Montiors (VMMs)
• VMWare ESX Server [6], Disco [7]
– 仮想的にマルチプロセッサマシンを構築可能
– ただし、実機もマルチプロセッサであることが前提
• LilyVM [8], FAUmachine [9]
– Hosted architecture
• VMMはホストOSのユーザプロセス
– ただし、シングルプロセッサマシンのみ対象
65
関連研究 (2/3)
シミュレータ・エミュレータ
• SimOS [10]
– マルチプロセッサマシンをシミュレーション可能
– ただし、実機もマルチプロセッサであることが前提
• Bochs [11]
– マルチプロセッサマシンをエミュレーション可能
– ただし、エミュレーションは逐次
• 定期的にエミュレーションするプロセッサを切り替え
66
関連研究 (3/3)
ソフトウェアDSMシステム
• Shasta [12]
– 既存の並列プログラムをソースコードの変更なし
に動作させることができる
– ただし、ユーザプログラムのみ実行可能
• OSのカーネルなどは実行不可能
67
発表の流れ
•
•
•
•
•
•
背景
基本設計
VMMの実装
共有メモリの一貫性制御
関連研究
まとめと今後の課題
68
まとめ
• 複数の分散した計算機上に
仮想的な並列計算機を構築するシステム
– 分散環境を簡便に利用するための枠組みを提供
69
当面の課題
• 実装のチューニング
– 今現在は、コンテクストスイッチなどがナイーブに
実装されている
– シングルプロセッサのエミュレーション自体が遅い
• メモリ一貫性制御アルゴリズムの改良
• 性能評価
70
今後の課題
• より現実的な環境で動作可能にする
– 耐故障性
– ヘテロな環境における効率のよいスケジューリング
– 動的な計算機の追加・削除への適応
71
参考文献
[1] Amr Awadallah and Mendel Rosenblum. “The "vMatrix: A Network
of Virtual Machine Monitors for Dynamic Content Distribution”.
In Proceedings of the 7th International Workshop on Web Content
Caching and Distribution (WCW’02), 2002
[2] Ananth I. Sundararaj and Peter A. Dinda. “Towards Virtual
Networks for Virtual Machine Grid Computing”. In Proceedings of
the 3rd Virtual Machine Research and Technology Symposium
(VM’04), 2004
[3] Ivan Victor Krsul and Arijit Ganguly and Jian Zhang and Jose A.B.
Fortes and Renato J. Figueiredo. “VMPlants: Providing and
Managing Virtual Machine Execution Environments for Grid
Computing”. In Proceedings of the SC2004, 2004
[4] R. Figueriredo and P.Dinda and J.Fortes. “A Case for Grid
Computing on Virtual Machines”. In Proceedings of the 23rd IEEE
International Conference on Distributed Computing (ICDCS’03),
2003
73
[5] Xuxian Jiang and Dongyan Xu. “SODA: a Service-On-Demand
Architecture for Application Service Hosting Utility Platforms”.
In Proceedings of the 12th IEEE International Symposium on High
Performance Distributed Computing (HPDC-12), 2003
[6] Carl A. Waldspurger. “Memory Resource Management in VMWare
ESX Server”. In Proceedings of the 5th Symposium on Operating
System Design and Implementation (OSDI’02), 2002
[7] Edouard Bugnion and Scott Device and Mendel Rosenblum.
“Disco: Running Commodity Operating Systems on Scalable
Multiprocessors”. In Proceedings of the 16th ACM Symposium on
Operating Systems Principles (SOSP), 1997.
[8] Hideki Eiraku and Yasushi Shinjo. “Running BSD Kernels as User
Processes Linux by Partial Emulation and Rewriting of Machine
Instructions”. In Proceedings of the BSDCon 2003, 2003
74
[9] Hoxer, H.-J. and Buchacker, K. and Sieh, V. “Implementing a UserMode Linux with Minimal Changes from Original Kernel”. In
Proceedings of Linux-Kongress 2002, 2002
[10] Mendel Rosenblum and Stephen A. Herrod and Emmett Witchel
and Anoop Gupta. “Complete Machine Simulation: The SimOS
Approach”. IEEE Parallel and Distributed Technology: Systems and
Applications, 1995
[11] Bochs: The Open Source IA-32 Emulation Project.
http://bochs.sourceforge.net/
[12] Daniel J. Scales and Kourosh Gharachorloo and Chandramohan A.
Thekkath. “Shasta: A Low Overhead, Software-Only Approach
for Supporting Fine-Grain Shared Memory”. In Proceedings of the
7th ACM International Conference on Architectural Support for
Programming Languages and Operating Systems (ASPLOS-VII),
1996
[13] IA-32 Intel® Architecture Software Developer’s Manual , 2003
75