mirror of
https://github.com/jemalloc/jemalloc.git
synced 2026-07-24 22:03:07 +00:00
Add experimental option force using SYS_process_madvise
This commit is contained in:
committed by
Qi Wang
parent
1956a54a43
commit
852da1be15
14
configure.ac
14
configure.ac
@@ -2457,6 +2457,13 @@ if test "x${je_cv_osatomic}" = "xyes" ; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
dnl ============================================================================
|
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).
|
dnl Check for madvise(2).
|
||||||
|
|
||||||
JE_COMPILABLE([madvise(2)], [
|
JE_COMPILABLE([madvise(2)], [
|
||||||
@@ -2554,6 +2561,13 @@ if test "x${je_cv_madvise}" = "xyes" ; then
|
|||||||
], [je_cv_process_madvise])
|
], [je_cv_process_madvise])
|
||||||
if test "x${je_cv_process_madvise}" = "xyes" ; then
|
if test "x${je_cv_process_madvise}" = "xyes" ; then
|
||||||
AC_DEFINE([JEMALLOC_HAVE_PROCESS_MADVISE], [ ], [ ])
|
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
|
fi
|
||||||
else
|
else
|
||||||
dnl Check for posix_madvise.
|
dnl Check for posix_madvise.
|
||||||
|
|||||||
@@ -348,6 +348,8 @@
|
|||||||
/* Defined if process_madvise(2) is available. */
|
/* Defined if process_madvise(2) is available. */
|
||||||
#undef JEMALLOC_HAVE_PROCESS_MADVISE
|
#undef JEMALLOC_HAVE_PROCESS_MADVISE
|
||||||
|
|
||||||
|
#undef EXPERIMENTAL_SYS_PROCESS_MADVISE_NR
|
||||||
|
|
||||||
/* Defined if mprotect(2) is available. */
|
/* Defined if mprotect(2) is available. */
|
||||||
#undef JEMALLOC_HAVE_MPROTECT
|
#undef JEMALLOC_HAVE_MPROTECT
|
||||||
|
|
||||||
|
|||||||
@@ -640,10 +640,16 @@ init_process_madvise(void) {
|
|||||||
return false;
|
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
|
static bool
|
||||||
pages_purge_process_madvise_impl(void *vec, size_t vec_len,
|
pages_purge_process_madvise_impl(void *vec, size_t vec_len,
|
||||||
size_t total_bytes) {
|
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);
|
(struct iovec *)vec, vec_len, MADV_DONTNEED, 0);
|
||||||
|
|
||||||
return purged_bytes != total_bytes;
|
return purged_bytes != total_bytes;
|
||||||
|
|||||||
Reference in New Issue
Block a user