-
Notifications
You must be signed in to change notification settings - Fork 3
feat: DH-21975: Gc benchmarking #421
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
stanbrub
wants to merge
119
commits into
deephaven:main
Choose a base branch
from
stanbrub:gc-benchmarking
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
119 commits
Select commit
Hold shift + click to select a range
9d490f5
Disabled some benchmarks and scaled
stanbrub 47f066f
Scaled up basic math combo
stanbrub dea74d7
Merge branch 'deephaven:main' into gc-benchmarking
stanbrub 15cf1f4
Added a Local Parquet Generator as opposed to going through Kafka
stanbrub 8604111
Added local parquet generator and 1st training test
stanbrub 83b1c11
Added more train benchmarks. Improved Local Parquet Generator
stanbrub c552c01
Revert BasicMathCombo
stanbrub 62aa96a
Revert BasicMathCombo
stanbrub f78ca22
Reverted scale and disabled for pre-train standard tests used for pre…
stanbrub e5412e7
Parallelized local parquet. worked around directory link failures
stanbrub ff4d891
Added 1st pass at benchmark even retrieval with JFR
stanbrub f35ab4f
Merge branch 'deephaven:main' into gc-benchmarking
stanbrub 25629cc
Added jfr events
stanbrub 254cca0
Merge branch 'deephaven:main' into gc-benchmarking
stanbrub 528c365
Added UGP events
stanbrub bd5ff02
Rescaled only static trained for 120 secs
stanbrub 75449bb
Updated adhoc for local parquet env variables
stanbrub ec2d95e
Open up dh data dir so local parquet can work
stanbrub a402a54
More logging for benchmark runs
stanbrub 4cf8357
Scaling back AggBy because of system lockup
stanbrub 8507794
Restrict the number of parquet threads and memory for the runner
stanbrub c0b5e7a
Fixed NaturalJoin OOM
stanbrub 8f1a77f
Added separate scalling for static vs inc
stanbrub 2938992
Better separation for running static and inc. Added ugp deltas
stanbrub 9b326e0
turn on JFR metrics
stanbrub 7fe14cc
Turn off Inc runs
stanbrub 5e1d59c
Added ss_log budget metric
stanbrub a1316d4
Added runner setting for auto tune cycle factor
stanbrub af3d82b
G1 inc release max
stanbrub 28745a8
ParallelGC inc release max
stanbrub ac0c87f
Shenandoah GC inc release max
stanbrub 9d630d9
ZGC inc release max
stanbrub dfa44df
Inc release filter min
stanbrub 3ab1845
Updated for 100ms cycle at 90% min
stanbrub e0e763f
Added state log ugp times
stanbrub 4fd604a
Pared down to two Filter/Nat tests
stanbrub 07eacdf
Scaled for 1 sec cycles
stanbrub 90e7153
Set autotune to 90% target release
stanbrub f18c994
User JVM 25 for adhoc
stanbrub 8240602
Added update listener cycle times instead of server state log ones
stanbrub 9951735
Set 20% inc release
stanbrub 7c18a2c
Change inc release to 40%
stanbrub ce992b3
Change inc release to 60%
stanbrub fcde3fa
Change inc release to 80%
stanbrub ff2795a
Change inc release to 100%
stanbrub 60839de
Run 50ms against zfc
stanbrub d18049c
Make release filter table smaller based on inc release factor
stanbrub c43719a
Change inc release to 40%
stanbrub 45d5314
Change inc release to 20%
stanbrub 36b1e83
Change inc release to 40%
stanbrub d4e0255
Change inc release to 60%
stanbrub 1b351a5
Change inc release to 80%
stanbrub 4f4124a
Change inc release to 100%
stanbrub 11dbba7
Scale for Java 25
stanbrub c048170
Roll back changes some unwanted changes
stanbrub c9af58a
Switch to java 17
stanbrub 5364601
Change to JVM 25
stanbrub 4af7393
Rescaled for 100ms benchmarks
stanbrub 920c89c
Changed autotune to 90% for testing
stanbrub 37dc336
Add 1.10% inc target
stanbrub c6f4a00
Turn off static for now. Do inc 100p
stanbrub e29b3bb
Do huge mem options for 1 sec
stanbrub 83f4c78
Doing Just Inc for 80% throughput now
stanbrub 6837afa
Doing JVM 17 with p1.0 inc and static
stanbrub e093003
Scale updateBy for 1sec cycles
stanbrub 11f7985
Added sleep for slow DH startups
stanbrub 7ed69b6
Yet more waiting for ZGC
stanbrub f68564d
More p90 100ms j25 huge benchmarks
stanbrub 0f5c61c
1st try at GC report
stanbrub d580534
Reformatted summary tables
stanbrub 390f019
Fixed static names
stanbrub 8989a84
Fixed png names
stanbrub dd15089
Fixed inc memory leak. Made train dashboard.
stanbrub 758520f
Copyright updates
stanbrub 3b9293b
Got train dashboard working against GCloud with csvs pulled up into p…
stanbrub 1f092aa
Added all gc rankings tables
stanbrub c6190b6
Added train dashboard usage
stanbrub 16d1343
Revamped tables images gor gc-report
stanbrub e7daf30
Fixed a mispelling
stanbrub 146d770
Renamed docker compose file
stanbrub b42aff5
Added more train dashboard usage
stanbrub 47b579c
Udpated compare query
stanbrub b8da078
Merge branch 'deephaven:main' into gc-benchmarking
stanbrub 528b741
Added matrix workflow for support
stanbrub eec1413
Added matrix framework and tests
stanbrub d82a059
Fixed missing run dir clear
stanbrub 7a06101
Added total matrix combinations to show up in the UI
stanbrub 008cf06
Fixed missing =
stanbrub 3698323
Fixed test row count
stanbrub 660b5bc
Sigh
stanbrub 19b229e
Course grained heap fail static
stanbrub f5df613
Made expected combos optional
stanbrub aa62c8f
Skip slack notification step for adhoc
stanbrub 19f54e1
Do heap failure at real scale
stanbrub ad45358
Next round of course heap fail
stanbrub bb6571f
Clear run results and logs before the iterations start
stanbrub 59cbd62
Turn of gzip encoding for GCloud since files are already gzipped
stanbrub 4375652
Finer grained heap fail
stanbrub c14bb51
More finer grained heap tests
stanbrub a03bcd7
Added RSS and CPU load events. Try with heap fail
stanbrub 3f74500
More heap tests because some failed even though they succeeded last time
stanbrub 090203b
One more failure
stanbrub c90728c
One more failure
stanbrub f818ede
Dump MODE because it doesn't work
stanbrub 55c24e9
Another heap fail
stanbrub 52cbc8e
One more
stanbrub c443e17
One more
stanbrub ee05c7b
More heap events on success
stanbrub 90c5600
Get More event data
stanbrub 20d109d
Synced from main and dealt with the dreaded whitespace
stanbrub e5b2468
Disabled AppArmor. Add ssh retries. More heap fail tests
stanbrub 736be56
Merge branch 'deephaven:main' into gc-benchmarking
stanbrub 0049900
Merge App Armor disable
stanbrub 8d74cde
Added heap dash and heap doc
stanbrub 2f03cd2
Reviewed. Added summary and recommendations sections
stanbrub 48ba9c0
Fixed a sentence
stanbrub 949e190
House cleaning
stanbrub 591ffb5
Review comment fixes
stanbrub 5d3948a
Update for JVM 25 tests
stanbrub File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,53 @@ | ||
| # Compare GC configurations across cycle times and profiles | ||
| # TSV columns: run_label, docker_image, test_package, test_class_list, | ||
| # test_iterations, scale_row_count, distribution, config_options | ||
| EXPECTED_COMBOS=32 | ||
|
|
||
| IMG=ghcr.io/stanbrub/server:jvm25 | ||
| PKG=io.deephaven.benchmark.tests.train | ||
| CLS='*Train' | ||
| ITERS=1 | ||
| ROWSM=1 | ||
| DIST=random | ||
|
|
||
| BASE="-Xms48g -Xmx48g -XX:+UseStringDeduplication -XX:+UseCompactObjectHeaders -DServerStateTracker.reportIntervalMillis=1000" | ||
| HUGE="-XX:+AlwaysPreTouch -XX:+UseTransparentHugePages" | ||
|
|
||
| G1="-XX:+UseG1GC" | ||
| ZGC="-XX:-UseG1GC -XX:+UseZGC" | ||
| SHEN="-XX:-UseG1GC -XX:+UseShenandoahGC -XX:ShenandoahGCMode=generational" | ||
| PARA="-XX:-UseG1GC -XX:+UseParallelGC" | ||
|
|
||
| R="$IMG\t$PKG\t$CLS\t$ITERS\t$ROWSM\t$DIST" | ||
|
|
||
| # emit <label> <gc> <cycle_ms> <inc_load_target> — outputs regular and _huge variants | ||
| run() { | ||
| local opts="$2 $BASE -DPeriodicUpdateGraph.targetCycleDurationMillis=$3 -Dbench.incLoadTarget=$4" | ||
| echo -e "$1\t$R\t$opts" | ||
| echo -e "${1}_huge\t$R\t$opts $HUGE" | ||
| } | ||
|
|
||
| # 1000ms cycle | ||
| run gc_g1gc_1000_p100_j25 "$G1" 1000 1.00 | ||
| run gc_zgc_1000_p100_j25 "$ZGC" 1000 1.00 | ||
| run gc_shen_1000_p100_j25 "$SHEN" 1000 1.00 | ||
| run gc_para_1000_p100_j25 "$PARA" 1000 1.00 | ||
|
|
||
| # 100ms cycle, 100% load target | ||
| run gc_g1gc_100_p100_j25 "$G1" 100 1.00 | ||
| run gc_zgc_100_p100_j25 "$ZGC" 100 1.00 | ||
| run gc_shen_100_p100_j25 "$SHEN" 100 1.00 | ||
| run gc_para_100_p100_j25 "$PARA" 100 1.00 | ||
|
|
||
| # 100ms cycle, 90% load target | ||
| run gc_g1gc_100_p90_j25 "$G1" 100 0.90 | ||
| run gc_zgc_100_p90_j25 "$ZGC" 100 0.90 | ||
| run gc_shen_100_p90_j25 "$SHEN" 100 0.90 | ||
| run gc_para_100_p90_j25 "$PARA" 100 0.90 | ||
|
|
||
| # 100ms cycle, 80% load target | ||
| run gc_g1gc_100_p80_j25 "$G1" 100 0.80 | ||
| run gc_zgc_100_p80_j25 "$ZGC" 100 0.80 | ||
| run gc_shen_100_p80_j25 "$SHEN" 100 0.80 | ||
| run gc_para_100_p80_j25 "$PARA" 100 0.80 | ||
|
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,57 @@ | ||
| # Sweep heap size to find failure points per GC and test class | ||
| # TSV columns: run_label, docker_image, test_package, test_class_list, | ||
| # test_iterations, scale_row_count, distribution, config_options | ||
|
|
||
| IMG=ghcr.io/stanbrub/server:jvm25 | ||
| PKG=io.deephaven.benchmark.tests.train | ||
| ITERS=1 | ||
| ROWSM=10 | ||
| DIST=random | ||
| STEP=1 | ||
|
|
||
| BASE="-XX:+AlwaysPreTouch -XX:+UseTransparentHugePages -XX:+UseStringDeduplication -XX:+UseCompactObjectHeaders -DServerStateTracker.reportIntervalMillis=1000" | ||
| CYCLE="-DPeriodicUpdateGraph.targetCycleDurationMillis=1000 -Dbench.incLoadTarget=1.00" | ||
|
|
||
| declare -A GCS=( | ||
| [g1gc]="-XX:+UseG1GC" | ||
| [zgc]="-XX:-UseG1GC -XX:+UseZGC" | ||
| [shen]="-XX:-UseG1GC -XX:+UseShenandoahGC -XX:ShenandoahGCMode=generational" | ||
| [para]="-XX:-UseG1GC -XX:+UseParallelGC" | ||
| ) | ||
|
|
||
| # Per-class, per-GC heap ranges: "class gc min max" | ||
| COMBOS=( # Failure Success | ||
| "FilterTrain g1gc 22 24" # 20G 21G | ||
| "FilterTrain zgc 3 5" # 1G 2G | ||
| "FilterTrain shen 18 19" # 19G 17G | ||
| "FilterTrain para 7 7" # 3G 4G | ||
| "FormulaTrain g1gc 2 4" # 1G | ||
| "FormulaTrain zgc 2 4" # 1G | ||
| "FormulaTrain shen 5 7" # 3G 4G | ||
| "FormulaTrain para 2 4" # 1G | ||
| "NaturalJoinTrain g1gc 18 20" # 16G 17G | ||
| "NaturalJoinTrain zgc 17 19" # 15G 16G | ||
| "NaturalJoinTrain shen 19 21" # 17G 18G | ||
| "NaturalJoinTrain para 21 23" # 19G 20G | ||
| "AggByTrain g1gc 2 4" # 1G | ||
| "AggByTrain zgc 2 4" # 1G | ||
| "AggByTrain shen 5 7" # 3G 4G | ||
| "AggByTrain para 18 20" # 16G 17G | ||
| "OrderedTrain g1gc 4 6" # 2G 3G | ||
| "OrderedTrain zgc 4 6" # 2G 3G | ||
| "OrderedTrain shen 4 6" # 2G 3G | ||
| "OrderedTrain para 4 6" # 2G 3G | ||
| "UpdateByTrain g1gc 16 18" # 14G 15G | ||
| "UpdateByTrain zgc 17 19" # 15G 16G | ||
| "UpdateByTrain shen 18 20" # 16G 17G | ||
| "UpdateByTrain para 21 23" # 19G 20G | ||
| ) | ||
|
|
||
| for combo in "${COMBOS[@]}"; do | ||
| read -r cls gc min_heap max_heap <<< "$combo" | ||
| for h in $(seq ${max_heap} -${STEP} ${min_heap}); do | ||
| opts="${GCS[$gc]} -Xms${h}g -Xmx${h}g $BASE $CYCLE" | ||
| echo -e "gc_${gc}_${cls}_h${h}_j25\t$IMG\t$PKG\t*${cls}\t$ITERS\t$ROWSM\t$DIST\t$opts" | ||
| done | ||
| done | ||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,62 @@ | ||
| #!/usr/bin/env bash | ||
|
|
||
| set -o errexit | ||
| set -o pipefail | ||
|
|
||
| # Copyright (c) 2026-2026 Deephaven Data Labs and Patent Pending | ||
|
|
||
| # Runs a matrix script and converts its TSV output to a JSON matrix for GitHub Actions. | ||
| # The matrix script outputs tab-separated rows with fields: | ||
| # run_label, docker_image, test_package, test_class_list, | ||
| # test_iterations, scale_row_count, distribution, config_options | ||
| # Scale_row_count is in millions and auto-scaled to actual. | ||
| # Test_iterations is auto-forced to odd. | ||
| # | ||
| # Usage: build-matrix.sh <matrix-script> | ||
|
|
||
| FILE="$1" | ||
|
|
||
| if [[ -z "$FILE" ]]; then | ||
| echo "Usage: build-matrix.sh <matrix-script>" | ||
| exit 1 | ||
| fi | ||
|
|
||
| if [[ ! -f "$FILE" ]]; then | ||
| echo "::error::Matrix script not found: ${FILE}" | ||
| exit 1 | ||
| fi | ||
|
|
||
| TSV=$(bash "$FILE") | ||
|
|
||
| RESULT=$(echo "$TSV" | jq -Rsc ' | ||
| ["run_label","docker_image","test_package","test_class_list", | ||
| "test_iterations","scale_row_count","distribution","config_options"] as $h | | ||
| split("\n") | map(select(length > 0)) | | ||
| [.[] | split("\t") | [range(length) as $i | {($h[$i]): .[$i]}] | add | | ||
| if .scale_row_count then | ||
| .scale_row_count = ((.scale_row_count | tonumber) * 1000000 | tostring) | ||
| else . end | | ||
| if .test_iterations then | ||
| .test_iterations = ((.test_iterations | tonumber) as $n | | ||
| if ($n % 2) == 0 then ($n + 1) else $n end | tostring) | ||
| else . end | ||
| ] | ||
| ') | ||
|
|
||
| COUNT=$(echo "$RESULT" | jq 'length') | ||
| EXPECTED=$(grep -m1 '^EXPECTED_COMBOS=' "$FILE" | cut -d= -f2 || true) | ||
|
|
||
| if [[ -n "$EXPECTED" && "$COUNT" -ne "$EXPECTED" ]]; then | ||
| echo "::error::Expected ${EXPECTED} combinations but got ${COUNT}. Update EXPECTED_COMBOS in ${FILE}."; exit 1 | ||
| fi | ||
| echo "Matrix combinations: ${COUNT}" | ||
|
|
||
| MATRIX_OUT=$(echo "$RESULT" | jq -c .) | ||
| if [[ -n "$GITHUB_OUTPUT" ]]; then | ||
| echo "matrix=${MATRIX_OUT}" >> "$GITHUB_OUTPUT" | ||
| echo "combo_count=${COUNT}" >> "$GITHUB_OUTPUT" | ||
| echo "### Matrix: ${COUNT} combinations" >> "$GITHUB_STEP_SUMMARY" | ||
| else | ||
| echo "matrix=${MATRIX_OUT}" | ||
| fi | ||
|
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| #!/usr/bin/env bash | ||
|
|
||
| set -o errexit | ||
| set -o pipefail | ||
|
|
||
| # Copyright (c) 2026-2026 Deephaven Data Labs and Patent Pending | ||
|
|
||
| # Clear all build artifacts and data on the remote server to prepare for a fresh setup | ||
|
|
||
| GIT_DIR=${HOME}/git | ||
| RUN_DIR=${HOME}/run | ||
| DEEPHAVEN_DIR=${HOME}/deephaven | ||
|
|
||
| title () { echo; echo $1; } | ||
|
|
||
| title "- Clearing Remote Server on $(hostname) -" | ||
|
|
||
| title "-- Removing Git Repositories --" | ||
| sudo rm -rf ${GIT_DIR} | ||
|
|
||
| if command -v docker &>/dev/null; then | ||
| title "-- Stopping Docker Containers --" | ||
| sudo docker ps -q | xargs --no-run-if-empty -n 1 sudo docker kill | ||
| title "-- Removing Docker Containers --" | ||
| sudo docker ps -a -q | xargs --no-run-if-empty -n 1 sudo docker rm --force | ||
| title "-- Removing Docker Images --" | ||
| sudo docker images -a -q | xargs --no-run-if-empty -n 1 sudo docker rmi --force | ||
| title "-- Pruning Docker Volumes --" | ||
| sudo docker system prune --volumes --force | ||
| fi | ||
|
|
||
| title "-- Removing Run Directory --" | ||
| sudo rm -rf ${RUN_DIR} | ||
|
|
||
| title "-- Removing Deephaven Directory --" | ||
| sudo rm -rf ${DEEPHAVEN_DIR} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.