Enforce upper bound for number of requests in redis-benchmark

This commit is contained in:
Pieter Noordhuis 2011-08-17 17:06:19 +02:00 committed by antirez
parent 5f54a5e615
commit bdbf3acff5

View File

@ -53,9 +53,10 @@ static struct config {
int hostport; int hostport;
const char *hostsocket; const char *hostsocket;
int numclients; int numclients;
int requests;
int liveclients; int liveclients;
int donerequests; int requests;
int requests_issued;
int requests_finished;
int keysize; int keysize;
int datasize; int datasize;
int randomkeys; int randomkeys;
@ -148,7 +149,7 @@ static void randomizeClientKey(client c) {
} }
static void clientDone(client c) { static void clientDone(client c) {
if (config.donerequests == config.requests) { if (config.requests_finished == config.requests) {
freeClient(c); freeClient(c);
aeStop(config.el); aeStop(config.el);
return; return;
@ -189,8 +190,8 @@ static void readHandler(aeEventLoop *el, int fd, void *privdata, int mask) {
exit(1); exit(1);
} }
if (config.donerequests < config.requests) if (config.requests_finished < config.requests)
config.latency[config.donerequests++] = c->latency; config.latency[config.requests_finished++] = c->latency;
clientDone(c); clientDone(c);
} }
} }
@ -202,8 +203,15 @@ static void writeHandler(aeEventLoop *el, int fd, void *privdata, int mask) {
REDIS_NOTUSED(fd); REDIS_NOTUSED(fd);
REDIS_NOTUSED(mask); REDIS_NOTUSED(mask);
/* When nothing was written yet, randomize keys and set start time. */ /* Initialize request when nothing was written. */
if (c->written == 0) { if (c->written == 0) {
/* Enforce upper bound to number of requests. */
if (config.requests_issued++ >= config.requests) {
freeClient(c);
return;
}
/* Really initialize: randomize keys and set start time. */
if (config.randomkeys) randomizeClientKey(c); if (config.randomkeys) randomizeClientKey(c);
c->start = ustime(); c->start = ustime();
c->latency = -1; c->latency = -1;
@ -286,10 +294,10 @@ static void showLatencyReport(void) {
int i, curlat = 0; int i, curlat = 0;
float perc, reqpersec; float perc, reqpersec;
reqpersec = (float)config.donerequests/((float)config.totlatency/1000); reqpersec = (float)config.requests_finished/((float)config.totlatency/1000);
if (!config.quiet) { if (!config.quiet) {
printf("====== %s ======\n", config.title); printf("====== %s ======\n", config.title);
printf(" %d requests completed in %.2f seconds\n", config.donerequests, printf(" %d requests completed in %.2f seconds\n", config.requests_finished,
(float)config.totlatency/1000); (float)config.totlatency/1000);
printf(" %d parallel clients\n", config.numclients); printf(" %d parallel clients\n", config.numclients);
printf(" %d bytes payload\n", config.datasize); printf(" %d bytes payload\n", config.datasize);
@ -314,7 +322,8 @@ static void benchmark(const char *title, const char *cmd, int len) {
client c; client c;
config.title = title; config.title = title;
config.donerequests = 0; config.requests_issued = 0;
config.requests_finished = 0;
c = createClient(cmd,len); c = createClient(cmd,len);
createMissingClients(c); createMissingClients(c);
@ -416,7 +425,7 @@ int showThroughput(struct aeEventLoop *eventLoop, long long id, void *clientData
REDIS_NOTUSED(clientData); REDIS_NOTUSED(clientData);
float dt = (float)(mstime()-config.start)/1000.0; float dt = (float)(mstime()-config.start)/1000.0;
float rps = (float)config.donerequests/dt; float rps = (float)config.requests_finished/dt;
printf("%s: %.2f\r", config.title, rps); printf("%s: %.2f\r", config.title, rps);
fflush(stdout); fflush(stdout);
return 250; /* every 250ms */ return 250; /* every 250ms */
@ -438,7 +447,6 @@ int main(int argc, const char **argv) {
config.el = aeCreateEventLoop(); config.el = aeCreateEventLoop();
aeCreateTimeEvent(config.el,1,showThroughput,NULL,NULL); aeCreateTimeEvent(config.el,1,showThroughput,NULL,NULL);
config.keepalive = 1; config.keepalive = 1;
config.donerequests = 0;
config.datasize = 3; config.datasize = 3;
config.randomkeys = 0; config.randomkeys = 0;
config.randomkeys_keyspacelen = 0; config.randomkeys_keyspacelen = 0;