Yinan Zhang
1f1a0231ed
Split macros for initializing stats headers
2021-01-07 20:39:49 -08:00
Yinan Zhang
4352cbc21c
Add alignment tests for prof stats
2021-01-07 20:39:49 -08:00
Yinan Zhang
54f3351f1f
Add mallctl for prof stats fetching
2021-01-07 20:39:49 -08:00
Yinan Zhang
40fa4d29d3
Track per size class internal fragmentation
2021-01-07 20:39:49 -08:00
Yinan Zhang
afa489c3c5
Record request size in prof info
2021-01-07 20:39:49 -08:00
David Goldblatt
f9bb8dedef
Un-force-inline do_rallocx.
...
The additional overhead of the function-call setup and flags checking is
relatively small, but costs us the replication of the entire realloc pathway in
terms of size.
2021-01-04 14:55:49 -08:00
David Goldblatt
a9fa2defdb
Add JEMALLOC_COLD, and mark some functions cold.
...
This hints to the compiler that it should care more about space than CPU (among
other things). In cases where the compiler lacks profile-guided information,
this can be a substantial space savings.
For now, we mark the mallctl or atexit driven profiling and stats functions that
take up the most space.
2021-01-04 14:55:49 -08:00
David Goldblatt
5d8e70ab26
prof_recent: cassert(config_prof) more often.
...
This tells the compiler that these functions are never called, which lets them
be optimized away in builds where profiling is disabled.
2021-01-04 14:55:49 -08:00
David Goldblatt
83cad746ae
prof_log: cassert(config_prof) in public functions
...
This lets the compiler infer that the code is dead in builds where profiling is
enabled, saving on space there.
2021-01-04 14:55:49 -08:00
David Goldblatt
526180b76d
Extent.c: Avoid an rtree NULL-check.
...
The edge case in which pages_map returns (void *)PAGE can trigger an incorrect
assertion failure. Avoid it.
2021-01-04 14:50:49 -08:00
Yinan Zhang
b35ac00d58
Do not bump to large size for page aligned request
2020-12-29 17:09:58 -08:00
Yinan Zhang
8a56d6b636
Add last-N mutex stats
2020-12-29 09:44:19 -08:00
Yinan Zhang
22d62d8cbd
Handle ending gap properly for HPA stats
2020-12-18 16:40:57 -08:00
Yinan Zhang
6c5a3a24dd
Omit bin stats rows with no data
2020-12-18 16:40:57 -08:00
Yinan Zhang
ea013d8fa4
Enforce realloc sizing stability
2020-12-18 11:41:52 -08:00
Yinan Zhang
74bd63b203
Optimize stats print using partial name-to-mib
2020-12-18 10:39:58 -08:00
Yinan Zhang
4557c0a67d
Enable ctl on partial mib and partial name
2020-12-18 10:39:58 -08:00
Yinan Zhang
006dd0414e
Add partial name-to-mib functionality
2020-12-18 10:39:58 -08:00
Yinan Zhang
f2e1a5be77
Do not fail on partial ctl path for ctl_nametomib()
...
We do not fail on partial ctl path when the given `mib` array is
shorter than the given name, and we should keep the behavior the
same in the reverse case, which I feel is also the more natural way.
2020-12-18 10:39:58 -08:00
Yinan Zhang
6ab181d2b7
Extract node lookup given mib input
2020-12-18 10:39:58 -08:00
Yinan Zhang
3a627b9674
No need to record all nodes in ctl_lookup()
2020-12-18 10:39:58 -08:00
Yinan Zhang
91e006c4c2
Enable ctl_lookup() to start from arbitrary node
2020-12-18 10:39:58 -08:00
Jin Qian
063a767ffe
Define JEMALLOC_HAS_ALLOCA_H for QNX
...
QNX has <alloca.h>
2020-12-18 10:05:59 -08:00
Jin Qian
4e3fe218e9
Use posix_madvise to purge pages when available
2020-12-18 10:05:59 -08:00
Jin Qian
26c1dc5a3a
Support AutoConf for posix_madvise and POSIX_MADV_DONTNEED
2020-12-18 10:05:59 -08:00
Jin Qian
96a59c3bb5
Fix recursive malloc during bootstrap on QNX
...
pthread_key_create on QNX triggers recursive allocation during tsd
bootstrapping. Using tsd_init_check_recursion to detect that.
Before pthread_key_create, the address of tsd_boot_wrapper is returned
from tsd_get_wrapper instead of using TLS to store the pointer.
tsd_set_wrapper becomes a no-op. After that, the address of
tsd_boot_wrapper is written to TLS and bootstrap continues as before.
Signed-off-by: Jin Qian <jqian@aurora.tech>
2020-12-18 10:05:59 -08:00
Jin Qian
986cbe4881
Disable JEMALLOC_TLS for QNX
...
TLS access triggers recurisive malloc during bootstrapping. Need to use
pthread_getspecific and pthread_setspecific with a follow up fix.
2020-12-18 10:05:59 -08:00
David Goldblatt
1e3b8636ff
HPA: Remove unused malloc_conf options.
2020-12-08 12:10:48 -08:00
Yinan Zhang
e82771807e
Cache mallctl mib for batch allocation stress test
2020-12-07 09:10:11 -08:00
Yinan Zhang
0dfdd31e0f
Add tiny batch size to batch allocation stress test
2020-12-07 09:10:11 -08:00
Aditya Kumar
9522ae41d6
Move n_search outside of assert as reported by static analyzer
2020-12-07 06:49:27 -08:00
David Goldblatt
a559caf74a
hpdata: Strengthen assertions.
...
Now that we have flat bitmap bit counting functions, we can easily assert that
nfree is always correct. While we're tightening up this code, enforce
consistency on API boundaries as well.
2020-12-07 06:21:08 -08:00
David Goldblatt
f51948d9e1
psset unit test: fix a bug.
...
The next commit adds assertions that reveal a bug in the test code
(double-free). Fix it.
2020-12-07 06:21:08 -08:00
David Goldblatt
54c94c1679
flat bitmap: add scount / ucount functions.
...
These can compute the number or set or unset bits in a subrange of the bitmap.
2020-12-07 06:21:08 -08:00
David Goldblatt
e6c057ad35
fb: implement assign in terms of a visitor.
...
We'll reuse this visitor in the next commit.
2020-12-07 06:21:08 -08:00
David Goldblatt
734e72ce8f
bit_util: Guarantee popcount's presence.
...
Implement popcount generically, so that we can rely on it being present.
2020-12-07 06:21:08 -08:00
David Goldblatt
d9f7e6c668
hpdata: Add a test.
...
We're about to make the functionality here more complicated; testing hpdata
directly (rather than relying on user's tests) will make debugging easier.
2020-12-07 06:21:08 -08:00
David Goldblatt
3ed0b4e8a3
HPA: Add an nevictions counter.
...
I.e. the number of times we've purged a hugepage-sized region.
2020-12-07 06:21:08 -08:00
David Goldblatt
fffcefed33
malloc_conf: Clarify HPA options.
2020-12-07 06:21:08 -08:00
David Goldblatt
f7cf23aa4d
psset: Relegate alloc/dalloc to test code.
...
This is no longer part of the "core" functionality; we only need the stub
implementations as an end-to-end test of hpdata + psset interactions when
metadata is being modified. Treat them accordingly.
2020-12-07 06:21:08 -08:00
David Goldblatt
f9299ca572
HPA: Use psset fit/insert/remove.
...
This will let us remove alloc_new and alloc_reuse functions from the psset.
2020-12-07 06:21:08 -08:00
David Goldblatt
0971e1e4e3
hpdata: Use addr/size instead of begin/npages.
...
This is easier for the users of the hpdata.
2020-12-07 06:21:08 -08:00
David Goldblatt
5228d869ee
psset: Use fit/insert/remove as basis functions.
...
All other functionality can be implemented in terms of these; doing so (while
retaining the same API) will be convenient for subsequent refactors.
2020-12-07 06:21:08 -08:00
David Goldblatt
089f8fa442
Move hpdata bitmap logic out of the psset.
2020-12-07 06:21:08 -08:00
David Goldblatt
ca30b5db2b
Introduce hpdata_t.
...
Using an edata_t both for hugepages and the allocations within those hugepages
was convenient at first, but has outlived its usefulness. Representing
hugepages explicitly, with their own data structure, will make future
development easier.
2020-12-07 06:21:08 -08:00
David Goldblatt
4a15008cfb
HPA unit test: skip if unsupported.
...
Previously, we replicated the logic in hpa_supported in the test as well.
2020-12-07 06:21:08 -08:00
David Goldblatt
43af63fff4
HPA: Manage whole hugepages at a time.
...
This redesigns the HPA implementation to allow us to manage hugepages all at
once, locally, without relying on a global fallback.
2020-12-07 06:21:08 -08:00
David Goldblatt
63677dde63
Pages: Statically detect if pages_huge may succeed
2020-12-07 06:21:08 -08:00
David Goldblatt
c1b2a77933
psset: Move in stats.
...
A later change will benefit from having these functions pulled into a
psset-module set of functions.
2020-12-07 06:21:08 -08:00
David Goldblatt
d0a991d47b
psset: Add insert/remove functions.
...
These will allow us to (for instance) move pageslabs from a psset dedicated to
not-yet-hugeified pages to one dedicated to hugeified ones.
2020-12-07 06:21:08 -08:00