xref: /freebsd/contrib/jemalloc/include/jemalloc/internal/hpa_opts.h (revision acd546f01e58354af049455472980c6c4a52e18b)
1 #ifndef JEMALLOC_INTERNAL_HPA_OPTS_H
2 #define JEMALLOC_INTERNAL_HPA_OPTS_H
3 
4 #include "jemalloc/internal/fxp.h"
5 
6 /*
7  * This file is morally part of hpa.h, but is split out for header-ordering
8  * reasons.
9  */
10 
11 typedef struct hpa_shard_opts_s hpa_shard_opts_t;
12 struct hpa_shard_opts_s {
13 	/*
14 	 * The largest size we'll allocate out of the shard.  For those
15 	 * allocations refused, the caller (in practice, the PA module) will
16 	 * fall back to the more general (for now) PAC, which can always handle
17 	 * any allocation request.
18 	 */
19 	size_t slab_max_alloc;
20 
21 	/*
22 	 * When the number of active bytes in a hugepage is >=
23 	 * hugification_threshold, we force hugify it.
24 	 */
25 	size_t hugification_threshold;
26 
27 	/*
28 	 * The HPA purges whenever the number of pages exceeds dirty_mult *
29 	 * active_pages.  This may be set to (fxp_t)-1 to disable purging.
30 	 */
31 	fxp_t dirty_mult;
32 
33 	/*
34 	 * Whether or not the PAI methods are allowed to defer work to a
35 	 * subsequent hpa_shard_do_deferred_work() call.  Practically, this
36 	 * corresponds to background threads being enabled.  We track this
37 	 * ourselves for encapsulation purposes.
38 	 */
39 	bool deferral_allowed;
40 
41 	/*
42 	 * How long a hugepage has to be a hugification candidate before it will
43 	 * actually get hugified.
44 	 */
45 	uint64_t hugify_delay_ms;
46 
47 	/*
48 	 * Minimum amount of time between purges.
49 	 */
50 	uint64_t min_purge_interval_ms;
51 };
52 
53 #define HPA_SHARD_OPTS_DEFAULT {					\
54 	/* slab_max_alloc */						\
55 	64 * 1024,							\
56 	/* hugification_threshold */					\
57 	HUGEPAGE * 95 / 100,						\
58 	/* dirty_mult */						\
59 	FXP_INIT_PERCENT(25),						\
60 	/*								\
61 	 * deferral_allowed						\
62 	 * 								\
63 	 * Really, this is always set by the arena during creation	\
64 	 * or by an hpa_shard_set_deferral_allowed call, so the value	\
65 	 * we put here doesn't matter.					\
66 	 */								\
67 	false,								\
68 	/* hugify_delay_ms */						\
69 	10 * 1000,							\
70 	/* min_purge_interval_ms */					\
71 	5 * 1000							\
72 }
73 
74 #endif /* JEMALLOC_INTERNAL_HPA_OPTS_H */
75