blob: 7c98277777ebcc14ee7c30991873cc6c92296d28 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001Linux* Base Driver for the Intel(R) PRO/10GbE Family of Adapters
2================================================================
3
4November 17, 2004
5
6
7Contents
8========
9
10- In This Release
11- Identifying Your Adapter
12- Command Line Parameters
13- Improving Performance
14- Support
15
16
17In This Release
18===============
19
20This file describes the Linux* Base Driver for the Intel(R) PRO/10GbE Family
21of Adapters, version 1.0.x.
22
23For questions related to hardware requirements, refer to the documentation
24supplied with your Intel PRO/10GbE adapter. All hardware requirements listed
25apply to use with Linux.
26
27Identifying Your Adapter
28========================
29
30To verify your Intel adapter is supported, find the board ID number on the
31adapter. Look for a label that has a barcode and a number in the format
32A12345-001.
33
34Use the above information and the Adapter & Driver ID Guide at:
35
36 http://support.intel.com/support/network/adapter/pro100/21397.htm
37
38For the latest Intel network drivers for Linux, go to:
39
40 http://downloadfinder.intel.com/scripts-df/support_intel.asp
41
42Command Line Parameters
43=======================
44
45If the driver is built as a module, the following optional parameters are
46used by entering them on the command line with the modprobe or insmod command
47using this syntax:
48
49 modprobe ixgb [<option>=<VAL1>,<VAL2>,...]
50
51 insmod ixgb [<option>=<VAL1>,<VAL2>,...]
52
53For example, with two PRO/10GbE PCI adapters, entering:
54
55 insmod ixgb TxDescriptors=80,128
56
57loads the ixgb driver with 80 TX resources for the first adapter and 128 TX
58resources for the second adapter.
59
60The default value for each parameter is generally the recommended setting,
61unless otherwise noted. Also, if the driver is statically built into the
62kernel, the driver is loaded with the default values for all the parameters.
63Ethtool can be used to change some of the parameters at runtime.
64
65FlowControl
66Valid Range: 0-3 (0=none, 1=Rx only, 2=Tx only, 3=Rx&Tx)
67Default: Read from the EEPROM
68 If EEPROM is not detected, default is 3
69 This parameter controls the automatic generation(Tx) and response(Rx) to
70 Ethernet PAUSE frames.
71
72RxDescriptors
73Valid Range: 64-512
74Default Value: 512
75 This value is the number of receive descriptors allocated by the driver.
76 Increasing this value allows the driver to buffer more incoming packets.
77 Each descriptor is 16 bytes. A receive buffer is also allocated for
78 each descriptor and can be either 2048, 4056, 8192, or 16384 bytes,
79 depending on the MTU setting. When the MTU size is 1500 or less, the
80 receive buffer size is 2048 bytes. When the MTU is greater than 1500 the
81 receive buffer size will be either 4056, 8192, or 16384 bytes. The
82 maximum MTU size is 16114.
83
84RxIntDelay
85Valid Range: 0-65535 (0=off)
86Default Value: 6
87 This value delays the generation of receive interrupts in units of
88 0.8192 microseconds. Receive interrupt reduction can improve CPU
89 efficiency if properly tuned for specific network traffic. Increasing
90 this value adds extra latency to frame reception and can end up
91 decreasing the throughput of TCP traffic. If the system is reporting
92 dropped receives, this value may be set too high, causing the driver to
93 run out of available receive descriptors.
94
95TxDescriptors
96Valid Range: 64-4096
97Default Value: 256
98 This value is the number of transmit descriptors allocated by the driver.
99 Increasing this value allows the driver to queue more transmits. Each
100 descriptor is 16 bytes.
101
102XsumRX
103Valid Range: 0-1
104Default Value: 1
105 A value of '1' indicates that the driver should enable IP checksum
106 offload for received packets (both UDP and TCP) to the adapter hardware.
107
108XsumTX
109Valid Range: 0-1
110Default Value: 1
111 A value of '1' indicates that the driver should enable IP checksum
112 offload for transmitted packets (both UDP and TCP) to the adapter
113 hardware.
114
115Improving Performance
116=====================
117
118With the Intel PRO/10 GbE adapter, the default Linux configuration will very
119likely limit the total available throughput artificially. There is a set of
120things that when applied together increase the ability of Linux to transmit
121and receive data. The following enhancements were originally acquired from
122settings published at http://www.spec.org/web99 for various submitted results
123using Linux.
124
125NOTE: These changes are only suggestions, and serve as a starting point for
126tuning your network performance.
127
128The changes are made in three major ways, listed in order of greatest effect:
129- Use ifconfig to modify the mtu (maximum transmission unit) and the txqueuelen
130 parameter.
131- Use sysctl to modify /proc parameters (essentially kernel tuning)
132- Use setpci to modify the MMRBC field in PCI-X configuration space to increase
133 transmit burst lengths on the bus.
134
135NOTE: setpci modifies the adapter's configuration registers to allow it to read
136up to 4k bytes at a time (for transmits). However, for some systems the
137behavior after modifying this register may be undefined (possibly errors of some
138kind). A power-cycle, hard reset or explicitly setting the e6 register back to
13922 (setpci -d 8086:1048 e6.b=22) may be required to get back to a stable
140configuration.
141
142- COPY these lines and paste them into ixgb_perf.sh:
143#!/bin/bash
144echo "configuring network performance , edit this file to change the interface"
145# set mmrbc to 4k reads, modify only Intel 10GbE device IDs
146setpci -d 8086:1048 e6.b=2e
147# set the MTU (max transmission unit) - it requires your switch and clients to change too!
148# set the txqueuelen
149# your ixgb adapter should be loaded as eth1 for this to work, change if needed
150ifconfig eth1 mtu 9000 txqueuelen 1000 up
151# call the sysctl utility to modify /proc/sys entries
152sysctl -p ./sysctl_ixgb.conf
153- END ixgb_perf.sh
154
155- COPY these lines and paste them into sysctl_ixgb.conf:
156# some of the defaults may be different for your kernel
157# call this file with sysctl -p <this file>
158# these are just suggested values that worked well to increase throughput in
159# several network benchmark tests, your mileage may vary
160
161### IPV4 specific settings
162net.ipv4.tcp_timestamps = 0 # turns TCP timestamp support off, default 1, reduces CPU use
163net.ipv4.tcp_sack = 0 # turn SACK support off, default on
164# on systems with a VERY fast bus -> memory interface this is the big gainer
165net.ipv4.tcp_rmem = 10000000 10000000 10000000 # sets min/default/max TCP read buffer, default 4096 87380 174760
166net.ipv4.tcp_wmem = 10000000 10000000 10000000 # sets min/pressure/max TCP write buffer, default 4096 16384 131072
167net.ipv4.tcp_mem = 10000000 10000000 10000000 # sets min/pressure/max TCP buffer space, default 31744 32256 32768
168
169### CORE settings (mostly for socket and UDP effect)
170net.core.rmem_max = 524287 # maximum receive socket buffer size, default 131071
171net.core.wmem_max = 524287 # maximum send socket buffer size, default 131071
172net.core.rmem_default = 524287 # default receive socket buffer size, default 65535
173net.core.wmem_default = 524287 # default send socket buffer size, default 65535
174net.core.optmem_max = 524287 # maximum amount of option memory buffers, default 10240
175net.core.netdev_max_backlog = 300000 # number of unprocessed input packets before kernel starts dropping them, default 300
176- END sysctl_ixgb.conf
177
178Edit the ixgb_perf.sh script if necessary to change eth1 to whatever interface
179your ixgb driver is using.
180
181NOTE: Unless these scripts are added to the boot process, these changes will
182only last only until the next system reboot.
183
184
185Resolving Slow UDP Traffic
186--------------------------
187
188If your server does not seem to be able to receive UDP traffic as fast as it
189can receive TCP traffic, it could be because Linux, by default, does not set
190the network stack buffers as large as they need to be to support high UDP
191transfer rates. One way to alleviate this problem is to allow more memory to
192be used by the IP stack to store incoming data.
193
194For instance, use the commands:
195 sysctl -w net.core.rmem_max=262143
196and
197 sysctl -w net.core.rmem_default=262143
198to increase the read buffer memory max and default to 262143 (256k - 1) from
199defaults of max=131071 (128k - 1) and default=65535 (64k - 1). These variables
200will increase the amount of memory used by the network stack for receives, and
201can be increased significantly more if necessary for your application.
202
203Support
204=======
205
206For general information and support, go to the Intel support website at:
207
208 http://support.intel.com
209
210If an issue is identified with the released source code on the supported
211kernel with a supported adapter, email the specific information related to
212the issue to linux.nics@intel.com.