仮想マシン間プロセススケジューリングの 実環境への適用にむけて 田所秀和 (東工大) 光来健一 (九工大/CREST) 千葉 滋 (東工大) 1 仮想マシン環境でのスケジューリング • 仮想マシン(VM)をつかったサーバ統合 – リソースの利用効率向上 • システム全体で優先度をつけにくくなる – Backup が他のサービスを阻害しないようにしたい VM1 VM2 – OSのスケジューリングのみ • WEB と backup 間に優先度は つけられない – VMスケジューリングを併用 • DBが止まった場合backupの 優先度が高くなってしまう DB WEB backup 優 先 度 VMM Hardware 2 Monarch Scheduler [田所ら ‘08] (1/2) • 仮想マシンモニタがゲストOSのランキューを操 作 – ゲストOSのスケジューリングポリシーを変更 • プロセスを止める:プロセスをランキューから外す • プロセスを再開:ランキューに戻す VM1 VM2 – ゲストOSの変更が不要 – ゲストOS内で特別あつかいする スレッドが不要 DB backup WEB VMM ランキューを直接操作 3 Monarch Scheduler [田所ら ‘08] (2/2) • システム全体でプロセスに優先度をつける • ポリシー例 – Backupの優先度最低 • 他のサービスを阻害しないよう – WEB or DBが動いているときはbackupを停止 • VMMが定期的にゲストOSを調査 VM1 VM2 DB WEB 優 先 度 backup 優先度最低 VMM Hardware 4 本発表:MonarchSchedulerの拡張 • I/Oバウンドプロセスの制御 – ランキューに載りにくい • 定期的にチェックする方法では難しかった • 約74%はI/O待ち – iozoneで調査 • WindowsゲストOSに対応 – Linuxとは違う • ソースコードが無い • 公開情報が少ない • シンボルのアドレスがロード時まで不定 5 I/Oバウンドプロセス制御の問題(1/2) • プロセスをウェイトキューから除く – ウェイトキューの発見が難しい • さまざまな場所に存在 – nfsはモジュールのロード時にヒープに生成 • ランキューは起動時に生成され、CPU毎に存在 – 単純に戻すだけでは再開させられない可能性 • 永遠にI/O待ちの可能性 • 定期的に調べるだけでは、I/Oが完了したか不明 6 I/Oバウンドプロセス制御の問題(2/2) • ゲストOSのI/Oスケジューラでの操作 – I/Oリクエストを止めれば、発行したプロセスが止まる – リクエストが存在する時間が短い • ドメイン0での操作 – フロント、バック間のリクエストの対応付けが難しい – リクエストとプロセスの対応が難しい Xen I/O アーキテクチャ ドメイン0 バックエンド 実ドライバ ドライバ ドメインU I/O Scheduler フロントエンド ドライバ Xen VMM ハードウェア 7 プロセスの状態変更で制御 • I/O待ちプロセスの状態を書き換え – {,UN}INTERRUPTIBLE を STOPPED に – I/O完了時に自発的に止まる – 通常ならI/O完了時にRUNNINGになりランキューへ • 再開させるときは、ランキューに挿入 – 状態をRUNNINGにしてから interruptible VMM stoppedに 変更 stopped interruptible stopped I/O完了後 VMM VMM 8 Windowsでのランキューの位置特定 • VMMから直接発見する方法は不明 – LinuxではGSレジスタからたどれる – デバッガを使っても直接は不明 – レジスタからたどれるか不明 Linuxの場合 Linuxのメモリ GSレジスタ x8664_pda ランキュー struct x8664_pda { task_t * current; ulong data_offset; …}; data_offset + PER_CPU_RUNQUEUES 9 Windowsのランキュー位置推定 • PsActiveProcessHeadの発見が目標 – PsActiveProcessHeadから固定長離れている – PsActiveProcessHeadはプロセスリストの先頭 Windows Kernel 実行中プロセス 実行待ちプロセス アイドルプロセス ProcHead current 固定長 離れている summary 実行待ち リスト配列 IRQL ランキュー VMM 10 プロセスリストの発見 • プロセス候補をメモリ全体から探す – Xenのスナップショット機能を利用 – プロセス型を表すビット列を探索 • オブジェクトは型を表すヘッダを保持 • GREPEXEC [bugcheck ’06] を利用 • プロセスかをチェック – 実行ファイル名がアスキー文字 – プロセスIDが4の倍数 – プロセス全体が一つの環状リストになっている 11 PsActiveProcessHeadの発見 • プロセスとはアドレスが異なる – プロセスの上位32ビットは 0xfffffa80 – ProcHeadの上位32ビットは0xfffff800 % ./search_mem ~root/debutante.save 0 Idle priority: 0 next: 0xffffffffffffff18, prev: 0xffffffffffffff18 4 System priority: 8 next: 0xfffffa8002c97c10, prev: 0xfffff800017ad338 2212 WmiPrvSE.exe priority: 8 next: 0xfffffa8001659c10, prev: 0xfffffa8002f1ab50 2424 explorer.exe priority: 8 next: 0xfffffa8002f1ab50, prev: 0xfffffa80036c5040 2200 taskeng.exe priority: 8 next: 0xfffffa8003696a40, prev: 0xfffffa80035c3040 2248 rdpclip.exe priority: 8 next: 0xfffffa80036c5040, prev: 0xfffffa8003680040 2316 dwm.exe priority: 8 next: 0xfffffa80036d66c0, prev: 0xfffffa8003696a40 4 priority: 0 next: 0xa800000009ff18, prev: 0x1fff1c ….. 1112 svchost.exe priority: 8 next: 0xfffffa800307dc10, prev: 0xfffffa8002f58c10 680 logon.scr priority: 4 next: 0xfffff800017ad338, prev: 0xfffffa8000c9fc10 12 Windowsでのランキューの一貫性 • ランキューが操作されていないときのみ、ラン キューを操作 – Linuxの場合は、スピンロックをチェック – VMMが割り込み要求レベル(IRQL)をチェック • SYNCH_LEVEL以上なら、スケジューリング中の可能性 • SYNCH_LEVEL未満なら、スケジューリング中でない Linuxのスケジューラ schedule() { spin_lock(runqueue); ランキューの操作 spin_unlock(runqueue); }; 13 実験 • 目的 – Linuxで、I/Oバウンドプロセスを制御できるか – Windowsで、ランキューの位置特定にかかる時間 – Windowsにおける、スケジューリングの挙動 • 実験環境 • Core2Duo 2.4GHz、メモリ6Gbyte • Xen 3.3.0 (x86_64) • ドメイン0 :Linux 2.6.18.8、メモリ2Gbyte • ドメインU:Linux 2.6.16.33, Windows Vista SP1、メモリ1Gbyte 14 実験:I/Oバウンドプロセスの制御 • iozoneを制御 – ディスクベンチマークツール • CPU時間の増加量から、実行を判断 停止中 ドメイン0 ドメインU Monarch Scheduler iozone Xen VMM 15 実験:ランキューの位置特定時間 • ドメインUのメモリサイズを変化 • メモリイメージを書き出す場所を変化 – 実ディスク – tmpfs • メモリサイズに比例 • ディスクI/Oが ボトルネック 16 実験:スケジューリングの挙動 • 4つのプロセスをスケジューリング – ドメインU1で3つ、ドメインU2で1つ – プロセスは円周率の計算 • PI1 の優先度を最低 ドメインU1 ドメインU2 PI2 PI3 PI4 PI1 優先度最低 Xen VMM 17 関連研究 • ゲストOSの情報を使いVMをスケジューリング – Task-aware VM Scheduling [VEE’09 Kim et al.] • Gray-box知識を利用 – Guest-aware VM Scheduling [europar’08 kim et al.] • ゲストOSからプロセスの優先度情報を取得 • Windowsの内部情報に依存した手法 – VMwatcher [CCS’07 Jiang et al.] • GREPEXECを使いプロセスを推定 – Lares [PS’08 Payne et al.] • ゲストOSにカーネルモジュールを追加 18 まとめと今後の課題 • まとめ – Monarch Schedulerの拡張 • VMMからI/Oバウンドなプロセスを制御 • WindowsゲストOSにも対応 • 今後の課題 – WindowsでのI/Oバウンドプロセスの制御 – 現在実行中のプロセス制御 – 現実的なアプリケーションを対象とした実験 19
© Copyright 2024 ExpyDoc