RealTime QEMU

Real Time QEMU
Professional Service
Tatuhiro Oshima
Concurrent Computer Corporation, Proprietary
‹#›
QEMUの構造
QEMUは、複数のサービススレッドを生成し並行処理。
 main thread
メインスレッド すべてのIOとイベントを管理
 vcpu thread
ゲストOSを実行 smpで指定した数だけ生成
 paio thread
ディスクIOを行うスレッド linuxのAIOを使用
 vnc thread
configur時に指定すると生成する
VNCの描画処理を行う
vcpu
vnc
main
vcpu
セクタ単位の
r/w処理を
キューイング
aio
パイプr/wで
完了通知
Concurrent Computer Corporation, Proprietary
‹#›
QEMUスレッド
総てはディフォルト固定で、無制御状態
 スケジュール
TS
 優先度
0
 CPUアフィニティ
総てのスレッドは同じマスク
vcpu main
aio
aio
vnc
vcpu
総てのリクエストは、mainスレッドが制御
ゲストOSから発行されたディスクIOは、カーネル
のAIOコールで処理される
Concurrent Computer Corporation, Proprietary
‹#›
QEMUプロセススケジュール
空いているCPUでQEMUスレッドは実行される
プロセスに割り付けが可能でも実行CPUは移動
CPU0
kworker/x:y
aio
cpuset
kvm-irqfd-clean
CPU1
CPU2
CPU2
vcpu0 vcpu1 main
main
aio
CPU3
CPU4
aio
vnc
vcpu1 vcpu0
vnc
IO Service
カーネルスレッドのスケジュールも必要
キャッシュがフラッシュするので、ジッター大
mainスレッドがスケジュールされないとイベントリ
ターンは配信されない
Concurrent Computer Corporation, Proprietary
‹#›
マルチQEMUプロセスのスケジューリング
プロセス単位で、公平なスケジュールを期待して
いるが….
Guest1
Guest2
Guest1
Guest2
Guest1
Guest2
スケジュールは、スレッド単位なので、要求の多
いQEMUスレッド(AIO)がスケジュールされてしまう
vcpu
main
aio
main
aio
vcpu
main
main
aio
main
aio
vcpu
main
Cgroup制御を行っても、Guest2のIO要求の数は減ら
せない(Guest1はDISKIOを使用していない)
→プロセス単位の動的優先処理が必要
Concurrent Computer Corporation, Proprietary
‹#›
基本方針
カーネル側はRedHawkの基本機能を利用
カーネルの変更はしない
 RedHawkリアルタイムカーネル機能
Memory lock
Real time scheduling & priority
User code Preempt lock (Only RedHawk)
Shield CPU(Only RedHawk)
QEMU側のみリアルタイム化する
バージョンアップに備えて基本的な構造は変えな
い
Concurrent Computer Corporation, Proprietary
‹#›
モディファイ1
リアルタイム化
 QEMUスレッド別の制御データ
スケジュール
SCHED_FIFO,SCHED_RR,SCHED_OTHER
優先度
0(TS) or 1~99(RR or FIFO)
Nice値
-19~+20(TS or RR)
値でタイムクオンタムが異なる
→ 連続実行可能なCPU時間
CPUアフィニティ
 メモリロック
 プリエンプション禁止(QEMU連続実行を保証)
ハードウェア模擬部分のレイテンシィ確保には必須
Concurrent Computer Corporation, Proprietary
‹#›
モディファイ2
模擬デバイスのモディファイ
 ivshmem
 Guest-Hostの通信(再起動通知、負荷率取得など)
ivshmemを利用して、guest側から再起動通知を行う。
RT-QEMU側では、再起動通知期間中、Guestの優先度を
強制的にTSに設定する。
 Guest間の通信
新規模擬デバイス(vrfmem)
 リフレクティブメモリ(5565)模擬デバイス
 実デバイスとリンクし異なるホストに
