summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2019-10-02 11:21:24 +0200
committerantirez <antirez@gmail.com>2019-10-02 11:30:20 +0200
commit758b39be997f16bc084055edb8caa71be2f2ffcc (patch)
tree15a0d77710721dce59bbd63817cb3a4a496cbff2
parentf49f0a6f729720cc1462d30d036c8ba2baef361b (diff)
downloadredis-758b39be997f16bc084055edb8caa71be2f2ffcc.tar.gz
Speedup INFO server section.
-rw-r--r--src/release.c14
-rw-r--r--src/server.c34
-rw-r--r--src/server.h1
3 files changed, 32 insertions, 17 deletions
diff --git a/src/release.c b/src/release.c
index 4e59c7474..e0bd018fc 100644
--- a/src/release.c
+++ b/src/release.c
@@ -32,6 +32,7 @@
* files using this functions. */
#include <string.h>
+#include <stdio.h>
#include "release.h"
#include "version.h"
@@ -50,3 +51,16 @@ uint64_t redisBuildId(void) {
return crc64(0,(unsigned char*)buildid,strlen(buildid));
}
+
+/* Return a cached value of the build string in order to avoid recomputing
+ * and converting it in hex every time: this string is shown in the INFO
+ * output that should be fast. */
+char *redisBuildIdString(void) {
+ static char buf[32];
+ static int cached = 0;
+ if (!cached) {
+ snprintf(buf,sizeof(buf),"%llx",(unsigned long long) redisBuildId());
+ cached = 1;
+ }
+ return buf;
+}
diff --git a/src/server.c b/src/server.c
index 9380a840a..593f98f3f 100644
--- a/src/server.c
+++ b/src/server.c
@@ -3892,32 +3892,32 @@ sds genRedisInfoString(char *section) {
call_uname = 0;
}
- info = sdscatprintf(info,
+ info = sdscatfmt(info,
"# Server\r\n"
"redis_version:%s\r\n"
"redis_git_sha1:%s\r\n"
- "redis_git_dirty:%d\r\n"
- "redis_build_id:%llx\r\n"
+ "redis_git_dirty:%i\r\n"
+ "redis_build_id:%s\r\n"
"redis_mode:%s\r\n"
"os:%s %s %s\r\n"
- "arch_bits:%d\r\n"
+ "arch_bits:%i\r\n"
"multiplexing_api:%s\r\n"
"atomicvar_api:%s\r\n"
- "gcc_version:%d.%d.%d\r\n"
- "process_id:%ld\r\n"
+ "gcc_version:%i.%i.%i\r\n"
+ "process_id:%I\r\n"
"run_id:%s\r\n"
- "tcp_port:%d\r\n"
- "uptime_in_seconds:%jd\r\n"
- "uptime_in_days:%jd\r\n"
- "hz:%d\r\n"
- "configured_hz:%d\r\n"
- "lru_clock:%ld\r\n"
+ "tcp_port:%i\r\n"
+ "uptime_in_seconds:%I\r\n"
+ "uptime_in_days:%I\r\n"
+ "hz:%i\r\n"
+ "configured_hz:%i\r\n"
+ "lru_clock:%u\r\n"
"executable:%s\r\n"
"config_file:%s\r\n",
REDIS_VERSION,
redisGitSHA1(),
strtol(redisGitDirty(),NULL,10) > 0,
- (unsigned long long) redisBuildId(),
+ redisBuildIdString(),
mode,
name.sysname, name.release, name.machine,
server.arch_bits,
@@ -3928,14 +3928,14 @@ sds genRedisInfoString(char *section) {
#else
0,0,0,
#endif
- (long) getpid(),
+ (int64_t) getpid(),
server.runid,
server.port,
- (intmax_t)uptime,
- (intmax_t)(uptime/(3600*24)),
+ (int64_t)uptime,
+ (int64_t)(uptime/(3600*24)),
server.hz,
server.config_hz,
- (unsigned long) server.lruclock,
+ server.lruclock,
server.executable ? server.executable : "",
server.configfile ? server.configfile : "");
}
diff --git a/src/server.h b/src/server.h
index 6e011a2ca..4d48fcd1a 100644
--- a/src/server.h
+++ b/src/server.h
@@ -2140,6 +2140,7 @@ void dictSdsDestructor(void *privdata, void *val);
char *redisGitSHA1(void);
char *redisGitDirty(void);
uint64_t redisBuildId(void);
+char *redisBuildIdString(void);
/* Commands prototypes */
void authCommand(client *c);