30分で論文流し読みシリーズ6「Gleaner: Mitigating the Blocked-Waiter Wakeup Problem for Virtualized Multicore Applications」

https://www.usenix.org/system/files/conference/atc14/atc14-paper-ding.pdf

実際の所要時間: 1時間

課題 - VMにおいて頻繁にvCPUがidleになるワークロードのnative環境に比べての性能劣化が激しい - 理由はvCPUがアイドルになる処理、およびその後再びidleが解除される処理がpCPUに比べてとても遅い。理由は次の通り - idle化: pCPUは「何もすることが無い」->「省電力状態にするための特殊な命令を実行」->「アイドル」だが、vCPUの場合は「何もすることがない」->「特殊な命令を実行」->「VMMに制御が移ってなんやかんや」、と、手番が多いから - idleからの復帰: pCPUは「割り込みないしIPI食らって起きる」->「動作の再開」だが、vCPUの場合は「VMMが割り込みないしIPIをvCPUに送る」->「vCPUプロセス起こす」->「vCPUプロセスが起床」->「動作の再開」と、手番が多いから

解決方法概要 - vCPUをなるべくidle状態にしない

解決方法詳細 - idleになろうとするときに省電力状態にするための特殊な命令を実行せずにspin loopする、あるいはguestから直接物理CPUを省電力状態にできる命令を実行 - delayed scheduling: vCPU1上のプロセスAがアイドルなvCPU2上のプロセスBを起こす場合、通常プロセスBをvCPU2上で起こすが、あえてvCPU1上で起こす。これによってidleから非idleへの状態遷移を減らせる - imbalanced scheduling: runnableなプロセスをなるべく特定のvCPUに固めて、その他のvCPUをidle状態にとどめることによって、idleと非idleの状態遷移を減らす

効果 - 時間切れで見られなかった

感想 - imbalanced schedulingは現在省電力のためによく使われているやつ。このアイデアは組み込み用途かVM用途か、どちらが先に考えられたのだろうか