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 で追試したけど、再現しない雰囲気。上のハードが悪いのか、(バージョンアップで解決する、あるいはしない類いの) ソフトウェアの問題なのか...

*1:XenServer 5.5 Update 1,準仮想化

*2:Ubuntu 9.10 Server, virtio