System Requirements

There are some prerequisites when using QATlib. When running on newer Linux distributions many of these are taken care of.

  • Required BIOS parameters must be enabled.

  • Platform must have a supported Intel® QAT device. This includes 4xxx, 401xx, 402xx, 420xx, and 6xxx.

  • Firmware must be available for the Intel® QAT device.

  • Kernel drivers must be running and properly bound to the Intel® QAT Physical and Virtual Functions (PF and VF).

  • Required Linux boot parameters must be configured.

The following sections provide the details to verify all prerequisites listed above.

BIOS Configuration

To properly use the QATlib library, the Intel VT-d and SR-IOV parameters must be enabled in the platform BIOS. Consult your platform guide for details on enabling these parameters. If using an Intel Best Known Configuration (BKC) these parameters are usually enabled by default.

The status of both parameters can be verified in the BIOS settings. Although the specific location depends on the BIOS vendor navigation menu, these parameters are usually found in the following locations:

Intel VT-d and SR-IOV parameters location in BIOS

Intel VT-d

SR-IOV

EDKII Menu
-> Socket Configuration
-> IIO Configuration
-> Intel VT for Directed I/O (VT-d)
-> Intel VT for Directed I/O
EDKII Menu
-> Platform Configuration
-> Miscellaneous Configuration
-> SR-IOV Support

Kernel/Firmware Requirements

Refer to QAT Feature Compatibility and Version Requirements in the QATlib Release Notes for details on required kernel/firmware version.

Important

Intel recommends using the latest available QATlib release and the latest available in-tree firmware for your platform. The table below lists minimum versions for platform enablement and compatibility planning.

For easier customer customization, use the simplified mapping table below. These rows describe minimum versions for platform enablement; specific features may require newer versions.

Platform to QATlib/Kernel/Firmware Mapping

Platform

Device

Minimum QATlib

Minimum Kernel

Minimum Firmware

4th and 5th Gen Intel Xeon Scalable Processors

4xxx

20.08+

v5.15.3+

Any

401xx device family (uses qat_4xxx firmware family)

401xx

22.07+

v5.19+

Any

Intel Xeon 6 (SRF/GNR)

402xx

24.02+

v6.4+

1.2.40+

Intel Xeon 6 (GNR-D)

420xx

24.02+

v6.8+

1.0.0+

Intel® Xeon® 7 (DMR)

6xxx

26.08+

v6.16+

Pending

Note

For consistency with QAT Firmware Available, 401xx devices use the qat_4xxx firmware family and 420xx devices use the qat_420xx firmware family.

Supported Devices

The following platforms are supported by QATlib:

Supported Platforms

GEN

Device

Kernel Module

PF Did

VF Did

FW Files

4

4xxx

qat_4xxx

4940

4941

qat_4xxx.bin
qat_4xxx_mmp.bin

4

401xx

qat_4xxx

4942

4943

qat_4xxx.bin
qat_4xxx_mmp.bin

4

402xx

qat_4xxx

4944

4945

qat_402xx.bin
qat_402xx_mmp.bin

5

420xx

qat_420xx

4946

4947

qat_420xx.bin
qat_420xx_mmp.bin

6

6xxx

qat_6xxx

4948

4949

qat_6xxx.bin
qat_6xxx_mmp.bin

Verify the platform contains a supported 4xxx Intel® Communications device by running the below command:

echo `(lspci -d 8086:4940 && lspci -d 8086:4941 && lspci -d 8086:4942 && lspci -d 8086:4943 && lspci -d 8086:4944 && lspci -d 8086:4945 && lspci -d 8086:4946 && lspci -d 8086:4947 && lspci -d 8086:4948 && lspci -d 8086:4949 ) | wc -l` supported devices found.

If supported 4xxx Intel® Communications devices are found, you should get an output similar to the following:

4 supported devices found.

Firmware

Note

This step is required when running on host system. It does not apply when running in a virtual machine as the firmware is loaded on the host.

Verify the supported firmware for your platform is available in the /lib/firmware directory by running the below commands:

ls /lib/firmware/{qat_4xxx,qat_402xx,qat_420xx,qat_6xxx}.bin* 2>/dev/null
ls /lib/firmware/{qat_4xxx,qat_402xx,qat_420xx,qat_6xxx}_mmp.bin* 2>/dev/null

The output will look like:

/lib/firmware/qat_4xxx.bin
/lib/firmware/qat_4xxx_mmp.bin

Tip

If the firmware images are not present, perform the following steps:

  1. Download the firmware files.

    cd ~
    wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/intel/qat/qat_4xxx.bin
    wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/intel/qat/qat_4xxx_mmp.bin
    wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/intel/qat/qat_402xx.bin
    wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/intel/qat/qat_402xx_mmp.bin
    wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/intel/qat/qat_420xx.bin
    wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/intel/qat/qat_420xx_mmp.bin
    sudo cp qat_4xxx*.bin qat_402xx*.bin qat_420xx*.bin /lib/firmware
    rm qat_4xxx*.bin qat_402xx*.bin qat_420xx*.bin
    
  2. Update initramfs.

    sudo dracut --force
    

    Note

    dracut is not used on some distributions such as Ubuntu. The following steps can be ran instead.

    sudo update-initramfs -u
    sudo rmmod qat_4xxx
    sudo rmmod intel_qat
    sudo modprobe intel_qat
    sudo modprobe qat_4xxx
    

