Control dynamic HZ via server configuration.

This commit is contained in:
antirez 2018-07-30 13:37:30 +02:00
parent 4e9c30a6ca
commit c426d85c4c
2 changed files with 13 additions and 6 deletions

View File

@ -1096,14 +1096,18 @@ int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientData) {
/* Update the time cache. */ /* Update the time cache. */
updateCachedTime(); updateCachedTime();
server.hz = server.config_hz;
/* Adapt the server.hz value to the number of configured clients. If we have /* 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. */ * many clients, we want to call serverCron() with an higher frequency. */
server.hz = server.config_hz; if (server.dynamic_hz) {
while (listLength(server.clients) / server.hz > MAX_CLIENTS_PER_CLOCK_TICK) { while (listLength(server.clients) / server.hz >
server.hz *= 2; MAX_CLIENTS_PER_CLOCK_TICK)
if (server.hz > CONFIG_MAX_HZ) { {
server.hz = CONFIG_MAX_HZ; server.hz *= 2;
break; if (server.hz > CONFIG_MAX_HZ) {
server.hz = CONFIG_MAX_HZ;
break;
}
} }
} }
@ -1524,6 +1528,7 @@ void initServerConfig(void) {
server.configfile = NULL; server.configfile = NULL;
server.executable = NULL; server.executable = NULL;
server.config_hz = CONFIG_DEFAULT_HZ; server.config_hz = CONFIG_DEFAULT_HZ;
server.dynamic_hz = CONFIG_DEFAULT_DYNAMIC_HZ;
server.arch_bits = (sizeof(long) == 8) ? 64 : 32; server.arch_bits = (sizeof(long) == 8) ? 64 : 32;
server.port = CONFIG_DEFAULT_SERVER_PORT; server.port = CONFIG_DEFAULT_SERVER_PORT;
server.tcp_backlog = CONFIG_DEFAULT_TCP_BACKLOG; server.tcp_backlog = CONFIG_DEFAULT_TCP_BACKLOG;

View File

@ -78,6 +78,7 @@ typedef long long mstime_t; /* millisecond time type. */
#define C_ERR -1 #define C_ERR -1
/* Static server configuration */ /* 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_DEFAULT_HZ 10 /* Time interrupt calls/sec. */
#define CONFIG_MIN_HZ 1 #define CONFIG_MIN_HZ 1
#define CONFIG_MAX_HZ 500 #define CONFIG_MAX_HZ 500
@ -925,6 +926,7 @@ struct redisServer {
char *configfile; /* Absolute config file path, or NULL */ char *configfile; /* Absolute config file path, or NULL */
char *executable; /* Absolute executable file path. */ char *executable; /* Absolute executable file path. */
char **exec_argv; /* Executable argv vector (copy). */ 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 int config_hz; /* Configured HZ value. May be different than
the actual 'hz' field value if dynamic-hz the actual 'hz' field value if dynamic-hz
is enabled. */ is enabled. */