Project-OSRM / osrm-backend

Open Source Routing Machine - C++ backend
http://map.project-osrm.org
BSD 2-Clause "Simplified" License
6.42k stars 3.4k forks source link

Use pool allocator in QueryHeap #6943

Open SiarheiFedartsou opened 5 months ago

SiarheiFedartsou commented 5 months ago

I spent some hours in profiler and noticed that we waste a lot of time for allocations in QueryHeap:

After some experiments I ended up with custom pool allocator which uses thread local free lists to re-use already allocated memory. Idea is primitive:

What alternatives I considered, but rejected

Result highlights

Measured on my Raspberry Pi: map matching CH (default radius) ops/sec: +22% map matching MLD (default radius) ops/sec: +35%(!) table CH (25 coordinates) ops/sec: +8% table MLD (25 coordinates) ops/sec: +8% route CH (overview=full, steps=true) ops/sec: +1% route MLD (overview=full, steps=true) ops/sec: +10% osrm-contract run time: -20% osrm-customize run time: -23%

Worth saying that that there is some improvements almost in all benchmarks...

Benchmark Results

| Benchmark | Base | PR | |-----------|------|----| | alias | aliased u32: 11079.8
plain u32: 10965.2
aliased double: 15131.9
plain double: 15110.1 | aliased u32: 11068.9
plain u32: 10916.2
aliased double: 15050.4
plain double: 15040.3 | | e2e_match_ch | Ops: 26.19 ± 0.02 ops/s. Best: 26.21 ops/s
Total: 5002.36ms ± 3.05ms. Best: 4998.42ms
Min time: 3.25ms ± 0.05ms
Mean time: 38.19ms ± 0.02ms
Median time: 26.22ms ± 0.10ms
95th percentile: 129.92ms ± 0.19ms
99th percentile: 157.86ms ± 0.33ms
Max time: 164.05ms ± 0.59ms | Ops: 32.85 ± 0.01 ops/s. Best: 32.88 ops/s
Total: 3987.24ms ± 1.76ms. Best: 3983.71ms
Min time: 3.09ms ± 0.05ms
Mean time: 30.44ms ± 0.01ms
Median time: 21.32ms ± 0.03ms
95th percentile: 102.18ms ± 0.11ms
99th percentile: 117.82ms ± 0.13ms
Max time: 125.92ms ± 0.27ms | | e2e_match_mld | Ops: 43.46 ± 0.04 ops/s. Best: 43.51 ops/s
Total: 3014.38ms ± 2.83ms. Best: 3010.92ms
Min time: 2.59ms ± 0.04ms
Mean time: 23.01ms ± 0.02ms
Median time: 12.05ms ± 0.08ms
95th percentile: 75.53ms ± 0.16ms
99th percentile: 87.68ms ± 0.16ms
Max time: 100.83ms ± 0.28ms | Ops: 59.84 ± 0.03 ops/s. Best: 59.90 ops/s
Total: 2189.24ms ± 1.18ms. Best: 2187.15ms
Min time: 2.32ms ± 0.05ms
Mean time: 16.71ms ± 0.01ms
Median time: 9.38ms ± 0.08ms
95th percentile: 52.02ms ± 0.09ms
99th percentile: 59.06ms ± 0.16ms
Max time: 66.86ms ± 0.20ms | | e2e_nearest_ch | Ops: 635.84 ± 5.72 ops/s. Best: 644.05 ops/s
Total: 1572.58ms ± 15.03ms. Best: 1552.66ms
Min time: 1.28ms ± 0.00ms
Mean time: 1.57ms ± 0.02ms
Median time: 1.54ms ± 0.01ms
95th percentile: 1.96ms ± 0.01ms
99th percentile: 2.05ms ± 0.01ms
Max time: 9.32ms ± 7.40ms | Ops: 636.74 ± 3.56 ops/s. Best: 641.59 ops/s
Total: 1570.34ms ± 9.08ms. Best: 1558.63ms
Min time: 1.29ms ± 0.01ms
Mean time: 1.57ms ± 0.01ms
Median time: 1.53ms ± 0.01ms
95th percentile: 1.95ms ± 0.01ms
99th percentile: 2.05ms ± 0.01ms
Max time: 9.37ms ± 7.46ms | | e2e_nearest_mld | Ops: 637.34 ± 2.76 ops/s. Best: 641.70 ops/s
Total: 1568.82ms ± 6.45ms. Best: 1558.36ms
Min time: 1.28ms ± 0.01ms
Mean time: 1.57ms ± 0.01ms
Median time: 1.53ms ± 0.01ms
95th percentile: 1.95ms ± 0.01ms
99th percentile: 2.05ms ± 0.01ms
Max time: 9.35ms ± 7.42ms | Ops: 637.77 ± 4.62 ops/s. Best: 647.24 ops/s
Total: 1568.37ms ± 12.03ms. Best: 1545.03ms
Min time: 1.28ms ± 0.01ms
Mean time: 1.57ms ± 0.01ms
Median time: 1.53ms ± 0.01ms
95th percentile: 1.96ms ± 0.01ms
99th percentile: 2.04ms ± 0.01ms
Max time: 9.32ms ± 7.44ms | | e2e_route_ch | Ops: 216.80 ± 0.49 ops/s. Best: 217.46 ops/s
Total: 4612.55ms ± 10.63ms. Best: 4598.56ms
Min time: 1.86ms ± 0.03ms
Mean time: 4.61ms ± 0.01ms
Median time: 4.71ms ± 0.02ms
95th percentile: 6.07ms ± 0.02ms
99th percentile: 6.62ms ± 0.05ms
Max time: 13.32ms ± 6.36ms | Ops: 216.55 ± 0.61 ops/s. Best: 217.41 ops/s
Total: 4617.82ms ± 13.12ms. Best: 4599.68ms
Min time: 1.88ms ± 0.04ms
Mean time: 4.62ms ± 0.01ms
Median time: 4.71ms ± 0.02ms
95th percentile: 6.08ms ± 0.01ms
99th percentile: 6.59ms ± 0.06ms
Max time: 13.33ms ± 6.40ms | | e2e_route_mld | Ops: 178.79 ± 0.31 ops/s. Best: 179.34 ops/s
Total: 5593.32ms ± 10.29ms. Best: 5576.05ms
Min time: 1.87ms ± 0.07ms
Mean time: 5.59ms ± 0.01ms
Median time: 5.72ms ± 0.02ms
95th percentile: 7.62ms ± 0.01ms
99th percentile: 8.14ms ± 0.04ms
Max time: 14.68ms ± 5.90ms | Ops: 182.95 ± 0.28 ops/s. Best: 183.43 ops/s
Total: 5465.83ms ± 8.40ms. Best: 5451.76ms
Min time: 1.88ms ± 0.07ms
Mean time: 5.47ms ± 0.01ms
Median time: 5.59ms ± 0.01ms
95th percentile: 7.40ms ± 0.02ms
99th percentile: 7.97ms ± 0.08ms
Max time: 14.47ms ± 5.97ms | | e2e_table_ch | Ops: 210.45 ± 0.29 ops/s. Best: 210.91 ops/s
Total: 4751.61ms ± 6.35ms. Best: 4741.25ms
Min time: 2.52ms ± 0.05ms
Mean time: 4.75ms ± 0.01ms
Median time: 4.77ms ± 0.02ms
95th percentile: 6.48ms ± 0.01ms
99th percentile: 6.80ms ± 0.03ms
Max time: 14.02ms ± 7.01ms | Ops: 219.96 ± 0.51 ops/s. Best: 220.69 ops/s
Total: 4546.05ms ± 10.42ms. Best: 4531.26ms
Min time: 2.45ms ± 0.04ms
Mean time: 4.55ms ± 0.01ms
Median time: 4.55ms ± 0.00ms
95th percentile: 6.14ms ± 0.01ms
99th percentile: 6.50ms ± 0.05ms
Max time: 13.62ms ± 7.10ms | | e2e_table_mld | Ops: 68.31 ± 0.06 ops/s. Best: 68.38 ops/s
Total: 14639.82ms ± 12.41ms. Best: 14623.94ms
Min time: 6.12ms ± 0.08ms
Mean time: 14.64ms ± 0.01ms
Median time: 14.61ms ± 0.03ms
95th percentile: 22.23ms ± 0.04ms
99th percentile: 23.41ms ± 0.03ms
Max time: 29.78ms ± 5.58ms | Ops: 75.99 ± 0.05 ops/s. Best: 76.07 ops/s
Total: 13160.35ms ± 9.12ms. Best: 13145.61ms
Min time: 5.60ms ± 0.05ms
Mean time: 13.16ms ± 0.01ms
Median time: 13.12ms ± 0.01ms
95th percentile: 19.91ms ± 0.07ms
99th percentile: 21.02ms ± 0.06ms
Max time: 27.55ms ± 5.86ms | | e2e_trip_ch | Ops: 62.20 ± 0.03 ops/s. Best: 62.26 ops/s
Total: 16077.97ms ± 8.95ms. Best: 16061.39ms
Min time: 2.40ms ± 0.19ms
Mean time: 16.08ms ± 0.01ms
Median time: 15.31ms ± 0.01ms
95th percentile: 28.32ms ± 0.02ms
99th percentile: 30.51ms ± 0.07ms
Max time: 33.02ms ± 1.33ms | Ops: 63.20 ± 0.03 ops/s. Best: 63.25 ops/s
Total: 15821.43ms ± 8.07ms. Best: 15809.58ms
Min time: 2.44ms ± 0.15ms
Mean time: 15.82ms ± 0.01ms
Median time: 15.05ms ± 0.02ms
95th percentile: 27.88ms ± 0.02ms
99th percentile: 30.04ms ± 0.09ms
Max time: 32.59ms ± 1.39ms | | e2e_trip_mld | Ops: 36.86 ± 0.01 ops/s. Best: 36.88 ops/s
Total: 27129.49ms ± 7.23ms. Best: 27113.10ms
Min time: 2.49ms ± 0.16ms
Mean time: 27.13ms ± 0.01ms
Median time: 26.30ms ± 0.08ms
95th percentile: 44.24ms ± 0.05ms
99th percentile: 46.80ms ± 0.10ms
Max time: 49.16ms ± 0.15ms | Ops: 39.29 ± 0.02 ops/s. Best: 39.32 ops/s
Total: 25449.85ms ± 10.27ms. Best: 25434.69ms
Min time: 2.54ms ± 0.20ms
Mean time: 25.45ms ± 0.01ms
Median time: 24.62ms ± 0.06ms
95th percentile: 41.70ms ± 0.06ms
99th percentile: 44.15ms ± 0.11ms
Max time: 46.44ms ± 0.32ms | | json-render | String: 8.93734ms
Stringstream: 14.444ms
Vector: 9.49343ms | String: 8.85913ms
Stringstream: 14.6759ms
Vector: 9.445ms | | match_ch | Default radius:
7.05707ms/req at 82 coordinate
0.0860618ms/coordinate
Radius 10m:
24.9563ms/req at 82 coordinate
0.304345ms/coordinate | Default radius:
6.11063ms/req at 82 coordinate
0.0745199ms/coordinate
Radius 10m:
21.4601ms/req at 82 coordinate
0.261708ms/coordinate | | match_mld | Default radius:
4.3271ms/req at 82 coordinate
0.0527696ms/coordinate
Radius 10m:
16.1675ms/req at 82 coordinate
0.197164ms/coordinate | Default radius:
3.05044ms/req at 82 coordinate
0.0372005ms/coordinate
Radius 10m:
10.4792ms/req at 82 coordinate
0.127795ms/coordinate | | node_match_ch | Ops: 165.1 ± 0.6 ops/s. Best: 165.8 ops/s | Ops: 210.4 ± 1.7 ops/s. Best: 213.0 ops/s | | node_match_mld | Ops: 219.0 ± 1.2 ops/s. Best: 220.9 ops/s | Ops: 291.0 ± 1.5 ops/s. Best: 293.4 ops/s | | node_nearest_ch | Ops: 9980.5 ± 789.2 ops/s. Best: 11216.5 ops/s | Ops: 9520.9 ± 627.2 ops/s. Best: 10995.9 ops/s | | node_nearest_mld | Ops: 10029.6 ± 604.1 ops/s. Best: 10895.1 ops/s | Ops: 10197.0 ± 908.9 ops/s. Best: 11478.6 ops/s | | node_route_ch | Ops: 994.5 ± 13.7 ops/s. Best: 1006.8 ops/s | Ops: 1017.1 ± 21.8 ops/s. Best: 1049.0 ops/s | | node_route_mld | Ops: 510.4 ± 4.8 ops/s. Best: 518.1 ops/s | Ops: 567.6 ± 7.7 ops/s. Best: 577.0 ops/s | | node_table_ch | Ops: 174.2 ± 1.1 ops/s. Best: 175.9 ops/s | Ops: 193.2 ± 1.5 ops/s. Best: 195.3 ops/s | | node_table_mld | Ops: 37.8 ± 0.0 ops/s. Best: 37.9 ops/s | Ops: 41.6 ± 0.1 ops/s. Best: 41.7 ops/s | | node_trip_ch | Ops: 178.9 ± 0.9 ops/s. Best: 180.2 ops/s | Ops: 189.5 ± 1.6 ops/s. Best: 191.6 ops/s | | node_trip_mld | Ops: 61.0 ± 0.1 ops/s. Best: 61.2 ops/s | Ops: 69.2 ± 0.2 ops/s. Best: 69.5 ops/s | | osrm_contract | Time: 183.47s Peak RAM: 183.70MB | Time: 154.99s Peak RAM: 183.67MB | | osrm_customize | Time: 2.54s Peak RAM: 111.67MB | Time: 2.06s Peak RAM: 112.03MB | | osrm_extract | Time: 24.33s Peak RAM: 394.85MB | Time: 24.27s Peak RAM: 394.28MB | | osrm_partition | Time: 5.84s Peak RAM: 122.03MB | Time: 5.86s Peak RAM: 120.85MB | | packedvector | random write:
std::vector 184766 ms
util::packed_vector 377132 ms
slowdown: 2.04113
random read:
std::vector 100564 ms
util::packed_vector 192157 ms
slowdown: 1.91078 | random write:
std::vector 183179 ms
util::packed_vector 372499 ms
slowdown: 2.03353
random read:
std::vector 100185 ms
util::packed_vector 190285 ms
slowdown: 1.89934 | | random_match_ch | 500 matches, default radius
ops: 127.11 ± 0.10 ops/s. best: 127.23ops/s.
total: 448.43 ± 0.35ms. best: 447.99ms.
avg: 7.87 ± 0.01ms
min: 0.22 ± 0.01ms
max: 42.75 ± 0.09ms
p99: 42.75 ± 0.09ms

