From cc30e368a3fd049bd5ffaa83f16cbac557d8279d Mon Sep 17 00:00:00 2001 From: antirez Date: Wed, 18 Nov 2009 19:41:25 +0100 Subject: [PATCH] benchmarking with different number of LRANGE elements. Ability to change the glue output buffer limit by #define --- benchmark.c | 18 ++++++++++++++++++ redis.c | 5 +++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/benchmark.c b/benchmark.c index bf8e2834d..a933eba9c 100644 --- a/benchmark.c +++ b/benchmark.c @@ -574,6 +574,24 @@ int main(int argc, char **argv) { aeMain(config.el); endBenchmark("LRANGE (first 300 elements)"); + prepareForBenchmark(); + c = createClient(); + if (!c) exit(1); + c->obuf = sdscat(c->obuf,"LRANGE mylist 0 449\r\n"); + prepareClientForReply(c,REPLY_MBULK); + createMissingClients(c); + aeMain(config.el); + endBenchmark("LRANGE (first 450 elements)"); + + prepareForBenchmark(); + c = createClient(); + if (!c) exit(1); + c->obuf = sdscat(c->obuf,"LRANGE mylist 0 599\r\n"); + prepareClientForReply(c,REPLY_MBULK); + createMissingClients(c); + aeMain(config.el); + endBenchmark("LRANGE (first 600 elements)"); + printf("\n"); } while(config.loop); diff --git a/redis.c b/redis.c index 35843845c..52143e567 100644 --- a/redis.c +++ b/redis.c @@ -1349,6 +1349,7 @@ static void freeClient(redisClient *c) { zfree(c); } +#define GLUEREPLY_UP_TO (1024) static void glueReplyBuffersIfNeeded(redisClient *c) { int totlen = 0; listNode *ln; @@ -1360,10 +1361,10 @@ static void glueReplyBuffersIfNeeded(redisClient *c) { totlen += sdslen(o->ptr); /* This optimization makes more sense if we don't have to copy * too much data */ - if (totlen > 1024) return; + if (totlen > GLUEREPLY_UP_TO) return; } if (totlen > 0) { - char buf[1024]; + char buf[GLUEREPLY_UP_TO]; int copylen = 0; listRewind(c->reply);