Andy Wingo
1a79c3a451
mmc: only serialize root-tracing if there are pinned roots
2024-10-04 11:41:08 +02:00
Andy Wingo
b5c36b9fd8
Explicitly support immediate values
...
Because we have to deref edges ourselves, as part of generational
marking, we need to ignore edges that don't point to heap objects.
2024-10-04 11:40:09 +02:00
Andy Wingo
1ecb45a437
Switch mmc to field-logging write barrier
...
Instead of the card table, use metadata bytes for field-logging. More
precision should lead to less work during the pause.
2024-10-02 21:25:09 +02:00
Andy Wingo
1493bf6398
Add gc_object_is_old_generation
...
Will be useful for write barriers.
2024-10-01 15:48:55 +02:00
Andy Wingo
42bf36d7cc
Add nursery for lospace
2024-10-01 14:38:08 +02:00
Andy Wingo
8e1574491a
Fix ephemerons test for mmc
...
Change to avoid detecting OOM based on no allocation since last GC, if
the collection was explicitly triggered by the user.
2024-10-01 13:16:43 +02:00
Andy Wingo
1f4e3bdf37
Add field-logging write barrier (fast path only)
...
Add a new kind of write barrier, one which has a bit per field; the
mutator that sets the bit will need to add the field's location (the
edge) to a remembered set. Here we just have the fast-path
implementation.
2024-10-01 10:34:27 +02:00
Andy Wingo
326e925f4c
Fix an ABA problem in the nofl space
...
We use Treiber stacks to represent sets of blocks: blocks to sweep, full
blocks, and so on. This is fine as long as we are only adding to or
only removing from those sets, but as soon as we have concurrent add and
remove, we need to avoid the ABA problem.
Concurrent add and remove occurs for partly-full blocks, which are both
acquired and released by mutators; empty blocks, which can be added to
by heap growth at the same time as the mutator acquires them; and the
paged-out queue, which is also concurrent with heap growth/shrinkage.
2024-09-30 10:59:47 +02:00
Andy Wingo
8fba0e5322
Implement cooperative safepoint API
...
Fixes https://github.com/wingo/whippet/issues/9 .
2024-09-18 11:54:36 +02:00
Andy Wingo
9f26dbb1fc
Implement per-object pinning API
...
Fixes https://github.com/wingo/whippet/issues/6 .
2024-09-18 10:55:02 +02:00
Andy Wingo
a722b9c13f
Force major GC before signalling OOM
2024-09-16 15:46:49 +02:00
Andy Wingo
b7306950bc
Implement adaptive heap sizing for semi
2024-09-16 14:19:54 +02:00
Andy Wingo
1bf250f62a
Heap growth can compete with lospace for nofl blocks
2024-09-16 13:40:09 +02:00
Andy Wingo
7984f60eae
MMC and PCC defer actual page-out operations to background thread
...
Should avoid excessive VM traffic when allocating large objects, or when
the adaptive heap sizer is on and we see frequent expansions and
resizes.
2024-09-16 10:00:01 +02:00
Andy Wingo
d785f082b1
Factor out adapative heap sizer background thread to own file
...
This will let us piggy-back on the thread to asynchronously release
memory to the OS.
2024-09-16 10:00:01 +02:00
Andy Wingo
2818958c59
First version of adaptive heap sizing for pcc and mcc
2024-09-16 09:59:55 +02:00
Andy Wingo
6545b34073
Reorder events in event listener; refactors to mmc and pcc
...
In GC, request mutators to stop before doing anything else; changes the
order of the event listener interface. Also, refactor mmc to look more
like pcc.
2024-09-10 10:55:38 +02:00
Andy Wingo
9f437485ec
MMC marks roots in parallel during the pause, not while stopping
...
Following the analysis in
https://wingolog.org/archives/2024/09/06/on-taking-advantage-of-ragged-stops ,
we simplify MMC by traversing roots only during the pause. This lets us
use gc_tracer parallel root-tracing.
2024-09-09 15:03:49 +02:00
Andy Wingo
8604ad6beb
mmc reformatting
2024-09-08 09:54:16 +02:00
Andy Wingo
44a7240e16
Rename "whippet" collector to "mmc": mostly marking collector
2024-09-02 13:19:05 +02:00