linux/drivers/lightnvm
Javier González 21d2287119 lightnvm: pblk: enable 1 LUN configuration
Metadata I/Os are scheduled to minimize their impact on user data I/Os.
When there are enough LUNs instantiated (i.e., enough bandwidth), it is
easy to interleave metadata and data one after the other so that
metadata I/Os are the ones being blocked and not vice-versa.

We do this by calculating the distance between the I/Os in terms of the
LUNs that are not in used, and selecting a free LUN that satisfies a
the simple heuristic that metadata is scheduled behind. The per-LUN
semaphores guarantee consistency. This works fine on >1 LUN
configuration. However, when a single LUN is instantiated, this design
leads to a deadlock, where metadata waits to be scheduled on a free LUN.

This patch implements the 1 LUN case by simply scheduling the metadada
I/O after the data I/O. In the process, we refactor the way a line is
replaced to ensure that metadata writes are submitted after data writes
in order to guarantee block sequentiality. Note that, since there is
only one LUN, both I/Os will block each other by design. However, such
configuration only pursues tight read latencies, not write bandwidth.

Signed-off-by: Javier González <javier@cnexlabs.com>
Signed-off-by: Matias Bjørling <m@bjorling.me>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2017-10-13 08:34:57 -06:00
..
core.c lightnvm: remove already calculated nr_chnls 2017-10-13 08:34:57 -06:00
Kconfig lightnvm: include NVM Express driver if OCSSD is selected for build 2017-10-13 08:34:57 -06:00
Makefile lightnvm: physical block device (pblk) target 2017-04-16 10:06:33 -06:00
pblk-cache.c lightnvm: pblk: simplify path on REQ_PREFLUSH 2017-10-13 08:34:57 -06:00
pblk-core.c lightnvm: pblk: enable 1 LUN configuration 2017-10-13 08:34:57 -06:00
pblk-gc.c lightnvm: pblk: refactor read path on GC 2017-10-13 08:34:57 -06:00
pblk-init.c lightnvm: pblk: enable 1 LUN configuration 2017-10-13 08:34:57 -06:00
pblk-map.c lightnvm: pblk: enable 1 LUN configuration 2017-10-13 08:34:57 -06:00
pblk-rb.c lightnvm: pblk: allocate bio size more accurately 2017-10-13 08:34:57 -06:00
pblk-read.c lightnvm: pblk: remove redundant check on read path 2017-10-13 08:34:57 -06:00
pblk-recovery.c lightnvm: pblk: refactor rqd alloc/free 2017-10-13 08:34:57 -06:00
pblk-rl.c lightnvm: pblk: avoid deadlock on low LUN config 2017-10-13 08:34:57 -06:00
pblk-sysfs.c lightnvm: pblk: remove unused return variable 2017-06-30 11:08:18 -06:00
pblk-write.c lightnvm: pblk: remove I/O dependency on write path 2017-10-13 08:34:57 -06:00
pblk.h lightnvm: pblk: enable 1 LUN configuration 2017-10-13 08:34:57 -06:00
rrpc.c blk: remove bio_set arg from blk_queue_split() 2017-06-18 12:40:59 -06:00
rrpc.h lightnvm: use end_io callback instead of instance 2017-01-31 08:32:13 -07:00