Add benchmarks comparison job
This commit is contained in:
parent
0f2f633dde
commit
4362a3270f
13
.github/workflows/osrm-backend.yml
vendored
13
.github/workflows/osrm-backend.yml
vendored
@ -642,7 +642,7 @@ jobs:
|
|||||||
make -C test/data
|
make -C test/data
|
||||||
- name: Run Benchmark on Master Branch
|
- name: Run Benchmark on Master Branch
|
||||||
run: |
|
run: |
|
||||||
./pr/build/src/benchmarks/match-bench ./pr/test/data/mld/monaco.osrm mld > pr_bench.txt
|
./pr/build/src/benchmarks/match-bench ./pr/test/data/mld/monaco.osrm mld > pr/match.bench
|
||||||
- name: Checkout Master Branch
|
- name: Checkout Master Branch
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
@ -657,14 +657,13 @@ jobs:
|
|||||||
make -j$(nproc) benchmarks
|
make -j$(nproc) benchmarks
|
||||||
cd ..
|
cd ..
|
||||||
make -C test/data
|
make -C test/data
|
||||||
- name: Run Benchmark on Master Branch
|
- name: Run Benchmarks
|
||||||
run: |
|
run: |
|
||||||
./master/build/src/benchmarks/match-bench ./master/test/data/mld/monaco.osrm mld > master_bench.txt
|
./scripts/ci/run_benchmarks.sh master pr
|
||||||
- name: Compare Benchmarks
|
- name: Compare Benchmarks
|
||||||
run: |
|
run: |
|
||||||
cat pr_bench.txt
|
cat pr_results/match.bench
|
||||||
cat master_bench.txt
|
cat master_results/match.bench
|
||||||
- name: Run benchmark and update PR
|
|
||||||
- name: Post Benchmark Results
|
- name: Post Benchmark Results
|
||||||
run: |
|
run: |
|
||||||
python3 scripts/ci/post_benchmark_results.py
|
python3 pr/scripts/ci/post_benchmark_results.py master_results pr_results
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import requests
|
import requests
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
import sys
|
||||||
|
|
||||||
GITHUB_TOKEN = os.getenv('GITHUB_TOKEN')
|
GITHUB_TOKEN = os.getenv('GITHUB_TOKEN')
|
||||||
REPO = os.getenv('GITHUB_REPOSITORY')
|
REPO = os.getenv('GITHUB_REPOSITORY')
|
||||||
@ -8,15 +9,9 @@ PR_NUMBER = os.getenv('PR_NUMBER')
|
|||||||
|
|
||||||
REPO_OWNER, REPO_NAME = REPO.split('/')
|
REPO_OWNER, REPO_NAME = REPO.split('/')
|
||||||
|
|
||||||
benchmark_results = [
|
|
||||||
{'master': '0.002s', 'pr': '0.0018s'},
|
|
||||||
{'master': '0.003s', 'pr': '0.0025s'},
|
|
||||||
{'master': '0.004s', 'pr': '0.0038s'}
|
|
||||||
]
|
|
||||||
|
|
||||||
def create_markdown_table(results):
|
def create_markdown_table(results):
|
||||||
header = "| Master | PR |\n|--------|----|"
|
header = "| Benchmark | Master | PR |\n|--------|----|"
|
||||||
rows = [f"| {result['master']} | {result['pr']} |" for result in results]
|
rows = [f"| {result['name']} | {result['master']} | {result['pr']} |" for result in results]
|
||||||
return f"{header}\n" + "\n".join(rows)
|
return f"{header}\n" + "\n".join(rows)
|
||||||
|
|
||||||
def get_pr_comments(repo_owner, repo_name, pr_number):
|
def get_pr_comments(repo_owner, repo_name, pr_number):
|
||||||
@ -34,7 +29,37 @@ def update_comment(comment_id, repo_owner, repo_name, body):
|
|||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
return response.json()
|
return response.json()
|
||||||
|
|
||||||
|
|
||||||
|
def collect_benchmark_results(master_folder, pr_folder):
|
||||||
|
results = []
|
||||||
|
results_index = {}
|
||||||
|
|
||||||
|
for file in os.listdir(master_folder):
|
||||||
|
if not file.endswith('.bench'): continue
|
||||||
|
with open(f"{master_folder}/{file}") as f:
|
||||||
|
result = f.read().strip()
|
||||||
|
results.append({'master': result, 'pr': None, 'name': os.path.splitext(file)[0]})
|
||||||
|
results_index[file] = len(results) - 1
|
||||||
|
|
||||||
|
for file in os.listdir(pr_folder):
|
||||||
|
if not file.endswith('.bench'): continue
|
||||||
|
with open(f"{pr_folder}/{file}") as f:
|
||||||
|
result = f.read().strip()
|
||||||
|
if file in results_index:
|
||||||
|
results[results_index[file]]['pr'] = result
|
||||||
|
else:
|
||||||
|
results.append({'master': None, 'pr': result, 'name': os.path.splitext(file)[0]})
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
if len(sys.argv) != 3:
|
||||||
|
print("Usage: python post_benchmark_results.py <master_folder> <pr_folder>")
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
master_folder = sys.argv[1]
|
||||||
|
pr_folder = sys.argv[2]
|
||||||
|
|
||||||
|
benchmark_results = collect_benchmark_results(master_folder, pr_folder)
|
||||||
|
|
||||||
comments = get_pr_comments(REPO_OWNER, REPO_NAME, PR_NUMBER)
|
comments = get_pr_comments(REPO_OWNER, REPO_NAME, PR_NUMBER)
|
||||||
if comments and len(comments) > 0:
|
if comments and len(comments) > 0:
|
||||||
first_comment = comments[0]
|
first_comment = comments[0]
|
||||||
|
|||||||
22
scripts/ci/run_benchmarks.sh
Executable file
22
scripts/ci/run_benchmarks.sh
Executable file
@ -0,0 +1,22 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e pipefail
|
||||||
|
|
||||||
|
function run_benchmarks_for_folder {
|
||||||
|
echo "Running benchmarks for $1"
|
||||||
|
|
||||||
|
FOLDER=$1
|
||||||
|
RESULTS_FOLDER=$2
|
||||||
|
|
||||||
|
mkdir -p $RESULTS_FOLDER
|
||||||
|
|
||||||
|
./$FOLDER/build/src/benchmarks/match-bench "./$FOLDER/test/data/mld/monaco.osrm" mld > "$RESULTS_FOLDER/match_mld.bench"
|
||||||
|
./$FOLDER/build/src/benchmarks/match-bench "./$FOLDER/test/data/ch/monaco.osrm" > "$RESULTS_FOLDER/match_ch.bench"
|
||||||
|
./$FOLDER/build/src/benchmarks/alias-bench > "$RESULTS_FOLDER/alias.bench"
|
||||||
|
./$FOLDER/build/src/benchmarks/json-render-bench "./$FOLDER/src/benchmarks/portugal_to_korea.json" > "$RESULTS_FOLDER/json-render.bench"
|
||||||
|
./$FOLDER/build/src/benchmarks/packedvector-bench > "$RESULTS_FOLDER/packedvector.bench"
|
||||||
|
./$FOLDER/build/src/benchmarks/rtree-bench "./$FOLDER/test/data/monaco.osrm.ramIndex" "./$FOLDER/test/data/monaco.osrm.fileIndex" "./$FOLDER/test/data/monaco.osrm.nbg_nodes" > "$RESULTS_FOLDER/rtree.bench"
|
||||||
|
}
|
||||||
|
|
||||||
|
run_benchmarks_for_folder $1 "${1}_results"
|
||||||
|
run_benchmarks_for_folder $2 "${2}_results"
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user