Back to home page

OSCL-LXR

 
 

    


0001 .. SPDX-License-Identifier: GPL-2.0+
0002 
0003 =====================================================================
0004 Linux Base Driver for 10 Gigabit Intel(R) Ethernet Network Connection
0005 =====================================================================
0006 
0007 October 1, 2018
0008 
0009 
0010 Contents
0011 ========
0012 
0013 - In This Release
0014 - Identifying Your Adapter
0015 - Command Line Parameters
0016 - Improving Performance
0017 - Additional Configurations
0018 - Known Issues/Troubleshooting
0019 - Support
0020 
0021 
0022 
0023 In This Release
0024 ===============
0025 
0026 This file describes the ixgb Linux Base Driver for the 10 Gigabit Intel(R)
0027 Network Connection.  This driver includes support for Itanium(R)2-based
0028 systems.
0029 
0030 For questions related to hardware requirements, refer to the documentation
0031 supplied with your 10 Gigabit adapter.  All hardware requirements listed apply
0032 to use with Linux.
0033 
0034 The following features are available in this kernel:
0035  - Native VLANs
0036  - Channel Bonding (teaming)
0037  - SNMP
0038 
0039 Channel Bonding documentation can be found in the Linux kernel source:
0040 /Documentation/networking/bonding.rst
0041 
0042 The driver information previously displayed in the /proc filesystem is not
0043 supported in this release.  Alternatively, you can use ethtool (version 1.6
0044 or later), lspci, and iproute2 to obtain the same information.
0045 
0046 Instructions on updating ethtool can be found in the section "Additional
0047 Configurations" later in this document.
0048 
0049 
0050 Identifying Your Adapter
0051 ========================
0052 
0053 The following Intel network adapters are compatible with the drivers in this
0054 release:
0055 
0056 +------------+------------------------------+----------------------------------+
0057 | Controller | Adapter Name                 | Physical Layer                   |
0058 +============+==============================+==================================+
0059 | 82597EX    | Intel(R) PRO/10GbE LR/SR/CX4 | - 10G Base-LR (fiber)            |
0060 |            | Server Adapters              | - 10G Base-SR (fiber)            |
0061 |            |                              | - 10G Base-CX4 (copper)          |
0062 +------------+------------------------------+----------------------------------+
0063 
0064 For more information on how to identify your adapter, go to the Adapter &
0065 Driver ID Guide at:
0066 
0067     https://support.intel.com
0068 
0069 
0070 Command Line Parameters
0071 =======================
0072 
0073 If the driver is built as a module, the  following optional parameters are
0074 used by entering them on the command line with the modprobe command using
0075 this syntax::
0076 
0077     modprobe ixgb [<option>=<VAL1>,<VAL2>,...]
0078 
0079 For example, with two 10GbE PCI adapters, entering::
0080 
0081     modprobe ixgb TxDescriptors=80,128
0082 
0083 loads the ixgb driver with 80 TX resources for the first adapter and 128 TX
0084 resources for the second adapter.
0085 
0086 The default value for each parameter is generally the recommended setting,
0087 unless otherwise noted.
0088 
0089 Copybreak
0090 ---------
0091 :Valid Range: 0-XXXX
0092 :Default Value: 256
0093 
0094     This is the maximum size of packet that is copied to a new buffer on
0095     receive.
0096 
0097 Debug
0098 -----
0099 :Valid Range: 0-16 (0=none,...,16=all)
0100 :Default Value: 0
0101 
0102     This parameter adjusts the level of debug messages displayed in the
0103     system logs.
0104 
0105 FlowControl
0106 -----------
0107 :Valid Range: 0-3 (0=none, 1=Rx only, 2=Tx only, 3=Rx&Tx)
0108 :Default Value: 1 if no EEPROM, otherwise read from EEPROM
0109 
0110     This parameter controls the automatic generation(Tx) and response(Rx) to
0111     Ethernet PAUSE frames.  There are hardware bugs associated with enabling
0112     Tx flow control so beware.
0113 
0114 RxDescriptors
0115 -------------
0116 :Valid Range: 64-4096
0117 :Default Value: 1024
0118 
0119     This value is the number of receive descriptors allocated by the driver.
0120     Increasing this value allows the driver to buffer more incoming packets.
0121     Each descriptor is 16 bytes.  A receive buffer is also allocated for
0122     each descriptor and can be either 2048, 4056, 8192, or 16384 bytes,
0123     depending on the MTU setting.  When the MTU size is 1500 or less, the
0124     receive buffer size is 2048 bytes. When the MTU is greater than 1500 the
0125     receive buffer size will be either 4056, 8192, or 16384 bytes.  The
0126     maximum MTU size is 16114.
0127 
0128 TxDescriptors
0129 -------------
0130 :Valid Range: 64-4096
0131 :Default Value: 256
0132 
0133     This value is the number of transmit descriptors allocated by the driver.
0134     Increasing this value allows the driver to queue more transmits.  Each
0135     descriptor is 16 bytes.
0136 
0137 RxIntDelay
0138 ----------
0139 :Valid Range: 0-65535 (0=off)
0140 :Default Value: 72
0141 
0142     This value delays the generation of receive interrupts in units of
0143     0.8192 microseconds.  Receive interrupt reduction can improve CPU
0144     efficiency if properly tuned for specific network traffic.  Increasing
0145     this value adds extra latency to frame reception and can end up
0146     decreasing the throughput of TCP traffic.  If the system is reporting
0147     dropped receives, this value may be set too high, causing the driver to
0148     run out of available receive descriptors.
0149 
0150 TxIntDelay
0151 ----------
0152 :Valid Range: 0-65535 (0=off)
0153 :Default Value: 32
0154 
0155     This value delays the generation of transmit interrupts in units of
0156     0.8192 microseconds.  Transmit interrupt reduction can improve CPU
0157     efficiency if properly tuned for specific network traffic.  Increasing
0158     this value adds extra latency to frame transmission and can end up
0159     decreasing the throughput of TCP traffic.  If this value is set too high,
0160     it will cause the driver to run out of available transmit descriptors.
0161 
0162 XsumRX
0163 ------
0164 :Valid Range: 0-1
0165 :Default Value: 1
0166 
0167     A value of '1' indicates that the driver should enable IP checksum
0168     offload for received packets (both UDP and TCP) to the adapter hardware.
0169 
0170 RxFCHighThresh
0171 --------------
0172 :Valid Range: 1,536-262,136 (0x600 - 0x3FFF8, 8 byte granularity)
0173 :Default Value: 196,608 (0x30000)
0174 
0175     Receive Flow control high threshold (when we send a pause frame)
0176 
0177 RxFCLowThresh
0178 -------------
0179 :Valid Range: 64-262,136 (0x40 - 0x3FFF8, 8 byte granularity)
0180 :Default Value: 163,840 (0x28000)
0181 
0182     Receive Flow control low threshold (when we send a resume frame)
0183 
0184 FCReqTimeout
0185 ------------
0186 :Valid Range: 1-65535
0187 :Default Value: 65535
0188 
0189     Flow control request timeout (how long to pause the link partner's tx)
0190 
0191 IntDelayEnable
0192 --------------
0193 :Value Range: 0,1
0194 :Default Value: 1
0195 
0196     Interrupt Delay, 0 disables transmit interrupt delay and 1 enables it.
0197 
0198 
0199 Improving Performance
0200 =====================
0201 
0202 With the 10 Gigabit server adapters, the default Linux configuration will
0203 very likely limit the total available throughput artificially.  There is a set
0204 of configuration changes that, when applied together, will increase the ability
0205 of Linux to transmit and receive data.  The following enhancements were
0206 originally acquired from settings published at https://www.spec.org/web99/ for
0207 various submitted results using Linux.
0208 
0209 NOTE:
0210   These changes are only suggestions, and serve as a starting point for
0211   tuning your network performance.
0212 
0213 The changes are made in three major ways, listed in order of greatest effect:
0214 
0215 - Use ip link to modify the mtu (maximum transmission unit) and the txqueuelen
0216   parameter.
0217 - Use sysctl to modify /proc parameters (essentially kernel tuning)
0218 - Use setpci to modify the MMRBC field in PCI-X configuration space to increase
0219   transmit burst lengths on the bus.
0220 
0221 NOTE:
0222   setpci modifies the adapter's configuration registers to allow it to read
0223   up to 4k bytes at a time (for transmits).  However, for some systems the
0224   behavior after modifying this register may be undefined (possibly errors of
0225   some kind).  A power-cycle, hard reset or explicitly setting the e6 register
0226   back to 22 (setpci -d 8086:1a48 e6.b=22) may be required to get back to a
0227   stable configuration.
0228 
0229 - COPY these lines and paste them into ixgb_perf.sh:
0230 
0231 ::
0232 
0233   #!/bin/bash
0234   echo "configuring network performance , edit this file to change the interface
0235   or device ID of 10GbE card"
0236   # set mmrbc to 4k reads, modify only Intel 10GbE device IDs
0237   # replace 1a48 with appropriate 10GbE device's ID installed on the system,
0238   # if needed.
0239   setpci -d 8086:1a48 e6.b=2e
0240   # set the MTU (max transmission unit) - it requires your switch and clients
0241   # to change as well.
0242   # set the txqueuelen
0243   # your ixgb adapter should be loaded as eth1 for this to work, change if needed
0244   ip li set dev eth1 mtu 9000 txqueuelen 1000 up
0245   # call the sysctl utility to modify /proc/sys entries
0246   sysctl -p ./sysctl_ixgb.conf
0247 
0248 - COPY these lines and paste them into sysctl_ixgb.conf:
0249 
0250 ::
0251 
0252   # some of the defaults may be different for your kernel
0253   # call this file with sysctl -p <this file>
0254   # these are just suggested values that worked well to increase throughput in
0255   # several network benchmark tests, your mileage may vary
0256 
0257   ### IPV4 specific settings
0258   # turn TCP timestamp support off, default 1, reduces CPU use
0259   net.ipv4.tcp_timestamps = 0
0260   # turn SACK support off, default on
0261   # on systems with a VERY fast bus -> memory interface this is the big gainer
0262   net.ipv4.tcp_sack = 0
0263   # set min/default/max TCP read buffer, default 4096 87380 174760
0264   net.ipv4.tcp_rmem = 10000000 10000000 10000000
0265   # set min/pressure/max TCP write buffer, default 4096 16384 131072
0266   net.ipv4.tcp_wmem = 10000000 10000000 10000000
0267   # set min/pressure/max TCP buffer space, default 31744 32256 32768
0268   net.ipv4.tcp_mem = 10000000 10000000 10000000
0269 
0270   ### CORE settings (mostly for socket and UDP effect)
0271   # set maximum receive socket buffer size, default 131071
0272   net.core.rmem_max = 524287
0273   # set maximum send socket buffer size, default 131071
0274   net.core.wmem_max = 524287
0275   # set default receive socket buffer size, default 65535
0276   net.core.rmem_default = 524287
0277   # set default send socket buffer size, default 65535
0278   net.core.wmem_default = 524287
0279   # set maximum amount of option memory buffers, default 10240
0280   net.core.optmem_max = 524287
0281   # set number of unprocessed input packets before kernel starts dropping them; default 300
0282   net.core.netdev_max_backlog = 300000
0283 
0284 Edit the ixgb_perf.sh script if necessary to change eth1 to whatever interface
0285 your ixgb driver is using and/or replace '1a48' with appropriate 10GbE device's
0286 ID installed on the system.
0287 
0288 NOTE:
0289   Unless these scripts are added to the boot process, these changes will
0290   only last only until the next system reboot.
0291 
0292 
0293 Resolving Slow UDP Traffic
0294 --------------------------
0295 If your server does not seem to be able to receive UDP traffic as fast as it
0296 can receive TCP traffic, it could be because Linux, by default, does not set
0297 the network stack buffers as large as they need to be to support high UDP
0298 transfer rates.  One way to alleviate this problem is to allow more memory to
0299 be used by the IP stack to store incoming data.
0300 
0301 For instance, use the commands::
0302 
0303     sysctl -w net.core.rmem_max=262143
0304 
0305 and::
0306 
0307     sysctl -w net.core.rmem_default=262143
0308 
0309 to increase the read buffer memory max and default to 262143 (256k - 1) from
0310 defaults of max=131071 (128k - 1) and default=65535 (64k - 1).  These variables
0311 will increase the amount of memory used by the network stack for receives, and
0312 can be increased significantly more if necessary for your application.
0313 
0314 
0315 Additional Configurations
0316 =========================
0317 
0318 Configuring the Driver on Different Distributions
0319 -------------------------------------------------
0320 Configuring a network driver to load properly when the system is started is
0321 distribution dependent. Typically, the configuration process involves adding
0322 an alias line to /etc/modprobe.conf as well as editing other system startup
0323 scripts and/or configuration files.  Many popular Linux distributions ship
0324 with tools to make these changes for you.  To learn the proper way to
0325 configure a network device for your system, refer to your distribution
0326 documentation.  If during this process you are asked for the driver or module
0327 name, the name for the Linux Base Driver for the Intel 10GbE Family of
0328 Adapters is ixgb.
0329 
0330 Viewing Link Messages
0331 ---------------------
0332 Link messages will not be displayed to the console if the distribution is
0333 restricting system messages. In order to see network driver link messages on
0334 your console, set dmesg to eight by entering the following::
0335 
0336     dmesg -n 8
0337 
0338 NOTE: This setting is not saved across reboots.
0339 
0340 Jumbo Frames
0341 ------------
0342 The driver supports Jumbo Frames for all adapters. Jumbo Frames support is
0343 enabled by changing the MTU to a value larger than the default of 1500.
0344 The maximum value for the MTU is 16114.  Use the ip command to
0345 increase the MTU size.  For example::
0346 
0347     ip li set dev ethx mtu 9000
0348 
0349 The maximum MTU setting for Jumbo Frames is 16114.  This value coincides
0350 with the maximum Jumbo Frames size of 16128.
0351 
0352 Ethtool
0353 -------
0354 The driver utilizes the ethtool interface for driver configuration and
0355 diagnostics, as well as displaying statistical information.  The ethtool
0356 version 1.6 or later is required for this functionality.
0357 
0358 The latest release of ethtool can be found from
0359 https://www.kernel.org/pub/software/network/ethtool/
0360 
0361 NOTE:
0362   The ethtool version 1.6 only supports a limited set of ethtool options.
0363   Support for a more complete ethtool feature set can be enabled by
0364   upgrading to the latest version.
0365 
0366 NAPI
0367 ----
0368 NAPI (Rx polling mode) is supported in the ixgb driver.
0369 
0370 See https://wiki.linuxfoundation.org/networking/napi for more information on
0371 NAPI.
0372 
0373 
0374 Known Issues/Troubleshooting
0375 ============================
0376 
0377 NOTE:
0378   After installing the driver, if your Intel Network Connection is not
0379   working, verify in the "In This Release" section of the readme that you have
0380   installed the correct driver.
0381 
0382 Cable Interoperability Issue with Fujitsu XENPAK Module in SmartBits Chassis
0383 ----------------------------------------------------------------------------
0384 Excessive CRC errors may be observed if the Intel(R) PRO/10GbE CX4
0385 Server adapter is connected to a Fujitsu XENPAK CX4 module in a SmartBits
0386 chassis using 15 m/24AWG cable assemblies manufactured by Fujitsu or Leoni.
0387 The CRC errors may be received either by the Intel(R) PRO/10GbE CX4
0388 Server adapter or the SmartBits. If this situation occurs using a different
0389 cable assembly may resolve the issue.
0390 
0391 Cable Interoperability Issues with HP Procurve 3400cl Switch Port
0392 -----------------------------------------------------------------
0393 Excessive CRC errors may be observed if the Intel(R) PRO/10GbE CX4 Server
0394 adapter is connected to an HP Procurve 3400cl switch port using short cables
0395 (1 m or shorter). If this situation occurs, using a longer cable may resolve
0396 the issue.
0397 
0398 Excessive CRC errors may be observed using Fujitsu 24AWG cable assemblies that
0399 Are 10 m or longer or where using a Leoni 15 m/24AWG cable assembly. The CRC
0400 errors may be received either by the CX4 Server adapter or at the switch. If
0401 this situation occurs, using a different cable assembly may resolve the issue.
0402 
0403 Jumbo Frames System Requirement
0404 -------------------------------
0405 Memory allocation failures have been observed on Linux systems with 64 MB
0406 of RAM or less that are running Jumbo Frames.  If you are using Jumbo
0407 Frames, your system may require more than the advertised minimum
0408 requirement of 64 MB of system memory.
0409 
0410 Performance Degradation with Jumbo Frames
0411 -----------------------------------------
0412 Degradation in throughput performance may be observed in some Jumbo frames
0413 environments.  If this is observed, increasing the application's socket buffer
0414 size and/or increasing the /proc/sys/net/ipv4/tcp_*mem entry values may help.
0415 See the specific application manual and /usr/src/linux*/Documentation/
0416 networking/ip-sysctl.txt for more details.
0417 
0418 Allocating Rx Buffers when Using Jumbo Frames
0419 ---------------------------------------------
0420 Allocating Rx buffers when using Jumbo Frames on 2.6.x kernels may fail if
0421 the available memory is heavily fragmented. This issue may be seen with PCI-X
0422 adapters or with packet split disabled. This can be reduced or eliminated
0423 by changing the amount of available memory for receive buffer allocation, by
0424 increasing /proc/sys/vm/min_free_kbytes.
0425 
0426 Multiple Interfaces on Same Ethernet Broadcast Network
0427 ------------------------------------------------------
0428 Due to the default ARP behavior on Linux, it is not possible to have
0429 one system on two IP networks in the same Ethernet broadcast domain
0430 (non-partitioned switch) behave as expected.  All Ethernet interfaces
0431 will respond to IP traffic for any IP address assigned to the system.
0432 This results in unbalanced receive traffic.
0433 
0434 If you have multiple interfaces in a server, do either of the following:
0435 
0436   - Turn on ARP filtering by entering::
0437 
0438       echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter
0439 
0440   - Install the interfaces in separate broadcast domains - either in
0441     different switches or in a switch partitioned to VLANs.
0442 
0443 UDP Stress Test Dropped Packet Issue
0444 --------------------------------------
0445 Under small packets UDP stress test with 10GbE driver, the Linux system
0446 may drop UDP packets due to the fullness of socket buffers. You may want
0447 to change the driver's Flow Control variables to the minimum value for
0448 controlling packet reception.
0449 
0450 Tx Hangs Possible Under Stress
0451 ------------------------------
0452 Under stress conditions, if TX hangs occur, turning off TSO
0453 "ethtool -K eth0 tso off" may resolve the problem.
0454 
0455 
0456 Support
0457 =======
0458 For general information, go to the Intel support website at:
0459 
0460 https://www.intel.com/support/
0461 
0462 or the Intel Wired Networking project hosted by Sourceforge at:
0463 
0464 https://sourceforge.net/projects/e1000
0465 
0466 If an issue is identified with the released source code on a supported kernel
0467 with a supported adapter, email the specific information related to the issue
0468 to e1000-devel@lists.sf.net