]> git.saurik.com Git - redis.git/commit
Redis timer interrupt frequency configurable as REDIS_HZ.
authorantirez <antirez@gmail.com>
Sun, 13 May 2012 14:40:29 +0000 (16:40 +0200)
committerantirez <antirez@gmail.com>
Mon, 14 May 2012 15:43:07 +0000 (17:43 +0200)
commitf7f2b2610e8181c13657c35e4f3cd06c94ba3ff9
tree91fd249b2a22d1ca6c1b4bcf856938b44b9061da
parentf078d5628d5931903111e384d55bacf205986fe5
Redis timer interrupt frequency configurable as REDIS_HZ.

Redis uses a function called serverCron() that is very similar to the
timer interrupt of an operating system. This function is used to handle
a number of asynchronous things, like active expired keys collection,
clients timeouts, update of statistics, things related to the cluster
and replication, triggering of BGSAVE and AOF rewrite process, and so
forth.

In the past the timer was called 1 time per second. At some point it was
raised to 10 times per second, but it still was fixed and could not be
changed even at compile time, because different functions called from
serverCron() assumed a given fixed frequency.

This commmit makes the frequency configurable, so that it is simpler to
pick a good tradeoff between overhead of this function (that is usually
very small) and the responsiveness of Redis during a few critical
circumstances where a lot of work is done inside the timer.

An example of such a critical condition is mass-expire of a lot of keys
in the same second. Up to a given percentage of CPU time is used to
perform expired keys collection per expire cylce. Now changing the
REDIS_HZ macro it is possible to do less work but more times per second
in order to block the server for less time.

If this patch will work well in our tests it will enter Redis 2.6-final.
src/redis.c
src/redis.h