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
cc04761271
gc_object_set_remembered returns nonzero on success
2024-10-01 14:36:55 +02:00
Andy Wingo
4aa5d04f08
Fix sense of "large_object_space_is_copied".
...
* src/large-object-space.h (large_object_space_is_copied): I don't
understand why or how it was like it was!
2024-10-01 13:18:15 +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
3955d2ad96
Factor out locking utils to separate header
2024-09-30 20:52:45 +02:00
Andy Wingo
691c777e7b
Fix ABA problem in the copy space
...
Same concerns as the previous fix to the nofl space.
2024-09-30 12:29:35 +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
a411599d87
Update README.md
2024-09-18 11:56:54 +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
2b59efd9fc
Fix semi-space with fixed-sized heaps
2024-09-16 15:06:50 +02:00
Andy Wingo
506b4187fc
Update manual
2024-09-16 14:33:30 +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
317039d952
Relax assertion when expanding the heap
...
It could be that newly mapped blocks were already acquired by other threads.
2024-09-16 13:07:25 +02:00
Andy Wingo
dcfdc547f6
Whoops, fix refactor-induced locking problem
2024-09-16 11:45:01 +02:00
Andy Wingo
cf570d0206
Don't release shared worklist buffers when less than 256 kB
...
Fixes https://github.com/wingo/whippet/issues/8 .
2024-09-16 10:51:07 +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
d19366bea2
Remove mention of concurrent marking for mmc
2024-09-10 11:35:28 +02:00
Andy Wingo
48085393f3
Update some doc links
2024-09-10 11:31:55 +02:00
Andy Wingo
4cdb47de6a
There are four lights
2024-09-10 11:28:15 +02:00
Andy Wingo
1ff082705e
Remove scc
...
PCC with GC_PARALLEL=0 is exactly equivalent to SCC. Also now that PCC
will dynamically avoid atomic forwarding if parallelism is disabled at
run-time, there is no need to keep SCC around.
2024-09-10 11:10:47 +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
2915b052e4
Whoops, typo on mmc docs
2024-09-02 14:20:52 +02:00
Andy Wingo
519949edf3
Update .gitignore
2024-09-02 13:24:38 +02:00
Andy Wingo
44a7240e16
Rename "whippet" collector to "mmc": mostly marking collector
2024-09-02 13:19:05 +02:00
Andy Wingo
cf129f10de
nofl: Block marks are bytes
...
There was no need to use a bitvector, and the marks were only being
partially cleared. More straightforward (and still low overhead) as
bytes.
2024-08-30 21:20:34 +02:00
Andy Wingo
8d6db735fd
Nofl space can have discontiguous slabs
2024-08-30 16:53:20 +02:00
Andy Wingo
1a7d08baac
Add separate extents header
...
Will be useful to let slab heaps grow.
2024-08-30 16:53:20 +02:00
Andy Wingo
c949e4e4a9
Refactor representation of blocks in nofl space
2024-08-30 16:53:20 +02:00
Andy Wingo
a180be0cbd
Merge pull request #4 from Z572/fix-doc
...
fix guile.md link
2024-08-26 09:23:40 +02:00
Andy Wingo
59b85abbda
Fix regarding memset of block marks
2024-08-25 20:46:05 +02:00
Andy Wingo
59c9f5dff9
Mark blocks that are targets of evacuation
2024-08-25 08:58:55 +02:00
Andy Wingo
7b4a56c51a
nofl: Fix sticky mark bit treatment for block marks
2024-08-25 08:45:17 +02:00
Andy Wingo
b8c0fa0e90
nofl: simplify sweeping
...
No more need to identify empties during sweeping, as that is done
eagerly during the pause.
2024-08-24 21:52:47 +02:00
Andy Wingo
6dcec272b1
nofl: eagerly sweep empty blocks
2024-08-24 21:31:07 +02:00
Andy Wingo
010185f729
nofl: Refactor to trace visitor
2024-08-24 16:38:11 +02:00
Andy Wingo
7db72e7f80
whippet: ensure mutators release allocators before start_gc
2024-08-24 09:09:23 +02:00
Andy Wingo
19fdd481d5
Fix some corner cases with hole zeroing of empty blocks
2024-08-23 21:20:40 +02:00
Andy Wingo
d137e1397c
Instead of partitioning blocks by flag, put them in separate lists
...
This way you can directly iterate blocks of a certain kind. Also verify
these lists more thoroughly, and allow full blocks that are the results
of evacuation to skip being swept the next round. Also! Have
next_hole_in_block / next_hole_in_block ensure that the object data and
the mark bytes are clear.
2024-08-22 21:47:15 +02:00
Andy Wingo
b663e5878e
nofl: Refactor evacuation allocation to be thread-local
...
This relaxes a "reliability" requirement, as in
https://wingolog.org/archives/2024/07/10/copying-collectors-with-block-structured-heaps-are-unreliable .
2024-08-21 15:07:50 +02:00
Andy Wingo
004a3d0411
Factor nofl-space out of whippet
2024-08-21 10:19:26 +02:00