@@ -11,49 +11,86 @@ include:
1111 file : ' images/templates/gitlab/check-slo-breaches.template.yml'
1212
1313variables :
14- MACROBENCHMARKS_CI_IMAGE : 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/benchmarking-platform:cpp-nginx
14+ MACROBENCHMARKS_CI_IMAGE : 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/benchmarking-platform:glopes- cpp-nginx
1515 BUILD_IMAGE : 486234852809.dkr.ecr.us-east-1.amazonaws.com/images/mirror/b1o7r7e0/nginx_musl_toolchain
16- NGINX_VERSION : 1.26 .0
16+ NGINX_VERSION : 1.28 .0
1717
1818build-nginx-module :
1919 stage : build
2020 tags : ["arch:amd64"]
2121 timeout : 20min
2222 image : $BUILD_IMAGE
2323 variables :
24- WAF : OFF
24+ WAF : ON
2525 COVERAGE : OFF
2626 RUM : OFF
27- BUILD_TYPE : Release
27+ BUILD_TYPE : RelWithDebInfo
2828 ARCH : x86_64
2929 script :
3030 - git submodule sync && git submodule update --init --recursive
3131 - export NGINX_SRC_DIR="$PWD/nginx"
32- - make build-musl-aux
32+ - MAKE_JOB_COUNT=8 make build-musl-aux
3333 artifacts :
3434 name : " artifacts"
3535 when : always
3636 paths :
3737 - .musl-build/ngx_http_datadog_module.so
3838 expire_in : 3 months
3939
40+ download-artifacts :
41+ stage : build
42+ tags : ["arch:amd64"]
43+ needs :
44+ - job : build-nginx-module
45+ artifacts : true
46+ image : $MACROBENCHMARKS_CI_IMAGE
47+ script :
48+ - |
49+ set -e
50+ echo "Installing vault"
51+ cd /tmp
52+ curl -o vault.zip https://releases.hashicorp.com/vault/1.20.0/vault_1.20.0_linux_amd64.zip
53+ unzip vault.zip
54+ cd -
55+ - export CIRCLECI_TOKEN=$(/tmp/vault kv get --format=json kv/k8s/gitlab-runner/nginx-datadog/circleci | jq -r .data.data.token)
56+ # this is a token only giving read access to public data
57+ - export GITHUB_TOKEN=$(/tmp/vault kv get --format=json kv/k8s/gitlab-runner/nginx-datadog/github_pub | jq -r .data.data.token)
58+ - git clone --branch glopes/cpp/nginx https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.ddbuild.io/DataDog/benchmarking-platform platform
59+ - cd platform
60+ - ' [[ -z "$CI_COMMIT_BRANCH" ]] || ARTIFACT_ROLE=baseline steps/install-dd-nginx-module.sh'
61+ - ARTIFACT_ROLE=candidate steps/install-dd-nginx-module.sh
62+ - cd -
63+ - mkdir -p artifacts
64+ - cp -v platform/artifacts/*.so* artifacts/
65+ artifacts :
66+ name : artifacts
67+ when : always
68+ paths :
69+ - artifacts
70+ expire_in : 1 month
71+ variables :
72+ TEST_ARTIFACT : $CI_PROJECT_DIR/.musl-build/ngx_http_datadog_module.so
4073
4174.benchmarks :
4275 stage : run-benchmarks
43- needs : ["build-nginx-module "]
76+ dependencies : ["download-artifacts "]
4477 tags : ["runner:apm-k8s-same-cpu"]
4578 timeout : 1h
4679 image : $MACROBENCHMARKS_CI_IMAGE
4780 script :
48- - cp .musl-build/ngx_http_datadog_module.so /usr/lib/nginx/modules/ngx_http_datadog_module.so
49- - git clone --branch cpp/nginx https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.ddbuild.io/DataDog/benchmarking-platform platform && cd platform
50- - bp-runner bp-runner.yml --debug
81+ - git clone --branch glopes/cpp/nginx https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.ddbuild.io/DataDog/benchmarking-platform platform
82+ - mkdir -p platform/artifacts
83+ - cp -v artifacts/* platform/artifacts
84+ - cd platform && bp-runner bp-runner.yml --debug
85+ - cd -
86+ - cp -v platform/artifacts/*.converted.json artifacts/
87+ - cp -v platform/artifacts/lscpu.txt artifacts/
5188 artifacts :
52- name : " artifacts"
89+ name : artifacts
5390 when : always
5491 paths :
55- - platform/ artifacts/
56- expire_in : 3 months
92+ - artifacts
93+ expire_in : 1 month
5794 variables :
5895 # Benchmark's env variables. Modify to tweak benchmark parameters.
5996 DD_TRACE_DEBUG : " false"
@@ -73,20 +110,88 @@ build-nginx-module:
73110 K6_OPTIONS_HIGH_LOAD_PRE_ALLOCATED_VUS : 4
74111 K6_OPTIONS_HIGH_LOAD_MAX_VUS : 4
75112
113+ K6_OPTIONS_POST_NORMAL_OPERATION_RATE : 100
114+ K6_OPTIONS_POST_NORMAL_OPERATION_DURATION : 5m
115+ K6_OPTIONS_POST_NORMAL_OPERATION_GRACEFUL_STOP : 10s
116+ K6_OPTIONS_POST_NORMAL_OPERATION_PRE_ALLOCATED_VUS : 150
117+ K6_OPTIONS_POST_NORMAL_OPERATION_MAX_VUS : 200
118+
119+ K6_OPTIONS_POST_HIGH_LOAD_RATE : 500
120+ K6_OPTIONS_POST_HIGH_LOAD_DURATION : 2m
121+ K6_OPTIONS_POST_HIGH_LOAD_GRACEFUL_STOP : 10s
122+ K6_OPTIONS_POST_HIGH_LOAD_PRE_ALLOCATED_VUS : 750
123+ K6_OPTIONS_POST_HIGH_LOAD_MAX_VUS : 1000
124+
76125 # Workaround: Currently we're not running the benchmarks on every PR, but GitHub still shows them as pending.
77126 # By marking the benchmarks as allow_failure, the Github checks are not displayed.
78127 allow_failure : true
79128
80- baseline :
129+ .candidate-benchmarks :
81130 extends : .benchmarks
82131 variables :
83- DD_BENCHMARKS_CONFIGURATION : baseline
132+ ARTIFACT_ROLE : candidate
84133
85- only-tracing :
134+ .baseline-benchmarks :
86135 extends : .benchmarks
136+ before_script :
137+ variables :
138+ ARTIFACT_ROLE : baseline
139+ rules :
140+ - if : ' $CI_COMMIT_BRANCH != "master"'
141+
142+ # Candidate benchmarks
143+ candidate-baselineconf :
144+ extends : .candidate-benchmarks
145+ variables :
146+ DD_BENCHMARKS_CONFIGURATION : baseline
147+ rules :
148+ - if : ' $CI_COMMIT_BRANCH == "master"'
149+
150+ candidate-only-tracing :
151+ extends : .candidate-benchmarks
152+ variables :
153+ DD_BENCHMARKS_CONFIGURATION : only-tracing
154+
155+ candidate-appsec :
156+ extends : .candidate-benchmarks
157+ variables :
158+ DD_BENCHMARKS_CONFIGURATION : appsec
159+
160+ # Baseline benchmarks (only non-master)
161+ baseline-only-tracing :
162+ extends : .baseline-benchmarks
87163 variables :
88164 DD_BENCHMARKS_CONFIGURATION : only-tracing
89165
166+ baseline-appsec :
167+ extends : .baseline-benchmarks
168+ variables :
169+ DD_BENCHMARKS_CONFIGURATION : appsec
170+
171+ # Comparison between candidate and baseline
172+ compare-candidate-baseline :
173+ stage : run-benchmarks
174+ tags : ["arch:amd64"]
175+ image : $MACROBENCHMARKS_CI_IMAGE
176+ needs :
177+ - job : baseline-only-tracing
178+ artifacts : true
179+ - job : candidate-only-tracing
180+ artifacts : true
181+ - job : baseline-appsec
182+ artifacts : true
183+ - job : candidate-appsec
184+ artifacts : true
185+ script :
186+ - git clone --branch glopes/cpp/nginx https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.ddbuild.io/DataDog/benchmarking-platform platform
187+ - mkdir -p platform/artifacts
188+ - cp -v artifacts/* platform/artifacts
189+ - cd platform
190+ - steps/analyze-results.sh
191+ - steps/post-pr-comment.sh
192+ variables :
193+ ARTIFACTS_DIR : $CI_PROJECT_DIR/platform/artifacts
194+
90195# This repository is using pre-release performance quality gates.
91196
92197# On release/v{major}.{minor}.{patch} branch, verify that the latest CI pipeline passed the check-slo-breaches job.
@@ -101,15 +206,18 @@ check-slo-breaches:
101206 extends : .check-slo-breaches
102207 stage : gate
103208 when : always
209+ needs :
210+ - job : candidate-only-tracing
211+ artifacts : true
104212 artifacts :
105213 name : " artifacts"
106214 when : always
107215 paths :
108- - platform/ artifacts/
216+ - artifacts/
109217 expire_in : 3 months
110218 variables :
111219 DDOCTOSTS_POLICY : " gitlab.github-access.read"
112- ARTIFACTS_DIR : " platform /artifacts"
220+ ARTIFACTS_DIR : " $CI_PROJECT_DIR /artifacts"
113221 SLO_FILE : " .gitlab/bp-runner.fail-on-breach.yml"
114222
115223notify-slo-breaches :
0 commit comments