vScale: Automatic and Efficient Processor Scaling for SMP Virtual Machines
実際の所要時間 一時間半
課題
- vCPU数 > pCPU数のときにvCPUがスケジュールされないことによってロック待ちやI/O完了待ちが長くなってアプリの性能がすごく落ちることがある
- VMの負荷に応じて動的にvCPU数を動作させるvCPU Baloonというものがあるが、LinuxのCPU online/offline機能を使うと数百ミリ秒オーダーで時間を食うので頻繁に使うのはつらい
- 対象環境
- 解決方法概要
- 効果
- バックグラウンドで別の処理を動かしてvCPU数が2*pCPU数程度のマシン上でスレッド間同期処理が多かったりI/O頻度が高かったりする処理を動かすと性能が数十%上がった
解決方法詳細
- linuxに手を入れて、カーネルから見えるCPUにfreezeという状態を作る。これはofflineに似ているが、vCPUのスケジュール対象にせず、かつ、外部割り込みも上がってこないようにするだけで、onlineとofflineの間のような状態。これはカスタムカーネルこれは数マイクロ秒単位で終わる
- 各VMにおいて、個々のvCPUが実際に使ったCPU時間を定期的に記録する。この値をもとにlinuxとXenの両方において次のようなvCPU online/offlineを模した処理をする
- なぜlinux上のvCPUのfreeze/unfreezeだけでなくXenにおけるVMごとのshare値を変えているかというとから見ると、Xenからはlinuxのfreeze/unfreeze状態を直接観測できないから
感想