Tournevia

Requirements and sizing

Resource limits and measurements recorded for the application, worker, router and graph build.

Measured on 20 October 2026 by emulating each server size with Docker on an AMD Ryzen 9 7945HX: the router and the calculation shared the same pinned hardware threads (one per vCPU, as on most VPS offers) with memory limits. Every run was a whole calculation under the 180 s job deadline with the 5 s solver budget, on fictional workloads, twice each. A server CPU can be slower per thread than this desktop CPU: keep a margin.

UseRecommended serverNotes
Up to about 100 deliveries a day in one city2 vCPU / 8 GBÎle-de-France graph; address lookup does not fit alongside
Up to 250 deliveries in a dense city area2 vCPU / 8 GB works; 4 vCPU / 16 GB for margin45–47 s on 2 vCPU, 38 s on 4, 30 s on 8
Up to 250 deliveries across a region8 vCPU / 32 GB94–102 s. 4 vCPU / 16 GB passes only just (152–158 s): raise JOB_TIMEOUT_SECONDS if you use it. 2 vCPU fails at the 180 s deadline
France-wide installation with address lookup8 vCPU / 32 GBFrance router up to 7.7 GiB and address index about 5.2 GiB; build the France graph on a 16 GB machine if the server has less
Scenario2 vCPU / 8 GB4 vCPU / 16 GB8 vCPU / 32 GBRouter peak
Starter: 2 vehicles, 10 deliveries0.4–2.6 s0.4–4.1 s0.5–4.0 s0.7–1.5 GiB
Small fleet: 5 vehicles, 50 deliveries3.5–4.6 s3.4–5.2 s2.6–4.0 s1.8–3.6 GiB
Medium fleet: 10 vehicles, 100 deliveries9.4–9.8 s8.3–8.7 s7.0–7.3 s1.8–3.6 GiB
Large city: 25 vehicles, 250 deliveries, dense Paris45–47 s38 s30 s1.9–3.7 GiB
Regional: 25 vehicles, 250 deliveries, Île-de-France graphfails at 180 s154–157 s94–95 s3.3–6.6 GiB
The same regional day on the France graphfails at 180 s152–158 s99–102 s4.0–7.7 GiB

Almost all of the time goes to the road matrix (87 of 94 s on the 8 vCPU regional day); the solver uses its 5 s budget and routing and validation take about 2 s. Router memory grows with its threads (2 on the 2 vCPU size, 4 on the others). The calculation itself peaked at 112 MiB; with one calculation's data the API used 79 MiB, the worker 59 MiB and PostgreSQL 41 MiB.

For disk, the images take about 1.1 GB and the Île-de-France graph 0.32 GB. A France-wide installation adds 4.1 GB of graph, 1.1 GB of geocoder images and 3.2 GB of address data, plus about 20 GB free while the France graph is built on the server. Add the operating system, logs and backups, which grow with your data.

One worker runs one calculation at a time, so waiting calculations run one after another. The kit's scripts/benchmark_sizing.py repeats these measurements on your own machine.

What these numbers are

The figures below come from the kit's Compose files and from measurements recorded with fictional workloads. Compose limits are caps, not measured use. Measure your own workload before relying on an installation: a small VPS may run the application without being suitable for graph building or 250-delivery calculations.

The kit targets Linux AMD64 and needs Python 3.11+, Docker and Compose 2.24.4+.

Calculation limits

LimitValue
Vehicles per calculation25
Deliveries per calculation250
Distinct points, depot included251
Distance between two points of one calculationMATRIX_MAX_KM, default 200 km, equal to the graph build
Exact truck profiles per calculation3
Planning periodOne Europe/Paris day with hard time windows
Whole calculation deadlineJOB_TIMEOUT_SECONDS, default 180 s (1–600), saving included
Solver budget1–60 s
Waiting or running calculationsAt most 5 per company

An installation has a single worker, which runs one calculation at a time; a second worker exits. Do not scale the worker service.

Container limits in the Compose files

ServiceMemoryCPUNotes
postgres1 GiB—PostgreSQL 16
setup512 MiB—Runs before the API and worker, then exits
api1 GiB—
worker2 GiB2The calculation child process is limited to 1.5 GiB of address space
https (HTTPS overlay) or edge (behind an existing proxy)128 MiB—
valhalla (routing overlay)ROUTING_MEMORY, default 4 GiB—ROUTING_THREADS, default 2
addok-redis (geocoder overlay)GEOCODER_MEMORY, default 8 GiB—Address index; addok needs at least 6 GB
addok (geocoder overlay)1 GiB—GEOCODER_WORKERS, default 2

Leaving out setup, which exits, the limits add up to about 4.1 GiB without the router and about 8.1 GiB with the routing overlay's default. The geocoder overlay adds about 9 GiB with its defaults. Each container keeps at most three 10 MiB log files.

Measured calculations

WorkloadResourcesMeasured
Regional Île-de-France, 250 deliveries, queued jobSeparate router with 8 CPUs, 8 GiB and 4 routing workers, MATRIX_CONCURRENCY=4; application 2 CPUs, 2 GiB118–123 s per job, saving included
Dense Paris, 250 deliveriesRouter with 4 CPUs, an 8 GiB quota and 4 routing workers; application 2 CPUs, 2 GiB48.94–60.20 s per calculation; router peak memory 6.07 GiB

A router with two CPUs and 2 GiB did not meet the regional timing in these tests. A router with 2 GiB, two CPUs and two threads is the kit's example for the initial ten-delivery check. The routing overlay's default (4 GiB, two threads) has no recorded 250-delivery measurement.

Graph build

StepRecorded resources
Île-de-France extract338,509,338 bytes, downloaded 22 September 2026, hash pinned in deploy/engines.json
Regional graph buildContainer limited to 6 GiB and 2 CPUs
Restriction test graphContainer limited to 2 GiB and 2 CPUs
Duration and diskSeveral minutes and several GB
France extract5.1 GB, data of 18 October 2026, hash pinned in deploy/engines.json
France graph buildAbout 11 minutes with 8 threads in a container limited to 16 GB, on a 32-CPU machine, inside a Docker volume; 4.1 GB of tiles; keep about 20 GB free
France routerHeld 6.1 GiB after the real-engine suite; allow 8 GB

Graph preparation can require more resources than the application. The router can run on another private machine, as described in installation.

Address lookup

The Base Adresse Nationale bundle is about 2.5 GB to download and 3.2 GB unpacked. Loading its index takes one to two minutes after each start. With the 19 October 2026 bundle, one lookup took 4–28 ms inside the stack, for Paris, Lyon and Marseille addresses.

Not measured

  • Larger days on a real VPS: the sizes above were emulated on one desktop machine. On a real 2 vCPU / 8 GB VPS shared with Coolify, only the ten-delivery sample was calculated (3.3–4.6 s; at rest afterwards, Tournevia used about 1.1 GB, 0.9 GB of it the router); see Install on a VPS, step by step.
  • Growth of the database and of backups over time.
  • Simultaneous users.
  • Calculation timing and route quality for deliveries outside Île-de-France: on the France graph, the timed regional day used Île-de-France points; elsewhere only routing checks and a ten-delivery Lyon plan were run.
  • Workloads beyond the limits above.

On this page