-
Notifications
You must be signed in to change notification settings - Fork 69
285 lines (280 loc) · 11.1 KB
/
perf-regression-ci.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
name: Performance Regression CI
# Triggerred when a new commit is pushed to master
on:
push:
branches:
- master
# READ BEFORE ENABLING THE TRIGGER BELOW
# This trigger is only used when testing the scripts in a branch, and should be commented out in other cases.
# If this trigger is used, please change the following env: RESULT_REPO_BRANCH -> 'test' (MUST), DEPLOY -> 'false' (optional)
# pull_request:
# branches:
# - master
env:
# The branch to save run data and plot graph from. Use 'self-hosted' for master, use 'test' or anything else for testing in a branch.
RESULT_REPO_BRANCH: 'self-hosted'
# Whether we deploy the generated page. Set to true for master.
DEPLOY: true
# Directories in ci-perf-kit that will be uploaded as artifacts. The dirs can be found in ci-perf-kit/scripts/common.sh
CI_PERF_KIT_BUILD: ci-perf-kit/upload
CI_PERF_KIT_LOG: ci-perf-kit/logs-ng
jobs:
# JikesRVM
jikesrvm-perf-regression:
runs-on: [self-hosted, Linux, freq-scaling-off]
timeout-minutes: 1440
steps:
- name: Checkout MMTk Core
uses: actions/checkout@v4
with:
path: mmtk-core
- name: Checkout JikesRVM Binding
uses: actions/checkout@v4
with:
repository: mmtk/mmtk-jikesrvm
path: mmtk-jikesrvm
- name: Checkout JikesRVM
working-directory: mmtk-jikesrvm
run: |
./.github/scripts/ci-checkout.sh
# checkout perf-kit
- name: Checkout Perf Kit
uses: actions/checkout@v4
with:
repository: mmtk/ci-perf-kit
ref: "0.8.0"
path: ci-perf-kit
token: ${{ secrets.CI_ACCESS_TOKEN }}
submodules: true
# setup
- name: Overwrite MMTk core in JikesRVM binding
run: cp -r mmtk-core mmtk-jikesrvm/repos/
- name: Setup Rust Toolchain
run: echo "RUSTUP_TOOLCHAIN=`cat mmtk-core/rust-toolchain`" >> $GITHUB_ENV
- name: Setup
run: |
./ci-perf-kit/scripts/history-run-setup.sh
sed -i 's/^mmtk[[:space:]]=/#ci:mmtk=/g' mmtk-jikesrvm/mmtk/Cargo.toml
sed -i 's/^#[[:space:]]mmtk/mmtk/g' mmtk-jikesrvm/mmtk/Cargo.toml
- id: branch
# we cannot use env vars in action input (the deploy step). So put the env var to this step's outputs.
run: echo "branch_name=$(echo ${GITHUB_REF#refs/heads/} | sed 's/\//_/g')" >> $GITHUB_OUTPUT
# run
- name: Performance Run
run: |
export RESULT_REPO=mmtk/ci-perf-result
export RESULT_REPO_BRANCH=${{ env.RESULT_REPO_BRANCH }}
export RESULT_REPO_ACCESS_TOKEN=${{ secrets.CI_ACCESS_TOKEN }}
export FROM_DATE=2020-07-10
JAVA_HOME=/opt/jdk1.6.0_45/ PATH=/opt/apache-ant-1.9.16/bin/:/opt/jdk1.6.0_45/bin/:$PATH ./ci-perf-kit/scripts/jikesrvm-history-run.sh ./mmtk-jikesrvm ./reports/${{ steps.branch.outputs.branch_name }}
# deploy
- name: Deploy to Github Page
if: ${{ env.DEPLOY == 'true' }}
uses: peaceiris/actions-gh-pages@v4
with:
personal_token: ${{ secrets.CI_ACCESS_TOKEN }}
external_repository: mmtk/ci-perf-result
publish_dir: ./reports
publish_branch: gh-pages
keep_files: true
- name: Upload build as artifacts
uses: actions/upload-artifact@v4
with:
name: jikesrvm-regression-build
path: ${{ env.CI_PERF_KIT_BUILD }}
if-no-files-found: error
- name: Upload logs as artifacts
uses: actions/upload-artifact@v4
with:
name: jikesrvm-regression-logs
path: ${{ env.CI_PERF_KIT_LOG }}
if-no-files-found: error
# OpenJDK
openjdk-perf-regression:
runs-on: [self-hosted, Linux, freq-scaling-off]
timeout-minutes: 1440
env:
# This version will be used as the canary version, and will be used to checkout both
# `mmtk-core` and `mmtk-openjdk`.
#
# A "canary" is a chosen version that is tested alongside each merged pull request. The
# performance of the canary should not change unless
#
# 1. There is an environment change, such as changes of the operating system, the hardware,
# the firmware, or the methodology we use for testing, or
# 2. There are non-deterministic factors (i.e. noises) affecting each execution.
#
# Running the canary alongside regular regression tests help us identify unnoticed environment
# changes and the level of noise.
#
# Currently, we choose one release version as the canary, and will use it until we can no
# longer run it for any reason, such as the toolchain for compiling that version is no longer
# available. Then we may change to another release version and mark the change of canary on
# the timeline, or introduce a mechanism to dynamically choose the canary version.
CANARY_VERSION: "v0.28.0"
steps:
# checkout latest versions
- name: Checkout MMTk Core (latest)
uses: actions/checkout@v4
with:
path: latest/mmtk-core
- name: Checkout OpenJDK Binding (latest)
uses: actions/checkout@v4
with:
repository: mmtk/mmtk-openjdk
path: latest/mmtk-openjdk
- name: Checkout OpenJDK (latest)
working-directory: latest/mmtk-openjdk
run: |
./.github/scripts/ci-checkout.sh
# checkout perf-kit
- name: Checkout Perf Kit
uses: actions/checkout@v4
with:
repository: mmtk/ci-perf-kit
ref: "0.8.1"
path: ci-perf-kit
submodules: true
# checkout canary versions.
- name: Checkout MMTk Core (canary)
uses: actions/checkout@v4
with:
ref: ${{ env.CANARY_VERSION }}
path: canary/mmtk-core
- name: Checkout OpenJDK Binding (canary)
uses: actions/checkout@v4
with:
ref: ${{ env.CANARY_VERSION }}
repository: mmtk/mmtk-openjdk
path: canary/mmtk-openjdk
- name: Checkout OpenJDK (canary)
working-directory: canary/mmtk-openjdk
run: |
./.github/scripts/ci-checkout.sh
# setup
- name: Setup directory structures
run: |
for BASE_DIR in ./latest ./canary; do
pushd $BASE_DIR
# replace dependency
# Note that ci-replace-mmtk-dep.sh will apply `realpath()` to the `--mmtk-core-path` option.
# so we specify the relative path from the PWD to the mmtk-core repo.
./mmtk-core/.github/scripts/ci-replace-mmtk-dep.sh mmtk-openjdk/mmtk/Cargo.toml \
--mmtk-core-path mmtk-core
# cleanup previous build
rm -rf mmtk-openjdk/repos/openjdk/scratch
rm -rf mmtk-openjdk/repos/openjdk/build
popd
done
- name: Setup branch name
id: branch
# we cannot use env vars in action input (the deploy step). So put the env var to this step's outputs.
run: echo "branch_name=$(echo ${GITHUB_REF#refs/heads/} | sed 's/\//_/g')" >> $GITHUB_OUTPUT
# run
- name: Performance Run
run: |
export RESULT_REPO=mmtk/ci-perf-result
export RESULT_REPO_BRANCH=${{ env.RESULT_REPO_BRANCH }}
export RESULT_REPO_ACCESS_TOKEN=${{ secrets.CI_ACCESS_TOKEN }}
export FROM_DATE=2020-07-10
./ci-perf-kit/scripts/openjdk-history-run.sh \
./latest/mmtk-openjdk \
./canary/mmtk-openjdk \
./reports/${{ steps.branch.outputs.branch_name }}
# deploy
- name: Deploy to Github Page
if: ${{ env.DEPLOY == 'true' }}
uses: peaceiris/actions-gh-pages@v4
with:
personal_token: ${{ secrets.CI_ACCESS_TOKEN }}
external_repository: mmtk/ci-perf-result
publish_dir: ./reports
publish_branch: gh-pages
keep_files: true
- name: Upload build as artifacts
uses: actions/upload-artifact@v4
with:
name: openjdk-regression-build
path: ${{ env.CI_PERF_KIT_BUILD }}
if-no-files-found: error
- name: Upload logs as artifacts
uses: actions/upload-artifact@v4
with:
name: openjdk-regression-logs
path: ${{ env.CI_PERF_KIT_LOG }}
if-no-files-found: error
openjdk-mutator-perf:
runs-on: [self-hosted, Linux, freq-scaling-off]
timeout-minutes: 1440
steps:
- name: Checkout MMTk Core
uses: actions/checkout@v4
with:
path: mmtk-core
- name: Checkout OpenJDK Binding
uses: actions/checkout@v4
with:
repository: mmtk/mmtk-openjdk
path: mmtk-openjdk
- name: Checkout OpenJDK
working-directory: mmtk-openjdk
run: |
./.github/scripts/ci-checkout.sh
# checkout perf-kit
- name: Checkout Perf Kit
uses: actions/checkout@v4
with:
repository: mmtk/ci-perf-kit
ref: "0.8.0"
path: ci-perf-kit
token: ${{ secrets.CI_ACCESS_TOKEN }}
submodules: true
# setup
- name: Overwrite MMTk core in openjdk binding
run: cp -r mmtk-core mmtk-openjdk/repos/
- name: Setup Rust Toolchain
run: echo "RUSTUP_TOOLCHAIN=`cat mmtk-core/rust-toolchain`" >> $GITHUB_ENV
# cleanup previosu build
- name: Cleanup previous build
run: |
rm -rf mmtk-openjdk/repos/openjdk/scratch
rm -rf mmtk-openjdk/repos/openjdk/build
- id: branch
# we cannot use env vars in action input (the deploy step). So put the env var to this step's outputs.
run: echo "branch_name=$(echo ${GITHUB_REF#refs/heads/} | sed 's/\//_/g')" >> $GITHUB_OUTPUT
- name: Setup
run: |
./ci-perf-kit/scripts/history-run-setup.sh
sed -i 's/^mmtk[[:space:]]=/#ci:mmtk=/g' mmtk-openjdk/mmtk/Cargo.toml
sed -i 's/^#[[:space:]]mmtk/mmtk/g' mmtk-openjdk/mmtk/Cargo.toml
# run
- name: Performance Run
run: |
export RESULT_REPO=mmtk/ci-perf-result
export RESULT_REPO_BRANCH=${{ env.RESULT_REPO_BRANCH }}
export RESULT_REPO_ACCESS_TOKEN=${{ secrets.CI_ACCESS_TOKEN }}
export FROM_DATE=2020-08-03
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
./ci-perf-kit/scripts/mutator-history-run.sh ./mmtk-openjdk ./reports/${{ steps.branch.outputs.branch_name }}
# deploy
- name: Deploy to Github Page
if: ${{ env.DEPLOY == 'true' }}
uses: peaceiris/actions-gh-pages@v4
with:
personal_token: ${{ secrets.CI_ACCESS_TOKEN }}
external_repository: mmtk/ci-perf-result
publish_dir: ./reports
publish_branch: gh-pages
keep_files: true
- name: Upload build as artifacts
uses: actions/upload-artifact@v4
with:
name: mutator-regression-build
path: ${{ env.CI_PERF_KIT_BUILD }}
if-no-files-found: error
- name: Upload logs as artifacts
uses: actions/upload-artifact@v4
with:
name: mutator-regression-logs
path: ${{ env.CI_PERF_KIT_LOG }}
if-no-files-found: error