またがるHost-Guest間通信を可能
Concurrent Computer Corporation, Proprietary
‹#›
Inter virtual shared memory の構造
Inter Gust(Same ivshmem)
Host OS
Inter Host with Gust
Host OS
GuestOSDirect
Data
Access
(mmap)
Virtual GE5565
GuestOS
FIFO
Access
Virtual GE5565
Shared memory
&
Message Queue
GuestOSDirect
Data
FIFO Access
Access (mmap)
Virtual GE5565
Message Queue
Server
Real GE5565
Other Real GE5565
Host
Process
モディファイ3
VNC部高速化
 スレッド生成(標準搭載:configure vnc_thread=“yes”)
 mainスレッドで実行される、画面差分処理の高速化
memcmp()  sse2_memcmp()
memcpy()  sse2_memcpy()
 mainスレッドで実行される、画面差分処理の並列化
for (y=0;y<SIZE;y++) を2分割し高速化
Concurrent Computer Corporation, Proprietary
‹#›
-rt オプション
オプション -rtに続く最初の xxxx4文字はスレッドを現し、
その後の _yyyyは機能を現す

vcpu
仮想CPU

main
管理スレッド

paio
非同期IOスレッド

vncm
vnc メイン側スレッド (注1)

vncs
vnc スレーブ側スレッド(注2)
注1:vnc高速化スレッドパラメータ、無指定の場合には、ループ分割しない
注2:configureで指定されるオリジナルスレッドパラメータ
その後の文字で、以下を現す。

xxxx_sched
スケジュール、

xxxx_prio
優先度

xxxx_nice
nice値
Concurrent Computer Corporation, Proprietary
‹#›
-rt オプション例
-rt vcpu_bias=3,4 -rt vcpu_sched=fifo,fifo -rt vcpu_prio=1,1 -rt vcpu_nice=0,0
-rt main_bias=5 -rt main_sched=fifo -rt main_prio=1 -rt main_nice=0
-rt paio_bias=6 -rt paio_sched=rr -rt paio_prio=1 -rt paio_nice=19
-rt vncs_bias=7 -rt vncs_sched=rr -rt vncs_prio=1 -rt vncs_nice=19
-rt vncm_bias=7 -rt vncm_sched=rr -rt vncm_prio=1 -rt vncm_nice=19
-20
-19
-18
-17
-16
-15
-14
-13
-12
-11
800ms
780ms
760ms
740ms
720ms
700ms
680ms
660ms
640ms
620ms
-10
-9
-8
-7
-6
-5
-4
-3
-2
-1
600ms
580ms
560ms
540ms
520ms
500ms
480ms
460ms
440ms
420ms
0
1
2
3
4
5
6
7
8
9
100ms
92ms
88ms
84ms
80ms
72ms
68ms
64ms
60ms
52ms
10
11
12
13
14
15
16
17
18
19
48ms
44ms
40ms
32ms
28ms
24ms
20ms
12ms
8ms
4ms
nice値テーブル
Concurrent Computer Corporation, Proprietary
‹#›
QEMUスレッドスケジュール
スレッド別に割り付けが可能
CPU0
kworker/x:y
aio
cpuset
kvm-irqfd-clean
CPU1
CPU2
CPU2
CPU3
CPU4
vcpu0 vcpu1 main
aio
vnc
vcpu0 vcpu1 main
aio
vnc
IO Service
スレッド別にスケジュール&優先度を設定
スレッド別にnice値を設定可能(タイムクオンタム)
Concurrent Computer Corporation, Proprietary
‹#›
QEMUスレッドスケジュール
FIFO (最も高速に応答)
完全分離型
 サービスの応答性を重視
CPU0
kworker/x:y
aio
cpuset
kvm-irqfd-clean
CPU1
CPU2
CPU3
CPU4
CPU5
vcpu0
vcpu1
main
aio
VNC
CPU6
CPU7
CPU8
CPU9
vcpu0
vcpu1
main
aio
CPU10
VNC
RR (Nice値でサービス時間を制御)
完全共有型
 サービスの公平性を重視
