monotonic: x86 linux, kernel clocksource is unknown, not using TSCUsage: valkey-benchmark [OPTIONS] [--] [COMMAND ARGS...] Simulates sending commands using multiple clients. The utility provides a default set of tests. You can run a subset of the tests using the -t option or supply one or more custom commands on the command line. To supply multiple commands on the command line, separate them with ';' as in `SET foo bar ';' GET foo`. You can also prefix a command in the sequence with a number N to repeat the command N times. In command arguments, the following placeholders are substituted: __rand_int__ Replaced with a zero-padded random integer in the range selected using the -r option. Multiple occurrences within the command will have different values. __rand_1st__ Like __rand_int__ but multiple occurrences will have the same value. __rand_2nd__ through __rand_9th__ are also available. __data__ Replaced with data of the size specified by the -d option. {tag} Replaced with a tag that routes the command to each node in a cluster. Include this in key names when running in cluster mode. Options: -h Server hostname (default 127.0.0.1) -p Server port (default 6379) -s Server socket (overrides host and port) -a Password for Valkey Auth --user Used to send ACL style 'AUTH username pass'. Needs -a. -u Server URI on format valkey://user:password@host:port/dbnum User, password and dbnum are optional. For authentication without a username, use username 'default'. For TLS, use the scheme 'valkeys'. -c Number of parallel connections (default 50). Note: If --cluster is used then number of clients has to be the same or higher than the number of nodes. -n Total number of requests (default 100000) --duration Run benchmark for specified number of seconds (mutually exclusive with -n) --warmup Run benchmark for specified warmup period before recording data -d Data size of SET/GET value in bytes (default 3) --dbnum SELECT the specified db number (default 0) -3 Start session in RESP3 protocol mode. --threads Enable multi-thread mode. --cluster Enable cluster mode. If the command is supplied on the command line in cluster mode, the key must contain "{tag}". Otherwise, the command will not be sent to the right cluster node. --rfr Enable read from replicas in cluster mode. This command must be used with the --cluster option. There are three modes for reading from replicas: 'no' - sends read requests to primaries only (default) 'yes' - sends read requests to replicas only. 'all' - sends read requests to all nodes. Since write commands will not be accepted by replicas, it is recommended to enable read from replicas only for read command tests. --enable-tracking Send CLIENT TRACKING on before starting benchmark. -k 1=keep alive 0=reconnect (default 1) -r Use random keys for SET/GET/INCR, random values for SADD, random members and scores for ZADD. Using this option the benchmark will replace the string __rand_int__ inside an argument with a random 12 digit number in the specified range from 0 to keyspacelen-1. The substitution changes every time a command is executed. Default tests use this to hit random keys in the specified range. Note: If -r is omitted, all commands in a benchmark will use the same key. --sequential Modifies the -r argument to replace the string __rand_int__ with 12 digit numbers sequentially instead of randomly. __rand_1st__ through __rand_9th__ are available with independent counters. Used to create expected number of elements with multiple replacements. example: ZADD myzset __rand_int__ element:__rand_1st__ -P Pipeline requests. That is, send multiple requests before waiting for the replies. Default 1 (no pipeline). When multiple commands are specified on the command line, then the full command sequence counts as one and -P controls the number of times the command sequence is sent in each pipeline. -q Quiet. Just show query/sec values --precision Number of decimal places to display in latency output (default 0) --csv Output in CSV format -l Loop. Run the tests forever -t Only run the comma separated list of tests. The test names are the same as the ones produced as output. The -t option is ignored if a specific command is supplied on the command line. -I Idle mode. Just open N idle connections and wait. -x Read last argument from STDIN. --rps Limit the total number of requests per second. Default 0 (no limit) --seed Set the seed for random number generator. Default seed is based on time. --num-functions Sets the number of functions present in the Lua lib that is loaded when running the 'function_load' test. (default 10). --num-keys-in-fcall Sets the number of keys passed to FCALL command when running the 'fcall' test. (default 1) --tls Establish a secure TLS connection. --sni Server name indication for TLS. --cacert CA Certificate file to verify with. --cacertdir Directory where trusted CA certificates are stored. If neither cacert nor cacertdir are specified, the default system-wide trusted root certs configuration will apply. --insecure Allow insecure TLS connection by skipping cert validation. --cert Client certificate to authenticate with. --key Private key file to authenticate with. --tls-ciphers Sets the list of preferred ciphers (TLSv1.2 and below) in order of preference from highest to lowest separated by colon (":"). See the ciphers(1ssl) manpage for more information about the syntax of this string. --tls-ciphersuites Sets the list of preferred ciphersuites (TLSv1.3) in order of preference from highest to lowest separated by colon (":"). See the ciphers(1ssl) manpage for more information about the syntax of this string, and specifically for TLSv1.3 ciphersuites. --mptcp Enable an MPTCP connection. --fuzz Enable fuzzy mode to generate random commands. WARNING: Recommended for testing only, not for use with production data. --fuzz-mode Set fuzzing modes (comma-separated): malformed-commands, config-commands. malformed-commands: Generates also malformed commands. config-commands: Allows CONFIG SET commands. Default: valid commands only. --fuzz-loglevel Set log level for fuzzer (none, error, info, debug). Default is 'info'. --help Output this help and exit. --version Output version and exit. Examples: Run the benchmark with the default configuration against 127.0.0.1:6379: $ valkey-benchmark Use 20 parallel clients, for a total of 100k requests, against 192.168.1.1: $ valkey-benchmark -h 192.168.1.1 -p 6379 -n 100000 -c 20 Fill 127.0.0.1:6379 with about 1 million keys only using the SET test: $ valkey-benchmark -t set -n 1000000 -r 100000000 Benchmark 127.0.0.1:6379 for a few commands producing CSV output: $ valkey-benchmark -t ping,set,get -n 100000 --csv Benchmark a specific command line: $ valkey-benchmark -r 10000 -n 10000 eval 'return server.call("ping")' 0 Fill a list with 10000 random elements: $ valkey-benchmark -r 10000 -n 10000 lpush mylist __rand_int__ Benchmark a specific transaction: $ valkey-benchmark -- multi ';' set key:__rand_int__ __data__ ';' \ incr counter ';' exec