redis-benchmarks-specification 0.1.307__py3-none-any.whl → 0.1.309__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of redis-benchmarks-specification might be problematic. Click here for more details.

@@ -77,7 +77,7 @@ def create_compare_arguments(parser):
77
77
  parser.add_argument("--comparison_deployment_name", type=str, default="")
78
78
  parser.add_argument("--metric_name", type=str, default="ALL_STATS.Totals.Ops/sec")
79
79
  parser.add_argument(
80
- "--running_platform", type=str, default="intel64-ubuntu22.04-redis-icx1"
80
+ "--running_platform", type=str, default=None
81
81
  )
82
82
  parser.add_argument(
83
83
  "--running_platform_baseline",
@@ -1182,7 +1182,7 @@ def from_rts_to_regression_table(
1182
1182
  filters_baseline.append("deployment_name={}".format(baseline_deployment_name))
1183
1183
  if baseline_github_org != "":
1184
1184
  filters_baseline.append(f"github_org={baseline_github_org}")
1185
- if running_platform_baseline is not None:
1185
+ if running_platform_baseline is not None and running_platform_baseline != "":
1186
1186
  filters_baseline.append(
1187
1187
  "running_platform={}".format(running_platform_baseline)
1188
1188
  )
@@ -1202,7 +1202,7 @@ def from_rts_to_regression_table(
1202
1202
  filters_baseline.append("hash==")
1203
1203
  if "hash" not in by_str_comparison:
1204
1204
  filters_comparison.append("hash==")
1205
- if running_platform_comparison is not None:
1205
+ if running_platform_comparison is not None and running_platform_comparison != "":
1206
1206
  filters_comparison.append(
1207
1207
  "running_platform={}".format(running_platform_comparison)
1208
1208
  )
@@ -1538,12 +1538,18 @@ def from_rts_to_regression_table(
1538
1538
 
1539
1539
  def get_only_Totals(baseline_timeseries):
1540
1540
  logging.warning("\t\tTime-series: {}".format(", ".join(baseline_timeseries)))
1541
- logging.info("Checking if Totals will reduce timeseries.")
1541
+ logging.info(f"Checking if Totals will reduce timeseries. initial len={len(baseline_timeseries)}")
1542
1542
  new_base = []
1543
1543
  for ts_name in baseline_timeseries:
1544
+ if "io-threads" in ts_name:
1545
+ continue
1546
+ if "oss-cluster" in ts_name:
1547
+ continue
1544
1548
  if "Totals" in ts_name:
1545
1549
  new_base.append(ts_name)
1546
1550
  baseline_timeseries = new_base
1551
+ logging.info(f" final len={len(baseline_timeseries)}")
1552
+
1547
1553
  return baseline_timeseries
1548
1554
 
1549
1555
 
@@ -1,3 +1,6 @@
1
+ import logging
2
+
3
+
1
4
  def prepare_memtier_benchmark_parameters(
2
5
  clientconfig,
3
6
  full_benchmark_path,
@@ -5,6 +8,7 @@ def prepare_memtier_benchmark_parameters(
5
8
  server,
6
9
  local_benchmark_output_filename,
7
10
  oss_cluster_api_enabled,
11
+ password=None,
8
12
  ):
9
13
  benchmark_command = [
10
14
  full_benchmark_path,
@@ -15,6 +19,12 @@ def prepare_memtier_benchmark_parameters(
15
19
  "--server",
16
20
  "{}".format(server),
17
21
  ]
22
+
23
+ # Add password authentication if provided
24
+ if password is not None and password != "":
25
+ benchmark_command.extend(["--authenticate", password])
26
+ logging.info("Memtier benchmark will use password authentication")
27
+
18
28
  if oss_cluster_api_enabled is True:
19
29
  benchmark_command.append("--cluster-mode")
20
30
  benchmark_command_str = " ".join(benchmark_command)
@@ -8,9 +8,9 @@ from redis_benchmarks_specification.__self_contained_coordinator__.cpuset import
8
8
 
9
9
 
10
10
  def generate_standalone_redis_server_args(
11
- binary, port, dbdir, configuration_parameters=None, redis_arguments=""
11
+ binary, port, dbdir, configuration_parameters=None, redis_arguments="", password=None
12
12
  ):
13
- added_params = ["port", "protected-mode", "dir"]
13
+ added_params = ["port", "protected-mode", "dir", "requirepass"]
14
14
  # start redis-server
15
15
  command = [
16
16
  binary,
@@ -19,6 +19,11 @@ def generate_standalone_redis_server_args(
19
19
  "--port",
20
20
  "{}".format(port),
21
21
  ]
22
+
23
+ # Add password authentication if provided
24
+ if password is not None and password != "":
25
+ command.extend(["--requirepass", password])
26
+ logging.info("Redis server will be started with password authentication")
22
27
  if dbdir != "":
23
28
  command.extend(["--dir", dbdir])
24
29
  if configuration_parameters is not None:
@@ -59,6 +64,7 @@ def spin_docker_standalone_redis(
59
64
  redis_proc_start_port,
60
65
  run_image,
61
66
  temporary_dir,
67
+ password=None,
62
68
  ):
63
69
  mnt_point = "/mnt/redis/"
64
70
  command = generate_standalone_redis_server_args(
@@ -66,6 +72,8 @@ def spin_docker_standalone_redis(
66
72
  redis_proc_start_port,
67
73
  mnt_point,
68
74
  redis_configuration_parameters,
75
+ "",
76
+ password,
69
77
  )
70
78
  command_str = " ".join(command)
71
79
  db_cpuset_cpus, current_cpu_pos = generate_cpuset_cpus(
@@ -118,6 +118,8 @@ def process_self_contained_coordinator_stream(
118
118
  verbose=False,
119
119
  run_tests_with_dataset=False,
120
120
  ):
121
+ # Use a default password for coordinator Redis instances
122
+ redis_password = "redis_coordinator_password_2024"
121
123
  stream_id = "n/a"
122
124
  overall_result = False
123
125
  total_test_suite_runs = 0
@@ -276,6 +278,7 @@ def process_self_contained_coordinator_stream(
276
278
  redis_proc_start_port,
277
279
  run_image,
278
280
  temporary_dir,
281
+ redis_password,
279
282
  )
280
283
  else:
281
284
  shard_count = 1
@@ -307,7 +310,7 @@ def process_self_contained_coordinator_stream(
307
310
  )
308
311
  )
309
312
 
310
- r = redis.StrictRedis(port=redis_proc_start_port)
313
+ r = redis.StrictRedis(port=redis_proc_start_port, password=redis_password)
311
314
  r.ping()
312
315
  redis_pids = []
313
316
  redis_info = r.info()
@@ -389,6 +392,7 @@ def process_self_contained_coordinator_stream(
389
392
  "localhost",
390
393
  local_benchmark_output_filename,
391
394
  benchmark_tool_workdir,
395
+ redis_password,
392
396
  )
393
397
  elif "vector_db_benchmark" in benchmark_tool:
394
398
  (
@@ -496,6 +496,9 @@ def process_self_contained_coordinator_stream(
496
496
  restore_build_artifacts_default=True,
497
497
  args=None,
498
498
  ):
499
+ # Use a default password for coordinator Redis instances
500
+ redis_password = "redis_coordinator_password_2024"
501
+
499
502
  stream_id = "n/a"
500
503
  overall_result = False
501
504
  total_test_suite_runs = 0
@@ -861,6 +864,7 @@ def process_self_contained_coordinator_stream(
861
864
  mnt_point,
862
865
  redis_configuration_parameters,
863
866
  redis_arguments,
867
+ redis_password,
864
868
  )
865
869
  command_str = " ".join(command)
866
870
  db_cpuset_cpus, current_cpu_pos = generate_cpuset_cpus(
@@ -876,7 +880,7 @@ def process_self_contained_coordinator_stream(
876
880
  temporary_dir,
877
881
  )
878
882
 
879
- r = redis.StrictRedis(port=redis_proc_start_port)
883
+ r = redis.StrictRedis(port=redis_proc_start_port, password=redis_password)
880
884
  r.ping()
881
885
  redis_conns = [r]
882
886
  reset_commandstats(redis_conns)
@@ -975,7 +979,7 @@ def process_self_contained_coordinator_stream(
975
979
  full_benchmark_path,
976
980
  redis_proc_start_port,
977
981
  "localhost",
978
- None,
982
+ redis_password,
979
983
  local_benchmark_output_filename,
980
984
  False,
981
985
  False,
@@ -1721,7 +1725,7 @@ def data_prepopulation_step(
1721
1725
  full_benchmark_path,
1722
1726
  port,
1723
1727
  "localhost",
1724
- None,
1728
+ redis_password,
1725
1729
  local_benchmark_output_filename,
1726
1730
  False,
1727
1731
  )
@@ -0,0 +1,107 @@
1
+ version: 0.4
2
+ name: memtier_benchmark-session-caching-hash-100k-sessions
3
+ description: |
4
+ Runs memtier_benchmark to simulate a session caching workload for a SaaS application.
5
+ This benchmark focuses exclusively on hash-based session storage, where each session
6
+ is stored in a Redis hash (`session:<id>`) with fields like user ID, timestamps, device info,
7
+ and metadata (total ~400–600B).
8
+
9
+ The benchmark models a typical read-heavy cache usage pattern, with an approximate
10
+ **read:write ratio of 90:10**, reflecting session retrievals and infrequent updates.
11
+
12
+ Command groups:
13
+ - Session cache reads (`HGETALL`): ~90%
14
+ - Session cache writes (`HSET`): ~10%
15
+
16
+ To better approximate real-world access patterns, the benchmark uses a **Zipfian key distribution**
17
+ (`--command-key-pattern=Z`). This simulates **skewed access** where a small subset of sessions (hot keys)
18
+ receives a majority of reads — a common pattern in production workloads.
19
+
20
+ While Zipfian is technically a power-law distribution, it effectively mimics **Poisson-like behavior**
21
+ in large-scale systems, where access frequency is uneven but statistically predictable.
22
+ This access skew mirrors real-life scenarios such as:
23
+ - Frequently accessed or "sticky" user sessions
24
+ - Popular user accounts or active devices
25
+ - Hot caches for trending or recently used resources
26
+
27
+ Using Zipfian distribution allows this benchmark to capture **contention**, **cache pressure**, and
28
+ **read amplification** effects that occur in real SaaS applications under load.
29
+
30
+
31
+ dbconfig:
32
+ configuration-parameters:
33
+ save: '""'
34
+ resources:
35
+ requests:
36
+ memory: 1g
37
+ init_lua: |
38
+ local seed = 12345
39
+ math.randomseed(seed)
40
+ local now = tonumber(redis.call('TIME')[1])
41
+ local function rand_str(len)
42
+ local chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
43
+ local res = ''
44
+ for i = 1, len do
45
+ local idx = math.random(#chars)
46
+ res = res .. chars:sub(idx, idx)
47
+ end
48
+ return res
49
+ end
50
+ for i = 1, 100000 do
51
+ local session_id = 'session:' .. i
52
+ local user_id = 'user-' .. i
53
+ local org_id = 'org-' .. i
54
+ redis.call('HSET', session_id,
55
+ 'userId', user_id,
56
+ 'organizationId', org_id,
57
+ 'role', 'member',
58
+ 'createdAt', tostring(now - math.random(3600)),
59
+ 'lastAccessed', tostring(now),
60
+ 'ipAddress', '192.168.1.' .. (i % 255),
61
+ 'device', 'device-' .. rand_str(8),
62
+ 'authMethod', 'password',
63
+ 'status', 'active',
64
+ 'metadata', rand_str(200 + (i % 100))
65
+ )
66
+ end
67
+ return 'OK'
68
+
69
+ tested-groups:
70
+ - hash
71
+
72
+ tested-commands:
73
+ - hgetall
74
+ - hset
75
+
76
+ redis-topologies:
77
+ - oss-standalone
78
+
79
+ build-variants:
80
+ - gcc:8.5.0-amd64-debian-buster-default
81
+ - dockerhub
82
+
83
+ clientconfig:
84
+ run_image: redislabs/memtier_benchmark:edge
85
+ tool: memtier_benchmark
86
+ arguments: >
87
+ --key-prefix ""
88
+ --key-minimum 1
89
+ --key-maximum 100000
90
+ --data-size-range=400-600
91
+ --pipeline=1
92
+ --print-percentiles=50,90,95,99
93
+ --run-count=1
94
+ --test-time=120
95
+ --command="HGETALL session:__key__"
96
+ --command-key-pattern=Z
97
+ --command-ratio=90
98
+ --command="HSET session:__key__ userId user-__key__ organizationId org-__key__ role admin email user__key__@example.com name \"User __key__\" permissions \"[\\\"read\\\",\\\"write\\\"]\" lastActivity __key__ ipAddress 192.168.1.__key__ userAgent \"Mozilla/5.0\" createdAt __key__"
99
+ --command-key-pattern=Z
100
+ --command-ratio=10
101
+ --hide-histogram
102
+ resources:
103
+ requests:
104
+ cpus: '4'
105
+ memory: 2g
106
+
107
+ priority: 150
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: redis-benchmarks-specification
3
- Version: 0.1.307
3
+ Version: 0.1.309
4
4
  Summary: The Redis benchmarks specification describes the cross-language/tools requirements and expectations to foster performance and observability standards around redis related technologies. Members from both industry and academia, including organizations and individuals are encouraged to contribute.
5
5
  Author: filipecosta90
6
6
  Author-email: filipecosta.90@gmail.com
@@ -19,8 +19,8 @@ redis_benchmarks_specification/__common__/runner.py,sha256=7Xc8QjwqYXQH9Vnq7s2Yi
19
19
  redis_benchmarks_specification/__common__/spec.py,sha256=D_SN48wg6NMthW_-OS1H5bydSDiuZpfd4WPPj7Vfwmc,5760
20
20
  redis_benchmarks_specification/__common__/timeseries.py,sha256=w8XQrGPEFuuemDXXz4iny7lYsNbYH0ycQyq3jHIr80g,52916
21
21
  redis_benchmarks_specification/__compare__/__init__.py,sha256=DtBXRp0Q01XgCFmY-1OIePMyyYihVNAjZ1Y8zwqSDN0,101
22
- redis_benchmarks_specification/__compare__/args.py,sha256=shER83ddBRBMAlbgxGXJ5H5XziKe-sP_Nyx7t5aLOo8,7650
23
- redis_benchmarks_specification/__compare__/compare.py,sha256=nymItbCO28KiAe3bVxYVObwbzpLmISAF_qyJ6b3KCPQ,62466
22
+ redis_benchmarks_specification/__compare__/args.py,sha256=nZU22cOgcCfaBn3yIAWmjIT0-8cFWqBQoZOgUXH5YKU,7622
23
+ redis_benchmarks_specification/__compare__/compare.py,sha256=2zBPedAQYWY3QlJlwQIcsnZJsGZ1AhH4oLD4Gb8V5XM,62797
24
24
  redis_benchmarks_specification/__init__.py,sha256=YQIEx2sLPPA0JR9OuCuMNMNtm-f_gqDKgzvNJnkGNKY,491
25
25
  redis_benchmarks_specification/__runner__/__init__.py,sha256=l-G1z-t6twUgi8QLueqoTQLvJmv3hJoEYskGm6H7L6M,83
26
26
  redis_benchmarks_specification/__runner__/args.py,sha256=YeN7-eOGoqCHKh5FrKz9z5Ee-Rh-3DF9tm2Hb-3m7sQ,10648
@@ -30,13 +30,13 @@ redis_benchmarks_specification/__self_contained_coordinator__/__init__.py,sha256
30
30
  redis_benchmarks_specification/__self_contained_coordinator__/args.py,sha256=uxBjdQ78klvsVi6lOfGYQVaWIxc8OI-DwYKY16SgvCY,5952
31
31
  redis_benchmarks_specification/__self_contained_coordinator__/artifacts.py,sha256=OVHqJzDgeSSRfUSiKp1ZTAVv14PvSbk-5yJsAAoUfpw,936
32
32
  redis_benchmarks_specification/__self_contained_coordinator__/build_info.py,sha256=vlg8H8Rxu2falW8xp1GvL1SV1fyBguSbz6Apxc7A2yM,2282
33
- redis_benchmarks_specification/__self_contained_coordinator__/clients.py,sha256=ydpbKrL_pNRlqU9lNCeIlFb-EAZF3Eh5THeXus7NZdc,1608
33
+ redis_benchmarks_specification/__self_contained_coordinator__/clients.py,sha256=EL1V4-i-tTav1mcF_CUosqPF3Q1qi9BZL0zFajEk70c,1878
34
34
  redis_benchmarks_specification/__self_contained_coordinator__/cpuset.py,sha256=sRvtoJIitppcOpm3R5LbVmSfPEAqPumOqVATnF5Wbek,594
35
- redis_benchmarks_specification/__self_contained_coordinator__/docker.py,sha256=Alf9Y1dfuOMoD4u_Dv3jTodkwZfSrlo2_YceevaWNFo,2757
35
+ redis_benchmarks_specification/__self_contained_coordinator__/docker.py,sha256=nVfF1daQ1eBAgXEIjrfK_AYi4hDQbep4E-Kf_cHjMp8,3065
36
36
  redis_benchmarks_specification/__self_contained_coordinator__/post_processing.py,sha256=sVLKNnWdAqYY9DjVdqRC5tDaIrVSaI3Ca7w8-DQ-LRM,776
37
37
  redis_benchmarks_specification/__self_contained_coordinator__/prepopulation.py,sha256=qB1rwqkROfuyFotB7MfUQiYS4Gzafd8dd2ca7lT4l2I,2909
38
- redis_benchmarks_specification/__self_contained_coordinator__/runners.py,sha256=mEEekNdzqHsR9qA8P-SOxein3x3LJDE-TGXiF-bI8oU,29644
39
- redis_benchmarks_specification/__self_contained_coordinator__/self_contained_coordinator.py,sha256=rK6MWqJQocaQffCUfpE50wDv1_iSJ6sRl74-JBSLYFM,79000
38
+ redis_benchmarks_specification/__self_contained_coordinator__/runners.py,sha256=SNn175eBbU8con6vH4u2IJOhcwzQcGfRDimNmEdEyvg,29889
39
+ redis_benchmarks_specification/__self_contained_coordinator__/self_contained_coordinator.py,sha256=qTTuhFyXHWvuOPdMpZ9Zj2nOWxtplSy7LuowtJHn2to,79214
40
40
  redis_benchmarks_specification/__setups__/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
41
  redis_benchmarks_specification/__setups__/topologies.py,sha256=xQ1IJkcTji_ZjLiJd3vOxZpvbNtBLZw9cPkw5hGJKHU,481
42
42
  redis_benchmarks_specification/__spec__/__init__.py,sha256=l-G1z-t6twUgi8QLueqoTQLvJmv3hJoEYskGm6H7L6M,83
@@ -271,12 +271,13 @@ redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-pubsub-mixed
271
271
  redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-pubsub-mixed-100-channels-128B-100-publishers-50K-subscribers-5k-conns.yml,sha256=mh_cAomSjsU4WL2l9gt0dhyWdSwfXTrEZgnRz6gzSQE,1144
272
272
  redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-pubsub-publish-1K-channels-10B-no-subscribers.yml,sha256=zwb27Jmg0mwcthbmdUe0KuzqRzAPs7OHcK2gc9-5VBE,779
273
273
  redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-server-time-pipeline-10.yml,sha256=7G_J8kUFay7jXhZvsZK5jvVHSLZvhMV0uuDMkZBbeSQ,675
274
+ redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-session-caching-hash-100k-sessions.yml,sha256=ASQVpVvqwIRFmQYVI8xRf-mvg9nZYYc7ps6259Jb7gk,3600
274
275
  redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-session-storage-100k-sessions.yml,sha256=FNy157KK1Vmru9xervxuu_A9qOqzwrq9iRLUVJRWiRs,6950
275
276
  redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-session-storage-1k-sessions.yml,sha256=W6HnNaVhm6qcoEuwkT1Bv_o9hV0r55W58NLKwtlsjhM,6944
276
277
  redis_benchmarks_specification/test-suites/template.txt,sha256=d_edIE7Sxa5X7I2yG-Io0bPdbDIHR0oWFoCA3XUt_EU,435
277
278
  redis_benchmarks_specification/vector-search-test-suites/vector_db_benchmark_test.yml,sha256=PD7ow-k4Ll2BkhEC3aIqiaCZt8Hc4aJIp96Lw3J3mcI,791
278
- redis_benchmarks_specification-0.1.307.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
279
- redis_benchmarks_specification-0.1.307.dist-info/METADATA,sha256=KN91I2NWKvrfOaIv9uclbBlLUGxktFOKZEWSqLCsDBw,22726
280
- redis_benchmarks_specification-0.1.307.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
281
- redis_benchmarks_specification-0.1.307.dist-info/entry_points.txt,sha256=x5WBXCZsnDRTZxV7SBGmC65L2k-ygdDOxV8vuKN00Nk,715
282
- redis_benchmarks_specification-0.1.307.dist-info/RECORD,,
279
+ redis_benchmarks_specification-0.1.309.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
280
+ redis_benchmarks_specification-0.1.309.dist-info/METADATA,sha256=jG0aNx6k533WMnqIbJiG_j4ngC6ihfy_yvI7ChDeXnw,22726
281
+ redis_benchmarks_specification-0.1.309.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
282
+ redis_benchmarks_specification-0.1.309.dist-info/entry_points.txt,sha256=x5WBXCZsnDRTZxV7SBGmC65L2k-ygdDOxV8vuKN00Nk,715
283
+ redis_benchmarks_specification-0.1.309.dist-info/RECORD,,