Multi Channel DMA Intel® FPGA IP for PCI Express* User Guide

ID 683821
Date 7/14/2023

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

8.2.1. Architecture

Figure 50. MCDMA Driver Architecture


This is the PCIe end point kernel module provided by DPDK framework and on top of this, there are some pathes added to support MSI-X and SRIOV features. By using PCIe, sysfs interrupt framework utilities, this module reads allows the user space to access the device.

Following are the functionalities supported by using this module:
  • Probes and exports channel BARs to User space
  • Supports Interrupt notification/clearing
  • Enable SRIOV functionality and set virtual functions

igb_uio kernel module does not support IOMMU programming.


vfio-pci is the base kernel module, allows you to access the device and allows IOMMU programming by using ioctl interface. If you want to enable the VFs by using vfio-pci, you may need to use the kernel version>5.7


This is a poll mode driver which implements the APIs to perform channel management, device managmenet and also DMA on both H2D and D2H directions. part This module exposes the device as ethdev interface.

Example Test Application

aUsing DPDK Environment Abstraction Layer (EAL) utilities to perform the memory management and device management.

In this application you are using to continuously sending/receiving data traffic from/to device, use the following command line arguments as the input.
  • Total message sizes/ time duration
  • Packet size per descriptor
  • Write/Read
  • Completion reporting method
  • Number of channels

The test application runs multiple threads for accessing the DMA channels. It also has performance measurement capability. Based on the number threads being used and number of channels being processed, queues are scheduled on threads.


The testpmd application can also be used to test the DPDK in a packet forwarding mode.

The following command line arguments are used to initiate data transfer from Host to device or device to Host:
  • Forwarding mode
  • Number of CPU cores
  • TX and RX channels per port
  • Number of packets per burst
  • Number of descriptors in the RX and TX ring
  • Maximum packet length
Note: testpmd support is provided only in CentOS and not provided in Ubuntu.