All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v4 00/15] qcow2: space preallocation and COW improvements
@ 2017-08-01 14:18 Anton Nefedov
  2017-08-01 14:18 ` [Qemu-devel] [PATCH v4 01/15] mirror: inherit supported write/zero flags Anton Nefedov
                   ` (15 more replies)
  0 siblings, 16 replies; 27+ messages in thread
From: Anton Nefedov @ 2017-08-01 14:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: qemu-block, den, kwolf, mreitz, eblake, Anton Nefedov

Changes in v4:

  - rebased on top of Eric's series
    [PATCH v2 00/20] add byte-based block_status driver callbacks
    http://lists.nongnu.org/archive/html/qemu-devel/2017-07/msg04370.html

  - patch 5 fixed to compile without CONFIG_FALLOCATE and support
    BDRV_REQ_ALLOCATE with xfsctl enabled

  - add patches 1, 2 to support write/zero flags in mirror and blkverify
    drivers

========

Here goes a revisited series on qcow2 preallocation. It's probably a bit better
integrated this time and the amount of code is reduced significantly.

Changes in v3:
  - requests intersection detection from the previous versions is removed
    from qcow2 driver. Instead, tracked request infrastructure from the common
    block layer is used.

  - that made possible to omit preallocation for metadata writes.
    Those are rare and won't affect performance.

  - 'Simultaneous writes' feature (patches v2 12-15) dropped by now;
     Might worth a separate series.

  - various remarks to the previous version fixed

  - some iotests added

========

Changes in v2:
  - introduce new BDRV flag for write_zeroes()
      instead of using driver callback directly.
    Skipped introducing new functions like bdrv_co_pallocate() for now:
      1. it seems ok to keep calling this write_zeroes() as zeroes
      are expected;
      2. most of the code can be reused now anyway, so changes to
      write_zeroes() path are not significant
      3. write_zeroes() alignment and max-request limits can also be reused

    As a possible alternative we can have bdrv_co_pallocate() which can
    switch to pwrite_zeroes(,flags|=BDRV_REQ_ALLOCATE) early.

========

This pull request is to address a few performance problems of qcow2 format:

  1. non cluster-aligned write requests (to unallocated clusters) explicitly
    pad data with zeroes if there is no backing data. This can be avoided
    and the whole clusters are preallocated and zeroed in a single
    efficient write_zeroes() operation, also providing better host file
    continuity

  2. moreover, efficient write_zeroes() operation can be used to preallocate
    space megabytes ahead which gives noticeable improvement on some storage
    types (e.g. distributed storages where space allocation operation is
    expensive)

  /* omitted in v3: */
  3. preallocating/zeroing the clusters in advance makes possible to enable
    simultaneous writes to the same unallocated cluster, which is beneficial
    for parallel sequential write operations which are not cluster-aligned

Performance test results are added to commit messages (see patch 3, 12)

Anton Nefedov (12):
  mirror: inherit supported write/zero flags
  blkverify: set supported write/zero flags
  block: introduce BDRV_REQ_ALLOCATE flag
  block: treat BDRV_REQ_ALLOCATE as serialising
  file-posix: support BDRV_REQ_ALLOCATE
  block: support BDRV_REQ_ALLOCATE in passthrough drivers
  qcow2: set inactive flag
  qcow2: move is_zero() up
  qcow2: skip writing zero buffers to empty COW areas
  qcow2: allocate image space by-cluster
  iotest 190: test BDRV_REQ_ALLOCATE
  iotest 134: test cluster-misaligned encrypted write

Denis V. Lunev (2):
  qcow2: preallocation at image expand
  qcow2: truncate preallocated space

