Subject: Re: [net-next 02/11] igb: Use node specific allocations for the q_vectors and rings

From: Alexander Duyck <[email-masked]>
Date: Mon, 10 Oct 2011 09:25:05 -0700

On 10/09/2011 11:08 AM, Andi Kleen wrote:
> Jeff Kirsher <[email-masked]> writes:
>>  
>>  	for (i = 0; i < adapter->num_tx_queues; i++) {
>> -		ring = kzalloc(sizeof(struct igb_ring), GFP_KERNEL);
>> +		if (orig_node == -1) {
>> +			int cur_node = next_online_node(adapter->node);
>> +			if (cur_node == MAX_NUMNODES)
>> +				cur_node = first_online_node;
> 
> RR seems quite arbitrary. Who guarantees those nodes have any
> relationship with the CPUs submitting on those queues? Or the node
> the device is on.
> 
> Anyways if it's a good idea probably need to add a
> dma_alloc_coherent_node() too
> 
> -Andi
> 

The RR configuration is somewhat arbitrary.  However it is still better
than dumping everyting on a single node, and it works with the
configuration when the rings numbers line up with the CPU numbers since
normally the CPUs are RR on the nodes.  From what I have seen it does
work quite well and it prevents almost all cross-node memory accesses
when running a routing workload.

I was thinking along the same lines for dma_alloc_coherent_node as well.
 I've been meaning to get to it but I just haven't had the time.  I'm
intentionally holding off on the ixgbe version of these patches until I
get the time to write up such a function.  At which time I was going to
write up a patch to convert igb over to it.

Thanks,

Alex