attached is my draft proposal for numa support: - batching for the return of objects - the magazine layer as in Bonwicks paper is really missing: it would be great to pass filled cpu arrays around between nodes, to reduce the amount of list operations. - global spinlock - I want to get some stats first: the batch return is more efficient with a global spinlocks (1 global spinlock, instead of (number_of_nodes-1) spinlocks from remote nodes), batch alloc is more efficient with a per-node spinlock (one local spinlock instead of one global spinlock). Questions: - What should happen if a node has no memory? Right now, all memory would be considered as foreign. - What should happen if get_free_pages() returns memory from another node? Right now, the code corrupts the object counters. - is it possible implement ptr_to_nodeid() on all archs efficiently? It will happen for every kfree(). The patch contains some code duplication, it's possible to merge some parts of the cpuarray initialization. What do you think? The patch boots on uniprocessor, with NUMA simulated [replace node==cur_node with !=, etc], but is not yet really tested. -- Manfred