Implement end-to-end benchmark
This commit is contained in:
parent
778560d325
commit
c7657f8aca
28
.github/workflows/osrm-backend.yml
vendored
28
.github/workflows/osrm-backend.yml
vendored
@ -660,20 +660,20 @@ jobs:
|
|||||||
make -j$(nproc) benchmarks
|
make -j$(nproc) benchmarks
|
||||||
cd ..
|
cd ..
|
||||||
make -C test/data
|
make -C test/data
|
||||||
- name: Checkout Base Branch
|
# - name: Checkout Base Branch
|
||||||
uses: actions/checkout@v4
|
# uses: actions/checkout@v4
|
||||||
with:
|
# with:
|
||||||
ref: ${{ github.event.pull_request.base.ref }}
|
# ref: ${{ github.event.pull_request.base.ref }}
|
||||||
path: base
|
# path: base
|
||||||
- name: Build Base Branch
|
# - name: Build Base Branch
|
||||||
run: |
|
# run: |
|
||||||
mkdir base/build
|
# mkdir base/build
|
||||||
cd base/build
|
# cd base/build
|
||||||
cmake -DENABLE_CONAN=ON -DCMAKE_BUILD_TYPE=Release ..
|
# cmake -DENABLE_CONAN=ON -DCMAKE_BUILD_TYPE=Release ..
|
||||||
make -j$(nproc)
|
# make -j$(nproc)
|
||||||
make -j$(nproc) benchmarks
|
# make -j$(nproc) benchmarks
|
||||||
cd ..
|
# cd ..
|
||||||
make -C test/data
|
# make -C test/data
|
||||||
- name: Run Benchmarks
|
- name: Run Benchmarks
|
||||||
run: |
|
run: |
|
||||||
./pr/scripts/ci/run_benchmarks.sh base pr
|
./pr/scripts/ci/run_benchmarks.sh base pr
|
||||||
|
@ -1,24 +1,32 @@
|
|||||||
from locust import HttpUser, TaskSet, task, between
|
from locust import HttpUser, TaskSet, task, between
|
||||||
import csv
|
import csv
|
||||||
import random
|
import random
|
||||||
|
from collections import defaultdict
|
||||||
|
import os
|
||||||
|
|
||||||
class OSRMTasks(TaskSet):
|
class OSRMTasks(TaskSet):
|
||||||
def on_start(self):
|
def on_start(self):
|
||||||
random.seed(42)
|
random.seed(42)
|
||||||
|
|
||||||
self.coordinates = []
|
self.coordinates = []
|
||||||
with open('~/gps_traces.csv', 'r') as file:
|
self.tracks = defaultdict(list)
|
||||||
|
|
||||||
|
gps_traces_file_path = os.path.expanduser('~/gps_traces.csv')
|
||||||
|
with open(gps_traces_file_path, 'r') as file:
|
||||||
reader = csv.DictReader(file)
|
reader = csv.DictReader(file)
|
||||||
for row in reader:
|
for row in reader:
|
||||||
self.coordinates.append((row['Latitude'], row['Longitude']))
|
coord = (row['Latitude'], row['Longitude'])
|
||||||
|
self.coordinates.append(coord)
|
||||||
|
self.tracks[row['TrackID']].append(coord)
|
||||||
|
self.track_ids = list(self.tracks.keys())
|
||||||
|
|
||||||
@task
|
@task
|
||||||
def get_route(self):
|
def get_route(self):
|
||||||
start = random.choice(self.coordinates)
|
start = random.choice(self.coordinates)
|
||||||
end = random.choice(self.coordinates)
|
end = random.choice(self.coordinates)
|
||||||
|
|
||||||
start_coord = f"{start[1]},{start[0]}"
|
start_coord = f"{start[1]:.6f},{start[0]:.6f}"
|
||||||
end_coord = f"{end[1]},{end[0]}"
|
end_coord = f"{end[1]:.6f},{end[0]:.6f}"
|
||||||
|
|
||||||
self.client.get(f"/route/v1/driving/{start_coord};{end_coord}?overview=full&steps=true")
|
self.client.get(f"/route/v1/driving/{start_coord};{end_coord}?overview=full&steps=true")
|
||||||
|
|
||||||
@ -26,10 +34,33 @@ class OSRMTasks(TaskSet):
|
|||||||
def get_table(self):
|
def get_table(self):
|
||||||
num_coords = random.randint(3, 500)
|
num_coords = random.randint(3, 500)
|
||||||
selected_coords = random.sample(self.coordinates, num_coords)
|
selected_coords = random.sample(self.coordinates, num_coords)
|
||||||
coords_str = ";".join([f"{coord[1]},{coord[0]}" for coord in selected_coords])
|
coords_str = ";".join([f"{coord[1]:.6f},{coord[0]:.6f}" for coord in selected_coords])
|
||||||
|
|
||||||
self.client.get(f"/table/v1/driving/{coords_str}")
|
self.client.get(f"/table/v1/driving/{coords_str}")
|
||||||
|
|
||||||
|
@task
|
||||||
|
def get_match(self):
|
||||||
|
track_id = random.choice(self.track_ids)
|
||||||
|
track_coords = self.tracks[track_id]
|
||||||
|
coords_str = ";".join([f"{coord[1]:.6f},{coord[0]:.6f}" for coord in track_coords])
|
||||||
|
|
||||||
|
self.client.get(f"/match/v1/driving/{coords_str}?steps=true")
|
||||||
|
|
||||||
|
@task
|
||||||
|
def get_nearest(self):
|
||||||
|
coord = random.choice(self.coordinates)
|
||||||
|
coord_str = f"{coord[1]:.6f},{coord[0]:.6f}"
|
||||||
|
|
||||||
|
self.client.get(f"/nearest/v1/driving/{coord_str}")
|
||||||
|
|
||||||
|
@task
|
||||||
|
def get_trip(self):
|
||||||
|
num_coords = random.randint(2, 10)
|
||||||
|
selected_coords = random.sample(self.coordinates, num_coords)
|
||||||
|
coords_str = ";".join([f"{coord[1]:.6f},{coord[0]:.6f}" for coord in selected_coords])
|
||||||
|
|
||||||
|
self.client.get(f"/trip/v1/driving/{coords_str}?steps=true")
|
||||||
|
|
||||||
class OSRMUser(HttpUser):
|
class OSRMUser(HttpUser):
|
||||||
tasks = [OSRMTasks]
|
tasks = [OSRMTasks]
|
||||||
wait_time = between(0.01, 0.1)
|
wait_time = between(0.01, 0.1)
|
||||||
|
@ -29,6 +29,7 @@ function run_benchmarks_for_folder {
|
|||||||
$BINARIES_FOLDER/osrm-customize $FOLDER/data.osrm
|
$BINARIES_FOLDER/osrm-customize $FOLDER/data.osrm
|
||||||
$BINARIES_FOLDER/osrm-routed --algorithm mld $FOLDER/data.osrm &
|
$BINARIES_FOLDER/osrm-routed --algorithm mld $FOLDER/data.osrm &
|
||||||
OSRM_ROUTED_PID=$!
|
OSRM_ROUTED_PID=$!
|
||||||
|
|
||||||
|
|
||||||
# TODO: save results
|
# TODO: save results
|
||||||
if [ -f "$FOLDER/locustfile.py" ]; then
|
if [ -f "$FOLDER/locustfile.py" ]; then
|
||||||
@ -49,6 +50,6 @@ function run_benchmarks_for_folder {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
run_benchmarks_for_folder $1 "${1}_results"
|
# run_benchmarks_for_folder $1 "${1}_results"
|
||||||
run_benchmarks_for_folder $2 "${2}_results"
|
run_benchmarks_for_folder $2 "${2}_results"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user