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 ‹#›
© Copyright 2024 Paperzz