380 likes | 520 Views
仮想環境における最適化を支援するための 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. 仮想環境システムの利点と欠点. 利点 一つの物理計算機上に多くの計算環境を作れる
E N D
仮想環境における最適化を支援するためのAPI 大山 恵弘1,3 加藤 和彦2,3 米澤 明憲1,3 1東京大学 2筑波大学 3JST CREST
背景 • 仮想的な計算環境を提供するシステムが広まりつつある • bochs, QEMU, PearPC • VMware, VirtualPC, Xen, Plex86 • User-Mode Linux, coLinux • FreeBSD jail, SoftwarePot
仮想環境システムの利点と欠点 • 利点 • 一つの物理計算機上に多くの計算環境を作れる • 実環境と異なるOS・CPU・ファイル階層を持つ計算環境を作れる • 重要な資源から隔離した計算環境を作れる • 欠点 • オーバヘッドが加わる • 資源使用量が増える
仮想環境システムのオーバヘッド 多 仮想化する対象 少 QEMU 非常に遅い 体感的にわかるくらい遅い (最悪で100%を超える性能低下 [Barham et al. ’03]) VMware UML SoftwarePot 数十%の性能低下
単純な最適化は全部組み込んだ…もう限界か?単純な最適化は全部組み込んだ…もう限界か? いや、アプリケーション プログラマの力を借りれば、まだまだいける!!! 本研究の動機 オーバヘッドを減らしたい。 どうしよう?
本研究の(長期的な)目的 • アプリケーションと仮想環境システムの協調によって実現する最適化の追求 • 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 実環境 仮想環境 プロセス プロセス プロセス プロセス
実装方式 open(“/etc/passwd”) • 仮想化処理 • 安全性検査 SoftwarePot open(“/tmp/_root3841/etc/passwd”) OS
SoftwarePotの性能(2003年) 6~21%のオーバヘッド
Apache Benchmarkのスループット計測結果 半分以下の性能 • [Peter et al. ’04] の報告 file size (1物理ノードに1仮想ノードを載せた場合) 性能12%減
オーバヘッドの原因 • 仮想化処理にかかる時間が丸ごとオーバヘッドとして実行時間に加わる app SoftwarePot OS 時間
もうやった! もうやった! どうすればこのオーバヘッドを減らせるか? 投機実行 仮想化コードの チューニング システムコールフックを (OHが大きい)ptraceでなく カーネルモジュールで実装
投機実行 • 将来のアプリケーションの動作を予測 • 仮想化処理を投機的に並列実行 app SoftwarePot OS
投機実行 • 将来のアプリケーションの動作を予測 • 仮想化処理を投機的に並列実行 app SoftwarePot OS
投機実行で本当に高速化するのか? • 条件によっては高速化が可能 [尾上ら ’04] 投機実行なし 実行時間 投機実行あり 仮想化処理の量
高速化のための必要条件 • 高い精度でアプリケーションの将来動作を予測 • 次に呼び出されるシステムコール • 次にアクセスされるファイル • etc [尾上 ’04]の評価では、100%当たると仮定
しかし、SoftwarePotにとってアプリケーションはblackbox!しかし、SoftwarePotにとってアプリケーションはblackbox! potの中の動きを うかがい知れない… open(“/etc/passwd”) SoftwarePot
提案する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ごとのファイル容量制限 1M 50K 10K Potファイル(仮想ディスク) SoftwarePot OS
容量オーバー時:一時ファイルの削除 • 一時ファイルを以下の優先度で順に削除 • FREE属性 • DONTNEED属性 • SEQUENTIAL属性かつアクセス済み 50K 49.9K
議論: 仮想環境システムでなくOSが提供すればいいのでは? • 確かにOSが提供する手段もある • 仮想環境システムの最適化を考えてAPIを設計したが、OS自身への適用も可能
議論: プログラマに書かせずに学習させればいいのでは? • 確かに学習でもある程度高い精度で予測可能 • 本研究は、プログラマの支援により、非常に高い精度で予測することが狙い • 今後両者を実装して定量的に比較したい
関連研究(1) • ゲストOSとVMMの協調a.k.a. para-virtualization • Denali [Whitaker et al. ’02],Xen [Barham et al. ’03], LilyVM [榮樂ら’03] アプリケーション ゲストOS アプリケーション 協調 協調 VMM SoftwarePot ホスト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] の挙動をアプリケーション内から制御 • 侵入検知システムへの応用 • 侵入の有無を投機的にチェック • システムコール自体の投機実行への応用