Pavel Butsykin (1):
  qcow2: check space leak at the end of the image

 include/block/block.h              |   6 +-
 include/block/block_int.h          |   2 +-
 block/qcow2.h                      |  18 ++++
 block/blkdebug.c                   |   3 +-
 block/blkverify.c                  |   9 ++
 block/file-posix.c                 |   8 ++
 block/io.c                         |  47 +++++++--
 block/mirror.c                     |   5 +
 block/qcow2-cluster.c              |  14 ++-
 block/qcow2-refcount.c             |   7 ++
 block/qcow2.c                      | 203 ++++++++++++++++++++++++++++++++-----
 block/raw-format.c                 |   3 +-
 block/trace-events                 |   1 +
 qemu-options.hx                    |   4 +
 tests/qemu-iotests/026.out         | 104 ++++++++++++++-----
 tests/qemu-iotests/026.out.nocache | 104 ++++++++++++++-----
 tests/qemu-iotests/029.out         |   5 +-
 tests/qemu-iotests/060             |   2 +-
 tests/qemu-iotests/060.out         |  13 ++-
 tests/qemu-iotests/061.out         |   5 +-
 tests/qemu-iotests/066             |   2 +-
 tests/qemu-iotests/066.out         |   9 +-
 tests/qemu-iotests/098.out         |   7 +-
 tests/qemu-iotests/108.out         |   5 +-
 tests/qemu-iotests/112.out         |   5 +-
 tests/qemu-iotests/134             |   9 ++
 tests/qemu-iotests/134.out         |  10 ++
 tests/qemu-iotests/190             | 146 ++++++++++++++++++++++++++
 tests/qemu-iotests/190.out         |  50 +++++++++
 tests/qemu-iotests/group           |   1 +
 30 files changed, 705 insertions(+), 102 deletions(-)
 create mode 100755 tests/qemu-iotests/190
 create mode 100644 tests/qemu-iotests/190.out

-- 
2.7.4

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

end of thread, other threads:[~2017-09-21 17:16 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-08-01 14:18 [Qemu-devel] [PATCH v4 00/15] qcow2: space preallocation and COW improvements Anton Nefedov
2017-08-01 14:18 ` [Qemu-devel] [PATCH v4 01/15] mirror: inherit supported write/zero flags Anton Nefedov
2017-08-04 15:13   ` [Qemu-devel] [PATCH v4 for-2.10 " Eric Blake
2017-08-01 14:18 ` [Qemu-devel] [PATCH v4 02/15] blkverify: set " Anton Nefedov
2017-08-04 15:23   ` Eric Blake
2017-08-07 12:19     ` Anton Nefedov
2017-08-01 14:19 ` [Qemu-devel] [PATCH v4 03/15] block: introduce BDRV_REQ_ALLOCATE flag Anton Nefedov
2017-08-04 19:51   ` Eric Blake
2017-08-29 12:47   ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2017-08-01 14:19 ` [Qemu-devel] [PATCH v4 04/15] block: treat BDRV_REQ_ALLOCATE as serialising Anton Nefedov
2017-08-01 14:19 ` [Qemu-devel] [PATCH v4 05/15] file-posix: support BDRV_REQ_ALLOCATE Anton Nefedov
2017-08-29 13:00   ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2017-08-01 14:19 ` [Qemu-devel] [PATCH v4 06/15] block: support BDRV_REQ_ALLOCATE in passthrough drivers Anton Nefedov
2017-08-29 13:07   ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2017-08-01 14:19 ` [Qemu-devel] [PATCH v4 07/15] qcow2: preallocation at image expand Anton Nefedov
2017-08-01 14:19 ` [Qemu-devel] [PATCH v4 08/15] qcow2: set inactive flag Anton Nefedov
2017-08-04 20:00   ` Eric Blake
2017-08-07 12:06     ` Anton Nefedov
2017-08-01 14:19 ` [Qemu-devel] [PATCH v4 09/15] qcow2: truncate preallocated space Anton Nefedov
2017-08-01 14:19 ` [Qemu-devel] [PATCH v4 10/15] qcow2: check space leak at the end of the image Anton Nefedov
2017-08-01 14:19 ` [Qemu-devel] [PATCH v4 11/15] qcow2: move is_zero() up Anton Nefedov
2017-08-01 14:19 ` [Qemu-devel] [PATCH v4 12/15] qcow2: skip writing zero buffers to empty COW areas Anton Nefedov
2017-08-01 14:19 ` [Qemu-devel] [PATCH v4 13/15] qcow2: allocate image space by-cluster Anton Nefedov
2017-08-01 14:19 ` [Qemu-devel] [PATCH v4 14/15] iotest 190: test BDRV_REQ_ALLOCATE Anton Nefedov
2017-08-04 15:27   ` Eric Blake
2017-08-01 14:19 ` [Qemu-devel] [PATCH v4 15/15] iotest 134: test cluster-misaligned encrypted write Anton Nefedov
2017-09-21 17:16 ` [Qemu-devel] [PATCH v4 00/15] qcow2: space preallocation and COW improvements Anton Nefedov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.