diff options
author | Will Chandler <wchandler@gitlab.com> | 2023-01-05 23:44:18 +0300 |
---|---|---|
committer | Will Chandler <wchandler@gitlab.com> | 2023-02-02 18:07:01 +0300 |
commit | 4156e43f073215213e97887bfbcc669fadf03efc (patch) | |
tree | a5f6971546fa0b2eac2e5cae0fe0343858306856 /_support | |
parent | 492447cb10b95301aea0e6410b09b11b5ea61a6b (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')
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 "$@" |