Andy Wingo
5fbd21a7c3
Add USER-GUIDE.md
2023-08-06 10:43:42 +02:00
Andy Wingo
e270290242
Allow large object space to be part of remembered set
2023-03-15 09:34:12 +01:00
Andy Wingo
d0b8f6838d
Rework fast/slow path alloc API
...
This lets users do gc_allocate_fast() and know that if they got a
non-NULL result, we could allocate without GC, and so no object was
moved.
2023-03-14 14:35:20 +01:00
Andy Wingo
62f4b045f8
BDW supports growable heap
2023-02-28 22:02:49 +01:00
Andy Wingo
51168fd96e
ephemerons benchmark takes gc options
2023-02-28 11:30:51 +01:00
Andy Wingo
f657cd3847
quads benchmark takes gc-options param
2023-02-28 11:24:33 +01:00
Andy Wingo
157037dd1f
Fix parallelism in quads benchmark
2023-02-28 11:20:50 +01:00
Andy Wingo
9576558a34
Rework mtbench to take GC options string instead of parallelism
2023-02-28 11:19:42 +01:00
Andy Wingo
f15eb3bd10
Add enum heap policy parsing
2023-02-28 11:19:42 +01:00
Andy Wingo
898f7aa935
Implement resizing of semi-space heap
...
Not yet hooked up to any demo, though.
2023-02-28 11:19:39 +01:00
Andy Wingo
c42c538aaa
gc_init takes const gc_options
2023-02-28 09:40:28 +01:00
Andy Wingo
8edfd42ca1
Rework semi-space collector to separate regions
...
This is a preparation for heap growth and shrinking.
2023-02-28 09:40:28 +01:00
Andy Wingo
f0ad02d6ee
Fix parsing options from string, doh
2023-02-28 09:40:28 +01:00
Andy Wingo
4cb26e0144
Rework options interface
...
Users will want to set options from an environment variable or something
like that. Particular GC implementations will want to expose an
expanded set of options. For these reasons we make the options
interface a bit more generalized and include parsing.
2023-02-15 20:07:14 +01:00
Andy Wingo
499ff1fe76
Update README
2023-01-23 20:57:02 +01:00
Andy Wingo
78da8d5811
Add ephemeron implementation
...
This commit adds support for ephemerons to the API and wires it into the
collectors. It also adds a new test.
2023-01-23 20:56:25 +01:00
Andy Wingo
44f37a373c
Add gc_collect(mutator) API
2023-01-23 11:16:45 +01:00
Andy Wingo
1b3bc2f3b5
Use "stack-conservative" and "heap-conservative" terms
...
Thanks to Steve Blackburn for the terms.
2022-12-02 09:07:24 +01:00
Andy Wingo
c614c2e40b
Refactor embedder interface for conservative GC
...
Now users don't have to #ifdef on conservative vs precise tracing; it's
just a generic embedder concern.
2022-10-26 11:59:56 +02:00
Andy Wingo
910b62af8f
Add conservative heap tracing (not just roots)
...
Also accelerate mark_space_live_object_granules.
2022-10-26 10:37:55 +02:00
Andy Wingo
053dbf0b61
Pass heap to tracer functions
...
This will allow conservative intra-heap edges. Hopefully no overhead?
2022-10-25 14:25:55 +02:00
Andy Wingo
5e986e84e9
Update README
2022-10-03 16:12:06 +02:00
Andy Wingo
703bb30e19
add conservative makefile targets
2022-10-03 16:09:21 +02:00
Andy Wingo
1944b54a19
Whippet can trace conservative roots
...
Next up, enabling it via the makefiles.
2022-10-03 16:09:21 +02:00
Andy Wingo
deed415a06
Whippet captures stack when stopping mutators
...
This is part of work to enable conservative GC.
2022-10-03 16:09:21 +02:00
Andy Wingo
d2bde8319f
Add conservative stack capture
...
This isn't really wired up yet anywhere, but add a precursor to
conservative stack scanning.
2022-10-03 16:09:21 +02:00
Andy Wingo
a5b1a66d21
Add platform abstraction
...
This will allow us to iterate conservative roots from stacks and static
data segments.
2022-10-03 16:09:21 +02:00
Andy Wingo
05d2c95950
mt-gcbench: Only crash when tracing holes for precise GC
2022-10-03 16:09:21 +02:00
Andy Wingo
e328346bbd
Refactor alignment utilities in whippet.c
...
Add align_up and align_down helpers.
2022-10-03 15:37:16 +02:00
Andy Wingo
24bd94d9f7
Fix race condition in computation of mark-while-stopping
...
Choose the ragged stop strategy when the GC kind is determined, so that
we do so with respect to a single measurement of pending unavailable
bytes.
Also remove assert in heap_should_mark_while_stopping, as it can be
called after stopping too, when evacuation is enabled.
2022-10-03 15:37:16 +02:00
Andy Wingo
1e3122d054
trace_worker_steal first does a try_pop on its own deque
...
Before asking other threads for values, see if there is any pending data
that overflowed from the local mark stack.
2022-10-03 15:37:16 +02:00
Andy Wingo
8b8ddaf6e2
work-stealing optimization: stay with last-stolen worker
...
Previously we were always going round-robin. Now a thief tries to
plunder its victim again directly. Should result in less churn.
2022-10-03 15:37:16 +02:00
Andy Wingo
56aad402c9
Fix bug in try_pop on chase-lev deque
...
The counters are unsigned, so that they can overflow. (Is that really
necessary though?) In any case try_pop can decrement a counter, leading
to a situation where you can think you have (size_t)-1 elements; not
good. Instead when computing the queue size, use a signed value.
Limits total queue size to half the unsigned space; fine.
2022-10-03 15:37:16 +02:00
Andy Wingo
f77cf923c1
Fix parallel tracer for gc_ref API change
2022-10-03 15:37:01 +02:00
Andy Wingo
1228e346fa
Fix semi-space collector for refactor
2022-10-03 15:37:01 +02:00
Andy Wingo
8a51117763
Rework pinning, prepare for conservative tracing
...
We don't need a pin bit: we just need to mark pinned objects before
evacuation starts. This way we can remove the stopping / marking race
so that we can always mark while stopping.
2022-08-22 21:11:30 +02:00
Andy Wingo
2199d5f48d
Excise struct gcobj
2022-08-16 23:21:16 +02:00
Andy Wingo
6ecf226570
More typesafety, more gc_ref
2022-08-16 22:48:46 +02:00
Andy Wingo
92b8f1e917
Add gc_ prefix to struct heap, struct mutator
2022-08-16 21:35:16 +02:00
Andy Wingo
b082f5f50d
Separate compilation!!!!!
2022-08-16 17:54:15 +02:00
Andy Wingo
fe9bdf6397
Separate out embedder API from mt-gcbench, quads
2022-08-16 16:09:36 +02:00
Andy Wingo
112f27b77b
Simplify GC attributes for the inline allocator
...
Don't require pulling in all of gc-api.h.
2022-08-16 16:00:06 +02:00
Andy Wingo
8a111256c6
Compile with -fvisibility=hidden; will be good for separate compilation
2022-08-16 12:04:56 +02:00
Andy Wingo
9e8940e59f
Get handles out of collectors
2022-08-16 11:53:32 +02:00
Andy Wingo
607585e7f0
Add whippet-inline.h
2022-08-16 10:25:23 +02:00
Andy Wingo
33aa5230da
Add bdw-inline.h
2022-08-15 18:30:42 +02:00
Andy Wingo
8f2f4f7c69
API-ify gc_print_stats; add semi-inline.h
2022-08-15 18:17:18 +02:00
Andy Wingo
a00c83878e
Inline post-allocation actions
2022-08-15 16:06:52 +02:00
Andy Wingo
a75842be90
Mostly implementation-independent inline allocation
...
This is a step towards separate compilation of the GC without losing
performance. Only remaining task is the write barrier.
2022-08-15 11:17:15 +02:00
Andy Wingo
4d8a7169d0
Add inline to gc-api.h
2022-08-14 09:18:21 +02:00