a2142f3a33
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>