On Fri, Nov 03 2000, Mike Galbraith wrote: > > I very much agree. Kflushd is still hungry for free write > > bandwidth here. > > In the LKML tradition of code talks and silly opinions walk... > > Attached is a diagnostic patch which gets kflushd under control, > and takes make -j30 bzImage build times down from 12 minutes to > 9 here. I have no more massive context switching on write, and > copies seem to go a lot quicker to boot. (that may be because > some of my failures were really _really_ horrible) > > Comments are very welcome. I haven't had problems with this yet, > but it's early so... This patch isn't supposed to be pretty either > (hw techs don't do pretty;) it's only supposed to say 'Huston...' > so be sure to grab a barfbag before you take a look. Super, looks pretty good from here. I'll give it a go when I get back. In addition, here's a small patch that disables the read stealing of requests from the write list -- does that improve behaviour when we are busy flushing? -- * Jens Axboe <[EMAIL PROTECTED]> * SuSE Labs
--- drivers/block/ll_rw_blk.c~ Fri Nov 3 03:22:25 2000 +++ drivers/block/ll_rw_blk.c Fri Nov 3 03:23:24 2000 @@ -455,35 +455,17 @@ struct list_head *list = &q->request_freelist[rw]; struct request *rq; - /* - * Reads get preferential treatment and are allowed to steal - * from the write free list if necessary. - */ if (!list_empty(list)) { rq = blkdev_free_rq(list); - goto got_rq; - } - - /* - * if the WRITE list is non-empty, we know that rw is READ - * and that the READ list is empty. allow reads to 'steal' - * from the WRITE list. - */ - if (!list_empty(&q->request_freelist[WRITE])) { - list = &q->request_freelist[WRITE]; - rq = blkdev_free_rq(list); - goto got_rq; + list_del(&rq->table); + rq->free_list = list; + rq->rq_status = RQ_ACTIVE; + rq->special = NULL; + rq->q = q; + return rq; } return NULL; - -got_rq: - list_del(&rq->table); - rq->free_list = list; - rq->rq_status = RQ_ACTIVE; - rq->special = NULL; - rq->q = q; - return rq; } /*