On 24.06.2016 18:31, Eric Blake wrote:
On 06/24/2016 09:06 AM, Denis V. Lunev wrote:
From: Evgeny Yakovlev <eyakov...@virtuozzo.com>

Some guests (win2008 server for example) do a lot of unnecessary
flushing when underlying media has not changed. This adds additional
overhead on host when calling fsync/fdatasync.

This change introduces a dirty flag in BlockDriverState which is set
in bdrv_set_dirty and is checked in bdrv_co_flush. This allows us to
avoid unnesessary flushing when storage is clean.
s/unnesessary/unnecessary/ (I pointed this out against v2
https://lists.gnu.org/archive/html/qemu-devel/2016-06/msg05817.html,
which makes me wonder if anything else was missed)

Yeah, i fixed that but messed up committing a change in commit message. Will be fixed in rebased version.

The problem with excessive flushing was found by a performance test
which does parallel directory tree creation (from 2 processes).
Results improved from 0.424 loops/sec to 0.432 loops/sec.
Each loop creates 10^3 directories with 10 files in each.

Signed-off-by: Evgeny Yakovlev <eyakov...@virtuozzo.com>
Signed-off-by: Denis V. Lunev <d...@openvz.org>
CC: Kevin Wolf <kw...@redhat.com>
CC: Max Reitz <mre...@redhat.com>
CC: Stefan Hajnoczi <stefa...@redhat.com>
CC: Fam Zheng <f...@redhat.com>
CC: John Snow <js...@redhat.com>
---
+++ b/include/block/block_int.h
@@ -418,6 +418,8 @@ struct BlockDriverState {
      int sg;        /* if true, the device is a /dev/sg* */
      int copy_on_read; /* if true, copy read backing sectors into image
                           note this is a reference count */
+
+    bool dirty;
      bool probed;
Conflicts with the current state of Kevin's block branch (due to my
reordering and conversion of bool parameters); so you'll want to rebase.


Ok



Reply via email to