[PATCHlet] Re: kswapd @ 60-80% CPU during heavy HD i/o.

From: Rik van Riel (riel@conectiva.com.br)
Date: Wed May 03 2000 - 12:11:46 EST


On Mon, 1 May 2000, David S. Miller wrote:
> BTW, what loop are you trying to "continue;" out of here?
>
> + do {
> if (tsk->need_resched)
> schedule();
> if ((!zone->size) || (!zone->zone_wake_kswapd))
> continue;
> do_try_to_free_pages(GFP_KSWAPD, zone);
> + } while (zone->free_pages < zone->pages_low &&
> + --count);

Ughhhhh. And the worst part is that it took me a few _days_ to
figure out ;)

Anyway, the fix for this small buglet is attached. I'll continue
working on the active/inactive lists (per pgdat!), if I haven't
sent in the active/inactive list thing for the next prepatch, it
would be nice to have this small fix applied.

regards,

Rik

--
The Internet is not a network of computers. It is a network
of people. That is its real strength.

Wanna talk about the kernel? irc.openprojects.net / #kernelnewbies http://www.conectiva.com/ http://www.surriel.com/

--- vmscan.c.orig Wed May 3 10:51:36 2000 +++ vmscan.c Wed May 3 13:00:00 2000 @@ -528,15 +528,15 @@ pgdat = pgdat_list; while (pgdat) { for (i = 0; i < MAX_NR_ZONES; i++) { - int count = SWAP_CLUSTER_MAX; - zone = pgdat->node_zones + i; - do { - if (tsk->need_resched) - schedule(); + int count = SWAP_CLUSTER_MAX; + zone = pgdat->node_zones + i; if ((!zone->size) || (!zone->zone_wake_kswapd)) continue; - do_try_to_free_pages(GFP_KSWAPD, zone); - } while (zone->free_pages < zone->pages_low && + do { + if (tsk->need_resched) + schedule(); + do_try_to_free_pages(GFP_KSWAPD, zone); + } while (zone->free_pages < zone->pages_low && --count); } pgdat = pgdat->node_next;

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sun May 07 2000 - 21:00:12 EST