From 2da7ca5338ef608d33d7e55de81cf10af702ca7a Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Fri, 12 Jul 2024 20:12:19 +0200 Subject: [PATCH 1/5] Route pedestrians over highway=platform (#6993) --- CHANGELOG.md | 1 + features/foot/access.feature | 10 +++++++++- profiles/foot.lua | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b67841c9c..614601a6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Unreleased - Changes from 5.27.1 - Features + - ADDED: Route pedestrians over highway=platform [#6993](https://github.com/Project-OSRM/osrm-backend/pull/6993) - REMOVED: Remove all core-CH left-overs [#6920](https://github.com/Project-OSRM/osrm-backend/pull/6920) - ADDED: Add support for a keepalive_timeout flag. [#6674](https://github.com/Project-OSRM/osrm-backend/pull/6674) - ADDED: Add support for a default_radius flag. [#6575](https://github.com/Project-OSRM/osrm-backend/pull/6575) diff --git a/features/foot/access.feature b/features/foot/access.feature index 87330ec9c..134e02ea2 100644 --- a/features/foot/access.feature +++ b/features/foot/access.feature @@ -26,7 +26,15 @@ Feature: Foot - Access tags on ways | motorway | no | | | | motorway | no | yes | x | | motorway | no | no | | - + | platform | | | x | + | platform | | yes | x | + | platform | | no | | + | platform | yes | | x | + | platform | yes | yes | x | + | platform | yes | no | | + | platform | no | | | + | platform | no | yes | x | + | platform | no | no | | Scenario: Foot - Overwriting implied acccess on ways Then routability should be diff --git a/profiles/foot.lua b/profiles/foot.lua index 1b16e092c..fa5f8b663 100644 --- a/profiles/foot.lua +++ b/profiles/foot.lua @@ -90,6 +90,7 @@ function setup() path = walking_speed, steps = walking_speed, pedestrian = walking_speed, + platform = walking_speed, footway = walking_speed, pier = walking_speed, }, From 43afec3b393bc64df6470e3ca6106afbfd0c3dba Mon Sep 17 00:00:00 2001 From: Siarhei Fedartsou Date: Sat, 13 Jul 2024 13:43:56 +0200 Subject: [PATCH 2/5] Move flatbuffers non-generated files back to include/engine/api/flatbuffers/ (#6996) --- .../include => include}/engine/api/flatbuffers/fbresult.fbs | 0 .../include => include}/engine/api/flatbuffers/position.fbs | 0 {generated/include => include}/engine/api/flatbuffers/route.fbs | 0 {generated/include => include}/engine/api/flatbuffers/table.fbs | 0 .../include => include}/engine/api/flatbuffers/waypoint.fbs | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename {generated/include => include}/engine/api/flatbuffers/fbresult.fbs (100%) rename {generated/include => include}/engine/api/flatbuffers/position.fbs (100%) rename {generated/include => include}/engine/api/flatbuffers/route.fbs (100%) rename {generated/include => include}/engine/api/flatbuffers/table.fbs (100%) rename {generated/include => include}/engine/api/flatbuffers/waypoint.fbs (100%) diff --git a/generated/include/engine/api/flatbuffers/fbresult.fbs b/include/engine/api/flatbuffers/fbresult.fbs similarity index 100% rename from generated/include/engine/api/flatbuffers/fbresult.fbs rename to include/engine/api/flatbuffers/fbresult.fbs diff --git a/generated/include/engine/api/flatbuffers/position.fbs b/include/engine/api/flatbuffers/position.fbs similarity index 100% rename from generated/include/engine/api/flatbuffers/position.fbs rename to include/engine/api/flatbuffers/position.fbs diff --git a/generated/include/engine/api/flatbuffers/route.fbs b/include/engine/api/flatbuffers/route.fbs similarity index 100% rename from generated/include/engine/api/flatbuffers/route.fbs rename to include/engine/api/flatbuffers/route.fbs diff --git a/generated/include/engine/api/flatbuffers/table.fbs b/include/engine/api/flatbuffers/table.fbs similarity index 100% rename from generated/include/engine/api/flatbuffers/table.fbs rename to include/engine/api/flatbuffers/table.fbs diff --git a/generated/include/engine/api/flatbuffers/waypoint.fbs b/include/engine/api/flatbuffers/waypoint.fbs similarity index 100% rename from generated/include/engine/api/flatbuffers/waypoint.fbs rename to include/engine/api/flatbuffers/waypoint.fbs From 7802f86bd6a1382a40f45775f15a6fedc3902956 Mon Sep 17 00:00:00 2001 From: Siarhei Fedartsou Date: Thu, 25 Jul 2024 21:27:37 +0200 Subject: [PATCH 3/5] Measure peak RAM in benchmarks (#6995) --- include/util/meminfo.hpp | 18 ++++++++++++++---- src/benchmarks/bench.cpp | 8 +++++++- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/include/util/meminfo.hpp b/include/util/meminfo.hpp index e20599751..deae3b8b7 100644 --- a/include/util/meminfo.hpp +++ b/include/util/meminfo.hpp @@ -2,6 +2,7 @@ #define MEMINFO_HPP #include "util/log.hpp" +#include #ifndef _WIN32 #include @@ -10,22 +11,31 @@ namespace osrm::util { -inline void DumpMemoryStats() +inline size_t PeakRAMUsedInBytes() { #ifndef _WIN32 rusage usage; getrusage(RUSAGE_SELF, &usage); #ifdef __linux__ // Under linux, ru.maxrss is in kb - util::Log() << "RAM: peak bytes used: " << usage.ru_maxrss * 1024; + return usage.ru_maxrss * 1024; #else // __linux__ // Under BSD systems (OSX), it's in bytes - util::Log() << "RAM: peak bytes used: " << usage.ru_maxrss; + return usage.ru_maxrss; #endif // __linux__ +#else // _WIN32 + return 0; +#endif // _WIN32 +} + +inline void DumpMemoryStats() +{ +#ifndef _WIN32 + util::Log() << "RAM: peak bytes used: " << PeakRAMUsedInBytes(); #else // _WIN32 util::Log() << "RAM: peak bytes used: "; #endif // _WIN32 } } // namespace osrm::util -#endif +#endif \ No newline at end of file diff --git a/src/benchmarks/bench.cpp b/src/benchmarks/bench.cpp index 019ff6456..86b263a6b 100644 --- a/src/benchmarks/bench.cpp +++ b/src/benchmarks/bench.cpp @@ -16,8 +16,8 @@ #include "osrm/osrm.hpp" #include "osrm/status.hpp" +#include "util/meminfo.hpp" #include - #include #include #include @@ -655,6 +655,12 @@ try std::cerr << "Unknown benchmark: " << benchmarkToRun << std::endl; return EXIT_FAILURE; } + + std::cout << "Peak RAM: " << std::setprecision(3) + << static_cast(osrm::util::PeakRAMUsedInBytes()) / + static_cast((1024 * 1024)) + << "MB" << std::endl; + return EXIT_SUCCESS; } catch (const std::exception &e) From 84f12c7c6d56af0b72ebcec156cbccd17b61d6fb Mon Sep 17 00:00:00 2001 From: Siarhei Fedartsou Date: Fri, 26 Jul 2024 19:36:43 +0200 Subject: [PATCH 4/5] Add NodeJs bindings benchmarks (#7004) --- .github/workflows/osrm-backend.yml | 17 ++- package-lock.json | 13 +- package.json | 11 +- scripts/ci/bench.js | 211 +++++++++++++++++++++++++++++ scripts/ci/run_benchmarks.sh | 13 ++ 5 files changed, 258 insertions(+), 7 deletions(-) create mode 100644 scripts/ci/bench.js diff --git a/.github/workflows/osrm-backend.yml b/.github/workflows/osrm-backend.yml index 454e273f4..59329f539 100644 --- a/.github/workflows/osrm-backend.yml +++ b/.github/workflows/osrm-backend.yml @@ -672,6 +672,11 @@ jobs: key: v1-data-osm-pbf restore-keys: | v1-data-osm-pbf + - name: Use Node 20 + if: ${{ matrix.NODE_PACKAGE_TESTS_ONLY == 'ON' }} + uses: actions/setup-node@v4 + with: + node-version: 20 - name: Enable compiler cache uses: actions/cache@v4 with: @@ -722,18 +727,24 @@ jobs: path: base - name: Build Base Branch run: | + cd base + npm ci --ignore-scripts + cd .. mkdir base/build cd base/build - cmake -DENABLE_CONAN=ON -DCMAKE_BUILD_TYPE=Release .. + cmake -DENABLE_CONAN=ON -DCMAKE_BUILD_TYPE=Release -DENABLE_NODE_BINDINGS=ON .. make -j$(nproc) make -j$(nproc) benchmarks cd .. make -C test/data - name: Build PR Branch run: | + cd pr + npm ci --ignore-scripts + cd .. mkdir -p pr/build cd pr/build - cmake -DENABLE_CONAN=ON -DCMAKE_BUILD_TYPE=Release .. + cmake -DENABLE_CONAN=ON -DCMAKE_BUILD_TYPE=Release -DENABLE_NODE_BINDINGS=ON .. make -j$(nproc) make -j$(nproc) benchmarks cd .. @@ -745,6 +756,7 @@ jobs: run: | sudo mount -t tmpfs -o size=4g none /opt/benchmarks cp -rf pr/build /opt/benchmarks/build + cp -rf pr/lib /opt/benchmarks/lib mkdir -p /opt/benchmarks/test cp -rf pr/test/data /opt/benchmarks/test/data cp -rf pr/profiles /opt/benchmarks/profiles @@ -755,6 +767,7 @@ jobs: run: | sudo mount -t tmpfs -o size=4g none /opt/benchmarks cp -rf base/build /opt/benchmarks/build + cp -rf base/lib /opt/benchmarks/lib mkdir -p /opt/benchmarks/test cp -rf base/test/data /opt/benchmarks/test/data cp -rf base/profiles /opt/benchmarks/profiles diff --git a/package-lock.json b/package-lock.json index c5efc04e2..4731fa104 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,8 @@ "hasInstallScript": true, "license": "BSD-2-Clause", "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.11" + "@mapbox/node-pre-gyp": "^1.0.11", + "seedrandom": "^3.0.5" }, "devDependencies": { "@babel/cli": "^7.18.10", @@ -14652,6 +14653,11 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "devOptional": true }, + "node_modules/seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + }, "node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", @@ -30296,6 +30302,11 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "devOptional": true }, + "seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + }, "semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", diff --git a/package.json b/package.json index 02eee8430..f36d90da5 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "private": false, "description": "The Open Source Routing Machine is a high performance routing engine written in C++ designed to run on OpenStreetMap data.", "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.11" + "@mapbox/node-pre-gyp": "^1.0.11", + "seedrandom": "^3.0.5" }, "browserify": { "transform": [ @@ -57,6 +58,7 @@ "jsonpath": "^1.1.1", "mkdirp": "^0.5.6", "node-addon-api": "^5.0.0", + "node-cmake": "^2.5.1", "node-timeout": "0.0.4", "polyline": "^0.2.0", "request": "^2.88.2", @@ -64,12 +66,13 @@ "tape": "^4.16.0", "turf": "^3.0.14", "uglify-js": "^3.17.0", - "xmlbuilder": "^4.2.1", - "node-cmake": "^2.5.1" + "xmlbuilder": "^4.2.1" }, "main": "lib/index.js", "binary": { - "napi_versions": [8], + "napi_versions": [ + 8 + ], "module_name": "node_osrm", "module_path": "./lib/binding_napi_v{napi_build_version}/", "host": "https://github.com", diff --git a/scripts/ci/bench.js b/scripts/ci/bench.js new file mode 100644 index 000000000..71c3001c4 --- /dev/null +++ b/scripts/ci/bench.js @@ -0,0 +1,211 @@ +const fs = require('fs'); +const path = require('path'); +const readline = require('readline'); +const seedrandom = require('seedrandom'); + + +let RNG; + +class GPSData { + constructor(gpsTracesFilePath) { + this.tracks = {}; + this.coordinates = []; + this.trackIds = []; + this._loadGPSTraces(gpsTracesFilePath); + } + + _loadGPSTraces(gpsTracesFilePath) { + const expandedPath = path.resolve(gpsTracesFilePath); + const data = fs.readFileSync(expandedPath, 'utf-8'); + const lines = data.split('\n'); + const headers = lines[0].split(','); + + const latitudeIndex = headers.indexOf('Latitude'); + const longitudeIndex = headers.indexOf('Longitude'); + const trackIdIndex = headers.indexOf('TrackID'); + + for (let i = 1; i < lines.length; i++) { + if (lines[i].trim() === '') continue; + const row = lines[i].split(','); + + const latitude = parseFloat(row[latitudeIndex]); + const longitude = parseFloat(row[longitudeIndex]); + const trackId = row[trackIdIndex]; + + const coord = [longitude, latitude]; + this.coordinates.push(coord); + + if (!this.tracks[trackId]) { + this.tracks[trackId] = []; + } + this.tracks[trackId].push(coord); + } + + this.trackIds = Object.keys(this.tracks); + } + + getRandomCoordinate() { + const randomIndex = Math.floor(RNG() * this.coordinates.length); + return this.coordinates[randomIndex]; + } + + getRandomTrack() { + const randomIndex = Math.floor(RNG() * this.trackIds.length); + const trackId = this.trackIds[randomIndex]; + return this.tracks[trackId]; + } +}; + +async function runOSRMMethod(osrm, method, coordinates) { + const time = await new Promise((resolve, reject) => { + const startTime = process.hrtime(); + osrm[method]({coordinates}, (err, result) => { + if (err) { + if (['NoSegment', 'NoMatch', 'NoRoute', 'NoTrips'].includes(err.message)) { + resolve(null); + } else { + + reject(err); + } + } else { + const endTime = process.hrtime(startTime); + resolve(endTime[0] + endTime[1] / 1e9); + } + }); + }); + return time; +} + +async function nearest(osrm, gpsData) { + const times = []; + for (let i = 0; i < 1000; i++) { + const coord = gpsData.getRandomCoordinate(); + times.push(await runOSRMMethod(osrm, 'nearest', [coord])); + } + return times; +} + +async function route(osrm, gpsData) { + const times = []; + for (let i = 0; i < 1000; i++) { + const from = gpsData.getRandomCoordinate(); + const to = gpsData.getRandomCoordinate(); + + + times.push(await runOSRMMethod(osrm, 'route', [from, to])); + } + return times; +} + +async function table(osrm, gpsData) { + const times = []; + for (let i = 0; i < 250; i++) { + const numPoints = Math.floor(RNG() * 3) + 15; + const coordinates = []; + for (let i = 0; i < numPoints; i++) { + coordinates.push(gpsData.getRandomCoordinate()); + } + + + times.push(await runOSRMMethod(osrm, 'table', coordinates)); + } + return times; +} + +async function match(osrm, gpsData) { + const times = []; + for (let i = 0; i < 1000; i++) { + const numPoints = Math.floor(RNG() * 50) + 50; + const coordinates = gpsData.getRandomTrack().slice(0, numPoints); + + + times.push(await runOSRMMethod(osrm, 'match', coordinates)); + } + return times; +} + +async function trip(osrm, gpsData) { + const times = []; + for (let i = 0; i < 250; i++) { + const numPoints = Math.floor(RNG() * 2) + 5; + const coordinates = []; + for (let i = 0; i < numPoints; i++) { + coordinates.push(gpsData.getRandomCoordinate()); + } + + + times.push(await runOSRMMethod(osrm, 'trip', coordinates)); + } + return times; +} + +function bootstrapConfidenceInterval(data, numSamples = 1000, confidenceLevel = 0.95) { + let means = []; + let dataLength = data.length; + + for (let i = 0; i < numSamples; i++) { + let sample = []; + for (let j = 0; j < dataLength; j++) { + let randomIndex = Math.floor(RNG() * dataLength); + sample.push(data[randomIndex]); + } + let sampleMean = sample.reduce((a, b) => a + b, 0) / sample.length; + means.push(sampleMean); + } + + means.sort((a, b) => a - b); + let lowerBoundIndex = Math.floor((1 - confidenceLevel) / 2 * numSamples); + let upperBoundIndex = Math.floor((1 + confidenceLevel) / 2 * numSamples); + let mean = means.reduce((a, b) => a + b, 0) / means.length; + let lowerBound = means[lowerBoundIndex]; + let upperBound = means[upperBoundIndex]; + + return { mean: mean, lowerBound: lowerBound, upperBound: upperBound }; +} + +function calculateConfidenceInterval(data) { + let { mean, lowerBound, upperBound } = bootstrapConfidenceInterval(data); + let bestValue = Math.max(...data); + let errorMargin = (upperBound - lowerBound) / 2; + + return { mean, errorMargin, bestValue }; +} + +async function main() { + const args = process.argv.slice(2); + + const {OSRM} = require(args[0]); + const path = args[1]; + const algorithm = args[2].toUpperCase(); + const method = args[3]; + const gpsTracesFilePath = args[4]; + const iterations = parseInt(args[5]); + + const gpsData = new GPSData(gpsTracesFilePath); + const osrm = new OSRM({path, algorithm}); + + + const functions = { + route: route, + table: table, + nearest: nearest, + match: match, + trip: trip + }; + const func = functions[method]; + if (!func) { + throw new Error('Unknown method'); + } + const allTimes = []; + for (let i = 0; i < iterations; i++) { + RNG = seedrandom(42); + allTimes.push((await func(osrm, gpsData)).filter(t => t !== null)); + } + + const opsPerSec = allTimes.map(times => times.length / times.reduce((a, b) => a + b, 0)); + const { mean, errorMargin, bestValue } = calculateConfidenceInterval(opsPerSec); + console.log(`Ops: ${mean.toFixed(1)} ± ${errorMargin.toFixed(1)} ops/s. Best: ${bestValue.toFixed(1)} ops/s`); + +} + +main(); diff --git a/scripts/ci/run_benchmarks.sh b/scripts/ci/run_benchmarks.sh index 0d0324d13..5b092471d 100755 --- a/scripts/ci/run_benchmarks.sh +++ b/scripts/ci/run_benchmarks.sh @@ -53,6 +53,7 @@ function run_benchmarks_for_folder { mkdir -p $RESULTS_FOLDER BENCHMARKS_FOLDER="$BINARIES_FOLDER/src/benchmarks" + echo "Running match-bench MLD" $BENCHMARKS_FOLDER/match-bench "$FOLDER/test/data/mld/monaco.osrm" mld > "$RESULTS_FOLDER/match_mld.bench" echo "Running match-bench CH" @@ -81,6 +82,18 @@ function run_benchmarks_for_folder { echo "Running osrm-contract" measure_peak_ram_and_time "$BINARIES_FOLDER/osrm-contract $FOLDER/data.osrm" "$RESULTS_FOLDER/osrm_contract.bench" + + for ALGORITHM in ch mld; do + for BENCH in nearest table trip route match; do + echo "Running node $BENCH $ALGORITHM" + START=$(date +%s.%N) + node $SCRIPTS_FOLDER/scripts/ci/bench.js $FOLDER/lib/binding/node_osrm.node $FOLDER/data.osrm $ALGORITHM $BENCH $GPS_TRACES > "$RESULTS_FOLDER/node_${BENCH}_${ALGORITHM}.bench" 5 + END=$(date +%s.%N) + DIFF=$(echo "$END - $START" | bc) + echo "Took: ${DIFF}s" + done + done + for ALGORITHM in ch mld; do for BENCH in nearest table trip route match; do echo "Running random $BENCH $ALGORITHM" From e5e25a1aca529f91784af9e8e0dad09d770655b2 Mon Sep 17 00:00:00 2001 From: Siarhei Fedartsou Date: Fri, 26 Jul 2024 21:19:47 +0200 Subject: [PATCH 5/5] Configure self-hosted runner for benchmarks job (#6975) --- .github/workflows/osrm-backend.yml | 86 ++++++++++++------------------ 1 file changed, 35 insertions(+), 51 deletions(-) diff --git a/.github/workflows/osrm-backend.yml b/.github/workflows/osrm-backend.yml index 59329f539..fe4ee3248 100644 --- a/.github/workflows/osrm-backend.yml +++ b/.github/workflows/osrm-backend.yml @@ -653,7 +653,7 @@ jobs: benchmarks: if: github.event_name == 'pull_request' needs: [format-taginfo-docs] - runs-on: ubuntu-24.04 + runs-on: self-hosted env: CCOMPILER: clang-16 CXXCOMPILER: clang++-16 @@ -664,42 +664,17 @@ jobs: GITHUB_REPOSITORY: ${{ github.repository }} RUN_BIG_BENCHMARK: ${{ contains(github.event.pull_request.labels.*.name, 'Performance') }} steps: - - name: Enable data.osm.pbf cache - if: ${{ ! env.RUN_BIG_BENCHMARK }} - uses: actions/cache@v4 - with: - path: ~/data.osm.pbf - key: v1-data-osm-pbf - restore-keys: | - v1-data-osm-pbf - - name: Use Node 20 - if: ${{ matrix.NODE_PACKAGE_TESTS_ONLY == 'ON' }} - uses: actions/setup-node@v4 - with: - node-version: 20 - - name: Enable compiler cache - uses: actions/cache@v4 - with: - path: ~/.ccache - key: v1-ccache-benchmarks-${{ github.sha }} - restore-keys: | - v1-ccache-benchmarks- - - name: Enable Conan cache - uses: actions/cache@v4 - with: - path: ~/.conan - key: v1-conan-benchmarks-${{ github.sha }} - restore-keys: | - v1-conan-benchmarks- - name: Checkout PR Branch uses: actions/checkout@v4 with: ref: ${{ github.head_ref }} path: pr - - name: Install dependencies - run: | - python3 -m pip install "conan<2.0.0" "requests==2.31.0" "numpy==1.26.4" --break-system-packages - sudo apt-get update -y && sudo apt-get install ccache + - name: Activate virtualenv + run: | + python3 -m venv .venv + source .venv/bin/activate + echo PATH=$PATH >> $GITHUB_ENV + pip install "conan<2.0.0" "requests==2.31.0" "numpy==1.26.4" - name: Prepare data run: | if [ "$RUN_BIG_BENCHMARK" = "true" ]; then @@ -751,34 +726,43 @@ jobs: make -C test/data # we run benchmarks in tmpfs to avoid impact of disk IO - name: Create folder for tmpfs - run: mkdir -p /opt/benchmarks + run: | + # if by any chance it was mounted before(e.g. due to previous job failed), unmount it + sudo umount ~/benchmarks | true + rm -rf ~/benchmarks + mkdir -p ~/benchmarks + # see https://llvm.org/docs/Benchmarking.html - name: Run PR Benchmarks run: | - sudo mount -t tmpfs -o size=4g none /opt/benchmarks - cp -rf pr/build /opt/benchmarks/build - cp -rf pr/lib /opt/benchmarks/lib - mkdir -p /opt/benchmarks/test - cp -rf pr/test/data /opt/benchmarks/test/data - cp -rf pr/profiles /opt/benchmarks/profiles + sudo cset shield -c 2-3 -k on + sudo mount -t tmpfs -o size=4g none ~/benchmarks + cp -rf pr/build ~/benchmarks/build + cp -rf pr/lib ~/benchmarks/lib + mkdir -p ~/benchmarks/test + cp -rf pr/test/data ~/benchmarks/test/data + cp -rf pr/profiles ~/benchmarks/profiles - ./pr/scripts/ci/run_benchmarks.sh -f /opt/benchmarks -r $(pwd)/pr_results -s $(pwd)/pr -b /opt/benchmarks/build -o ~/data.osm.pbf -g ~/gps_traces.csv - sudo umount /opt/benchmarks + sudo cset shield --exec -- ./pr/scripts/ci/run_benchmarks.sh -f ~/benchmarks -r $(pwd)/pr_results -s $(pwd)/pr -b ~/benchmarks/build -o ~/data.osm.pbf -g ~/gps_traces.csv + sudo umount ~/benchmarks + sudo cset shield --reset - name: Run Base Benchmarks run: | - sudo mount -t tmpfs -o size=4g none /opt/benchmarks - cp -rf base/build /opt/benchmarks/build - cp -rf base/lib /opt/benchmarks/lib - mkdir -p /opt/benchmarks/test - cp -rf base/test/data /opt/benchmarks/test/data - cp -rf base/profiles /opt/benchmarks/profiles + sudo cset shield -c 2-3 -k on + sudo mount -t tmpfs -o size=4g none ~/benchmarks + cp -rf base/build ~/benchmarks/build + cp -rf base/lib ~/benchmarks/lib + mkdir -p ~/benchmarks/test + cp -rf base/test/data ~/benchmarks/test/data + cp -rf base/profiles ~/benchmarks/profiles # TODO: remove it when base branch will have this file at needed location - if [ ! -f /opt/benchmarks/test/data/portugal_to_korea.json ]; then - cp base/src/benchmarks/portugal_to_korea.json /opt/benchmarks/test/data/portugal_to_korea.json + if [ ! -f ~/benchmarks/test/data/portugal_to_korea.json ]; then + cp base/src/benchmarks/portugal_to_korea.json ~/benchmarks/test/data/portugal_to_korea.json fi # we intentionally use scripts from PR branch to be able to update them and see results in the same PR - ./pr/scripts/ci/run_benchmarks.sh -f /opt/benchmarks -r $(pwd)/base_results -s $(pwd)/pr -b /opt/benchmarks/build -o ~/data.osm.pbf -g ~/gps_traces.csv - sudo umount /opt/benchmarks + sudo cset shield --exec -- cset shield --exec -- ./pr/scripts/ci/run_benchmarks.sh -f ~/benchmarks -r $(pwd)/base_results -s $(pwd)/pr -b ~/benchmarks/build -o ~/data.osm.pbf -g ~/gps_traces.csv + sudo umount ~/benchmarks + sudo cset shield --reset - name: Post Benchmark Results run: | python3 pr/scripts/ci/post_benchmark_results.py base_results pr_results