Git Product home page Git Product logo

redis / redis-benchmarks-specification Goto Github PK

View Code? Open in Web Editor NEW
27.0 7.0 10.0 14.9 MB

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.

License: Apache License 2.0

Python 100.00%
redis redis-benchmark benchmark telemetry performance-testing

redis-benchmarks-specification's Introduction

SPEC logo

codecov Run tox on Ubuntu 22.04 PyPI version

Benchmark specifications goal

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.

Currently, the following members actively support this project:

  • Redis Ltd. via the Redis Performance Group: providing steady-stable infrastructure platform to run the benchmark suite. Supporting the active development of this project within the company.
  • Intel.: Intel is hosting an on-prem cluster of servers dedicated to the always-on automatic performance testing.

Scope

This repo aims to provide Redis related benchmark standards and methodologies for:

  • Management of benchmark data and specifications across different setups

  • Running benchmarks and recording results

  • Exporting performance results in several formats (CSV, RedisTimeSeries, JSON)

  • Finding on-cpu, off-cpu, io, and threading performance problems by attaching profiling tools/probers ( perf (a.k.a. perf_events), bpf tooling, vtune )

  • Finding performance problems by attaching telemetry probes

Current supported benchmark tools:

Installation and Execution

The Redis benchmarks specification and implementations is developed for Unix and is actively tested on it. To have access to the latest SPEC and Tooling impletamtion you only need to install one python package.
Before package's installation, please install its' dependencies.

Installing package requirements

# install pip installer for python3
sudo apt install python3-pip -y
sudo pip3 install --upgrade pip
sudo pip3 install pyopenssl --upgrade

# install docker
sudo apt install docker.io -y

# install supervisord 
sudo apt install supervisor -y

Installing Redis benchmarks specification

Installation is done using pip, the package installer for Python, in the following manner:

python3 -m pip install redis-benchmarks-specification --ignore-installed PyYAML

To run particular version - use its number, e.g. 0.1.57:

pip3 install redis-benchmarks-specification==0.1.57

Testing out the redis-benchmarks-spec-client-runner

There is an option to run "redis-benchmarks-spec" tests using standalone runner approach. For this option redis-benchmarks-specificaiton should be run together with redis-server in the same time.

# Run redis server
[taskset -c cpu] /src/redis-server --port 6379 --dir logs --logfile server.log --save "" [--daemonize yes]

# Run benchmark
redis-benchmarks-spec-client-runner --db_server_host localhost --db_server_port 6379 --client_aggregated_results_folder ./test

Use taskset when starting the redis-server to pin it to a particular cpu and get more consistent results. Option "--daemonize yes" given to server run command allows to run redis-server in background.
Option "--test X.yml" given to benchmark execution command allows to run particular test, where X - test name

Full list of option can be taken with "-h" option:

$ redis-benchmarks-spec-client-runner -h
  usage: redis-benchmarks-spec-client-runner [-h]
                                             [--platform-name PLATFORM_NAME]
                                             [--triggering_env TRIGGERING_ENV]
                                             [--setup_type SETUP_TYPE]
                                             [--github_repo GITHUB_REPO]
                                             [--github_org GITHUB_ORG]
                                             [--github_version GITHUB_VERSION]
                                             [--logname LOGNAME]
                                             [--test-suites-folder TEST_SUITES_FOLDER]
                                             [--test TEST]
                                             [--db_server_host DB_SERVER_HOST]
                                             [--db_server_port DB_SERVER_PORT]
                                             [--cpuset_start_pos CPUSET_START_POS]
                                             [--datasink_redistimeseries_host DATASINK_REDISTIMESERIES_HOST]
                                             [--datasink_redistimeseries_port DATASINK_REDISTIMESERIES_PORT]
                                             [--datasink_redistimeseries_pass DATASINK_REDISTIMESERIES_PASS]
                                             [--datasink_redistimeseries_user DATASINK_REDISTIMESERIES_USER]
                                             [--datasink_push_results_redistimeseries] [--profilers PROFILERS]
                                             [--enable-profilers] [--flushall_on_every_test_start]
                                             [--flushall_on_every_test_end]
                                             [--preserve_temporary_client_dirs]
                                             [--client_aggregated_results_folder CLIENT_AGGREGATED_RESULTS_FOLDER]
                                             [--tls]
                                             [--tls-skip-verify]
                                             [--cert CERT]
                                             [--key KEY]
                                             [--cacert CACERT]
  redis-benchmarks-spec-client-runner (solely client) 0.1.61
  ...

Testing out redis-benchmarks-spec-sc-coordinator

Alternative way of running redis-server for listeting is running via redis-benchmarks coordinator.

You should now be able to print the following installed benchmark runner help:

$ redis-benchmarks-spec-sc-coordinator -h
usage: redis-benchmarks-spec-sc-coordinator [-h] --event_stream_host
                                            EVENT_STREAM_HOST
                                            --event_stream_port
                                            EVENT_STREAM_PORT
                                            --event_stream_pass
                                            EVENT_STREAM_PASS
                                            --event_stream_user
                                            EVENT_STREAM_USER
                                            [--cpu-count CPU_COUNT]
                                            [--platform-name PLATFORM_NAME]
                                            [--logname LOGNAME]
                                            [--consumer-start-id CONSUMER_START_ID]
                                            [--setups-folder SETUPS_FOLDER]
                                            [--test-suites-folder TEST_SUITES_FOLDER]
                                            [--datasink_redistimeseries_host DATASINK_REDISTIMESERIES_HOST]
                                            [--datasink_redistimeseries_port DATASINK_REDISTIMESERIES_PORT]
                                            [--datasink_redistimeseries_pass DATASINK_REDISTIMESERIES_PASS]
                                            [--datasink_redistimeseries_user DATASINK_REDISTIMESERIES_USER]
                                            [--datasink_push_results_redistimeseries]

redis-benchmarks-spec runner(self-contained) 0.1.13

optional arguments:
  -h, --help            show this help message and exit
  --event_stream_host EVENT_STREAM_HOST
  --event_stream_port EVENT_STREAM_PORT
  --event_stream_pass EVENT_STREAM_PASS
  --event_stream_user EVENT_STREAM_USER
  --cpu-count CPU_COUNT
                        Specify how much of the available CPU resources the
                        coordinator can use. (default: 8)
  --platform-name PLATFORM_NAME
                        Specify the running platform name. By default it will
                        use the machine name. (default: fco-ThinkPad-T490)
  --logname LOGNAME     logname to write the logs to (default: None)
  --consumer-start-id CONSUMER_START_ID
  --setups-folder SETUPS_FOLDER
                        Setups folder, containing the build environment
                        variations sub-folder that we use to trigger different
                        build artifacts (default: /home/fco/redislabs/redis-
                        benchmarks-
                        specification/redis_benchmarks_specification/setups)
  --test-suites-folder TEST_SUITES_FOLDER
                        Test suites folder, containing the different test
                        variations (default: /home/fco/redislabs/redis-
                        benchmarks-
                        specification/redis_benchmarks_specification/test-
                        suites)
  --datasink_redistimeseries_host DATASINK_REDISTIMESERIES_HOST
  --datasink_redistimeseries_port DATASINK_REDISTIMESERIES_PORT
  --datasink_redistimeseries_pass DATASINK_REDISTIMESERIES_PASS
  --datasink_redistimeseries_user DATASINK_REDISTIMESERIES_USER
  --datasink_push_results_redistimeseries
                        uploads the results to RedisTimeSeries. Proper
                        credentials are required (default: False)

