Re: [PATCH 1/1] network memory allocator.
From: Evgeniy Polyakov <hidden>
Date: 2006-08-16 12:03:55
Also in:
linux-mm, lkml
On Wed, Aug 16, 2006 at 01:27:02PM +0200, Arnd Bergmann (arnd@arndb.de) wrote:
On Wednesday 16 August 2006 11:00, Evgeniy Polyakov wrote:quoted
There is drawback here - if data was allocated on CPU wheere NIC is "closer" and then processed on different CPU it will cost more than in case where buffer was allocated on CPU where it will be processed. But from other point of view, most of the adapters preallocate set of skbs, and with msi-x help there will be a possibility to bind irq and processing to the CPU where data was origianlly allocated. So I would like to know how to determine which node should be used for allocation. Changes of __get_user_pages() to alloc_pages_node() are trivial.There are two separate memory areas here: Your own metadata used by the allocator and the memory used for skb data. avl_node_array[cpu] and avl_container_array[cpu] are only designed to be accessed only by the local cpu, so these should be done like avl_node_array[cpu] = kmalloc_node(AVL_NODE_PAGES * sizeof(void *), GFP_KERNEL, cpu_to_node(cpu)); or you could make the whole array DEFINE_PER_CPU(void *, which would waste some space in the kernel object file. Now for the actual pages you get with __get_free_pages(), doing the same (alloc_pages_node), will help accessing your avl_container members, but may not be the best solution for getting the data next to the network adapter.
I can create it with numa_node_id() right now and later, if there will exsist some helper to match netdev->node, it can be used instead.
Arnd <><
-- Evgeniy Polyakov