Skip to content

Congestion Control Deep Dive · Part 6 of 9

Act 6 — UEC CC Revisited: The 1-RTT Architecture

Chapter 20 introduced UEC's congestion control framework. Now that you understand DCQCN internals, the UEC CC architecture differences are precise and meaningful.

The C-flag ACK mechanism

UEC CC's fundamental departure from DCQCN is the C-flag in the ACK. In DCQCN, the congestion signal travels as a separate packet (CNP) generated by the receiver NIC in response to an ECN-marked packet. Two separate messages, two separate RTTs.

UEC CC embeds the congestion signal in the ACK that would have been sent anyway:

UEC ACK format:
[ standard ACK fields ][ C-flag: 1 bit ][ CE-count: 8 bits ][ RTT-echo: 32 bits ]

C-flag = 1  if receiver saw ECN CE mark on the corresponding data packet
CE-count    = number of CE-marked packets in this acknowledgement window
RTT-echo    = timestamp echoed from the data packet (sender can compute RTT)

This collapses the feedback loop from 2 RTTs to 1 RTT. The sender reads the C-flag in the ACK it was already waiting for and immediately adjusts its rate. No extra CNP packet, no separate priority queue for CNP delivery, no CNP-DSCP trust misconfiguration possible.

NPM switch telemetry integration

UEC CC goes further by incorporating NPM (Network Performance Monitoring) switch telemetry. NPM-capable switches (Spectrum-4 with UEC firmware, Tofino-based UEC switches) export per-flow queue depth and drop probability to the sender as out-of-band telemetry.

This means the sender has three input streams:

  1. ACK C-flag (end-to-end congestion signal, 1-RTT latency)
  2. NPM telemetry (per-hop queue state, sub-RTT latency for same-rack switches)
  3. RTT measurement (path latency, 1-RTT latency)

The UEC CC rate controller runs a weighted combination of these inputs. Under ideal conditions (NPM-capable fabric, 1-RTT feedback), UEC CC can react faster than any ECN-based scheme.

The rate table architecture

Unlike DCQCN's continuous alpha-based calculation, UEC CC implementations use a rate table: a lookup table that maps (C-flag, CE-count, RTT-delta) → rate-multiplier. The rate table is programmed into NIC firmware and can be updated via ethtool without a driver reload. This makes UEC CC behaviour field-tunable without firmware changes.

# UEC CC rate table example (conceptual -- exact commands vendor-specific):
ethtool --set-cc eth0 algorithm uec
ethtool --set-cc eth0 rtt_target 5000   # target RTT in nanoseconds
ethtool --set-cc eth0 decrease_factor 2 # rate / 2 on max congestion signal

At the time of writing, UEC CC is available in AMD Pensando Salina NICs (Pollara 400), and NVIDIA has indicated UEC CC support in future ConnectX firmware. DCQCN remains the production-deployed algorithm on ConnectX-7 today.