Am 02.06.2016 um 17:58 hat Denis V. Lunev geschrieben: > The problem with excessive flushing was found by a couple of performance > tests: > - parallel directory tree creation (from 2 processes) > - 32 cached writes + fsync at the end in a loop > > For the first one results improved from 2.6 loops/sec to 3.5 loops/sec. > Each loop creates 10^3 directories with 10 files in each. > > For the second one results improved from ~600 fsync/sec to ~1100 > fsync/sec. Though, it was run on SSD so it probably won't show such > performance gain on rotational media. > > qcow2_cache_flush() calls bdrv_flush() unconditionally after writing > cache entries of a particular cache. This can lead to as many as > 2 additional fdatasyncs inside bdrv_flush. > > We can simply skip all fdatasync calls inside qcow2_co_flush_to_os > as bdrv_flush for sure will do the job. These flushes are necessary to > keep the right order of writes to the different caches. Though this is > not necessary in the current code base as this ordering is ensured through > the flush in qcow2_cache_flush_dependency(). > > Signed-off-by: Denis V. Lunev <d...@openvz.org> > CC: Pavel Borzenkov <pborzen...@virtuozzo.com> > CC: Kevin Wolf <kw...@redhat.com> > CC: Max Reitz <mre...@redhat.com>
Thanks, applied to the block branch. Kevin