XenServer と KVM のネットワークレイテンシ比較
どちらのサーバも、秒間数十の HTTP 接続をハンドリングしている状態で、ping -c 100 で測定した平均値。
ホスト | ゲスト | |
XenServer*1 | 0.138 | 1.295 |
KVM*2 | 0.130 | 10.590 |
KVM のゲストだけが遅い。常に遅いっていうんじゃなくて、時々ひっかかる感じ。ping の出力 (rtt min/avg/max/mdev) を並べてみると以下のとおり。RTT で 0.1 秒以上かかったりする (しかもそういう状態が続く) ので、ssh を使ってると、まるで海外のサーバにつないでるみたいな感じになったり。
xen host: 0.095/0.138/1.238/0.116 ms xen guest: 0.111/1.295/42.471/6.023 ms kvm host: 0.060/0.130/0.334/0.070 ms kvm guest: 0.226/10.590/219.097/26.823 ms
なんでだろーなー。設定は bridge の virtio になってるんだけれども。
16:10追記: virtio-net をやめたらレイテンシが改善した。最小値も改善してるから、他のロードの影響だけじゃないと思う。
kvm guest: 0.177/1.961/43.812/6.437 ms
改善したと言っても、KVM のオーバーヘッド (ゲストの最小値-ホストの最小値) は、XenServer の7倍くらいあるんだけれども。
20:05追記:
以下の記載を参考に、HPET をオンにしてみた。(CONFIG_HIGH_RES_TIMERS=y の場合でも、http://www.curiousmentality.co.uk/2009/03/why-the-kernel-hrtimer-might-not-be-a-high-resolution-timer/ 見ると HPET オンにすべきっぽいし)
Currently performance is much better when using a host kernel configured with CONFIG_HIGH_RES_TIMERS. Another option is use HPET/RTC and -clock= qemu option.
Virtio - KVM
時間帯が違えば負荷も違うので、上の値とは比較できない。いずれにせよ、複数の VM が並行して走ってると、ひっかかるところがあるような感じ。最新の KVM だと良くなってるのかもしれないし、あまり深追いはしない方向で。
kvm guest (non-virtio): 0.196/20.246/61.147/15.514 ms kvm guest (virtio): 0.300/17.956/482.768/59.421 ms
3月30日追記: id:myfinder さんが CentOS 5.4 で、いろいろ追試してくださいましたが、同様の症状は再現していません (ありがとうございます! > myfinder さん)
3月31日追記: Xeon (Nehalem-EP) + Ubuntu 10.04 beta で追試したけど、再現しない雰囲気。上のハードが悪いのか、(バージョンアップで解決する、あるいはしない類いの) ソフトウェアの問題なのか...