README Driver File Contents (LAN_Intel_7.6.15.4_RHEL5x64.zip)

Intel(R) I/O Acceleration Technology Software Guide for Linux* 
=============================================================

Novemer 29, 2007


Contents
========
- Overview
- Configuration
- Direct Cache Access (DCA)
- Relevant System Variables
- Enabling and Disabling Intel I/OAT
- Intel I/OAT sysfs Interface
- Known Issues
- Support
- License


Overview
========

This document contains instructions on how to configure the ioatdma 
engine for Linux.  For additional information on Intel(R) I/O 
Acceleration Technology (Intel(R) I/OAT), see the following web 
page: http://www.intel.com/technology/ioacceleration/index.htm. 

Where applicable, please consult the End User Guide for specific instructions
to enable and configure I/OAT.

These instructions are intended for the following platform configuration:

- Mainboard chipset: Intel(R) 5000 Series Chipset QuickData Technology Device - 
  1A38
  Intel(R) 5100 Chipset QuickData Technology Device - 0x65ff
  Intel(R) 7300 Chipset QuickData 2 Technology Device - 360b
  Intel(R) 5400 Chipset QuickData Technology Device - 0x402f 

- BIOS: A BIOS that supports Intel I/OAT.

- Linux OS: The ioatdma driver will build on kernels with I/OAT support - 
  2.6.18 and above.

- Drivers: 
  - e1000 LAN driver, version 7.0.xx or higher, igb driver, ixgbe driver
  - ioatdma driver (in this tarball)


I/OAT is focused on optimizing performance - throughput & CPU utilization - 
for applications that 1) use TCP protocol 2) have a significant portion
of their traffic that is Receive-based 3) uses application buffer sizes 
that are larger than 4k. (Applications with larger packets typically see 
greater gains with I/OAT.)
 
For optimal benefits from the Intel I/OAT network solution, system memory 
channels should be fully populated. Customers with limited system memory 
may not receive the full benefits of I/OAT. Typically, there are two
memory slots per channel, i.e., slots 0 & 1 are associated memory channel 0.
Please refer to your system guide to specific information re memory channels.

When adding network adapters to a system, where possible please use slots
that are directly connected to the MCH. Please refer to your system guide
to specific information on slots that are attached to the MCH.

Users are encouraged to work with their applications & systems to determine
how they can best take advantage of I/OAT.


Configuration
=============

The ioatdma driver is a loadable module. Listed below are the steps
required to make and install the module.


1) Make and install the ioatdma module
	make install 

2) Optionally, you should rename the old module to minimize the potential for 
   confusion.
 
	mv /lib/modules/`uname -r`/kernel/drivers/dma/ioatdma.ko 
	/lib/modules/`uname -r`/kernel/drivers/dma/ioatdma_old.ko


NOTE: Make sure that I/OAT support is configured into the kernel.
 
       CONFIG_NET_DMA=y, CONFIG_INTEL_IOATDMA=y, and CONFIG_DCA=y


Patches
=======

07-don’t_offload_without_context_switch.patch

dca-class-sles.patch -
   enables DCA installation with SLES 10


Direct Cache Access (DCA)
=========================

NOTE: DCA is functional with the igb and ixgbe drivers, but not with the e1000
driver.

Direct Cache Access (DCA) allows a capable I/O device, such as a network 
controller, to place data directly into a CPU cache.  The objective of DCA 
is to reduce cache misses in processing data immediately after it has been 
DMAed into system memory.  DCA requires support from the I/O device, system 
chipset, and CPUs.

The DCA implementation for Linux works with the concepts of provider and 
requester drivers.  A provider driver ensures that the chipset and CPUs 
support DCA and are properly configured.  The ioatdma driver is the DCA 
provider for current DCA enabled platforms.  A requester is a driver for an 
I/O device that wants to issue DCA hinted bus transactions.  The igb driver 
is a DCA requester.  There is an additional DCA kernel module that provides 
the in kernel API for implementing providers and requesters.


Building Drivers with DCA Support
---------------------------------

The DCA module and ioatdma driver ship together.  The igb driver ships with
DCA support in the source code, but needs to be built specially to enable 
DCA support until DCA is included with the Linux kernel.  To build the igb 
driver with DCA support, you must set a flag and provide the path to the 
ioatdma source.

This example assumes the ioatdma and igb sources are in /usr/src

# unpack the ioatdma source, build and install
cd /usr/src
tar zxf ioatdma-<ioat version>.tar.gz
cd ioatdma-<ioat version>
make
make install

# unpack with igb driver, build with DCA support and install
cd /usr/src
tar zxf igb-<igb version>.tar.gz
cd igb-<igb-version>/src
make CFLAGS_EXTRA="-DIGB_DCA -I/usr/src/ioatdma-<ioat version>/include"
make install

# load the dca, ioatdma, and igb drivers
modprobe ioatdma
modprobe igb


DCA with SLES 10
----------------

The dca-class-sles.patch file allows the dca.ko driver to build cleanly on a 
SLES10 installation.  

