Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
b186201
fix: Add CPU affinity to load benchmarks
ddyurchenko Jun 11, 2025
67461a2
wip: Force trigger Gitlab CI
ddyurchenko Jun 11, 2025
7ab71e3
wip: Generalize affinities, export k6 results, change executor
ddyurchenko Jun 12, 2025
f9a4ed7
wip: Save backup of logs
ddyurchenko Jun 12, 2025
66d7f08
wip: Reduce execution time
ddyurchenko Jun 12, 2025
70ac693
wip: Tweak duration, add warmup stage, backup logs
ddyurchenko Jun 12, 2025
d356834
fix: backup-reports location
ddyurchenko Jun 12, 2025
2a5c28f
fix: Fix k6 config
ddyurchenko Jun 12, 2025
587a5c0
fix: Fix k6 scenario names
ddyurchenko Jun 12, 2025
2f16d6a
fix: Fix k6 scenario names
ddyurchenko Jun 12, 2025
0000681
fix: Change k6 names format
ddyurchenko Jun 13, 2025
4f1eb86
fix: Increase warmup time
ddyurchenko Jun 13, 2025
6cf3cba
fix: Reduce gracefulStop
ddyurchenko Jun 13, 2025
037f753
fix: Shift start time
ddyurchenko Jun 13, 2025
25f42de
fix: Fix local runs, reduce warmup duration
ddyurchenko Jun 13, 2025
57d0b88
fix: Change debug logs location
ddyurchenko Jun 13, 2025
8efc07e
tweak: CPU affinities to make sure bottleneck is on k6 side
ddyurchenko Jun 16, 2025
6f0e4ea
tweak: Output Java version
ddyurchenko Jun 16, 2025
b7d0061
test: Use constant-arrival-rate executor
ddyurchenko Jun 16, 2025
0fd2e6a
tweak: Increase warmup time for petclinic
ddyurchenko Jun 16, 2025
f0c5b9a
fix: Fix mistake in startTime
ddyurchenko Jun 16, 2025
b5bf161
tweak: Reduce RPS to compensate for loss on profiling petclinic variant
ddyurchenko Jun 16, 2025
b1e84e7
tweak: Parallelize load tests
ddyurchenko Jun 13, 2025
ec4fd54
tweak: Parallelize insecure-bank, tweak logs storage
ddyurchenko Jun 13, 2025
7ff761e
fix: Fix run script location
ddyurchenko Jun 13, 2025
807da48
tweak: Increase iterations count
ddyurchenko Jun 13, 2025
5dd26c1
fix: Fix paths
ddyurchenko Jun 17, 2025
332b8c6
wip: Remove sirun, add verbosity
ddyurchenko Jun 17, 2025
c79b0d9
wip: Fix bash error
ddyurchenko Jun 17, 2025
a5e489f
wip: Fix bash error
ddyurchenko Jun 17, 2025
7badabe
wip: Fix bash error
ddyurchenko Jun 17, 2025
adc00f7
wip: Fix bash error
ddyurchenko Jun 17, 2025
e03a226
wip: Fix bash error
ddyurchenko Jun 17, 2025
5a045c5
wip: Fix bash error
ddyurchenko Jun 17, 2025
87a79bd
wip: Add more log lines
ddyurchenko Jun 17, 2025
ca7dfb6
wip: Add more log lines
ddyurchenko Jun 17, 2025
782a347
wip: Fix REPORTS_DIR
ddyurchenko Jun 17, 2025
52dab5e
wip: Fix k6.js
ddyurchenko Jun 17, 2025
a8c774e
wip: Fix env vars
ddyurchenko Jun 17, 2025
f59664b
wip: Fix k6.js
ddyurchenko Jun 17, 2025
ef92ce5
wip: Fix k6.js & cleanup
ddyurchenko Jun 17, 2025
868a649
wip: Reduce verbosity for load apps
ddyurchenko Jun 17, 2025
5369d97
wip: Disable unbound var check
ddyurchenko Jun 17, 2025
8c265d5
wip: Fix pid collection
ddyurchenko Jun 17, 2025
5d6204c
wip: Fix pid collection
ddyurchenko Jun 17, 2025
a764311
Revert "wip: Fix env vars"
ddyurchenko Jun 17, 2025
41e36a2
wip: Separate LOGS_DIR
ddyurchenko Jun 17, 2025
cd0874a
wip: Reduce verbosity
ddyurchenko Jun 17, 2025
6787311
tweak: k6 config, multiple repetitions
ddyurchenko Jun 17, 2025
9a730f7
tweak: multiple repetitions
ddyurchenko Jun 17, 2025
c31f6ae
tweak: Update BP branch, multiple repetitions
ddyurchenko Jun 17, 2025
67def54
tweak: Tweak RPS for petclinic
ddyurchenko Jun 17, 2025
ee1a7bf
tweak: wait for health check
ddyurchenko Jun 17, 2025
ba7206f
tweak: Tweak RPS
ddyurchenko Jun 17, 2025
407b1a2
tweak: Increase warmup time
ddyurchenko Jun 18, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitlab/benchmarks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
script:
- export ARTIFACTS_DIR="$(pwd)/reports" && mkdir -p "${ARTIFACTS_DIR}"
- git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.ddbuild.io/DataDog/".insteadOf "https://github.com/DataDog/"
- git clone --branch dd-trace-java/tracer-benchmarks https://github.com/DataDog/benchmarking-platform.git /platform && cd /platform
- git clone --branch dd-trace-java/tracer-benchmarks-parallel https://github.com/DataDog/benchmarking-platform.git /platform && cd /platform
artifacts:
name: "reports"
paths:
Expand Down
4 changes: 0 additions & 4 deletions benchmark/benchmarks.sh
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,6 @@ if [[ ! -f "${TRACER}" ]]; then
cd "${SCRIPT_DIR}"
fi

# Cleanup previous reports
rm -rf "${REPORTS_DIR}"
mkdir -p "${REPORTS_DIR}"

if [[ "$#" == '0' ]]; then
for type in 'startup' 'load' 'dacapo'; do
run_benchmarks "$type"
Expand Down
58 changes: 0 additions & 58 deletions benchmark/load/insecure-bank/benchmark.json

This file was deleted.

71 changes: 62 additions & 9 deletions benchmark/load/insecure-bank/k6.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,71 @@
import http from 'k6/http';
import {checkResponse, isOk, isRedirect} from "../../utils/k6.js";

const baseUrl = 'http://localhost:8080';
const variants = {
"no_agent": {
"APP_URL": 'http://localhost:8080',
},
"tracing": {
"APP_URL": 'http://localhost:8081',
},
"profiling": {
"APP_URL": 'http://localhost:8082',
},
"iast": {
"APP_URL": 'http://localhost:8083',
},
"iast_GLOBAL": {
"APP_URL": 'http://localhost:8084',
},
"iast_FULL": {
"APP_URL": 'http://localhost:8085',
},
"iast_INACTIVE": {
"APP_URL": 'http://localhost:8086',
},
"iast_TELEMETRY_OFF": {
"APP_URL": 'http://localhost:8087',
},
"iast_HARDCODED_SECRET_DISABLED": {
"APP_URL": 'http://localhost:8088',
},
}

export const options = function (variants) {
let scenarios = {};
for (const variant of Object.keys(variants)) {
scenarios[`load--insecure-bank--${variant}--warmup`] = {
executor: 'constant-vus', // https://grafana.com/docs/k6/latest/using-k6/scenarios/executors/#all-executors
vus: 5,
duration: '20s',
gracefulStop: '2s',
env: {
"APP_URL": variants[variant]["APP_URL"]
}
};

scenarios[`load--insecure-bank--${variant}--high_load`] = {
executor: 'constant-vus',
vus: 5,
startTime: '22s',
duration: '15s',
gracefulStop: '2s',
env: {
"APP_URL": variants[variant]["APP_URL"]
}
};
}

export const options = {
discardResponseBodies: true,
vus: 5,
iterations: 40000
};
return {
discardResponseBodies: true,
scenarios,
}
}(variants);

