Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Benchmarks: x86 and Graviton

Aeron transport latency between two hosts on AWS. Not SBE codec benchmarks (those are sbe/BENCHMARKS.md). Tables, rows and data files: md-dpdk/BENCHMARKS.md.

Terms: deployment glossary, network and DPDK glossary.

The DPDK rows are this repository’s proof-of-concept transport. No other kernel-bypass product was run on this hardware.

What the runs support

findingscopeKubernetes
DPDK had a lower p50 than the best kernel arm in every run with both, at idle and under load; its max was lower at 288 B 1 M msgs/sc9g.2xlarge, c7i.4xlarge, c7i.metal-24xl, one run eachDPDK needs node setup: Kubernetes
Graviton kernel UDP with interrupt moderation off: put the data NICs’ IRQs on a core of their own. The other two placements lost at 1 M msgs/s of 288 Bc9g.2xlarge, G1; on a second pair (G2) this arm lost in 1 of 5 repsnode-level: IRQ affinity is host-wide
One AWS flow carried at most 7.75–7.77 Gbit/s of Aeron frames, kernel and DPDK alike. Spread a heavier stream over several channelsc7i.4xlarge; c9g.2xlarge reached at most 685,574 msgs/s at 1,344 Bapplication config, in the pod
Not compared: Graviton against x86, metal against a VM, interrupts against busy pollingdifferent pairs and builds, or arms that differ in several settings

Figures, rows and every setting that did not separate: conclusions. ergon-io’s x86 and Graviton results: io.

Cost per hour

A pair is two instances. us-east-1, Linux; on-demand list prices, and spot prices as of 2026-10-15 (instances.vantage.sh), as estimate.py holds them (lines 60–72). Spot moves by the hour and the zone.

pairphysical cores eachon demand, $/hspot, $/hcommitted run
c7i.2xlarge4 (8 vCPUs)0.7140.400aws-20261014-160247 (1 rep)
c7i.4xlarge8 (16 vCPUs)1.428not recordedrounds 6–7, EKS
c7i.metal-24xl48 (96 vCPUs)8.568not recordedround 4
c8g.xlarge40.3190.154clock runs (clockbench-aws-20261016.txt)
c9g.xlarge40.348not recordednone
c9g.2xlarge80.6960.306G1–G3

Metal costs 6 times a c7i.4xlarge and 12 times a c9g.2xlarge. No run compared metal with a VM, so no measured benefit backs that price.

Kubernetes: EKS on c7i.4xlarge

DPDK at both ends, the media driver as a DaemonSet pod, round trips between the two nodes’ pods, run eks-20261014-195824 (rows): p50 28.37 (28.02–29.60), p99.99 63.33 (57.79–71.81) µs; max 148 µs (the median of the five reps’ maxima 126, range 112–148). No NAK or retransmit; 4 short sends. One arm, so nothing is compared. Setup: Kubernetes.

How to read a number

Five things are called “a number” in this book. They are not compared with each other, and a table cell names which one it is.

aggregationwhat one value ishow it is summarised
batch throughputmessages or operations completed in a timed windowthe window’s rate. md-dpdk: the median one-second window per rep (tput.rs:129-135), then the median across reps
individual latencyone round trip or one callpercentiles of the individuals, and the absolute maximum
UTC accuracyone stamp’s error against the wall clockpercentiles of the errors, with the time-sync source named
median of repetition maximathe worst value in one rep, then the middle repa summary of the reps’ worst, not a worst case
absolute observed maximumthe single worst value in any repone number; the per-rep spread goes in a note beside it

“Max” unqualified means the absolute observed maximum. Where a cell is the median of per-rep maxima it says so. In md-dpdk/BENCHMARKS.md a cell max X (a–b) has X the median of the five per-rep maxima (analyse.py cell()), the five’s smallest and largest in brackets, and b the absolute observed maximum. X is not a worst case.

Method. Aeron ping-pong between two hosts in one cluster placement group, us-east-1, Debian 13, isolated CPUs, 5 reps a mode, every mode’s order shuffled each rep. The lab writes each run to target/md-dpdk-bench/<stamp>/; the rows quoted here are committed under md-dpdk/benches/cloud/results/.