On 05/06/2014 04:06 AM, Desai, Kashyap wrote: > I got some clue on what was going on while doing 4K sequential read using fio. > > If I use ioengine in fio script as "libaio", I see " do_io_submit" call plug/unplug the queue before submitting the IO. > It means after every IO, we expect to send IO immediately to the next layer. If at all there are any pending IO do merge.. but not due to plugging. > > This is what happens on my test. Every time IO comes from application with libaio engine, it send down to the elevator/io-scheduler because queue was unplugged in > do_io_submit(). Moment I reduce the queue depth of the block device, merge start because of congestion at scsi mid layer. > > If I use, mmap engine, I see merged IO coming to the device driver because of plugging. I really don't know how it works, but gave a try and found merge happen because of plugging. ( I confirm using blktrace) > > Is there any ioengine in <fio> (or any other parameter setting), which can use plugging mechanism of block layer to merge more IO other than mmap ? O_DIRECT IO is sync by nature, which is why it is sent off immediately instead of held for potentially merging. mmap is not. You should be able to provoke merging by submitting more than 1 IO at the time. See the iodepth_batch settings for fio. -- Jens Axboe -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html