We tune the number of queues for ixgbe and igb based on mp_ncpus using a kernel module.
The problem we have is that both drivers fetch the value via TUNABLE_INT() in driver global context.
Unfortunately this causes the tunable to be fetched at SI_SUB_TUNABLES which is one of the first SYSINITs run, this is BEFORE SI_SUB_CPU which is what sets mp_ncpus.
This fix causes the value for number of queues to be read at driver attach time.
In addition each device will check for "hw.igb.%d.num_queues" for each interface to set the number of queues for the NIC allowing each NIC to have different queue count.