From efe2822708d62bfe3ba858da526e6ef7d4724959 Mon Sep 17 00:00:00 2001 From: Jean Boussier Date: Fri, 15 Sep 2023 16:22:09 +0200 Subject: [PATCH] Process.warmup: invoke `malloc_trim` if available Similar to releasing free GC pages, releasing free malloc pages reduce the amount of page faults post fork. --- configure.ac | 1 + gc.c | 4 ++++ process.c | 1 + 3 files changed, 6 insertions(+) diff --git a/configure.ac b/configure.ac index 30a1350fa6..70400dd797 100644 --- a/configure.ac +++ b/configure.ac @@ -2078,6 +2078,7 @@ AC_CHECK_FUNCS(lstat) AC_CHECK_FUNCS(lutimes) AC_CHECK_FUNCS(malloc_usable_size) AC_CHECK_FUNCS(malloc_size) +AC_CHECK_FUNCS(malloc_trim) AC_CHECK_FUNCS(mblen) AC_CHECK_FUNCS(memalign) AC_CHECK_FUNCS(memset_s) diff --git a/gc.c b/gc.c index 3fd2a3b33f..662ddc3e0f 100644 --- a/gc.c +++ b/gc.c @@ -9740,6 +9740,10 @@ rb_gc_prepare_heap(void) rb_objspace_each_objects(gc_set_candidate_object_i, NULL); gc_start_internal(NULL, Qtrue, Qtrue, Qtrue, Qtrue, Qtrue); free_empty_pages(); + +#if defined(HAVE_MALLOC_TRIM) && !defined(RUBY_ALTERNATIVE_MALLOC_HEADER) + malloc_trim(0); +#endif } static int diff --git a/process.c b/process.c index d7e04830ee..690872ad36 100644 --- a/process.c +++ b/process.c @@ -8789,6 +8789,7 @@ static VALUE rb_mProcID_Syscall; * * Precomputes the coderange of all strings. * * Frees all empty heap pages and increments the allocatable pages counter * by the number of pages freed. + * * Invoke +malloc_trim+ if available to free empty malloc pages. */ static VALUE