Skip to content

Performance

On a Hetzner Cloud ccx33 (8 dedicated vCPUs, 32 GB RAM), with telemetrygen on a separate ccx33 over a private network, Pitot v2026.11.0-alpha accepted 507,311 mixed OpenTelemetry items/s over 306.8 seconds. The composition was 61,571 spans, 224,112 log records and 221,628 metric points per second. The run measured ingest only. Reads under sustained ingest did not meet the read target and are tracked in issue #419.

Both hosts were described as Hetzner Cloud ccx33, fsn1, ubuntu-24.04. The Pitot host reported AMD EPYC-Milan Processor, 8 logical CPUs and 32,857,186,304 bytes of memory. telemetrygen v0.157.0 sent plaintext OTLP/gRPC over the private network, using 1,000-item batches and 8 workers per process.

The publish preset ran 1, 2, 4, 8, 16, 32 and 64 processes per signal for traces, logs, metrics and mixed ingest, with 3 repetitions per point. Accepted throughput is the change in Pitot’s pitot_ingest_rows_total counter over the measured scrape window.

The suite accepted 667.3 million items in total: 145,879,781 spans, 265,470,588 log records and 255,924,526 metric points.

The sustained phase ran for 306.8 seconds at 64 processes per signal. Pitot averaged 7.73 CPU cores and reached 10.6 GiB peak RSS. The generator host averaged 7.93 of 8 CPU cores. The sustained phase is classified generator-limited.

SignalAccepted items/s
Spans61,571
Log records224,112
Metric points221,628
Mixed total507,311

telemetrygen keeps one trace export in flight per process, while log and metric processes keep eight. Synthetic, highly compressible telemetrygen payloads measure ingest capacity on this hardware.

Each peak is the highest median accepted rate in that workload’s recorded sweep. Ranges cover the three repetitions at the listed process count. CPU columns are median average cores at that count; each host has 8 cores.

WorkloadMedian peak items/sProcesses per signalRange items/sPitot CPU coresGenerator CPU coresRepetitions
Mixed460,64064453,181–485,1937.227.393
Traces297,34564192,120–330,4506.977.243
Logs622,22964558,932–648,6726.026.383
Metrics488,43164486,759–532,6256.354.713

All rates below are accepted items/s across three repetitions per mixed process count. CPU columns are median average cores per host.

Processes per signalMedian items/sMin items/sMax items/sPitot CPU coresGenerator CPU cores
138,82038,64039,2275.470.82
276,58776,48376,7416.151.71
4155,156149,499155,7075.912.16
8262,749261,501270,2317.012.93
16380,026323,029429,7487.335.00
32442,361432,734450,5887.377.14
64460,640453,181485,1937.227.39

The charts share a vertical scale and an evenly spaced log2 process axis. Lines and points show the median; bands show the recorded minimum and maximum. The diamond marks the sustained phase at 64 processes per signal. The shaded region marks generator CPU of at least 7 cores.

