mirror of
https://github.com/fluencelabs/redis
synced 2025-04-01 15:21:03 +00:00
Enforce upper bound for number of requests in redis-benchmark
This commit is contained in:
parent
5f54a5e615
commit
bdbf3acff5
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user