Intel® Ethernet Controller E810 Application Device Queues (ADQ)
Configuration Guide
Configure Intel® Ethernet Flow Director Settings
Linux traffic control filtering allows an application to be mapped to a set of specified queues on an interface, using dedicated queue sets (also called traffic classes) for application traffic with ADQ. Intel® Ethernet Flow Director allows for incoming connections to be distributed and load balanced across these application queues, within the queue set, in a more reliably defined way than the default RSS hash. This is important to the inner workings of ADQ because it is recommended that no two application threads are busy polling on the same queue.
There are two options for Intel® Ethernet Flow Director configuration in the ice driver:
The following variables are used in the examples in this section:
$iface | The interface in use (PF). |
$iface_bdf | The network interface BDF notation (Bus:Device.Function) used by devlink (PF). |
$port | The starting port of the application. |
$queues | The number of queues in the TC. |
$tc1offset | The offset for the application TC (for example, if TC0 has 2 queues, TC1 offset would be 2). |
Option 1: channel inline or per-TC inline
Intel® Ethernet Flow Director distributes connections to queues in a round-robin fashion. This is recommended for ADQ-enabled, single-instance, multi-threaded applications that manage their own worker thread load distribution (such as Memcached).
ice version 1.7.x (and earlier):
channel inline: Intel® Ethernet Flow Director is configured using a global private flag and gets applied to all TCs on the interface:
ice version 1.8.x (and later):
per-TC inline: Intel® Ethernet Flow Director is configured using a per-TC configuration and gets applied to only the queues within the TC specified for the interface. A different devlink command is required for each TC. Example for tc1:
Option 2: ntuple
Intel® Ethernet Flow Director assigns perfect filters to direct each application TCP port to a specific queue within the application TC range. This is useful for applications (such as Redis) where each instance of the application runs a single worker thread, and load balancing is done either manually or through a separate load balancer application.
Assignments as a whole can be deleted: