---
title: 'Spritz-Spray: Adaptive Packet Spraying'
url: https://www.emergentmind.com/topics/spritz-spray
type: topic
---

# Spritz-Spray: Adaptive Packet Spraying

Searching arXiv for the cited Spritz paper and closely related records to ground the article in current arXiv metadata.
Spritz-Spray is a sender-based load-balancing algorithm within the Spritz framework for low-diameter networks, specifically Dragonfly and Slim Fly topologies. It shifts adaptive topology-aware routing to endpoints, uses only commodity Ethernet features, and performs fine-grained per-packet spraying across enumerated paths while reusing a lightweight cache of previously good routes. In the reported simulations on networks with over 1000 endpoints, it improves flow completion time relative to ECMP, UGAL-L, and prior sender-based approaches by up to \(1.8\times\), and under link failures it delivers performance improvements of up to \(25.4\times\), without additional hardware support [2602.19567].

## 1. Position within the Spritz framework

Spritz comprises two sender-based algorithms, Spritz-Scout and Spritz-Spray. Scout is the exploration component; Spray is the high-throughput forwarding component. Spritz-Spray reuses the same send logic as Spritz-Scout but simplifies feedback handling, and it reuses the path cache that Scout has already populated with low-latency, low-congestion entropy values (EVs) [2602.19567].

The algorithm is designed to exploit full path diversity in low-diameter topologies by letting endpoints pick among all bounded simple paths, with up to two non-minimal hops. Its design goals are fourfold: to exploit that path diversity, to rely only on standard Ethernet features, to adapt rapidly to congestion and failures while limiting packet reordering, and to fit in a few MiB of endpoint memory for path enumeration and lightweight per-path state. A plausible implication is that Spritz-Spray is best understood not as a stand-alone routing protocol, but as the data-plane execution phase of a sender-resident path-management system.

## 2. Path model and architectural assumptions

Spritz-Spray assumes that endpoints enumerate all bounded simple paths to each destination and store, for each path, an \(EV_1,EV_2\) pair. Switches are assumed to support two ECMP tables—ECMP 1 using \(EV_1\) and ECMP 2 using \(EV_2\)—plus a default minimal-route table. Packet trimming is used to notify the sender immediately of severe congestion, and per-packet ACKs carry back the same EV. Path selection is therefore endpoint-driven, but the forwarding substrate remains commodity Ethernet [2602.19567].

The algorithm is explicitly paired with a sender-based congestion-control scheme: an extended DCTCP controls congestion windows, while Spritz-Spray only drives path selection. This separation is operationally important. It means Spray does not replace end-to-end congestion control; instead, it determines which admissible path carries each packet.

Endpoint memory overhead is reported as up to \(\sim 2.3\) MiB on Dragonfly and \(\sim 8.5\) MiB on Slim Fly to store all EV entries per destination, often less than \(10\) MiB in total. Coarse-grained variants using VLAN tags can reduce memory at the cost of less precise path control. These figures place the algorithm in a regime where per-endpoint path state is substantive but still bounded well below the scale usually associated with switch-resident path orchestration.

## 3. Transmission logic and feedback handling

Spritz-Spray maintains a circular buffer `buf` of “good” EVs with capacity \(8\). For each outgoing packet, the sender first checks whether periodic exploration is due. Every `explore_threshold` packets, it samples a fresh path index via weighted sampling and sends using that EV. Otherwise, if `buf` is non-empty, it pops the front entry and sends the packet with that cached EV; if `buf` is empty, it falls back to weighted sampling over all paths [2602.19567].

The defining behavioral distinction from Scout is that Spray removes a cached EV on use. In the paper’s phrasing, “popping from `buf` on each use forces continuous spraying; in Scout you’d leave `buf` untouched.” Before spraying, Scout fills the \(8\)-entry `buf` with low-latency, low-congestion EVs; Spray then uses that buffer as its initial “spray set.” Because entries are consumed as packets are sent, the connection is distributed across the best-known paths while still periodically re-exploring alternatives.

Feedback logic is deliberately sparse. On an ACK with no ECN, the sender caches the corresponding EV if the buffer is not full. On a timeout, it sets \(w_i \leftarrow 0\) for that path, temporarily disabling future weighted sampling. Spray ignores ECN marks and NACKs in its per-path logic; only timeouts block a path. However, if the global `ecn_rate` exceeds \(0.9\), the sender biases strongly back to the minimal path by scaling \(w_0\) with `min_bias_factor`. This suggests a design that treats packet-level path liveness and recent ACK success as the primary control signals, with ECN entering only as a network-wide fallback bias rather than as a fine-grained per-path penalty.

## 4. Mathematical model and simulation parameterization

Each path \(EV\_entry_i\) is associated with a one-way latency \(lat_i\). The initial path weight is defined from \(lat_i\) and \(lat_{\max}=\max_j lat_j\) as
\[
w_i = \frac{lat_{\max}}{lat_i}.
\]
In practice, all \(w_i\) are scaled by \(w_{\mathrm{scale}}=3\) to accentuate preference for shorter paths, while the longest path always has \(w_i=1\). Packet spraying then follows
\[
\Pr[\text{select path }i] = \frac{w_i}{\sum_j w_j}.
\]
Timeout detection uses
\[
T_{\mathrm{RTO},i} = \mathit{RTT}_i + 4\,\sigma_{\mathrm{RTT},i}.
\]
Switch ECN marking is RED-style, with linearly rising probability between
\[
K_{\min}=0.2\times\mathrm{BDP},\qquad K_{\max}=0.8\times\mathrm{BDP}.
\]
These relations define the algorithm’s bias toward shorter paths, its probabilistic path selection, and its failure response [2602.19567].

