仮想環境における最適化を支援するための api

38
仮仮仮仮仮仮仮仮仮仮仮仮仮仮仮仮仮仮仮 API 仮仮 仮仮 1,3 仮仮 仮仮 2,3 仮仮 仮仮 1, 3 1 仮仮仮仮 2 仮仮仮仮 3 JST CREST

Upload: lonna

Post on 11-Feb-2016

63 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: 仮想環境における最適化を支援するための API

仮想環境における最適化を支援するための API

大山 恵弘 1,3 加藤 和彦 2,3 米澤 明憲 1,3

1 東京大学 2 筑波大学 3JST CREST

Page 2: 仮想環境における最適化を支援するための API

背景

仮想的な計算環境を提供するシステムが広まりつつある

bochs, QEMU, PearPCVMware, VirtualPC, Xen, Plex86User-Mode Linux, coLinuxFreeBSD jail, SoftwarePot

Page 3: 仮想環境における最適化を支援するための API

仮想環境システムの利点と欠点

利点一つの物理計算機上に多くの計算環境を作れる実環境と異なる OS ・ CPU ・ファイル階層を持つ計算環境を作れる重要な資源から隔離した計算環境を作れる

欠点オーバヘッドが加わる資源使用量が増える

Page 4: 仮想環境における最適化を支援するための API

仮想環境システムのオーバヘッド

QEMU

VMware

UML

SoftwarePot

体感的にわかるくらい遅い(最悪で 100 %を超える性能低下[Barham et al. ’03] )

数十 % の性能低下

非常に遅い

仮想化する対象

Page 5: 仮想環境における最適化を支援するための API

本研究の動機オーバヘッド

を減らしたい。どうしよう?

単純な最適化は全部組み込んだ…もう限界か?

いや、アプリケーションプログラマの力を借りれば、まだまだいける !!!

Page 6: 仮想環境における最適化を支援するための API

本研究の(長期的な)目的アプリケーションと仮想環境システムの協調によって実現する最適化の追求

Slogan:“VM-aware applications”“Sandbox-aware applications”• 例 : Apache optimized for VMware• 例 : sendmail optimized for SoftwarePot

各アプリケーションが仮想環境の動きを自分用に「カスタマイズ」して使う

Page 7: 仮想環境における最適化を支援するための API

イメージ

アプリケーション

仮想計算環境

OS

安全性検査仮想化処理

「動作、変われ!」

隠し機能

Page 8: 仮想環境における最適化を支援するための API

本研究の概要仮想環境システムの最適化を支援するための仮想システムコールの設計

API を通じてアプリケーションが自身の内部情報を仮想環境に伝達SoftwarePot [Kato et al. ’03] を対象に設計• ただし他のシステムにも適用が可能なように

一般性を持たせる

本発表では投機実行に関するものを紹介

Page 9: 仮想環境における最適化を支援するための API

発表の流れSoftwarePot の概要オーバヘッドの原因とその解消法提案する API その1提案する API その2議論関連研究まとめと今後の課題

Page 10: 仮想環境における最適化を支援するための API

SoftwarePot仮想計算環境( pot )を提供

pot 内で動くプロセスに資源の仮想ビューを見せるOS (カーネル)は実環境と共有仮想環境内に独自ファイル階層を構築ネットワークの見え方も仮想化

Page 11: 仮想環境における最適化を支援するための API

SoftwarePot

プロセス

プロセスプロセス

プロセス

実環境

仮想環境

Page 12: 仮想環境における最適化を支援するための API

実装方式

OS

SoftwarePotopen(“/etc/passwd”)

open(“/tmp/_root3841/etc/passwd”)

• 仮想化処理

• 安全性検査

Page 13: 仮想環境における最適化を支援するための API

SoftwarePot の性能( 2002年冬)

1.56

1.95

1.21

0

0.5

1

1.5

2

gcc LaTeX Emacs

OriginalSoftwarePot

Page 14: 仮想環境における最適化を支援するための API

SoftwarePot の性能( 2003年)

1.061.21 1.17

0

0.5

1

1.5

2

gcc LaTeX Emacs

OriginalSoftwarePot

6 ~ 21% のオーバヘッド

Page 15: 仮想環境における最適化を支援するための API

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%減

Page 16: 仮想環境における最適化を支援するための API

オーバヘッドの原因仮想化処理にかかる時間が丸ごとオーバヘッドとして実行時間に加わる

app

SoftwarePot

OS時間

Page 17: 仮想環境における最適化を支援するための API

どうすればこのオーバヘッドを減らせるか?

仮想化コードのチューニング

システムコールフックを( OHが大きい) ptraceでなく

カーネルモジュールで実装

もうやった! もうやった!

投機実行

Page 18: 仮想環境における最適化を支援するための API

投機実行将来のアプリケーションの動作を予測仮想化処理を投機的に並列実行

app

SoftwarePot

OS

Page 19: 仮想環境における最適化を支援するための API

投機実行将来のアプリケーションの動作を予測仮想化処理を投機的に並列実行

app

SoftwarePot

OS

Page 20: 仮想環境における最適化を支援するための API

投機実行で本当に高速化するのか?条件によっては高速化が可能 [ 尾上ら ’04]

実行時間

仮想化処理の量

投機実行なし

投機実行あり

Page 21: 仮想環境における最適化を支援するための API

高速化のための必要条件高い精度でアプリケーションの将来動作を予測次に呼び出されるシステムコール次にアクセスされるファイルetc

[ 尾上 ’ 04]の評価では、 100%当たると仮定

Page 22: 仮想環境における最適化を支援するための API

しかし、 SoftwarePot にとってアプリケーションはblackbox!

SoftwarePot

open(“/etc/passwd”)

pot の中の動きをうかがい知れない…

Page 23: 仮想環境における最適化を支援するための API

提案する API その1将来呼び出されるシステムコールを予測する規則を与える

sc_predict2(psysid, sysid1);sc_predict3(psysid, sysid1, sysid2)sc_predict4(psysid, sysid1, sysid2, sysid3)

Page 24: 仮想環境における最適化を支援するための API

例sc_predict3(open, mmap, stat)

mmap stat open

execve

unlink

write

Page 25: 仮想環境における最適化を支援するための API

提案する API その2将来アクセスされるファイルを予測する規則を与える

fadvise(dir, advice)fadvise(file, advice)s.t. advice = { RANDOM, ばらばらなアクセス SEQUENTIAL, 順番アクセス WILLNEED, 近い将来アクセス DONTNEED, 近い将来アクセスしない FREE もうアクセスしない }

Page 26: 仮想環境における最適化を支援するための API

API の支援に基づいて行う処理

仮想化処理・安全性検査の投機実行遠隔ファイルの投機フェッチファイルキャッシュの削除

Page 27: 仮想環境における最適化を支援するための API

API の支援にもとづいて投機すべき処理を判断

次に stat が実行される可能性が高い

次に / doc/f.txt がアクセスされる可能性が高い

stat(“/doc/f.txt”) の仮想化処理・安全性検査を投機実行

Page 28: 仮想環境における最適化を支援するための API

遠隔にマップされたファイルへのアクセス

フェッチ投機

Page 29: 仮想環境における最適化を支援するための API

API の支援にもとづいて投機フェッチ

次に / doc/f.txt がアクセスされる可能性が高い

/doc/f.txt が遠隔にマップされている

/doc/f.txt の実体を投機フェッチ

Page 30: 仮想環境における最適化を支援するための API

Potごとのファイル容量制限

SoftwarePot

Pot ファイル(仮想ディスク)

OS

50K 1M

10K

Page 31: 仮想環境における最適化を支援するための API

容量オーバー時:一時ファイルの削除

50K

49.9K

一時ファイルを以下の優先度で順に削除

1. FREE属性2. DONTNEED属性3. SEQUENTIAL属性

かつアクセス済み

Page 32: 仮想環境における最適化を支援するための API

議論 : 仮想環境システムでなくOS が提供すればいいのでは?確かに OS が提供する手段もある

仮想環境システムの最適化を考えてAPI を設計したが、 OS 自身への適用も可能

Page 33: 仮想環境における最適化を支援するための API

議論 : プログラマに書かせずに学習させればいいのでは?確かに学習でもある程度高い精度で予測可能

本研究は、プログラマの支援により、非常に高い精度で予測することが狙い

今後両者を実装して定量的に比較したい

Page 34: 仮想環境における最適化を支援するための API

関連研究(1)ゲスト OS と VMM の協調a.k.a. para-virtualization

Denali [Whitaker et al. ’02],Xen [Barham et al. ’03], LilyVM [榮樂ら ’ 03]

SoftwarePotOS

VMMゲスト OS

ホスト OS

アプリケーション

アプリケーション協調 協調

Page 35: 仮想環境における最適化を支援するための API

関連研究(2)ディスクの投機フェッチ [Fraser et al. ’03]Paging のための hint をコンパイラが自動挿入[Brown et al. ’00]効率的なページングのためのガイド API

madvise(addr, len, advice)s.t. advice = { RANDOM, ばらばらなアクセス SEQUENTIAL, 順番アクセス WILLNEED, 近い将来アクセス DONTNEED, 近い将来アクセスしない FREE もうアクセスしない }

Page 36: 仮想環境における最適化を支援するための API

まとめ仮想環境システムが投機実行するのを支援するための API を提案した

sc_predict(): 将来のシステムコール挙動を 予測する規則を与えるfadvise(): 将来アクセスされるファイルを 予測する規則を与える既存の有用な要素技術を仮想環境の文脈で見直していく!

Page 37: 仮想環境における最適化を支援するための API

今後の課題性能評価

「学習アプローチ」「静的解析アプローチ」との比較

API の追加例: 耐故障のための API

• Checkpoint 機能 [ 横山ら ’ 04] の挙動をアプリケーション内から制御

侵入検知システムへの応用侵入の有無を投機的にチェック

システムコール自体の投機実行への応用

Page 38: 仮想環境における最適化を支援するための API

Fin.