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;
 }
 
 /*

Reply via email to