| Linux* Base Driver for the Intel(R) Ethernet 10 Gigabit PCI Express Family of |
| Adapters |
| ============================================================================= |
| |
| April 24, 2012 |
| |
| Contents |
| ======== |
| |
| - Important Note |
| - In This Release |
| - Identifying Your Adapter |
| - Building and Installation |
| - Command Line Parameters |
| - Additional Configurations |
| - Performance Tuning |
| - Known Issues/Troubleshooting |
| - Support |
| |
| IMPORTANT NOTE |
| ============== |
| |
| WARNING: The ixgbe driver compiles by default with the LRO (Large Receive |
| Offload) feature enabled. This option offers the lowest CPU utilization for |
| receives, but is completely incompatible with *routing/ip forwarding* and |
| *bridging*. If enabling ip forwarding or bridging is a requirement, it is |
| necessary to disable LRO using compile time options as noted in the LRO |
| section later in this document. The result of not disabling LRO when combined |
| with ip forwarding or bridging can be low throughput or even a kernel panic. |
| |
| In This Release |
| =============== |
| |
| This file describes the ixgbe Linux* Base Driver for the 10 Gigabit PCI |
| Express Family of Adapters. This driver supports the 2.6.x and 3.x kernels, |
| and includes support for any Linux supported system, including Itanium(R)2, |
| x86_64, i686, and PPC. |
| |
| This driver is only supported as a loadable module at this time. Intel is |
| not supplying patches against the kernel source to allow for static linking |
| of the driver. A version of the driver may already be included by your |
| distribution and/or the kernel.org kernel. For questions related to hardware |
| requirements, refer to the documentation supplied with your 10 Gigabit PCI |
| Express adapter. All hardware requirements listed apply to use with Linux. |
| |
| The following features are now available in supported kernels: |
| - Native VLANs |
| - Channel Bonding (teaming) |
| - SNMP |
| - Generic Receive Offload |
| - Data Center Bridging |
| |
| Channel Bonding documentation can be found in the Linux kernel source: |
| /Documentation/networking/bonding.txt |
| |
| Instructions on updating ethtool can be found in the section "Additional |
| Configurations" later in this document. |
| |
| Identifying Your Adapter |
| ======================== |
| |
| The driver in this release is compatible with 82598, 82599 and X540-based Intel |
| Ethernet Network Connections. |
| |
| For more information on how to identify your adapter, go to the Adapter & |
| Driver ID Guide at: |
| |
| http://support.intel.com/support/network/sb/CS-012904.htm |
| |
| For the latest Intel network drivers for Linux, refer to the following |
| website. Select the link for your adapter. |
| |
| http://support.intel.com/support/go/network/adapter/home.htm |
| |
| SFP+ Devices with Pluggable Optics |
| ---------------------------------- |
| |
| 82599-BASED ADAPTERS |
| |
| NOTES: If your 82599-based Intel(R) Network Adapter came with Intel optics, or |
| is an Intel(R) Ethernet Server Adapter X520-2, then it only supports Intel |
| optics and/or the direct attach cables listed below. |
| |
| When 82599-based SFP+ devices are connected back to back, they should be set to |
| the same Speed setting via ethtool. Results may vary if you mix speed settings. |
| |
| Supplier Type Part Numbers |
| |
| SR Modules |
| Intel DUAL RATE 1G/10G SFP+ SR (bailed) FTLX8571D3BCV-IT |
| Intel DUAL RATE 1G/10G SFP+ SR (bailed) AFBR-703SDZ-IN2 |
| Intel DUAL RATE 1G/10G SFP+ SR (bailed) AFBR-703SDDZ-IN1 |
| LR Modules |
| Intel DUAL RATE 1G/10G SFP+ LR (bailed) FTLX1471D3BCV-IT |
| Intel DUAL RATE 1G/10G SFP+ LR (bailed) AFCT-701SDZ-IN2 |
| Intel DUAL RATE 1G/10G SFP+ LR (bailed) AFCT-701SDDZ-IN1 |
| |
| The following is a list of 3rd party SFP+ modules that have received some |
| testing. Not all modules are applicable to all devices. |
| |
| Supplier Type Part Numbers |
| |
| Finisar SFP+ SR bailed, 10g single rate FTLX8571D3BCL |
| Avago SFP+ SR bailed, 10g single rate AFBR-700SDZ |
| Finisar SFP+ LR bailed, 10g single rate FTLX1471D3BCL |
| |
| Finisar DUAL RATE 1G/10G SFP+ SR (No Bail) FTLX8571D3QCV-IT |
| Avago DUAL RATE 1G/10G SFP+ SR (No Bail) AFBR-703SDZ-IN1 |
| Finisar DUAL RATE 1G/10G SFP+ LR (No Bail) FTLX1471D3QCV-IT |
| Avago DUAL RATE 1G/10G SFP+ LR (No Bail) AFCT-701SDZ-IN1 |
| Finisar 1000BASE-T SFP FCLF8522P2BTL |
| Avago 1000BASE-T SFP ABCU-5710RZ |
| |
| 82599-based adapters support all passive and active limiting direct attach |
| cables that comply with SFF-8431 v4.1 and SFF-8472 v10.4 specifications. |
| |
| Laser turns off for SFP+ when ifconfig ethX down |
| ------------------------------------------------ |
| "ifconfig ethX down" turns off the laser for 82599-based SFP+ fiber adapters. |
| "ifconfig ethX up" turns on the laser. |
| |
| |
| 82598-BASED ADAPTERS |
| |
| NOTES for 82598-Based Adapters: |
| - Intel(R) Ethernet Network Adapters that support removable optical modules |
| only support their original module type (i.e., the Intel(R) 10 Gigabit SR |
| Dual Port Express Module only supports SR optical modules). If you plug in |
| a different type of module, the driver will not load. |
| - Hot Swapping/hot plugging optical modules is not supported. |
| - Only single speed, 10 gigabit modules are supported. |
| - LAN on Motherboard (LOMs) may support DA, SR, or LR modules. Other module |
| types are not supported. Please see your system documentation for details. |
| |
| The following is a list of 3rd party SFP+ modules and direct attach cables that |
| have received some testing. Not all modules are applicable to all devices. |
| |
| Supplier Type Part Numbers |
| |
| Finisar SFP+ SR bailed, 10g single rate FTLX8571D3BCL |
| Avago SFP+ SR bailed, 10g single rate AFBR-700SDZ |
| Finisar SFP+ LR bailed, 10g single rate FTLX1471D3BCL |
| |
| 82598-based adapters support all passive direct attach cables that comply |
| with SFF-8431 v4.1 and SFF-8472 v10.4 specifications. Active direct attach |
| cables are not supported. |
| |
| Third party optic modules and cables referred to above are listed only for the |
| purpose of highlighting third party specifications and potential compatibility, |
| and are not recommendations or endorsements or sponsorship of any third party's |
| product by Intel. Intel is not endorsing or promoting products made by any |
| third party and the third party reference is provided only to share information |
| regarding certain optic modules and cables with the above specifications. There |
| may be other manufacturers or suppliers, producing or supplying optic modules |
| and cables with similar or matching descriptions. Customers must use their own |
| discretion and diligence to purchase optic modules and cables from any third |
| party of their choice. Customers are solely responsible for assessing the |
| suitability of the product and/or devices and for the selection of the vendor |
| for purchasing any product. INTEL ASSUMES NO LIABILITY WHATSOEVER, AND INTEL |
| DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY, RELATING TO SALE AND/OR USE OF |
| SUCH THIRD PARTY PRODUCTS OR SELECTION OF VENDOR BY CUSTOMERS. |
| |
| Building and Installation |
| ========================= |
| |
| To build a binary RPM* package of this driver, run 'rpmbuild -tb |
| <filename.tar.gz>'. Replace <filename.tar.gz> with the specific filename |
| of the driver. |
| |
| NOTE: For the build to work properly, the currently running kernel MUST match |
| the version and configuration of the installed kernel sources. If you |
| have just recompiled the kernel, reboot the system before building. |
| |
| RPM functionality has only been tested in Red Hat distributions. |
| |
| To manually build this driver: |
| |
| 1. Move the base driver tar file to the directory of your choice. For example, |
| use /home/username/ixgbe or /usr/local/src/ixgbe. |
| |
| 2. Untar/unzip archive: |
| |
| tar zxf ixgbe-x.x.x.tar.gz |
| |
| 3. Change to the driver src directory: |
| |
| cd ixgbe-x.x.x/src/ |
| |
| 4. Compile the driver module: |
| |
| make install |
| |
| The binary will be installed as: |
| |
| /lib/modules/[KERNEL_VERSION]/kernel/drivers/net/ixgbe/ixgbe.[k]o |
| |
| The install locations listed above are the default locations. They might |
| not be correct for certain Linux distributions. |
| |
| 5. Load the module: |
| For kernel 2.6.x, use the modprobe command: |
| modprobe ixgbe <parameter>=<value> |
| |
| Note that for 2.6 kernels the insmod command can be used if the full |
| path to the driver module is specified. For example: |
| |
| insmod /lib/modules/<KERNEL VERSION>/kernel/drivers/net/ixgbe/ixgbe.ko |
| |
| With 2.6 based kernels also make sure that older ixgbe drivers are |
| removed from the kernel, before loading the new module: |
| |
| rmmod ixgbe; modprobe ixgbe |
| |
| 6. Assign an IP address to the interface by entering the following, where |
| x is the interface number: |
| |
| ifconfig ethX <IP_address> netmask <netmask> |
| |
| 7. Verify that the interface works. Enter the following, where <IP_address> |
| is the IP address for another machine on the same subnet as the interface |
| that is being tested: |
| |
| ping <IP_address> |
| |
| To build ixgbe driver with DCA: |
| ------------------------------ |
| |
| If your kernel supports DCA, the driver will build by default with DCA enabled. |
| |
| Command Line Parameters |
| ======================= |
| |
| If the driver is built as a module, the following optional parameters are |
| used by entering them on the command line with the modprobe command using |
| this syntax: |
| |
| modprobe ixgbe [<option>=<VAL1>,<VAL2>,...] |
| |
| For example: |
| |
| modprobe ixgbe InterruptThrottleRate=16000,16000 |
| |
| The default value for each parameter is generally the recommended setting, |
| unless otherwise noted. |
| |
| RSS - Receive Side Scaling (or multiple queues for receives) |
| ------------------------------------------------------------ |
| Valid Range: 0 - 16 |
| 0 = Sets the descriptor queue count to whichever is less, number of CPUS or 16 |
| 1-16 = Sets the descriptor queue count to 1-16 |
| Default Value: 0 |
| RSS also effects the number of transmit queues allocated on 2.6.23 and |
| newer kernels with CONFIG_NETDEVICES_MULTIQUEUE set in the kernel .config file. |
| CONFIG_NETDEVICES_MULTIQUEUE only exists from 2.6.23 to 2.6.26. Other options |
| enable multiqueue in 2.6.27 and newer kernels. |
| |
| MQ - Multi Queue |
| ---------------- |
| Valid Range: 0, 1 |
| 0 = Disables Multiple Queue support |
| 1 = Enables Multiple Queue support (a prerequisite for RSS) |
| Default Value: 1 |
| |
| DCA - Direct Cache Access |
| ------------------------- |
| Valid Range: 0, 1 |
| 0 = Disables DCA support in the driver |
| 1 = Enables DCA support in the driver |
| Default Value: 1 (when IXGBE_DCA is enabled) |
| See the above instructions for enabling DCA. If the driver is enabled for |
| DCA this parameter allows load-time control of the feature. |
| |
| IntMode |
| ------------- |
| Valid Range: 0 - 2 (0 = Legacy Int, 1 = MSI and 2 = MSI-X) |
| Default Value: 2 |
| IntMode controls allow load time control over the type of interrupt |
| registered for by the driver. MSI-X is required for multiple queue |
| support, and some kernels and combinations of kernel .config options will |
| force a lower level of interrupt support. 'cat /proc/interrupts' will show |
| different values for each type of interrupt. |
| |
| InterruptThrottleRate |
| --------------------- |
| Valid Range: 956-488281 (0=off, 1=dynamic) |
| Default Value: 1 |
| Interrupt Throttle Rate (interrupts/sec) |
| The ITR parameter controls how many interrupts each interrupt vector can |
| generate per second. Increasing ITR lowers latency at the cost of increased |
| CPU utilization, though it may help throughput in some circumstances. |
| 1 = Dynamic mode attempts to moderate interrupts per vector while maintaining |
| very low latency. This can sometimes cause extra CPU utilization. If planning |
| on deploying ixgbe in a latency sensitive environment please consider this |
| parameter. |
| 0 = Setting InterruptThrottleRate to 0 turns off any interrupt moderation and |
| may improve small packet latency, but is generally not suitable for bulk |
| throughput traffic due to the increased cpu utilization of the higher interrupt |
| rate. Please note that on 82599 and X540-based adapters, disabling |
| InterruptThrottleRate will also result in the driver disabling HW RSC. On |
| 82598-based adapters, disabling InterruptThrottleRate will also result in |
| disabling LRO (Large Receive Offloads). |
| |
| LLI (Low Latency Interrupts) |
| ---------------------------- |
| LLI allows for immediate generation of an interrupt upon processing receive |
| packets that match certain criteria as set by the parameters described below. |
| LLI parameters are not enabled when Legacy interrupts are used. You must be |
| using MSI or MSI-X (see cat /proc/interrupts) to successfully use LLI. |
| |
| LLIPort |
| ------- |
| Valid Range: 0 - 65535 |
| Default Value: 0 (disabled) |
| |
| LLI is configured with the LLIPort command-line parameter, which specifies |
| which TCP port should generate Low Latency Interrupts. |
| |
| For example, using LLIPort=80 would cause the hardware to generate an |
| immediate interrupt upon receipt of any packet sent to TCP port 80 on the |
| local machine. |
| |
| WARNING: Enabling LLI can result in an excessive number of interrupts/second |
| that may cause problems with the system and in some cases may cause a kernel |
| panic. |
| |
| LLIPush |
| ------- |
| Valid Range: 0-1 |
| Default Value: 0 (disabled) |
| |
| LLIPush can be set to be enabled or disabled (default). It is most |
| effective in an environment with many small transactions. |
| NOTE: Enabling LLIPush may allow a denial of service attack. |
| |
| LLISize |
| ------- |
| Valid Range: 0-1500 |
| Default Value: 0 (disabled) |
| |
| LLISize causes an immediate interrupt if the hardware receives a packet |
| smaller than the specified size. |
| |
| LLIEType |
| -------- |
| Valid Range: 0-x8fff |
| Default Value: 0 (disabled) |
| |
| Low Latency Interrupt Ethernet Protocol Type. |
| |
| LLIVLANP |
| -------- |
| Valid Range: 0-7 |
| Default Value: 0 (disabled) |
| |
| Low Latency Interrupt on VLAN priority threshold. |
| |
| max_vfs |
| ------- |
| Valid Range: 1-63 |
| Default Value: 0 |
| |
| If the value is greater than 0 it will also force the VMDq parameter to be 1 |
| or more. |
| |
| This parameter adds support for SR-IOV. It causes the driver to spawn up to |
| max_vfs worth of virtual function. |
| |
| The parameters for the driver are referenced by position. So, if you have a |
| dual port 82599 or X540-based adapter and you want N virtual functions per |
| port, you must specify a number for each port with each parameter separated by |
| a comma. |
| |
| For example: |
| insmod ixgbe max_vfs=63,63 |
| |
| NOTE: If both 82598 and 82599 or X540-based adapters are installed on the same |
| machine, you must be careful in loading the driver with the parameters. |
| Depending on system configuration, number of slots, etc. it's impossible to |
| predict in all cases where the positions would be on the command line and the |
| user will have to specify zero in those positions occupied by an 82598 port. |
| |
| L2LBen |
| ------ |
| Valid Range: 0 = disable, 1 = enable (default) |
| Default Value: 1 |
| |
| This parameter controls the internal switch (L2 loopback between pf and vf). |
| By default the switch is enabled. |
| |
| Flow Control |
| ------------ |
| Ethernet Flow Control (IEEE 802.3x) can be configured with ethtool to enable |
| receiving and transmitting pause frames for ixgbe. When tx is enabled, PAUSE |
| frames are generated when the receive packet buffer crosses a predefined |
| threshold. When rx is enabled, the transmit unit will halt for the time delay |
| specified when a PAUSE frame is received. |
| |
| Flow Control is enabled by default. If you want to disable a flow control |
| capable link partner, use ethtool: |
| |
| ethtool -A ethX autoneg off rx off tx off |
| |
| NOTE: For 82598 backplane cards entering 1 gig mode, flow control default |
| behavior is changed to off. Flow control in 1 gig mode on these devices can |
| lead to Tx hangs. |
| |
| Intel(R) Ethernet Flow Director |
| ------------------------------- |
| NOTE: Flow director parameters are only supported on kernel versions 2.6.30 |
| or later. |
| |
| Supports advanced filters that direct receive packets by their flows to |
| different queues. Enables tight control on routing a flow in the platform. |
| Matches flows and CPU cores for flow affinity. Supports multiple parameters |
| for flexible flow classification and load balancing. |
| |
| Flow director is enabled only if the kernel is multiple TX queue capable. |
| |
| An included script (set_irq_affinity.sh) automates setting the IRQ to CPU |
| affinity. |
| |
| You can verify that the driver is using Flow Director by looking at the counter |
| in ethtool: fdir_miss and fdir_match. |
| |
| Other ethtool Commands: |
| To enable Flow Director |
| ethtool -K ethX ntuple on |
| To add a filter |
| Use -U switch. e.g., ethtool -U ethX flow-type tcp4 src-ip 0x178000a |
| action 1 |
| To see the list of filters currently present: |
| ethtool -u ethX |
| |
| The following three parameters impact Flow Director. |
| |
| FdirMode |
| -------- |
| Valid Range: 0-2 (0=off, 1=ATR, 2=Perfect filter mode) |
| Default Value: 1 |
| |
| Flow Director filtering modes. |
| |
| FdirPballoc |
| ----------- |
| Valid Range: 0-2 (0=64k, 1=128k, 2=256k) |
| Default Value: 0 |
| |
| Flow Director allocated packet buffer size. |
| |
| AtrSampleRate |
| -------------- |
| Valid Range: 1-100 |
| Default Value: 20 |
| |
| Software ATR Tx packet sample rate. For example, when set to 20, every 20th |
| packet, looks to see if the packet will create a new flow. |
| |
| Perfect Filter |
| -------------- |
| Perfect filter is an interface to load the filter table that funnels all flow |
| into queue_0 unless an alternative queue is specified using "action". In that |
| case, any flow that matches the filter criteria will be directed to the |
| appropriate queue. |
| |
| Support for Virtual Function (VF) is via the user-data field. You must update |
| to the version of ethtool built for the 2.6.40 kernel. Perfect Filter is |
| supported on all kernels 2.6.30 and later. Rules may be deleted from the table |
| itself. This is done via "ethtool -U ethX delete N" where N is the rule number |
| to be deleted. |
| |
| NOTE: Flow Director Perfect Filters can run in single queue mode, when SR-IOV |
| is enabled, or when DCB is enabled. |
| |
| If the queue is defined as -1, filter will drop matching packets. |
| |
| To account for filter matches and misses, there are two stats in ethtool: |
| fdir_match and fdir_miss. In addition, rx_queue_N_packets shows the number of |
| packets processed by the Nth queue. |
| |
| NOTE: Receive Packet Steering (RPS) and Receive Flow Steering (RFS) are not |
| compatible with Flow Director. If Flow Director is enabled, these will be |
| disabled. |
| |
| NOTE: For VLAN Masks only 4 masks are supported. |
| |
| NOTE: Once a rule is defined, you must supply the same fields and masks (if |
| masks are specified). |
| |
| Support for UDP RSS |
| ------------------- |
| This feature adds an ON/OFF switch for hashing over certain flow types. You |
| can't turn on anything other than UDP. The default setting is disabled. |
| We only support enabling/disabling hashing on ports for UDP over IPv4 (udp4) |
| or IPv6 (udp6). |
| NOTE: Fragmented packets may arrive out of order when RSS UDP support is |
| configured. |
| |
| Supported Ethtool Commands and Options: |
| |
| -n --show-nfc |
| Retrieves the receive network flow classification configurations. |
| |
| rx-flow-hash tcp4|udp4|ah4|esp4|sctp4|tcp6|udp6|ah6|esp6|sctp6 |
| Retrieves the hash options for the specified network traffic type. |
| |
| -N --config-nfc |
| Configures the receive network flow classification. |
| |
| rx-flow-hash tcp4|udp4|ah4|esp4|sctp4|tcp6|udp6|ah6|esp6|sctp6 |
| m|v|t|s|d|f|n|r... |
| Configures the hash options for the specified network traffic type. |
| |
| udp4 UDP over IPv4 |
| udp6 UDP over IPv6 |
| |
| f Hash on bytes 0 and 1 of the Layer 4 header of the rx packet. |
| n Hash on bytes 2 and 3 of the Layer 4 header of the rx packet. |
| |
| The following is an example using udp4 (UDP over IPv4): |
| |
| To include UDP port numbers in RSS hashing run: |
| ethtool -N ethX rx-flow-hash udp4 sdfn |
| |
| To exclude UDP port numbers from RSS hashing run: |
| ethtool -N ethX rx-flow-hash udp4 sd |
| |
| To display UDP hashing current configuration run: |
| ethtool -n ethX rx-flow-hash udp4 |
| |
| The results of running that call will be the following, if UDP hashing is |
| enabled: |
| UDP over IPV4 flows use these fields for computing Hash flow key: |
| IP SA |
| IP DA |
| L4 bytes 0 & 1 [TCP/UDP src port] |
| L4 bytes 2 & 3 [TCP/UDP dst port] |
| |
| The results if UDP hashing is disabled would be: |
| UDP over IPV4 flows use these fields for computing Hash flow key: |
| IP SA |
| IP DA |
| |
| LRO |
| --- |
| Enable/disable Large Receive Offload. |
| Valid Range: 0(off), 1(on) |
| Default Value: 1 |
| |
| Additional Configurations |
| ========================= |
| |
| Configuring the Driver on Different Distributions |
| ------------------------------------------------- |
| Configuring a network driver to load properly when the system is started is |
| distribution dependent. Typically, the configuration process involves adding |
| an alias line to /etc/modules.conf or /etc/modprobe.conf as well as editing |
| other system startup scripts and/or configuration files. Many popular Linux |
| distributions ship with tools to make these changes for you. To learn the |
| proper way to configure a network device for your system, refer to your |
| distribution documentation. If during this process you are asked for the |
| driver or module name, the name for the Linux Base Driver for the Intel |
| 10GbE PCI Express Family of Adapters is ixgbe. |
| |
| Viewing Link Messages |
| --------------------- |
| Link messages will not be displayed to the console if the distribution is |
| restricting system messages. In order to see network driver link messages on |
| your console, set dmesg to eight by entering the following: |
| |
| dmesg -n 8 |
| |
| NOTE: This setting is not saved across reboots. |
| |
| Jumbo Frames |
| ------------ |
| The driver supports Jumbo Frames for all adapters. Jumbo Frames support is |
| enabled by changing the MTU to a value larger than the default of 1500. |
| The maximum value for the MTU is 16110. Use the ifconfig command to |
| increase the MTU size. For example: |
| |
| ifconfig ethX mtu 9000 up |
| |
| The maximum MTU setting for Jumbo Frames is 16110. This value coincides |
| with the maximum Jumbo Frames size of 16128. This driver will attempt to |
| use multiple page sized buffers to receive each jumbo packet. This |
| should help to avoid buffer starvation issues when allocating receive |
| packets. |
| |
| ethtool |
| ------- |
| The driver utilizes the ethtool interface for driver configuration and |
| diagnostics, as well as displaying statistical information. The latest |
| ethtool version is required for this functionality. |
| |
| The latest release of ethtool can be found from |
| http://ftp.kernel.org/pub/software/network/ethtool/. |
| |
| NAPI |
| ---- |
| NAPI (Rx polling mode) is supported in the ixgbe driver. |
| |
| See ftp://robur.slu.se/pub/Linux/net-development/NAPI/usenix-paper.tgz for |
| more information on NAPI. |
| |
| LRO |
| --- |
| Large Receive Offload (LRO) is a technique for increasing inbound throughput |
| of high-bandwidth network connections by reducing CPU overhead. It works by |
| aggregating multiple incoming packets from a single stream into a larger |
| buffer before they are passed higher up the networking stack, thus reducing |
| the number of packets that have to be processed. LRO combines multiple |
| Ethernet frames into a single receive in the stack, thereby potentially |
| decreasing CPU utilization for receives. |
| |
| IXGBE_NO_LRO is a compile time flag. The user can enable it at compile |
| time to remove support for LRO from the driver. The flag is used by adding |
| CFLAGS_EXTRA="-DIXGBE_NO_LRO" to the make file when it's being compiled. |
| |
| make CFLAGS_EXTRA="-DIXGBE_NO_LRO" install |
| |
| You can verify that the driver is using LRO by looking at these counters in |
| ethtool: |
| |
| lro_flushed - the total number of receives using LRO. |
| lro_aggregated - counts the total number of Ethernet packets that were combined. |
| |
| NOTE: IPv6 and UDP are not supported by LRO. |
| |
| HW RSC |
| ------ |
| 82599 and X540-based adapters support HW based receive side coalescing (RSC) |
| which can merge multiple frames from the same IPv4 TCP/IP flow into a single |
| structure that can span one or more descriptors. It works similarly to SW |
| Large receive offload technique. By default HW RSC is enabled and SW LRO |
| cannot be used for 82599 or X540-based adapters unless HW RSC is disabled. |
| |
| IXGBE_NO_HW_RSC is a compile time flag. The user can enable it at compile |
| time to remove support for HW RSC from the driver. The flag is used by adding |
| CFLAGS_EXTRA="-DIXGBE_NO_HW_RSC" to the make file when it's being compiled. |
| |
| make CFLAGS_EXTRA="-DIXGBE_NO_HW_RSC" install |
| |
| You can verify that the driver is using HW RSC by looking at the counter in |
| ethtool: |
| |
| hw_rsc_count - counts the total number of Ethernet packets that were being |
| combined. |
| |
| rx_dropped_backlog |
| ------------------ |
| When in a non-Napi (or Interrupt) mode, this counter indicates that the stack |
| is dropping packets. There is an adjustable parameter in the stack that allows |
| you to adjust the amount of backlog. We recommend increasing the |
| netdev_max_backlog if the counter goes up. |
| |
| # sysctl -a |grep netdev_max_backlog |
| net.core.netdev_max_backlog = 1000 |
| |
| # sysctl -e net.core.netdev_max_backlog=10000 |
| net.core.netdev_max_backlog = 10000 |
| |
| MAC and VLAN anti-spoofing feature |
| ---------------------------------- |
| When a malicious driver attempts to send a spoofed packet, it is dropped by |
| the hardware and not transmitted. An interrupt is sent to the PF driver |
| notifying it of the spoof attempt. |
| |
| When a spoofed packet is detected the PF driver will send the following |
| message to the system log (displayed by the "dmesg" command): |
| |
| ixgbe ethX: ixgbe_spoof_check: n spoofed packets detected |
| |
| Where x=the PF interface# n=the number of spoofed packets |
| |
| Setting MAC Address, VLAN and Rate Limit Using IProute2 Tool |
| ------------------------------------------------------------ |
| You can set a MAC address of a Virtual Function (VF), a default VLAN and the |
| rate limit using the IProute2 tool. Download the latest version of the |
| iproute2 tool from Sourceforge if your version does not have all the |
| features you require. |
| |
| (WoL) Wake on LAN Support |
| ------------------------- |
| Some adapters do not support Wake on LAN. To determine if your adapter |
| supports Wake on LAN, run |
| |
| ethtool ethX |
| |
| |
| Performance Tuning |
| ================== |
| |
| An excellent article on performance tuning can be found at: |
| |
| http://www.redhat.com/promo/summit/2008/downloads/pdf/Thursday/Mark_Wagner.pdf |
| |
| Known Issues/Troubleshooting |
| ============================ |
| |
| Hardware Issues: |
| ---------------- |
| For known hardware and troubleshooting issues, either refer to the "Release |
| Notes" in your User Guide, or for more detailed information, go to the |
| following website: |
| |
| http://www.intel.com |
| |
| In the search box enter your devices controller ID followed by "spec update" |
| (i.e., 82599 spec update). The spec update file has complete information on |
| known hardware issues. |
| |
| Software Issues: |
| ---------------- |
| |
| NOTE: After installing the driver, if your Intel Ethernet Network Connection |
| is not working, verify that you have installed the correct driver. |
| |
| MSI-X Issues with Kernels between 2.6.19 - 2.6.21 (inclusive) |
| ------------------------------------------------------------ |
| Kernel panics and instability may be observed on any MSI-X hardware if you |
| use irqbalance with kernels between 2.6.19 and 2.6.21. |
| |
| If such problems are encountered, you may disable the irqbalance daemon or |
| upgrade to a newer kernel. |
| |
| Driver Compilation |
| ------------------ |
| When trying to compile the driver by running make install, the following |
| error may occur: |
| |
| "Linux kernel source not configured - missing version.h" |
| |
| To solve this issue, create the version.h file by going to the Linux source |
| tree and entering: |
| |
| make include/linux/version.h. |
| |
| Do Not Use LRO When Routing or Bridging Packets |
| ----------------------------------------------- |
| Due to a known general compatibility issue with LRO and routing, do not use |
| LRO when routing or bridging packets. |
| |
| LRO and iSCSI Incompatibility |
| ---------------------------------- |
| LRO is incompatible with iSCSI target or initiator traffic. A panic may |
| occur when iSCSI traffic is received through the ixgbe driver with LRO |
| enabled. To workaround this, the driver should be built and installed with: |
| |
| # make CFLAGS_EXTRA=-DIXGBE_NO_LRO install |
| |
| Performance Degradation with Jumbo Frames |
| ----------------------------------------- |
| Degradation in throughput performance may be observed in some Jumbo frames |
| environments. If this is observed, increasing the application's socket buffer |
| size and/or increasing the /proc/sys/net/ipv4/tcp_*mem entry values may help. |
| See the specific application manual and /usr/src/linux*/Documentation/ |
| networking/ip-sysctl.txt for more details. |
| |
| Multiple Interfaces on Same Ethernet Broadcast Network |
| ------------------------------------------------------ |
| Due to the default ARP behavior on Linux, it is not possible to have |
| one system on two IP networks in the same Ethernet broadcast domain |
| (non-partitioned switch) behave as expected. All Ethernet interfaces |
| will respond to IP traffic for any IP address assigned to the system. |
| This results in unbalanced receive traffic. |
| |
| If you have multiple interfaces in a server, do either of the following: |
| |
| - Turn on ARP filtering by entering: |
| echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter |
| |
| - Install the interfaces in separate broadcast domains - either in |
| different switches or in a switch partitioned to VLANs. |
| |
| UDP Stress Test Dropped Packet Issue |
| -------------------------------------- |
| Under small packets UDP stress test with 10GbE driver, the Linux system |
| may drop UDP packets due to the fullness of socket buffers. |
| You can increase the kernel's default buffer sizes for udp by changing |
| the values in /proc/sys/net/core/rmem_default and rmem_max. |
| |
| Unplugging network cable while ethtool -p is running |
| ---------------------------------------------------- |
| In kernel versions 2.5.50 and later (including 2.6 kernel), unplugging |
| the network cable while ethtool -p is running will cause the system to |
| become unresponsive to keyboard commands, except for control-alt-delete. |
| Restarting the system appears to be the only remedy. |
| |
| Cisco Catalyst 4948-10GE port resets may cause switch to shut down ports |
| ------------------------------------------------------------------------ |
| 82598-based hardware can re-establish link quickly and when connected to some |
| switches, rapid resets within the driver may cause the switch port to become |
| isolated due to "link flap". This is typically indicated by a yellow instead |
| of a green link light. Several operations may cause this problem, such as |
| repeatedly running ethtool commands that cause a reset. |
| |
| A potential workaround is to use the Cisco IOS command "no errdisable detect |
| cause all" from the Global Configuration prompt which enables the switch to |
| keep the interfaces up, regardless of errors. |
| |
| Installing Red Hat Enterprise Linux 4.7, 5.1, or 5.2 with an Intel(R) 10 |
| Gigabit AT Server Adapter may cause kernel panic |
| ---------------------------------------------------------------------------- |
| A known issue may cause a kernel panic or hang after installing an |
| 82598AT-based Intel(R) 10 Gigabit AT Server Adapter in a Red Hat Enterprise |
| Linux 4.7, 5.1, or 5.2 system. The ixgbe driver for both the install kernel |
| and the runtime kernel can create this panic if the 82598AT adapter is |
| installed. Red Hat may release a security update that contains a fix for the |
| panic that you can download using RHN (Red Hat Network) or Intel recommends |
| that you install the ixgbe-1.3.31.5 driver or newer BEFORE installing the |
| hardware. |
| |
| Rx Page Allocation Errors |
| ------------------------- |
| Page allocation failure. order:0 errors may occur under stress with kernels |
| 2.6.25 and above. This is caused by the way the Linux kernel reports this |
| stressed condition. |
| |
| DCB: Generic segmentation offload on causes bandwidth allocation issues |
| ----------------------------------------------------------------------- |
| In order for DCB to work correctly, GSO (Generic Segmentation Offload aka |
| software TSO) must be disabled using ethtool. By default since the hardware |
| supports TSO (hardware offload of segmentation) GSO will not be running. |
| The GSO state can be queried with ethtool using ethtool -k ethX. |
| |
| When using 82598-based network connections, ixgbe driver only supports 16 |
| queues on a platform with more than 16 cores |
| ------------------------------------------------------------------------- |
| Due to known hardware limitations, RSS can only filter in a maximum of 16 |
| receive queues. |
| |
| 82599 and X540-based network connections support up to 64 queues. |
| |
| Disable GRO when routing/bridging |
| --------------------------------- |
| Due to a known kernel issue, GRO must be turned off when routing/bridging. |
| GRO can be turned off via ethtool. |
| |
| ethtool -K ethX gro off |
| |
| where ethX is the ethernet interface you're trying to modify. |
| |
| Lower than expected performance on dual port and quad port 10GbE devices |
| ------------------------------------------------------------------------ |
| Some PCI-E x8 slots are actually configured as x4 slots. These slots have |
| insufficient bandwidth for full 10Gbe line rate with dual port and quad port |
| 10GbE devices. In addition, if you put a PCIe Gen 3-capable adapter into a |
| PCIe Gen 2 slot, you can not get full bandwidth. The driver can detect this |
| situation and will write the following message in the system log: |
| "PCI-Express bandwidth available for this card is not sufficient for optimal |
| performance. For optimal performance a x8 PCI-Express slot is required." |
| If this error occurs, moving your adapter to a true x8 slot will resolve the |
| issue. |
| |
| ethtool may incorrectly display SFP+ fiber module as Direct Attached cable |
| -------------------------------------------------------------------------- |
| Due to kernel limitations, port type can only be correctly displayed on |
| kernel 2.6.33 or greater. |
| |
| Under Redhat 5.4 - System May Crash when Closing Guest OS Window after |
| Loading/Unloading Physical Function (PF) Driver |
| ------------------------------------------------------------------------- |
| Do not remove the ixgbe driver from Dom0 while Virtual Functions (VFs) are |
| assigned to guests. VFs must first use the xm "pci-detach" command to |
| hot-plug the VF device out of the VM it is assigned to or else shut down the |
| VM. |
| |
| Unloading Physical Function (PF) Driver Causes System Reboots When VM is |
| Running and VF is Loaded on the VM |
| ----------------------------------------------------------------------------- |
| Do not unload the PF driver (ixgbe) while VFs are assigned to guests. |
| |
| Running ethtool -t ethX command causes break between PF and test client |
| ----------------------------------------------------------------------- |
| When there are active VFs, "ethtool -t" will only run the link test. The |
| driver will also log in syslog that VFs should be shut down to run a full |
| diags test. |
| |
| SLES10 SP3 random system panic when reloading driver |
| --------------------------------------------------- |
| This is a known SLES-10 SP3 issue. After requesting interrupts for MSI-X |
| vectors, system may panic. |
| |
| Currently the only known workaround is to build the drivers with |
| CFLAGS_EXTRA=-DDISABLE_PCI_MSI if the driver need to be loaded/unloaded. |
| Otherwise the driver can be loaded once and will be safe, but unloading it |
| will lead to the issue. |
| |
| Enabling SR-IOV in a 32-bit or 64-bit Microsoft* Windows* Server 2008/R2 |
| Guest OS using Intel (R) 82576-based GbE, Intel (R) 82599-based or X540-based |
| 10GbE controller under KVM |
| ----------------------------------------------------------------------------- |
| KVM Hypervisor/VMM supports direct assignment of a PCIe device to a VM. This |
| includes traditional PCIe devices, as well as SR-IOV-capable devices using |
| Intel 82576-based, 82599-based and X540-based controllers. |
| |
| While direct assignment of a PCIe device or an SR-IOV Virtual Function (VF) |
| to a Linux-based VM running 2.6.32 or later kernel works fine, there is a |
| known issue with Microsoft Windows Server 2008/R2 VM that results in a |
| "yellow bang" error. This problem is within the KVM VMM itself, not the Intel |
| driver, or the SR-IOV logic of the VMM, but rather that KVM emulates an older |
| CPU model for the guests, and this older CPU model does not support MSI-X |
| interrupts, which is a requirement for Intel SR-IOV. |
| |
| If you wish to use the Intel 82576, 82599 or X540-based controllers in SR-IOV |
| mode with KVM and a Microsoft Windows Server 2008/R2 guest try the following |
| workaround. The workaround is to tell KVM to emulate a different model of CPU |
| when using qemu to create the KVM guest: |
| |
| "-cpu qemu64,model=13" |
| |
| Loading ixgbe driver in 3.2.x and above kernels displays kernel tainted |
| message |
| ----------------------------------------------------------------------- |
| Due to recent kernel changes, loading an out of tree driver will cause the |
| kernel to be tainted. |
| |
| Unable to obtain DHCP lease on boot with RedHat |
| ----------------------------------------------- |
| For configurations where the auto-negotiation process takes more than 5 |
| seconds, the boot script may fail with the following message: |
| |
| "ethX: failed. No link present. Check cable?" |
| |
| If this error appears even though the presence of a link can be confirmed |
| using ethtool ethX, try setting |
| |
| "LINKDELAY=5" in /etc/sysconfig/network-scripts/ifcfg-ethX. |
| NOTE: Link time can take up to 30 seconds. Adjust LINKDELAY value |
| accordingly. |
| |
| Host may reboot after removing PF when VF is active in guest |
| ------------------------------------------------------------ |
| Using kernel versions earlier than 3.2, do not unload the PF driver with |
| active VFs. Doing this will cause your VFs to stop working until you reload |
| the PF driver and may cause a spontaneous reboot of your system. |
| |
| Software bridging does not work with SR-IOV Virtual Functions |
| ------------------------------------------------------------- |
| SR-IOV Virtual Functions are unable to send or receive traffic between VMs |
| using emulated connections on a Linux Software bridge and connections that |
| use SR-IOV VFs. |
| |
| |
| Support |
| ======= |
| |
| For general information, go to the Intel support website at: |
| |
| www.intel.com/support/ |
| |
| or the Intel Wired Networking project hosted by Sourceforge at: |
| |
| http://sourceforge.net/projects/e1000 |
| |
| If an issue is identified with the released source code on the supported |
| kernel with a supported adapter, email the specific information related |
| to the issue to e1000-devel@lists.sf.net |
| |
| License |
| ======= |
| |
| Intel 10 Gigabit PCI Express Linux driver. |
| Copyright(c) 1999 - 2012 Intel Corporation. |
| |
| This program is free software; you can redistribute it and/or modify it |
| under the terms and conditions of the GNU General Public License, |
| version 2, as published by the Free Software Foundation. |
| |
| This program is distributed in the hope it will be useful, but WITHOUT |
| ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| more details. |
| |
| You should have received a copy of the GNU General Public License along with |
| this program; if not, write to the Free Software Foundation, Inc., |
| 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. |
| |
| The full GNU General Public License is included in this distribution in |
| the file called "COPYING". |
| |
| Trademarks |
| ========== |
| |
| Intel, Itanium, and Pentium are trademarks or registered trademarks of |
| Intel Corporation or its subsidiaries in the United States and other |
| countries. |
| |
| * Other names and brands may be claimed as the property of others. |