[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 0/7] qcow2: compressed write cache
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
[PATCH 0/7] qcow2: compressed write cache |
Date: |
Fri, 29 Jan 2021 19:50:23 +0300 |
Hi all!
I know, I have several series waiting for a resend, but I had to switch
to another task spawned from our customer's bug.
Original problem: we use O_DIRECT for all vm images in our product, it's
the policy. The only exclusion is backup target qcow2 image for
compressed backup, because compressed backup is extremely slow with
O_DIRECT (due to unaligned writes). Customer complains that backup
produces a lot of pagecache.
So we can either implement some internal cache or use fadvise somehow.
Backup has several async workes, which writes simultaneously, so in both
ways we have to track host cluster filling (before dropping the cache
corresponding to the cluster). So, if we have to track anyway, let's
try to implement the cache.
Idea is simple: cache small unaligned write and flush the cluster when
filled.
Performance result is very good (results in a table is time of
compressed backup of 1000M disk filled with ones in seconds):
--------------- ----------- -----------
backup(old) backup(new)
ssd:hdd(direct) 3e+02 4.4
-99%
ssd:hdd(cached) 5.7 5.4
-5%
--------------- ----------- -----------
So, we have benefit even for cached mode! And the fastest thing is
O_DIRECT with new implemented cache. So, I suggest to enable the new
cache by default (which is done by the series).
Command to generate performance comparison table:
./scripts/simplebench/bench-backup.py --compressed --target-cache both --dir
ssd:/ssd --dir hdd:/work --test ssd:hdd --env
old:/work/src/qemu/master/build/qemu-system-x86_64
new:/work/src/qemu/up/qcow2-compressed-write-cache/build/qemu-system-x86_6
Vladimir Sementsov-Ogievskiy (7):
qemu/queue: add some useful QLIST_ and QTAILQ_ macros
block/qcow2: introduce cache for compressed writes
block/qcow2: use compressed write cache
simplebench: bench_one(): add slow_limit argument
simplebench: bench_one(): support count=1
simplebench/bench-backup: add --compressed option
simplebench/bench-backup: add target-cache argument
qapi/block-core.json | 8 +-
block/qcow2.h | 33 ++
include/qemu/queue.h | 14 +
block/qcow2-compressed-write-cache.c | 770 +++++++++++++++++++++++++
block/qcow2-refcount.c | 13 +
block/qcow2.c | 87 ++-
block/meson.build | 1 +
scripts/simplebench/bench-backup.py | 74 ++-
scripts/simplebench/bench_block_job.py | 33 +-
scripts/simplebench/simplebench.py | 34 +-
10 files changed, 1039 insertions(+), 28 deletions(-)
create mode 100644 block/qcow2-compressed-write-cache.c
--
2.29.2
- [PATCH 0/7] qcow2: compressed write cache,
Vladimir Sementsov-Ogievskiy <=
- [PATCH 1/7] qemu/queue: add some useful QLIST_ and QTAILQ_ macros, Vladimir Sementsov-Ogievskiy, 2021/01/29
- [PATCH 3/7] block/qcow2: use compressed write cache, Vladimir Sementsov-Ogievskiy, 2021/01/29
- [PATCH 2/7] block/qcow2: introduce cache for compressed writes, Vladimir Sementsov-Ogievskiy, 2021/01/29
- [PATCH 4/7] simplebench: bench_one(): add slow_limit argument, Vladimir Sementsov-Ogievskiy, 2021/01/29
- [PATCH 6/7] simplebench/bench-backup: add --compressed option, Vladimir Sementsov-Ogievskiy, 2021/01/29
- [PATCH 5/7] simplebench: bench_one(): support count=1, Vladimir Sementsov-Ogievskiy, 2021/01/29
- [PATCH 7/7] simplebench/bench-backup: add target-cache argument, Vladimir Sementsov-Ogievskiy, 2021/01/29
- Re: [PATCH 0/7] qcow2: compressed write cache, no-reply, 2021/01/29