Skip to content

Chapter 20: Ultra Ethernet Consortium (UEC) · Part 7 of 10

Act 6 -- Native Packet Spraying: Multipath Without RSHP

RoCEv2 per-packet spraying (RSHP in Spectrum-X, Ch6 Act 6) requires NIC firmware support to vary the source UDP port on each packet, so ECMP hashes differently per packet. The switch sees different 5-tuples and distributes across paths. But this is an approximation: the hash function distributes with statistical fairness, not precise per-packet round-robin.

UEC's multipath mechanism is specified at the transport layer. The sender explicitly assigns packets to paths. The protocol defines a set of path IDs that correspond to available ECMP next-hops. The sender NIC cycles through available path IDs, assigning successive packets to successive paths. The receiver uses Message ID and Packet Offset to reassemble regardless of arrival order.

The path assignment is in the packet header as a hint to ECMP-aware switches. A UEC-capable switch can use the path hint field for forwarding decisions rather than (or in addition to) the 5-tuple hash. This gives deterministic path assignment rather than hash-probabilistic assignment.

Packet spraying: hash-based ECMP (RSHP) vs UEC native multipath with NPM
No path feedback -- ECMP hash distributes probabilistically across all paths
Spine-0
?
Spine-1
?
Spine-2
?
Spine-3
?
Spine-4
?
Spine-5
?
Spine-6
?
Spine-7
?
Message ID 77 -- 16 packets assigned to spines
pkt#0
S0
pkt#1
S0
pkt#2
S3
pkt#3
S1
pkt#4
S6
pkt#5
S6
pkt#6
S2
pkt#7
S0
pkt#8
S3
pkt#9
S7
pkt#10
S6
pkt#11
S1
pkt#12
S0
pkt#13
S4
pkt#14
S3
pkt#15
S6
Packets per spine:
4
S0
2
S1
1
S2
3
S3
1
S4
0
S5
4
S6
1
S7
RSHP (hash-based)
Hash varies source UDP port per packet. Statistical distribution. Blind to actual path load. Spine-0 and Spine-6 receive packets despite >80% utilisation.
UEC with NPM
Sender reads NPM utilisation per spine before assigning path IDs. Overloaded spines (S0, S6) excluded. Load distributed only across low/medium utilisation paths.

Explicit path awareness

UEC switches export path utilisation metrics to endpoints via a dedicated feedback channel (defined in the UEC spec as the Network Performance Monitor, NPM). The NIC can receive per-path utilisation data from the fabric and dynamically select less-loaded paths. This closes the loop: the NIC knows which paths are congested before sending, not after.

In a 32-node BasePOD with 8 spine switches, each DGX node has 8 ECMP paths to every other node. Under UEC with NPM, the sending NIC receives per-spine utilisation from each spine switch and assigns gradient AllReduce packets to the least-loaded spine at the time of sending. This is more effective than GLB (which learns about congestion from CNPs, after the fact) because the information arrives before the packet is sent.

Receiver buffer requirements

Out-of-order arrival under multipath spraying requires receiver buffer to hold the maximum in-flight data for any given message. For a 256KB gradient block sprayed across 8 paths, the maximum out-of-order window is the bandwidth-delay product across one path times the number of paths minus one. At 400G x 8 paths x 2us RTT, the maximum buffering per message is approximately 800 KB. UEC NICs must provision receive buffers accordingly -- this is a silicon cost that does not exist in ordered RoCEv2.