diff options
| author | Jean Boussier <byroot@ruby-lang.org> | 2023-09-15 16:22:09 +0200 |
|---|---|---|
| committer | Jean Boussier <jean.boussier@gmail.com> | 2023-09-15 17:45:21 +0200 |
| commit | efe2822708d62bfe3ba858da526e6ef7d4724959 (patch) | |
| tree | cafd2cc6bdbd6653a8fe1926911f1cd9c16e3a27 | |
| parent | 28fe88468d7bde129221415bfa874f4b70bf6843 (diff) | |
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.
| -rw-r--r-- | configure.ac | 1 | ||||
| -rw-r--r-- | gc.c | 4 | ||||
| -rw-r--r-- | process.c | 1 |
3 files changed, 6 insertions, 0 deletions
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) @@ -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 @@ -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 |
