Intel® Ethernet Controller E810 Application Device Queues (ADQ)

Configuration Guide

ID 609008
Date 04/03/2023
Version 2.8
Document Table of Contents

Update Kernel (If Needed)

Note:Kernel versions required for full ADQ support with older operating systems, unless the OS includes back-ported ADQ kernel support (and devlink param support).
  • ice version 1.7.x and earlier requires LTS 4.19.x or later.
  • ice version 1.8.x and later requires LTS 5.6 or later, or kernel with devlink param support for per-TC flow director.
  • ice version 1.9.x and later requires LTS 5.6 or later, or kernel with devlink param support for per-TC flow director and independent poller. For independent poller using kthread-based napi poll, LTS 5.12 or later is required.

Refer to Install OS for determining if your OS includes ADQ kernel support or if a kernel update is required.

If kernel update is required, follow these steps:

  1. Clone the kernel using git. git clone http://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
  2. Checkout to use long term stable branch (based off v5.12). git checkout -b local_5.12 v5.12

    OR

    git reset --hard v5.12
  3. Install the necessary packages to compile the kernel.

    Package installation can be done through several methods that are relevant to the base distribution, such as yum/dnf/apt-get. Packages needed are gcc, bc, make, git, ncurses-devel, kernel-devel, kernel-headers, openssl, openssl-devel, binutils, bison, flex, and network-scripts.

    Some kernel/arch combinations might require a package with the development version of libelf (for example, libelf-dev, libelf-devel, or elfutils-libelf-devel).

    Example (RHEL):

    yum install -y gcc bc make git ncurses-devel kernel-devel kernel-headers openssl \ openssl-devel binutils bison flex network-scripts elfutils-libelf-devel
  4. Compile and install the kernel.
    1. cd to the kernel directory.
    2. For operating systems based on older kernels (for example, RHEL 7.x is based on the kernel 3.10.x series), it might be best to use a config file that is based off of a closer kernel series (for example, from https://rpmfind.net/linux/RPM/fedora/29/x86_64/k/kernel-4.18.16-300.fc29.x86_64.html or newer).

      Example:

      rpm2cpio kernel-core-4.18.16-300.fc29.x86_64.rpm | cpio --extract \ --to-stdout ./lib/modules/4.18.16-300.fc29.x86_64/config > .config make olddefconf

      For operating systems based on later kernel versions (for example, RHEL 8.x), using the inbox kernel .config as a starting point should be sufficient.

      Example:

      make olddefconfig
    3. Ensure these lines are in the .config file (note the inbox ice driver should NOT be built in the kernel, as the inbox driver can cause issues). CONFIG_NET_SCH_MQPRIO=m CONFIG_NET_ACT_MIRRED=m CONFIG_NET_CLS_FLOWER=m CONFIG_CGROUP_NET_PRIO=y CONFIG_NET_RX_BUSY_POLL=y CONFIG_SMP=y CONFIG_ICE=n CONFIG_NR_CPUS_DEFAULT=8192 Note:Additional config flags that might be required for specific applications: CONFIG_BPF=y CONFIG_EPOLL=y CONFIG_NET_DEVLINK=y CONFIG_XDP_SOCKETS=y

      Use Cases:

      • CONFIG_​BPF is needed for applications that use the SO_​ATTACH_​REUSEPORT_​CBPF socket option (such as NGINX).
      • CONFIG_​EPOLL is needed for applications that use epoll based syscall from user-space (example: using NGINX without ADQ and busy_​poll, for performance comparisons to ADQ).
      • CONFIG_​NET_​DEVLINK is needed for devlink param commands to configure per-TC inline flow director and independent poller
      • CONFIG_​XDP_​SOCKETS is needed for AF_​XDP.
      Note:Note that sed can also be used to make these changes. For example: sed -i -r 's/^(CONFIG_NR_CPUS=.*|# CONFIG_NR_CPUS is not set)/ CONFIG_NR_CPUS=8192/' .config sed -i -r 's/^(CONFIG_ICE=.*|# CONFIG_ICE is not set)/CONFIG_ICE=n/' .config
    4. Compile. make -j"$(nproc)" make -j"$(nproc)" modules make -j"$(nproc)" modules_install make -j"$(nproc)" install make -j"$(nproc)" INSTALL_HDR_PATH=/usr/local headers_install Note:$(nproc) = number of logical cores. Note:CONFIG_​NR_​CPUS_​DEFAULT might get set back to the default value of 64 on 4.x kernels after comping the kernel. On 5.x and later kernels, the value of 8192 should remain applied after the kernel is compiled.
  5. Reboot to the new kernel.