From 488958385c6b8974b8780fb44b91c481e57c2eea Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 18 Apr 2024 19:46:16 +0000 Subject: doc: strongly recommend MALLOC_MMAP_THRESHOLD_=131072 for glibc The 131072 byte lower bound was the old default before the sliding mmap window was introduced in modern glibc malloc. While the sliding mmap window was intended to be faster by reducing syscalls, zeroing and kernel overhead, it is also prone to fragmentation from allocation patterns seen in evented Perl servers. Individual allocations over 128K are rare in our codebase since there aren't many messages this large, making any performance impact tiny. Furthermore, the reduction in fragmentation and memory use will be a speedup for memory-constrained systems since they can avoid swap and have more leftover for the page cache. --- examples/public-inbox-httpd@.service | 1 + examples/public-inbox-imapd@.service | 2 ++ examples/public-inbox-netd@.service | 11 ++++++----- examples/public-inbox-nntpd@.service | 2 ++ 4 files changed, 11 insertions(+), 5 deletions(-) (limited to 'examples') diff --git a/examples/public-inbox-httpd@.service b/examples/public-inbox-httpd@.service index 11859198..ca68fc7e 100644 --- a/examples/public-inbox-httpd@.service +++ b/examples/public-inbox-httpd@.service @@ -19,6 +19,7 @@ After = public-inbox-httpd.socket Environment = PI_CONFIG=/home/pi/.public-inbox/config \ PATH=/usr/local/bin:/usr/bin:/bin \ TZ=UTC \ +MALLOC_MMAP_THRESHOLD_=131072 \ PERL_INLINE_DIRECTORY=/tmp/.pub-inline LimitNOFILE = 30000 diff --git a/examples/public-inbox-imapd@.service b/examples/public-inbox-imapd@.service index 80104605..1aede65d 100644 --- a/examples/public-inbox-imapd@.service +++ b/examples/public-inbox-imapd@.service @@ -16,6 +16,8 @@ After = public-inbox-imapd.socket [Service] Environment = PI_CONFIG=/home/pi/.public-inbox/config \ PATH=/usr/local/bin:/usr/bin:/bin \ +TZ=UTC \ +MALLOC_MMAP_THRESHOLD_=131072 \ PERL_INLINE_DIRECTORY=/tmp/.pub-inline LimitNOFILE = 30000 diff --git a/examples/public-inbox-netd@.service b/examples/public-inbox-netd@.service index 7437f086..51f58fbb 100644 --- a/examples/public-inbox-netd@.service +++ b/examples/public-inbox-netd@.service @@ -12,14 +12,15 @@ Wants = public-inbox-netd.socket After = public-inbox-netd.socket [Service] -# An LD_PRELOAD for libjemalloc can be added here. It is -# more resistant to fragmentation in long-lived daemons than glibc. -# If you're unable to use jemalloc, setting MALLOC_MMAP_THRESHOLD_ -# to a lower value (e.g. 131072) but that may also require increasing -# the sys.vm.max_map_count sysctl. + +# Setting MALLOC_MMAP_THRESHOLD_=131072 reduces fragmentation by +# disabling the sliding mmap window in glibc malloc. An LD_PRELOAD for +# libjemalloc may be added here, instead. jemalloc is more resistant to +# fragmentation in long-lived daemons than unconfigured glibc malloc. Environment = PI_CONFIG=/home/pi/.public-inbox/config \ PATH=/usr/local/bin:/usr/bin:/bin \ TZ=UTC \ +MALLOC_MMAP_THRESHOLD_=131072 \ PERL_INLINE_DIRECTORY=/tmp/.netd-inline LimitNOFILE = 30000 diff --git a/examples/public-inbox-nntpd@.service b/examples/public-inbox-nntpd@.service index 24f9ca73..556cb76f 100644 --- a/examples/public-inbox-nntpd@.service +++ b/examples/public-inbox-nntpd@.service @@ -16,6 +16,8 @@ After = public-inbox-nntpd.socket [Service] Environment = PI_CONFIG=/home/pi/.public-inbox/config \ PATH=/usr/local/bin:/usr/bin:/bin \ +TZ=UTC \ +MALLOC_MMAP_THRESHOLD_=131072 \ PERL_INLINE_DIRECTORY=/tmp/.pub-inline LimitNOFILE = 30000 -- cgit v1.2.3-24-ge0c7