On Sun, Jul 16, 2023 at 22:36:21 +0800, ~hyman wrote:
From: Hyman Huang(黄勇) <yong.huang(a)smartx.com>
Add 'virtio_discard' and 'virtio_write_zeroes' attribute to control
whether discard and write-zeroes requests are handled by the
virtio-blk device.
To distinguish the attributes in block drive layer, use the 'virtio'
prefix to indicate that these attributes are specific for virtio-blk.
Signed-off-by: Hyman Huang(黄勇) <yong.huang(a)smartx.com>
---
docs/formatdomain.rst | 8 ++++++++
src/conf/domain_conf.c | 16 ++++++++++++++++
src/conf/domain_conf.h | 2 ++
src/conf/schemas/domaincommon.rng | 10 ++++++++++
src/conf/storage_source_conf.c | 2 ++
src/conf/storage_source_conf.h | 2 ++
src/qemu/qemu_domain.c | 2 ++
src/qemu/qemu_driver.c | 4 +++-
src/vz/vz_utils.c | 12 ++++++++++++
9 files changed, 57 insertions(+), 1 deletion(-)
diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
index 4af0b82569..7be12ff08e 100644
--- a/docs/formatdomain.rst
+++ b/docs/formatdomain.rst
@@ -3259,6 +3259,14 @@ paravirtualized driver is specified via the ``disk`` element.
value can be either "unmap" (allow the discard request to be passed) or
"ignore" (ignore the discard request). :since:`Since 1.0.6 (QEMU and
KVM
only)`
+ - The optional ``virtio_discard`` and ``virtio_write_zeroes`` are attributes
+ that control whether discard and write-zeroes requests are handled by the
+ virtio-blk device. The feature is based on DISCARD and WRITE_ZEROES
+ commands introduced in virtio-blk protocol to improve performance when
+ using SSD backend. The value can be either 'on' or 'off'. Note
that
+ ``discard`` and ``write_zeroes`` implementations in the block drive layer
+ are parts of the feature logically and should be turned on when enabling
+ the feature. :since:`Since 9.6.0 (QEMU and KVM only)`
Based on current released qemu both 'discard' and 'write-zeroes' feature
of the 'virtio-blk' device is enabled by default:
$ qemu-system-x86_64 -device virtio-blk-pci,? | grep discard
discard=<bool> - on/off (default: true)
discard_granularity=<size> - (default: 4294967295)
max-discard-sectors=<uint32> - (default: 4194303)
report-discard-granularity=<bool> - (default: true)
$ qemu-system-x86_64 -device virtio-blk-pci,? | grep write-zeroes
max-write-zeroes-sectors=<uint32> - (default: 4194303)
write-zeroes=<bool> - on/off (default: true)
Do you need a way to disable this feature? Based on the description the
default seems to be sane and actually what you'd want users to set.
The feature was introduced to qemu by:
commit 5c81161f804144b146607f890e84613a4cbad95c
Author: Stefano Garzarella <sgarzare(a)redhat.com>
Date: Thu Feb 21 11:33:07 2019 +0100
virtio-blk: add "discard" and "write-zeroes" properties
In order to avoid migration issues, we enable DISCARD and
WRITE_ZEROES features only for machine type >= 4.0
As discussed with Michael S. Tsirkin and Stefan Hajnoczi on the
list [1], DISCARD operation should not have security implications
(eg. page cache attacks), so we can enable it by default.
The default was always enabled for all new machine types, so you should
only ever need to update your machine type.