From 48651273597f2b4dfc229af8cabfa992aa33b9bb Mon Sep 17 00:00:00 2001 From: Jeremy Parr-Pearson Date: Wed, 18 Mar 2026 09:11:42 -0700 Subject: [PATCH 1/4] Fix GLIDE JDK requirement, add cluster mode, and add 100-client workload Signed-off-by: Jeremy Parr-Pearson --- .github/workflows/benchmark.yml | 20 +++++- .../drivers/valkey-glide-cluster.json | 7 +++ .../reference-workload-100-client.json | 63 +++++++++++++++++++ 3 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/benchmark_configs/drivers/valkey-glide-cluster.json create mode 100644 .github/workflows/benchmark_configs/workloads/reference-workload-100-client.json diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index e8cf8083..dd307305 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -25,6 +25,14 @@ on: - lettuce - none default: "valkey-glide" + mode: + description: "Server topology mode" + required: false + type: choice + options: + - standalone + - cluster + default: "standalone" workload: description: "Workload config" required: true @@ -32,6 +40,7 @@ on: options: - reference-workload-10-client - reference-workload-1-client + - reference-workload-100-client default: "reference-workload-10-client" primary_version: description: "Primary driver version (version string or commit ID). Leave empty to use default." @@ -153,6 +162,7 @@ jobs: run: | PRIMARY_DRIVER="${{ github.event.inputs.primary_driver }}" SECONDARY_DRIVER="${{ github.event.inputs.secondary_driver }}" + MODE="${{ github.event.inputs.mode || 'standalone' }}" WORKLOAD="${{ github.event.inputs.workload }}" PRIMARY_VERSION="${{ github.event.inputs.primary_version }}" SECONDARY_VERSION="${{ github.event.inputs.secondary_version }}" @@ -180,6 +190,7 @@ jobs: echo "primary_driver=$PRIMARY_DRIVER" >> $GITHUB_OUTPUT echo "secondary_driver=$SECONDARY_DRIVER" >> $GITHUB_OUTPUT + echo "mode=$MODE" >> $GITHUB_OUTPUT echo "workload=$WORKLOAD" >> $GITHUB_OUTPUT echo "primary_version=$PRIMARY_VERSION" >> $GITHUB_OUTPUT echo "secondary_version=$SECONDARY_VERSION" >> $GITHUB_OUTPUT @@ -191,6 +202,7 @@ jobs: echo "========================================" echo "Primary driver: $PRIMARY_DRIVER" echo "Secondary driver: $SECONDARY_DRIVER" + echo "Mode: $MODE" echo "Workload: $WORKLOAD" echo "Primary version: '${PRIMARY_VERSION}'" echo "Secondary version: '${SECONDARY_VERSION}'" @@ -203,6 +215,7 @@ jobs: run: | PRIMARY_DRIVER="${{ steps.inputs.outputs.primary_driver }}" SECONDARY_DRIVER="${{ steps.inputs.outputs.secondary_driver }}" + MODE="${{ steps.inputs.outputs.mode }}" WORKLOAD="${{ steps.inputs.outputs.workload }}" CONFIG_DIR=".github/workflows/benchmark_configs" CUSTOM_CONFIG_DIR="/tmp/custom_configs" @@ -241,10 +254,10 @@ jobs: if [ "$SECONDARY_DRIVER" = "valkey-glide" ]; then SECONDARY_IN_FILENAME="glide" fi - DRIVER="${PRIMARY_DRIVER}-${SECONDARY_IN_FILENAME}-standalone" + DRIVER="${PRIMARY_DRIVER}-${SECONDARY_IN_FILENAME}-${MODE}" else # Standalone drivers (valkey-glide, jedis, lettuce, redisson) - DRIVER="${PRIMARY_DRIVER}-standalone" + DRIVER="${PRIMARY_DRIVER}-${MODE}" if [ "$SECONDARY_DRIVER" != "none" ] && [ -n "$SECONDARY_DRIVER" ]; then echo "Note: secondary_driver '$SECONDARY_DRIVER' ignored for standalone driver '$PRIMARY_DRIVER'" fi @@ -414,6 +427,9 @@ jobs: sudo apt-get update sudo apt-get install -y git gcc pkg-config openssl libssl-dev unzip cmake python3-pip + # Install JDK 11 (required by valkey-glide Gradle toolchain) + sudo apt-get install -y openjdk-11-jdk-headless + # Install Rust curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y source "$HOME/.cargo/env" diff --git a/.github/workflows/benchmark_configs/drivers/valkey-glide-cluster.json b/.github/workflows/benchmark_configs/drivers/valkey-glide-cluster.json new file mode 100644 index 00000000..02668324 --- /dev/null +++ b/.github/workflows/benchmark_configs/drivers/valkey-glide-cluster.json @@ -0,0 +1,7 @@ +{ + "schema_version": "1.0", + "description": "Valkey-Glide client - cluster mode", + "driver_id": "valkey-glide", + "mode": "cluster", + "specific_driver_config": {} +} diff --git a/.github/workflows/benchmark_configs/workloads/reference-workload-100-client.json b/.github/workflows/benchmark_configs/workloads/reference-workload-100-client.json new file mode 100644 index 00000000..78a9746a --- /dev/null +++ b/.github/workflows/benchmark_configs/workloads/reference-workload-100-client.json @@ -0,0 +1,63 @@ +{ + "schema_version": "1.0", + "benchmark_profile": { + "name": "Reference Benchmark - 100 Clients", + "description": "Two-phase benchmark: warmup with SETs, then steady-state GET/SET workload with 100 connections", + "version": "1.0.0" + }, + "phases": [ + { + "id": "WARMUP", + "description": "Populate keys with sequential SET operations", + "connections": 100, + "cps_limit": -1, + "rps_limit": -1, + "completion": { + "type": "requests", + "requests": 1000000 + }, + "keyspace": { + "keys_count": 1000000, + "key_size_bytes": 16, + "key_prefix": "bench:", + "generation_alg": "sequential_int" + }, + "commands": [ + { + "command": "set", + "weight": 1.0, + "data_size_bytes": 512 + } + ] + }, + { + "id": "STEADY", + "description": "Steady-state workload with 80% GET, 20% SET", + "connections": 100, + "cps_limit": -1, + "rps_limit": -1, + "completion": { + "type": "requests", + "requests": 1000000 + }, + "keyspace": { + "keys_count": 1000000, + "key_size_bytes": 16, + "key_prefix": "bench:", + "generation_alg": "uniform_rand", + "seed": 12345 + }, + "commands": [ + { + "command": "get", + "weight": 0.8 + }, + { + "command": "set", + "weight": 0.2, + "data_size_bytes": 512 + } + ] + } + ] +} From c614fdcd4e0cc9dd30fa41e757e2b85872a9af46 Mon Sep 17 00:00:00 2001 From: Jeremy Parr-Pearson Date: Wed, 18 Mar 2026 09:38:28 -0700 Subject: [PATCH 2/4] Handle cluster mode for all drivers Signed-off-by: Jeremy Parr-Pearson --- .github/workflows/benchmark.yml | 12 ++++++++++-- .../drivers/{jedis-standalone.json => jedis.json} | 2 +- .../{lettuce-standalone.json => lettuce.json} | 2 +- .../{redisson-standalone.json => redisson.json} | 2 +- ...-standalone.json => spring-data-redis-jedis.json} | 2 +- ...tandalone.json => spring-data-redis-lettuce.json} | 2 +- ...standalone.json => spring-data-valkey-glide.json} | 2 +- ...standalone.json => spring-data-valkey-jedis.json} | 2 +- ...andalone.json => spring-data-valkey-lettuce.json} | 2 +- .../drivers/valkey-glide-cluster.json | 7 ------- ...alkey-glide-standalone.json => valkey-glide.json} | 2 +- 11 files changed, 19 insertions(+), 18 deletions(-) rename .github/workflows/benchmark_configs/drivers/{jedis-standalone.json => jedis.json} (68%) rename .github/workflows/benchmark_configs/drivers/{lettuce-standalone.json => lettuce.json} (67%) rename .github/workflows/benchmark_configs/drivers/{redisson-standalone.json => redisson.json} (67%) rename .github/workflows/benchmark_configs/drivers/{spring-data-redis-jedis-standalone.json => spring-data-redis-jedis.json} (68%) rename .github/workflows/benchmark_configs/drivers/{spring-data-redis-lettuce-standalone.json => spring-data-redis-lettuce.json} (68%) rename .github/workflows/benchmark_configs/drivers/{spring-data-valkey-glide-standalone.json => spring-data-valkey-glide.json} (67%) rename .github/workflows/benchmark_configs/drivers/{spring-data-valkey-jedis-standalone.json => spring-data-valkey-jedis.json} (68%) rename .github/workflows/benchmark_configs/drivers/{spring-data-valkey-lettuce-standalone.json => spring-data-valkey-lettuce.json} (67%) delete mode 100644 .github/workflows/benchmark_configs/drivers/valkey-glide-cluster.json rename .github/workflows/benchmark_configs/drivers/{valkey-glide-standalone.json => valkey-glide.json} (66%) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index dd307305..105f6794 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -254,10 +254,10 @@ jobs: if [ "$SECONDARY_DRIVER" = "valkey-glide" ]; then SECONDARY_IN_FILENAME="glide" fi - DRIVER="${PRIMARY_DRIVER}-${SECONDARY_IN_FILENAME}-${MODE}" + DRIVER="${PRIMARY_DRIVER}-${SECONDARY_IN_FILENAME}" else # Standalone drivers (valkey-glide, jedis, lettuce, redisson) - DRIVER="${PRIMARY_DRIVER}-${MODE}" + DRIVER="${PRIMARY_DRIVER}" if [ "$SECONDARY_DRIVER" != "none" ] && [ -n "$SECONDARY_DRIVER" ]; then echo "Note: secondary_driver '$SECONDARY_DRIVER' ignored for standalone driver '$PRIMARY_DRIVER'" fi @@ -273,6 +273,14 @@ jobs: echo "✓ Driver config: $DRIVER_CONFIG" fi + # Handle selected driver mode (server topology) + if [ -z "$CUSTOM_DRIVER_CONFIG_INPUT" ]; then + DRIVER_CONFIG_WITH_MODE="$CUSTOM_CONFIG_DIR/driver-config.json" + jq --arg mode "$MODE" '.mode = $mode' "$DRIVER_CONFIG" > "$DRIVER_CONFIG_WITH_MODE" + DRIVER_CONFIG="$DRIVER_CONFIG_WITH_MODE" + echo "✓ Mode set to: $MODE" + fi + # Handle custom workload config CUSTOM_WORKLOAD_CONFIG_INPUT='${{ github.event.inputs.custom_workload_config }}' if [ -n "$CUSTOM_WORKLOAD_CONFIG_INPUT" ]; then diff --git a/.github/workflows/benchmark_configs/drivers/jedis-standalone.json b/.github/workflows/benchmark_configs/drivers/jedis.json similarity index 68% rename from .github/workflows/benchmark_configs/drivers/jedis-standalone.json rename to .github/workflows/benchmark_configs/drivers/jedis.json index d4833d7b..b39851fb 100644 --- a/.github/workflows/benchmark_configs/drivers/jedis-standalone.json +++ b/.github/workflows/benchmark_configs/drivers/jedis.json @@ -1,6 +1,6 @@ { "schema_version": "1.0", - "description": "Jedis client - standalone mode", + "description": "Jedis client", "driver_id": "jedis", "mode": "standalone", "specific_driver_config": {} diff --git a/.github/workflows/benchmark_configs/drivers/lettuce-standalone.json b/.github/workflows/benchmark_configs/drivers/lettuce.json similarity index 67% rename from .github/workflows/benchmark_configs/drivers/lettuce-standalone.json rename to .github/workflows/benchmark_configs/drivers/lettuce.json index 7514fe94..94ffbce6 100644 --- a/.github/workflows/benchmark_configs/drivers/lettuce-standalone.json +++ b/.github/workflows/benchmark_configs/drivers/lettuce.json @@ -1,6 +1,6 @@ { "schema_version": "1.0", - "description": "Lettuce client - standalone mode", + "description": "Lettuce client", "driver_id": "lettuce", "mode": "standalone", "specific_driver_config": {} diff --git a/.github/workflows/benchmark_configs/drivers/redisson-standalone.json b/.github/workflows/benchmark_configs/drivers/redisson.json similarity index 67% rename from .github/workflows/benchmark_configs/drivers/redisson-standalone.json rename to .github/workflows/benchmark_configs/drivers/redisson.json index 2193ec8a..69d23e28 100644 --- a/.github/workflows/benchmark_configs/drivers/redisson-standalone.json +++ b/.github/workflows/benchmark_configs/drivers/redisson.json @@ -1,6 +1,6 @@ { "schema_version": "1.0", - "description": "Redisson client - standalone mode", + "description": "Redisson client", "driver_id": "redisson", "mode": "standalone", "specific_driver_config": {} diff --git a/.github/workflows/benchmark_configs/drivers/spring-data-redis-jedis-standalone.json b/.github/workflows/benchmark_configs/drivers/spring-data-redis-jedis.json similarity index 68% rename from .github/workflows/benchmark_configs/drivers/spring-data-redis-jedis-standalone.json rename to .github/workflows/benchmark_configs/drivers/spring-data-redis-jedis.json index fccd90d6..165e50b1 100644 --- a/.github/workflows/benchmark_configs/drivers/spring-data-redis-jedis-standalone.json +++ b/.github/workflows/benchmark_configs/drivers/spring-data-redis-jedis.json @@ -1,6 +1,6 @@ { "schema_version": "1.0", - "description": "Spring Data Redis with Jedis driver - standalone mode", + "description": "Spring Data Redis with Jedis driver", "driver_id": "spring-data-redis", "mode": "standalone", "specific_driver_config": { diff --git a/.github/workflows/benchmark_configs/drivers/spring-data-redis-lettuce-standalone.json b/.github/workflows/benchmark_configs/drivers/spring-data-redis-lettuce.json similarity index 68% rename from .github/workflows/benchmark_configs/drivers/spring-data-redis-lettuce-standalone.json rename to .github/workflows/benchmark_configs/drivers/spring-data-redis-lettuce.json index df9f3a5d..2f510406 100644 --- a/.github/workflows/benchmark_configs/drivers/spring-data-redis-lettuce-standalone.json +++ b/.github/workflows/benchmark_configs/drivers/spring-data-redis-lettuce.json @@ -1,6 +1,6 @@ { "schema_version": "1.0", - "description": "Spring Data Redis with Lettuce driver - standalone mode", + "description": "Spring Data Redis with Lettuce driver", "driver_id": "spring-data-redis", "mode": "standalone", "specific_driver_config": { diff --git a/.github/workflows/benchmark_configs/drivers/spring-data-valkey-glide-standalone.json b/.github/workflows/benchmark_configs/drivers/spring-data-valkey-glide.json similarity index 67% rename from .github/workflows/benchmark_configs/drivers/spring-data-valkey-glide-standalone.json rename to .github/workflows/benchmark_configs/drivers/spring-data-valkey-glide.json index 989e81c1..b78e78e2 100644 --- a/.github/workflows/benchmark_configs/drivers/spring-data-valkey-glide-standalone.json +++ b/.github/workflows/benchmark_configs/drivers/spring-data-valkey-glide.json @@ -1,6 +1,6 @@ { "schema_version": "1.0", - "description": "Spring Data Valkey with Valkey-Glide driver - standalone mode", + "description": "Spring Data Valkey with Valkey-Glide driver", "driver_id": "spring-data-valkey", "mode": "standalone", "specific_driver_config": { diff --git a/.github/workflows/benchmark_configs/drivers/spring-data-valkey-jedis-standalone.json b/.github/workflows/benchmark_configs/drivers/spring-data-valkey-jedis.json similarity index 68% rename from .github/workflows/benchmark_configs/drivers/spring-data-valkey-jedis-standalone.json rename to .github/workflows/benchmark_configs/drivers/spring-data-valkey-jedis.json index 8011f9c9..3b5bfed5 100644 --- a/.github/workflows/benchmark_configs/drivers/spring-data-valkey-jedis-standalone.json +++ b/.github/workflows/benchmark_configs/drivers/spring-data-valkey-jedis.json @@ -1,6 +1,6 @@ { "schema_version": "1.0", - "description": "Spring Data Valkey with Jedis driver - standalone mode", + "description": "Spring Data Valkey with Jedis driver", "driver_id": "spring-data-valkey", "mode": "standalone", "specific_driver_config": { diff --git a/.github/workflows/benchmark_configs/drivers/spring-data-valkey-lettuce-standalone.json b/.github/workflows/benchmark_configs/drivers/spring-data-valkey-lettuce.json similarity index 67% rename from .github/workflows/benchmark_configs/drivers/spring-data-valkey-lettuce-standalone.json rename to .github/workflows/benchmark_configs/drivers/spring-data-valkey-lettuce.json index 3b5fad6b..93e2df2d 100644 --- a/.github/workflows/benchmark_configs/drivers/spring-data-valkey-lettuce-standalone.json +++ b/.github/workflows/benchmark_configs/drivers/spring-data-valkey-lettuce.json @@ -1,6 +1,6 @@ { "schema_version": "1.0", - "description": "Spring Data Valkey with Lettuce driver - standalone mode", + "description": "Spring Data Valkey with Lettuce driver", "driver_id": "spring-data-valkey", "mode": "standalone", "specific_driver_config": { diff --git a/.github/workflows/benchmark_configs/drivers/valkey-glide-cluster.json b/.github/workflows/benchmark_configs/drivers/valkey-glide-cluster.json deleted file mode 100644 index 02668324..00000000 --- a/.github/workflows/benchmark_configs/drivers/valkey-glide-cluster.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "schema_version": "1.0", - "description": "Valkey-Glide client - cluster mode", - "driver_id": "valkey-glide", - "mode": "cluster", - "specific_driver_config": {} -} diff --git a/.github/workflows/benchmark_configs/drivers/valkey-glide-standalone.json b/.github/workflows/benchmark_configs/drivers/valkey-glide.json similarity index 66% rename from .github/workflows/benchmark_configs/drivers/valkey-glide-standalone.json rename to .github/workflows/benchmark_configs/drivers/valkey-glide.json index 2914bc61..1f101885 100644 --- a/.github/workflows/benchmark_configs/drivers/valkey-glide-standalone.json +++ b/.github/workflows/benchmark_configs/drivers/valkey-glide.json @@ -1,6 +1,6 @@ { "schema_version": "1.0", - "description": "Valkey-Glide client - standalone mode", + "description": "Valkey-Glide client", "driver_id": "valkey-glide", "mode": "standalone", "specific_driver_config": {} From 386272d6c9b7cbd155c1987f2c0b1ae15e6c5355 Mon Sep 17 00:00:00 2001 From: Jeremy Parr-Pearson Date: Wed, 18 Mar 2026 09:45:47 -0700 Subject: [PATCH 3/4] Set JAVA_HOME for GLIDE build Signed-off-by: Jeremy Parr-Pearson --- .github/workflows/benchmark.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 105f6794..9adf8785 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -463,6 +463,7 @@ jobs: run: | source "$HOME/.cargo/env" export PATH="$PATH:$HOME/.local/bin" + export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 COMMIT_ID="${{ steps.inputs.outputs.primary_version }}" echo "Building valkey-glide from commit: $COMMIT_ID (primary driver)" @@ -490,6 +491,7 @@ jobs: run: | source "$HOME/.cargo/env" export PATH="$PATH:$HOME/.local/bin" + export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 COMMIT_ID="${{ steps.versions.outputs.secondary_version }}" echo "Building valkey-glide from commit: $COMMIT_ID (secondary driver)" From 70130400c24e0a58cd2cdd14e575d6e00715b649 Mon Sep 17 00:00:00 2001 From: Jeremy Parr-Pearson Date: Wed, 18 Mar 2026 14:12:46 -0700 Subject: [PATCH 4/4] Remove 100 client workload Signed-off-by: Jeremy Parr-Pearson --- .github/workflows/benchmark.yml | 1 - .../reference-workload-100-client.json | 63 ------------------- 2 files changed, 64 deletions(-) delete mode 100644 .github/workflows/benchmark_configs/workloads/reference-workload-100-client.json diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 9adf8785..6356174c 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -40,7 +40,6 @@ on: options: - reference-workload-10-client - reference-workload-1-client - - reference-workload-100-client default: "reference-workload-10-client" primary_version: description: "Primary driver version (version string or commit ID). Leave empty to use default." diff --git a/.github/workflows/benchmark_configs/workloads/reference-workload-100-client.json b/.github/workflows/benchmark_configs/workloads/reference-workload-100-client.json deleted file mode 100644 index 78a9746a..00000000 --- a/.github/workflows/benchmark_configs/workloads/reference-workload-100-client.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "schema_version": "1.0", - "benchmark_profile": { - "name": "Reference Benchmark - 100 Clients", - "description": "Two-phase benchmark: warmup with SETs, then steady-state GET/SET workload with 100 connections", - "version": "1.0.0" - }, - "phases": [ - { - "id": "WARMUP", - "description": "Populate keys with sequential SET operations", - "connections": 100, - "cps_limit": -1, - "rps_limit": -1, - "completion": { - "type": "requests", - "requests": 1000000 - }, - "keyspace": { - "keys_count": 1000000, - "key_size_bytes": 16, - "key_prefix": "bench:", - "generation_alg": "sequential_int" - }, - "commands": [ - { - "command": "set", - "weight": 1.0, - "data_size_bytes": 512 - } - ] - }, - { - "id": "STEADY", - "description": "Steady-state workload with 80% GET, 20% SET", - "connections": 100, - "cps_limit": -1, - "rps_limit": -1, - "completion": { - "type": "requests", - "requests": 1000000 - }, - "keyspace": { - "keys_count": 1000000, - "key_size_bytes": 16, - "key_prefix": "bench:", - "generation_alg": "uniform_rand", - "seed": 12345 - }, - "commands": [ - { - "command": "get", - "weight": 0.8 - }, - { - "command": "set", - "weight": 0.2, - "data_size_bytes": 512 - } - ] - } - ] -}