wingo pushed a commit to branch wip-whippet
in repository guile.
commit 28ab466afb3f714eb2f3687c5fe2719ae46788e8
Author: Andy Wingo <[email protected]>
AuthorDate: Tue Aug 5 20:30:54 2025 +0200
Second-chance allocations add to allocation counter
---
src/nofl-space.h | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/src/nofl-space.h b/src/nofl-space.h
index 82dbfc5d9..36c29f52f 100644
--- a/src/nofl-space.h
+++ b/src/nofl-space.h
@@ -180,6 +180,7 @@ struct nofl_space {
uintptr_t survivor_granules_at_last_collection; // atomically
uintptr_t allocated_granules_since_last_collection; // atomically
uintptr_t fragmentation_granules_since_last_collection; // atomically
+ uintptr_t second_chance_granules_since_last_collection; // atomically
};
struct nofl_allocator {
@@ -984,6 +985,8 @@ nofl_allocate_slow(struct nofl_allocator *alloc, struct
nofl_space *space,
nofl_allocate_second_chance(alloc, space, granules);
if (!gc_ref_is_null(second_chance)) {
gc_update_alloc_table(second_chance, size, kind);
+ atomic_fetch_add(&space->second_chance_granules_since_last_collection,
+ granules);
return second_chance;
}
@@ -1192,6 +1195,7 @@ nofl_space_reset_statistics(struct nofl_space *space) {
space->survivor_granules_at_last_collection = 0;
space->allocated_granules_since_last_collection = 0;
space->fragmentation_granules_since_last_collection = 0;
+ space->second_chance_granules_since_last_collection = 0;
}
static size_t
@@ -1204,9 +1208,14 @@ nofl_space_live_size_at_last_collection(struct
nofl_space *space) {
static void
nofl_space_add_to_allocation_counter(struct nofl_space *space,
uint64_t *counter) {
- *counter +=
+ uint64_t allocated =
atomic_load_explicit(&space->allocated_granules_since_last_collection,
- memory_order_relaxed) * NOFL_GRANULE_SIZE;
+ memory_order_relaxed);
+ uint64_t second_chance =
+ atomic_load_explicit(&space->second_chance_granules_since_last_collection,
+ memory_order_relaxed);
+
+ *counter += (allocated + second_chance) * NOFL_GRANULE_SIZE;
}
static size_t