Kernel Drivers

Verify the appropriate kernel drivers are loaded in the host and/or the guest system(s).

Note

Refer to Supported Devices for appropriate kernel module for your device.

Host System Kernel Drivers

When running on the host system, use the following command to verify the kernel drivers are present:

lsmod | grep qat

If the kernel drivers are found, you should get an output similar to the following:

qat_4xxx               16384  0
intel_qat             172032  1 qat_4xxx

If the kernel modules are not found, install them using the following commands:

sudo modprobe intel_qat
sudo modprobe qat_4xxx

Tip

If the modprobe commands fail to install the kernel drivers, verify the kernel has been configured to include these modules by running the below command:

cat /boot/config-$(uname -r) | grep -i qat

You should see the following output:

CONFIG_CRYPTO_DEV_QAT=m
CONFIG_CRYPTO_DEV_QAT_DH895xCC=m
CONFIG_CRYPTO_DEV_QAT_C3XXX=m
CONFIG_CRYPTO_DEV_QAT_C62X=m
CONFIG_CRYPTO_DEV_QAT_4XXX=m
CONFIG_CRYPTO_DEV_QAT_402XX=m
CONFIG_CRYPTO_DEV_QAT_420XX=m
CONFIG_CRYPTO_DEV_QAT_6XXX=m
CONFIG_CRYPTO_DEV_QAT_DH895xCCVF=m
CONFIG_CRYPTO_DEV_QAT_C3XXXVF=m
CONFIG_CRYPTO_DEV_QAT_C62XVF=m

Important

For Debian-based systems like Ubuntu, QAT (QuickAssist Technology) kernel modules may be available in an additional package. Install it with:

sudo apt update
sudo apy upgrade -y
sudo apt-get install -y linux-modules-extra-$(uname -r)

Lastly, verify the appropriate kernel driver is bound to each Intel® QAT Physical Function (PF) by running the following command:

echo `(lspci -vvv  -d 8086:4940 && lspci -vvv -d 8086:4942 && lspci -vvv -d 8086:4944 && lspci -vvv -d 8086:4946 && lspci -vvv -d 8086:4948 && lspci -vvv -d 8086:4949) | grep "Kernel driver"`

You should see an output similar to the following:

Kernel driver in use: 4xxx Kernel driver in use: 4xxx Kernel driver in use: 4xxx Kernel driver in use: 4xxx Kernel driver in use: 4xxx Kernel driver in use: 4xxx Kernel driver in use: 4xxx Kernel driver in use: 4xxx

Note

Refer to Supported Devices for appropriate kernel module for your device.

Important

If you are not getting any results from the above command, it means the QAT kernel driver is not bound to the Intel® QAT PF.

This could be due to the current kernel version in the system does not support the particular Intel® CPU SKU in your system.

Try upgrading the kernel version to 5.19+.

Guest System Kernel Drivers

When running on the guest system, use the following command to verify the kernel drivers are present:

lsmod | grep vfio_pci

If the kernel module is not found, install it using the following command:

sudo modprobe vfio_pci

Lastly, verify the vfio_pci kernel driver is bound to each Intel® QAT Virtual Function (VF) by running the following command:

echo `(lspci -vvv  -d 8086:4941 && lspci -vvv -d 8086:4943 && lspci -vvv -d 8086:4945 && lspci -vvv -d 8086:4947 && lspci -vvv -d 8086:4949) | grep "Kernel driver"`

You should see an output similar to the following:

Kernel driver in use: vfio-pci Kernel driver in use: vfio-pci Kernel driver in use: vfio-pci Kernel driver in use:

Linux Boot Parameters

There are two boot parameters that are required.

  • intel_iommu=on

  • vfio-pci.ids=[QAT VF DID]

Verify these settings are enabled by running the following command:

grep -E 'intel_iommu=on' /proc/cmdline && grep -o 'vfio-pci.ids=[^ ]*' /proc/cmdline | grep -E '8086:4941|8086:4943|8086:4945|8086:4947|8086:4949'

If they are not enabled, the following steps can be used to turn it on.

Instructions for Debian Based Distros

If using a Debian based distribution, run the following commands:

  1. Open the grub file.

    sudo vi /etc/default/grub
    
  2. Update the GRUB_CMDLINE_LINUX line by adding intel_iommu=on.

  3. Update the GRUB_CMDLINE_LINUX line by adding vfio-pci-ids=8086:4941.

    Note

    In the command above we added the 8086:4941 device id. Depending on your system, this ID could also be 8086:4943, 8086:4945, 8086:4947, or 8086:4949.
    Refer to Supported Devices section of QATlib Users Guide for additional details.
  4. Load the changes done.

    sudo update-grub
    
  5. Reboot the system.

    sudo shutdown -r now
    

Instructions for RHEL/CentOS/Fedora

If using RHEL, CentOS or Fedora, run the following commands:

  1. Update the kernel boot parameters.

    sudo grubby --update-kernel=ALL --args="intel_iommu=on"
    sudo grubby --update-kernel=ALL --args="vfio-pci.ids=8086:4941"
    

    Note

    In the command above we added the 8086:4941 device id. Depending on your system, this ID could also be 8086:4943, 8086:4945, 8086:4947, or 8086:4949.
    Refer to Supported Devices section of QATlib Users Guide for additional details.
  2. Reboot the system.

    sudo shutdown -r now