Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWill Chandler <wchandler@gitlab.com>2023-01-05 23:44:18 +0300
committerWill Chandler <wchandler@gitlab.com>2023-02-02 18:07:01 +0300
commit4156e43f073215213e97887bfbcc669fadf03efc (patch)
treea5f6971546fa0b2eac2e5cae0fe0343858306856 /_support
parent492447cb10b95301aea0e6410b09b11b5ea61a6b (diff)
benchmarking: Add benchmarking loop
We need to loop over each RPC bench and its associated repos, but Ansible's syntax to dynamically reuse tasks is a bit annoying and requires that we split out each section that will be repeated into a separate file and use `include_tasks`. To do this, we invoke `rpc_loop.yml` from `main.yml` for each RPC, and then `bench.yml` for each repo we're testing with the RPC.
Diffstat (limited to '_support')
-rw-r--r--_support/benchmarking/benchmark.yml6
-rw-r--r--_support/benchmarking/roles/benchmark/handlers/main.yml6
-rw-r--r--_support/benchmarking/roles/benchmark/tasks/bench.yml28
-rw-r--r--_support/benchmarking/roles/benchmark/tasks/main.yml12
-rw-r--r--_support/benchmarking/roles/benchmark/tasks/rpc_loop.yml8
-rw-r--r--_support/benchmarking/roles/deploy/templates/all.yml.j27
-rwxr-xr-x_support/benchmarking/run-benchmarks2
7 files changed, 69 insertions, 0 deletions
diff --git a/_support/benchmarking/benchmark.yml b/_support/benchmarking/benchmark.yml
new file mode 100644
index 000000000..0cfb92118
--- /dev/null
+++ b/_support/benchmarking/benchmark.yml
@@ -0,0 +1,6 @@
+---
+- hosts: gitaly
+ roles:
+ - benchmark
+ gather_facts: false
+ become: true
diff --git a/_support/benchmarking/roles/benchmark/handlers/main.yml b/_support/benchmarking/roles/benchmark/handlers/main.yml
new file mode 100644
index 000000000..9b128e24d
--- /dev/null
+++ b/_support/benchmarking/roles/benchmark/handlers/main.yml
@@ -0,0 +1,6 @@
+---
+- name: Stop Gitaly service
+ systemd:
+ name: gitaly
+ state: stopped
+ listen: stop gitaly
diff --git a/_support/benchmarking/roles/benchmark/tasks/bench.yml b/_support/benchmarking/roles/benchmark/tasks/bench.yml
new file mode 100644
index 000000000..76603c300
--- /dev/null
+++ b/_support/benchmarking/roles/benchmark/tasks/bench.yml
@@ -0,0 +1,28 @@
+---
+- name: Show repo and RPC being benched
+ debug:
+ msg: "Benchmarking {{ rpc_info.rpc }} against {{ repo_name }}"
+
+- name: Create benchmark results directory on Gitaly node
+ file:
+ path: "{{ output_dir }}"
+ state: directory
+ mode: '0755'
+ owner: git
+ group: git
+
+- name: Create benchmark results directory on client node
+ file:
+ path: "{{ output_dir }}"
+ state: directory
+ mode: '0755'
+ owner: git
+ group: git
+ delegate_to: "{{ groups['client'][0] }}"
+
+# Create new Gitaly process for each run for easy log collection
+- name: Start Gitaly service
+ systemd:
+ name: gitaly
+ state: started
+ notify: stop gitaly
diff --git a/_support/benchmarking/roles/benchmark/tasks/main.yml b/_support/benchmarking/roles/benchmark/tasks/main.yml
new file mode 100644
index 000000000..8d72d79f1
--- /dev/null
+++ b/_support/benchmarking/roles/benchmark/tasks/main.yml
@@ -0,0 +1,12 @@
+---
+- name: Set run_name
+ set_fact: "run_name=benchmark-{{ gitaly_revision }}-{{ lookup('pipe', 'date +%s') }}"
+
+- name: Run benchmarks
+ vars:
+ profile: true
+ clear_page_cache: true
+ include_tasks: rpc_loop.yml
+ loop: "{{ rpcs }}"
+ loop_control:
+ loop_var: rpc_info
diff --git a/_support/benchmarking/roles/benchmark/tasks/rpc_loop.yml b/_support/benchmarking/roles/benchmark/tasks/rpc_loop.yml
new file mode 100644
index 000000000..b090886c1
--- /dev/null
+++ b/_support/benchmarking/roles/benchmark/tasks/rpc_loop.yml
@@ -0,0 +1,8 @@
+---
+- name: Run RPC benchmark against designated repos
+ vars:
+ output_dir: "/tmp/{{ run_name }}/{{ rpc_info.rpc }}/{{ repo_name }}"
+ include_tasks: bench.yml
+ loop: "{{ rpc_info.repos }}"
+ loop_control:
+ loop_var: repo_name
diff --git a/_support/benchmarking/roles/deploy/templates/all.yml.j2 b/_support/benchmarking/roles/deploy/templates/all.yml.j2
index e6ae9a89b..d5c4c43ba 100644
--- a/_support/benchmarking/roles/deploy/templates/all.yml.j2
+++ b/_support/benchmarking/roles/deploy/templates/all.yml.j2
@@ -1,2 +1,9 @@
---
gitaly_revision: "{{ gitaly_revision }}"
+rpcs:
+ - description: Get default branch HEAD
+ rpc: FindCommit
+ service: gitaly.CommitService
+ proto: commit.proto
+ repos:
+ - git.git
diff --git a/_support/benchmarking/run-benchmarks b/_support/benchmarking/run-benchmarks
new file mode 100755
index 000000000..21e5feeb7
--- /dev/null
+++ b/_support/benchmarking/run-benchmarks
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec ansible-playbook -i hosts.ini benchmark.yml "$@"