qemu/qemu — pull request #13 by wuxb45 (2014-08-06 06:02:44+00:00)
Title: fix QED flush: QED did not perform proper flush

fix QED flush: QED did not perform proper flush on synchronized write or flush, at least one flush method should be provided (common/co/aio)'

I was doing "sync write" benchmarking on varies qemu supported formats (on ssd). I was surprised that QED shows significant high performance over several other formats (qcow2/vmdk/vdi..). In some testcases QED even runs a little bit faster than raw format!

After careful reading of the code I found QED skipped the necessary flush by providing nothing on *flush* api. unlike read/write which require at least one type of implementation, flush API is not mandatory in API because your format could guarantee that synchronization is done in write path. However that's not the case in QED because data is buffered in the backing file and need proper flush to make it safe.

However I'm not a skilled qemu developer. Above is what I got from my thinking and study. Please correct me if I misunderstood the system.

Thanks!
Xingbo
(It's quite a hard work to go through the long callback chain, though much easier that tcg's heavy use of glue macros...)