Set huge_threshold to 8M by default.

This feature uses an dedicated arena to handle huge requests, which
significantly improves VM fragmentation.  In production workload we tested it
often reduces VM size by >30%.
This commit is contained in:
Qi Wang 2019-01-16 12:25:24 -08:00 committed by Qi Wang
parent d3145014a0
commit 350809dc5d
2 changed files with 9 additions and 2 deletions

View File

@ -46,6 +46,6 @@ typedef enum {
* When allocation_size >= huge_threshold, use the dedicated huge arena (unless * When allocation_size >= huge_threshold, use the dedicated huge arena (unless
* have explicitly spicified arena index). 0 disables the feature. * have explicitly spicified arena index). 0 disables the feature.
*/ */
#define HUGE_THRESHOLD_DEFAULT 0 #define HUGE_THRESHOLD_DEFAULT (8 << 20)
#endif /* JEMALLOC_INTERNAL_ARENA_TYPES_H */ #endif /* JEMALLOC_INTERNAL_ARENA_TYPES_H */

View File

@ -1239,7 +1239,14 @@ malloc_conf_init(sc_data_t *sc_data, unsigned bin_shard_sizes[SC_NBINS]) {
CONF_HANDLE_SSIZE_T(opt_lg_tcache_max, "lg_tcache_max", CONF_HANDLE_SSIZE_T(opt_lg_tcache_max, "lg_tcache_max",
-1, (sizeof(size_t) << 3) - 1) -1, (sizeof(size_t) << 3) - 1)
/* Experimental feature. Will be documented later.*/ /*
* The runtime option of huge_threshold remains
* undocumented. It may be tweaked in the next major
* release (6.0). The default value 8M is rather
* conservative / safe. Tuning it further down may
* improve fragmentation a bit more, but may also cause
* contention on the huge arena.
*/
CONF_HANDLE_SIZE_T(opt_huge_threshold, CONF_HANDLE_SIZE_T(opt_huge_threshold,
"huge_threshold", SC_LARGE_MINCLASS, "huge_threshold", SC_LARGE_MINCLASS,
SC_LARGE_MAXCLASS, yes, yes, false) SC_LARGE_MAXCLASS, yes, yes, false)