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