Note that the minimum arguments to run the benchmark coordinator are: --event_stream_host, --event_stream_port, --event_stream_pass, --event_stream_user You should use the provided credentials to be able to access the event streams. Apart from it, you will need to discuss with the Performance Group the unique platform name that will be used to showcase results, coordinate work, among other thigs.

If all runs accordingly you should see the following sample log when you run the tool with the credentials:

$ poetry run redis-benchmarks-spec-sc-coordinator --platform-name example-platform \
                                                  --event_stream_host <...> \
                                                  --event_stream_port <...> \
                                                  --event_stream_pass <...> \
                                                  --event_stream_user <...>
2021-09-22 10:47:12 INFO redis-benchmarks-spec runner(self-contained) 0.1.13
2021-09-22 10:47:12 INFO Using topologies folder dir /home/fco/redislabs/redis-benchmarks-specification/redis_benchmarks_specification/setups/topologies
2021-09-22 10:47:12 INFO Reading topologies specifications from: /home/fco/redislabs/redis-benchmarks-specification/redis_benchmarks_specification/setups/topologies/topologies.yml
2021-09-22 10:47:12 INFO Using test-suites folder dir /home/fco/redislabs/redis-benchmarks-specification/redis_benchmarks_specification/test-suites
2021-09-22 10:47:12 INFO Running all specified benchmarks: /home/fco/redislabs/redis-benchmarks-specification/redis_benchmarks_specification/test-suites/redis-benchmark-full-suite-1Mkeys-100B.yml
2021-09-22 10:47:12 INFO There are a total of 1 test-suites in folder /home/fco/redislabs/redis-benchmarks-specification/redis_benchmarks_specification/test-suites
2021-09-22 10:47:12 INFO Reading event streams from: <...>:<...> with user <...>
2021-09-22 10:47:12 INFO checking build spec requirements
2021-09-22 10:47:12 INFO Will use consumer group named runners-cg:redis/redis/commits-example-platform.
2021-09-22 10:47:12 INFO Created consumer group named runners-cg:redis/redis/commits-example-platform to distribute work.
2021-09-22 10:47:12 INFO Entering blocking read waiting for work.

You're now actively listening for benchmarks requests to Redis!

Architecture diagram

Architecture diagram

In a very brief description, github.com/redis/redis upstream changes trigger an HTTP API call containing the relevant git information.

The HTTP request is then converted into an event ( tracked within redis ) that will trigger multiple build variants requests based upon the distinct platforms described in platforms.

As soon as a new build variant request is received, the build agent (redis-benchmarks-spec-builder) prepares the artifact(s) and proceeds into adding an artifact benchmark event so that the benchmark coordinator (redis-benchmarks-spec-sc-coordinator) can deploy/manage the required infrastructure and DB topologies, run the benchmark, and export the performance results.

Directory layout

Specifications

The following is a high level status report for currently available specs.

  • redis_benchmarks_specification

    • test-suites: contains the benchmark suites definitions, specifying the target redis topology, the tested commands, the benchmark utility to use (the client), and if required the preloading dataset steps.
  • redis_benchmarks_specification/setups

    • platforms: contains the standard platforms considered to provide steady stable results, and to represent common deployment targets.
    • topologies: contains the standard deployment topologies definition with the associated minimum specs to enable the topology definition.
    • builders: contains the build environment variations, that enable to build Redis with different compilers, compiler flags, libraries, etc...

Spec tool implementations

The following is a high level status report for currently available spec implementations.

  • STATUS: Experimental redis-benchmarks-spec-api : contains the API that translates the POST HTTP request that was triggered by github.com/redis/redis upstream changes, and fetches the relevant git/source info and coverts it into an event ( tracked within redis ).

  • STATUS: Experimental redis-benchmarks-spec-builder: contains the benchmark build agent utility that receives an event indicating a new build variant, generates the required redis binaries to test, and triggers the benchmark run on the listening agents.

  • STATUS: Experimental redis-benchmarks-spec-sc-coordinator: contains the coordinator utility that listens for benchmark suite run requests and setups the required steps to spin the actual benchmark topologies and to trigger the actual benchmarks.

  • STATUS: Experimental redis-benchmarks-spec-client-runner: contains the client utility that triggers the actual benchmarks against an endpoint provided. This tool is setup agnostic and expects the DB to be properly spinned beforehand.

Contributing guidelines

Adding new test suites

TBD

Adding new topologies

TBD

Joining the performance initiative and adding a continuous benchmark platform

Joining the performance initiative

In order to join the performance initiative the only requirement is that you provide a steady-stable infrastructure platform to run the benchmark suites, and you reach out to one of the Redis Performance Initiative member via performance <at> redis <dot> com so that we can provide you with the required secrets to actively listen for benchmark events.

If you check the above "Architecture diagram", this means you only need to run the last moving part of the arch, meaning you will have one or more benchmark coordinator machines actively running benchmarks and pushing the results back to our datasink.

Adding a continuous benchmark platform

In order to be able to run the benchmarks on the platform you need pip installer for python3, and docker. Apart from it, we recommend you manage the redis-benchmarks-spec-sc-coordinator process(es) state via a process monitoring tool like supervisorctl, lauchd, daemon tools, or other.

For this example we relly uppon supervisorctl for process managing.

Adding redis-benchmarks-spec-sc-coordinator to supervisord

Let's add a supervisord entry as follow

vi /etc/supervisor/conf.d/redis-benchmarks-spec-sc-coordinator-1.conf

You can use the following template and update according to your credentials:

[supervisord]
loglevel = debug

[program:redis-benchmarks-spec-sc-coordinator]
command = redis-benchmarks-spec-sc-coordinator --platform-name bicx02 \
                                                  --event_stream_host <...> \
                                                  --event_stream_port <...> \
                                                  --event_stream_pass <...> \
                                                  --event_stream_user <...> \
                                                  --datasink_push_results_redistimeseries \
                                                  --datasink_redistimeseries_host <...> \
                                                  --datasink_redistimeseries_port <...> \
                                                  --datasink_redistimeseries_pass <...> \
                                                  --logname /var/opt/redis-benchmarks-spec-sc-coordinator-1.log
startsecs = 0
autorestart = true
startretries = 1

After editing the conf, you just need to reload and confirm that the benchmark runner is active:

:~# supervisorctl reload
Restarted supervisord
:~# supervisorctl status
redis-benchmarks-spec-sc-coordinator   RUNNING   pid 27842, uptime 0:00:00

Development

  1. Install pypoetry to manage your dependencies and trigger tooling.
pip install poetry
  1. Installing dependencies from lock file
poetry install

Running formaters

poetry run black .

Running linters

poetry run flake8

Running tests

A test suite is provided, and can be run with:

$ pip3 install -r ./dev_requirements.txt
$ tox

To run a specific test:

$ tox -- utils/tests/test_runner.py

License

redis-benchmarks-specification is distributed under the BSD3 license - see LICENSE

redis-benchmarks-specification's People

Contributors

filipecosta90 avatar markovamaria avatar mpozniak95 avatar ofekshenawa avatar slice4e avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

redis-benchmarks-specification's Issues

[BUG]: ERROR Running build variant gcc:8.5.0-amd64-debian-buster-default given it's present on the build-variants spec ['gcc:8.5.0-amd64-debian-buster-default']

2022-02-22 09:24:49 INFO Received work . Stream id 1645547161774-0.
2022-02-22 09:24:49 INFO Received commit hash specifier 4930d19e70c391750479951022e207e19111eb55.
2022-02-22 09:24:49 INFO Detected build variant filter
2022-02-22 09:24:49 ERROR Running build variant gcc:8.5.0-amd64-debian-buster-default given it's present on the build-variants spec ['gcc:8.5.0-amd64-debian-buster-default']
2022-02-22 09:24:49 INFO Using local temporary dir to persist redis build artifacts. Path: /root/tmpiw0w5rq5
2022-02-22 09:24:49 INFO Reading artifact binary redis-server from key b'zipped:artifacts:gcc:8.5.0-amd64-debian-buster-default:redis-server.zip'
2022-02-22 09:24:50 INFO Successfully restored redis-server into /root/tmpiw0w5rq5/redis-server
2022-02-22 09:24:50 INFO Running redis-server on docker image gcc:8.5.0-buster (cpuset=0) with the following args: /mnt/redis/redis-server --protected-mode no --port 6379 --dir /mnt/redis/ --save ""
2022-02-22 09:24:51 INFO Will store benchmark json output to local file oss-standalone-2022-02-22-16-24-51-4930d19e70c391750479951022e207e19111eb55-memtier_benchmark-1Mkeys-load-hash-5-fields-with-1000B-values-pipeline-10.json
2022-02-22 09:24:51 INFO Using docker image redislabs/memtier_benchmark:edge as benchmark client image (cpuset=1,2,3,4) with the following args: /usr/local/bin/memtier_benchmark --port 6379 --server localhost --json-out-file oss-standalone-2022-02-22-16-24-51-4930d19e70c391750479951022e207e19111eb55-memtier_benchmark-1Mkeys-load-hash-5-fields-with-1000B-values-pipeline-10.json "--pipeline" "10" "--data-size" "1000" --command "HSET key field1 data field2 data field3 data field4 data field5 data" --command-key-pattern="P" --key-minimum=1 --key-maximum 1000000 -n 5000 -c 50 -t 4 --hide-histogram
2022-02-22 09:24:51 CRITICAL Some unexpected exception was caught during local work. Failing test....
2022-02-22 09:24:51 CRITICAL <class 'docker.errors.APIError'>
2022-02-22 09:24:51 INFO Tearing down setup
2022-02-22 09:24:51 INFO Detected build variant filter
2022-02-22 09:24:51 ERROR Running build variant gcc:8.5.0-amd64-debian-buster-default given it's present on the build-variants spec ['gcc:8.5.0-amd64-debian-buster-default']
2022-02-22 09:24:51 INFO Using local temporary dir to persist redis build artifacts. Path: /root/tmpfrxek9v8
2022-02-22 09:24:51 INFO Reading artifact binary redis-server from key b'zipped:artifacts:gcc:8.5.0-amd64-debian-buster-default:redis-server.zip'
2022-02-22 09:24:52 INFO Successfully restored redis-server into /root/tmpfrxek9v8/redis-server
2022-02-22 09:24:52 INFO Running redis-server on docker image gcc:8.5.0-buster (cpuset=0) with the following args: /mnt/redis/redis-server --protected-mode no --port 6379 --dir /mnt/redis/ --save ""
2022-02-22 09:24:53 INFO Will store benchmark json output to local file oss-standalone-2022-02-22-16-24-53-4930d19e70c391750479951022e207e19111eb55-redis-benchmark-full-suite-1Mkeys-100B.json
2022-02-22 09:24:53 INFO Running the benchmark with the following parameters:
Args array: ['/usr/local/bin/redis-benchmark', '-h', 'localhost', '-p', '6379', '--csv', '-e', '-c', '50', '-n', '1000000', '--threads', '3', '-P', '1', '-r', '1000000', '-d', '100']
Args str: /usr/local/bin/redis-benchmark -h localhost -p 6379 --csv -e -c 50 -n 1000000 --threads 3 -P 1 -r 1000000 -d 100
2022-02-22 09:24:53 INFO Using docker image redis:6.2.4 as benchmark client image (cpuset=1,2,3) with the following args: /usr/local/bin/redis-benchmark -h localhost -p 6379 --csv -e -c 50 -n 1000000 --threads 3 -P 1 -r 1000000 -d 100

exported timeseries from the datasink are not inheriting the metadata from the build spec

Labels we already have:

benchmarks.redislabs.com:12011> ts.info  "ci.benchmarks.redislabs/by.branch/ci/redis/redis/redis-benchmark-full-suite-1Mkeys-100B/oss-standalone/benchmarks.api/rps/ZPOPMIN"
 1) totalSamples
 2) (integer) 4
 3) memoryUsage
 4) (integer) 4633
 5) firstTimestamp
 6) (integer) 1629306470835
 7) lastTimestamp
 8) (integer) 1629306632933
 9) retentionTime
10) (integer) 0
11) chunkCount
12) (integer) 1
13) maxSamplesPerChunk
14) (integer) 256
15) labels
16)  1) 1) "github_org"
        2) "redis"
     2) 1) "github_repo"
        2) "redis"
     3) 1) "github_org/github_repo"
        2) "redis/redis"
     4) 1) "deployment_type"
        2) "oss-standalone"
     5) 1) "triggering_env"
        2) "ci"
     6) 1) "branch"
        2) "benchmarks.api"
     7) 1) "test_name"
        2) "redis-benchmark-full-suite-1Mkeys-100B"
     8) 1) "metric"
        2) "rps"
     9) 1) "metric_name"
        2) "rps"
    10) 1) "metric_context_path"
        2) "ZPOPMIN"
    11) 1) "metric_jsonpath"
        2) "Tests.*.rps"
17) sourceKey
18) (nil)
19) rules
20) (empty array)

The labels that we want to add:

metadata:
  compiler: "icc"
  compiler_version: "2021.3.0 20210609"
  os: ubuntu18.04
  arch: amd64

[BUG]: Error: expected str, bytes or os.PathLike object, not int

Describe the bug
2022-10-24 08:48:26 ERROR Unable to run perf script args perf script --tid 367493 -i profile_oss-standalone__primary-1-of-1__memtier_benchmark-2keys-set-10-100-elements-sunion_perf:record_2022-10-24-14-45-25.out. Error: expected str, bytes or os.PathLike object, not int

To Reproduce
Steps to reproduce the behavior:

  1. ...
  2. ....

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots/CLI snippets
If applicable, add screenshots to help explain your problem.

Environment (please complete the following information):

  • OS: [e.g. ubuntu 20.04]
  • PyPi version package [e.g. 0.5.9]
  • Platfrom [e.g. x86, Jetson, ARM]

Additional context
Add any other context about the problem here.

when building you should be able to build for a specific target

Example of building on cascade on using a previous gen that does not have the feature ( it would not work ), and the opposite ( building on an old gen and potentially not taking advantage of new gen features ).
Proposed fix:

  • stage 2) on the builders spec, when we need to be restrictive of where the build artifacts are going to be ran we add some metadata tag ( example march or something similar )
  • stage 3) need to check the tags you're allowed to run. arch=amd64 + (march=icelake,...)

SETs named `testcases:metric_context_path:<testcase name>` is not being properly set

Issue: keyname is not being properly set. we should see ...testcases:metric_context_path:<testcase name> and we're seeing testcases:metric_context_path:None

benchmarks.redislabs.com:12011> "smembers" "ci.benchmarks.redislabs/ci/redis/redis:testcases:metric_context_path:redis-benchmark-full-suite-1Mkeys-100B"
(empty array)
benchmarks.redislabs.com:12011> "smembers" "ci.benchmarks.redislabs/ci/redis/redis:testcases:metric_context_path:None"
 1) "LRANGE_300"
 2) "SADD"
 3) "GET"
 4) "RPUSH"
 5) "INCR"
 6) "LRANGE_600"
 7) "LPOP"
 8) "SPOP"
 9) "HSET"
10) "ZADD"
11) "ZPOPMIN"
12) "LRANGE_500"
13) "RPOP"
14) "PING_INLINE"
15) "MSET"
16) "SET"
17) "LRANGE_100"
18) "PING_MBULK"
19) "LPUSH"

[BUG]: triggering new tests fails

(...)
Traceback (most recent call last):
  File "/usr/local/bin/redis-benchmarks-spec-sc-coordinator", line 5, in <module>
    from redis_benchmarks_specification.__self_contained_coordinator__.self_contained_coordinator import main
  File "/usr/local/lib/python3.8/dist-packages/redis_benchmarks_specification/__self_contained_coordinator__/self_contained_coordinator.py", line 27, in <module>
    from redis_benchmarks_specification.__self_contained_coordinator__.runners import (
  File "/usr/local/lib/python3.8/dist-packages/redis_benchmarks_specification/__self_contained_coordinator__/runners.py", line 57, in <module>
    from redis_benchmarks_specification.__self_contained_coordinator__.docker import (
  File "/usr/local/lib/python3.8/dist-packages/redis_benchmarks_specification/__self_contained_coordinator__/docker.py", line 8, in <module>
    from redis_benchmarks_specification.__self_contained_coordinator__.self_contained_coordinator import (
ImportError: cannot import name 'generate_standalone_redis_server_args' from partially initialized module 'redis_benchmarks_specification.__self_contained_coordinator__.self_contained_coordinator' (most likely due to a circular import) (/usr/local/lib/python3.8/dist-packages/redis_benchmarks_specification/__self_contained_coordinator__/self_contained_coordinator.py)

[BUG]: multiple TLS tests fail on 2nd test due to tls cert/key filenames being replaced

Describe the bug

2022-02-09 08:23:35 INFO Tearing down setup
2022-02-09 08:23:35 INFO Given that TLS is enabled, appending -tls to the testname: memtier_benchmark-1Mkeys-load-list-with-100B-values-tls.
2022-02-09 08:23:35 CRITICAL Some unexpected exception was caught during local work. Failing test....
2022-02-09 08:23:35 CRITICAL <class 'redis.exceptions.ConnectionError'>
------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/redis/connection.py", line 559, in connect
    sock = self._connect()
  File "/usr/local/lib/python3.6/dist-packages/redis/connection.py", line 858, in _connect
    keyfile=self.keyfile)
FileNotFoundError: [Errno 2] No such file or directory

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/redis_benchmarks_specification/__runner__/runner.py", line 247, in process_self_contained_coordinator_stream
    r.ping()
  File "/usr/local/lib/python3.6/dist-packages/redis/client.py", line 1378, in ping
    return self.execute_command('PING')
  File "/usr/local/lib/python3.6/dist-packages/redis/client.py", line 898, in execute_command
    conn = self.connection or pool.get_connection(command_name, **options)
  File "/usr/local/lib/python3.6/dist-packages/redis/connection.py", line 1192, in get_connection
    connection.connect()
  File "/usr/local/lib/python3.6/dist-packages/redis/connection.py", line 563, in connect
    raise ConnectionError(self._error_message(e))
redis.exceptions.ConnectionError: Error 2 connecting to 172.31.59.178:6380. No such file or directory.
------------------------------------------------------------
2022-02-09 08:23:35 INFO Tearing down setup

[BUG]: Profile data on containerized Redis is not being fully populated

redis-benchmarks-spec-builder: wrong redis dependencies building due to hdr_histogram not existing on < 6.2.X

Traceback (most recent call last):
  File "/usr/local/bin/redis-benchmarks-spec-builder", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.6/dist-packages/redis_benchmarks_specification/__builder__/builder.py", line 129, in main
    builders_folder, conn, different_build_specs, previous_id
  File "/usr/local/lib/python3.6/dist-packages/redis_benchmarks_specification/__builder__/builder.py", line 266, in builder_process_stream
    command=build_command,
  File "/usr/local/lib/python3.6/dist-packages/docker/models/containers.py", line 841, in run
    container, exit_status, command, image, out
docker.errors.ContainerError: Command 'bash -c "make Makefile.dep  && cd ./deps && CXX=g++ CC=gcc make hdr_histogram hiredis jemalloc linenoise lua  -j && cd .. && CXX=g++ CC=gcc make redis-server  -j"' in image 'gcc:8.5.0-buster' returned non-zero exit status 2

[BUG]: self_contained_coordinator r.ping() is using 6379 port and not redis_proc_start_port

  File "/usr/local/lib/python3.6/dist-packages/redis_benchmarks_specification/__self_contained_coordinator__/self_contained_coordinator.py", line 506, in process_self_contained_coordinator_stream
    r.ping()
  File "/usr/local/lib/python3.6/dist-packages/redis/commands/core.py", line 1053, in ping
    return self.execute_command("PING", **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/redis/client.py", line 1215, in execute_command
    conn = self.connection or pool.get_connection(command_name, **options)
  File "/usr/local/lib/python3.6/dist-packages/redis/connection.py", line 1386, in get_connection
    connection.connect()
  File "/usr/local/lib/python3.6/dist-packages/redis/connection.py", line 620, in connect
    raise ConnectionError(self._error_message(e))
redis.exceptions.ConnectionError: Error 111 connecting to localhost:6379. Connection refused.

[BUG]: Fail on memtier_benchmark-10Mkeys-load-hash-5-fields-with-1000B-values-pipeline-10.yml

Fail on test memtier_benchmark-10Mkeys-load-hash-5-fields-with-1000B-values-pipeline-10.yml, started from v30, still exist in latest head
To Reproduce

$ redis-benchmarks-spec-client-runner --db_server_host localhost --db_server_port 6379 --client_aggregated_results_folder ./test --test memtier_benchmark-10Mkeys-load-hash-5-fields-with-1000B-values-pipeline-10.yml

Expected behavior
Successful run with results

Screenshots/CLI snippets
Test Kills server:

$ ./src/redis-server --port 6379 --dir ~/logs --logfile fail.log --dbfilename my_db.rdb
Killed

Error message:

2022-05-13 17:37:32 CRITICAL Some unexpected exception was caught during local work. Failing test....
2022-05-13 17:37:32 CRITICAL <class 'redis.exceptions.ConnectionError'>
2022-05-13 17:37:32 INFO Tearing down setup

------------------------------------------------------------
Traceback (most recent call last):
  File "/home/ubuntu/Work/exp_flush/env/lib/python3.8/site-packages/redis/connection.py", line 1398, in get_connection
    if connection.can_read():
  File "/home/ubuntu/Work/exp_flush/env/lib/python3.8/site-packages/redis/connection.py", line 812, in can_read
    return self._parser.can_read(timeout)
  File "/home/ubuntu/Work/exp_flush/env/lib/python3.8/site-packages/redis/connection.py", line 317, in can_read
    return self._buffer and self._buffer.can_read(timeout)
  File "/home/ubuntu/Work/exp_flush/env/lib/python3.8/site-packages/redis/connection.py", line 224, in can_read
    return bool(self.length) or self._read_from_socket(
  File "/home/ubuntu/Work/exp_flush/env/lib/python3.8/site-packages/redis/connection.py", line 197, in _read_from_socket
    raise ConnectionError(SERVER_CLOSED_CONNECTION_ERROR)
redis.exceptions.ConnectionError: Connection closed by server.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/ubuntu/Work/exp_flush/env/lib/python3.8/site-packages/redis/connection.py", line 614, in connect
    sock = self.retry.call_with_retry(
  File "/home/ubuntu/Work/exp_flush/env/lib/python3.8/site-packages/redis/retry.py", line 46, in call_with_retry
    return do()
  File "/home/ubuntu/Work/exp_flush/env/lib/python3.8/site-packages/redis/connection.py", line 615, in <lambda>
    lambda: self._connect(), lambda error: self.disconnect(error)
  File "/home/ubuntu/Work/exp_flush/env/lib/python3.8/site-packages/redis/connection.py", line 680, in _connect
    raise err
  File "/home/ubuntu/Work/exp_flush/env/lib/python3.8/site-packages/redis/connection.py", line 668, in _connect
    sock.connect(socket_address)
ConnectionRefusedError: [Errno 111] Connection refused

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/ubuntu/Work/exp_flush/env/lib/python3.8/site-packages/redis_benchmarks_specification/__runner__/runner.py", line 413, in process_self_contained_coordinator_stream
    r.flushall()
  File "/home/ubuntu/Work/exp_flush/env/lib/python3.8/site-packages/redis/commands/core.py", line 901, in flushall
    return self.execute_command("FLUSHALL", *args, **kwargs)
  File "/home/ubuntu/Work/exp_flush/env/lib/python3.8/site-packages/redis/client.py", line 1224, in execute_command
    conn = self.connection or pool.get_connection(command_name, **options)
  File "/home/ubuntu/Work/exp_flush/env/lib/python3.8/site-packages/redis/connection.py", line 1402, in get_connection
    connection.connect()
  File "/home/ubuntu/Work/exp_flush/env/lib/python3.8/site-packages/redis/connection.py", line 620, in connect
    raise ConnectionError(self._error_message(e))
redis.exceptions.ConnectionError: Error 111 connecting to localhost:6379. Connection refused.
------------------------------------------------------------
Traceback (most recent call last):
  File "/home/ubuntu/Work/exp_flush/env/bin/redis-benchmarks-spec-client-runner", line 8, in <module>
    sys.exit(main())
  File "/home/ubuntu/Work/exp_flush/env/lib/python3.8/site-packages/redis_benchmarks_specification/__runner__/runner.py", line 129, in main
    process_self_contained_coordinator_stream(
  File "/home/ubuntu/Work/exp_flush/env/lib/python3.8/site-packages/redis_benchmarks_specification/__runner__/runner.py", line 517, in process_self_contained_coordinator_stream
    full_result_path, dest_fpath
UnboundLocalError: local variable 'full_result_path' referenced before assignment

If applicable, add screenshots to help explain your problem.

Environment (please complete the following information):

  • OS: ubuntu 20.04
  • PyPi version package - latest default
  • Platfrom x86_64

api/gh/redis/redis should return 401 unauthorized and not 500 internal server error on bad auth requests

Sample trace:

root@ip-172-31-57-104:~# tail -n 20 -f /var/opt/redis-benchmarks-specification-api.log
  File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1499, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
  File "/usr/local/lib/python3.6/dist-packages/flask_httpauth.py", line 161, in decorated
    user = self.authenticate(auth, password)
  File "/usr/local/lib/python3.6/dist-packages/flask_httpauth.py", line 238, in authenticate
    return self.verify_password_callback(username, client_password)
  File "/usr/local/lib/python3.6/dist-packages/redis_benchmarks_specification/__api__/api.py", line 48, in verify_password
    auth_server_conn.ping()
  File "/usr/local/lib/python3.6/dist-packages/redis/client.py", line 1378, in ping
    return self.execute_command('PING')
  File "/usr/local/lib/python3.6/dist-packages/redis/client.py", line 901, in execute_command
    return self.parse_response(conn, command_name, **options)
  File "/usr/local/lib/python3.6/dist-packages/redis/client.py", line 915, in parse_response
    response = connection.read_response()
  File "/usr/local/lib/python3.6/dist-packages/redis/connection.py", line 739, in read_response
    response = self._parser.read_response()
  File "/usr/local/lib/python3.6/dist-packages/redis/connection.py", line 484, in read_response
    raise response
redis.exceptions.AuthenticationError: Authentication required
18.116.150.197 - - [17/Aug/2021 17:14:29] "POST /api/gh/redis/redis/commits HTTP/1.1" 500 -

Secondary indexed profile data is causing an Exception to happen and the profile flow to stop working

2022-11-16 15:51:09 WARNING Unable to use perf output collected with callgraph dwarf mode in pprof. Skipping artifacts generation.
2022-11-16 15:51:09 WARNING Check https://github.com/google/perf_data_converter/issues/40.
2022-11-16 15:51:09 ERROR One or more steps within Profiler perf:record for pid 8305 exited with ERROR!
2022-11-16 15:51:09 INFO There are a total of 10 artifacts
2022-11-16 15:51:09 INFO Uploading results to s3. s3 bucket name: redis.benchmarks.spec. s3 bucket path: redis/redis/profiles/memtier_benchmark-2keys-lua-eval-hset-expire/
2022-11-16 15:51:09 INFO -- uploading results to s3 -- 
2022-11-16 15:51:09 INFO -- Using default AWS credentials -- 
2022-11-16 15:51:10 INFO Uploading results to s3. s3 bucket name: redis.benchmarks.spec. s3 bucket path: redis/redis/profiles/memtier_benchmark-2keys-lua-eval-hset-expire/
2022-11-16 15:51:10 INFO -- uploading results to s3 -- 
2022-11-16 15:51:10 INFO -- Using default AWS credentials -- 
2022-11-16 15:51:10 INFO Uploading results to s3. s3 bucket name: redis.benchmarks.spec. s3 bucket path: redis/redis/profiles/memtier_benchmark-2keys-lua-eval-hset-expire/
2022-11-16 15:51:10 INFO -- uploading results to s3 -- 
2022-11-16 15:51:10 INFO -- Using default AWS credentials -- 
2022-11-16 15:51:10 INFO Uploading results to s3. s3 bucket name: redis.benchmarks.spec. s3 bucket path: redis/redis/profiles/memtier_benchmark-2keys-lua-eval-hset-expire/
2022-11-16 15:51:10 INFO -- uploading results to s3 -- 
2022-11-16 15:51:10 INFO -- Using default AWS credentials -- 
2022-11-16 15:51:10 INFO Uploading results to s3. s3 bucket name: redis.benchmarks.spec. s3 bucket path: redis/redis/profiles/memtier_benchmark-2keys-lua-eval-hset-expire/
2022-11-16 15:51:10 INFO -- uploading results to s3 -- 
2022-11-16 15:51:10 INFO -- Using default AWS credentials -- 
2022-11-16 15:51:11 INFO Uploading results to s3. s3 bucket name: redis.benchmarks.spec. s3 bucket path: redis/redis/profiles/memtier_benchmark-2keys-lua-eval-hset-expire/
2022-11-16 15:51:11 INFO -- uploading results to s3 -- 
2022-11-16 15:51:11 INFO -- Using default AWS credentials -- 
2022-11-16 15:51:11 INFO Uploading results to s3. s3 bucket name: redis.benchmarks.spec. s3 bucket path: redis/redis/profiles/memtier_benchmark-2keys-lua-eval-hset-expire/
2022-11-16 15:51:11 INFO -- uploading results to s3 -- 
2022-11-16 15:51:11 INFO -- Using default AWS credentials -- 
2022-11-16 15:51:11 INFO Uploading results to s3. s3 bucket name: redis.benchmarks.spec. s3 bucket path: redis/redis/profiles/memtier_benchmark-2keys-lua-eval-hset-expire/
2022-11-16 15:51:11 INFO -- uploading results to s3 -- 
2022-11-16 15:51:11 INFO -- Using default AWS credentials -- 
2022-11-16 15:51:11 INFO Uploading results to s3. s3 bucket name: redis.benchmarks.spec. s3 bucket path: redis/redis/profiles/memtier_benchmark-2keys-lua-eval-hset-expire/
2022-11-16 15:51:11 INFO -- uploading results to s3 -- 
2022-11-16 15:51:11 INFO -- Using default AWS credentials -- 
2022-11-16 15:51:12 INFO Uploading results to s3. s3 bucket name: redis.benchmarks.spec. s3 bucket path: redis/redis/profiles/memtier_benchmark-2keys-lua-eval-hset-expire/
2022-11-16 15:51:12 INFO -- uploading results to s3 -- 
2022-11-16 15:51:12 INFO -- Using default AWS credentials -- 
2022-11-16 15:51:13 INFO Printing profiler generated artifacts
2022-11-16 15:51:13 INFO Storing 347 lines of collapsed profile data in redis
2022-11-16 15:51:13 CRITICAL Some unexpected exception was caught during local work. Failing test....
2022-11-16 15:51:13 CRITICAL <class 'redis.exceptions.DataError'>
2022-11-16 15:51:13 CRITICAL Printing redis container log....
2022-11-16 15:51:13 CRITICAL Some unexpected exception was caught during local work on stream 1668613684346-0. Failing test....
2022-11-16 15:51:13 CRITICAL <class 'TypeError'>
2022-11-16 15:51:13 INFO Consuming from group runners-cg:redis/redis/commits-amd64-aws-m6i.8xlarge-profiler. Consumer id runners-cg:redis/redis/commits-amd64-aws-m6i.8xlarge-profiler-self-contained-proc#1
2022-11-16 15:51:13 INFO Consuming from group runners-cg:redis/redis/commits-amd64-aws-m6i.8xlarge-profiler. Consumer id runners-cg:redis/redis/commits-amd64-aws-m6i.8xlarge-profiler-self-contained-proc#1
2022-11-16 15:51:13 INFO Received work . Stream id 1668613726269-0.

builder: when stream is empty, the builder crashes given it does not block waiting for work

root@hpe10:~# redis-benchmarks-spec-builder 
2021-08-19 14:32:20 INFO Using package dir /usr/local/lib/python3.6/dist-packages/redis_benchmarks_specification/setups/builders for inner file paths
2021-08-19 14:32:20 INFO Using the following build specs folder /usr/local/lib/python3.6/dist-packages/redis_benchmarks_specification/setups/builders, containing 4 different specs.
2021-08-19 14:32:20 INFO Using redis available at: 34.194.187.44:12010 to read the event streams
2021-08-19 14:32:20 INFO checking build spec requirements
2021-08-19 14:32:20 INFO Build icc-2021.3.0-amd64-ubuntu18.04-default requirement: checking build image intel/oneapi-hpckit:2021.3-devel-ubuntu18.04 is available.
2021-08-19 14:32:20 INFO Build icc-2021.3.0-amd64-ubuntu18.04-default requirement: build image intel/oneapi-hpckit:2021.3-devel-ubuntu18.04 is not available locally. Fetching it from hub
2021-08-19 14:32:21 INFO Build gcc:8.5.0-amd64-debian-buster-default requirement: checking build image gcc:8.5.0-buster is available.
2021-08-19 14:32:21 INFO Build gcc:8.5.0-amd64-debian-buster-default requirement: build image gcc:8.5.0-buster is not available locally. Fetching it from hub
2021-08-19 14:32:23 INFO Build icc-2021.3.0-amd64-ubuntu18.04-monotonic-clock requirement: build image intel/oneapi-hpckit:2021.3-devel-ubuntu18.04 availability was already checked.
2021-08-19 14:32:23 INFO Build icc-2021.3.0-amd64-ubuntu18.04-libc requirement: build image intel/oneapi-hpckit:2021.3-devel-ubuntu18.04 availability was already checked.
2021-08-19 14:32:23 INFO Consumer group named builders-cg:redis/redis/commits already existed.
2021-08-19 14:32:23 INFO Entering blocking read waiting for work.
Traceback (most recent call last):
  File "/usr/local/bin/redis-benchmarks-spec-builder", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.6/dist-packages/redis_benchmarks_specification/__builder__/builder.py", line 119, in main
    builders_folder, conn, different_build_specs, previous_id
  File "/usr/local/lib/python3.6/dist-packages/redis_benchmarks_specification/__builder__/builder.py", line 154, in builder_process_stream
    if len(newTestInfo[0]) < 2 or len(newTestInfo[0][1]) < 1:
IndexError: list index out of range

[BUG]: Fail after memtier_benchmark-10Mkeys-load-hash-5-fields-with-1000B-values.yml

Describe the bug
Tests behavior is broken after run of test "memtier_benchmark-10Mkeys-load-hash-5-fields-with-1000B-values.yml":
1st run returns results, 2nd failed, 3rd run kills server (and returns strange 0 results for Ops/sec).

To Reproduce
Run server:

$ ./src/redis-server --port 6379 --dir ~/redis_server_logs --logfile fail.log  --dbfilename fail.rdb

In parallel run test "memtier_benchmark-10Mkeys-load-hash-5-fields-with-1000B-values.yml" twice, second run is failing + empty tmp* folder is appeared.

$ redis-benchmarks-spec-client-runner --db_server_host localhost --db_server_port 6379 --client_aggregated_results_folder ./test1 --test memtier_benchmark-10Mkeys-load-hash-5-fields-with-1000B-values.yml
...
# Results for memtier_benchmark-10Mkeys-load-hash-5-fields-with-1000B-values test-case on oss-standalone topology
|                 Metric JSON Path                 |Metric Value|
|--------------------------------------------------|-----------:|
|"ALL STATS".Totals."Ops/sec"                      |   92584.090|
|"ALL STATS".Totals."Latency"                      |       2.154|
|"ALL STATS".Totals."Misses/sec"                   |       0.000|
|"ALL STATS".Totals."Percentile Latencies"."p50.00"|       2.127|
# Results for entire test-suite
|                          Test Name                           |                 Metric JSON Path                 |Metric Value|
|--------------------------------------------------------------|--------------------------------------------------|-----------:|
|memtier_benchmark-10Mkeys-load-hash-5-fields-with-1000B-values|"ALL STATS".Totals."Ops/sec"                      |   92584.090|
|memtier_benchmark-10Mkeys-load-hash-5-fields-with-1000B-values|"ALL STATS".Totals."Latency"                      |       2.154|
|memtier_benchmark-10Mkeys-load-hash-5-fields-with-1000B-values|"ALL STATS".Totals."Misses/sec"                   |       0.000|
|memtier_benchmark-10Mkeys-load-hash-5-fields-with-1000B-values|"ALL STATS".Totals."Percentile Latencies"."p50.00"|       2.127
...

$ redis-benchmarks-spec-client-runner --db_server_host localhost --db_server_port 6379 --client_aggregated_results_folder ./test2 --test memtier_benchmark-10Mkeys-load-hash-5-fields-with-1000B-values.yml
...
2022-05-13 21:47:56 CRITICAL Some unexpected exception was caught during local work. Failing test....
2022-05-13 21:47:56 CRITICAL <class 'redis.exceptions.ResponseError'>
2022-05-13 21:47:56 INFO Tearing down setup
------------------------------------------------------------
Traceback (most recent call last):
  File "/home/ubuntu/Work/env3/lib/python3.8/site-packages/redis_benchmarks_specification/__runner__/runner.py", line 260, in process_self_contained_coordinator_stream
    r.ping()
  File "/home/ubuntu/Work/env3/lib/python3.8/site-packages/redis/commands/core.py", line 1134, in ping
    return self.execute_command("PING", **kwargs)
  File "/home/ubuntu/Work/env3/lib/python3.8/site-packages/redis/client.py", line 1227, in execute_command
    return conn.retry.call_with_retry(
  File "/home/ubuntu/Work/env3/lib/python3.8/site-packages/redis/retry.py", line 46, in call_with_retry
    return do()
  File "/home/ubuntu/Work/env3/lib/python3.8/site-packages/redis/client.py", line 1228, in <lambda>
    lambda: self._send_command_parse_response(
  File "/home/ubuntu/Work/env3/lib/python3.8/site-packages/redis/client.py", line 1204, in _send_command_parse_response
    return self.parse_response(conn, command_name, **options)
  File "/home/ubuntu/Work/env3/lib/python3.8/site-packages/redis/client.py", line 1243, in parse_response
    response = connection.read_response()
  File "/home/ubuntu/Work/env3/lib/python3.8/site-packages/redis/connection.py", line 842, in read_response
    raise response
redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error.
------------------------------------------------------------
Traceback (most recent call last):
  File "/home/ubuntu/Work/env3/bin/redis-benchmarks-spec-client-runner", line 8, in <module>
    sys.exit(main())
  File "/home/ubuntu/Work/env3/lib/python3.8/site-packages/redis_benchmarks_specification/__runner__/runner.py", line 129, in main
    process_self_contained_coordinator_stream(
  File "/home/ubuntu/Work/env3/lib/python3.8/site-packages/redis_benchmarks_specification/__runner__/runner.py", line 509, in process_self_contained_coordinator_stream
    local_benchmark_output_filename,
UnboundLocalError: local variable 'local_benchmark_output_filename' referenced before assignment

3rd run returns broken? results, but Kills server.

$ export exp=fail3 && redis-benchmarks-spec-client-runner --db_server_host localhost --db_server_port 6379 --client_aggregated_results_folder ./"$exp" --test memtier_benchmark-10Mkeys-load-ha
sh-5-fields-with-1000B-values.yml |& tee fail3.log
...
2022-05-13 21:51:20 INFO Storing an aggregated results CSV into /home/ubuntu/tmp90c87hic/oss-standalone-2022-05-13-21-49-53-NA-memtier_benchmark-10Mkeys-load-hash-5-fields-with-1000B-values.json

# Results for memtier_benchmark-10Mkeys-load-hash-5-fields-with-1000B-values test-case on oss-standalone topology
|                 Metric JSON Path                 |Metric Value|
|--------------------------------------------------|-----------:|
|"ALL STATS".Totals."Ops/sec"                      |       0.000|
|"ALL STATS".Totals."Latency"                      |       2.266|
|"ALL STATS".Totals."Misses/sec"                   |       0.000|
|"ALL STATS".Totals."Percentile Latencies"."p50.00"|       2.175|
# Results for entire test-suite
|                          Test Name                           |                 Metric JSON Path                 |Metric Value|
|--------------------------------------------------------------|--------------------------------------------------|-----------:|
|memtier_benchmark-10Mkeys-load-hash-5-fields-with-1000B-values|"ALL STATS".Totals."Ops/sec"                      |       0.000|
|memtier_benchmark-10Mkeys-load-hash-5-fields-with-1000B-values|"ALL STATS".Totals."Latency"                      |       2.266|
|memtier_benchmark-10Mkeys-load-hash-5-fields-with-1000B-values|"ALL STATS".Totals."Misses/sec"                   |       0.000|
|memtier_benchmark-10Mkeys-load-hash-5-fields-with-1000B-values|"ALL STATS".Totals."Percentile Latencies"."p50.00"|       2.175| 

AND

$ ./src/redis-server --port 6379 --dir ~/redis_server_logs --logfile fail.log  --dbfilename fail.rdb
Killed

Environment (please complete the following information):

  • OS: ubuntu 20.04
  • PyPi version package - latest
  • Host: AWS instance - m6i.4xlarge

exported datasink results are not being broken by build variants

Right now we have mixed results for each build variant on the same time-series given we're not breaking by it.
Example (containing 1 GCC + 3 ICC numbers ) :
PS: numbers might be off and we might need to check why,etc...

benchmarks.redislabs.com:12011> ts.range  "ci.benchmarks.redislabs/by.branch/ci/redis/redis/redis-benchmark-full-suite-1Mkeys-100B/oss-standalone/benchmarks.api/rps/ZPOPMIN" - + 
1) 1) (integer) 1629306470835
   2) 132978.73
2) 1) (integer) 1629306526350
   2) 99800.4
3) 1) (integer) 1629306581569
   2) 200000
4) 1) (integer) 1629306632933
   2) 200000

[SPEC]: Benchmark client session in RESP3 protocol mode

  • redis-benchmark supports it: via -3 parameter
  • memtier_benchmark link to github issue: via --resp parameter

The goal is that anyone using our client runner will be able to pass:
redis-benchmarks-spec-client-runner --resp 3 .... and run the tests he wants.

redis-benchmarks-spec builder 0.1.10 keeps pulling docker when all images are local

2021-08-23 18:18:36 INFO redis-benchmarks-spec builder 0.1.10
2021-08-23 18:18:36 INFO Using package dir /usr/local/lib/python3.6/dist-packages/redis_benchmarks_specification/setups/builders for inner file paths
2021-08-23 18:18:36 INFO Using the following build specs folder /usr/local/lib/python3.6/dist-packages/redis_benchmarks_specification/setups/builders, containing 4 different specs.
2021-08-23 18:18:36 INFO Using redis available at: benchmarks.redislabs.com:12010 to read the event streams
2021-08-23 18:18:36 INFO checking build spec requirements
2021-08-23 18:18:36 INFO Build gcc:8.5.0-amd64-debian-buster-default requirement: checking build image gcc:8.5.0-buster is available.
2021-08-23 18:18:36 INFO Build gcc:8.5.0-amd64-debian-buster-default requirement: build image gcc:8.5.0-buster is not available locally. Fetching it from hub
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/docker/api/client.py", line 268, in _raise_for_status
    response.raise_for_status()
  File "/usr/local/lib/python3.6/dist-packages/requests/models.py", line 953, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 500 Server Error: Internal Server Error for url: http+docker://localhost/v1.40/images/create?tag=8.5.0-buster&fromImage=gcc

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/redis-benchmarks-spec-builder", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.6/dist-packages/redis_benchmarks_specification/__builder__/builder.py", line 122, in main
    build_spec_image_prefetch(builders_folder, different_build_specs)
  File "/usr/local/lib/python3.6/dist-packages/redis_benchmarks_specification/__builder__/builder.py", line 340, in build_spec_image_prefetch
    client.images.pull(build_image)
  File "/usr/local/lib/python3.6/dist-packages/docker/models/images.py", line 447, in pull
    repository, tag=tag, stream=True, all_tags=all_tags, **kwargs
  File "/usr/local/lib/python3.6/dist-packages/docker/api/image.py", line 430, in pull
    self._raise_for_status(response)
  File "/usr/local/lib/python3.6/dist-packages/docker/api/client.py", line 270, in _raise_for_status
    raise create_api_error_from_http_exception(e)
  File "/usr/local/lib/python3.6/dist-packages/docker/errors.py", line 31, in create_api_error_from_http_exception
    raise cls(e, response=response, explanation=explanation)
docker.errors.APIError: 500 Server Error for http+docker://localhost/v1.40/images/create?tag=8.5.0-buster&fromImage=gcc: Internal Server Error ("toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit")
root@ip-172-31-55-114:~# docker images
REPOSITORY            TAG                        IMAGE ID            CREATED             SIZE
gcc                   8.5.0-buster               543628eb298f        5 days ago          1.12GB
intel/oneapi-hpckit   2021.3-devel-ubuntu18.04   68ffdbe86df4        7 weeks ago         22.7GB

XACK check is using strings as opposed to integer on reply checking

Sample error log (that should have been ok ) :

2021-08-19 15:34:30 INFO sucessfully built build variant icc-2021.3.0-amd64-ubuntu18.04-libc for redis git_sha b'0cf2df84d4b27af4bffd2bf3543838f09e10f874'. Stream id: b'1629387270750-0'
2021-08-19 15:34:30 ERROR Unable to acknowledge build variation stream with id b'1629386915152-0'. XACK reply 1
2021-08-19 15:34:30 INFO Entering blocking read waiting for work.

pip3 install redis-benchmarks-specification leads to No module named 'setuptools_rust'

  Downloading https://files.pythonhosted.org/packages/9b/77/461087a514d2e8ece1c975d8216bc03f7048e6090c5166bc34115afdaa53/cryptography-3.4.7.tar.gz (546kB)
    100% |████████████████████████████████| 552kB 3.1MB/s 
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-afws98zx/cryptography/setup.py", line 14, in <module>
        from setuptools_rust import RustExtension
    ModuleNotFoundError: No module named 'setuptools_rust'
    
            =============================DEBUG ASSISTANCE==========================
            If you are seeing an error here please try the following to
            successfully install cryptography:
    
            Upgrade to the latest pip and try again. This will fix errors for most
            users. See: https://pip.pypa.io/en/stable/installing/#upgrading-pip
            =============================DEBUG ASSISTANCE==========================

[SPEC]: To better utilize bare-metal systems - ability to use both CPU sockets

Improvement/Addition type
Currently we only run 1 test at a time on the bare-metal system.
The benefit is that we have no "noisy neightbor" problem and thus we get very consistent results.
The downside, is that the system utilization is poor - using only a few cores from a system with many cores and 2 sockets.

The "noisy neighbor" problem should be minimal, if we run another concurrent test on the other CPU socket.

[SPEC]: self_contained_coordinator remembers last commit processed and is able to continue from where it left off.

Currently, if the self-contained-coordinator needs to be restarted, it looses track of what work was completed testing needs to be re-triggered. Re-triggering the testing, creates more work for self-contained-coordinators on other nodes as well.

An improvement would be:
Once a self-contained-coordinator is registered, it remembers the last commit executed in a temp file. When the container is restarted due to bug fixes or new features, etc. it has to option to continue from where it left off, instead of forcing everyone to restart work.

Allow for merge-base commit comparison on PR tagged events

Right now we have 3 ways of triggering benchmarks:
-1 Pushes to repo
-2 Labeled PRs on repo ( fetchs fork code )
-3 historical data via cli

On option 2 we want to be able to compare vs merge-base commit.
Portion of event:

{
    "ref": "refs/heads/unstable.55555",
    "before": "572abee6f17753fe2af59aeb7c3dd42baee66e1b",
    "after": "921489d5392a13e10493c6578a27b4bd5324a929",
(...)

and to potentially also to a list of branch/version tags.

Add per test_name sets for visualization: `arch`, `os`, `branch`, `deployment_type`

current timeseries metadata

15) labels
16)  1) 1) "github_org"
        2) "redis"
     2) 1) "github_repo"
        2) "redis"
     3) 1) "github_org/github_repo"
        2) "redis/redis"
     4) 1) "deployment_type"
        2) "oss-standalone"
     5) 1) "triggering_env"
        2) "ci"
     6) 1) "build_variant"
        2) "gcc:8.5.0-amd64-debian-buster-default"
     7) 1) "running_platform"
        2) "bicx02"
     8) 1) "compiler"
        2) "gcc"
     9) 1) "compiler_version"
        2) "8.5.0"
    10) 1) "os"
        2) "debian-buster"
    11) 1) "arch"
        2) "amd64"
    12) 1) "branch"
        2) "benchmarks.api"
    13) 1) "test_name"
        2) "redis-benchmark-full-suite-1Mkeys-100B"
    14) 1) "metric"
        2) "p95_latency_ms"
    15) 1) "metric_name"
        2) "p95_latency_ms"
    16) 1) "metric_context_path"
        2) "SET"
    17) 1) "metric_jsonpath"
        2) "Tests.*.p95_latency_ms"

