igb: Add MSI-X support
- As many RX rings will be enabled, if they are allowed by the number of
available MSI-X vectors and number of CPUs.
- RX MSI-X vectors could be grouped to specific CPU set. However, the
first CPU of the CPU set must be aligned on RX MSI-X vector count; by
default RX MSI-X vectors are grouped according to the device's software
unit number. Tunable hw.igbX.msix.rxoff could be used to regroup RX
MSI-X vector to a specific set of CPUs.
- TX ring uses seperate MSI-X if possible. TX MSI-X vector could be bound
to a specific CPU; bydefault TX MSI-X vectors is bound to the CPU based
on the device's software unit number. Tunable hw.igbX.msix.txoff could
be used to bind TX MSI-X to a specific CPU.
- Per MSI-X vector interrupt moderation sysctl hw.igbX.msiY_rate is added.
The default interrupt rate for TX is 4000, which is enough to generate
1.48Mpps small packets. The default interrupt rate for RX is 6000.
- MSI-X must not be enabled on 82575 according to the specification update
from Intel.