2004-06-27 05:32:12

by Anton Blanchard

[permalink] [raw]
Subject: [PATCH] __alloc_bootmem_node should not panic when it fails


__alloc_bootmem_node currently panics if it cant satisfy an allocation
for a particular node. Thats rather antisocial, we should at the very
least return NULL and allow the caller to proceed (eg try another node).

A quick look at alloc_bootmem_node usage suggests we should fall back to
allocating from other nodes if it fails (as arch/alpha/kernel/pci_iommu.c
and arch/x86_64/kernel/setup64.c do).

The following patch does that. We fall back to the regular
__alloc_bootmem when __alloc_bootmem_node fails, which means all other
nodes are checked for available memory.

Signed-off-by: Anton Blanchard <[email protected]>

diff -puN mm/bootmem.c~debugit mm/bootmem.c
--- gr_work/mm/bootmem.c~debugit 2004-06-06 21:49:20.729826223 -0500
+++ gr_work-anton/mm/bootmem.c 2004-06-06 22:07:16.840243987 -0500
@@ -371,11 +371,6 @@ void * __init __alloc_bootmem_node (pg_d
if (ptr)
return (ptr);

- /*
- * Whoops, we cannot satisfy the allocation request.
- */
- printk(KERN_ALERT "bootmem alloc of %lu bytes failed!\n", size);
- panic("Out of memory");
- return NULL;
+ return __alloc_bootmem(size, align, goal);
}


_


2004-06-27 16:12:27

by Ingo Oeser

[permalink] [raw]
Subject: Re: [PATCH] __alloc_bootmem_node should not panic when it fails

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Sunday 27 June 2004 07:27, Anton Blanchard wrote:
> The following patch does that. We fall back to the regular
> __alloc_bootmem when __alloc_bootmem_node fails, which means all other
> nodes are checked for available memory.

But allocating from other nodes has performance implications, which
might be quite big, depending on the specific architecture. So you
should at least print an KERN_INFO or even KERN_WARNING message,
if this happens.

> Signed-off-by: Anton Blanchard <[email protected]>
>
> diff -puN mm/bootmem.c~debugit mm/bootmem.c
> --- gr_work/mm/bootmem.c~debugit 2004-06-06 21:49:20.729826223 -0500
> +++ gr_work-anton/mm/bootmem.c 2004-06-06 22:07:16.840243987 -0500
> @@ -371,11 +371,6 @@ void * __init __alloc_bootmem_node (pg_d
> if (ptr)
> return (ptr);
>
> - /*
> - * Whoops, we cannot satisfy the allocation request.
> - */
> - printk(KERN_ALERT "bootmem alloc of %lu bytes failed!\n", size);
Maybe changing this message to:
printk(KERN_WARNING "Failed to alloc %lu bytes from local node.\n"
" Allocating from distant node instead. Performance may drop!\n", size);

> - panic("Out of memory");
> - return NULL;
> + return __alloc_bootmem(size, align, goal);
> }

So now the user knows what is going on and that this node might need
more memory ;-)

Regards

Ingo Oeser

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD8DBQFA3mjOU56oYWuOrkARAuQGAJ9lasSDYLgMDzAGnGYxnH4OpSHXNQCg0uy3
12GFsxYaaptUIZkYHYUw9Is=
=1ydw
-----END PGP SIGNATURE-----

2004-06-27 22:34:08

by Anton Blanchard

[permalink] [raw]
Subject: Re: [PATCH] __alloc_bootmem_node should not panic when it fails


> But allocating from other nodes has performance implications, which
> might be quite big, depending on the specific architecture. So you
> should at least print an KERN_INFO or even KERN_WARNING message,
> if this happens.

...

> So now the user knows what is going on and that this node might need
> more memory ;-)

Unfortunately nodes without memory is relatively common on ppc64, and I
believe x86-64. From a ppc64 perspective Im fine with best effort, perhaps
someone from the heavily NUMA camp (ia64?) could comment.

Anton

2004-06-28 06:29:37

by Chris Wedgwood

[permalink] [raw]
Subject: Re: [PATCH] __alloc_bootmem_node should not panic when it fails

On Mon, Jun 28, 2004 at 08:28:03AM +1000, Anton Blanchard wrote:

> Unfortunately nodes without memory is relatively common on ppc64,
> and I believe x86-64. From a ppc64 perspective Im fine with best
> effort, perhaps someone from the heavily NUMA camp (ia64?) could
> comment.

Does anyone make ia64 NUMA hardware where you can have memory-less
nodes?


--cw

2004-06-28 11:58:57

by Robert Picco

[permalink] [raw]
Subject: Re: [PATCH] __alloc_bootmem_node should not panic when it fails

Chris Wedgwood wrote:

>On Mon, Jun 28, 2004 at 08:28:03AM +1000, Anton Blanchard wrote:
>
>
>
>>Unfortunately nodes without memory is relatively common on ppc64,
>>and I believe x86-64. From a ppc64 perspective Im fine with best
>>effort, perhaps someone from the heavily NUMA camp (ia64?) could
>>comment.
>>
>>
>
>Does anyone make ia64 NUMA hardware where you can have memory-less
>nodes?
>
>
> --cw
>
>
>
HP ships IA64 NUMA hardware where the default memory configuration is
memory-less. There are N-1 cpu-nodes and 1 memory node.

Bob

2004-06-28 18:26:27

by Martin Hicks

[permalink] [raw]
Subject: Re: [PATCH] __alloc_bootmem_node should not panic when it fails



On Sun, Jun 27, 2004 at 11:29:12PM -0700, Chris Wedgwood wrote:
> On Mon, Jun 28, 2004 at 08:28:03AM +1000, Anton Blanchard wrote:
>
> > Unfortunately nodes without memory is relatively common on ppc64,
> > and I believe x86-64. From a ppc64 perspective Im fine with best
> > effort, perhaps someone from the heavily NUMA camp (ia64?) could
> > comment.
>
> Does anyone make ia64 NUMA hardware where you can have memory-less
> nodes?

Altix SN2 can have memoryless nodes

mh

--
Martin Hicks Wild Open Source Inc.
[email protected] 613-266-2296