From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57735) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bGTRK-0007Na-9q for qemu-devel@nongnu.org; Fri, 24 Jun 2016 11:54:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bGTRF-00057A-Tf for qemu-devel@nongnu.org; Fri, 24 Jun 2016 11:54:41 -0400 References: <1466780802-30424-1-git-send-email-den@openvz.org> <1466780802-30424-2-git-send-email-den@openvz.org> <576D524D.9020400@redhat.com> From: Evgeny Yakovlev Message-ID: <576D57B4.30601@virtuozzo.com> Date: Fri, 24 Jun 2016 18:54:28 +0300 MIME-Version: 1.0 In-Reply-To: <576D524D.9020400@redhat.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 1/3] block: ignore flush requests when storage is clean List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Eric Blake , "Denis V. Lunev" , qemu-block@nongnu.org, qemu-devel@nongnu.org Cc: Kevin Wolf , Fam Zheng , Max Reitz , Stefan Hajnoczi , John Snow On 24.06.2016 18:31, Eric Blake wrote: > On 06/24/2016 09:06 AM, Denis V. Lunev wrote: >> From: Evgeny Yakovlev >> >> 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 >> Signed-off-by: Denis V. Lunev >> CC: Kevin Wolf >> CC: Max Reitz >> CC: Stefan Hajnoczi >> CC: Fam Zheng >> CC: John Snow >> --- >> +++ 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