These changes were born out of me staring at the DM core code that deals with request-based DM, in response to this thread: https://www.redhat.com/archives/dm-devel/2015-February/msg00118.html I've tested patches 1-3. Patch 4 is more an RFC patch that fell out of discussion I had with Jeff Moyer ("phro" below): <phro> are you sure it isn't just i/o completion that's pulling more requests off the queue? <phro> at least at the lower layer, that's what happens. you get an interrupt for i/o completion, and in that contxt you submit any pending i/o <snitm> in drivers/md/dm.c: dm_end_request -> rq_completed -> blk_run_queue_async <snitm> so could very well be <phro> ok, only difference is you kick it off to a work queue <phro> for immediate dispatch <snitm> right <phro> so that makes sense. as soon as an i/o is completed, a new one is issued <snitm> could impose a delay on the running of the queue <phro> right <snitm> e.g. how dm.c:dm_request_fn does blk_delay_queue(q, HZ / 10); <snitm> (which is what promotes merging in the ->lld_busy_fn returning true case) <snitm> that _could_ be enough to slow things down slightly <phro> it's worth a shot Mike Snitzer (4): dm: remove unnecessary wrapper around blk_lld_busy dm: remove request-based DM queue's lld_busy_fn hook dm: remove request-based logic from make_request_fn wrapper dm: delay running the queue slightly during request completion block/blk-core.c | 5 ++-- drivers/md/dm-mpath.c | 2 +- drivers/md/dm-table.c | 14 ----------- drivers/md/dm.c | 54 +++++++++++-------------------------------- drivers/md/dm.h | 1 - include/linux/blkdev.h | 2 -- include/linux/device-mapper.h | 5 ---- 7 files changed, 17 insertions(+), 66 deletions(-) -- 1.9.3 (Apple Git-50) -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel