Release notes for Neterion's (Formerly S2io) Xframe I/II PCI-X 10GbE driver.

Contents
=======
- 1.  Introduction
- 2.  Identifying the adapter/interface
- 3.  Features supported
- 4.  Command line parameters
- 5.  Performance suggestions
- 6.  Available Downloads 


1.	Introduction:
This Linux driver supports Neterion's Xframe I PCI-X 1.0 and
Xframe II PCI-X 2.0 adapters. It supports several features 
such as jumbo frames, MSI/MSI-X, checksum offloads, TSO, UFO and so on.
See below for complete list of features.
All features are supported for both IPv4 and IPv6.

2.	Identifying the adapter/interface:
a. Insert the adapter(s) in your system.
b. Build and load driver 
# insmod s2io.ko
c. View log messages
# dmesg | tail -40
You will see messages similar to:
eth3: Neterion Xframe I 10GbE adapter (rev 3), Version 2.0.9.1, Intr type INTA
eth4: Neterion Xframe II 10GbE adapter (rev 2), Version 2.0.9.1, Intr type INTA
eth4: Device is on 64 bit 133MHz PCIX(M1) bus

The above messages identify the adapter type(Xframe I/II), adapter revision,
driver version, interface name(eth3, eth4), Interrupt type(INTA, MSI, MSI-X).
In case of Xframe II, the PCI/PCI-X bus width and frequency are displayed
as well.

To associate an interface with a physical adapter use "ethtool -p <ethX>".
The corresponding adapter's LED will blink multiple times.

3.	Features supported:
a. Jumbo frames. Xframe I/II supports MTU up to 9600 bytes,
modifiable using ip command.

b. Offloads. Supports checksum offload(TCP/UDP/IP) on transmit
and receive, TSO.

c. Multi-buffer receive mode. Scattering of packet across multiple
buffers. Currently driver supports 2-buffer mode which yields
significant performance improvement on certain platforms(SGI Altix,
IBM xSeries).

d. MSI/MSI-X. Can be enabled on platforms which support this feature
(IA64, Xeon) resulting in noticeable performance improvement(up to 7%
on certain platforms).

e. Statistics. Comprehensive MAC-level and software statistics displayed
using "ethtool -S" option.

f. Multi-FIFO/Ring. Supports up to 8 transmit queues and receive rings,
with multiple steering options.

4.  Command line parameters
a. tx_fifo_num
Number of transmit queues
Valid range: 1-8
Default: 1

b. rx_ring_num
Number of receive rings
Valid range: 1-8
Default: 1

c. tx_fifo_len
Size of each transmit queue
Valid range: Total length of all queues should not exceed 8192
Default: 4096

d. rx_ring_sz 
Size of each receive ring(in 4K blocks)
Valid range: Limited by memory on system
Default: 30 

e. intr_type
Specifies interrupt type. Possible values 0(INTA), 2(MSI-X)
Valid values: 0, 2
Default: 2

5.  Performance suggestions
General:
a. Set MTU to maximum(9000 for switch setup, 9600 in back-to-back configuration)
b. Set TCP windows size to optimal value. 
For instance, for MTU=1500 a value of 210K has been observed to result in 
good performance.
# sysctl -w net.ipv4.tcp_rmem="210000 210000 210000"
# sysctl -w net.ipv4.tcp_wmem="210000 210000 210000"
For MTU=9000, TCP window size of 10 MB is recommended.
# sysctl -w net.ipv4.tcp_rmem="10000000 10000000 10000000"
# sysctl -w net.ipv4.tcp_wmem="10000000 10000000 10000000"

Transmit performance:
a. By default, the driver respects BIOS settings for PCI bus parameters. 
However, you may want to experiment with PCI bus parameters 
max-split-transactions(MOST) and MMRBC (use setpci command). 
A MOST value of 2 has been found optimal for Opterons and 3 for Itanium.  
It could be different for your hardware.  
Set MMRBC to 4K**.

For example you can set 
For opteron
#setpci -d 17d5:* 62=1d 
For Itanium
#setpci -d 17d5:* 62=3d 

For detailed description of the PCI registers, please see Xframe User Guide.

b. Ensure Transmit Checksum offload is enabled. Use ethtool to set/verify this 
parameter.
c. Turn on TSO(using "ethtool -K")
# ethtool -K <ethX> tso on

Receive performance:
a. By default, the driver respects BIOS settings for PCI bus parameters. 
However, you may want to set PCI latency timer to 248.
#setpci -d 17d5:* LATENCY_TIMER=f8
For detailed description of the PCI registers, please see Xframe User Guide.
b. Use 2-buffer mode. This results in large performance boost on
certain platforms(eg. SGI Altix, IBM xSeries).
c. Ensure Receive Checksum offload is enabled. Use "ethtool -K ethX" command to 
set/verify this option.
d. Enable NAPI feature(in kernel configuration Device Drivers ---> Network 
device support --->  Ethernet (10000 Mbit) ---> S2IO 10Gbe Xframe NIC) to 
bring down CPU utilization.

** For AMD opteron platforms with 8131 chipset, MMRBC=1 and MOST=1 are 
recommended as safe parameters.
For more information, please review the AMD8131 errata at
http://vip.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/
26310_AMD-8131_HyperTransport_PCI-X_Tunnel_Revision_Guide_rev_3_18.pdf

6. Support
For further support please contact either your 10GbE Xframe NIC vendor (IBM, 
HP, SGI etc.)
