Oran Agra 88d71f4793 fix a rare active defrag edge case bug leading to stagnation | %!s(int64=4) %!d(string=hai) anos | |
---|---|---|
.. | ||
hiredis | %!s(int64=5) %!d(string=hai) anos | |
jemalloc | %!s(int64=4) %!d(string=hai) anos | |
linenoise | %!s(int64=4) %!d(string=hai) anos | |
lua | %!s(int64=4) %!d(string=hai) anos | |
Makefile | %!s(int64=5) %!d(string=hai) anos | |
README.md | %!s(int64=5) %!d(string=hai) anos | |
update-jemalloc.sh | %!s(int64=10) %!d(string=hai) anos |
This directory contains all Redis dependencies, except for the libc that should be provided by the operating system.
Jemalloc is modified with changes that allow us to implement the Redis active defragmentation logic. However this feature of Redis is not mandatory and Redis is able to understand if the Jemalloc version it is compiled against supports such Redis-specific modifications. So in theory, if you are not interested in the active defragmentation, you can replace Jemalloc just following tose steps:
However note that we change Jemalloc settings via the configure
script of Jemalloc using the --with-lg-quantum
option, setting it to the value of 3 instead of 4. This provides us with more size classes that better suit the Redis data structures, in order to gain memory efficiency.
If you want to upgrade Jemalloc while also providing support for active defragmentation, in addition to the above steps you need to perform the following additional steps:
include/jemalloc/jemalloc_macros.h.in
, make sure
to add #define JEMALLOC_FRAG_HINT
.je_get_defrag_hint()
inside src/jemalloc.c
. You
can see how it is implemented in the current Jemalloc source tree shipped
with Redis, and rewrite it according to the new Jemalloc internals, if they
changed, otherwise you could just copy the old implementation if you are
upgrading just to a similar version of Jemalloc.Hiredis uses the SDS string library, that must be the same version used inside Redis itself. Hiredis is also very critical for Sentinel. Historically Redis often used forked versions of hiredis in a way or the other. In order to upgrade it is advised to take a lot of care:
Linenoise is rarely upgraded as needed. The upgrade process is trivial since Redis uses a non modified version of linenoise, so to upgrade just do the following:
We use Lua 5.1 and no upgrade is planned currently, since we don't want to break Lua scripts for new Lua features: in the context of Redis Lua scripts the capabilities of 5.1 are usually more than enough, the release is rock solid, and we definitely don't want to break old scripts.
So upgrading of Lua is up to the Redis project maintainers and should be a manual procedure performed by taking a diff between the different versions.
Currently we have at least the following differences between official Lua 5.1 and our version:
lua_cjson.o
, lua_struct.o
, lua_cmsgpack.o
and lua_bit.o
.ldo.c
, line 498: The check for LUA_SIGNATURE[0]
is removed in order toa void direct bytecode execution.