Re: [patch 3/9] mempool - Make mempools NUMA aware

From: Matthew Dobson
Date: Thu Jan 26 2006 - 19:32:51 EST


Christoph Lameter wrote:
> On Thu, 26 Jan 2006, Matthew Dobson wrote:
>
>
>>Allocations backed by a mempool must always be allocated via
>>mempool_alloc() (or mempool_alloc_node() in this case). What that means
>>is, without a mempool_alloc_node() function, NO mempool backed allocations
>>will be able to request a specific node, even when the system has PLENTY of
>>memory! This, IMO, is unacceptable. Adding more NUMA-awareness to the
>>mempool system allows us to keep the same slab behavior as before, as well
>>as leaving us free to ignore the node requests when memory is low.
>
>
> Ok. That makes sense. I thought the mempool_xxx functions were only for
> emergencies. But nevertheless you still duplicate all memory allocation
> functions. I already was a bit concerned when I added the _node stuff.

I'm glad we're on the same page now. :) And yes, adding four "duplicate"
*_mempool allocators was not my first choice, but I couldn't easily see a
better way.


> What may be better is to add some kind of "allocation policy" to an
> allocation. That allocation policy could require the allocation on a node,
> distribution over a series of nodes, require allocation on a particular
> node, or allow the use of emergency pools etc.
>
> Maybe unify all the different page allocations to one call and do the
> same with the slab allocator.

Hmmm... I kinda like that. Some sort of

struct allocation_policy
{
enum policy_type;
nodemask_t nodes;
mempool_t critical_pool;
}

that could be passed to __alloc_pages()?

That seems a bit beyond the scope of what I'd hoped for this patch series,
but if an approach like this is believed to be generally useful, it's
something I'm more than willing to work on...

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