[redis-benchmark] Adding --seed option to seed the RNG (#11945)

Adds ability to set the random seed so that more consistent repeatable benchmarks are possible.

Example usage:

Adding 2 hash items
```
src/redis-benchmark -r 100 -n 2 --seed 250 hset myhash:__rand_int__ age __rand_int__
```

Monitor:

1st benchmark invocation:
```
1679332814.824357 [0 127.0.0.1:36686] "hset" "myhash:000000000022" "age" "000000000069"
1679332814.824404 [0 127.0.0.1:36690] "hset" "myhash:000000000007" "age" "000000000043"
```

2nd benchmark invocation:
```
1679332814.824357 [0 127.0.0.1:36686] "hset" "myhash:000000000022" "age" "000000000069"
1679332814.824404 [0 127.0.0.1:36690] "hset" "myhash:000000000007" "age" "000000000043"
```
This commit is contained in:
Hassaan Khan 2023-05-02 09:20:38 -04:00 committed by GitHub
parent f32d1817e3
commit 8163e816fe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1496,6 +1496,11 @@ int parseOptions(int argc, char **argv) {
fprintf(stderr,
"WARNING: -e option has no effect. "
"We now immediately exit on error to avoid false results.\n");
} else if (!strcmp(argv[i],"--seed")) {
if (lastarg) goto invalid;
int rand_seed = atoi(argv[++i]);
srandom(rand_seed);
init_genrand64(rand_seed);
} else if (!strcmp(argv[i],"-t")) {
if (lastarg) goto invalid;
/* We get the list of tests to run as a string in the form
@ -1641,7 +1646,8 @@ usage:
" The -t option is ignored if a specific command is supplied\n"
" on the command line.\n"
" -I Idle mode. Just open N idle connections and wait.\n"
" -x Read last argument from STDIN.\n",
" -x Read last argument from STDIN.\n"
" --seed <num> Set the seed for random number generator. Default seed is based on time.\n",
tls_usage,
" --help Output this help and exit.\n"
" --version Output version and exit.\n\n"