From c7657f8aca322796c4c0fecd78656270c37bd780 Mon Sep 17 00:00:00 2001 From: Siarhei Fedartsou Date: Sun, 26 May 2024 15:41:34 +0200 Subject: [PATCH] Implement end-to-end benchmark --- .github/workflows/osrm-backend.yml | 28 ++++++++++---------- locustfile.py | 41 ++++++++++++++++++++++++++---- scripts/ci/run_benchmarks.sh | 3 ++- 3 files changed, 52 insertions(+), 20 deletions(-) diff --git a/.github/workflows/osrm-backend.yml b/.github/workflows/osrm-backend.yml index 3e1931ae2..b65d97995 100644 --- a/.github/workflows/osrm-backend.yml +++ b/.github/workflows/osrm-backend.yml @@ -660,20 +660,20 @@ jobs: make -j$(nproc) benchmarks cd .. make -C test/data - - name: Checkout Base Branch - uses: actions/checkout@v4 - with: - ref: ${{ github.event.pull_request.base.ref }} - path: base - - name: Build Base Branch - run: | - mkdir base/build - cd base/build - cmake -DENABLE_CONAN=ON -DCMAKE_BUILD_TYPE=Release .. - make -j$(nproc) - make -j$(nproc) benchmarks - cd .. - make -C test/data + # - name: Checkout Base Branch + # uses: actions/checkout@v4 + # with: + # ref: ${{ github.event.pull_request.base.ref }} + # path: base + # - name: Build Base Branch + # run: | + # mkdir base/build + # cd base/build + # cmake -DENABLE_CONAN=ON -DCMAKE_BUILD_TYPE=Release .. + # make -j$(nproc) + # make -j$(nproc) benchmarks + # cd .. + # make -C test/data - name: Run Benchmarks run: | ./pr/scripts/ci/run_benchmarks.sh base pr diff --git a/locustfile.py b/locustfile.py index 171a4e939..4949883da 100644 --- a/locustfile.py +++ b/locustfile.py @@ -1,24 +1,32 @@ from locust import HttpUser, TaskSet, task, between import csv import random +from collections import defaultdict +import os class OSRMTasks(TaskSet): def on_start(self): random.seed(42) 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) 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 def get_route(self): start = random.choice(self.coordinates) end = random.choice(self.coordinates) - start_coord = f"{start[1]},{start[0]}" - end_coord = f"{end[1]},{end[0]}" + start_coord = f"{start[1]:.6f},{start[0]:.6f}" + end_coord = f"{end[1]:.6f},{end[0]:.6f}" 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): num_coords = random.randint(3, 500) 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}") + @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): tasks = [OSRMTasks] wait_time = between(0.01, 0.1) diff --git a/scripts/ci/run_benchmarks.sh b/scripts/ci/run_benchmarks.sh index c35d55ef6..6f16893f3 100755 --- a/scripts/ci/run_benchmarks.sh +++ b/scripts/ci/run_benchmarks.sh @@ -29,6 +29,7 @@ function run_benchmarks_for_folder { $BINARIES_FOLDER/osrm-customize $FOLDER/data.osrm $BINARIES_FOLDER/osrm-routed --algorithm mld $FOLDER/data.osrm & OSRM_ROUTED_PID=$! + # TODO: save results if [ -f "$FOLDER/locustfile.py" ]; then @@ -49,6 +50,6 @@ function run_benchmarks_for_folder { fi } -run_benchmarks_for_folder $1 "${1}_results" +# run_benchmarks_for_folder $1 "${1}_results" run_benchmarks_for_folder $2 "${2}_results"