David Goldblatt
6513d9d923
Emap: Move over deregistration boundary functions.
2020-02-17 10:50:51 -08:00
David Goldblatt
9b5ca0b09d
Emap: Move in slab interior registration.
2020-02-17 10:50:51 -08:00
David Goldblatt
d05b61db4a
Emap: Move extent boundary registration in.
2020-02-17 10:50:51 -08:00
David Goldblatt
ca21ce4071
Emap: Move in write_acquired from extent.
2020-02-17 10:50:51 -08:00
David Goldblatt
01f255161c
Add emap, for tracking extent locking.
2020-02-17 10:50:51 -08:00
Qi Wang
0f686e82a3
Avoid variable length array with length 0.
2020-02-16 14:14:07 -08:00
Yinan Zhang
68e8ddcaff
Add mallctl for dumping last-N profiling records
2020-02-14 12:46:38 -08:00
Qi Wang
ba0e35411c
Rework the bin locking around tcache refill / flush.
...
Previously, tcache fill/flush (as well as small alloc/dalloc on the arena) may
potentially drop the bin lock for slab_alloc and slab_dalloc. This commit
refactors the logic so that the slab calls happen in the same function / level
as the bin lock / unlock. The main purpose is to be able to use flat combining
without having to keep track of stack state.
In the meantime, this change reduces the locking, especially for slab_dalloc
calls, where nothing happens after the call.
2020-02-13 23:31:54 -08:00
Qi Wang
ca1f082251
Disallow merge across mmap regions to preserve SN / first-fit.
...
Check the is_head state before merging two extents. Disallow the merge if it's
crossing two separate mmap regions. This enforces first-fit (by not losing the
SN) at a very small cost.
2020-02-13 12:18:44 -08:00
Yinan Zhang
7014f81e17
Add ASSURED_WRITE in mallctl
2020-02-05 15:29:14 -08:00
Yinan Zhang
9cac3fa8f5
Encapsulate buffer allocation in buffered writer
2020-02-04 13:21:58 -08:00
Yinan Zhang
bdc08b5158
Better naming buffered writer
2020-02-04 13:21:58 -08:00
Qi Wang
e896522616
Abbreviate thread-event to te.
2020-02-04 13:07:05 -08:00
Qi Wang
5e500523a0
Remove thread_event_boot().
2020-02-04 00:18:15 -08:00
Qi Wang
97dd79db6c
Implement deallocation events.
...
Make the event module to accept two event types, and pass around the event
context. Use bytes-based events to trigger tcache GC on deallocation, and get
rid of the tcache ticker.
2020-02-04 00:18:15 -08:00
zoulasc
536ea6858e
NetBSD specific changes:
...
- NetBSD overcommits
- When mapping pages, use the maximum of the alignment requested and the
compiled-in PAGE constant which might be greater than the current kernel
pagesize, since we compile binaries with the maximum page size supported
by the architecture (so that they work with all kernels).
2020-02-03 15:49:36 -08:00
Qi Wang
974222c626
Add safety check on sdallocx slow / sampled path.
2020-01-31 00:04:22 -08:00
Qi Wang
88d9eca848
Enforce page alignment for sampled allocations.
...
This allows sampled allocations to be checked through alignment, therefore
enable sized deallocation regardless of cache_oblivious.
2020-01-31 00:04:22 -08:00
Qi Wang
0f552ed673
Don't purge huge extents when decay is off.
2020-01-30 14:40:38 -08:00
Qi Wang
38a48e5741
Set reentrancy to 1 for tsd_state_purgatory.
...
Reentrancy is already set for other non-nominal tsd states (reincarnated and
minimal_initialized). Add purgatory to be safe and consistent.
2020-01-30 13:55:20 -08:00
Qi Wang
88b0e03a4e
Implement opt.stats_interval and the _opts options.
...
Add options stats_interval and stats_interval_opts to allow interval based stats
printing. This provides an easy way to collect stats without code changes,
because opt.stats_print may not work (some binaries never exit).
2020-01-29 09:57:55 -08:00
Qi Wang
d71a145ec1
Chagne prof_accum_t to counter_accum_t for general purpose.
2020-01-29 09:57:55 -08:00
David Goldblatt
d92f0175c7
Introduce NEITHER_READ_NOR_WRITE in ctl.
...
This is slightly clearer in meaning. A function that is both READONLY() and
WRITEONLY() is in fact neither one.
2020-01-22 18:29:13 -08:00
David Goldblatt
6a622867ca
Add "thread.idle" mallctl.
...
This can encapsulate various internal cleaning logic, and can be used to free up
resources before a long sleep.
2020-01-22 18:29:13 -08:00
Yinan Zhang
f81341a48b
Fallback to unbuffered printing if OOM
2020-01-21 17:09:44 -08:00
Yinan Zhang
84b28c6a13
Properly handle tdata deletion race
2020-01-21 16:51:26 -08:00
Yinan Zhang
d331208560
Get rid of redundant logic in prof
2020-01-21 16:51:26 -08:00
Yinan Zhang
7b67ed0b5a
Get rid of lock overlap in prof_recent_alloc_reset
2020-01-21 16:51:26 -08:00
David Goldblatt
bd3be8e0b1
Remove commit parameter to ecache functions.
...
No caller ever wants uncommitted memory.
2020-01-17 10:54:56 -08:00
Yinan Zhang
b8df719d5c
No tdata creation for backtracing on dying thread
2020-01-16 21:54:14 -08:00
Qi Wang
dab81bd315
Rework and fix the assertions on malloc fastpath.
...
The first half of the malloc fastpath may execute before malloc_init. Make the
assertions work in that case.
2020-01-14 15:00:41 -08:00
Yinan Zhang
ad3f3fc561
Fetch time after tctx and only for samples
2020-01-14 14:36:20 -08:00
Qi Wang
a5d3dd4059
Fix an assertion on extent head state with dss.
2020-01-10 13:29:14 -08:00
Yinan Zhang
2b604a3016
Record request size in prof recent entries
2020-01-10 12:01:01 -08:00
Yinan Zhang
40a391408c
Define constructor for buffered writer argument
2020-01-10 11:59:02 -08:00
Yinan Zhang
6d8e616902
Make buffered writer an independent module
2020-01-10 11:59:02 -08:00
Yinan Zhang
6b6b4709b3
Unify buffered writer naming
2020-01-09 14:31:31 -08:00
Yinan Zhang
9a60cf54ec
Last-N profiling mode
2019-12-30 15:58:57 -08:00
Yinan Zhang
3fa142cf39
Remove _externs from prof internal header names
2019-12-23 11:14:15 -08:00
Yinan Zhang
112dc36dd5
Handle log_mtx during forking
2019-12-20 17:17:48 -08:00
Yinan Zhang
ea42174d07
Refactor profiling headers
2019-12-20 17:17:48 -08:00
David Goldblatt
6342da0970
Ehooks: Further optimize default merge case.
...
This avoids the cost of an iealloc in cases where the user uses the default
merge hook without using the default extent hooks.
2019-12-20 10:18:40 -08:00
David Goldblatt
f2f2084e79
Ehooks: Assert alloc isn't NULL
2019-12-20 10:18:40 -08:00
David Goldblatt
e210ccc57e
Move extent2 -> extent.
...
Eventually, we may fully break off the extent module; but not for some time. If
it's going to live on in a non-transitory state, it might as well have the nicer
name.
2019-12-20 10:18:40 -08:00
David Goldblatt
2f4fa80414
Rename extents -> ecache.
2019-12-20 10:18:40 -08:00
David Goldblatt
56cc56b692
Break extent split dependence on arena.
2019-12-20 10:18:40 -08:00
David Goldblatt
0aa9769fb0
Break commit functions' arena dependence
2019-12-20 10:18:40 -08:00
David Goldblatt
48ec5d4355
Break extent_coalesce arena dependence
2019-12-20 10:18:40 -08:00
David Goldblatt
282a382326
Extent: Break [de]activation's arena dependence.
2019-12-20 10:18:40 -08:00
David Goldblatt
576d7047ab
Ecache: Should know its arena_ind.
...
What we call an arena_ind is really the index associated with some particular
set of ehooks; the arena is just the user-visible portion of that. Making this
explicit, and reframing checks in terms of that, makes the code simpler and
cleaner, and helps us avoid passing the arena itself all throughout extent code.
This lets us put back an arena-specific assert.
2019-12-20 10:18:40 -08:00
David Goldblatt
372042a082
Remove merge dependence on the arena.
2019-12-20 10:18:40 -08:00
David Goldblatt
439219be7e
Remove extent_can_coalesce arena dependency.
2019-12-20 10:18:40 -08:00
David Goldblatt
9cad5639ff
Ehooks: remove arena_ind parameter.
...
This lives within the ehooks_t now, so that callers don't need to know it.
2019-12-20 10:18:40 -08:00
David Goldblatt
57fe99d4be
Move relevant index into the ehooks_t itself.
...
It's always passed into the ehooks; keeping it colocated lets us avoid passing
the arena everywhere.
2019-12-20 10:18:40 -08:00
David Goldblatt
c792f3e4ab
edata_cache: Remember the associated base_t.
...
This will save us some trouble down the line when we stop passing arena pointers
everywhere; we won't have to pass around a base_t pointer either.
2019-12-20 10:18:40 -08:00
David Goldblatt
ae23e5f426
Unify extent_alloc_wrapper with the other wrappers.
...
Previously, it was really more like extents_alloc (it looks in an ecache for an
extent to reuse as its primary allocation pathway). Make that pathway more
explciitly like extents_alloc, and rename extent_alloc_wrapper_hard accordingly.
2019-12-20 10:18:40 -08:00
David Goldblatt
d8b0b66c6c
Put extent_state_t into ecache as well as eset.
2019-12-20 10:18:40 -08:00
David Goldblatt
98eb40e563
Move delay_coalesce from the eset to the ecache.
2019-12-20 10:18:40 -08:00
David Goldblatt
bb70df8e5b
Extent refactor: Introduce ecache module.
...
This will eventually completely wrap the eset, and handle concurrency,
allocation, and deallocation. For now, we only pull out the mutex from the
eset.
2019-12-20 10:18:40 -08:00
David Goldblatt
0704516245
Ehooks: Add head tracking.
2019-12-20 10:18:40 -08:00
David Goldblatt
09475bf8ac
extent_may_dalloc -> ehooks_dalloc_will_fail
2019-12-20 10:18:40 -08:00
David Goldblatt
7859184179
Pull out edata_t caching into its own module.
2019-12-20 10:18:40 -08:00
David Goldblatt
a7862df616
Rename extent_t to edata_t.
...
This frees us up from the unfortunate extent/extent2 naming collision.
2019-12-20 10:18:40 -08:00
David Goldblatt
865debda22
Rename extent.h -> edata.h.
...
This name is slightly pithier; a full-on rename will come shortly.
2019-12-20 10:18:40 -08:00
David Goldblatt
a738a66b5c
Ehooks: Add some debug zero and addr checks.
...
These help make sure that the ehooks return properly zeroed memory when required
to.
2019-12-20 10:18:40 -08:00
David Goldblatt
4b2e5ee8b9
Ehooks: Add a "zero" ehook.
...
This is the first API expansion. It lets the hooks pick where and how to purge
within themselves.
2019-12-20 10:18:40 -08:00
David Goldblatt
d0f187ad3b
Arena: Loosen arena_may_have_muzzy restrictions.
...
If there are custom extent hooks, pages_can_purge_lazy is not necessarily the
right guard. We could check ehooks_are_default too, but the case where
purge_lazy is unsupported is rare and getting rarer. Just checking the decay
interval captures most of the benefit.
2019-12-20 10:18:40 -08:00
David Goldblatt
ebbb973271
Base: Remove some unnecessary reentrancy guards.
...
The ehooks module will now call these if necessary.
2019-12-20 10:18:40 -08:00
David Goldblatt
403f2d1664
Extents: Split out introspection functionality.
...
This isn't really part of the core extent allocation facilities. Especially as
this module grows, having it in its own place may come in handy.
2019-12-20 10:18:40 -08:00
David Goldblatt
92a511d385
Make extent module hermetic.
...
In the form of extent2.h. The naming leaves something to be desired, but I'll
leave that for a later diff.
2019-12-20 10:18:40 -08:00
David Goldblatt
e08c581cf1
Extent: Get rid of extent-specific pre/post reentrancy calls.
...
These are taken care of by the ehook module; the extra increments and
decrements are safe but unnecessary.
2019-12-20 10:18:40 -08:00
David Goldblatt
39fdc690a0
Ehooks comments and cleanup.
2019-12-20 10:18:40 -08:00
David Goldblatt
c8dae890c8
Extent -> Ehooks: Move over default hooks.
2019-12-20 10:18:40 -08:00
David Goldblatt
2fe5108263
Extent -> Ehooks: Move merge hook.
2019-12-20 10:18:40 -08:00
David Goldblatt
1fff4d2ee3
Extent -> Ehooks: Move split hook.
2019-12-20 10:18:40 -08:00
David Goldblatt
a5b42a1a10
Extent -> Ehooks: Move purge_forced hook.
2019-12-20 10:18:40 -08:00
David Goldblatt
368baa42ef
Extent -> Ehooks: Move purge_lazy hook.
2019-12-20 10:18:40 -08:00
David Goldblatt
f83fdf5336
Extent: Clean up a comma
2019-12-20 10:18:40 -08:00
David Goldblatt
d78fe241ac
Extent -> Ehooks: Move commit and decommit hooks.
2019-12-20 10:18:40 -08:00
David Goldblatt
5459ec9dae
Extent -> Ehooks: Move destroy hook.
2019-12-20 10:18:40 -08:00
David Goldblatt
bac8e2e5a6
Extent -> Ehooks: Move dalloc hook.
2019-12-20 10:18:40 -08:00
David Goldblatt
dc8b4e6e13
Extent -> Ehooks: Move alloc hook.
2019-12-20 10:18:40 -08:00
David Goldblatt
ae0d8e8591
Move extent ehook calls into ehooks
2019-12-20 10:18:40 -08:00
David Goldblatt
ba8b9ecbcb
Add ehooks module
2019-12-20 10:18:40 -08:00
David Goldblatt
9f6eb09585
Extents: Eagerly initialize extent hooks.
...
When deferred initialization was added, initializing required copying
sizeof(extent_hooks_t) bytes after a pointer chase. Today, it's just a single
pointer loaded from the base_t. In subsequent diffs, we'll get rid of even that.
2019-12-20 10:18:40 -08:00
David Goldblatt
4278f84603
Move extent hook getters/setters to arena.c
...
This is where they're logically scoped; they access arena data.
2019-12-20 10:18:40 -08:00
Wenbo Zhang
9226e1f0d8
fix opt.thp:never still use THP with base_new
2019-12-19 13:27:00 -08:00
Qi Wang
d5031ea824
Allow dallocx and sdallocx after tsd destruction.
...
After a thread turns into purgatory / reincarnated state, still allow dallocx
and sdallocx to function normally.
2019-12-19 11:17:03 -08:00
Yinan Zhang
4afd709d1f
Restructure setters for profiling info
...
Explicitly define three setters:
- `prof_tctx_reset()`: set `prof_tctx` to `1U`, if we don't know in
advance whether the allocation is large or not;
- `prof_tctx_reset_sampled()`: set `prof_tctx` to `1U`, if we already
know in advance that the allocation is large;
- `prof_info_set()`: set a real `prof_tctx`, and also set other
profiling info e.g. the allocation time.
Code structure wise, the prof level is kept as a thin wrapper, the
large level only provides low level setter APIs, and the arena level
carries out the main logic.
2019-12-17 10:01:28 -08:00
Yinan Zhang
1d01e4c770
Initialization utilities for nstime
2019-12-16 16:08:56 -08:00
Qi Wang
dd649c9485
Optimize away the tsd_fast() check on fastpath.
...
Fold the tsd_state check onto the event threshold check. The fast threshold is
set to 0 when tsd switch to non-nominal.
The fast_threshold can be reset by remote threads, to refect the non nominal tsd
state change.
2019-12-11 23:44:20 -08:00
Qi Wang
1decf958d1
Fix incorrect usage of cassert.
2019-12-11 14:02:59 -08:00
Yinan Zhang
45836d7fd3
Pass nstime_t pointer for profiling
2019-12-11 11:38:16 -08:00
Yinan Zhang
7d2bac5a38
Refactor destroy code path for prof_tctx
2019-12-10 16:31:05 -08:00
Yinan Zhang
055478cca8
Threshold is no longer updated before prof_realloc()
2019-12-10 16:31:05 -08:00
Yinan Zhang
7e3671911f
Get rid of old indentation style for prof
2019-12-06 09:47:51 -08:00
Yinan Zhang
dfdd46f6c1
Refactor prof_tctx_t creation
2019-12-06 09:47:51 -08:00
Yinan Zhang
aa1d71fb7a
Rename prof_tctx to alloc_tctx in prof_info_t
2019-12-06 09:47:51 -08:00
Yinan Zhang
5e0b090992
No need to pass usize to prof_tctx_set()
2019-12-06 09:47:51 -08:00
David Goldblatt
1b1e76acfe
Disable some spuriously-triggering warnings
2019-12-04 13:45:17 -08:00