500 matches, radius=10
ops: 36.70 ± 0.03 ops/s. best: 36.76ops/s.
total: 1744.07 ± 1.38ms. best: 1740.86ms.
avg: 27.25 ± 0.02ms
min: 0.24 ± 0.00ms
max: 411.01 ± 1.21ms
p99: 411.01 ± 1.21ms

500 matches, radius=20
ops: 8.67 ± 0.01 ops/s. best: 8.70ops/s.
total: 7494.72 ± 8.34ms. best: 7472.85ms.
avg: 115.30 ± 0.13ms
min: 0.48 ± 0.00ms
max: 2182.14 ± 4.63ms
p99: 2182.14 ± 4.63ms

Peak RAM: 54.500MB | 500 matches, default radius
ops: 163.46 ± 0.21 ops/s. best: 163.69ops/s.
total: 348.70 ± 0.44ms. best: 348.22ms.
avg: 6.12 ± 0.01ms
min: 0.22 ± 0.00ms
max: 33.45 ± 0.03ms
p99: 33.45 ± 0.03ms

500 matches, radius=10
ops: 47.44 ± 0.01 ops/s. best: 47.45ops/s.
total: 1349.17 ± 0.33ms. best: 1348.81ms.
avg: 21.08 ± 0.01ms
min: 0.24 ± 0.00ms
max: 325.07 ± 0.29ms
p99: 325.07 ± 0.29ms

500 matches, radius=20
ops: 11.22 ± 0.00 ops/s. best: 11.23ops/s.
total: 5792.58 ± 1.80ms. best: 5790.03ms.
avg: 89.12 ± 0.03ms
min: 0.43 ± 0.00ms
max: 1724.44 ± 1.42ms
p99: 1724.44 ± 1.42ms

Peak RAM: 54.500MB | | random_match_mld | 500 matches, default radius
ops: 203.96 ± 0.56 ops/s. best: 204.39ops/s.
total: 279.47 ± 0.77ms. best: 278.87ms.
avg: 4.90 ± 0.01ms
min: 0.20 ± 0.00ms
max: 27.06 ± 0.06ms
p99: 27.06 ± 0.06ms

500 matches, radius=10
ops: 72.37 ± 0.07 ops/s. best: 72.53ops/s.
total: 884.37 ± 0.88ms. best: 882.41ms.
avg: 13.82 ± 0.01ms
min: 0.23 ± 0.00ms
max: 162.33 ± 0.47ms
p99: 162.33 ± 0.47ms

500 matches, radius=20
ops: 15.10 ± 0.02 ops/s. best: 15.12ops/s.
total: 4304.21 ± 4.80ms. best: 4299.39ms.
avg: 66.22 ± 0.07ms
min: 0.29 ± 0.00ms
max: 845.55 ± 2.03ms
p99: 845.55 ± 2.03ms

Peak RAM: 51.000MB | 500 matches, default radius
ops: 312.11 ± 1.00 ops/s. best: 313.05ops/s.
total: 182.63 ± 0.59ms. best: 182.08ms.
avg: 3.20 ± 0.01ms
min: 0.18 ± 0.00ms
max: 17.79 ± 0.04ms
p99: 17.79 ± 0.04ms

500 matches, radius=10
ops: 115.74 ± 0.02 ops/s. best: 115.77ops/s.
total: 552.94 ± 0.11ms. best: 552.80ms.
avg: 8.64 ± 0.00ms
min: 0.23 ± 0.00ms
max: 98.31 ± 0.09ms
p99: 98.31 ± 0.09ms

500 matches, radius=20
ops: 23.21 ± 0.00 ops/s. best: 23.21ops/s.
total: 2800.95 ± 0.49ms. best: 2800.09ms.
avg: 43.09 ± 0.01ms
min: 0.26 ± 0.00ms
max: 521.82 ± 0.30ms
p99: 521.82 ± 0.30ms

Peak RAM: 50.500MB | | random_nearest_ch | 10000 nearest, number_of_results=1
ops: 22051.57 ± 38.00 ops/s. best: 22081.55ops/s.
total: 453.48 ± 0.78ms. best: 452.87ms.
avg: 0.05 ± 0.00ms
min: 0.01 ± 0.00ms
max: 0.15 ± 0.01ms
p99: 0.12 ± 0.00ms

10000 nearest, number_of_results=5
ops: 15946.80 ± 10.37 ops/s. best: 15956.58ops/s.
total: 627.09 ± 0.41ms. best: 626.70ms.
avg: 0.06 ± 0.00ms
min: 0.03 ± 0.00ms
max: 0.15 ± 0.00ms
p99: 0.13 ± 0.00ms

10000 nearest, number_of_results=10
ops: 12126.05 ± 4.04 ops/s. best: 12131.66ops/s.
total: 824.67 ± 0.27ms. best: 824.29ms.
avg: 0.08 ± 0.00ms
min: 0.04 ± 0.00ms
max: 0.17 ± 0.00ms
p99: 0.15 ± 0.00ms

Peak RAM: 34.500MB | 10000 nearest, number_of_results=1
ops: 22161.52 ± 43.78 ops/s. best: 22199.56ops/s.
total: 451.24 ± 0.89ms. best: 450.46ms.
avg: 0.05 ± 0.00ms
min: 0.01 ± 0.00ms
max: 0.15 ± 0.01ms
p99: 0.12 ± 0.00ms

10000 nearest, number_of_results=5
ops: 15896.29 ± 8.55 ops/s. best: 15906.51ops/s.
total: 629.08 ± 0.35ms. best: 628.67ms.
avg: 0.06 ± 0.00ms
min: 0.03 ± 0.00ms
max: 0.18 ± 0.04ms
p99: 0.13 ± 0.00ms

10000 nearest, number_of_results=10
ops: 12034.01 ± 3.47 ops/s. best: 12039.43ops/s.
total: 830.98 ± 0.24ms. best: 830.60ms.
avg: 0.08 ± 0.00ms
min: 0.04 ± 0.00ms
max: 0.17 ± 0.00ms
p99: 0.15 ± 0.00ms

Peak RAM: 34.500MB | | random_nearest_mld | 10000 nearest, number_of_results=1
ops: 22039.86 ± 35.28 ops/s. best: 22066.99ops/s.
total: 453.73 ± 0.73ms. best: 453.17ms.
avg: 0.05 ± 0.00ms
min: 0.01 ± 0.00ms
max: 0.14 ± 0.01ms
p99: 0.12 ± 0.00ms

10000 nearest, number_of_results=5
ops: 15941.51 ± 12.32 ops/s. best: 15951.15ops/s.
total: 627.29 ± 0.49ms. best: 626.91ms.
avg: 0.06 ± 0.00ms
min: 0.03 ± 0.00ms
max: 0.15 ± 0.00ms
p99: 0.13 ± 0.00ms

10000 nearest, number_of_results=10
ops: 12120.91 ± 6.18 ops/s. best: 12130.19ops/s.
total: 825.02 ± 0.41ms. best: 824.39ms.
avg: 0.08 ± 0.00ms
min: 0.04 ± 0.00ms
max: 0.17 ± 0.00ms
p99: 0.15 ± 0.00ms

Peak RAM: 34.500MB | 10000 nearest, number_of_results=1
ops: 22144.07 ± 35.19 ops/s. best: 22177.93ops/s.
total: 451.59 ± 0.72ms. best: 450.90ms.
avg: 0.05 ± 0.00ms
min: 0.01 ± 0.00ms
max: 0.14 ± 0.01ms
p99: 0.12 ± 0.00ms

10000 nearest, number_of_results=5
ops: 15895.86 ± 5.87 ops/s. best: 15902.36ops/s.
total: 629.09 ± 0.23ms. best: 628.84ms.
avg: 0.06 ± 0.00ms
min: 0.03 ± 0.00ms
max: 0.15 ± 0.00ms
p99: 0.13 ± 0.00ms

10000 nearest, number_of_results=10
ops: 12029.13 ± 4.09 ops/s. best: 12034.53ops/s.
total: 831.32 ± 0.28ms. best: 830.94ms.
avg: 0.08 ± 0.00ms
min: 0.04 ± 0.00ms
max: 0.17 ± 0.00ms
p99: 0.15 ± 0.00ms

Peak RAM: 34.500MB | | random_route_ch | 1000 routes, 3 coordinates, no alternatives, overview=full, steps=true
ops: 281.70 ± 0.17 ops/s. best: 281.87ops/s.
total: 3493.08 ± 2.08ms. best: 3491.00ms.
avg: 3.55 ± 0.00ms
min: 0.39 ± 0.01ms
max: 6.01 ± 0.04ms
p99: 5.27 ± 0.01ms

1000 routes, 2 coordinates, 3 alternatives, overview=full, steps=true
ops: 310.41 ± 0.04 ops/s. best: 310.46ops/s.
total: 3221.54 ± 0.40ms. best: 3221.05ms.
avg: 3.22 ± 0.00ms
min: 0.08 ± 0.00ms
max: 7.22 ± 0.01ms
p99: 6.85 ± 0.01ms

1000 routes, 3 coordinates, no alternatives, overview=false, steps=false
ops: 575.77 ± 0.07 ops/s. best: 575.87ops/s.
total: 1709.03 ± 0.22ms. best: 1708.73ms.
avg: 1.74 ± 0.00ms
min: 0.31 ± 0.01ms
max: 2.88 ± 0.01ms
p99: 2.46 ± 0.01ms

1000 routes, 2 coordinates, 3 alternatives, overview=false, steps=false
ops: 578.14 ± 0.07 ops/s. best: 578.26ops/s.
total: 1729.69 ± 0.22ms. best: 1729.32ms.
avg: 1.73 ± 0.00ms
min: 0.06 ± 0.00ms
max: 5.17 ± 0.01ms
p99: 4.04 ± 0.01ms

Peak RAM: 84.000MB | 1000 routes, 3 coordinates, no alternatives, overview=full, steps=true
ops: 288.90 ± 0.13 ops/s. best: 289.02ops/s.
total: 3406.00 ± 1.55ms. best: 3404.62ms.
avg: 3.46 ± 0.00ms
min: 0.40 ± 0.01ms
max: 5.94 ± 0.04ms
p99: 5.16 ± 0.01ms

1000 routes, 2 coordinates, 3 alternatives, overview=full, steps=true
ops: 313.83 ± 0.10 ops/s. best: 313.96ops/s.
total: 3186.40 ± 1.01ms. best: 3185.10ms.
avg: 3.19 ± 0.00ms
min: 0.08 ± 0.00ms
max: 7.17 ± 0.01ms
p99: 6.79 ± 0.01ms

1000 routes, 3 coordinates, no alternatives, overview=false, steps=false
ops: 607.56 ± 0.16 ops/s. best: 607.81ops/s.
total: 1619.59 ± 0.43ms. best: 1618.93ms.
avg: 1.65 ± 0.00ms
min: 0.30 ± 0.00ms
max: 2.69 ± 0.00ms
p99: 2.35 ± 0.01ms

1000 routes, 2 coordinates, 3 alternatives, overview=false, steps=false
ops: 595.37 ± 0.14 ops/s. best: 595.55ops/s.
total: 1679.63 ± 0.39ms. best: 1679.12ms.
avg: 1.68 ± 0.00ms
min: 0.06 ± 0.00ms
max: 4.95 ± 0.01ms
p99: 3.91 ± 0.01ms

Peak RAM: 84.000MB | | random_route_mld | 1000 routes, 3 coordinates, no alternatives, overview=full, steps=true
ops: 147.72 ± 0.04 ops/s. best: 147.75ops/s.
total: 6661.26 ± 1.88ms. best: 6659.70ms.
avg: 6.77 ± 0.00ms
min: 0.37 ± 0.00ms
max: 16.23 ± 0.02ms
p99: 11.01 ± 0.01ms

1000 routes, 2 coordinates, 3 alternatives, overview=full, steps=true
ops: 142.44 ± 0.02 ops/s. best: 142.47ops/s.
total: 7020.38 ± 0.90ms. best: 7019.19ms.
avg: 7.02 ± 0.00ms
min: 0.07 ± 0.00ms
max: 15.92 ± 0.04ms
p99: 15.01 ± 0.02ms

1000 routes, 3 coordinates, no alternatives, overview=false, steps=false
ops: 205.67 ± 0.01 ops/s. best: 205.69ops/s.
total: 4784.34 ± 0.16ms. best: 4784.00ms.
avg: 4.86 ± 0.00ms
min: 0.32 ± 0.00ms
max: 13.49 ± 0.01ms
p99: 8.40 ± 0.01ms

1000 routes, 2 coordinates, 3 alternatives, overview=false, steps=false
ops: 178.17 ± 0.05 ops/s. best: 178.25ops/s.
total: 5612.66 ± 1.56ms. best: 5609.95ms.
avg: 5.61 ± 0.00ms
min: 0.05 ± 0.00ms
max: 12.15 ± 0.02ms
p99: 11.56 ± 0.01ms

Peak RAM: 73.297MB | 1000 routes, 3 coordinates, no alternatives, overview=full, steps=true
ops: 163.86 ± 0.01 ops/s. best: 163.87ops/s.
total: 6005.13 ± 0.33ms. best: 6004.61ms.
avg: 6.10 ± 0.00ms
min: 0.38 ± 0.00ms
max: 14.27 ± 0.03ms
p99: 9.89 ± 0.01ms

1000 routes, 2 coordinates, 3 alternatives, overview=full, steps=true
ops: 162.05 ± 0.03 ops/s. best: 162.10ops/s.
total: 6171.04 ± 1.09ms. best: 6169.02ms.
avg: 6.17 ± 0.00ms
min: 0.07 ± 0.00ms
max: 14.29 ± 0.09ms
p99: 13.33 ± 0.03ms

1000 routes, 3 coordinates, no alternatives, overview=false, steps=false
ops: 239.43 ± 0.02 ops/s. best: 239.45ops/s.
total: 4109.78 ± 0.34ms. best: 4109.47ms.
avg: 4.18 ± 0.00ms
min: 0.31 ± 0.00ms
max: 11.47 ± 0.01ms
p99: 7.15 ± 0.02ms

