Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
33d00ff7
Commit
33d00ff7
authored
May 31, 2011
by
Pieter Noordhuis
Browse files
Provide custom command to benchmark against via args
parent
c60a0f58
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/redis-benchmark.c
View file @
33d00ff7
...
@@ -328,41 +328,44 @@ static void benchmark(const char *title, const char *cmd, int len) {
...
@@ -328,41 +328,44 @@ static void benchmark(const char *title, const char *cmd, int len) {
freeAllClients
();
freeAllClients
();
}
}
void
parseOptions
(
int
argc
,
const
char
**
argv
)
{
/* Returns number of consumed options. */
int
parseOptions
(
int
argc
,
const
char
**
argv
)
{
int
i
;
int
i
;
int
lastarg
;
int
exit_status
=
1
;
for
(
i
=
1
;
i
<
argc
;
i
++
)
{
for
(
i
=
1
;
i
<
argc
;
i
++
)
{
int
lastarg
=
i
==
argc
-
1
;
lastarg
=
(
i
==
(
argc
-
1
))
;
if
(
!
strcmp
(
argv
[
i
],
"-c"
)
&&
!
lastarg
)
{
if
(
!
strcmp
(
argv
[
i
],
"-c"
))
{
config
.
numclients
=
atoi
(
argv
[
i
+
1
])
;
if
(
lastarg
)
goto
invalid
;
i
++
;
config
.
numclients
=
atoi
(
argv
[
++
i
])
;
}
else
if
(
!
strcmp
(
argv
[
i
],
"-n"
)
&&
!
lastarg
)
{
}
else
if
(
!
strcmp
(
argv
[
i
],
"-n"
))
{
config
.
requests
=
atoi
(
argv
[
i
+
1
])
;
if
(
lastarg
)
goto
invalid
;
i
++
;
config
.
requests
=
atoi
(
argv
[
++
i
])
;
}
else
if
(
!
strcmp
(
argv
[
i
],
"-k"
)
&&
!
lastarg
)
{
}
else
if
(
!
strcmp
(
argv
[
i
],
"-k"
))
{
config
.
keepalive
=
atoi
(
argv
[
i
+
1
])
;
if
(
lastarg
)
goto
invalid
;
i
++
;
config
.
keepalive
=
atoi
(
argv
[
++
i
])
;
}
else
if
(
!
strcmp
(
argv
[
i
],
"-h"
)
&&
!
lastarg
)
{
}
else
if
(
!
strcmp
(
argv
[
i
],
"-h"
))
{
config
.
hostip
=
strdup
(
argv
[
i
+
1
])
;
if
(
lastarg
)
goto
invalid
;
i
++
;
config
.
hostip
=
strdup
(
argv
[
++
i
])
;
}
else
if
(
!
strcmp
(
argv
[
i
],
"-p"
)
&&
!
lastarg
)
{
}
else
if
(
!
strcmp
(
argv
[
i
],
"-p"
))
{
config
.
hostport
=
atoi
(
argv
[
i
+
1
])
;
if
(
lastarg
)
goto
invalid
;
i
++
;
config
.
hostport
=
atoi
(
argv
[
++
i
])
;
}
else
if
(
!
strcmp
(
argv
[
i
],
"-s"
)
&&
!
lastarg
)
{
}
else
if
(
!
strcmp
(
argv
[
i
],
"-s"
))
{
config
.
hostsocket
=
strdup
(
argv
[
i
+
1
])
;
if
(
lastarg
)
goto
invalid
;
i
++
;
config
.
hostsocket
=
strdup
(
argv
[
++
i
])
;
}
else
if
(
!
strcmp
(
argv
[
i
],
"-d"
)
&&
!
lastarg
)
{
}
else
if
(
!
strcmp
(
argv
[
i
],
"-d"
))
{
config
.
datasize
=
atoi
(
argv
[
i
+
1
])
;
if
(
lastarg
)
goto
invalid
;
i
++
;
config
.
datasize
=
atoi
(
argv
[
++
i
])
;
if
(
config
.
datasize
<
1
)
config
.
datasize
=
1
;
if
(
config
.
datasize
<
1
)
config
.
datasize
=
1
;
if
(
config
.
datasize
>
1024
*
1024
)
config
.
datasize
=
1024
*
1024
;
if
(
config
.
datasize
>
1024
*
1024
)
config
.
datasize
=
1024
*
1024
;
}
else
if
(
!
strcmp
(
argv
[
i
],
"-r"
)
&&
!
lastarg
)
{
}
else
if
(
!
strcmp
(
argv
[
i
],
"-r"
))
{
if
(
lastarg
)
goto
invalid
;
config
.
randomkeys
=
1
;
config
.
randomkeys
=
1
;
config
.
randomkeys_keyspacelen
=
atoi
(
argv
[
i
+
1
]);
config
.
randomkeys_keyspacelen
=
atoi
(
argv
[
++
i
]);
if
(
config
.
randomkeys_keyspacelen
<
0
)
if
(
config
.
randomkeys_keyspacelen
<
0
)
config
.
randomkeys_keyspacelen
=
0
;
config
.
randomkeys_keyspacelen
=
0
;
i
++
;
}
else
if
(
!
strcmp
(
argv
[
i
],
"-q"
))
{
}
else
if
(
!
strcmp
(
argv
[
i
],
"-q"
))
{
config
.
quiet
=
1
;
config
.
quiet
=
1
;
}
else
if
(
!
strcmp
(
argv
[
i
],
"-l"
))
{
}
else
if
(
!
strcmp
(
argv
[
i
],
"-l"
))
{
...
@@ -371,30 +374,44 @@ void parseOptions(int argc, const char **argv) {
...
@@ -371,30 +374,44 @@ void parseOptions(int argc, const char **argv) {
config
.
debug
=
1
;
config
.
debug
=
1
;
}
else
if
(
!
strcmp
(
argv
[
i
],
"-I"
))
{
}
else
if
(
!
strcmp
(
argv
[
i
],
"-I"
))
{
config
.
idlemode
=
1
;
config
.
idlemode
=
1
;
}
else
if
(
!
strcmp
(
argv
[
i
],
"--help"
))
{
exit_status
=
0
;
goto
usage
;
}
else
{
}
else
{
printf
(
"Wrong option '%s' or option argument missing
\n\n
"
,
argv
[
i
]);
/* Assume the user meant to provide an option when the arg starts
printf
(
"Usage: redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests]> [-k <boolean>]
\n\n
"
);
* with a dash. We're done otherwise and should use the remainder
printf
(
" -h <hostname> Server hostname (default 127.0.0.1)
\n
"
);
* as the command and arguments for running the benchmark. */
printf
(
" -p <port> Server port (default 6379)
\n
"
);
if
(
argv
[
i
][
0
]
==
'-'
)
goto
invalid
;
printf
(
" -s <socket> Server socket (overrides host and port)
\n
"
);
return
i
;
printf
(
" -c <clients> Number of parallel connections (default 50)
\n
"
);
printf
(
" -n <requests> Total number of requests (default 10000)
\n
"
);
printf
(
" -d <size> Data size of SET/GET value in bytes (default 2)
\n
"
);
printf
(
" -k <boolean> 1=keep alive 0=reconnect (default 1)
\n
"
);
printf
(
" -r <keyspacelen> Use random keys for SET/GET/INCR, random values for SADD
\n
"
);
printf
(
" Using this option the benchmark will get/set keys
\n
"
);
printf
(
" in the form mykey_rand000000012456 instead of constant
\n
"
);
printf
(
" keys, the <keyspacelen> argument determines the max
\n
"
);
printf
(
" number of values for the random number. For instance
\n
"
);
printf
(
" if set to 10 only rand000000000000 - rand000000000009
\n
"
);
printf
(
" range will be allowed.
\n
"
);
printf
(
" -q Quiet. Just show query/sec values
\n
"
);
printf
(
" -l Loop. Run the tests forever
\n
"
);
printf
(
" -I Idle mode. Just open N idle connections and wait.
\n
"
);
printf
(
" -D Debug mode. more verbose.
\n
"
);
exit
(
1
);
}
}
}
}
return
i
;
invalid:
printf
(
"Invalid option
\"
%s
\"
or option argument missing
\n\n
"
,
argv
[
i
]);
usage:
printf
(
"Usage: redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests]> [-k <boolean>]
\n\n
"
);
printf
(
" -h <hostname> Server hostname (default 127.0.0.1)
\n
"
);
printf
(
" -p <port> Server port (default 6379)
\n
"
);
printf
(
" -s <socket> Server socket (overrides host and port)
\n
"
);
printf
(
" -c <clients> Number of parallel connections (default 50)
\n
"
);
printf
(
" -n <requests> Total number of requests (default 10000)
\n
"
);
printf
(
" -d <size> Data size of SET/GET value in bytes (default 2)
\n
"
);
printf
(
" -k <boolean> 1=keep alive 0=reconnect (default 1)
\n
"
);
printf
(
" -r <keyspacelen> Use random keys for SET/GET/INCR, random values for SADD
\n
"
);
printf
(
" Using this option the benchmark will get/set keys
\n
"
);
printf
(
" in the form mykey_rand000000012456 instead of constant
\n
"
);
printf
(
" keys, the <keyspacelen> argument determines the max
\n
"
);
printf
(
" number of values for the random number. For instance
\n
"
);
printf
(
" if set to 10 only rand000000000000 - rand000000000009
\n
"
);
printf
(
" range will be allowed.
\n
"
);
printf
(
" -q Quiet. Just show query/sec values
\n
"
);
printf
(
" -l Loop. Run the tests forever
\n
"
);
printf
(
" -I Idle mode. Just open N idle connections and wait.
\n
"
);
printf
(
" -D Debug mode. more verbose.
\n
"
);
exit
(
exit_status
);
}
}
int
showThroughput
(
struct
aeEventLoop
*
eventLoop
,
long
long
id
,
void
*
clientData
)
{
int
showThroughput
(
struct
aeEventLoop
*
eventLoop
,
long
long
id
,
void
*
clientData
)
{
...
@@ -411,6 +428,9 @@ int showThroughput(struct aeEventLoop *eventLoop, long long id, void *clientData
...
@@ -411,6 +428,9 @@ int showThroughput(struct aeEventLoop *eventLoop, long long id, void *clientData
int
main
(
int
argc
,
const
char
**
argv
)
{
int
main
(
int
argc
,
const
char
**
argv
)
{
int
i
;
int
i
;
char
*
data
,
*
cmd
;
int
len
;
client
c
;
client
c
;
signal
(
SIGHUP
,
SIG_IGN
);
signal
(
SIGHUP
,
SIG_IGN
);
...
@@ -436,7 +456,10 @@ int main(int argc, const char **argv) {
...
@@ -436,7 +456,10 @@ int main(int argc, const char **argv) {
config
.
hostport
=
6379
;
config
.
hostport
=
6379
;
config
.
hostsocket
=
NULL
;
config
.
hostsocket
=
NULL
;
parseOptions
(
argc
,
argv
);
i
=
parseOptions
(
argc
,
argv
);
argc
-=
i
;
argv
+=
i
;
config
.
latency
=
zmalloc
(
sizeof
(
long
long
)
*
config
.
requests
);
config
.
latency
=
zmalloc
(
sizeof
(
long
long
)
*
config
.
requests
);
if
(
config
.
keepalive
==
0
)
{
if
(
config
.
keepalive
==
0
)
{
...
@@ -451,10 +474,25 @@ int main(int argc, const char **argv) {
...
@@ -451,10 +474,25 @@ int main(int argc, const char **argv) {
/* and will wait for every */
/* and will wait for every */
}
}
do
{
/* Run benchmark with command in the remainder of the arguments. */
char
*
data
,
*
cmd
;
if
(
argc
)
{
int
len
;
sds
title
=
sdsnew
(
argv
[
0
]);
for
(
i
=
1
;
i
<
argc
;
i
++
)
{
title
=
sdscatlen
(
title
,
" "
,
1
);
title
=
sdscatlen
(
title
,
(
char
*
)
argv
[
i
],
strlen
(
argv
[
1
]));
}
do
{
len
=
redisFormatCommandArgv
(
&
cmd
,
argc
,
argv
,
NULL
);
benchmark
(
title
,
cmd
,
len
);
free
(
cmd
);
}
while
(
config
.
loop
);
return
0
;
}
/* Run default benchmark suite. */
do
{
data
=
zmalloc
(
config
.
datasize
+
1
);
data
=
zmalloc
(
config
.
datasize
+
1
);
memset
(
data
,
'x'
,
config
.
datasize
);
memset
(
data
,
'x'
,
config
.
datasize
);
data
[
config
.
datasize
]
=
'\0'
;
data
[
config
.
datasize
]
=
'\0'
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment