Intel® Ethernet Controller E810 Application Device Queues (ADQ)

Configuration Guide

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

Independent Pollers Introduction

ADQ 2.0 (ice driver version 1.9.x and later) adds the ability to support ADQ acceleration without application changes, allowing for a broader set of use cases for ADQ acceleration. With application dependent polling mode, a small code change in any multi-threaded application is usually required to provide a hint to the application for optimal application thread to NIC queue alignment. In addition to establishing the application threads with queue connections, busy polling is also triggered and managed by the application threads. ADQ 2.0 adds a feature referred to as independent pollers. Independent pollers builds on standard NAPI polling methods (kthread based NAPI polling) to allow selected ADQ queues to maintain polling for a longer period of time using a configurable timeout value.

Without the restriction for a 1:1 polling application thread to NIC queue alignment, resource grouping/aggregation can be done to optimize number of polling CPU cores. A single independent poller can poll multiple queues, and the ratio of the number of pollers to number of queues is configurable based on the application workload.

Note that the latency/throughput performance for independent poller based ADQ 2.0 may be different than an application dependent polling approach (better in some cases, worse in others). Application dependent polling is still supported for enabled use cases and is not considered deprecated. ADQ 2.0 simply expands the capability and flexibility of ADQ to enable many more environments/use cases.

This enhancement in ADQ 2.0 technology provides several benefits, including:

  • ADQ acceleration without application changes
  • ADQ acceleration of workloads running in containers/VMs
  • Better system utilization through poller aggregation for some usages
  • Per-TC value to configure poller timeout, rather than global busy_​poll timeout
  • Configurable number of RX/TX queue pairs per poller

Independent Poller Kernel Requirements:

  • Linux kernel v5.6 or later for independent poller using ksoftirqd based polling
  • Linux kernel v5.12 or later for independent poller using kthread based napi polling (Recommended)
  • See Install OS and Update Kernel (If Needed) to determine OS and kernel requirements, and for a list of OS distributions with back-ported support for devlink params and kthread based polling.

Per-TC Configurable Parameters:

  • Number of pollers (or number of queue pairs per poller)
  • Poller Timeout