Re: [RFC][PATCH 4/5] memory_pressure_notify() caller

From: Daniel Spång
Date: Fri Jan 18 2008 - 05:24:38 EST


On 1/17/08, KOSAKI Motohiro <kosaki.motohiro@xxxxxxxxxxxxxx> wrote:
> Hi Daniel
>
> > > Thank you for good point out!
> > > Could you please post your test program and reproduced method?
> >
> > Sure:
> >
> > 1. Fill almost all available memory with page cache in a system without swap.
> > 2. Run attached alloc-test program.
> > 3. Notification fires when page cache is reclaimed.
>
> Unfortunately, I can't reproduce it.
>
> my machine
> CPU: Pentium4 2.8GHz with HT
> memory: 512M
>
>
> 1. I doubt ZONE_DMA, please shipment ignore zone_dma patch(below).
> 2. Could you please send your .config and /etc/sysctl.conf?
> I hope more reproduce challenge.
>
> thanks.
>
> - kosaki
>
>
>
>
> Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@xxxxxxxxxxxxxx>
>
> ---
> include/linux/mem_notify.h | 3 +++
> mm/page_alloc.c | 6 +++++-
> 2 files changed, 8 insertions(+), 1 deletion(-)
>
> Index: linux-2.6.24-rc6-mm1-memnotify/include/linux/mem_notify.h
> ===================================================================
> --- linux-2.6.24-rc6-mm1-memnotify.orig/include/linux/mem_notify.h
> 2008-01-16 21:31:09.000000000 +0900
> +++ linux-2.6.24-rc6-mm1-memnotify/include/linux/mem_notify.h
> 2008-01-16 21:34:24.000000000 +0900
> @@ -22,6 +22,9 @@ static inline void memory_pressure_notif
> unsigned long target;
> unsigned long pages_high, pages_free, pages_reserve;
>
> + if (unlikely(zone->mem_notify_status == -1))
> + return;
> +
> if (pressure) {
> target = atomic_long_read(&last_mem_notify) + MEM_NOTIFY_FREQ;
> if (likely(time_before(jiffies, target)))
> Index: linux-2.6.24-rc6-mm1-memnotify/mm/page_alloc.c
> ===================================================================
> --- linux-2.6.24-rc6-mm1-memnotify.orig/mm/page_alloc.c 2008-01-13
> 19:50:27.000000000 +0900
> +++ linux-2.6.24-rc6-mm1-memnotify/mm/page_alloc.c 2008-01-16
> 21:41:58.000000000 +0900
> @@ -3467,7 +3467,11 @@ static void __meminit free_area_init_cor
> zone->zone_pgdat = pgdat;
>
> zone->prev_priority = DEF_PRIORITY;
> - zone->mem_notify_status = 0;
> +
> + if (zone->present_pages < (pgdat->node_present_pages / 10))
> + zone->mem_notify_status = -1;
> + else
> + zone->mem_notify_status = 0;
>
> zone_pcp_init(zone);
> INIT_LIST_HEAD(&zone->active_list);

Your patch above solves the problem I had with early notification.

Cheers,
Daniel
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/