Mesh is a drop in replacement for malloc(3) that can transparently recover from memory fragmentation without any changes to application code.
Mesh is described in detail in a paper (PDF) that appeared at PLDI 2019.
Or watch this talk by Bobby Powers at Strange Loop:
Mesh runs on Linux and macOS. Windows is a work in progress.
Mesh uses bazel as a build system, but wraps it in a Makefile, and has no runtime dependencies other than libc:
$ git clone https://github.com/plasma-umass/mesh
$ cd mesh
$ make; sudo make install
# example: run git with mesh as its allocator:
$ LD_PRELOAD=libmesh.so git status
Please open an issue if you have questions (or issues)!
If you run a program linked against mesh (or with Mesh LD_PRELOAD
ed), setting the variable MALLOCSTATS=1
will instruct mesh to print a summary at exit:
$ MALLOCSTATS=1 ./bin/redis-server-mesh ./redis.conf
25216:C 11 Mar 20:27:12.050 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
25216:C 11 Mar 20:27:12.050 # Redis version=4.0.2, bits=64, commit=dfe0d212, modified=0, pid=25216, just started
25216:C 11 Mar 20:27:12.050 # Configuration loaded
[...]
^C25216:signal-handler (1583983641) Received SIGINT scheduling shutdown...
25216:M 11 Mar 20:27:21.945 # User requested shutdown...
25216:M 11 Mar 20:27:21.945 * Removing the pid file.
25216:M 11 Mar 20:27:21.945 * Removing the unix socket file.
25216:M 11 Mar 20:27:21.945 # Redis is now ready to exit, bye bye...
MESH COUNT: 25918
Meshed MB (total): 101.2
Meshed pages HWM: 25918
Meshed MB HWM: 101.2
MH Alloc Count: 56775
MH Free Count: 17
MH High Water Mark: 82687
Not all workloads experience fragmentation, so its possible that Mesh will have a small 'Meshed MB (total)' number!
Mesh is built on Heap Layers, an infrastructure for building high performance memory allocators in C++ (see the paper for details.)
The entry point of the library is libmesh.cc
.
This file is where malloc
, free
and the instantiations of the
Heap used for allocating program memory lives.
malloc(3)
reside within the arena.free(3)
s can be fast and lock-free.