Poor Write I/O Performance on KVM-79

Alexander Atticus
2009-01-04T06:18:40Z

Hello!

I have been experimenting with KVM and have been experiencing poor write I/O
performance. I'm not sure whether I'm doing something wrong or if this is
just the current state of things.

While writing to the local array on the node running the guests I get about
200MB/s from dd (bs=1M count=1000) or about 90MB/s write performance from
iozone (sequencial) when I write to a 2G file with a 16M record length. The
node is an 8 disk system using 3ware in a RAID50 configuration. It has 8GB
of RAM.

The guests get much slower disk access. The guests are using file based
backends (tried both qcow2 and raw) with virtio support. With no other
activity on the machine, I get about 6 to 7MB/s write performance from
iozone with the same test. Guests are running Debian lenny/sid with
2.6.26-1-686.

I don't know whether this is because of context switching or what. Again,
I'm wondering how I can improve this performance or if there is something
I am doing wrong. As a side note, I have also noticed some weirdness with
qcow2 files; some windows installations freeze and some disk corruption
running iozone on Linux guests. All problems go away when I switch to raw
image files though.

I realize I take a hit by running file-based backends, and that the tests
aren't altogether accurate because with 8GB of RAM, I'm not saturating the
cache but they are still very disparate in numbers which concerns me.

Finally, does anyone know if KVM is now fully supporting SCSI pass-through
in KVM-79? Does this mean that I would vastly reduce context switching by
using an LVM backend device for guests or am I misunderstanding the benefits
of pass-through?

This is the iozone command:

# iozone -a -r 16M -g 2g -n 16g -m 2000

KVM command to launch guest:

# /usr/bin/kvm -S -M pc -m 1024 -smp 1 -name demo4 \
-uuid 5b474147-f581-9a21-ac7d-cdd0ce881c5c -monitor pty -boot c \
-drive file=/iso/debian-testing-i386-netinst.iso,if=ide,media=cdrom,index=2 \
-drive file=/srv/demo/demo4.img,if=virtio,index=0,boot=on -net \
nic,macaddr=00:16:16:64:e6:de,vlan=0 -net \
tap,fd=15,script=,vlan=0,ifname=vnet1 -serial pty -parallel none \
-usb -vnc 0.0.0.0:1 -k en-us

KVM/QEMU versions:

ii kvm 79+dfsg-3
ii qemu 0.9.1-8
Node Kernel:

2.6.26-1-amd64

Thanks,

-Alexander