Re: Memory pressure handling with iSCSI

From: Andrew Morton
Date: Tue Jul 26 2005 - 20:28:58 EST


"Martin J. Bligh" <mbligh@xxxxxxxxxx> wrote:
>
>
> > It happens here, a bit. My machine goes up to 60% dirty when it should be
> > clamping at 40%.
> >
> > The variable `total_pages' in page-writeback.c (from
> > nr_free_pagecache_pages()) is too high. I trace it back to here:
> >
> > On node 0 totalpages: 1572864
> > DMA zone: 4096 pages, LIFO batch:1
> > Normal zone: 1568768 pages, LIFO batch:31
> > HighMem zone: 0 pages, LIFO batch:1
> >
> > This machine only has 4G of memory, so the platform code is overestimating
> > the number of pages by 50%. Can you please check your dmesg, see if your
> > system is also getting this wrong?
>
> I think we're repeatedly iterating over the same zones by walking the
> zonelists:
>
> static unsigned int nr_free_zone_pages(int offset)
> {
> pg_data_t *pgdat;
> unsigned int sum = 0;
> int i;
>
> for_each_pgdat(pgdat) {
> struct zone *zone;
>
> for (i = 0; i < MAX_NR_ZONES; i++) {
> unsigned long size, high;
>
> zone = pgdat->node_zones[i];
> size = zone->present_pages;
> high = zone->pages_high;
>
> if (size > high)
> sum += size - high;
> }
> }
> }

I don't think so. We're getting the wrong answer out of
calculate_zone_totalpages() which is an init-time thing.

Maybe nr_free_zone_pages() is supposed to fix that up post-facto somehow,
but calculate_zone_totalpages() sure as heck shouldn't be putting 1568768
into my ZONE_NORMAL's ->node_present_pages.

-
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/