CPU0
kworker/x:y
aio
cpuset
kvm-irqfd-clean
CPU1
CPU2
CPU3
CPU4
CPU5
vcpu0
vcpu1
main
aio
VNC
vcpu0
vcpu1
main
aio
CPU6
CPU7
CPU8
CPU9
CPU10
VNC
Concurrent Computer Corporation, Proprietary
‹#›
ベンチマークテスト1
スレッド制御の効果を試験
ホスト側で同一CPUに負荷を与え、guest側でcyclic
testを行う( stress --cpu 8 --io 4 --vm 2 --vm-bytes 128 )
 org:スレッドアフィニティなし優先度あり
 mod:スレッドアフィニティあり優先度あり
cyclic test histogram
10000000
1000000
100000
10000
30μ秒改善
1000
100
10
0
6
12
18
24
30
36
42
48
54
60
66
72
78
84
90
96
102
108
114
120
126
132
138
144
150
156
162
168
174
180
186
192
198
1
org(min:0,avg:15,max:98)
mod11(min:7,avg:14,max:43)
Concurrent Computer Corporation, Proprietary
‹#›
ベンチマークテスト2
完全共有型の試験
同一コアにGuest1とGuest2を公平に割り付け
外部システムからGuest1にPINGを500回行う
 Normal test: Guest1,Guest2とも無負荷
 Load test : stress –cpu2 をGuest2で実行し、Guest2のCPU負
荷100%×2にする
総てのスレッドは、固定優先度1のクオンタム4ms(RR,1,NICE 19)
CPU0
kworker/x:y
aio
cpuset
kvm-irqfd-clean
CPU1
CPU2
CPU3
CPU4
CPU5
vcpu0
vcpu1
main
aio
VNC
vcpu0
vcpu1
main
aio
ping –c 500 address
VNC
Concurrent Computer Corporation, Proprietary
‹#›
ベンチマークテスト2(続き)
ネットワークIOレイテンシィ(500回のpingの応答時間)
0.5
PING responce (ms)
0.45
0.4
0.35
0.3
0.25
0.2
0.15
0.1
0.05
1
12
23
34
45
56
67
78
89
100
111
122
133
144
155
166
177
188
199
210
221
232
243
254
265
276
287
298
309
320
331
342
353
364
375
386
397
408
419
430
441
452
463
474
485
496
0
normal
load100
Pingの応答時間に大きな変化は無い。
Concurrent Computer Corporation, Proprietary
‹#›
ベンチマークテスト3
完全共有型の試験
同一コアにGuest1とGuest2を公平に割り付け
外部システムからGuest1にPINGを500回行う
 Normal test: Guest1,Guest2とも無負荷
 Load test : Guest2をrebootする
総てのスレッドは、固定優先度1のクオンタム4ms(RR,1,NICE 19)
CPU0
kworker/x:y
aio
cpuset
kvm-irqfd-clean
CPU1
CPU2
CPU3
CPU4
CPU5
vcpu0
vcpu1
main
aio
VNC
vcpu0
vcpu1
main
aio
ping –c 500 address
VNC
Concurrent Computer Corporation, Proprietary
‹#›
ベンチマークテスト4
ネットワークIOレイテンシィ(500回のpingの応答時間)
PING responce (ms)
4
3.5
3
2.5
reboot約45秒
2
1.5
1
0.5
1
13
25
37
49
61
73
85
97
109
121
133
145
157
169
181
193
205
217
229
241
253
265
277
289
301
313
325
337
349
361
373
385
397
409
421
433
445
457
469
481
493
0
normal
load100
reboot
Pingの応答時間は、4ms以下(nice19の設定)
Pingの応答時間が大きく遅い箇所は、Guestネットワー
クの構成時1回だけ
Concurrent Computer Corporation, Proprietary
‹#›
ベンチマークテスト5
Windows7 & DPC Latency Checker
オリジナル版
RealTime QEMU
Concurrent Computer Corporation, Proprietary
‹#›
まとめ
RT-QEMUの特徴
 RedHawk Realtime Linuxカーネルの機能を利用し、
QEMUのみのモディファイでリアルタイム化。
 カーネルのバージョンアップに迅速に対応可能。
 Guest側カーネルの変更も無い
 十分な応答性を確保
 用途に応じて、細かなチューニングが可能
Concurrent Computer Corporation, Proprietary
‹#›