Skip to content

sora/uio-82599

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

68 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UIO-IXGBE - user-space library for Intel 10Gigabit Ethernet adapters.

UIO-IXGBE provides direct HW interfaces 

1. Overview
UIO-IXGBE is a user-space library for Intel 10Gigabit Ethernet adapters.
It implements what is often referred to as "OS bypass" mechanism, where 
fast path processing and RX/TX data transfers are done without kernel 
assistance (i.e. no system calls). 
Application manipulates RX and TX descriptors directly (through the 
library API). Data is transfered via DMA directly to/from user accessible 
memory, which is mapped only once and therefor does not require expensive 
remapping for each transfer. 
This effectively reduces SW processing overhead of the data transfers
to nearly zero. For example to trigger the transmission of an Ethernet 
frame application has to perform a single 32bit MMIO (memory mapped IO)
write (assuming that data resides in the buffer allocated by UIO-DMA).
The rest (DMA transfer, etc) will be done by the HW.

Allocation and management of the DMA memory areas is done via UIO-DMA. 

2. Kernel module
UIO-IXGBE requires kernel support for certain functions like PCI management,
buffer allocation and memory mapping.
That support is provided by the standalone 'uio-ixgbe' kernel back-end driver.
Source of the driver comes with this package and will be compiled alone with
the user-space code (you need configured kernel sources for that of course).

uio-ixgbe kernel backend does not include hotplug tables and will not be loaded
automatically. This is done to avoid device conflicts between in-kernel IXGBE
drivers.
It can either be loaded manually by running 'modprobe uio-ixgbe' or via UDEV rules. 
Typicall UIO-IXGBE UDEV rule looks like this:

ACTION=="add", KERNEL=="0000:0c:00.1", RUN+="/sbin/pcibind --device $kernel --driver uio-ixgbe"

Above rule will bind PCI device 0000:0c:00.1 to the 'uio-ixgbe' module 
during machine startup. Sample UDEV rule file is included in the package.
See UDEV documentation for more details.

Once loaded kernel backend creates /dev/uio-ixgbe device node. That node is used
by user-space library to open and configure devices.

4. Device names
Currently devices can be referred to by:
- Full PCI ID of the E1000 adapter 
  PCI IDs can be obtained with 'lspci' utility
     lspci
     ...
     05:04.0 Ethernet controller: Intel Corporation 82545GM Gigabit 
     	Ethernet Controller (rev 04)
     ...
     
  PCI IDs displayed by the lspci utility must be prefixed with PCI domain, which 
  is "0000:" on most machines. Use lspci -t to find out correct PCI domain for 
  your system.

- Enumerated device id.
  UIO-IXGBE assignes enumerated id to each device '#0' , '#1', ...
  
5. Build and install
Nothing special in here.

./bootstrap
./configure --prefix=/usr
make
make install

Note: You do not have to run ./bootstrap if ./configure script already exists.
Also --prefix=/usr is obviously optional. Library can be installed anywhere.

About

Intel ixgbe 82599 UIO driver

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages