etcd-io / etcd-io/etcd

feature(etcdctl): support customized configuration for `check perf` command

Open
#21,724 7 comments 0 reactions 0 assignees View on GitHub
type/feature
Dominant language
Go
Stars
52.3k
Forks
10.5k
Avg merge
2d 21h
Merged PRs (30d)
43

Description

### What would you like to be added?

The `etcdctl check perf` command relies on a hardcoded map of configurations (`checkPerfCfgMap` in `etcdctl/ctlv3/command/check.go`) that restricts users to predefined workload profiles: `s`, `m`, `l`, `xl`.
There is an existing TODO comment in the codebase (`// TODO: support customized configuration`). I propose enhancing this command by adding new flags (e.g., `--clients`, `--limit` or `--qps`, and `--duration`) that allow users to override the predefined profile variables.

### Why is this needed?

Different workloads impose quite different loads on etcd: simply setting a fixed client concurrency (for example, m with 200 clients and 1000 concurrency) does not allow a replication of typical production workloads. Allowing a way to specify both concurrency of clients and limits on their throughput would make check perf a much more useful tool for determining the capacity of a given configuration, tuning it or stress-testing the system, without requiring the use of external generic tools for this. Let’s do this as the first issue to address.

Contributor guide

Open the contributing guide

Research direction

Start in etcdctl/ctlv3/command/check.go, especially checkPerfCfgMap and its TODO about customized configuration. Trace how the s, m, l, and xl profiles provide client concurrency and workload limits, then determine how the proposed clients, limit or qps, and duration flags should override them. Done means check perf can run a user-specified workload without requiring an external tool.

Written by the indexing model from the issue text.

Assessment

Tech stack
go
Domain
cli, distributed-systems
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.