slide (PowerPoint)

仮想環境における最適化を
支援するための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.