Spdk/lib/bdev
GangCao a2142f3a33 bdev/qos: add the QoS rate limiting support on bdev
This patch is to add the basic support of QoS on bdev.

Including two major functionalities:

1. The QoS rate limiting algorithm:
	a. New IO will be always queued first also under
	   the no memory condition
	b. Start the QoS IO operation based on the limit
	c. A poller started in each millisecond to reset
	   the rate limit and send new IOs down
	d. The rate limit is based on the millisecond and
	   converted from user configurable IOsPerSecond

2. The Master Thread management:
	a. Add a per bdev channel_count
	b. Whenever QoS is enabled on bdev, if QoS bdev
	   channel is not created, create the QoS bdev
	   channel and assign the QoS thread
	c. When new IOs coming from different channels
	   (threads), pass the IOs to the QoS bdev channel
	   through the thread event
	d. When the IOs are completed from the QoS bdev
	   channel, pass the IOs back to its orignal
	   channel(thread)
	e. Destroy the QoS bdev channel when it is the
	   last bdev channel for this bdev. Defer the
	   destruction if current thread is not QoS thread

Change-Id: Ie4444551d7c3c7de52f6513c9db926628796adb4
Signed-off-by: GangCao <gang.cao@intel.com>
Reviewed-on: https://review.gerrithub.io/393136
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2018-03-09 13:48:21 -05:00
..
aio bdev: rework bdev module registration 2018-03-09 12:07:35 -05:00
error bdev: rework bdev module registration 2018-03-09 12:07:35 -05:00
gpt bdev: rework bdev module registration 2018-03-09 12:07:35 -05:00
lvol bdev: rework bdev module registration 2018-03-09 12:07:35 -05:00
malloc bdev: rework bdev module registration 2018-03-09 12:07:35 -05:00
null bdev: rework bdev module registration 2018-03-09 12:07:35 -05:00
nvme bdev: rework bdev module registration 2018-03-09 12:07:35 -05:00
pmem bdev: rework bdev module registration 2018-03-09 12:07:35 -05:00
rbd bdev: rework bdev module registration 2018-03-09 12:07:35 -05:00
rpc bdev: add spdk_bdev_get_uuid() function 2018-03-08 10:49:51 -05:00
split bdev: rework bdev module registration 2018-03-09 12:07:35 -05:00
virtio bdev: rework bdev module registration 2018-03-09 12:07:35 -05:00
bdev.c bdev/qos: add the QoS rate limiting support on bdev 2018-03-09 13:48:21 -05:00
Makefile bdev: move part helper code into its own file 2018-02-27 12:36:26 -05:00
part.c bdev: move part helper code into its own file 2018-02-27 12:36:26 -05:00
scsi_nvme.c nvme_spec: remove SGL Sub Type Invalid status code 2017-09-22 17:11:53 -04:00
vtune.c bdev: #include VTune file to control warnings 2017-06-08 12:44:25 -04:00