block: ignore flush requests when storage is clean
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 write generation scheme in BlockDriverState. Current write generation is checked against last flushed generation to avoid unnessesary flushes. 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. This affected some blkdebug testcases that were expecting error logs from failure-injected flushes which are now skipped entirely (tests 026 071 089). This also affects the performance of block jobs and thus BLOCK_JOB_READY events for driver-mirror and active block-commit commands now arrives faster, before QMP send successfully returns to caller (tests 141 144). Signed-off-by:Evgeny Yakovlev <eyakovlev@virtuozzo.com> Signed-off-by:
Denis V. Lunev <den@openvz.org> Reviewed-by:
Paolo Bonzini <pbonzini@redhat.com> Message-id: 1468870792-7411-5-git-send-email-den@openvz.org CC: Kevin Wolf <kwolf@redhat.com> CC: Max Reitz <mreitz@redhat.com> CC: Stefan Hajnoczi <stefanha@redhat.com> CC: Fam Zheng <famz@redhat.com> CC: John Snow <jsnow@redhat.com> Signed-off-by:
John Snow <jsnow@redhat.com>
Showing
- block.c 3 additions, 0 deletionsblock.c
- block/io.c 21 additions, 0 deletionsblock/io.c
- include/block/block_int.h 5 additions, 0 deletionsinclude/block/block_int.h
- tests/qemu-iotests/026.out 0 additions, 50 deletionstests/qemu-iotests/026.out
- tests/qemu-iotests/026.out.nocache 0 additions, 50 deletionstests/qemu-iotests/026.out.nocache
- tests/qemu-iotests/071.out 0 additions, 8 deletionstests/qemu-iotests/071.out
- tests/qemu-iotests/089.out 0 additions, 2 deletionstests/qemu-iotests/089.out
- tests/qemu-iotests/141.out 2 additions, 2 deletionstests/qemu-iotests/141.out
- tests/qemu-iotests/144.out 1 addition, 1 deletiontests/qemu-iotests/144.out
Loading
Please register or sign in to comment