Skip to content

Commit 6b03ca0

Browse files
committed
Add pages_swept_by_ruby_thread counter
1 parent e02d7a4 commit 6b03ca0

1 file changed

Lines changed: 18 additions & 6 deletions

File tree

gc/default/default.c

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -683,13 +683,18 @@ typedef struct rb_objspace {
683683
struct timespec ruby_thread_sweep_cpu_start_time;
684684
struct timespec ruby_thread_sweep_wall_start_time;
685685
#endif
686-
size_t pages_swept_by_sweep_thread;
687-
size_t pages_swept_by_sweep_thread_had_deferred_free_objects;
688686

689687
/* Weak references */
690688
size_t weak_references_count;
691689
} profile;
692690

691+
/* Cumulative sweep counters that persist across GC cycles (never reset) */
692+
struct {
693+
size_t pages_swept_by_sweep_thread;
694+
size_t pages_swept_by_sweep_thread_had_deferred_free_objects;
695+
size_t pages_swept_by_ruby_thread;
696+
} sweep_stats;
697+
693698
VALUE gc_stress_mode;
694699

695700
struct {
@@ -4210,6 +4215,7 @@ gc_sweep_page(rb_objspace_t *objspace, rb_heap_t *heap, struct gc_sweep_context
42104215
#endif
42114216
rbimpl_atomic_store(&sweep_page->before_sweep, 0, RBIMPL_ATOMIC_RELEASE);
42124217
sweep_page->free_slots = 0;
4218+
objspace->sweep_stats.pages_swept_by_ruby_thread++;
42134219

42144220
p = (uintptr_t)sweep_page->start;
42154221
bits = sweep_page->mark_bits;
@@ -4572,9 +4578,9 @@ gc_pre_sweep_page(rb_objspace_t *objspace, rb_heap_t *heap, struct heap_page *pa
45724578
}
45734579
p += BITS_BITLENGTH * slot_size;
45744580
}
4575-
objspace->profile.pages_swept_by_sweep_thread++;
4581+
objspace->sweep_stats.pages_swept_by_sweep_thread++;
45764582
if (page->pre_deferred_free_slots > 0) {
4577-
objspace->profile.pages_swept_by_sweep_thread_had_deferred_free_objects++;
4583+
objspace->sweep_stats.pages_swept_by_sweep_thread_had_deferred_free_objects++;
45784584
}
45794585

45804586
#if RGENGC_CHECK_MODE
@@ -9214,8 +9220,10 @@ enum gc_stat_sym {
92149220
gc_stat_sym_remembered_wb_unprotected_objects_limit,
92159221
gc_stat_sym_old_objects,
92169222
gc_stat_sym_old_objects_limit,
9223+
gc_stat_sym_pages_swept,
92179224
gc_stat_sym_pages_swept_by_sweep_thread,
92189225
gc_stat_sym_pages_swept_by_sweep_thread_had_deferred_free_objects,
9226+
gc_stat_sym_pages_swept_by_ruby_thread,
92199227
#if RGENGC_ESTIMATE_OLDMALLOC
92209228
gc_stat_sym_oldmalloc_increase_bytes,
92219229
gc_stat_sym_oldmalloc_increase_bytes_limit,
@@ -9271,8 +9279,10 @@ setup_gc_stat_symbols(void)
92719279
S(remembered_wb_unprotected_objects_limit);
92729280
S(old_objects);
92739281
S(old_objects_limit);
9282+
S(pages_swept);
92749283
S(pages_swept_by_sweep_thread);
92759284
S(pages_swept_by_sweep_thread_had_deferred_free_objects);
9285+
S(pages_swept_by_ruby_thread);
92769286
#if RGENGC_ESTIMATE_OLDMALLOC
92779287
S(oldmalloc_increase_bytes);
92789288
S(oldmalloc_increase_bytes_limit);
@@ -9359,8 +9369,10 @@ rb_gc_impl_stat(void *objspace_ptr, VALUE hash_or_sym)
93599369
SET(remembered_wb_unprotected_objects_limit, objspace->rgengc.uncollectible_wb_unprotected_objects_limit);
93609370
SET(old_objects, objspace->rgengc.old_objects);
93619371
SET(old_objects_limit, objspace->rgengc.old_objects_limit);
9362-
SET(pages_swept_by_sweep_thread, objspace->profile.pages_swept_by_sweep_thread);
9363-
SET(pages_swept_by_sweep_thread_had_deferred_free_objects, objspace->profile.pages_swept_by_sweep_thread_had_deferred_free_objects);
9372+
SET(pages_swept, objspace->sweep_stats.pages_swept_by_sweep_thread + objspace->sweep_stats.pages_swept_by_ruby_thread);
9373+
SET(pages_swept_by_sweep_thread, objspace->sweep_stats.pages_swept_by_sweep_thread);
9374+
SET(pages_swept_by_sweep_thread_had_deferred_free_objects, objspace->sweep_stats.pages_swept_by_sweep_thread_had_deferred_free_objects);
9375+
SET(pages_swept_by_ruby_thread, objspace->sweep_stats.pages_swept_by_ruby_thread);
93649376
#if RGENGC_ESTIMATE_OLDMALLOC
93659377
SET(oldmalloc_increase_bytes, objspace->malloc_counters.oldmalloc_increase);
93669378
SET(oldmalloc_increase_bytes_limit, objspace->rgengc.oldmalloc_increase_limit);

0 commit comments

Comments
 (0)