The reported packet-level simulations use the following principal parameters.

| Parameter | Value |
|---|---|
| Link speed | \(400\) Gbps |
| Local link latency | \(25\) ns |
| Global link latency | \(500\) ns |
| Switch latency | \(500\) ns |
| Queue size (per port) | \(1\times\mathrm{BDP}\) (\(\approx 88\) pkts DF, \(92\) pkts SF) |
| \(K_{\min},K_{\max}\) | \(0.2,\,0.8\) (\(\times \mathrm{BDP}\)) |
| Packet size | \(64\) B header + \(4096\) B payload |
| Spritz-Spray buffer size | \(8\) entries |
| Explore threshold | \(44\) packets (\(\sim 0.5\mathrm{BDP}\)) |
| ECN threshold | \(8\) packets (\(\sim 0.1\mathrm{BDP}\)) |
| \(w_{\mathrm{scale}}\) | \(3.0\) |

Although the ECN-threshold update rule is part of Scout rather than Spray, it is relevant because Spray explicitly leverages the path cache that Scout prepares. In Scout, ECN-marked ACKs increment `ecn_counts_i`; if the count exceeds `ecn_threshold`, the path is removed from `buf`. Spray then inherits a cache already filtered by Scout’s exploration logic.

## 5. Empirical performance

The paper reports results across microbenchmarks, structured traffic patterns, AI collectives, web-search datacenter traces, and failure scenarios. In the “motivation” \(4\) MiB flow example, UGAL-L completes in \(199\,\mu\)s, OPS(w) in \(173\,\mu\)s, Spritz-Spray(u) in \(121\,\mu\)s, and Spritz-Spray(w) in \(113\,\mu\)s, corresponding to a \(1.8\times\) speedup over UGAL-L [2602.19567].

Under permutation traffic, Spritz-Spray(w) reduces median FCT by \(10\)–\(15\%\) versus OPS(w) and cuts packet drops by \(20\)–\(30\%\). Under adversarial targeted-congestion overload, it cuts median FCT by \(25\)–\(35\%\) and \(p99\) FCT by \(30\)–\(45\%\) versus UGAL-L. In a \(32\times 4\) MiB incast plus \(1023\)-flow bystander permutation, incast \(p99\) remains approximately \(2.75\) ms for all schemes because the bottleneck is DCTCP, but bystander \(p99\) falls from \(249\,\mu\)s with Valiant to \(204\,\mu\)s with Spritz-Spray(w), a tail-latency improvement of \(17.9\%\), and retransmissions drop from \(4526\) to \(3323\).

For AI collectives on \(128\) endpoints with ECMP background traffic, Spritz-Spray(w) is \(1.1\times\)–\(1.2\times\) faster than the next best method, OPS(w), on butterfly allreduce, while dropping \(30\)–\(40\%\) fewer packets. On alltoall, it remains within \(5\)–\(10\%\) of OPS(w) on Slim Fly and is best on Dragonfly. On a full-load \(1\) ms web-search trace with uniform small flows, minimal routing and UGAL-L are slightly favored on mean FCT, but Spritz-Spray(w) still yields the fewest drops; with stronger minimal bias, it matches or outperforms UGAL-L even on tiny-flow workloads.

Failure handling is one of the strongest reported results. With \(2\%\) random link kills, Spritz-Spray(w) outperforms Valiant and OPS(w) by \(2.5\times\)–\(25.4\times\) in median FCT across permutation, allreduce, and trace workloads, while reducing lost packets by up to two orders of magnitude. These data indicate that the algorithm’s timeout-driven path suppression is especially effective when path availability changes abruptly.

## 6. Implementation requirements and limitations

Spritz-Spray requires only standard ECMP, multiple ECMP tables or VLAN-selectable tables, per-port ECN with RED behavior, packet trimming support, and per-packet ACKs. The paper explicitly states that it needs no custom ASICs or proprietary switch logic [2602.19567].

The principal trade-off is packet reordering. Spritz-Spray incurs more reordering than flowlet schemes, but far less than uniform OPS. Modern transports such as UE, SRD, and Falcon are identified as reordering-tolerant; for legacy transports, increasing minimal-path bias is suggested. The tuning parameters `explore_threshold` and `ecn_threshold` depend on BDP, and the reported defaults are calibrated to \(400\) Gbps and \(500\) ns global-link latency.

Several limitations are explicit. Tabula-rasa workloads of tiny flows may temporarily lose to minimal routing. Timeout recovery depends on accurate RTT measurement, so very volatile RTTs can mis-block paths. Per-packet ACK support adds approximately \(1\%\) overhead. These caveats constrain the settings in which per-packet spraying is unambiguously beneficial, particularly when workloads are dominated by very short flows or transport stacks are less tolerant of reordering.

## 7. Terminological disambiguation

The term “Spritz-Spray” in this context denotes the packet-spraying algorithm introduced in “Spritz: Path-Aware Load Balancing in Low-Diameter Networks” [2602.19567]. It should not be conflated with unrelated spray-physics usages of similar wording in other arXiv records, including intranasal droplet-delivery optimization [1909.11960], agricultural droplet impaction on leaves [1506.04258], underwater bubble-collision aerosol production [2310.16551], and flash freeze–thaw in two-fluid atomizing sprays [2601.13716].

That distinction matters because the networking algorithm uses “spray” in the established packet-routing sense: distributing packets across multiple admissible paths. The other cited works use spray to denote physical atomization, impaction, aerosol generation, or droplet thermodynamics. The shared vocabulary is therefore homonymous rather than methodological.

Source: https://www.emergentmind.com/topics/spritz-spray