lkml.org 
[lkml]   [2000]   [Nov]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [BUG] /proc/<pid>/stat access stalls badly for swapping process, 2.4.0-test10
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 <axboe@suse.de>
* 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;
}

/*
\
 
 \ /
  Last update: 2005-03-22 12:45    [W:0.058 / U:1.856 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site