| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
As title.
|
|
|
|
|
| |
Compiler optimizations may produce traces more than expected. Instead verify
the lower bound only.
|
|
|
|
|
|
| |
The analytics tool is put under experimental.utilization namespace in
mallctl. Input is one pointer or an array of pointers and the output
is a list of memory utilization statistics.
|
|
|
|
|
| |
The test attempts to trigger usage of multiple sharded bins, which percpu_arena
makes it less reliable.
|
|
|
|
| |
This change improves memory usage slightly, at virtually no CPU cost.
|
|
|
|
|
| |
The keyword huge tend to remind people of huge pages which is not relevent to
the feature.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
- Make API more clear for using as standalone json emitter
- Support cases that weren't possible before, e.g.
- emitting primitive values in an array
- emitting nested arrays
|
|
|
|
|
|
|
| |
The global data is mostly only used at initialization, or for easy access to
values we could compute statically. Instead of consuming that space (and
risking TLB misses), we can just pass around a pointer to stack data during
bootstrapping.
|
|
|
|
|
|
| |
The largest small class, smallest large class, and largest large class may all
be needed down fast paths; to avoid the risk of touching another cache line, we
can make them available as constants.
|
| |
|
|
|
|
| |
Also, add the bit_util test back to the Makefile.
|
|
|
|
|
|
|
|
|
| |
This class removes almost all the dependencies on size_classes.h, accessing the
data there only via the new module sc.h, which does not depend on any
configuration options.
In a subsequent commit, we'll remove the configure-time size class computations,
doing them at boot time, instead.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Before this commit jemalloc produced many warnings when compiled with -Wextra
with both Clang and GCC. This commit fixes the issues raised by these warnings
or suppresses them if they were spurious at least for the Clang and GCC
versions covered by CI.
This commit:
* adds `JEMALLOC_DIAGNOSTIC` macros: `JEMALLOC_DIAGNOSTIC_{PUSH,POP}` are
used to modify the stack of enabled diagnostics. The
`JEMALLOC_DIAGNOSTIC_IGNORE_...` macros are used to ignore a concrete
diagnostic.
* adds `JEMALLOC_FALLTHROUGH` macro to explicitly state that falling
through `case` labels in a `switch` statement is intended
* Removes all UNUSED annotations on function parameters. The warning
-Wunused-parameter is now disabled globally in
`jemalloc_internal_macros.h` for all translation units that include
that header. It is never re-enabled since that header cannot be
included by users.
* locally suppresses some -Wextra diagnostics:
* `-Wmissing-field-initializer` is buggy in older Clang and GCC versions,
where it does not understanding that, in C, `= {0}` is a common C idiom
to initialize a struct to zero
* `-Wtype-bounds` is suppressed in a particular situation where a generic
macro, used in multiple different places, compares an unsigned integer for
smaller than zero, which is always true.
* `-Walloc-larger-than-size=` diagnostics warn when an allocation function is
called with a size that is too large (out-of-range). These are suppressed in
the parts of the tests where `jemalloc` explicitly does this to test that the
allocation functions fail properly.
* adds a new CI build bot that runs the log unit test on CI.
Closes #1196 .
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
The feature allows using a dedicated arena for huge allocations. We want the
addtional arena to separate huge allocation because: 1) mixing small extents
with huge ones causes fragmentation over the long run (this feature reduces VM
size significantly); 2) with many arenas, huge extents rarely get reused across
threads; and 3) huge allocations happen way less frequently, therefore no
concerns for lock contention.
|
|
|
|
|
|
|
| |
Previously, we made the user deal with this themselves, but that's not good
enough; if hooks may allocate, we should test the allocation pathways down
hooks. If we're doing that, we might as well actually implement the protection
for the user.
|
|
|
|
|
| |
When we run out of space in which to store hooks, we should return EAGAIN from
the mallctl, but not otherwise misbehave.
|
| |
|
|
|
|
|
| |
This simplifies the mallctl call to install a hook, which should only take a
single argument.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
The hook module allows a low-reader-overhead way of finding hooks to invoke and
calling them.
For now, none of the allocation pathways are tied into the hooks; this will come
later.
|
|
|
|
|
| |
This allows fast reader-writer concurrency in cases where writers are rare. The
immediate use case is for the hooking implementaiton.
|
|
|
|
|
|
| |
"Hooks" is really the best name for the module that will contain the publicly
exposed hooks. So lets rename the current "hooks" module (that hook external
dependencies, for reentrancy testing) to "test_hooks".
|
|
|
|
|
| |
This gives any thread the ability to send other threads down slow paths the next
time they fetch tsd.
|
|
|
|
|
| |
Shortly, tsd state will be atomic and have some complicated enough logic down
the state-setting path that we should be aware of it.
|
|
|
|
|
| |
We may set number of background threads separately, e.g. through
--with-malloc-conf, so avoid assuming the default number in the test.
|
| |
|
|
|
|
|
| |
Implement a new mallctl operation that allows looking up the arena a
region of memory belongs to.
|
|
|
|
|
| |
Looking at the thread counts in our services, jemalloc's background thread
is useful, but mostly idle. Add a config option to tune down the number of threads.
|
| |
|
|
|
|
| |
Add cast since read / write has unsigned return type on windows.
|
|
|
|
|
| |
1) make sure background thread 0 is always created; and 2) fix synchronization
between thread 0 and the control thread.
|
|
|
|
| |
This is needed for things like mutex stats in table mode.
|
|
|
|
|
|
| |
The emitter can be used to produce structured json or tabular output. For now
it has no uses; in subsequent commits, I'll begin transitioning stats printing
code over.
|
|
|
|
|
|
|
|
| |
"always" marks all user mappings as MADV_HUGEPAGE; while "never" marks all
mappings as MADV_NOHUGEPAGE. The default setting "default" does not change any
settings. Note that all the madvise calls are part of the default extent hooks
by design, so that customized extent hooks have complete control over the
mappings including hugepage settings.
|
|
|
|
|
|
| |
We have a buffer overrun that manifests in the case where arena indices higher
than the number of CPUs are accessed before arena indices lower than the number
of CPUs. This fixes the bug and adds a test.
|
| |
|
|
|
|
|
| |
In the process, kill arena_bin_index, which is unused. To follow are several
diffs continuing this separation.
|