mirror of
https://github.com/jemalloc/jemalloc.git
synced 2026-04-14 14:41:42 +03:00
Add experimental option force using SYS_process_madvise
This commit is contained in:
parent
1956a54a43
commit
852da1be15
3 changed files with 23 additions and 1 deletions
14
configure.ac
14
configure.ac
|
|
@ -2457,6 +2457,13 @@ if test "x${je_cv_osatomic}" = "xyes" ; then
|
|||
fi
|
||||
|
||||
dnl ============================================================================
|
||||
|
||||
AC_ARG_WITH([experimental_sys_process_madvise],
|
||||
[AS_HELP_STRING([--with-experimental-sys-process-madvise=<experimental-sys-process-madvise>],
|
||||
[Force process_madvise and use experimental-sys-process-madvise number when making syscall])],
|
||||
[je_cv_sys_pmadv_nr="${with_experimental_sys_process_madvise}"],
|
||||
[je_cv_sys_pmadv_nr=""])
|
||||
|
||||
dnl Check for madvise(2).
|
||||
|
||||
JE_COMPILABLE([madvise(2)], [
|
||||
|
|
@ -2554,6 +2561,13 @@ if test "x${je_cv_madvise}" = "xyes" ; then
|
|||
], [je_cv_process_madvise])
|
||||
if test "x${je_cv_process_madvise}" = "xyes" ; then
|
||||
AC_DEFINE([JEMALLOC_HAVE_PROCESS_MADVISE], [ ], [ ])
|
||||
else
|
||||
if test "x${je_cv_sys_pmadv_nr}" != "x" ; then
|
||||
dnl Forcing experimental usage of process_madvise
|
||||
AC_MSG_RESULT([Forcing usage of process_madvise with syscall nr=${je_cv_sys_pmadv_nr}])
|
||||
AC_DEFINE([JEMALLOC_HAVE_PROCESS_MADVISE], [ ], [ ])
|
||||
AC_DEFINE_UNQUOTED([EXPERIMENTAL_SYS_PROCESS_MADVISE_NR], [${je_cv_sys_pmadv_nr}], [ ])
|
||||
fi
|
||||
fi
|
||||
else
|
||||
dnl Check for posix_madvise.
|
||||
|
|
|
|||
|
|
@ -348,6 +348,8 @@
|
|||
/* Defined if process_madvise(2) is available. */
|
||||
#undef JEMALLOC_HAVE_PROCESS_MADVISE
|
||||
|
||||
#undef EXPERIMENTAL_SYS_PROCESS_MADVISE_NR
|
||||
|
||||
/* Defined if mprotect(2) is available. */
|
||||
#undef JEMALLOC_HAVE_MPROTECT
|
||||
|
||||
|
|
|
|||
|
|
@ -640,10 +640,16 @@ init_process_madvise(void) {
|
|||
return false;
|
||||
}
|
||||
|
||||
#ifdef SYS_process_madvise
|
||||
#define JE_SYS_PROCESS_MADVISE_NR SYS_process_madvise
|
||||
#else
|
||||
#define JE_SYS_PROCESS_MADVISE_NR EXPERIMENTAL_SYS_PROCESS_MADVISE_NR
|
||||
#endif
|
||||
|
||||
static bool
|
||||
pages_purge_process_madvise_impl(void *vec, size_t vec_len,
|
||||
size_t total_bytes) {
|
||||
size_t purged_bytes = (size_t)syscall(SYS_process_madvise, pidfd,
|
||||
size_t purged_bytes = (size_t)syscall(JE_SYS_PROCESS_MADVISE_NR, pidfd,
|
||||
(struct iovec *)vec, vec_len, MADV_DONTNEED, 0);
|
||||
|
||||
return purged_bytes != total_bytes;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue