Azure backbone 01/17

Presentation deck

Mapping Azure's Backbone with iperf3

A repeatable 24-hour UDP test for long-haul bandwidth stability, jitter, and packet loss.

Yingting Huang · Nov 2025

Why test 02/17

Short checks miss long-haul drift

A tiny, steady UDP stream can reveal packet-loss and jitter patterns that quick spot checks never expose.

Each direction ran for 86,400 seconds at 10 Mbps.

Traffic stayed on Microsoft's backbone through global VNet peering.

The output is comparable data, not anecdotal network feel.

Topology 03/17

One WUS hub, three long-haul spokes

flowchart LR
  WUS[(West US hub<br/>VM + VNet)]
  HK[East Asia / HK<br/>spoke VM]
  KC[Korea Central<br/>spoke VM]
  UAE[UAE North<br/>spoke VM]
  HK <-->|global VNet peering<br/>UDP 5201| WUS
  KC <-->|global VNet peering<br/>UDP 5201| WUS
  UAE <-->|global VNet peering<br/>UDP 5201| WUS
All paths use globally peered Azure VNets, avoiding public egress.
  • Standard_D2s_v5 VMs provided matching endpoints.
  • UDP/5201 was opened so iperf3 could run directly.
  • Every region pair was tested in both directions.
Naming 04/17

The filename is the experiment contract

Each run is named by direction, bandwidth, duration, and timestamp so the pipeline can parse intent without extra metadata.

  • HK-WUS means sender in East Asia, receiver in West US.
  • WUS-HK flips the direction while keeping the same region pair.
  • KC and UAE follow the same source-destination pattern.
  • Completed JSON files land in 24H/ with the direction prefix intact.
Execution 05/17

The test is one durable iperf3 stream

#!/bin/bash
SERVER="${1:-172.16.0.4}"
OUTPUT_DIR="./test_results"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
mkdir -p "$OUTPUT_DIR"
iperf3 -c "$SERVER" -u -b 10M -i 1 -t 86400 -J \
  > "$OUTPUT_DIR/10M_24H_${TIMESTAMP}.json"
Processing 06/17

Raw iperf JSON becomes comparable evidence

flowchart LR
  Json[24H/*.json] --> Parse[parse intervals<br/>+ end summary]
  Parse --> Stats[compute stats:<br/>mean · std · loss · jitter]
  Stats --> Pair[group by<br/>region pair]
  Pair --> Plots[pair + direction<br/>PNG charts]
  Stats --> Report[summary_report.md]
The analyzer turns per-second iperf output into repeatable charts and tables.
  • Intervals become time-series arrays for plotting.
  • The iperf end summary supplies loss and jitter.
  • Pair plots make direction-specific blips visible.
Automation 07/17

The processor makes every rerun cheap

Once the raw captures are in 24H/, one command regenerates the full comparison set.

  • Parsing preserves per-second bandwidth, packet rate, loss, and jitter.
  • Pair grouping keeps inbound-to-WUS and outbound-from-WUS separated.
  • Zoomed y-axes reveal small variance around the 10 Mbps target.
  • Markdown and PNG outputs are ready for a blog, dashboard, or slide deck.
Results 08/17

All six directions held the 10 Mbps target

DirectionMean MbpsLoss %Lost pktsJitter ms
HK→WUS10.00000.00000320.0051
WUS→HK10.00000.0001841430.0059
KC→WUS10.00000.000019150.0066
WUS→KC10.00000.0002952300.0045
UAE→WUS10.00000.0020941,6320.0106
WUS→UAE10.00000.0006194820.0102

10 Mbps UDP over 24 hours; totals are from the article's iperf3 summary table.

Signal 09/17

The signal is loss concentration, not throughput

Throughput stayed flat; the useful difference was that UAE loss was tiny in absolute terms but much higher than HK and KC.

UAE→WUS lost 1,632 packets; WUS→UAE lost 482.

HK and KC stayed close to zero-loss behavior.

Jitter on UAE legs was roughly double the HK/KC range.

Readout 10/17

Three region pairs, three operational reads

HK ↔ WUS

Clean and symmetric enough for a baseline path.

  • 2 packets lost inbound
  • 143 packets lost outbound

KC ↔ WUS

Also clean, with very low loss in both directions.

  • 15 packets lost inbound
  • 230 packets lost outbound

UAE ↔ WUS

Still stable, but the first path to investigate.

  • 1,632 packets lost inbound
  • Wider outbound min/max spread
Visualization 11/17

The plots make small failures visible

Pair charts stack both directions so tiny blips are not hidden by overlapping traces.

  • Green lines represent traffic inbound to West US.
  • Blue lines represent traffic outbound from West US.
  • Separate panels avoid overlap and make direction-specific spikes obvious.
  • A zoomed y-axis shows drift around 10 Mbps instead of flattening it away.
Chart 12/17

HK ↔ WUS stayed visually flat

Stacked bandwidth charts for HK to WUS and WUS to HK over 24 hours, both staying near 10 Mbps with tiny loss.
Pair chart from the article: Hong Kong and West US.
  • Both directions stay tightly centered on 10 Mbps.
  • Packet loss is near-zero in the summary table.
  • This pair is the visual baseline for the deck.
Chart 13/17

KC ↔ WUS looked similarly clean

Stacked bandwidth charts for KC to WUS and WUS to KC over 24 hours, both holding near the 10 Mbps target.
Pair chart from the article: Korea Central and West US.
  • Mean throughput remains 10.0000 Mbps both ways.
  • Loss stays very low: 15 inbound and 230 outbound packets.
  • The chart reinforces symmetry across the pair.
Chart 14/17

UAE ↔ WUS is the path to watch

Stacked bandwidth charts for UAE to WUS and WUS to UAE over 24 hours, showing stable 10 Mbps throughput with higher relative loss.
Pair chart from the article: UAE North and West US.
  • Throughput still holds the 10 Mbps target.
  • Loss is higher than HK and KC in both directions.
  • The outbound leg has the widest min/max spread.
Reproduce 15/17

Reproducing the workflow is deliberately boring

Provision endpoints, run both directions, collect JSON, then regenerate diagrams and the report.

  • Create iperf3 endpoints and open UDP/5201 in each region.
  • Run the 24-hour script once for every direction.
  • Collect JSON reports into the 24H/ folder.
  • Install Python dependencies: matplotlib and numpy.
  • Run process_24h.py to publish tables and PNGs.
Operating model 16/17

Turn the marathon into a regression test

The real value is a repeatable baseline: rerun the same path after routing, region, or workload changes and compare the drift.

The artifacts are deterministic: JSON in, charts and Markdown out.

Direction labels make asymmetry visible without manual cleanup.

A future GitHub Action could publish the same report automatically.

Takeaways 17/17

Five lessons from the 24-hour run

  1. Hold a small UDP stream long enough to expose rare loss and jitter events.
  2. Name artifacts by direction so analysis can stay automatic.
  3. Treat charts as part of the test, not a decorative afterthought.
  4. Use relative differences carefully: UAE was higher-loss, not broken.
  5. Keep the workflow rerunnable so every future change has a baseline.