[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <48B2FE79.8060709@sgi.com>
Date: Mon, 25 Aug 2008 11:48:25 -0700
From: Mike Travis <travis@....com>
To: KOSAKI Motohiro <kosaki.motohiro@...fujitsu.com>
CC: Peter Zijlstra <peterz@...radead.org>,
Andrew Morton <akpm@...ux-foundation.org>,
David Miller <davem@...emloft.net>,
linux-kernel@...r.kernel.org, linux-mm@...ck.org,
cl@...ux-foundation.org, tokunaga.keiich@...fujitsu.com
Subject: Re: [RFC][PATCH 2/2] quicklist shouldn't be proportional to # of
CPUs
KOSAKI Motohiro wrote:
> Hi Peter,
>
> Thank you good point out!
>
>>> @@ -41,8 +41,8 @@ static unsigned long max_pages(unsigned
>>>
>>> max = node_free_pages / FRACTION_OF_NODE_MEM;
>>>
>>> - num_cpus_per_node = cpus_weight_nr(node_to_cpumask(node));
>>> - max /= num_cpus_per_node;
>>> + node_cpumask = node_to_cpumask(node);
>>> + max /= cpus_weight_nr(node_cpumask);
>>>
>>> return max(max, min_pages);
>>> }
>> humm, I thought we wanted to keep cpumask_t stuff away from our stack -
>> since on insanely large SGI boxen (/me looks at mike) the thing becomes
>> 512 bytes.
>
> Hm, interesting.
> I think following patch fill your point, right?
>
> but I worry about it works on sparc64...
>
>
> Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@...fujitsu.com>
>
> ---
> mm/quicklist.c | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
> Index: b/mm/quicklist.c
> ===================================================================
> --- a/mm/quicklist.c
> +++ b/mm/quicklist.c
> @@ -26,7 +26,10 @@ DEFINE_PER_CPU(struct quicklist, quickli
> static unsigned long max_pages(unsigned long min_pages)
> {
> unsigned long node_free_pages, max;
> - struct zone *zones = NODE_DATA(numa_node_id())->node_zones;
> + int node = numa_node_id();
> + struct zone *zones = NODE_DATA(node)->node_zones;
> + int num_cpus_on_node;
> + node_to_cpumask_ptr(cpumask_on_node, node);
>
> node_free_pages =
> #ifdef CONFIG_ZONE_DMA
> @@ -38,6 +41,10 @@ static unsigned long max_pages(unsigned
> zone_page_state(&zones[ZONE_NORMAL], NR_FREE_PAGES);
>
> max = node_free_pages / FRACTION_OF_NODE_MEM;
> +
> + num_cpus_on_node = cpus_weight_nr(*cpumask_on_node);
> + max /= num_cpus_on_node;
> +
> return max(max, min_pages);
> }
>
>
Exactly! And (many thanks to them!) the sparc maintainers have
implemented a similar internal function definition for node_to_cpumask_ptr().
Mike
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists