www.csg.ci.i.u

複数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