[fedora-virt] Virt Disk Performance

Kevin Wolf kwolf at redhat.com
Mon Oct 31 15:26:33 UTC 2011


Am 31.10.2011 16:07, schrieb Richard W.M. Jones:
> On Mon, Oct 31, 2011 at 10:18:50AM +0100, Kevin Wolf wrote:
>> Am 30.10.2011 21:59, schrieb Richard W.M. Jones:
>>>> I've pulled most of the information you requested. See above. I
>>>> don't see any specific cache settings on either machine. Is there
>>>> somewhere I would see the default setting on the machine?
>>>
>>> I'm out of the loop on what the default caching policy is these days.
>>> Hopefully libvirt is at least choosing a safe one.
>>
>> cache=writethrough is the default. And indeed this is the safest option,
>> and at the same time by far the slowest option. I would expect that you
>> get much better write performance with cache=none.
>>
>> Note however that older guests OSes cannot deal correctly with disks
>> that have a volatile write cache, like cache=none emulates. This means
>> that in case of a host crash and with some bad luck, your guest might
>> experience file system corruption.
>>
>> Recent guest OSes are safe in this respect and can be used with
>> cache=none or cache=writeback in order to improve performance without
>> any such risk.
> 
> Just FYI, here is how libvirt XML types are mapped to qemu types,
> found by examining the libvirt code:
> 
>   libvirt          old qemu      modern qemu
>   
>   none             cache=off     cache=none
>   writeback        cache=on      cache=writeback
>   writethrough     cache=off     cache=writethrough
>   directsync       cache=off     cache=directsync (if supported by qemu)
>   unsafe           cache=off     cache=unsafe (if supported by qemu)

cache=off is a strange fallback for unsafe...

> I tested this to see what libvirt would actually use with my fairly
> recent qemu-kvm, and what sort of timings I would get:

What does fairly recent mean? cache=unsafe is supported since 0.13. If
it doesn't work this might indicate a libvirt bug.

>   libvirt          MB/s          modern qemu command line
>   
>   (no setting)     29            (nothing)
>   none             39            cache=none
>   writeback        24*           cache=writeback
>   writethrough     28            cache=writethrough
>   directsync       [did not work for me -- "unknown disk cache mode"]
>   unsafe           [did not work for me -- "unknown disk cache mode"]
> 
> * = large variability in this result
> 
> What's also interesting is that performance today with no cache
> setting is slower than it was yesterday, even though I'm not running
> anything significantly different on my laptop.
> 
> Kevin, I'm using 'dd ... conv=fsync' for these tests.  What's a good,
> reliable method for testing read and write speeds?

Depends on what you want to test, obviously. conv=fsync will be very
much in favour of cache=writethrough because you force all other caching
options to do the disk flushes as well that make writethrough so slow.

When I use dd for testing, I usually use oflag=direct to bypass the
guest's page cache, but don't issue any fsyncs. You should see that the
writeback modes (none/writeback/unsafe) performs quite a bit better with
that, while I'd expect writethrough to stay on about the same level.

Kevin


More information about the virt mailing list