For detailed explanation of FPGA-based host bypassing: Paper
For detailed explanation of GPU-based host bypassing: Paper
The project consists of three parts:
- a FPGA project. see: FPGA readme
- a GPU Project. see: GPU readme
- a modified version of DPDK for enabling host bypassing: DPDK readme
- build the FPGA project according to its readme and load the FPGA design on the FPGA. see: FPGA readme
- reboot the server. This is needed, as the PCIe-configuration of the FPGA has changed.
- load any kernel module for the FPGA. This is not used at all but needed to make the FPGA physical address space accessible and allow the FPGA to write on the registers of the NIC (bus master). for details: Loading the FPGA kernel module
- Load the igb_uio kernel module for the NIC you want to use. Update the memory addresses in the sample DPDK app and compile it and start it. for details: DPDK readme
We recomend the use of the IGB_UIO kernel module which wille be compiled by the dpdk library anyway. Any other kernel module, supporting bus mastering, should work as well. For loading the kernel Module (assuming the FPGA PCIe bus address to be 0000:65:00.0):
echo "10ee 9038" > /sys/bus/pci/drivers/igb_uio/new_id
# if this is not working, execute the steps in the dpdk readme first to load the igb_uio kernel module
and if needed for unbinding/rebinding:
echo -n 0000:65:00.0 > /sys/bus/pci/drivers/igb_uio/unbind
echo -n 0000:65:00.0 > /sys/bus/pci/drivers/igb_uio/bind
- Compile and load the special CUDA kernel module to enable GPU memory exposing. see: GPU readme
- compile the CUDA code for the GPU according to its readme. see: GPU readme
- Load the igb_uio kernel module for the NIC you want to use. Update the memory addresses in the sample DPDK app and compile it and start it. for details: DPDK readme
- start a) the CUDA application and b) the DpdkDriver in parallel (this order).
Currently, the following Network Interface Cards are supported:
- Intel 82599
- NVIDIA Quadro RTX 4000