linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* false NUMA OOM
@ 2002-09-17  2:50 William Lee Irwin III
  2002-09-17  3:17 ` Andrew Morton
  0 siblings, 1 reply; 3+ messages in thread
From: William Lee Irwin III @ 2002-09-17  2:50 UTC (permalink / raw)
  To: linux-mm; +Cc: linux-kernel, akpm

Well, there's an obvious problem. shrink_caches() hammers out_of_memory()
when it has only looked at a single node. Something like this might help.

Totally untested. Problem discovered during 2 simultaneous dbench 512's
on separate 12GB tmpfs fs's on a 32x NUMA-Q with 32GB of RAM.

Against 2.5.35.


Bill


--- mm/vmscan.c.orig	2002-09-16 19:02:11.000000000 -0700
+++ mm/vmscan.c	2002-09-16 19:07:50.000000000 -0700
@@ -519,18 +519,24 @@
 shrink_caches(struct zone *classzone, int priority,
 		int gfp_mask, int nr_pages)
 {
+	pg_data_t *pgdat;
 	struct zone *first_classzone;
 	struct zone *zone;
+	int type;
 
 	first_classzone = classzone->zone_pgdat->node_zones;
-	zone = classzone;
-	while (zone >= first_classzone && nr_pages > 0) {
-		if (zone->free_pages <= zone->pages_high) {
-			nr_pages = shrink_zone(zone, priority,
-					gfp_mask, nr_pages);
+	for (type = classzone - first_classzone; type >= 0; --type)
+		for_each_pgdat(pgdat) {
+			zone = pgdat->node_zones + type;
+			if (!zone->size)
+				continue;
+			if (zone->free_pages <= zone->pages_high)
+				nr_pages = shrink_zone(zone, priority,
+							gfp_mask, nr_pages);
+			if (nr_pages <= 0)
+				return nr_pages;
 		}
-		zone--;
-	}
+
 	return nr_pages;
 }
 
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: false NUMA OOM
  2002-09-17  2:50 false NUMA OOM William Lee Irwin III
@ 2002-09-17  3:17 ` Andrew Morton
  2002-09-17  3:29   ` William Lee Irwin III
  0 siblings, 1 reply; 3+ messages in thread
From: Andrew Morton @ 2002-09-17  3:17 UTC (permalink / raw)
  To: William Lee Irwin III; +Cc: linux-mm, linux-kernel, akpm

William Lee Irwin III wrote:
> 
> ...
> +       for (type = classzone - first_classzone; type >= 0; --type)
> +               for_each_pgdat(pgdat) {
> +                       zone = pgdat->node_zones + type;

Well you'd want to start with (and prefer) the local node's zones?

I'm also wondering whether one shouldn't just poke a remote kswapd
and wait.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: false NUMA OOM
  2002-09-17  3:17 ` Andrew Morton
@ 2002-09-17  3:29   ` William Lee Irwin III
  0 siblings, 0 replies; 3+ messages in thread
From: William Lee Irwin III @ 2002-09-17  3:29 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-mm, linux-kernel, akpm

William Lee Irwin III wrote:
+       for (type = classzone - first_classzone; type >= 0; --type)
+               for_each_pgdat(pgdat) {
+                       zone = pgdat->node_zones + type;

On Mon, Sep 16, 2002 at 08:17:03PM -0700, Andrew Morton wrote:
> Well you'd want to start with (and prefer) the local node's zones?
> I'm also wondering whether one shouldn't just poke a remote kswapd
> and wait.

I just sort of rearranged what was already there so it wouldn't die
quite so blatantly (i.e. minimal fix). Those are also sound methods.


Cheers,
Bill
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2002-09-17  3:29 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-09-17  2:50 false NUMA OOM William Lee Irwin III
2002-09-17  3:17 ` Andrew Morton
2002-09-17  3:29   ` William Lee Irwin III

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox