Add benchmark target to Makefile and save timings
This commit is contained in:
parent
efe6faabfd
commit
54ee76bcef
1
.gitignore
vendored
1
.gitignore
vendored
@ -78,6 +78,7 @@ stxxl.errlog
|
|||||||
/test/profile.lua
|
/test/profile.lua
|
||||||
/test/cache
|
/test/cache
|
||||||
/test/speeds.csv
|
/test/speeds.csv
|
||||||
|
/test/data/monaco.*
|
||||||
node_modules
|
node_modules
|
||||||
|
|
||||||
# Deprecated config file #
|
# Deprecated config file #
|
||||||
|
@ -164,7 +164,7 @@ script:
|
|||||||
- ./util-tests
|
- ./util-tests
|
||||||
- popd
|
- popd
|
||||||
- npm test
|
- npm test
|
||||||
- make -C test/data
|
- make -C test/data benchmark
|
||||||
- mkdir example/build && pushd example/build
|
- mkdir example/build && pushd example/build
|
||||||
- cmake ..
|
- cmake ..
|
||||||
- make
|
- make
|
||||||
|
61
scripts/poly2req.js
Executable file
61
scripts/poly2req.js
Executable file
@ -0,0 +1,61 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
let fs = require('fs');
|
||||||
|
|
||||||
|
let NUM_REQUEST = 1000;
|
||||||
|
let NUM_COORDS = 2;
|
||||||
|
let url_template = "http://127.0.0.1:5000/viaroute?{coords}&alt=false";
|
||||||
|
let coord_template = "loc={lat},{lon}";
|
||||||
|
let coords_separator = "&";
|
||||||
|
//let url_template = "http://127.0.0.1:5000/route/v1/driving/{coords}?steps=false&alternatives=false";
|
||||||
|
//let coord_template = "{lon},{lat}";
|
||||||
|
//let coords_separator = ";";
|
||||||
|
|
||||||
|
let monaco_poly_path = process.argv[2];
|
||||||
|
let poly_data = fs.readFileSync(monaco_poly_path, 'utf-8');
|
||||||
|
|
||||||
|
// lets assume there is only one ring
|
||||||
|
// cut of name and ring number and the two END statements
|
||||||
|
let coordinates = poly_data.split('\n')
|
||||||
|
.filter((l) => l != '')
|
||||||
|
.slice(2, -2).map((coord_line) => coord_line.split(' ')
|
||||||
|
.filter((elem) => elem != ''))
|
||||||
|
.map((coord) => [parseFloat(coord[0]), parseFloat(coord[1])]);
|
||||||
|
|
||||||
|
var sw = [Number.MAX_VALUE, Number.MAX_VALUE];
|
||||||
|
var ne = [Number.MIN_VALUE, Number.MIN_VALUE];
|
||||||
|
|
||||||
|
coordinates.forEach((c) => {
|
||||||
|
sw[0] = Math.min(sw[0], c[0]);
|
||||||
|
sw[1] = Math.min(sw[1], c[1]);
|
||||||
|
ne[0] = Math.max(ne[0], c[0]);
|
||||||
|
ne[1] = Math.max(ne[1], c[1]);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Yes this an own seeded random number generator because its only a few lines
|
||||||
|
var seed = 0x1337;
|
||||||
|
function seededRandom(min, max) {
|
||||||
|
seed = (seed * 9301 + 49297) % 233280;
|
||||||
|
var rnd = seed / 233280;
|
||||||
|
return min + rnd * (max - min);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getRandomCoordinate() {
|
||||||
|
let lon = seededRandom(sw[0], ne[0]);
|
||||||
|
let lat = seededRandom(sw[1], ne[1]);
|
||||||
|
return [lon, lat];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var i = 0; i < NUM_REQUEST; ++i)
|
||||||
|
{
|
||||||
|
var coords = [];
|
||||||
|
for (var j = 0; j < NUM_COORDS; ++j)
|
||||||
|
{
|
||||||
|
coords.push(getRandomCoordinate());
|
||||||
|
}
|
||||||
|
let coords_string = coords.map((c) => coord_template.replace("{lon}", c[0]).replace("{lat}", c[1])).join(coords_separator);
|
||||||
|
console.log(url_template.replace("{coords}", coords_string));
|
||||||
|
}
|
||||||
|
|
12
scripts/timer.sh
Executable file
12
scripts/timer.sh
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
TIMINGS_FILE=/tmp/osrm.timings
|
||||||
|
NAME=$1
|
||||||
|
CMD=${@:2}
|
||||||
|
START=$(date "+%s.%N")
|
||||||
|
/bin/bash -c "$CMD"
|
||||||
|
END=$(date "+%s.%N")
|
||||||
|
TIME="$(echo "$END - $START" | bc)s"
|
||||||
|
NEW_ENTRY="$NAME\t$TIME\t$(date -Iseconds)"
|
||||||
|
|
||||||
|
echo -e "$NEW_ENTRY" >> $TIMINGS_FILE
|
@ -1,29 +1,54 @@
|
|||||||
MONACO_URL:=https://s3.amazonaws.com/mapbox/osrm/testing/monaco.osm.pbf
|
DATA_NAME:=monaco
|
||||||
|
DATA_URL:=https://s3.amazonaws.com/mapbox/osrm/testing/$(DATA_NAME).osm.pbf
|
||||||
|
DATA_POLY_URL:=https://s3.amazonaws.com/mapbox/osrm/testing/$(DATA_NAME).poly
|
||||||
TOOL_ROOT:=../../build
|
TOOL_ROOT:=../../build
|
||||||
PROFILE_ROOT:=../../profiles
|
PROFILE_ROOT:=../../profiles
|
||||||
|
SCRIPT_ROOT:=../../scripts
|
||||||
OSRM_EXTRACT:=$(TOOL_ROOT)/osrm-extract
|
OSRM_EXTRACT:=$(TOOL_ROOT)/osrm-extract
|
||||||
OSRM_CONTRACT:=$(TOOL_ROOT)/osrm-contract
|
OSRM_CONTRACT:=$(TOOL_ROOT)/osrm-contract
|
||||||
|
OSRM_ROUTED:=$(TOOL_ROOT)/osrm-routed
|
||||||
|
POLY2REQ:=$(SCRIPT_ROOT)/poly2req.js
|
||||||
|
TIMER:=$(SCRIPT_ROOT)/timer.sh
|
||||||
PROFILE:=$(PROFILE_ROOT)/car.lua
|
PROFILE:=$(PROFILE_ROOT)/car.lua
|
||||||
|
|
||||||
all: monaco.osrm.hsgr
|
all: $(DATA_NAME).osrm.hsgr
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm monaco.*
|
rm $(DATA_NAME).*
|
||||||
|
|
||||||
monaco.osm.pbf:
|
$(DATA_NAME).osm.pbf:
|
||||||
wget $(MONACO_URL) -O monaco.osm.pbf
|
wget $(DATA_URL) -O $(DATA_NAME).osm.pbf
|
||||||
|
|
||||||
monaco.osrm: monaco.osm.pbf $(PROFILE) $(OSRM_EXTRACT)
|
$(DATA_NAME).poly:
|
||||||
|
wget $(DATA_POLY_URL) -O $(DATA_NAME).poly
|
||||||
|
|
||||||
|
$(DATA_NAME).osrm: $(DATA_NAME).osm.pbf $(DATA_NAME).poly $(PROFILE) $(OSRM_EXTRACT)
|
||||||
@echo "Verifiyng data file integrity..."
|
@echo "Verifiyng data file integrity..."
|
||||||
md5sum -c data.md5sum
|
md5sum -c data.md5sum
|
||||||
@echo "Running osrm-extract..."
|
@echo "Running osrm-extract..."
|
||||||
$(OSRM_EXTRACT) monaco.osm.pbf -p $(PROFILE)
|
$(TIMER) "osrm-extract" $(OSRM_EXTRACT) $(DATA_NAME).osm.pbf -p $(PROFILE)
|
||||||
|
|
||||||
monaco.osrm.hsgr: monaco.osrm $(PROFILE) $(OSRM_CONTRACT)
|
$(DATA_NAME).osrm.hsgr: $(DATA_NAME).osrm $(PROFILE) $(OSRM_CONTRACT)
|
||||||
@echo "Running osrm-contract..."
|
@echo "Running osrm-contract..."
|
||||||
$(OSRM_CONTRACT) monaco.osrm
|
$(TIMER) "osrm-contract" $(OSRM_CONTRACT) $(DATA_NAME).osrm
|
||||||
|
|
||||||
|
$(DATA_NAME).requests: $(DATA_NAME).poly
|
||||||
|
$(POLY2REQ) $(DATA_NAME).poly > $(DATA_NAME).requests
|
||||||
|
|
||||||
|
osrm-routed.pid: $(DATA_NAME).osrm.hsgr
|
||||||
|
@/bin/sh -c '$(OSRM_ROUTED) $(DATA_NAME).osrm& echo "$$!" > osrm-routed.pid'
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
benchmark: $(DATA_NAME).requests osrm-routed.pid
|
||||||
|
@echo "Running benchmark..."
|
||||||
|
$(TIMER) "queries" "cat $(DATA_NAME).requests | xargs curl &> /dev/null"
|
||||||
|
@cat osrm-routed.pid | xargs kill
|
||||||
|
@rm osrm-routed.pid
|
||||||
|
@echo "**** timings ***"
|
||||||
|
@cat /tmp/osrm.timings
|
||||||
|
@echo "****************"
|
||||||
|
|
||||||
checksum:
|
checksum:
|
||||||
md5sum monaco.osm.pbf > data.md5sum
|
md5sum $(DATA_NAME).osm.pbf $(DATA_NAME).poly > data.md5sum
|
||||||
|
|
||||||
.PHONY: clean checksum
|
.PHONY: clean checksum benchmark
|
||||||
|
@ -1 +1,2 @@
|
|||||||
2b8dd9343d5e615afc9c67bcc7028a63 monaco.osm.pbf
|
2b8dd9343d5e615afc9c67bcc7028a63 monaco.osm.pbf
|
||||||
|
b0788991ab3791d53c1c20b6281f81ad monaco.poly
|
||||||
|
Loading…
Reference in New Issue
Block a user