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
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
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
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
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
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
703fbc0ff5
Introduce unsafe reentrancy guards.
...
We have to work to circumvent the safety checks in pre_reentrancy when going
down extent hook pathways. Instead, let's explicitly have checked and unchecked
guards.
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
837119a948
base_structs.h: Remove some mid-line tabs.
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
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
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
Yinan Zhang
6945371778
Change tsdn to tsd for profiling code path
2019-11-22 16:31:56 -08:00