qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 1/1] block: propagate discard aligment from format drivers to the guest
@ 2019-02-26 14:59 Denis V. Lunev
  2019-02-26 15:51 ` Kevin Wolf
  0 siblings, 1 reply; 3+ messages in thread
From: Denis V. Lunev @ 2019-02-26 14:59 UTC (permalink / raw)
  To: qemu-block, qemu-devel
  Cc: Denis V. Lunev, Kevin Wolf, Max Reitz, Paolo Bonzini, Fam Zheng

Nowaday SCSI drivers in guests are able to alight UNMAP requests before
sending to the device. Right now QEMU provides an ability to set
this via "discard_granularity" property of the block device which could
be used by management layer.

Though, in particular, from the point of QEMU, there is
pdiscard_granularity on the format driver level, f.e. on QCOW2 or iSCSI.
It would be beneficial to pass this value as a default for this
property.

Technically this should reduce the amount of useless UNMAP requests
from the guest to the host.

Signed-off-by: Denis V. Lunev <den@openvz.org>
CC: Kevin Wolf <kwolf@redhat.com>
CC: Max Reitz <mreitz@redhat.com>
CC: Paolo Bonzini <pbonzini@redhat.com>
CC: Fam Zheng <fam@euphon.net>
---
 block/block-backend.c          | 13 +++++++++++++
 hw/scsi/scsi-disk.c            |  4 ++--
 include/sysemu/block-backend.h |  1 +
 3 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/block/block-backend.c b/block/block-backend.c
index f6ea824308..17a709a551 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -21,11 +21,13 @@
 #include "qapi/qapi-events-block.h"
 #include "qemu/id.h"
 #include "qemu/option.h"
+#include "qemu/units.h"
 #include "trace.h"
 #include "migration/misc.h"
 
 /* Number of coroutines to reserve per attached device model */
 #define COROUTINE_POOL_RESERVATION 64
+#define DEFAULT_DISCARD_GRANULARITY (4 * KiB)
 
 #define NOT_DONE 0x7fffffff /* used while emulated sync operation in progress */
 
@@ -2042,6 +2044,17 @@ int blk_probe_geometry(BlockBackend *blk, HDGeometry *geo)
     return bdrv_probe_geometry(blk_bs(blk), geo);
 }
 
+int blk_discard_granularity(BlockBackend *blk)
+{
+    BlockDriverState *bs = blk_bs(blk);
+
+    if (bs == NULL) {
+        return DEFAULT_DISCARD_GRANULARITY;
+    }
+
+    return bs->bl.pdiscard_alignment;
+}
+
 /*
  * Updates the BlockBackendRootState object with data from the currently
  * attached BlockDriverState.
diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
index d4e83aef0e..f0ff099114 100644
--- a/hw/scsi/scsi-disk.c
+++ b/hw/scsi/scsi-disk.c
@@ -43,7 +43,6 @@
 #define SCSI_MAX_INQUIRY_LEN        256
 #define SCSI_MAX_MODE_LEN           256
 
-#define DEFAULT_DISCARD_GRANULARITY (4 * KiB)
 #define DEFAULT_MAX_UNMAP_SIZE      (1 * GiB)
 #define DEFAULT_MAX_IO_SIZE         INT_MAX     /* 2 GB - 1 block */
 
@@ -2338,7 +2337,8 @@ static void scsi_realize(SCSIDevice *dev, Error **errp)
 
     if (s->qdev.conf.discard_granularity == -1) {
         s->qdev.conf.discard_granularity =
-            MAX(s->qdev.conf.logical_block_size, DEFAULT_DISCARD_GRANULARITY);
+            MAX(s->qdev.conf.logical_block_size,
+                blk_discard_granularity(s->qdev.conf.blk));
     }
 
     if (!s->version) {
diff --git a/include/sysemu/block-backend.h b/include/sysemu/block-backend.h
index 832a4bf168..18428e685d 100644
--- a/include/sysemu/block-backend.h
+++ b/include/sysemu/block-backend.h
@@ -218,6 +218,7 @@ int blk_save_vmstate(BlockBackend *blk, const uint8_t *buf,
 int blk_load_vmstate(BlockBackend *blk, uint8_t *buf, int64_t pos, int size);
 int blk_probe_blocksizes(BlockBackend *blk, BlockSizes *bsz);
 int blk_probe_geometry(BlockBackend *blk, HDGeometry *geo);
+int blk_discard_granularity(BlockBackend *blk);
 BlockAIOCB *blk_abort_aio_request(BlockBackend *blk,
                                   BlockCompletionFunc *cb,
                                   void *opaque, int ret);
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] [PATCH 1/1] block: propagate discard aligment from format drivers to the guest
  2019-02-26 14:59 [Qemu-devel] [PATCH 1/1] block: propagate discard aligment from format drivers to the guest Denis V. Lunev
@ 2019-02-26 15:51 ` Kevin Wolf
  2019-02-27 12:32   ` Denis V. Lunev
  0 siblings, 1 reply; 3+ messages in thread
From: Kevin Wolf @ 2019-02-26 15:51 UTC (permalink / raw)
  To: Denis V. Lunev
  Cc: qemu-block, qemu-devel, Max Reitz, Paolo Bonzini, Fam Zheng,
	armbru, dgilbert

Am 26.02.2019 um 15:59 hat Denis V. Lunev geschrieben:
> Nowaday SCSI drivers in guests are able to alight UNMAP requests before

Is s/alight/align/ what you mean?

The subject line has an "alignment" typo, too.

> sending to the device. Right now QEMU provides an ability to set
> this via "discard_granularity" property of the block device which could
> be used by management layer.
> 
> Though, in particular, from the point of QEMU, there is
> pdiscard_granularity on the format driver level, f.e. on QCOW2 or iSCSI.
> It would be beneficial to pass this value as a default for this
> property.
> 
> Technically this should reduce the amount of useless UNMAP requests
> from the guest to the host.
> 
> Signed-off-by: Denis V. Lunev <den@openvz.org>
> CC: Kevin Wolf <kwolf@redhat.com>
> CC: Max Reitz <mreitz@redhat.com>
> CC: Paolo Bonzini <pbonzini@redhat.com>
> CC: Fam Zheng <fam@euphon.net>

I'm not doing things like this very often, but you're touching the guest
ABI here, which is a bit tricky. The main point is that the same command
line must result in the same guest view.

You'll need at least some machine type magic to make old machine types
use the old defaults. I'm not sure if there's something else to consider
for migration compatibility.

Kevin

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] [PATCH 1/1] block: propagate discard aligment from format drivers to the guest
  2019-02-26 15:51 ` Kevin Wolf
