仮想環境における最適化を支援するための api
DESCRIPTION
仮想環境における最適化を支援するための API. 大山 恵弘 1,3 加藤 和彦 2,3 米澤 明憲 1,3 1 東京大学 2 筑波大学 3 JST CREST. 背景. 仮想的な計算環境を提供する システムが広まりつつある bochs, QEMU, PearPC VMware, VirtualPC, Xen, Plex86 User-Mode Linux, coLinux FreeBSD jail, SoftwarePot. 仮想環境システムの利点と欠点. 利点 一つの物理計算機上に多くの計算環境を作れる - PowerPoint PPT PresentationTRANSCRIPT
仮想環境における最適化を支援するための API
大山 恵弘 1,3 加藤 和彦 2,3 米澤 明憲 1,3
1 東京大学 2 筑波大学 3JST CREST
背景
仮想的な計算環境を提供するシステムが広まりつつある
bochs, QEMU, PearPCVMware, VirtualPC, Xen, Plex86User-Mode Linux, coLinuxFreeBSD jail, SoftwarePot
仮想環境システムの利点と欠点
利点一つの物理計算機上に多くの計算環境を作れる実環境と異なる OS ・ CPU ・ファイル階層を持つ計算環境を作れる重要な資源から隔離した計算環境を作れる
欠点オーバヘッドが加わる資源使用量が増える
仮想環境システムのオーバヘッド
QEMU
VMware
UML
SoftwarePot
体感的にわかるくらい遅い(最悪で 100 %を超える性能低下[Barham et al. ’03] )
数十 % の性能低下
非常に遅い
多
仮想化する対象
少
本研究の動機オーバヘッド
を減らしたい。どうしよう?
単純な最適化は全部組み込んだ…もう限界か?
いや、アプリケーションプログラマの力を借りれば、まだまだいける !!!
本研究の(長期的な)目的アプリケーションと仮想環境システムの協調によって実現する最適化の追求
Slogan:“VM-aware applications”“Sandbox-aware applications”• 例 : Apache optimized for VMware• 例 : sendmail optimized for SoftwarePot
各アプリケーションが仮想環境の動きを自分用に「カスタマイズ」して使う
イメージ
アプリケーション
仮想計算環境
OS
安全性検査仮想化処理
「動作、変われ!」
隠し機能
本研究の概要仮想環境システムの最適化を支援するための仮想システムコールの設計
API を通じてアプリケーションが自身の内部情報を仮想環境に伝達SoftwarePot [Kato et al. ’03] を対象に設計• ただし他のシステムにも適用が可能なように
一般性を持たせる
本発表では投機実行に関するものを紹介
発表の流れSoftwarePot の概要オーバヘッドの原因とその解消法提案する API その1提案する API その2議論関連研究まとめと今後の課題
SoftwarePot仮想計算環境( pot )を提供
pot 内で動くプロセスに資源の仮想ビューを見せるOS (カーネル)は実環境と共有仮想環境内に独自ファイル階層を構築ネットワークの見え方も仮想化
SoftwarePot
プロセス
プロセスプロセス
プロセス
実環境
仮想環境
実装方式
OS
SoftwarePotopen(“/etc/passwd”)
open(“/tmp/_root3841/etc/passwd”)
• 仮想化処理
• 安全性検査
SoftwarePot の性能( 2002年冬)
1.56
1.95
1.21
0
0.5
1
1.5
2
gcc LaTeX Emacs
OriginalSoftwarePot
SoftwarePot の性能( 2003年)
1.061.21 1.17
0
0.5
1
1.5
2
gcc LaTeX Emacs
OriginalSoftwarePot
6 ~ 21% のオーバヘッド
Apache Benchmark のスループット計測結果
FreeBSD jail
SoftwarePot
UML skas
UML tt
10KB 34249 12908 5671 5586
100KB 72594 63773 17520 17583
1000KB
73037 88079 23531 23115
(1物理ノードに1仮想ノードを載せた場合)
file
size
• [Peter et al. ’04] の報告 半分以下の性能
性能12%減
オーバヘッドの原因仮想化処理にかかる時間が丸ごとオーバヘッドとして実行時間に加わる
app
SoftwarePot
OS時間
どうすればこのオーバヘッドを減らせるか?
仮想化コードのチューニング
システムコールフックを( OHが大きい) ptraceでなく
カーネルモジュールで実装
もうやった! もうやった!
投機実行
投機実行将来のアプリケーションの動作を予測仮想化処理を投機的に並列実行
app
SoftwarePot
OS
投機実行将来のアプリケーションの動作を予測仮想化処理を投機的に並列実行
app
SoftwarePot
OS
投機実行で本当に高速化するのか?条件によっては高速化が可能 [ 尾上ら ’04]
実行時間
仮想化処理の量
投機実行なし
投機実行あり
高速化のための必要条件高い精度でアプリケーションの将来動作を予測次に呼び出されるシステムコール次にアクセスされるファイルetc
[ 尾上 ’ 04]の評価では、 100%当たると仮定
しかし、 SoftwarePot にとってアプリケーションはblackbox!
SoftwarePot
open(“/etc/passwd”)
pot の中の動きをうかがい知れない…
提案する API その1将来呼び出されるシステムコールを予測する規則を与える
sc_predict2(psysid, sysid1);sc_predict3(psysid, sysid1, sysid2)sc_predict4(psysid, sysid1, sysid2, sysid3)
例sc_predict3(open, mmap, stat)
mmap stat open
execve
unlink
write
提案する API その2将来アクセスされるファイルを予測する規則を与える
fadvise(dir, advice)fadvise(file, advice)s.t. advice = { RANDOM, ばらばらなアクセス SEQUENTIAL, 順番アクセス WILLNEED, 近い将来アクセス DONTNEED, 近い将来アクセスしない FREE もうアクセスしない }
API の支援に基づいて行う処理
仮想化処理・安全性検査の投機実行遠隔ファイルの投機フェッチファイルキャッシュの削除
API の支援にもとづいて投機すべき処理を判断
次に stat が実行される可能性が高い
次に / doc/f.txt がアクセスされる可能性が高い
stat(“/doc/f.txt”) の仮想化処理・安全性検査を投機実行
∧
遠隔にマップされたファイルへのアクセス
フェッチ投機
API の支援にもとづいて投機フェッチ
次に / doc/f.txt がアクセスされる可能性が高い
/doc/f.txt が遠隔にマップされている
∧
/doc/f.txt の実体を投機フェッチ
Potごとのファイル容量制限
SoftwarePot
Pot ファイル(仮想ディスク)
OS
50K 1M
10K
容量オーバー時:一時ファイルの削除
50K
49.9K
一時ファイルを以下の優先度で順に削除
1. FREE属性2. DONTNEED属性3. SEQUENTIAL属性
かつアクセス済み
議論 : 仮想環境システムでなくOS が提供すればいいのでは?確かに OS が提供する手段もある
仮想環境システムの最適化を考えてAPI を設計したが、 OS 自身への適用も可能
議論 : プログラマに書かせずに学習させればいいのでは?確かに学習でもある程度高い精度で予測可能
本研究は、プログラマの支援により、非常に高い精度で予測することが狙い
今後両者を実装して定量的に比較したい
関連研究(1)ゲスト OS と VMM の協調a.k.a. para-virtualization
Denali [Whitaker et al. ’02],Xen [Barham et al. ’03], LilyVM [榮樂ら ’ 03]
SoftwarePotOS
VMMゲスト OS
ホスト OS
アプリケーション
アプリケーション協調 協調
関連研究(2)ディスクの投機フェッチ [Fraser et al. ’03]Paging のための hint をコンパイラが自動挿入[Brown et al. ’00]効率的なページングのためのガイド API
madvise(addr, len, advice)s.t. advice = { RANDOM, ばらばらなアクセス SEQUENTIAL, 順番アクセス WILLNEED, 近い将来アクセス DONTNEED, 近い将来アクセスしない FREE もうアクセスしない }
まとめ仮想環境システムが投機実行するのを支援するための API を提案した
sc_predict(): 将来のシステムコール挙動を 予測する規則を与えるfadvise(): 将来アクセスされるファイルを 予測する規則を与える既存の有用な要素技術を仮想環境の文脈で見直していく!
今後の課題性能評価
「学習アプローチ」「静的解析アプローチ」との比較
API の追加例: 耐故障のための API
• Checkpoint 機能 [ 横山ら ’ 04] の挙動をアプリケーション内から制御
侵入検知システムへの応用侵入の有無を投機的にチェック
システムコール自体の投機実行への応用
Fin.