Spdk/include/spdk
Jim Harris 4bd9762165 bdev: add split_on_optimal_io_boundary
A number of modules (RAID, logical volumes) have logical
"stripes" that require splitting an I/O into several
child I/O.  For example, on a RAID-0 with 128KB strip size,
an I/O that spans a 128KB boundary will require sending
one I/O for the portion that comes before the boundary to
one member disk, and another I/O for the portion that comes
after the boundary to another member disk.  Logical volumes
are similar - data is allocated in clusters, so an I/O that
spans a cluster boundary may need to be split since the
clusters may not be contiguous on disk.

Putting the splitting logic in the common bdev layer ensures
bdev module authors don't have to always do this themselves.
This is especially helpful for cases like splitting an I/O
described by many iovs - we can simplify this a lot by
handling it in the common bdev layer.

Note that currently we will only submit one child I/O
at a time.  This could be improved later to submit multiple
child I/O in parallel, but the complexity in the iov splitting
code also increases a lot.

Note: Some Intel NVMe SSDs have a similar characteristic.
We will not use this bdev stripe feature for NVMe though -
we want to primarily use the splitting functionality inside
of the NVMe driver itself to ensure it remains fully
functional.  Many SPDK users use the NVMe driver without
the bdev layer.

Signed-off-by: Jim Harris <james.r.harris@intel.com>
Change-Id: Ife804ecc56f6b2b55345a0d0ae9fda9e68632b3b

Reviewed-on: https://review.gerrithub.io/423024
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Paul Luse <paul.e.luse@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
2018-08-23 16:08:21 +00:00
..
assert.h include: move standard includes into spdk/stdinc.h 2017-05-08 10:11:01 -07:00
barrier.h barrier.h: change PPC64 spdk_rmb from lwsync to sync 2018-06-05 17:56:22 +00:00
base64.h util/base64: add base64 lib and unit tests 2018-07-19 00:50:54 +00:00
bdev_module.h bdev: add split_on_optimal_io_boundary 2018-08-23 16:08:21 +00:00
bdev.h bdev: add tracking for time spent processing I/O. 2018-07-31 23:26:07 +00:00
bit_array.h util/bit_array: add functions to count 0/1 bits 2018-06-04 17:24:48 +00:00
blob_bdev.h bdev: rename spdk_bdev_module_if -> spdk_bdev_module 2018-03-13 00:55:12 -04:00
blob.h blobstore: add decouple parent function 2018-06-21 22:50:03 +00:00
blobfs.h blobfs: change the return type of spdk_file_truncate 2018-07-26 01:42:17 +00:00
conf.h include/conf: add comments for public APIs 2018-02-26 11:59:09 -05:00
copy_engine.h include/copy_engine.h: add comments for callback functions 2018-05-28 01:45:03 +00:00
cpuset.h doc: fix a bunch of parameter-related Doxygen comments 2018-06-19 17:29:06 +00:00
crc16.h util/crc16: add crc16 library support and unit tests 2017-12-20 15:12:26 -05:00
crc32.h Clean up some incorrect Copyright statements 2018-07-30 16:29:38 +00:00
endian.h include: move standard includes into spdk/stdinc.h 2017-05-08 10:11:01 -07:00
env.h env/app: add unlink hugepages option to app 2018-07-17 07:06:53 +00:00
event.h include: update SPDK_APP_GETOPT_STRING 2018-08-21 17:05:34 +00:00
fd.h include/fd.h: add comments for pubclic APIs 2018-01-04 12:12:10 -05:00
gpt_spec.h bdev/gpt: dump partition name 2017-07-12 18:12:52 -04:00
histogram_data.h util: enable dynamic spdk_histogram_data sizing 2017-12-29 14:20:48 -05:00
io_channel.h thread: Rename io_channel.h to thread.h 2018-06-12 15:24:07 +00:00
ioat_spec.h ioat: clear the internal channel error register on reset 2018-08-13 16:59:18 +00:00
ioat.h include/ioat.h: add comments for public APIs 2018-03-14 13:02:06 -04:00
iscsi_spec.h iscsi: fix layout of logout request reason field 2017-09-22 16:11:11 -04:00
json.h json: Add spdk_json_decode_uint16 2018-06-05 21:30:02 +00:00
jsonrpc.h rpc: Add state_mask to each RPC method to make sets of RPCs 2018-05-03 19:48:15 +00:00
likely.h include: move standard includes into spdk/stdinc.h 2017-05-08 10:11:01 -07:00
log.h doc: fix a bunch of parameter-related Doxygen comments 2018-06-19 17:29:06 +00:00
lvol.h lvol: destroy_lvol_bdev implementation 2018-07-25 17:06:45 +00:00
mmio.h mmio: add functions for 1 and 2 byte I/O accesses 2017-10-13 10:46:00 -04:00
nbd.h nbd: add JSON config dump 2018-04-24 21:46:42 +00:00
net.h include/net.h: remove non public functions to private header file 2018-04-11 12:10:14 -04:00
nvme_intel.h include: move standard includes into spdk/stdinc.h 2017-05-08 10:11:01 -07:00
nvme_ocssd_spec.h ocssd: lba_status bit array on vector completion queue entry 2018-07-02 22:37:53 +00:00
nvme_ocssd.h ocssd: add chunk info list as mptr of vector reset 2018-07-09 18:54:22 +00:00
nvme_spec.h nvme_spec: add VWC flush broadcast bits (TP 4035) 2018-06-26 22:51:37 +00:00
nvme.h nvme: add spdk_nvme_ns_get_extended_sector_size 2018-08-16 04:38:10 +00:00
nvmf_fc_spec.h nvmf: FC-NVMe spec. header file 2018-07-06 22:49:20 +00:00
nvmf_spec.h nvmf: update spdk_nvmf_fabric_prop_get_cmd.attrib 2018-07-31 16:11:19 +00:00
nvmf.h nvmf: Queue pairs can no longer be removed from poll groups 2018-08-13 18:57:45 +00:00
pci_ids.h nvme: add chk_rdy quirk for some Samsung drives 2018-07-14 01:47:47 +00:00
queue_extras.h scripts/check_format: check for spaces before tabs 2018-03-05 11:09:13 -05:00
queue.h Add extern "C" wrapper to all public headers 2016-02-12 07:52:35 -07:00
rpc.h rpc: Add state_mask to each RPC method to make sets of RPCs 2018-05-03 19:48:15 +00:00
scsi_spec.h scripts/check_format: check for spaces before tabs 2018-03-05 11:09:13 -05:00
scsi.h iscsi: Support hot removal of LUN based on LUN open/close 2018-07-17 17:43:28 +00:00
sock.h doc: fix some doxygen warnings 2018-06-19 21:23:06 +00:00
stdinc.h app: allow full-name command line options 2018-08-13 17:30:10 +00:00
string.h string: escape references to \r and \n 2018-06-19 15:18:08 +00:00
thread.h thread: add spdk_thread_get_count() 2018-06-13 00:38:41 +00:00
trace.h doc: fix a bunch of parameter-related Doxygen comments 2018-06-19 17:29:06 +00:00
util.h util: add spdk_u32_is_pow2() function 2017-08-11 19:36:30 -04:00
uuid.h doc: fix a bunch of parameter-related Doxygen comments 2018-06-19 17:29:06 +00:00
version.h version: 18.10 pre 2018-08-03 00:42:36 +00:00
vhost.h vhost/scsi: do not fail scsi_dev_add_tgt() if hotplug is not supported 2018-07-05 01:51:22 +00:00