From c426d85c4c877a21c959b306b81d8df46259cbd6 Mon Sep 17 00:00:00 2001 From: antirez Date: Mon, 30 Jul 2018 13:37:30 +0200 Subject: [PATCH] Control dynamic HZ via server configuration. --- src/server.c | 17 +++++++++++------ src/server.h | 2 ++ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/server.c b/src/server.c index 965cae96..23450c8f 100644 --- a/src/server.c +++ b/src/server.c @@ -1096,14 +1096,18 @@ int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientData) { /* Update the time cache. */ updateCachedTime(); + server.hz = server.config_hz; /* Adapt the server.hz value to the number of configured clients. If we have * many clients, we want to call serverCron() with an higher frequency. */ - server.hz = server.config_hz; - while (listLength(server.clients) / server.hz > MAX_CLIENTS_PER_CLOCK_TICK) { - server.hz *= 2; - if (server.hz > CONFIG_MAX_HZ) { - server.hz = CONFIG_MAX_HZ; - break; + if (server.dynamic_hz) { + while (listLength(server.clients) / server.hz > + MAX_CLIENTS_PER_CLOCK_TICK) + { + server.hz *= 2; + if (server.hz > CONFIG_MAX_HZ) { + server.hz = CONFIG_MAX_HZ; + break; + } } } @@ -1524,6 +1528,7 @@ void initServerConfig(void) { server.configfile = NULL; server.executable = NULL; server.config_hz = CONFIG_DEFAULT_HZ; + server.dynamic_hz = CONFIG_DEFAULT_DYNAMIC_HZ; server.arch_bits = (sizeof(long) == 8) ? 64 : 32; server.port = CONFIG_DEFAULT_SERVER_PORT; server.tcp_backlog = CONFIG_DEFAULT_TCP_BACKLOG; diff --git a/src/server.h b/src/server.h index 4d63faa6..21e4c427 100644 --- a/src/server.h +++ b/src/server.h @@ -78,6 +78,7 @@ typedef long long mstime_t; /* millisecond time type. */ #define C_ERR -1 /* Static server configuration */ +#define CONFIG_DEFAULT_DYNAMIC_HZ 1 /* Adapt hz to # of clients.*/ #define CONFIG_DEFAULT_HZ 10 /* Time interrupt calls/sec. */ #define CONFIG_MIN_HZ 1 #define CONFIG_MAX_HZ 500 @@ -925,6 +926,7 @@ struct redisServer { char *configfile; /* Absolute config file path, or NULL */ char *executable; /* Absolute executable file path. */ char **exec_argv; /* Executable argv vector (copy). */ + int dynamic_hz; /* Change hz value depending on # of clients. */ int config_hz; /* Configured HZ value. May be different than the actual 'hz' field value if dynamic-hz is enabled. */