block: recursive merge requests
authorShaohua Li <shaohua.li@intel.com>
Fri, 16 Dec 2011 13:00:31 +0000 (14:00 +0100)
committerJens Axboe <axboe@kernel.dk>
Fri, 16 Dec 2011 13:00:31 +0000 (14:00 +0100)
commit274193224cdabd687d804a26e0150bb20f2dd52c
treef07a788183f2ac91b9b16295f8f146bd5b88fb96
parent4a0b75c7d02c2bd46ed227d4ba5941ba8a0aba5d
block: recursive merge requests

In my workload, thread 1 accesses a, a+2, ..., thread 2 accesses a+1,
a+3,.... When the requests are flushed to queue, a and a+1 are merged
to (a, a+1), a+2 and a+3 too to (a+2, a+3), but (a, a+1) and (a+2, a+3)
aren't merged.
With recursive merge below, the workload throughput gets improved 20%
and context switch drops 60%.

Signed-off-by: Shaohua Li <shaohua.li@intel.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/elevator.c