On Tuesday, April 24, 2012 8:11:07 pm Sean Bruno wrote:
> http://people.freebsd.org/~sbruno/if_igb.c.txt
> 
> Scenario I've just seen:
> 
> 8 core machine
> 2 igb(4) interfaces
> set num_queues=4
> 
> igb0:0 --> cpu0
> igb0:1 --> cpu1
> igb0:2 --> cpu2
> igb0:3 --> cpu3
> 
> igb1:0 --> cpu0
> igb1:1 --> cpu1
> igb1:2 --> cpu2
> igb1:3 --> cpu3
> 
> I suspect, that we need a static global to keep track of what cpu last
> was last bound to a queue.  My patch does do this, but I don't know if
> its the right thing.
> 
> Since I'm doing multiple interfaces, I need to make sure I don't
> schedule a queue to a non existent cpu, so take a modulo of the counter
> and the number of cpus in the box.  
> 
> Perhaps not the most elegant solution, but its a thing?

CPU IDs are not guaranteed to be dense.  However, you can use CPU_FIRST() and 
CPU_NEXT() with your static global instead.

OTOH, if igb were to just leave the interrupts alone instead of binding them 
by hand, they would get round-robin assigned among available cores already.  I 
think in this case the best approach might be to add a tunable to disable 
igb's manual binding and instead let the default system round-robin be 
preserved.

-- 
John Baldwin
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to