On Mon, Sep 28, 2009 at 07:51:14PM +0200, Mike Galbraith wrote: > On Mon, 2009-09-28 at 17:35 +0200, Corrado Zoccolo wrote: > > > Great. > > Can you try the attached patch (on top of 2.6.31)? > > It implements the alternative approach we discussed privately in july, > > and it addresses the possible latency increase that could happen with > > your patch. > > > > To summarize for everyone, we separate sync sequential queues, sync > > seeky queues and async queues in three separate RR strucutres, and > > alternate servicing requests between them. > > > > When servicing seeky queues (the ones that are usually penalized by > > cfq, for which no fairness is usually provided), we do not idle > > between them, but we do idle for the last queue (the idle can be > > exited when any seeky queue has requests). This allows us to allocate > > disk time globally for all seeky processes, and to reduce seeky > > processes latencies. > > > > I tested with 'konsole -e exit', while doing a sequential write with > > dd, and the start up time reduced from 37s to 7s, on an old laptop > > disk. > > I was fiddling around trying to get IDLE class to behave at least, and > getting a bit frustrated. Class/priority didn't seem to make much if > any difference for konsole -e exit timings, and now I know why. You seem to be testing kconsole timings against a writer. In case of a writer prio will not make much of a difference as prio only adjusts length of slice given to process and writers rarely get to use their slice length. Reader immediately preemtps it... I guess changing class to IDLE should have helped a bit as now this is equivalent to setting the quantum to 1 and after dispatching one request to disk, CFQ will always expire the writer once. So it might happen that by the the reader preempted writer, we have less number of requests in disk and lesser latency for this reader. > I saw > the reference to Vivek's patch, and gave it a shot. Makes a large > difference. > Avg > perf stat 12.82 7.19 8.49 5.76 9.32 8.7 anticipatory > 16.24 175.82 154.38 228.97 147.16 144.5 noop > 43.23 57.39 96.13 148.25 180.09 105.0 deadline > 9.15 14.51 9.39 15.06 9.90 11.6 cfq fairness=0 dd=nice 0 > 12.22 9.85 12.55 9.88 15.06 11.9 cfq fairness=0 dd=nice 19 > 9.77 13.19 11.78 17.40 9.51 11.9 cfq fairness=0 dd=SCHED_IDLE > 4.59 2.74 4.70 3.45 4.69 4.0 cfq fairness=1 dd=nice 0 > 3.79 4.66 2.66 5.15 3.03 3.8 cfq fairness=1 dd=nice 19 > 2.79 4.73 2.79 4.02 2.50 3.3 cfq fairness=1 dd=SCHED_IDLE > Hmm.., looks like average latency went down only in case of fairness=1 and not in case of fairness=0. (Looking at previous mail, average vanilla cfq latencies were around 12 seconds). Are you running all this in root group or have you put writers and readers into separate cgroups? If everything is running in root group, then I am curious why latency went down in case of fairness=1. The only thing fairness=1 parameter does is that it lets complete all the requests from previous queue before start dispatching from next queue. On top of this is valid only if no preemption took place. In your test case, konsole should preempt the writer so practically fairness=1 might not make much difference. In fact now Jens has committed a patch which achieves the similar effect as fairness=1 for async queues. commit 5ad531db6e0f3c3c985666e83d3c1c4d53acccf9 Author: Jens Axboe <jens.axboe@xxxxxxxxxx> Date: Fri Jul 3 12:57:48 2009 +0200 cfq-iosched: drain device queue before switching to a sync queue To lessen the impact of async IO on sync IO, let the device drain of any async IO in progress when switching to a sync cfqq that has idling enabled. If everything is in separate cgroups, then we should have seen latency improvements in case of fairness=0 case also. I am little perplexed here.. Thanks Vivek -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel