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.
Project description
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.: providing steady-stable infrastructure platform to run the benchmark suite. Supporting the active development of this project within the company.
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)
-
[SOON] Finding on-cpu, off-cpu, io, and threading performance problems by attaching profiling tools/probers ( perf (a.k.a. perf_events), bpf tooling, vtune )
-
[SOON] Finding performance problems by attaching telemetry probes
Current supported benchmark tools:
- redis-benchmark
- [SOON]memtier_benchmark
- [SOON]redis-benchmark-go
Architecture diagram
┌──────────────────────────────────────┐
│1) gh.com/redis/redis update │
│ - git_repo: github.com/redis/redis │
│ - git_hash: 459c3a │
│ - git_branch: unstable │
└─────────────────┬────────────────────┘
│
│ ┌───────────────────────────────────┐
│ │HTTP POST │
└──────┤<domain>/api/gh/redis/redis/commit │──┐
└───────────────────────────────────┘ │
│
▼
┌──────────────────────────────────────────┐
│2) api │
│ - Converts the HTTP info into an stream │
│entry │
│ - XADD stream:redis:redis:commit <...> │
│ │
└─────────────────────┬────────────────────┘
│
│
│
│ ┌────┐
.─────────────────────────────────────. │ │push│
┌─────┐ ┌ ▶( 2.1 ) stream of build events )◀───┘ └────┘
│pull │ `─────────────────────────────────────'
└─────┘ │
│ ┌────────────────────────────────────────────┐
─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─│2.2) build_agent │
│ - based on setup platforms │
│ - build different required redis │
│artifacts │
└───────────────────────┬────────────────────┘
│
│
│ ┌────┐
.─────────────────────────────────────. │ │push│
┌─────┐ ─▶( 2.3 ) stream of artifact benchmarks )◀────┘ └────┘
│pull ││ `─────────────────────────────────────'
└─────┘
│
┌────────────────────────────────────────────┐
│ │ │
│3) benchmark_coordinator │
│ │ - based on test-suites and setups: │
│ - Trigger env setup │
└ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─│ - 3.1 ) Trigger topology setup │
│ - 3.2 ) Run benchmarks │
│ - Record results into datasinks │
│ │
└────────────────────────────────────────────┘
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.
Contributing guidelines
Adding new test suites
TBD
Adding new topologies
TBD
Adding new test platforms
TBD
License
redis-benchmark-specifications is distributed under the Apache 2 license - see LICENSE
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for redis-benchmarks-specification-0.1.8.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2c455040145e2fe497e19778526c6df55165f5e90a57ea9ed00be8e729734980 |
|
MD5 | e54c5bc8e52f9f655a6bcf0e2446a161 |
|
BLAKE2b-256 | 0205eeb01b3d4530ec9ef06d77b9c64130dfe75ee7c56d84831dc66258ea0456 |
Hashes for redis_benchmarks_specification-0.1.8-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5c0cab047546b7416309525b6c26279a2420f918b74c0b11f5d2d198b544d62b |
|
MD5 | a3eb97bb7aef2401b5d89ec62ececb63 |
|
BLAKE2b-256 | 6dfb64e704ac46ee6f440ba1b445a9dc03864c858acc2514a1d60cae92a3b73d |