仮想マシン間にまたがる
プロセススケジューリング
1
田所秀和
光来健一
東京工業大学
千葉滋
仮想マシン環境でのスケジューリング
仮想マシン(VM)を使ったサーバ統合
リソースの利用効率の向上
システム全体で優先度を付けたい
例: DB > WEB > backup
データベースプロセス
ウェブプロセス
バックアッププロセス
VM1
VM2
ウェブやデータベースの
サービスを阻害させない
DB
WEB
backup
優
先
度
VMM
Hardware
2
システム全体でのスケジューリングは難しい
OSのスケジューリングとVMのスケジューリングだけで
はうまくいかない
OSのスケジューリングのみ
VM1 < VM2
WEB と DB, backup 間に
優先度はつけられない
DBが止まった場合、
WEB < backup になってしまう
VM1
WEB
VM2
?
DB
backup
優
先
度
VM1 > VM2
DB < WEBになってしまう
3
システム全体でのスケジューリングは難しい
OSのスケジューリングとVMのスケジューリングだけで
はうまくいかない
OSのスケジューリングのみ
VM1 < VM2
WEB と DB, backup 間に
優先度はつけられない
DBが止まった場合、
WEB < backup になってしまう
VM2
VM1
WEB
DB
backup
優
先
度
VM1 > VM2
DB < WEBになってしまう
4
システム全体でのスケジューリングは難しい
OSのスケジューリングとVMのスケジューリングだけで
はうまくいかない
OSのスケジューリングのみ
VM1 < VM2
WEB と DB, backup 間に
優先度はつけられない
DBが止まった場合、
WEB < backup になってしまう
DBが止まると
backupが動く
VM2
VM1
backup
WEB
DB
優
先
度
VM1 > VM2
DB < WEBになってしまう
5
システム全体でのスケジューリングは難しい
OSのスケジューリングとVMのスケジューリングだけで
はうまくいかない
OSのスケジューリングのみ
VM1 < VM2
WEB と DB, backup 間に
優先度はつけられない
DBが止まった場合、
WEB < backup になってしまう
VM1 > VM2
DB < WEBになってしまう
VM1
WEB
VM2
DB
優
先
度
backup
6
VM間で協調するスケジューラの問題
複雑なスケジューリングが必要
止めてはならないプロセス
協調して
スケジューリング
スケジューリングスレッド自身
無視すべきプロセス
syslogd
sched
OSを変更する必要
スケジューリングスレッドを
動かす
sched
DB
WEB
優
先
度
backup
7
仮想マシンモニタによるプロセススケジューリング
仮想マシンモニタ(VMM)が
直接ゲストOSのランキューを操作
ゲストOSのスケジューリングポリシーを変更
VM1
ゲストOSの変更が不要
ポリシー例
DB
WEBまたはDBが動いているときは
backupを止める
VM1 < VM2
VM2
WEBとDBだけが動いているときは、
DBの優先度を最高にする
WEB
ランキューを直接操作
backup
VMM
8
ゲストOSのランキューを操作する手順
一定時間毎に全てのVMをチェック
1.
2.
VMを一時停止
ゲストOSがランキューを操作していないことを確認
データ構造を破壊しないように
ランキューを操作していたらそのままVMを再開
3.
4.
ポリシーに従ってランキューを操作する
VMを再開
9
システムの構成
スケジューラプロセス
ドメイン0のプロセスで実装
ランキュー操作
VMの優先度操作
VMMとしてXenを利用
ゲストOSはLinuxを対象
ドメイン0 ドメインU
ドメイン0はスケジュール対象
外
DB
sched
スケジューラプロセスが常に動く
ように
ドメイン0では通常のアプリケー
ションは動かさない
ドメインU
WEB
backup
Xen VMM
10
スケジューリングのためのランキュー操作
プロセスの一時停止
タスク構造体を取り除く
プロセスの実行の再開
タスク構造体を戻す
注意点
ランキューにつながれたプロセスの数も更新
ゲストOSの意味を保つ
実行中のプロセスは取り除かない
OS内のいろいろな場所にプロセスの情報が残っているので難しい
今後の課題
11
一貫性を保ったランキューの操作
ゲストOSが操作していないときのみランキューを操
作
VMMがランキューのスピンロックを調べる
メモリを読むことでチェック
SMP カーネルを使用
SMPカーネルの場合スピンロックを用いて排他制御を行う
ドメインUのスケジューラ
schedule() {
spin_lock(runqueue);
ランキューの操作
spin_unlock(runqueue);
};
12
ドメインUのカーネルメモリへのアクセス
ドメインUのページをドメイン0上
のプロセス空間にマップ
ドメインUの仮想アドレスが含まれ
るマシンメモリのページ番号を求
める
仮想アドレス
ドメイン0
ページテーブル
ドメインU
マップ
ページ境界をまたがないように
アクセス
構造体のメンバ変数など
メモリマップはページ単位
Xen VMM
P2Mテーブル
13
マシンメモリ
ドメインUのメモリ操作のための型情報取得
カーネルのデバッグ情報から型情報を取得
カーネルを CONFIG_DEBUG_KERNEL=y でコンパイル
デバッグ情報から型情報の取得には gdb を使用
カーネルのコンフィグやマクロの解析が不要
コンパイラが解析する
struct runqueue {
spinlock_t lock;
unsigned long nr_running;
#ifdef CONFIG_SMP
unsigned long long cpu_load[3];
#endif
…
};
ソースコード
% gdb vmlinux-debug
(gdb) ptype runqueue_t
type = struct runqueue {
spinlock_t lock;
long unsigned int nr_running;
long unsigned int cpu_load[3];
…
}
デバッグ情報
14
ランキューのアドレスの取得
仮想CPUのGSレジスタからrunqueueのアドレスを取得
Linux 2.6 ではCPU毎にランキューが存在
レジスタの値はVMMへのハイパーコールを用いて取得
x8664_pda は各CPU毎に固有のデータを管理(x86_64)
ドメインUのメモリ
GSレジスタ
x8664_pda
runqueue
struct x8664_pda {
task_t * current;
ulong data_offset;
…
};
data_offset
+
PER_CPU_RUNQUEUES
15
スケジューリング性能を調べる実験
4つの実験をおこなった
ドメインUへのメモリアクセスによるオーバーヘッド
優先度による性能の変化
スケジューリングを行う間隔の影響
プロセススケジューリングの挙動
環境
CPU: PentiumD 3.4GHz
Memory: 2G (Dom0/DomU 1Gbyte/512Mbyte)
Xen 3.0.4 (x86_64)
Linux kernel 2.6.16.33
16
ドメインUのメモリアクセスのオーバーヘッド
ドメイン0のプロセスにドメインUのメモリをマップして
アクセス
仮想アドレスからフレーム番号の取得がボトルネック
ゲストOSのページテーブルを引くのに時間がかかる
ランキュー上のプロセスをたどるのに必要なマップの回数
最大 (42+実行待ちプロセスの数)*VCPUの数*ドメインの数
処理
時間(マイクロ秒)
ドメインの一時停止と再開
14.84
仮想アドレスに対応するフレーム番号の取得
68.95
ページをドメイン0のプロセスにマップ・アンマップ
13.72
1ワードのメモリアクセス
0.00
17
優先度をつけたことによる性能の変化
lighttpdとtripwireを同時に動かす
同じドメインと、別ドメイン
ポリシー
lighttpdの優先度をあげる
lighttpdの性能は単独の時と
ほぼ同じ
別ドメインの場合でもlighttpdを
優先できた
100万アクセスを処理するのにかかる時間 (秒)
lighttpd単独
lighttpdを優先
lighttpdとtripwireを同じ優先度
300
250
200
150
100
50
0
同じドメイン
別ドメイン
18
スケジューリング精度
円周率を計算するpi1とpi2を同時に起動
同じドメイン上
ポリシー
pi1が動いている間はpi2は実行しない
スケジューラプロセスが
動く間隔を変える
pi1
pi2
60
間隔が長い
精度低下
間隔が短い
オーバーヘッド大
精度は上がる
実行時間 (秒)
50
40
30
20
10
19
0
0
2
4
ポーリングの間隔 (秒)
6
プロセススケジューリングの挙動 (1/2)
4つのプロセスをスケジューリング
ドメインU1で3つ、ドメインU2で1つ
プロセスはすべて円周率を計算するプログラム
ポリシー
Pi1の優先度を最低にする
pi1をドメインUの中で他にプロセスが動いていないときのみ動かす
ドメインU1
ドメインU2
pi2
pi3
優先度最低
pi4
20
pi1
Xen VMM
プロセススケジューリングの挙動 (2/2)
ポリシーが実現できた
グラフの各線が下のときはプロセスが止まっている
上のときは動いている
pi1が20秒付近で動いているのはバグ
デーモン等その他のプロセス
ドメインU1のプロセスpi3
ドメインU2のプロセスpi4
ドメインU1のプロセスpi2
優先度最低のプロセスpi1
0
20
40
経過時間 (秒)
60
80
21
関連研究
Virtual
Machine Introspection [NDSS'03, Garfinkel
et al.] [SOSP'05, Joshi et al.]
VMMからゲストOSの状態を取得
Antfarm
[USENIX'06, Jones et al.], Geiger
[ASPLOS'06, Jones et al.]
VMM からゲストOSを仮定せずにプロセスやキャッシュ
の状態を取得する技術
FoxyTechnique
[VEE'07, Yamada et al.]
VMMが仮想デバイスの振舞いを変更することで、ゲスト
OSの振舞いを間接的に変更する技術
22
まとめと今後の課題
仮想マシンモニタによるプロセススケジューリングを
提案
ゲストOSのメモリを直接操作し、スケジューリングを変更
システム全体でプロセスに優先度を付けることが可能
実際にスケジューリングが行えることを確認
今後の課題
I/Oバウンドなプロセスの制御
CPUで実行中のプロセスの制御
ゲストOSがWindowsの場合でのプロセス制御
23
© Copyright 2026 ExpyDoc