As the sysfs and device model in the linux kernel have matured, the API has 
changed.  The dca.ko driver included in the ioatdma package was modified to 
follow the newer API guidelines.  These changes break the compile of the dca 
code on the SLES10 2.6.16 kernel.  In order to build the product, the 
dca-class-sles.patch file needs to be applied to the dca code before compiling.

Example:
    $ cd /usr/src/ioatdma-2.13/
    $ patch -p1 < patches/dca-class-sles.patch

Details:
The device model API has changed, and the use of class_device has been 
deprecated in the later linux kernels. The DCA driver was using class_device 
objects with class_device_create(), class_device_destroy() and 
class_device_unregister(), and storing a class_device reference. The driver 
was updated to use device_create(), device_destroy() and device_unregister()
with a device reference; however, the older SLES10 kernel does not support 
the device_create() or device_destroy() APIs and the compile fails with 
"implicit declaration of function" error messages.

The dca-class-sles.patch reverts the DCA driver code to use the deprecated 
class_device API with no change in actual driver function.

System information
------------------
DCA providers and requesters show up in sysfs, and this can be used to verify 
that DCA is set up correctly.  Provider devices are listed in /sys/class/dca, 
requester devices show up as children of the provider they are connected to.

You get something such as:

/sys/class/dca0/device -> /sys/bus/pci/<where the CB device is>
/sys/class/dca0/requester0/device -> /sys/bus/pci/<where eth0 is>
/sys/class/dca0/requester1/device -> /sys/bus/pci/<where eth1 is>

In that device directory there will be a symlink back to every class device, 
including the networking interface.  So you can see things such as:

/sys/class/dca0/requester0/device/net:eth0 -> /sys/class/net/eth0
/sys/class/net/eth0/device/dca:requester0 -> /sys/class/dca/dca0/requester0


Relevant Sysctl Settings
========================

The tcp_dma_copybreak variable represents the lower limit of the size of 
the socket reads that will be offloaded to the DMA copy engine when 
CONFIG_NET_DMA is enabled. The default value is 4096 bytes. Lowering this 
limit reduces the thresold when offloading will be enabled.

The tcp_low_latency system variable (/proc/sys/net/ipv4/tcp_low_latency) 
ensures data is forwarded through the TCP stack to the application buffer. 
When set to a value of 1, it disables tcp_prequeue in the Linux ipv4 TCP 
stack and no offloading will occur.


Enabling and Disabling Intel I/OAT
==================================

The Intel I/OAT network accelerations are enabled by loading the Intel 
I/OATDMA engine driver at runtime.  The driver module filename is ioatdma.ko.  

To enable Intel I/OAT, load the ioatdma driver module:

    modprobe ioatdma

Removing the ioatdma module once it has been loaded is not recommended 
since TCP receives hold a reference to the ioatdma driver when offloading
traffic. However, if the "Forced module unloading" option is enabled in 
the kernel, the module may be unloaded with:

    rmmod ioatdma

WARNING: This command above may hang the system if done while waiting on TCP 
receive traffic.


Intel I/OAT sysfs Interface
===========================

When the Intel I/OAT driver is properly loaded, there will be directories 
created in sysfs, under /sys/class/dma, named dma0chanX, where X is 0-3.  

Channel Entries:

in_use
------
1 if the DMA channel is allocated to a client, such as the network stack.  

bytes_transferred
-----------------
The total number of bytes transferred by the DMA engine.  

memcpy_count
------------
The total number of copy operations initiated.  


Known Issues
============

Using I/OAT with IPv6 may degrade performance
---------------------------------------------

tbench reports throughput of 0.00MB/sec and won't terminate when ioatdma loaded
-------------------------------------------------------------------------------


Support
=======

For general information, go to the Intel support website at:

    http://support.intel.com

If an issue is identified with the released source code on the supported
kernel with a supported adapter, email the specific information related 
to the issue to linux.nics@intel.com.  


License
=======

This software program is released under the terms of a license agreement 
between you ('Licensee') and Intel.  Do not use or load this software or 
any associated materials (collectively, the 'Software') until you have 
carefully read the full terms and conditions of the LICENSE located in 
this software package.  By loading or using the Software, you agree to 
the terms of this Agreement.  If you do not agree with the terms of this 
Agreement, do not install or use the Software.  

* Other names and brands may be claimed as the property of others.  
Download Driver Pack

How To Update Drivers Manually

After your driver has been downloaded, follow these simple steps to install it.

  • Expand the archive file (if the download file is in zip or rar format).

  • If the expanded file has an .exe extension, double click it and follow the installation instructions.

  • Otherwise, open Device Manager by right-clicking the Start menu and selecting Device Manager.

  • Find the device and model you want to update in the device list.

  • Double-click on it to open the Properties dialog box.

  • From the Properties dialog box, select the Driver tab.

  • Click the Update Driver button, then follow the instructions.

Very important: You must reboot your system to ensure that any driver updates have taken effect.

For more help, visit our Driver Support section for step-by-step videos on how to install drivers for every file type.

server: web2, load: 0.79