@ 2019-02-27 12:32   ` Denis V. Lunev
  0 siblings, 0 replies; 3+ messages in thread
From: Denis V. Lunev @ 2019-02-27 12:32 UTC (permalink / raw)
  To: Kevin Wolf
  Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org, Max Reitz,
	Paolo Bonzini, Fam Zheng, armbru@redhat.com, dgilbert@redhat.com

On 2/26/19 6:51 PM, Kevin Wolf wrote:
> Am 26.02.2019 um 15:59 hat Denis V. Lunev geschrieben:
>> Nowaday SCSI drivers in guests are able to alight UNMAP requests before
> Is s/alight/align/ what you mean?
>
> The subject line has an "alignment" typo, too.
>
>> sending to the device. Right now QEMU provides an ability to set
>> this via "discard_granularity" property of the block device which could
>> be used by management layer.
>>
>> Though, in particular, from the point of QEMU, there is
>> pdiscard_granularity on the format driver level, f.e. on QCOW2 or iSCSI.
>> It would be beneficial to pass this value as a default for this
>> property.
>>
>> Technically this should reduce the amount of useless UNMAP requests
>> from the guest to the host.
>>
>> Signed-off-by: Denis V. Lunev <den@openvz.org>
>> CC: Kevin Wolf <kwolf@redhat.com>
>> CC: Max Reitz <mreitz@redhat.com>
>> CC: Paolo Bonzini <pbonzini@redhat.com>
>> CC: Fam Zheng <fam@euphon.net>
> I'm not doing things like this very often, but you're touching the guest
> ABI here, which is a bit tricky. The main point is that the same command
> line must result in the same guest view.
>
> You'll need at least some machine type magic to make old machine types
> use the old defaults. I'm not sure if there's something else to consider
> for migration compatibility.
>
> Kevin
sounds reasonable, thank you for the suggestion.

I was fascinated with the fact that
a) change is not  disruptive
b) the guest actually do not read this value except on controller reset and
    it is safe to return different value on a new request. This is not a
very
    big deal.

Den

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2019-02-27 13:44 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-02-26 14:59 [Qemu-devel] [PATCH 1/1] block: propagate discard aligment from format drivers to the guest Denis V. Lunev
2019-02-26 15:51 ` Kevin Wolf
2019-02-27 12:32   ` Denis V. Lunev

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).