Skip to content

Benchmarks

How long terrio's commands take compared with the GDAL utilities doing the same work, on the real-world files used for testing. Each command runs in a fresh process, once to warm the file cache and then five times; the tables show the median wall time of the whole command, including start-up, reading and writing.

Read these numbers as a snapshot

terrio is young, and correctness against GDAL came first. The slower cases below are known and tracked: GeoTIFF writing (which dominates COG conversion, mosaicking and rasterizing to large grids) and warping have not been optimized yet. GDAL runs with its default settings, which include multi-threaded GeoTIFF compression where the driver supports it.

Machine: Intel Xeon w7-3445 (x86_64), 40 threads, Linux. GDAL 3.12.2 "Chicoutimi", released 2026/02/03; terrio 0.0.1. Median of 5 runs after a warm-up run; wall time of the whole command.

Summaries

Task terrio GDAL terrio vs GDAL
Raster info: USGS 3DEP tile (3612×3612) 2 ms 38 ms 21.2× faster
Raster statistics: SRTM 90 m (4269×2465) 159 ms 154 ms 1.0× slower
Vector info: US counties GeoPackage 99 ms 32 ms 3.1× slower

Raster conversion

Task terrio GDAL terrio vs GDAL
GeoTIFF → COG (Deflate): USGS 3DEP tile 2.18 s 1.41 s 1.5× slower
GeoTIFF → GeoTIFF (LZW, tiled): Landsat (4 bands) 401 ms 304 ms 1.3× slower
GeoTIFF → Zarr: SRTM 90 m 174 ms 98 ms 1.8× slower

Raster operations

Task terrio GDAL terrio vs GDAL
Translate: window + Int16: USGS 3DEP tile 305 ms 122 ms 2.5× slower
Warp to UTM 13N, nearest: USGS 3DEP tile 1.10 s 454 ms 2.4× slower
Warp to UTM 13N, bilinear: USGS 3DEP tile 1.83 s 1.69 s 1.1× slower
Mosaic 4 USGS 3DEP tiles → GeoTIFF 2.63 s 1.61 s 1.6× slower
Mosaic 4 USGS 3DEP tiles → VRT 3 ms 37 ms 11.0× faster

Vector conversion

Task terrio GDAL terrio vs GDAL
Shapefile → GeoPackage: 7,342 populated places 69 ms 88 ms 1.3× faster
GeoPackage → FlatGeobuf: US counties 130 ms 62 ms 2.1× slower
GeoPackage → GeoParquet: US counties 144 ms 111 ms 1.3× slower
GeoJSON → Shapefile: world cables 13 ms 44 ms 3.4× faster
Filter + reproject: US counties → EPSG:5070 121 ms 52 ms 2.3× slower

Raster ↔ vector

Task terrio GDAL terrio vs GDAL
Rasterize US counties at 0.01° 1.74 s 333 ms 5.2× slower
Polygonize NLCD land cover (966×731) 476 ms 636 ms 1.3× faster

Remote data

Task terrio GDAL terrio vs GDAL
Info of a remote COG (USGS 3DEP on S3) 491 ms 585 ms 1.2× faster

Notes

  • Raster info reads only the GeoTIFF header and the tags it needs.
  • Mosaic → VRT reads only the inputs' headers; GDAL opens each input fully.
  • Remote COG info fetches one 64 KiB range; GDAL runs with GDAL_DISABLE_READDIR_ON_OPEN=EMPTY_DIR, as recommended for cloud data. Remote timings depend on the network.
  • Rasterize burns US counties, whose extent crosses the antimeridian, into a 35894×5348 grid (192 MB): the time goes into writing the uncompressed GeoTIFF.
  • .aux.xml statistics caches are disabled (GDAL_PAM_ENABLED=NO), and the statistics case uses a file without statistics stored in its metadata, so both tools compute them from the pixels.

Running the benchmarks

scripts/fetch_test_data.sh ../terrio-data
cargo build --release
python scripts/benchmark.py ../terrio-data --runs 5 --remote --out benchmarks.md

The script needs the GDAL command-line tools on PATH.