Hardware Footprint Benchmarks: Methodology and Full Results

published on 24 January 2026

This post explains how the hardware footprint numbers shown on the landing page were measured (RAM usage, download size, and on-disk footprint), what the metrics mean, and how to interpret them. It also includes the full benchmark results, including endpoint performance, for readers who want the detailed numbers.

Benchmark setup

  • One dedicated EC2 instance per run. No other workloads on the machine.
  • Reference hardware: AWS EC2 c6g.xlarge (Graviton2) as the baseline CPU for reported numbers.
  • Two-phase run:
    • Warm-up: 30 seconds (not counted)
    • Measured: 600 seconds (this is what is reported)

The warm-up exists to avoid "first request" artifacts (cold caches, initial file reads, first route graph touches) and to make region-to-region comparisons fairer.

What the benchmark simulates

The benchmark simulates a single interactive user doing common map actions:

  • loading vector tiles while panning/zooming
  • occasional forward search (geocoding)
  • occasional reverse geocoding (tap/click)
  • occasional routing (point-to-point)

It is intentionally not a bulk throughput test. The intent is to answer: "Will it feel responsive for an interactive UI, and what is the resource footprint?"

Note on p95: throughout this post and in the results below, p95 (95th percentile) means "95% of requests were faster than this value." It’s a useful way to describe typical worst-case behavior without being dominated by rare outliers.

Raw benchmark results (by region)

region disk_tiles_gb disk_router_gb disk_geocoder_gb disk_data_package_total_gb disk_docker_gb net_data_package_gb net_docker_gb ram_total_p95_gb tile_p95_ms geocode_p95_ms reverse_p95_ms route_p95_ms tile_total geocode_total reverse_total route_total
berlin0.080.150.060.291.340.160.330.188.6640.645.31107.5935360807452527
vienna0.040.050.030.121.340.070.330.149.6710.426.3659.9336000768455545
dc0.010.030.010.051.340.030.330.1410.4313.505.4274.9735700810441519
bavaria1.050.970.312.341.341.540.330.187.0540.295.6286.1936220771449543
austria1.090.790.282.171.341.520.330.216.6114.775.1693.4536480801456544
belgium0.790.440.221.451.341.050.330.176.9721.695.7658.8537100837456594
colorado0.560.460.101.141.340.760.330.244.3319.774.26105.0036900789466535
poland3.072.170.485.721.344.030.331.107.40117.3553.94144.5534900813426529
spain2.262.041.145.451.343.490.330.475.26306.7470.93148.7133600810410477
texas1.061.530.322.921.341.690.330.223.9540.874.56124.7336340834475557
germany5.774.971.8112.561.348.340.332.228.98195.1562.19222.7933180747381491
uk2.822.561.266.641.344.260.331.264.12541.64205.05265.8531880792382468
california1.431.600.383.431.342.170.330.374.26164.3519.53215.4735340759415527
us_west5.144.531.0310.711.347.050.332.524.27452.5026.32338.6632480681394510

How to read these results

Download size and on-disk footprint

  • net_data_package_gb: how much region data you download (compressed bundle).
  • disk_data_package_total_gb: how much that region data occupies on disk once installed, broken down into:
    • disk_tiles_gb (vector tiles)
    • disk_router_gb (routing data)
    • disk_geocoder_gb (geocoding DB)
  • net_docker_gb: network download size for the Docker images used by the stack.
  • disk_docker_gb: on-disk size of the Docker images (after pulling).

Note on Docker: Docker image sizes are the same regardless of the region and are a one-off cost per device (you download/pull them once, then only the region data changes).

RAM usage

  • ram_total_p95_gb: p95 RAM usage of the stack during the measured run.

This is meant to represent RAM used by Corviont services, not a full device sizing recommendation. Your device OS, filesystem cache, logging, and any other workloads will add overhead on top

Endpoint performance (p95)

  • tile_p95_ms
  • geocode_p95_ms
  • reverse_p95_ms
  • route_p95_ms

These are p95 request durations during the measured run on the reference EC2 hardware. The raw results table also includes total request counts for each endpoint type (tile_total, geocode_total, reverse_total, route_total) so you can see how much traffic these p95 values were derived from.

How to use these numbers for your hardware

If you are primarily asking "Will this fit?", focus on:

  • ram_total_p95_gb
  • disk_data_package_total_gb
  • disk_docker_gb

plus your own OS/headroom.

If you are primarily asking "Will this feel fast enough?", focus on:

  • tile_p95_ms (UI smoothness while panning)
  • route_p95_ms (routing responsiveness)
  • geocode_p95_ms / reverse_p95_ms (search feel)

If your CPU is slower/faster per core than Graviton2, treat these timings as a baseline. Slower per-core CPUs will generally increase compute-heavy endpoints (routing/geocoding) more than tile serving.

Notes and limits

  • These results reflect a single-user interactive workload on a dedicated machine.
  • For multiple concurrent users or background workloads, plan additional headroom (cores and RAM) depending on your concurrency and latency targets.
  • Warm-up is discarded; only the 600-second measured run is published to keep comparisons consistent.
Built on Unicorn Platform