Re: [PATCH] vmscan: skip freeing memory from zones with lots free

Rik van Riel
2008-12-08T20:25:10Z

KOSAKI Motohiro wrote:

> + for (o = order; o < MAX_ORDER; o++) {
> + if (z->free_area[o].nr_free)
> + return 1;

Since page breakup and coalescing always manipulates .nr_free,
I wonder if it would make sense to pack the nr_free variables
in their own cache line(s), so we have fewer cache misses when
going through zone_watermark_ok() ?

That would end up looking something like this:

(whitespace mangled because it doesn't make sense to apply
just this thing, anyway)

Index: linux-2.6.28-rc7/include/linux/mmzone.h
===================================================================
--- linux-2.6.28-rc7.orig/include/linux/mmzone.h 2008-12-02
15:04:33.000000000 -0500
+++ linux-2.6.28-rc7/include/linux/mmzone.h 2008-12-08
15:24:25.000000000 -0500
@@ -58,7 +58,6 @@ static inline int get_pageblock_migratet

struct free_area {
struct list_head free_list[MIGRATE_TYPES];
- unsigned long nr_free;
};

struct pglist_data;
@@ -296,6 +295,7 @@ struct zone {
seqlock_t span_seqlock;
#endif
struct free_area free_area[MAX_ORDER];
+ struct nr_free [MAX_ORDER];

#ifndef CONFIG_SPARSEMEM
/*

--
All rights reversed.