Linux KVM上のWindows XPにおけるMySQLの性能

小ネタです。
Visual Studioの英語環境が必要になってLinux KVM上にWindows XPの環境を構築していたのですが、ついでなのでMySQLの性能測定をしてみました。

今回はCPU性能が見たかったので、SysBenchを読み取り専用にしてテストをしました。レコード件数をデフォルトの1万件から100万件に増やしていますが、容量としては200MB程度のためすべてのデータがメモリ上に収まる設定です。負荷クライアントはサーバとは別のマシンを用意して、Gigabit Ethernetで接続しています。
結果がこちら。

パラメータとしてホストまたはゲストに割り当てたCPUの数、それからゲストの場合はCPU PinningというCPU割り当てを固定する機能のありなしを変化させています。CPU Pinningは以下のようにvirt-managerから設定することが可能で、すべての仮想CPUがすべての物理CPUで動作するデフォルトの状態をunpin、仮想CPUと物理CPUを一対一にひも付けたものをpinとしています。

残念ながらWindowsゲストの性能は伸びませんでした。タスクマネージャを見ると負荷のほとんどをカーネルが占めており、ネットワーク処理がボトルネックになっているようでした。今回最新版のvirtioドライバを利用していますが、負荷低減効果はあまり大きくないように見受けられます。
またゲストに割り当てるCPUの数を増やすと、unpinの場合極端に性能が落ちることが分かりました。pinすればある程度性能は回復しますが、「Linux KVMにおいてゲストに割り当てるCPUの数はホスト - 1個までにするべき」という定説を裏付ける結果と言えます。
Linuxゲストはホストに対する性能低下率が約2割ということで、まずまず優秀な結果だと思います。ただし、ディスクI/Oを伴うワークロードではこれよりも大きく性能が低下すると推測しています。
ホストの結果を見ると、MySQL自体は4 CPUコアまできれいにスケールしていることが分かります。Core i5-2400SはTurbo Boostによって1コア時3.30GHz、2コア時3.20GHz、3コア時2.80GHz、4コア時2.60GHzまでブーストがかかっており、それを加味すると完全に比例している計算になります。MySQL 5.5ではこのくらいは当たり前といったところでしょうね。