Skip to content

Commit ab622e9

Browse files
committed
GC.stat for concurrent set rebuilds
1 parent 1b944b3 commit ab622e9

3 files changed

Lines changed: 36 additions & 0 deletions

File tree

concurrent_set.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,22 @@ concurrent_set_probe_next(struct concurrent_set_probe *probe)
105105
return probe->idx;
106106
}
107107

108+
static inline unsigned long long time_diff_ns(struct timespec before, struct timespec after) {
109+
unsigned long long total = 0;
110+
total += (after.tv_nsec - before.tv_nsec);
111+
total += (after.tv_sec - before.tv_sec) * (1000 * 1000 * 1000);
112+
return total;
113+
}
114+
115+
static inline void gettime(struct timespec *time) {
116+
if (clock_gettime(CLOCK_MONOTONIC, time) == -1) {
117+
rb_sys_fail("clock_gettime");
118+
}
119+
}
120+
121+
unsigned long long rb_concur_set_resize_time_taken_ns;
122+
unsigned int rb_concur_set_resize_serial;
123+
108124
static void
109125
concurrent_set_try_resize_without_locking(VALUE old_set_obj, VALUE *set_obj_ptr)
110126
{
@@ -113,6 +129,10 @@ concurrent_set_try_resize_without_locking(VALUE old_set_obj, VALUE *set_obj_ptr)
113129
return;
114130
}
115131

132+
struct timespec resize_time_start;
133+
struct timespec resize_time_end;
134+
gettime(&resize_time_start);
135+
116136
struct concurrent_set *old_set = RTYPEDDATA_GET_DATA(old_set_obj);
117137

118138
// This may overcount by up to the number of threads concurrently attempting to insert
@@ -177,6 +197,10 @@ concurrent_set_try_resize_without_locking(VALUE old_set_obj, VALUE *set_obj_ptr)
177197
RUBY_ATOMIC_VALUE_SET(*set_obj_ptr, new_set_obj);
178198

179199
RB_GC_GUARD(old_set_obj);
200+
gettime(&resize_time_end);
201+
202+
rb_concur_set_resize_time_taken_ns += time_diff_ns(resize_time_start, resize_time_end);
203+
rb_concur_set_resize_serial++;
180204
}
181205

182206
static void

gc/default/default.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7439,6 +7439,9 @@ enum gc_stat_sym {
74397439
gc_stat_sym_gc_barrier_time_taken_ns,
74407440
gc_stat_sym_gc_barrier_serial,
74417441

7442+
gc_stat_sym_concurrent_set_resize_time_taken_ns,
7443+
gc_stat_sym_concurrent_set_resize_serial,
7444+
74427445
#if RGENGC_PROFILE
74437446
gc_stat_sym_total_generated_normal_object_count,
74447447
gc_stat_sym_total_generated_shady_object_count,
@@ -7490,10 +7493,14 @@ setup_gc_stat_symbols(void)
74907493
S(oldmalloc_increase_bytes_limit);
74917494
#endif
74927495
S(weak_references_count);
7496+
74937497
S(barrier_time_taken_ns);
74947498
S(barrier_serial);
74957499
S(gc_barrier_time_taken_ns);
74967500
S(gc_barrier_serial);
7501+
7502+
S(concurrent_set_resize_time_taken_ns);
7503+
S(concurrent_set_resize_serial);
74977504
#if RGENGC_PROFILE
74987505
S(total_generated_normal_object_count);
74997506
S(total_generated_shady_object_count);
@@ -7573,6 +7580,9 @@ rb_gc_impl_stat(void *objspace_ptr, VALUE hash_or_sym)
75737580
SET(gc_barrier_time_taken_ns, ULL2NUM(rb_gc_barrier_time_taken_ns));
75747581
SET(gc_barrier_serial, UINT2NUM(rb_gc_barrier_serial));
75757582

7583+
SET(concurrent_set_resize_time_taken_ns, ULL2NUM(rb_concur_set_resize_time_taken_ns));
7584+
SET(concurrent_set_resize_serial, UINT2NUM(rb_concur_set_resize_serial));
7585+
75767586
#if RGENGC_ESTIMATE_OLDMALLOC
75777587
SET(oldmalloc_increase_bytes, objspace->rgengc.oldmalloc_increase);
75787588
SET(oldmalloc_increase_bytes_limit, objspace->rgengc.oldmalloc_increase_limit);

vm_core.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -838,6 +838,8 @@ typedef struct rb_vm_struct {
838838
RUBY_EXTERN unsigned long long rb_barrier_time_taken_ns;
839839
RUBY_EXTERN unsigned long long rb_gc_barrier_time_taken_ns;
840840
RUBY_EXTERN unsigned int rb_gc_barrier_serial;
841+
RUBY_EXTERN unsigned int rb_concur_set_resize_serial;
842+
RUBY_EXTERN unsigned long long rb_concur_set_resize_time_taken_ns;
841843

842844
/* default values */
843845

0 commit comments

Comments
 (0)