Read the paper ↗

Tail-Contagion

µs / s
0.00 µs
LAST BATCH —

Waiting for a completed batch.

Packets delivered

0packets

Arrived at the output bin

Victim missed deadlines

0packets

4 µs deadline

Datapath utilization

—%

Busy time / reserved core time

Scheduling policy

Adversary's workload

Packet size
StandardThorough
SilentFull load
Traffic pattern

Datapath settings

Tail-Contagion

Keep Victim's packets on time while both senders share a datapath core. Change Adversary's traffic volume, packet size, and extra processing, then compare scheduling policies.

Packet limit
Every packet costs one token, regardless of size or extra processing. Equal small packets suit this policy.
Byte limit
A 1,024 B packet costs sixteen times as many tokens as a 64 B packet. This policy works better when packet sizes differ.
Virtuoso
Each sender pays for its CPU work. Caps from 1–5 µs and refills from 1–2 µs keep misses near the baseline. Larger caps admit more work but increase interference; slower refills add waiting and slightly reduce utilization.
Dedicated
Victim and Adversary each reserve a datapath core. An idle private core cannot help the other sender.

Finished packets wait in their batch slots until every packet in the batch has finished. Their deadline timers keep running. The whole batch is then released to the output belt; delivered counts increase when packets reach the bin.

This calibrated teaching model illustrates policy tradeoffs rather than a literal token bucket or hardware measurements. At full adversary traffic, optimal Virtuoso targets about 4% victim misses; Dedicated about 1%, at half the utilization. Packet and byte limits can approach 30%. Counts and utilization come from the live packet trace; short runs vary. Only Victim has a deadline. Changing settings starts a fresh trace.