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
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.