On Tue, Jul 30, 2013 at 03:30:33PM -0400, Tomoki Sekiyama wrote: > Hi, > > When some application launches several hundreds of processes that issue > only a few small sync I/O requests, CFQ may cause heavy latencies > (10+ seconds at the worst case), although the request rate is low enough for > the disk to handle it without waiting. This is because CFQ waits for > slice_idle (default:8ms) every time before processing each request, until > their thinktimes are evaluated. > > This scenario can be reproduced using fio with parameters below: > fio -filename=/tmp/test -rw=randread -size=5G -runtime=15 -name=file1 \ > -bs=4k -numjobs=500 -thinktime=1000000 > In this case, 500 processes issue a random read request every second.
For this workload CFQ should perfectly detect it's a seek queue and disable idle. I suppose the reason is CFQ hasn't enough data/time to disable idle yet, since your thinktime is long and runtime is short. I thought the real problem here is cfq_init_cfqq() shouldn't set idle_window when initializing a queue. We should enable idle window after we detect the queue is worthy idle. Thanks, Shaohua -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/