Intel® Ethernet Controller E810 Application Device Queues (ADQ)

Configuration Guide

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

ADQ Overview

Intel® Ethernet 800 Series Network Adapters feature Application Device Queues (ADQ), an Intel technology designed to prioritize application traffic to deliver the performance required for high-priority, network intensive workloads. By performing application-specific queuing and steering, ADQ can improve response time predictability, reduce latency, and improve throughput for critical applications.

ADQ improves performance in the following ways:

  • Dedicated Resources = Increased Predictability

    ADQ leverages multiple Intel hardware technologies to steer, load balance, and isolate incoming application traffic to a set of dedicated application queues. By preventing other traffic from contending for resources with a chosen application's traffic, performance becomes more predictable and less prone to jitter.

  • Efficient Packet Processing = Higher Throughput and Scalability

    ADQ ensures that all packets from a queue are processed in one thread and are for the same application, which enables polling for data to be more performant. For example, the application might accept a few packets, choosing to process them sooner, rather than spending more time accepting many packets, and so taking longer before any processing starts. Queuing attributes can be customized based on an application's traffic profile, for example, significantly reducing the number of interrupts per second.

  • Customizable Traffic Shaping = Application Level QoS Control

    ADQ allows for dedicated application traffic queues, to have custom QoS (for example: rate limits) applied to them, allowing traffic to be shaped per application instead of per class or VM.

  • Optimized Polling = Lower Latency

    Application Dependent Polling Method: ADQ provides hints to the application for each application thread to service incoming and outgoing traffic from a single device queue. By doing so, a queue is drained in order by one thread, minimizing context switching, cache misses, and sub-optimal thread scheduling.

    Application Independent Polling Method (ADQ 2.0): In this mode, an independent poller drains the packets from the device queues and pushes them to socket queues associated with application threads. This avoids the need for application threads to poll the device queues directly. As independent pollers can be used to poll multiple queues, a smaller number of pollers can service a large number of application threads and is more scalable. The poller threads minimize interrupts by polling the device queues, minimize context switches by pre-filling socket queues and avoiding the application threads from going through sleep/wakeup cycles. Although an application need not be modified to use the hints provided by ADQ to align the application threads to device queues in this mode, doing so can further improve the performance.

ADQ Versions 1.0 and 2.0

ADQ version 1.0 was released in 2019. It uses an application dependent (triggered) polling approach. ADQ version 2.0 offers an alternative to application-dependent polling where polling is triggered independent of the application.

  1. ADQ 1.0 (ice driver version 1.8.x and earlier) contains all of the functional support and enhancements for ADQ acceleration. It uses application dependent (triggered) polling which normally requires the application vendor to make a small code change 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. This document will refer to this method as application dependent polling.
  2. ADQ 2.0 (ice driver version 1.9.x and later) supports all of the ADQ enhancements included in previous driver versions and introduces a new independent polling method that does not require the application vendor to make a code change. ADQ 2.0 introduces a new independent polling method which does not require the application vendor to make a code change. ADQ 2.0 enables application agnostic ADQ acceleration, where the queueing and steering for ADQ workloads is done independently from the application threads. This approach enables ADQ acceleration to be configured for broader range of cloud to edge applications and environments. This document will refer to this method as application independent polling. See Independent Pollers (Optional) for more details.
  3. Other new capabilities released in ADQ 2.0 include:
    ADQ 2.0 Feature Description
    Application Independent Polling Polling triggered independent of the application. Queueing and steering is done independently from the application threads.
    ADQ Setup Script (applies to ADQ 1.0 and 2.0) Provides a user-friendly method to input configuration details. Script generates and executes commands in the back end. Debug mode and command logging options, and option to make ADQ configuration persistent across reboots.
    New and enhanced steering modes:

    TC ingress & egress forward to queue

    TC egress set priority Large TC (256 queues), shared queue set

    Enables ADQ in more environments (TC limited, KVM based VMs, K8s pods)
    Kubernetes Plugins (Applies to ADQ2.0) Allows ADQ acceleration for applications running in K8s pods. ADQ container orchestration with device plugins and CNI chaining.
    Acceleration for VirtIO-net based VMs (Applies to ADQ2.0) ADQ provides dedicated HW queues and enhanced polling capability to VMs without direct SR-IOV passthrough interfaces.