-
Notifications
You must be signed in to change notification settings - Fork 233
RedisGraph benchmark automation #1557
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
Is it possible to run the benchmarks locally? |
|
@filipecosta90 shouldn't this infrastructure reside in its own repository and we'll fetch it with |
Not yet, but yes, we need it working as expected prior merging the PR. Working on the remote and as soon all ok in remote will work on the local logic.
We can have infrastructure reside on https://github.com/RedisLabsModules/testing-infrastructure . After we have all working here will move the terraform parts to there :) |
cd98967 to
5572a2e
Compare
ba165cf to
bbf5b04
Compare
|
…HMARH=<benchmark name>. Updated benchmark template
@swilly22 updated the PR based on our discussion. |
* Added local and remote benchmark definition and automation * [fix] Fixes per PR review. Added option to specify benchmark via BENCHMARH=<benchmark name>. Updated benchmark template Co-authored-by: filipecosta90 <filipecosta.90@gmail.com> (cherry picked from commit f6f1ab2)
* RedisGraph benchmark automation (#1557) * Added local and remote benchmark definition and automation * [fix] Fixes per PR review. Added option to specify benchmark via BENCHMARH=<benchmark name>. Updated benchmark template Co-authored-by: filipecosta90 <filipecosta.90@gmail.com> (cherry picked from commit f6f1ab2) * Updated benchmark UPDATE-BASELINE to be less restrictive in the latency KPI (#1577) Given we're still experimenting with the benchmarks CI KPI validation, this PR increases the `OverallClientLatencies.Total.q50` to be lower than 2.0 ( before was 1.5 ) so that we can collect further data and adjust afterwards... (cherry picked from commit 611a0f0) * * log redisgraph version (#1567) When pulling container image tagged as `latest` or `edge` I sometimes don't know which version I'm running, and it would be much faster to find out if the information was displayed at startup. This patch logs this information. Co-authored-by: Roi Lipman <swilly22@users.noreply.github.com> (cherry picked from commit fe2e7ce) * [add] Triggering nightly CI benchmarks; Early return on CI benchmarks for forked PRs (#1579) (cherry picked from commit a529c1e) * use PRIu64 to format uint64_t (#1581) (cherry picked from commit c0e00d5) * [fix] Fixed missing github_actor on ci nightly benchmark automation (#1583) (cherry picked from commit 8abad84) * Fix idx assertion (#1580) * Fix flawed assertion in index deletion logic * Reduce KPI for updates_baseline benchmark * Address PR comments * Address PR comments Co-authored-by: Roi Lipman <swilly22@users.noreply.github.com> (cherry picked from commit 6bad20a) * Always report run-time errors as the sole reply (#1590) * Always report run-time errors as the sole reply * Update test_timeout.py Co-authored-by: Roi Lipman <swilly22@users.noreply.github.com> (cherry picked from commit c9ba776) * remove wrong assertion (#1591) (cherry picked from commit 12ef8ac) * Report 0 indices created on duplicate index creation (#1592) (cherry picked from commit e00f2c8) * Multi-platform build (#1587) Multi-platform build (cherry picked from commit 26ace7a) * Multi-platform build, take 2 (#1598) (cherry picked from commit acde693) * Moved common benchmark automation code to redisbench-admin package. Improved benchmark specification file (#1597) (cherry picked from commit ebea927) * Added readies submodule (#1600) * Added readies submodule * fixes 1 (cherry picked from commit efbfeaf) * Dockerfle: fixed artifacts copy (#1601) (cherry picked from commit f722f2d) * CircleCI: fixed version release (#1602) (cherry picked from commit 9f218d6) * CircleCI: release-related fix (#1604) (cherry picked from commit 15cf291) * remove redundent include (#1606) (cherry picked from commit 7ea1c43) * Threaded bulk insert (#1596) * Update the bulk updater to execute on a thread * Bulk loader endpoint locks for minimal time * TODOs * Use a separate thread pool for bulk operations * Update test_thread_pools.cpp * refactor bulk-insert * Fix PR problems * count number of pings during bulk-insert, only create graph context on BEGIN token Co-authored-by: swilly22 <roi@redislabs.com> Co-authored-by: Roi Lipman <swilly22@users.noreply.github.com> (cherry picked from commit 2d43f9d) * Use system gcc in Ubuntu 16 (#1615) (cherry picked from commit 0c10130) * wrongly assumed add op had only 2 operands (#1618) (cherry picked from commit 6b06095) * Updated benchmark requirements version (#1616) * Updated benchmark requirements version * Update requirements.txt (cherry picked from commit db080d4) * Runtime timeouts (#1610) * Add run-time configuration for default query timeouts * Timeout for write queries that haven't committed changes * define TIMEOUT_NO_TIMEOUT * Refactor timeout logic * Address PR comments * Do not use timeouts for write queries Co-authored-by: swilly22 <roi@redislabs.com> Co-authored-by: Roi Lipman <swilly22@users.noreply.github.com> (cherry picked from commit 964b268) * Fix typo in assertion * bump version to 2.2.16 Co-authored-by: Roi Lipman <swilly22@users.noreply.github.com> Co-authored-by: filipe oliveira <filipecosta.90@gmail.com> Co-authored-by: bc² <odanoburu@users.noreply.github.com> Co-authored-by: Rafi Einstein <raffapen@outlook.com>
* Added local and remote benchmark definition and automation * [fix] Fixes per PR review. Added option to specify benchmark via BENCHMARH=<benchmark name>. Updated benchmark template Co-authored-by: filipecosta90 <filipecosta.90@gmail.com>
Goals
The RedisGraph automated benchmark definitions provide a framework for evaluating and comparing feature branches and catching regressions prior letting them into the master branch.
Benchmark definition
Each benchmark requires a benchmark definition yaml file to present on the current directory.
A benchmark definition will then consist of:
optional db configuration (
dbconfig) with the proper dataset definition. If no db config is passed then no dataset is loaded during the system setup.mandatory client configuration (
clientconfig) specifing the parameters to pass to theredisgraph-benchmark-gotool.mandatory queries definition (
queries) specifying which queries, and at what ratio the benchmark should issue.optional ci/remote definition (
ci), with the proper terraform deployment configurations definition.optional KPIs definition (
kpis), specifying the target upper or lower bounds for each relevant performance metric. If specified the KPIs definitions constraints the tests passing/failing.optional metric exporters definition (
exporter: currently onlyredistimeseries), specifying which metrics to parse after each benchmark run and push to remote stores.Sample benchmark definition:
Running benchmarks
The benchmark automation currently allows running benchmarks in various environments:
completely locally, if the framework is supported on the local system.
on AWS, distributing the tasks to multiple EC2 instances as defined on each benchmark specification. To run a benchmark on AWS you additionally need to have a configured AWS account. The application is using the boto3 Python package to exchange files through S3 and create EC2 instances. Triggering of this type of benchmarks can be done from a local machine or via CI on each push to the repo. The results visualization utilities and credentials should have been provide to each team member.
Run benchmarks locally
To run a benchmark locally call the
local-runner.pyfrom within the benchmarks folder, or use the benchmark Makefile rule from within the project root folder.make benchmark-local.Some considerations:
redisgraph.somodule within src folder.<start time>-<git branch>-<test name>.jsonFor the complete list of supported local arguments, run:
python3 local-runner.py --help
Run benchmarks remotely on steady stable VMs with sustained performance
To run a benchmark remotely call the
remote-runner.py.Some considerations:
AWS_ACCESS_KEY_ID,AWS_DEFAULT_REGION,AWS_SECRET_ACCESS_KEYvariables set.EC2_PRIVATE_PEMenvironment variable../remote/install_deps.shyou find automation to easily install terraform on linux systems.ci.benchmarks.redislabsS3 bucket. The pushed results will have a public read ACL.PERFORMANCE_RTS_AUTH,PERFORMANCE_RTS_HOST,PERFORMANCE_RTS_PORT) or to pass the corresponding arguments.redisgraph.somodule within src folder.a standalone redis-server, copy the dataset and module files to the DB VM and make usage of redisgraph-benchmark-go to run the query variations.
<start time>-<deployment type>-<git org>-<git repo>-<git branch>-<test name>-<git sha>.jsonFor the complete list of supported remote run arguments, run:
python3 remote-runner.py --help
Locally comparing two distinct runs
TBD