From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.0 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id B46311F406; Thu, 17 May 2018 02:51:37 +0000 (UTC) Date: Thu, 17 May 2018 02:51:37 +0000 From: Eric Wong To: spew@80x24.org Subject: no atomics needed for oldmalloc_increase Message-ID: <20180517025137.GA1569@whir> References: <20180517024218.30730-1-e@80x24.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20180517024218.30730-1-e@80x24.org> List-Id: diff --git a/gc.c b/gc.c index 7264a62fced..be2a5c4b726 100644 --- a/gc.c +++ b/gc.c @@ -636,7 +636,7 @@ typedef struct rb_objspace { size_t old_objects_limit; #if RGENGC_ESTIMATE_OLDMALLOC - struct monoctr oldmalloc; + size_t oldmalloc_increase; size_t oldmalloc_increase_limit; #endif @@ -6356,14 +6356,6 @@ malloc_increase(const rb_objspace_t *objspace) return monoctr_read(&objspace->malloc_params.m); } -#if RGENGC_ESTIMATE_OLDMALLOC -static size_t -oldmalloc_increase(const rb_objspace_t *objspace) -{ - return monoctr_read(&objspace->rgengc.oldmalloc); -} -#endif - static void gc_reset_malloc_info(rb_objspace_t *objspace) { @@ -6372,6 +6364,8 @@ gc_reset_malloc_info(rb_objspace_t *objspace) size_t inc = monoctr_xchg0(&objspace->malloc_params.m); size_t old_limit = malloc_limit; + objspace->rgengc.oldmalloc_increase += inc; + if (inc > malloc_limit) { malloc_limit = (size_t)(inc * gc_params.malloc_limit_growth_factor); if (gc_params.malloc_limit_max > 0 && /* ignore max-check if 0 */ @@ -6401,7 +6395,7 @@ gc_reset_malloc_info(rb_objspace_t *objspace) /* reset oldmalloc info */ #if RGENGC_ESTIMATE_OLDMALLOC if (!is_full_marking(objspace)) { - if (oldmalloc_increase(objspace) > objspace->rgengc.oldmalloc_increase_limit) { + if (objspace->rgengc.oldmalloc_increase > objspace->rgengc.oldmalloc_increase_limit) { objspace->rgengc.need_major_gc |= GPR_FLAG_MAJOR_BY_OLDMALLOC; objspace->rgengc.oldmalloc_increase_limit = (size_t)(objspace->rgengc.oldmalloc_increase_limit * gc_params.oldmalloc_limit_growth_factor); @@ -6414,13 +6408,13 @@ gc_reset_malloc_info(rb_objspace_t *objspace) if (0) fprintf(stderr, "%d\t%d\t%u\t%u\t%d\n", (int)rb_gc_count(), (int)objspace->rgengc.need_major_gc, - (unsigned int)oldmalloc_increase(objspace), + (unsigned int)objspace->rgengc.oldmalloc_increase, (unsigned int)objspace->rgengc.oldmalloc_increase_limit, (unsigned int)gc_params.oldmalloc_limit_max); } else { /* major GC */ - MEMZERO(&objspace->rgengc.oldmalloc, struct monoctr, 1); + objspace->rgengc.oldmalloc_increase = 0; if ((objspace->profile.latest_gc_info & GPR_FLAG_MAJOR_BY_OLDMALLOC) == 0) { objspace->rgengc.oldmalloc_increase_limit = @@ -7228,7 +7222,7 @@ gc_stat_internal(VALUE hash_or_sym) SET(old_objects, objspace->rgengc.old_objects); SET(old_objects_limit, objspace->rgengc.old_objects_limit); #if RGENGC_ESTIMATE_OLDMALLOC - SET(oldmalloc_increase_bytes, oldmalloc_increase(objspace)); + SET(oldmalloc_increase_bytes, objspace->rgengc.oldmalloc_increase); SET(oldmalloc_increase_bytes_limit, objspace->rgengc.oldmalloc_increase_limit); #endif @@ -7856,11 +7850,9 @@ objspace_malloc_increase(rb_objspace_t *objspace, void *mem, size_t new_size, si /* n.b. these checks for non-zero get inlined */ if (new_size) { ATOMIC_SIZE_ADD(objspace->malloc_params.m.add, new_size); - ATOMIC_SIZE_ADD(objspace->rgengc.oldmalloc.add, new_size); } if (old_size) { ATOMIC_SIZE_ADD(objspace->malloc_params.m.sub, old_size); - ATOMIC_SIZE_ADD(objspace->rgengc.oldmalloc.sub, old_size); } if (type == MEMOP_TYPE_MALLOC) {