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