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.030.271.340.150.340.168.6968.116.59107.5335200768424548
vienna0.040.050.010.111.340.070.340.149.6612.576.8457.2736700846447531
dc0.010.030.010.051.340.020.340.1410.4719.076.3178.0835620795427541
bavaria1.050.970.172.201.341.490.340.216.7360.525.78101.5236200831413524
austria1.090.780.162.041.341.480.340.226.4836.355.8887.6336320876448540
belgium0.790.440.121.351.341.010.340.166.9037.835.9059.8436860867460591
colorado0.560.460.061.091.340.740.340.214.2335.485.3282.9736880882439521
poland3.062.170.275.511.343.950.341.007.35169.3236.86141.4735080768423537
spain2.252.030.674.971.343.330.340.545.10311.1220.49132.1933140816452506
texas1.061.530.182.781.341.640.340.213.72115.244.94100.9636480843460536
germany5.764.971.0211.761.348.040.342.928.94329.51103.18277.4730960726380469
uk2.812.560.746.111.344.060.341.574.04191.1570.71197.5333980666417499
california1.431.590.223.261.342.120.340.364.60119.5214.00225.4534580762432561
us_west5.144.510.6010.261.346.900.342.674.26183.9119.33304.1032760822371502

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