[BUG]: __self_contained_coordinator__ error in process_self_contained_coordinator_stream

Describe the bug

2022-02-16 12:03:45 INFO Received work . Stream id 1645013025165-0.
2022-02-16 12:03:45 INFO Received commit hash specifier d5915a167f696644e210ee85e549c7ceb41b5791.
Traceback (most recent call last):
  File "/usr/local/bin/redis-benchmarks-spec-sc-coordinator", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.6/dist-packages/redis_benchmarks_specification/__self_contained_coordinator__/self_contained_coordinator.py", line 178, in main
    running_platform,
  File "/usr/local/lib/python3.6/dist-packages/redis_benchmarks_specification/__self_contained_coordinator__/self_contained_coordinator.py", line 250, in self_contained_coordinator_blocking_read
    platform_name,
  File "/usr/local/lib/python3.6/dist-packages/redis_benchmarks_specification/__self_contained_coordinator__/self_contained_coordinator.py", line 340, in process_self_contained_coordinator_stream
    None, stream, ""
ValueError: too many values to unpack (expected 2)

issue on dockerhub rate limiting due to unecessary image fetch

docker.errors.APIError: 500 Server Error for http+docker://localhost/v1.40/images/create?tag=8.5.0-buster&fromImage=gcc: Internal Server Error ("toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit")

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.