All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v2 00/24] block: Support for 512b-on-4k emulatio
@ 2013-12-13 13:22 Kevin Wolf
  2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 01/24] block: Move initialisation of BlockLimits to bdrv_refresh_limits() Kevin Wolf
                   ` (24 more replies)
  0 siblings, 25 replies; 57+ messages in thread
From: Kevin Wolf @ 2013-12-13 13:22 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, pbonzini, pl, stefanha

This patch series adds code to the block layer that allows performing
I/O requests in smaller granularities than required by the host backend
(most importantly, O_DIRECT restrictions). It achieves this for reads
by rounding the request to host-side block boundary, and for writes by
performing a read-modify-write cycle (and serialising requests
touching the same block so that the RMW doesn't write back stale data).

Originally I intended to reuse a lot of code from Paolo's previous
patch series, however as I tried to integrate pread/pwrite, which
already do a very similar thing (except for considering concurrency),
and because I wanted to implement zero-copy, most of this series ended
up being new code.

Zero-copy is possible in a common case because while XFS defauls to a
4k sector size and therefore 4k on-disk O_DIRECT alignment for 512E
disks, it still only has a 512 byte memory alignment requirement.
(Unfortunately the XFS_IOC_DIOINFO ioctl claims 4k even for memory, but
we know that the value is wrong and can probe it.)


Changes in v1 -> v2:
- Fixed overlap_bytes calculation in mark_request_serialising()
- Fixed wait_serialising_requests() deadlock
- iscsi: Set bs->request_alignment [Peter]
- iscsi: Query block limits only in iscsi_open() when no other request
  are in flight, and in iscsi_refresh_limits() copy the stored values
  into bs->bl [Peter]

Changes in RFC -> v1:
- Moved opt_mem_alignment into BlockLimits [Paolo]
- Changed BlockLimits in turn to work a bit more like the
  .bdrv_opt_mem_align() callback of the RFC; allows updating the
  BlockLimits later when the chain changes or bdrv_reopen() toggles
  O_DIRECT
- Fixed a typo in a commit message [Eric]

Kevin Wolf (21):
  block: Move initialisation of BlockLimits to bdrv_refresh_limits()
  block: Inherit opt_transfer_length
  block: Update BlockLimits when they might have changed
  qemu_memalign: Allow small alignments
  block: Detect unaligned length in bdrv_qiov_is_aligned()
  block: Don't use guest sector size for qemu_blockalign()
  block: Introduce bdrv_aligned_preadv()
  block: Introduce bdrv_co_do_preadv()
  block: Introduce bdrv_aligned_pwritev()
  block: write: Handle COR dependency after I/O throttling
  block: Introduce bdrv_co_do_pwritev()
  block: Switch BdrvTrackedRequest to byte granularity
  block: Allow waiting for overlapping requests between begin/end
  block: Make zero-after-EOF work with larger alignment
  block: Generalise and optimise COR serialisation
  block: Make overlap range for serialisation dynamic
  block: Allow wait_serialising_requests() at any point
  block: Align requests in bdrv_co_do_pwritev()
  block: Change coroutine wrapper to byte granularity
  block: Make bdrv_pread() a bdrv_prwv_co() wrapper
  block: Make bdrv_pwrite() a bdrv_prwv_co() wrapper

Paolo Bonzini (3):
  block: rename buffer_alignment to guest_block_size
  raw: Probe required direct I/O alignment
  iscsi: Set bs->request_alignment

 block.c                   | 634 +++++++++++++++++++++++++++++++---------------
 block/backup.c            |   7 +-
 block/iscsi.c             |  47 ++--
 block/qcow2.c             |  11 +-
 block/qed.c               |  11 +-
 block/raw-posix.c         | 102 ++++++--
 block/raw-win32.c         |  41 +++
 block/stream.c            |   2 +
 block/vmdk.c              |  22 +-
 hw/block/virtio-blk.c     |   2 +-
 hw/ide/core.c             |   2 +-
 hw/scsi/scsi-disk.c       |   2 +-
 hw/scsi/scsi-generic.c    |   2 +-
 include/block/block.h     |   6 +-
 include/block/block_int.h |  27 +-
 util/oslib-posix.c        |   5 +
 16 files changed, 673 insertions(+), 250 deletions(-)

-- 
1.8.1.4

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

end of thread, other threads:[~2014-01-17  1:38 UTC | newest]

Thread overview: 57+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-12-13 13:22 [Qemu-devel] [PATCH v2 00/24] block: Support for 512b-on-4k emulatio Kevin Wolf
2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 01/24] block: Move initialisation of BlockLimits to bdrv_refresh_limits() Kevin Wolf
2014-01-11 22:24   ` Max Reitz
2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 02/24] block: Inherit opt_transfer_length Kevin Wolf
2014-01-11 22:24   ` Max Reitz
2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 03/24] block: Update BlockLimits when they might have changed Kevin Wolf
2014-01-11 22:24   ` Max Reitz
2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 04/24] qemu_memalign: Allow small alignments Kevin Wolf
2014-01-11 22:25   ` Max Reitz
2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 05/24] block: Detect unaligned length in bdrv_qiov_is_aligned() Kevin Wolf
2014-01-11 22:25   ` Max Reitz
2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 06/24] block: Don't use guest sector size for qemu_blockalign() Kevin Wolf
2014-01-11 22:25   ` Max Reitz
2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 07/24] block: rename buffer_alignment to guest_block_size Kevin Wolf
2014-01-11 22:26   ` Max Reitz
2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 08/24] raw: Probe required direct I/O alignment Kevin Wolf
2013-12-24  3:39   ` Wenchao Xia
2014-01-11 22:26   ` Max Reitz
2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 09/24] block: Introduce bdrv_aligned_preadv() Kevin Wolf
2013-12-24  7:23   ` Wenchao Xia
2014-01-11 22:27   ` Max Reitz
2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 10/24] block: Introduce bdrv_co_do_preadv() Kevin Wolf
2013-12-26  4:08   ` Wenchao Xia
2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 11/24] block: Introduce bdrv_aligned_pwritev() Kevin Wolf
2014-01-11 22:27   ` Max Reitz
2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 12/24] block: write: Handle COR dependency after I/O throttling Kevin Wolf
2014-01-11 22:27   ` Max Reitz
2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 13/24] block: Introduce bdrv_co_do_pwritev() Kevin Wolf
2014-01-10 18:11   ` Max Reitz
2014-01-16 12:25   ` Kevin Wolf
2014-01-17  1:38     ` Fam Zheng
2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 14/24] block: Switch BdrvTrackedRequest to byte granularity Kevin Wolf
2014-01-10 18:34   ` Max Reitz
2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 15/24] block: Allow waiting for overlapping requests between begin/end Kevin Wolf
2014-01-11 22:28   ` Max Reitz
2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 16/24] block: Make zero-after-EOF work with larger alignment Kevin Wolf
2014-01-10 19:07   ` Max Reitz
2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 17/24] block: Generalise and optimise COR serialisation Kevin Wolf
2014-01-11 22:28   ` Max Reitz
2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 18/24] block: Make overlap range for serialisation dynamic Kevin Wolf
2014-01-11 22:28   ` Max Reitz
2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 19/24] block: Allow wait_serialising_requests() at any point Kevin Wolf
2013-12-27  4:17   ` Wenchao Xia
2014-01-13 11:29     ` Kevin Wolf
2014-01-14  3:13       ` Wenchao Xia
2014-01-11 22:29   ` Max Reitz
2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 20/24] block: Align requests in bdrv_co_do_pwritev() Kevin Wolf
2014-01-11 22:29   ` Max Reitz
2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 21/24] block: Change coroutine wrapper to byte granularity Kevin Wolf
2014-01-11 22:29   ` Max Reitz
2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 22/24] block: Make bdrv_pread() a bdrv_prwv_co() wrapper Kevin Wolf
2014-01-11 22:29   ` Max Reitz
2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 23/24] block: Make bdrv_pwrite() " Kevin Wolf
2014-01-11 22:22   ` Max Reitz
2013-12-13 13:22 ` [Qemu-devel] [PATCH v2 24/24] iscsi: Set bs->request_alignment Kevin Wolf
2014-01-11 22:30   ` Max Reitz
2013-12-27  4:27 ` [Qemu-devel] [PATCH v2 00/24] block: Support for 512b-on-4k emulatio Wenchao Xia

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.