Implement end-to-end benchmark

This commit is contained in:
Siarhei Fedartsou 2024-05-26 15:41:34 +02:00
parent 778560d325
commit c7657f8aca
3 changed files with 52 additions and 20 deletions

View File

@ -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

View File

@ -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)

View File

@ -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"