複数OSに対応した仮想マシン間 プロセススケジューリング 数理・計算科学専攻 千葉研究室 田所 秀和 指導教員 千葉 滋 1 仮想マシン環境でのスケジューリング • 仮想マシン(VM)を用いたサーバ統合 – リソースの利用効率向上 • システム全体でサービスに優先度をつけたい – 重要なサービスを阻害させない必要 • プロセスはすべてのVMから 影響を受ける • ハードウェアを共有している ため – 例: DB = WEB > backup VM1 VM2 DB WEB backup 優 先 度 VMM Hardware 2 システム全体でのスケジューリングは 難しい • OSのスケジューリングとVMのスケジューリン グだけではうまくいかない – OSのスケジューリングのみ • WEB と backup 間に優先度はつけられない • DB > backup は可能 – VMスケジューリングを併用 • DBが止まった場合backupの 優先度が高くなってしまう VM1 VM2 DB WEB backup 優 先 度 VMM Hardware 3 OSスケジューラを協調させる場合の問題 • 特定のスレッドを特別扱いする必要 – 止めてはならないプロセス • スケジューリングスレッド自身 – 無視すべきプロセス • syslogd • OS を変更する必要 – スケジューリングスレッドを 動かす 協調してスケジューリング Sched Sched DB WEB backup VMM Hardware 4 提案:Monarch Scheduler • VMMがシステム全体を考慮してプロセスの 実行を制御 – ゲストOSのスケジューラの動作を直接調整 – ゲストOSの内部情報に基づいてスケジューリング • 利点 VM1 – 特別扱いするスレッドが不要 – ゲストOSを変更しない VM2 DB WEB backup backupの 優先度を下げる Monarch Scheduler Hardware 5 VMMからのプロセス実行制御 • 3つすべての状態について制御 running – 実行待ち • ランキューから外す ready – 実行中 blocked プロセスの状態遷移 • 状態を書き換え、リスケジュール時に停止 – I/O待ち • 状態を書き換え、I/O完了時に停止 CPUで実行中 実行待ちプロセス ランキュー 6 VMMからのプロセス実行監視 • ゲストOSのランキューを監視 – すべてのゲストOSのランキューが空ならシステム 全体がアイドル状態 • アイドル状態のときのみ特定のプロセスを動かす • プロセスの統計情報を監視 – 例:プロセスのCPU使用時間 • プロセスのCPU使用率を制限 するスケジューリング VM1 VM2 DB WEB backup ランキュー ランキュー Monarch Scheduler Hardware 7 実装:ゲストOSのデータ構造の操作 • ゲストOSのカーネルメモリを直接読み書き – ドメインUのメモリページをスケジューラのアドレス 空間にマップ – ゲストOS内のページテーブルを参照 • データの仮想アドレスから物理ページを検索 • ゲストOSのデータ構造を解析 – カーネルのデバッグ情報から 型情報を取得 Domain0 Monarch Scheduler DomainU proc Xen VMM メモリ書き換え 8 プロセス実行制御:ランキュー操作 • ランキューからプロセスを外すことで一時停止 挿入することで再開 – ゲストOSが操作していないときにランキュー操作 • Linux: ランキューのロックをチェック – ロックされていなければスケジューリング中ではない • Windows: 割り込みレベル(IRQL)をチェック – SYNCH_LEVEL未満なら、スケジューリング中でない – ランキューにつながれたプロセスの数を更新 Linuxのスケジューラ schedule() { spin_lock(runqueue); ランキューの操作 spin_unlock(runqueue); } CPUで実行中 実行待ちプロセス ランキュー 9 Linux: ランキューの位置特定 • 仮想CPUのGSレジスタからランキューのアドレ ス取得 – CPUごとにランキューが存在 • ソースコードからの知識 – レジスタの値はVMMへのハイパーコールで取得 Linuxのメモリ GSレジスタ x8664_pda ランキュー struct x8664_pda { task_t * current; ulong data_offset; …}; data_offset + PER_CPU_RUNQUEUES 10 Windows: ランキューの位置推定 • ランキューはProcHeadから固定長離れている – ProcHeadはプロセスリストの先頭を表す変数 – ランキューの位置を直接特定する方法は不明 • カーネルのロード毎に変化 Windows Kernel 実行中プロセス 実行待ちプロセス I/O待ちプロセス ProcHead current 固定長 離れている summary 実行待ち リスト配列 IRQL ランキュー 11 VMM ProcHead変数の発見 • プロセスリストを探す – メモリ全体からプロセス型を表すビット列を探索 • オブジェクトには型を表すヘッダがついている – プロセスかをチェック • プロセスIDが4の倍数 • プロセス全体が一つの環状リストになっている • リスト内のグローバル変数がProcHead変数 – アドレスの上位32ビットが他とは異なる 12 プロセス実行制御:状態書き換え • プロセスの状態を書き換えることで停止 – 実行中プロセス • RUNNING → UNINTERRUPTIBLE • 次回スケジュール時にI/O待ち状態になる – 通常ならランキューの後ろに挿入される – I/O待ちプロセス • UNINTERRUPTIBLE → STOPPED • I/O完了時に停止状態になる – 通常ならランキューの後ろに挿入される • 再開は、ランキューに挿入 – 状態をRUNNINGにしてから 13 実験 • 複数VM上のプロセスをスケジューリングできる ことを確認 – 優先度スケジューリング – プロポーショナルシェアスケジューリング – アイドルタイムスケジューリング • 実験環境 • 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 実験:優先度スケジューリング • ポリシー – lighttpdを優先 lighttpdの性能(#/sec) • tripwireのCPU使用率を できるだけ小さく • lighttpdの性能が 約5%向上 なにもしない場合 8047.6 lighttpdを優先 8466.0 lighttpd(DomU1) tripwire(DomU1) tripwire(DomU2) 60 優先 DomU1 DomU2 lighttpd tripwire tripwire Linux Linux VMM CPU使用率(%) 50 40 30 20 10 0 0 100 200 300 経過時間(秒) 400 500 15 600 実験:プロポーショナルシェア スケジューリング DomU1 • ポリシー P2 – CPU使用率を1:2:4 (P0:P1:P2) • 結果 • 18.6% : 34.9% : 70.0% • 10~120秒までの間の CPU使用率の平均 – 低い割合を指定したプロセス が多く動く傾向 P1 P0 無限ループ プロセス Linux Linux Xen VMM P0(DomU1) P1(DomU2) P2(DomU1) 90 80 70 CPU使用率(%) – 1 : 1.9 : 3.8 DomU2 60 50 40 30 20 10 0 0 20 40 60 80 経過時間(秒) 100 16 120 実験:アイドルタイムスケジューリング • ポリシー – PI2~PI4が動いていないときのみPI1を動かす • 結果 – ポリシー通りに動作 ドメインU1 ドメインU2 PI2 PI4 PI3 PI1 円周率計算 プロセス Windows Windows 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を変更しプロセスの優先度情報をVMMに通知 • Windowsの内部情報をVMMから利用 – VMwatcher [CCS’07 Jiang et al.] • GREPEXECを使いプロセスを推定 – Lares [SP’08 Payne et al.] • ゲストOSにカーネルモジュールを追加 18 まとめと今後の課題 • Monarch Schedulerを提案 – VMMがシステム全体を考慮してプロセスの実行 を制御 • WindowsゲストOSにも対応 – いくつかのスケジューリングポリシーを実装し 正しく動作することを確かめた • 今後の課題 – ゲストOS内の統計情報の精度向上 • VMが物理CPUを取り合う状況で不正確に 19 成果 • 論文誌 – 仮想マシン間にまたがるプロセススケジューリング 情報処理学会論文誌:コンピューティングシステム(ACS) , Vol.1, No.2, pp.124-135, 2008年8月 • 口頭発表 – 仮想マシン間にまたがるプロセススケジューリング 第6回先進的計算基盤システムシンポジウム(SACSIS2008) pp.283-290 – 仮想マシン間プロセススケジューリングの実環境への適応にむけ て 第111回システムソフトウェアとオペレーティング・システム研究会 – 仮想マシン間にまたがるプロセススケジューリング 第344回 Programming Tools and Techniques • ポスター – Xenによるドメイン間にまたがるプロセススケジューラ 第19回コンピュータシステムシンポジウム(ComSys 2007) ComSys 2007 研究奨励賞受賞 20
© Copyright 2024 ExpyDoc