仮想環境における最適化を 支援するためのAPI 大山 恵弘1,3 1東京大学 加藤 和彦2,3 2筑波大学 米澤 明憲1,3 3JST CREST 背景 仮想的な計算環境を提供する システムが広まりつつある bochs, QEMU, PearPC VMware, VirtualPC, Xen, Plex86 User-Mode Linux, coLinux FreeBSD jail, SoftwarePot 仮想環境システムの利点と欠点 利点 一つの物理計算機上に多くの計算環境を作れる 実環境と異なるOS・CPU・ファイル階層を持つ計算 環境を作れる 重要な資源から隔離した計算環境を作れる 欠点 オーバヘッドが加わる 資源使用量が増える 仮想環境システムのオーバヘッ ド 多 QEMU 仮 想 化 す る 対 象 VMware 少 SoftwarePot UML 非常に遅い 体感的にわかる くらい遅い (最悪で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 実環境 仮想環境 プロセス プロセス プロセス プロセス 実装方式 open(“/etc/passwd”) • 仮想化処理 • 安全性検査 SoftwarePot open(“/tmp/_root3841/etc/passwd”) OS SoftwarePotの性能(2002年冬) 1.95 2 1.56 1.5 1.21 Original SoftwarePot 1 0.5 0 gcc LaTeX Emacs SoftwarePotの性能(2003年) 2 1.5 1.06 1.21 1.17 Original SoftwarePot 1 0.5 0 gcc LaTeX Emacs Apache Benchmarkの スループット計測結果 file size • [Peter et al. ’04] の報告 半分以下の性能 FreeBSD Software UML UML tt jail Pot skas 10KB 34249 12908 5671 5586 100KB 72594 63773 17520 17583 1000KB 73037 88079 23531 23115 性能12%減 (1物理ノードに1仮想ノードを載せた場合) オーバヘッドの原因 仮想化処理にかかる時間が丸ごと オーバヘッドとして実行時間に加わる app SoftwarePot OS 時間 どうすればこのオーバヘッドを 減らせるか? もうやった! もうやった! システムコールフックを 投機実行 仮想化コードの チューニング (OHが大きい)ptraceでなく カーネルモジュールで実装 投機実行 将来のアプリケーションの動作を予測 仮想化処理を投機的に並列実行 app SoftwarePot OS 投機実行 将来のアプリケーションの動作を予測 仮想化処理を投機的に並列実行 app SoftwarePot OS 投機実行で本当に高速化 するのか? 条件によっては高速化が可能 [尾上 ら ’04] 実 行 時 間 投機実行なし 投機実行あり 仮想化処理の量 高速化のための必要条件 高い精度でアプリケーションの将来動作を 予測 次に呼び出されるシステムコール 次にアクセスされるファイル etc [尾上 ’04]の評価では、100%当たると仮定 しかし、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ごとのファイル容量制限 50K 1M 10K Potファイル (仮想ディスク) SoftwarePot OS 容量オーバー時: 一時ファイルの削除 50K 一時ファイルを以下の 優先度で順に削除 1. 2. 3. 49.9K FREE属性 DONTNEED属性 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] アプリケーション ゲストOS VMM ホストOS 協調 アプリケーション SoftwarePot 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.
© Copyright 2024 ExpyDoc