Hi all!
The series brings threads to qcow2 encryption/decryption path,
like it is already done for compression.
Based-on: Kevin's block-next branch [d3db1496c5]
Performance gain is illustrated by the following test:
]# cat test.sh
#!/bin/bash
size=1G
src=/ssd/src.raw
dst=/ssd/dst.enc.qcow2
echo create source for tests
./qemu-img create -f raw "$src" $size
./qemu-io -f raw -c "write -P 0xa 0 $size" "$src"
for w in "" "-W"; do
echo -e "\n\nTest with additional paramter for qemu-img: '$w'\n"
echo create target...
./qemu-img create -f qcow2 --object secret,id=sec0,data=test -o
encrypt.format=luks,encrypt.key-secret=sec0,encrypt.iter-time=10 "$dst" $size
echo
echo test...
time ./qemu-img convert $w -f raw --object secret,id=sec0,data=test
--target-image-opts -n "$src"
"driver=qcow2,file.filename=$dst,encrypt.key-secret=sec0"
done
before patches:
]# ./test.sh
create source for tests
Formatting '/ssd/src.raw', fmt=raw size=1073741824
wrote 1073741824/1073741824 bytes at offset 0
1 GiB, 1 ops; 0:00:03.02 (338.734 MiB/sec and 0.3308 ops/sec)
Test with additional paramter for qemu-img: ''
create target...
Formatting '/ssd/dst.enc.qcow2', fmt=qcow2 size=1073741824 encrypt.format=luks
encrypt.key-secret=sec0 encrypt.iter-time=10 cluster_size=65536
lazy_refcounts=off refcount_bits=16
test...
real0m12.014s
user0m11.299s
sys 0m0.928s
Test with additional paramter for qemu-img: '-W'
create target...
Formatting '/ssd/dst.enc.qcow2', fmt=qcow2 size=1073741824 encrypt.format=luks
encrypt.key-secret=sec0 encrypt.iter-time=10 cluster_size=65536
lazy_refcounts=off refcount_bits=16
test...
real0m11.639s
user0m11.324s
sys 0m1.149s
after patches:
]# ./test.sh
create source for tests
Formatting '/ssd/src.raw', fmt=raw size=1073741824
wrote 1073741824/1073741824 bytes at offset 0
1 GiB, 1 ops; 0:00:02.63 (388.900 MiB/sec and 0.3798 ops/sec)
Test with additional paramter for qemu-img: ''
create target...
Formatting '/ssd/dst.enc.qcow2', fmt=qcow2 size=1073741824 encrypt.format=luks
encrypt.key-secret=sec0 encrypt.iter-time=10 cluster_size=65536
lazy_refcounts=off refcount_bits=16
test...
real0m12.113s
user0m11.433s
sys 0m0.878s
Test with additional paramter for qemu-img: '-W'
create target...
Formatting '/ssd/dst.enc.qcow2', fmt=qcow2 size=1073741824 encrypt.format=luks
encrypt.key-secret=sec0 encrypt.iter-time=10 cluster_size=65536
lazy_refcounts=off refcount_bits=16
test...
real0m3.436s
user0m13.429s
sys 0m1.183s
Vladimir Sementsov-Ogievskiy (11):
qcow2.h: add missing include
qcow2: add separate file for threaded data processing functions
qcow2-threads: use thread_pool_submit_co
qcow2: split out data processing threads state from BDRVQcow2State
qcow2-threads: split out generic path
qcow2-threads: add per-thread data
qcow2-threads: add encryption
qcow2: bdrv_co_preadv: improve locking
qcow2: qcow2_co_preadv: skip using hd_qiov when possible
qcow2: bdrv_co_pwritev: move encryption code out of the lock
qcow2: do encryption in threads
block/qcow2.h | 34 -
block/qcow2-threads.c | 281
block/qcow2.c | 328 +-
block/Makefile.objs | 2 +-
4 files changed, 412 insertions(+), 233 deletions(-)
create mode 100644 block/qcow2-threads.c
--
2.18.0