Re: [Qemu-block] [PATCH V2] block/io: optimize bdrv_co_pwritev for small requests

2016-05-26 Thread Fam Zheng
On Tue, 05/24 16:30, Peter Lieven wrote:
> in a read-modify-write cycle a small request might cause
> head and tail to fall into the same aligned block. Currently
> QEMU reads the same block twice in this case which is
> not necessary.
> 
> Signed-off-by: Peter Lieven 

Thanks, applied to my block branch:

https://github.com/famz/qemu/tree/block



Re: [Qemu-block] [PATCH V2] block/io: optimize bdrv_co_pwritev for small requests

2016-05-24 Thread Kevin Wolf
Am 24.05.2016 um 16:30 hat Peter Lieven geschrieben:
> in a read-modify-write cycle a small request might cause
> head and tail to fall into the same aligned block. Currently
> QEMU reads the same block twice in this case which is
> not necessary.
> 
> Signed-off-by: Peter Lieven 

Reviewed-by: Kevin Wolf 



[Qemu-block] [PATCH V2] block/io: optimize bdrv_co_pwritev for small requests

2016-05-24 Thread Peter Lieven
in a read-modify-write cycle a small request might cause
head and tail to fall into the same aligned block. Currently
QEMU reads the same block twice in this case which is
not necessary.

Signed-off-by: Peter Lieven 
---
v1->v2: following Paolos suggestions to simplify the if condition and
adjusting the comment

 block/io.c | 8 
 1 file changed, 8 insertions(+)

diff --git a/block/io.c b/block/io.c
index 60a6bd8..7459dfb 100644
--- a/block/io.c
+++ b/block/io.c
@@ -1430,6 +1430,14 @@ int coroutine_fn bdrv_co_pwritev(BlockDriverState *bs,
 
 bytes += offset & (align - 1);
 offset = offset & ~(align - 1);
+
+/* We have read the tail already if the request is smaller
+ * than one aligned block.
+ */
+if (bytes < align) {
+qemu_iovec_add(&local_qiov, head_buf + bytes, align - bytes);
+bytes = align;
+}
 }
 
 if ((offset + bytes) & (align - 1)) {
-- 
1.9.1