NAME
igb
—
Intel(R) PRO/1000 PCI Express Gigabit
Ethernet adapter driver
SYNOPSIS
To compile this driver into the kernel, place the following line in your kernel configuration file:
device ig_hal
device igb
Alternatively, to load the driver as a module at boot time, place the following line in loader.conf(5):
ig_hal_load="YES" if_igb_load="YES"
DESCRIPTION
The igb
driver provides support for PCI
Express Gigabit Ethernet adapters based on the Intel 82575, 82576, 82580,
I210, I211, I350 and I354 Ethernet controller chips. The
igb
driver supports:
- Transmit/Receive checksum offload for IP/UDP/TCP.
- Interrupt moderation
- TCP segmentation offload (TSO)
- Receive side scaling (RSS)
- Multiple tranmission queues
- Multiple vector MSI-X
- VLAN tag stripping and inserting
If
polling(4) or MSI-X is used, by default, the
igb
driver will try enabling as many reception
queues and transmission queues as are allowed by the number of CPUs in the
system.
If multiple transmission queues are used, the round-robin arbitration is performed among the transmission queues. It should be noted that if both TSO and multiple transmission queues are used, for 82575, the round-robin arbitration between transmission queues is done at the TSO packet boundary; for the reset of the hardware, the round-robin arbitration between transmission queues is done at the TCP segment boundary after the hardware segmentation is performed.
82575 supports 4 reception queues and 4 transmission queues. MSI-X is not enabled due to hardware errata. Under MSI or legacy interrupt mode, 2 reception queues are enabled for hardware RSS hash and only 1 transmission queue is enable.
82576 supports 16 reception queues and 16 transmission queues. MSI-X is enable by default. However, due to the number of MSI-X vectors is 10, at most 8 reception queues and 8 transmission queues will be enabled under MSI-X mode. When polling(4) is enabled on the devices, at most 16 reception queues and 16 transmission queues will be enabled.
82580, I350 and I354 support 8 reception queues and 8 transmission queues. MSI-X is enabled by default.
I210 supports 4 reception queues and 4 transmission queues. MSI-X is enabled by default.
I211 supports 2 reception queues and 2 transmission queues. MSI-X is enabled by default.
The igb
driver supports the following
media types:
autoselect
- Enables auto-negotiation for speed and duplex.
10baseT/UTP
- Sets 10Mbps operation. Use the
mediaopt
option to selectfull-duplex
mode. 100baseTX
- Sets 100Mbps operation. Use the
mediaopt
option to selectfull-duplex
mode. 1000baseSX
- Sets 1000Mbps operation. Only
full-duplex
mode is supported at this speed. 1000baseT
- Sets 1000Mbps operation. Only
full-duplex
mode is supported at this speed.
The igb
driver supports the following
media options:
full-duplex
- Forces full-duplex operation
half-duplex
- Forces half-duplex operation.
rxpause
- Enable flow control PAUSE reception. This is only supported by
autoselect
andfull-duplex
mode. txpause
- Enable flow control PAUSE transmission. This is only supported by
autoselect
andfull-duplex
mode. forcepause
- Force flow control PAUSE operation as configured by
rxpause
andtxpause
media options.
Only use mediaopt
to set the driver to
full-duplex
. If mediaopt
is
not specified, the driver defaults to
half-duplex
.
For more information on configuring this device, see
ifconfig(8). The igb
driver supports
polling(4).
HARDWARE
The igb
driver supports Gigabit Ethernet
adapters based on the Intel 82575, 82576, 82580, I210, I211, I350 and I354
controller chips:
- Intel 82575EB Gigabit Ethernet Controller
- Intel 82576EB Gigabit Ethernet Controller
- Intel 82576NS Gigabit Ethernet Controller
- Intel 82580EB Gigabit Ethernet Controller
- Intel Ethernet Controller I350-AM2
- Intel Ethernet Controller I350-AM4
- Intel Ethernet Controller I350-BT2
- Intel Ethernet Controller I210-AS
- Intel Ethernet Controller I210-AT
- Intel Ethernet Controller I210-CS
- Intel Ethernet Controller I210-IS
- Intel Ethernet Controller I210-IT
- Intel Ethernet Controller I211-AT
- Intel Ethernet Server Adapter I210-T1
- Intel Ethernet Server Adapter I340-F4
- Intel Ethernet Server Adapter I340-T4
- Intel Ethernet Server Adapter I350-F2
- Intel Ethernet Server Adapter I350-F4
- Intel Ethernet Server Adapter I350-T2
- Intel Ethernet Server Adapter I350-T4
- Intel Gigabit EF Dual Port Server Adapter
- Intel Gigabit ET Dual Port Server Adapter
- Intel Gigabit ET Quad Port Server Adapter
- Intel Gigabit ET2 Quad Port Server Adapter
- Intel Gigabit VT Quad Port Server Adapter
TUNABLES
Tunables can be set at the loader(8) prompt before booting the kernel or stored in loader.conf(5). X is the device unit number.
- hw.igb.rxd hw.igbX.rxd
- Number of receive descriptors allocated by the driver. The default value is 512. The minimum is 256, and the maximum is 4096.
- hw.igb.txd hw.igbX.txd
- Number of transmit descriptors allocated by the driver. The default value is 1024. The minimum is 256, and the maximum is 4096.
- hw.igb.rxr hw.igbX.rxr
- This tunable specifies the number of reception queues could be enabled. Maximum allowed value for these tunables is device specific and it must be power of 2 aligned. Setting these tunables to 0 allows the driver to make as many reception queues ready-for-use as allowed by the number of CPUs.
- hw.igb.txr hw.igbX.txr
- This tunable specifies the number of transmission queues could be enabled. Maximum allowed value for these tunables is device specific and it must be power of 2 aligned. Setting these tunables to 0 allows the driver to make as many transmission queues ready-for-use as allowed by the number of CPUs.
- hw.igb.msix.enable hw.igbX.msix.enable
- By default, the driver will use MSI-X if it is supported. This behaviour can be turned off by setting this tunable to 0.
- hw.igb.msi.enable hw.igbX.msi.enable
- If MSI-X is disabled and MSI is supported, the driver will use MSI. This behavior can be turned off by setting this tunable to 0.
- hw.igbX.msi.cpu
- If MSI is used, it specifies the MSI's target CPU.
- If legacy interrupt is used, by default, the driver assumes the interrupt could be shared. Setting this tunable to 1 allows the driver to perform certain optimization based on the knowledge that the interrupt is not shared.
- hw.igb.flow_ctrl hw.igbX.flow_ctrl
- The default flow control settings. Supported values are: rxpause (only enable PAUSE reception), txpause (only enable PAUSE transmission), full (enable PAUSE reception and transmission), none (disable flow control PAUSE operation), force-rxpause (force PAUSE reception), force-txpause (force PAUSE transmission), force-full (forcefully enable PAUSE reception and transmission), force-none (forcefully disable flow control PAUSE operation). Default is none.
MIB Variables
A number of per-interface variables are implemented in the dev.igb.X branch of the sysctl(3) MIB.
- rxr
- Number of reception queues could be enabled (read-only). Use the tunable hw.igb.rxr or hw.igbX.rxr to configure it.
- rxr_inuse
- Number of reception queues being used (read-only).
- txr
- Number of transmission queues could be enabled (read-only). Use the tunable hw.igb.txr or hw.igbX.txr to configure it.
- txr_inuse
- Number of transmission queues being used (read-only).
- rxd
- Number of descriptors per reception queue (read-only). Use the tunable hw.igb.rxd or hw.igbX.rxd to configure it.
- txd
- Number of descriptors per transmission queue (read-only). Use the tunable hw.igb.txd or hw.igbX.txd to configure it.
- rxtx_intr_rate
- If MSI or legacy interrupt is used, this sysctl controls the highest possible frequency that interrupt could be generated by the device. If MSI-X is used, this sysctl controls the highest possible frequency that interrupt could be generated by the MSI-X vectors, which aggregate transmission queue and reception queue procecssing. It is 6000 by default (~150us).
- rx_intr_rate
- If MSI-X is used, this sysctl controls the highest possible frequency that interrupt could be generated by the MSI-X vectors, which only process reception queue. It is 6000 by default (~150us).
- tx_intr_rate
- If MSI-X is used, this sysctl controls the highest possible frequency that interrupt could be generated by the MSI-X vectors, which only process transmission queue. It is 4000 by default (250us).
- sts_intr_rate
- If MSI-X is used, this sysctl controls the highest possible frequency that interrupt could be generated by the MSI-X vectors, which only process chip status changes. It is 6000 by default (~150us).
- tx_intr_nsegs
- Transmission interrupt is asked to be generated upon every tx_intr_nsegs transmission descritors having been setup. The default value is 1/16 of the number of transmission descriptors per queue.
- tx_wreg_nsegs
- The number of transmission descriptors should be setup before the hardware register is written. Setting this value too high will have negative effect on transmission timeliness. Setting this value too low will hurt overall transmission performance due to the frequent hardware register writing. The default value is 8.
- rx_wreg_nsegs
- The number of reception descriptors should be setup before the hardware register is written. Setting this value too high will make device drop incoming packets. Setting this value too low will hurt overall reception performance due to the frequent hardware register writing. The default value is 32.
SEE ALSO
altq(4), arp(4), ifmedia(4), netintro(4), ng_ether(4), polling(4), vlan(4), ifconfig(8)
HISTORY
The igb
device driver first appeared in
FreeBSD 7.1.
AUTHORS
The igb
driver was written by
Intel Corporation
<freebsdnic@mailbox.intel.com>.