Traces sweepaccepted items/s
Traces accepted throughput by processes per signalMedian line and minimum-to-maximum band across the recorded repetitions at each process count; the suite requests 3 repetitions. The horizontal axis is evenly spaced on a log2 scale; the vertical axis runs from zero to 600,000 accepted items per second. At 1 processes: 13,705 items/s, range 13,633 to 13,709, 3 repetitions. At 2 processes: 27,283 items/s, range 27,227 to 27,295, 3 repetitions. At 4 processes: 54,584 items/s, range 54,462 to 54,716, 3 repetitions. At 8 processes: 110,326 items/s, range 106,840 to 111,893, 3 repetitions. At 16 processes: 192,605 items/s, range 156,783 to 205,825, 3 repetitions. At 32 processes: 232,227 items/s, range 164,978 to 243,741, 3 repetitions. At 64 processes: 297,345 items/s, range 192,120 to 330,450, 3 repetitions.
medianmin–max
Logs sweepaccepted items/s
Logs accepted throughput by processes per signalMedian line and minimum-to-maximum band across the recorded repetitions at each process count; the suite requests 3 repetitions. The horizontal axis is evenly spaced on a log2 scale; the vertical axis runs from zero to 600,000 accepted items per second. At 1 processes: 12,720 items/s, range 12,625 to 12,759, 3 repetitions. At 2 processes: 25,111 items/s, range 24,974 to 25,184, 3 repetitions. At 4 processes: 50,053 items/s, range 49,782 to 50,115, 3 repetitions. At 8 processes: 97,248 items/s, range 95,989 to 98,038, 3 repetitions. At 16 processes: 197,201 items/s, range 196,366 to 197,366, 3 repetitions. At 32 processes: 366,244 items/s, range 364,916 to 370,209, 3 repetitions. At 64 processes: 622,229 items/s, range 558,932 to 648,672, 3 repetitions.
medianmin–max
Metrics sweepaccepted items/s
Metrics accepted throughput by processes per signalMedian line and minimum-to-maximum band across the recorded repetitions at each process count; the suite requests 3 repetitions. The horizontal axis is evenly spaced on a log2 scale; the vertical axis runs from zero to 600,000 accepted items per second. At 1 processes: 12,801 items/s, range 12,728 to 12,816, 3 repetitions. At 2 processes: 25,459 items/s, range 25,409 to 25,580, 3 repetitions. At 4 processes: 50,263 items/s, range 50,252 to 50,759, 3 repetitions. At 8 processes: 98,095 items/s, range 97,296 to 98,618, 3 repetitions. At 16 processes: 195,099 items/s, range 194,544 to 196,265, 3 repetitions. At 32 processes: 377,992 items/s, range 359,873 to 378,840, 3 repetitions. At 64 processes: 488,431 items/s, range 486,759 to 532,625, 3 repetitions.
medianmin–max
Mixed sweepaccepted items/s
Mixed accepted throughput by processes per signalMedian line and minimum-to-maximum band across the recorded repetitions at each process count; the suite requests 3 repetitions. The horizontal axis is evenly spaced on a log2 scale; the vertical axis runs from zero to 600,000 accepted items per second. At 1 processes: 38,820 items/s, range 38,640 to 39,227, 3 repetitions. At 2 processes: 76,587 items/s, range 76,483 to 76,741, 3 repetitions. At 4 processes: 155,156 items/s, range 149,499 to 155,707, 3 repetitions. At 8 processes: 262,749 items/s, range 261,501 to 270,231, 3 repetitions. At 16 processes: 380,026 items/s, range 323,029 to 429,748, 3 repetitions. At 32 processes: 442,361 items/s, range 432,734 to 450,588, 3 repetitions. At 64 processes: 460,640 items/s, range 453,181 to 485,193, 3 repetitions. The diamond marks the sustained phase: 507,311 items/s at 64 processes per signal over 306.8 seconds. Shading marks generator CPU of at least 7 cores.
medianmin–max507,311/s sustained at 64

The published evidence contains report.json and samples.jsonl, produced by Pitot Bench on 6 November 2026 at 04:15 UTC. All quality gates passed: successful generator exits, zero dropped rows, no restarts, authoritative accepted-row counters in every phase and verified Parquet storage.

The harness commit was 5462cbbcde9c49521c918c45f45312493aa4bb24; the harness working tree was clean. The Pitot release artifact has SHA-256:

1e83657b9eb0ff7e7ad406bd5162642badf087c380448deebd1f88b183656ddc

From the pitot-bench repository:

Terminal window
PITOT_BENCH_HCLOUD_SSH_KEY='<key>' scripts/hetzner.sh \
--pitot-version v2026.11.0-alpha \
--preset publish \
--repeat 3 \
--output results/publish-ingest-ccx33x2-v2026.11.0-alpha

Both VMs default to ccx33. The publishing guide documents provisioning, the private network and artifact collection.

Regenerate the website’s data from the completed run:

Terminal window
node site/scripts/benchmark-data.mjs report.json samples.jsonl EVIDENCE_URL

Update authored headline figures with the report; the site build checks them against the data.