1000 routes, 2 coordinates, 3 alternatives, overview=false, steps=false
ops: 211.07 ± 0.17 ops/s. best: 211.36ops/s.
total: 4737.75 ± 3.72ms. best: 4731.19ms.
avg: 4.74 ± 0.00ms
min: 0.05 ± 0.00ms
max: 10.62 ± 0.10ms
p99: 9.92 ± 0.01ms

Peak RAM: 73.422MB | | random_table_ch | 250 tables, 3 coordinates
ops: 1067.80 ± 4.22 ops/s. best: 1071.17ops/s.
total: 234.13 ± 0.93ms. best: 233.39ms.
avg: 0.94 ± 0.00ms
min: 0.71 ± 0.00ms
max: 1.24 ± 0.15ms
p99: 1.11 ± 0.00ms

250 tables, 25 coordinates
ops: 119.99 ± 0.02 ops/s. best: 120.03ops/s.
total: 2083.47 ± 0.38ms. best: 2082.81ms.
avg: 8.33 ± 0.00ms
min: 7.74 ± 0.01ms
max: 9.01 ± 0.01ms
p99: 8.82 ± 0.01ms

250 tables, 50 coordinates
ops: 58.45 ± 0.00 ops/s. best: 58.46ops/s.
total: 4277.29 ± 0.36ms. best: 4276.78ms.
avg: 17.11 ± 0.00ms
min: 16.27 ± 0.01ms
max: 18.00 ± 0.01ms
p99: 17.94 ± 0.01ms

Peak RAM: 63.000MB | 250 tables, 3 coordinates
ops: 1176.70 ± 5.86 ops/s. best: 1181.10ops/s.
total: 212.47 ± 1.07ms. best: 211.67ms.
avg: 0.85 ± 0.00ms
min: 0.63 ± 0.00ms
max: 1.15 ± 0.16ms
p99: 1.02 ± 0.02ms

250 tables, 25 coordinates
ops: 131.51 ± 0.03 ops/s. best: 131.54ops/s.
total: 1901.03 ± 0.40ms. best: 1900.61ms.
avg: 7.60 ± 0.00ms
min: 7.03 ± 0.01ms
max: 8.23 ± 0.01ms
p99: 8.07 ± 0.01ms

250 tables, 50 coordinates
ops: 63.71 ± 0.01 ops/s. best: 63.72ops/s.
total: 3924.29 ± 0.43ms. best: 3923.46ms.
avg: 15.70 ± 0.00ms
min: 14.96 ± 0.01ms
max: 16.57 ± 0.01ms
p99: 16.48 ± 0.01ms

Peak RAM: 62.500MB | | random_table_mld | 250 tables, 3 coordinates
ops: 226.17 ± 0.34 ops/s. best: 226.41ops/s.
total: 1105.39 ± 1.66ms. best: 1104.18ms.
avg: 4.42 ± 0.01ms
min: 3.48 ± 0.01ms
max: 5.71 ± 0.02ms
p99: 5.55 ± 0.01ms

250 tables, 25 coordinates
ops: 23.83 ± 0.01 ops/s. best: 23.85ops/s.
total: 10492.60 ± 4.27ms. best: 10482.86ms.
avg: 41.97 ± 0.02ms
min: 38.73 ± 0.05ms
max: 45.77 ± 0.10ms
p99: 45.06 ± 0.03ms

250 tables, 50 coordinates
ops: 11.04 ± 0.00 ops/s. best: 11.05ops/s.
total: 22636.41 ± 9.41ms. best: 22615.16ms.
avg: 90.55 ± 0.04ms
min: 86.47 ± 0.16ms
max: 96.15 ± 0.26ms
p99: 94.53 ± 0.19ms

Peak RAM: 63.172MB | 250 tables, 3 coordinates
ops: 252.14 ± 0.33 ops/s. best: 252.37ops/s.
total: 991.53 ± 1.30ms. best: 990.60ms.
avg: 3.97 ± 0.01ms
min: 3.11 ± 0.01ms
max: 5.16 ± 0.03ms
p99: 5.03 ± 0.01ms

250 tables, 25 coordinates
ops: 26.19 ± 0.00 ops/s. best: 26.20ops/s.
total: 9543.95 ± 0.45ms. best: 9543.50ms.
avg: 38.18 ± 0.00ms
min: 35.18 ± 0.03ms
max: 41.61 ± 0.01ms
p99: 41.06 ± 0.03ms

250 tables, 50 coordinates
ops: 12.02 ± 0.00 ops/s. best: 12.02ops/s.
total: 20797.16 ± 0.91ms. best: 20795.55ms.
avg: 83.19 ± 0.00ms
min: 79.31 ± 0.05ms
max: 88.61 ± 0.14ms
p99: 87.25 ± 0.02ms

Peak RAM: 62.750MB | | random_trip_ch | 250 trips, 3 coordinates
ops: 316.37 ± 0.45 ops/s. best: 316.78ops/s.
total: 790.21 ± 1.13ms. best: 789.20ms.
avg: 3.16 ± 0.00ms
min: 1.72 ± 0.01ms
max: 4.40 ± 0.01ms
p99: 4.19 ± 0.01ms

