mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-09-01 06:55:30 +00:00
Add ability to set per jemalloc arena dirty and muzzy decay values
This commit adds couple of functions to change "dirty_decay_ms" and "muzzy_decay_ms" settings on arenas associated with memory contexts.
This commit is contained in:
committed by
Ondřej Surý
parent
8550c52588
commit
6e98b58d15
@@ -201,13 +201,38 @@ isc__mem_create(isc_mem_t **_ISC_MEM_FLARG);
|
|||||||
void
|
void
|
||||||
isc__mem_create_arena(isc_mem_t **_ISC_MEM_FLARG);
|
isc__mem_create_arena(isc_mem_t **_ISC_MEM_FLARG);
|
||||||
/*!<
|
/*!<
|
||||||
* \brief Create a memory context that routs all its operations to a dedicated
|
* \brief Create a memory context that routs all its operations to a
|
||||||
* jemalloc arena (when available).
|
* dedicated jemalloc arena (when available). When jemalloc is not
|
||||||
|
* available, the function is, effectively, an alias to
|
||||||
|
* isc_mem_create().
|
||||||
*
|
*
|
||||||
* Requires:
|
* Requires:
|
||||||
* mctxp != NULL && *mctxp == NULL */
|
* mctxp != NULL && *mctxp == NULL */
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
|
||||||
|
isc_result_t
|
||||||
|
isc_mem_arena_set_muzzy_decay_ms(isc_mem_t *mctx, const ssize_t decay_ms);
|
||||||
|
|
||||||
|
isc_result_t
|
||||||
|
isc_mem_arena_set_dirty_decay_ms(isc_mem_t *mctx, const ssize_t decay_ms);
|
||||||
|
/*!<
|
||||||
|
* \brief These two functions set the given parameters on the
|
||||||
|
* jemalloc arena associated with the memory context (if there is
|
||||||
|
* one). When jemalloc is not available, these are no-op.
|
||||||
|
*
|
||||||
|
* NOTE: The "muzzy_decay_ms" and "dirty_decay_ms" are the most common
|
||||||
|
* parameters to adjust when the defaults do not work well (per the
|
||||||
|
* official jemalloc tuning guide:
|
||||||
|
* https://github.com/jemalloc/jemalloc/blob/dev/TUNING.md).
|
||||||
|
*
|
||||||
|
* Requires:
|
||||||
|
* mctx - a valid memory context.
|
||||||
|
*/
|
||||||
|
/*@}*/
|
||||||
|
|
||||||
|
void
|
||||||
|
isc_mem_attach(isc_mem_t *, isc_mem_t **);
|
||||||
|
|
||||||
/*@{*/
|
/*@{*/
|
||||||
void
|
void
|
||||||
isc_mem_attach(isc_mem_t *, isc_mem_t **);
|
isc_mem_attach(isc_mem_t *, isc_mem_t **);
|
||||||
|
@@ -1640,6 +1640,55 @@ isc__mem_create_arena(isc_mem_t **mctxp FLARG) {
|
|||||||
#endif /* ISC_MEM_TRACKLINES */
|
#endif /* ISC_MEM_TRACKLINES */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef JEMALLOC_API_SUPPORTED
|
||||||
|
static bool
|
||||||
|
jemalloc_set_ssize_value(const char *valname, ssize_t newval) {
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = mallctl(valname, NULL, NULL, &newval, sizeof(newval));
|
||||||
|
return (ret == 0);
|
||||||
|
}
|
||||||
|
#endif /* JEMALLOC_API_SUPPORTED */
|
||||||
|
|
||||||
|
static isc_result_t
|
||||||
|
mem_set_arena_ssize_value(isc_mem_t *mctx, const char *arena_valname,
|
||||||
|
const ssize_t newval) {
|
||||||
|
REQUIRE(VALID_CONTEXT(mctx));
|
||||||
|
#ifdef JEMALLOC_API_SUPPORTED
|
||||||
|
bool ret;
|
||||||
|
char buf[256] = { 0 };
|
||||||
|
|
||||||
|
if (mctx->jemalloc_arena == ISC_MEM_ILLEGAL_ARENA) {
|
||||||
|
return (ISC_R_UNEXPECTED);
|
||||||
|
}
|
||||||
|
|
||||||
|
(void)snprintf(buf, sizeof(buf), "arena.%u.%s", mctx->jemalloc_arena,
|
||||||
|
arena_valname);
|
||||||
|
|
||||||
|
ret = jemalloc_set_ssize_value(buf, newval);
|
||||||
|
|
||||||
|
if (!ret) {
|
||||||
|
return (ISC_R_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (ISC_R_SUCCESS);
|
||||||
|
#else
|
||||||
|
UNUSED(arena_valname);
|
||||||
|
UNUSED(newval);
|
||||||
|
return (ISC_R_NOTIMPLEMENTED);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
isc_result_t
|
||||||
|
isc_mem_arena_set_muzzy_decay_ms(isc_mem_t *mctx, const ssize_t decay_ms) {
|
||||||
|
return (mem_set_arena_ssize_value(mctx, "muzzy_decay_ms", decay_ms));
|
||||||
|
}
|
||||||
|
|
||||||
|
isc_result_t
|
||||||
|
isc_mem_arena_set_dirty_decay_ms(isc_mem_t *mctx, const ssize_t decay_ms) {
|
||||||
|
return (mem_set_arena_ssize_value(mctx, "dirty_decay_ms", decay_ms));
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
isc__mem_printactive(isc_mem_t *ctx, FILE *file) {
|
isc__mem_printactive(isc_mem_t *ctx, FILE *file) {
|
||||||
#if ISC_MEM_TRACKLINES
|
#if ISC_MEM_TRACKLINES
|
||||||
|
Reference in New Issue
Block a user