[PATCH 00/12] block: support for partial sector reads
Keith Busch
kbusch at fb.com
Thu Jun 30 13:42:00 PDT 2022
From: Keith Busch <kbusch at kernel.org>
At LSFMM nearly 2 months ago, I discussed how some storage hardware
supports the ability to read at granularities smaller than a sector, and
the nvme protocol feature that enables this capability, "bit buckets".
This is useful in scenarios where only parts of sectors are used by the
application, and the primary benefits to support this are:
* Improved link bandwidth usage
* Reduced memory utilization
This series enables the block layer and nvme to set up bit bucket
descriptors for read commands, then enables user space direct-io to make
use of this capability by allowing the user to specify an arbitrary
offset and length. This allows truncating an arbitrary number of bytes
off sectors from the front and end of the transfer.
There are no current in-kernel users beyond the direct-io cases, but
this could also be used for to truncate bytes out of the middle of a
transfer as well. For example, if you wanted to read a page and knew you
wer going to immediately dirty some number of bytes in the middle, you
could set up a read request to skip those in the data transfer.
Keith Busch (12):
block: move direct io alignment check to common
iomap: save copy of bdev for direct io
iomap: get logical block size directly
iomap: use common blkdev alignment check
block: add bit bucket capabilities
nvme: add support for bit buckets
block: allow copying pre-registered bvecs
block: add bio number of vecs helper for partials
block: add partial sector parameter helper
block: add direct-io partial sector read support
iomap: add direct io partial sector read support
block: export and document bit_bucket attribute
Documentation/ABI/stable/sysfs-block | 9 +++
block/bio.c | 42 +++++++++++-
block/blk-core.c | 5 ++
block/blk-merge.c | 3 +-
block/blk-mq.c | 2 +
block/blk-sysfs.c | 3 +
block/fops.c | 97 ++++++++++++++++++----------
drivers/nvme/host/core.c | 3 +
drivers/nvme/host/nvme.h | 6 ++
drivers/nvme/host/pci.c | 17 ++++-
fs/iomap/direct-io.c | 43 ++++++++----
include/linux/bio.h | 11 ++++
include/linux/blk-mq.h | 2 +
include/linux/blk_types.h | 1 +
include/linux/blkdev.h | 41 ++++++++++++
include/linux/nvme.h | 2 +
16 files changed, 236 insertions(+), 51 deletions(-)
--
2.30.2
More information about the Linux-nvme
mailing list