250 trips, 5 coordinates
ops: 204.38 ± 0.05 ops/s. best: 204.46ops/s.
total: 1223.20 ± 0.30ms. best: 1222.76ms.
avg: 4.89 ± 0.00ms
min: 3.27 ± 0.00ms
max: 6.15 ± 0.01ms
p99: 6.04 ± 0.02ms

Peak RAM: 73.500MB | 250 trips, 3 coordinates
ops: 333.92 ± 0.49 ops/s. best: 334.31ops/s.
total: 748.68 ± 1.11ms. best: 747.81ms.
avg: 2.99 ± 0.00ms
min: 1.58 ± 0.01ms
max: 4.23 ± 0.01ms
p99: 4.01 ± 0.03ms

250 trips, 5 coordinates
ops: 216.05 ± 0.05 ops/s. best: 216.12ops/s.
total: 1157.12 ± 0.28ms. best: 1156.74ms.
avg: 4.63 ± 0.00ms
min: 3.03 ± 0.00ms
max: 5.86 ± 0.01ms
p99: 5.75 ± 0.01ms

Peak RAM: 73.500MB | | random_trip_mld | 250 trips, 3 coordinates
ops: 107.17 ± 0.06 ops/s. best: 107.29ops/s.
total: 2332.80 ± 1.30ms. best: 2330.10ms.
avg: 9.33 ± 0.01ms
min: 5.48 ± 0.01ms
max: 12.12 ± 0.06ms
p99: 12.03 ± 0.03ms

250 trips, 5 coordinates
ops: 68.78 ± 0.13 ops/s. best: 68.99ops/s.
total: 3634.56 ± 6.63ms. best: 3623.76ms.
avg: 14.54 ± 0.03ms
min: 10.06 ± 0.04ms
max: 17.85 ± 0.08ms
p99: 17.29 ± 0.01ms

Peak RAM: 69.000MB | 250 trips, 3 coordinates
ops: 119.16 ± 0.06 ops/s. best: 119.22ops/s.
total: 2098.08 ± 1.10ms. best: 2096.95ms.
avg: 8.39 ± 0.00ms
min: 4.95 ± 0.01ms
max: 11.02 ± 0.01ms
p99: 10.85 ± 0.02ms

250 trips, 5 coordinates
ops: 76.55 ± 0.02 ops/s. best: 76.59ops/s.
total: 3265.84 ± 0.78ms. best: 3264.01ms.
avg: 13.06 ± 0.00ms
min: 9.04 ± 0.01ms
max: 16.06 ± 0.02ms
p99: 15.76 ± 0.02ms

Peak RAM: 69.000MB | | route_ch | 1000 routes, 3 coordinates, no alternatives, overview=full, steps=true
638.512ms
0.638512ms/req
1000 routes, 2 coordinates, 3 alternatives, overview=full, steps=true
782.633ms
0.782633ms/req
1000 routes, 3 coordinates, no alternatives, overview=false, steps=false
245.606ms
0.245606ms/req
1000 routes, 2 coordinates, 3 alternatives, overview=false, steps=false
216.836ms
0.216836ms/req | 1000 routes, 3 coordinates, no alternatives, overview=full, steps=true
623.853ms
0.623853ms/req
1000 routes, 2 coordinates, 3 alternatives, overview=full, steps=true
770.272ms
0.770272ms/req
1000 routes, 3 coordinates, no alternatives, overview=false, steps=false
235.338ms
0.235338ms/req
1000 routes, 2 coordinates, 3 alternatives, overview=false, steps=false
211.587ms
0.211587ms/req | | route_mld | 1000 routes, 3 coordinates, no alternatives, overview=full, steps=true
809.321ms
0.809321ms/req
1000 routes, 2 coordinates, 3 alternatives, overview=full, steps=true
1040.37ms
1.04037ms/req
1000 routes, 3 coordinates, no alternatives, overview=false, steps=false
414.188ms
0.414188ms/req
1000 routes, 2 coordinates, 3 alternatives, overview=false, steps=false
461.797ms
0.461797ms/req | 1000 routes, 3 coordinates, no alternatives, overview=full, steps=true
743.188ms
0.743188ms/req
1000 routes, 2 coordinates, 3 alternatives, overview=full, steps=true
955.058ms
0.955058ms/req
1000 routes, 3 coordinates, no alternatives, overview=false, steps=false
349.408ms
0.349408ms/req
1000 routes, 2 coordinates, 3 alternatives, overview=false, steps=false
378.145ms
0.378145ms/req | | rtree | 1 result:
227.362ms -> 0.0227362 ms/query
10 results:
258.204ms -> 0.0258204 ms/query | 1 result:
227.214ms -> 0.0227214 ms/query
10 results:
257.99ms -> 0.025799 ms/query |
SiarheiFedartsou commented 4 months ago

@DennisOSRM would love to have your opinion here :)