diff --git a/.gitignore b/.gitignore index 0bb27484c..0270e7c3f 100644 --- a/.gitignore +++ b/.gitignore @@ -78,6 +78,7 @@ stxxl.errlog /test/profile.lua /test/cache /test/speeds.csv +/test/data/monaco.* node_modules # Deprecated config file # diff --git a/.travis.yml b/.travis.yml index 3f799d617..72d93338a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -164,7 +164,7 @@ script: - ./util-tests - popd - npm test - - make -C test/data + - make -C test/data benchmark - mkdir example/build && pushd example/build - cmake .. - make diff --git a/scripts/poly2req.js b/scripts/poly2req.js new file mode 100755 index 000000000..b0844e46f --- /dev/null +++ b/scripts/poly2req.js @@ -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)); +} + diff --git a/scripts/timer.sh b/scripts/timer.sh new file mode 100755 index 000000000..39d8e5b34 --- /dev/null +++ b/scripts/timer.sh @@ -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 diff --git a/test/data/Makefile b/test/data/Makefile index 0ddda31bc..8684bc885 100755 --- a/test/data/Makefile +++ b/test/data/Makefile @@ -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 PROFILE_ROOT:=../../profiles +SCRIPT_ROOT:=../../scripts OSRM_EXTRACT:=$(TOOL_ROOT)/osrm-extract 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 -all: monaco.osrm.hsgr +all: $(DATA_NAME).osrm.hsgr clean: - rm monaco.* + rm $(DATA_NAME).* -monaco.osm.pbf: - wget $(MONACO_URL) -O monaco.osm.pbf +$(DATA_NAME).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..." md5sum -c data.md5sum @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..." - $(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: - md5sum monaco.osm.pbf > data.md5sum + md5sum $(DATA_NAME).osm.pbf $(DATA_NAME).poly > data.md5sum -.PHONY: clean checksum +.PHONY: clean checksum benchmark diff --git a/test/data/data.md5sum b/test/data/data.md5sum index 47151b4b1..9bcfd33c2 100644 --- a/test/data/data.md5sum +++ b/test/data/data.md5sum @@ -1 +1,2 @@ 2b8dd9343d5e615afc9c67bcc7028a63 monaco.osm.pbf +b0788991ab3791d53c1c20b6281f81ad monaco.poly