export default function () {

// login form
const loginResponse = http.post(`${baseUrl}/login`, {
const loginResponse = http.post(`${__ENV.APP_URL}/login`, {
username: 'john',
password: 'test'
}, {
Expand All @@ -21,11 +74,11 @@ export default function () {
checkResponse(loginResponse, isRedirect);

// dashboard
const dashboard = http.get(`${baseUrl}/dashboard`);
const dashboard = http.get(`${__ENV.APP_URL}/dashboard`);
checkResponse(dashboard, isOk);

// logout
const logout = http.get(`${baseUrl}/j_spring_security_logout`, {
const logout = http.get(`${__ENV.APP_URL}/j_spring_security_logout`, {
redirects: 0
});
checkResponse(logout, isRedirect);
Expand Down
31 changes: 31 additions & 0 deletions benchmark/load/insecure-bank/start-servers.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/usr/bin/env bash

set -e

start_server() {
local VARIANT=$1
local JAVA_OPTS=$2

if [ -n "$CI_JOB_TOKEN" ]; then
# Inside BP, so we can assume 24 CPU cores available and set CPU affinity
CPU_AFFINITY_APP=$3
else
CPU_AFFINITY_APP=""
fi

mkdir -p "${LOGS_DIR}/${VARIANT}"
${CPU_AFFINITY_APP}java ${JAVA_OPTS} -Xms3G -Xmx3G -jar ${INSECURE_BANK} &> ${LOGS_DIR}/${VARIANT}/insecure-bank.log &PID=$!
echo "${CPU_AFFINITY_APP}java ${JAVA_OPTS} -Xms3G -Xmx3G -jar ${INSECURE_BANK} &> ${LOGS_DIR}/${VARIANT}/insecure-bank.log [PID=$PID]"
}

start_server "no_agent" "-Dserver.port=8080" "taskset -c 47 " &
start_server "tracing" "-javaagent:${TRACER} -Dserver.port=8081" "taskset -c 46 " &
start_server "profiling" "-javaagent:${TRACER} -Ddd.profiling.enabled=true -Dserver.port=8082" "taskset -c 45 " &
start_server "iast" "-javaagent:${TRACER} -Ddd.iast.enabled=true -Dserver.port=8083" "taskset -c 44 " &
start_server "iast_GLOBAL" "-javaagent:${TRACER} -Ddd.iast.enabled=true -Ddd.iast.context.mode=GLOBAL -Dserver.port=8084" "taskset -c 43 " &
start_server "iast_FULL" "-javaagent:${TRACER} -Ddd.iast.enabled=true -Ddd.iast.detection.mode=FULL -Dserver.port=8085" "taskset -c 42 " &
start_server "iast_INACTIVE" "-javaagent:${TRACER} -Ddd.iast.enabled=inactive -Dserver.port=8086" "taskset -c 41 " &
start_server "iast_TELEMETRY_OFF" "-javaagent:${TRACER} -Ddd.iast.enabled=true -Ddd.iast.telemetry.verbosity=OFF -Dserver.port=8087" "taskset -c 40 " &
start_server "iast_HARDCODED_SECRET_DISABLED" "-javaagent:${TRACER} -Ddd.iast.enabled=true -Ddd.iast.hardcoded-secret.enabled=false -Dserver.port=8088" "taskset -c 39 " &

wait
46 changes: 0 additions & 46 deletions benchmark/load/petclinic/benchmark.json

This file was deleted.

58 changes: 51 additions & 7 deletions benchmark/load/petclinic/k6.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,61 @@
import http from 'k6/http';
import {checkResponse, isOk} from "../../utils/k6.js";

const baseUrl = 'http://localhost:8080';
const variants = {
"no_agent": {
"APP_URL": 'http://localhost:8080',
},
"tracing": {
"APP_URL": 'http://localhost:8081',
},
"profiling": {
"APP_URL": 'http://localhost:8082',
},
"appsec": {
"APP_URL": 'http://localhost:8083',
},
"iast": {
"APP_URL": 'http://localhost:8084',
},
"code_origins": {
"APP_URL": 'http://localhost:8085',
}
}

export const options = function (variants) {
const scenarios = {};
for (const variant of Object.keys(variants)) {
scenarios[`load--petclinic--${variant}--warmup`] = {
executor: 'constant-vus', // https://grafana.com/docs/k6/latest/using-k6/scenarios/executors/#all-executors
vus: 5,
duration: '20s',
gracefulStop: '2s',
env: {
"APP_URL": variants[variant]["APP_URL"]
}
};

scenarios[`load--petclinic--${variant}--high_load`] = {
executor: 'constant-vus',
vus: 5,
startTime: '22s',
duration: '15s',
gracefulStop: '2s',
env: {
"APP_URL": variants[variant]["APP_URL"]
}
};
}

export const options = {
discardResponseBodies: true,
vus: 5,
iterations: 80000
};
return {
discardResponseBodies: true,
scenarios,
}
}(variants);

export default function () {

// find owner
const ownersList = http.get(`${baseUrl}/owners?lastName=`);
const ownersList = http.get(`${__ENV.APP_URL}/owners?lastName=`);
checkResponse(ownersList, isOk);
}
28 changes: 28 additions & 0 deletions benchmark/load/petclinic/start-servers.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/usr/bin/env bash

set -e

start_server() {
local VARIANT=$1
local JAVA_OPTS=$2

if [ -n "$CI_JOB_TOKEN" ]; then
# Inside BP, so we can assume 24 CPU cores available and set CPU affinity
CPU_AFFINITY_APP=$3
else
CPU_AFFINITY_APP=""
fi

mkdir -p "${LOGS_DIR}/${VARIANT}"
${CPU_AFFINITY_APP}java ${JAVA_OPTS} -Xms2G -Xmx2G -jar ${PETCLINIC} &> ${LOGS_DIR}/${VARIANT}/petclinic.log &PID=$!
echo "${CPU_AFFINITY_APP}java ${JAVA_OPTS} -Xms2G -Xmx2G -jar ${PETCLINIC} &> ${LOGS_DIR}/${VARIANT}/petclinic.log [PID=$!]"
}

start_server "no_agent" "-Dserver.port=8080" "taskset -c 31-32 " &
start_server "tracing" "-javaagent:${TRACER} -Dserver.port=8081" "taskset -c 33-34 " &
start_server "profiling" "-javaagent:${TRACER} -Ddd.profiling.enabled=true -Dserver.port=8082" "taskset -c 35-36 " &
start_server "appsec" "-javaagent:${TRACER} -Ddd.appsec.enabled=true -Dserver.port=8083" "taskset -c 37-38 " &
start_server "iast" "-javaagent:${TRACER} -Ddd.iast.enabled=true -Dserver.port=8084" "taskset -c 39-40 " &
start_server "code_origins" "-javaagent:${TRACER} -Ddd.code.origin.for.spans.enabled=true -Dserver.port=8085" "taskset -c 41-42 " &

wait
Loading