[前][次][番号順一覧][スレッド一覧]

ruby-changes:66503

From: Peter <ko1@a...>
Date: Thu, 17 Jun 2021 23:59:09 +0900 (JST)
Subject: [ruby-changes:66503] c639b58823 (master): Refactor heap_set_increment

https://git.ruby-lang.org/ruby.git/commit/?id=c639b58823

From c639b58823cd8cc62853acf00a49b67ac359ea73 Mon Sep 17 00:00:00 2001
From: Peter Zhu <peter@p...>
Date: Thu, 17 Jun 2021 10:19:33 -0400
Subject: Refactor heap_set_increment

heap_set_increment essentially only calls heap_allocatable_pages_set.
They only differ in behaviour when `additional_pages == 0`. However,
this is only possible because heap_extend_pages may return 0. This
commit also changes heap_extend_pages to always return at least 1.
---
 gc.c | 24 +++++++-----------------
 1 file changed, 7 insertions(+), 17 deletions(-)

diff --git a/gc.c b/gc.c
index cdf5846..0ad090a 100644
--- a/gc.c
+++ b/gc.c
@@ -2100,21 +2100,11 @@ heap_extend_pages(rb_objspace_t *objspace, size_t free_slots, size_t total_slots https://github.com/ruby/ruby/blob/trunk/gc.c#L2100
 	if (next_used > max_used) next_used = max_used;
     }
 
-    return next_used - used;
-}
-
-static void
-heap_set_increment(rb_objspace_t *objspace, size_t additional_pages)
-{
-    size_t used = heap_eden->total_pages;
-    size_t next_used_limit = used + additional_pages;
-
-    if (next_used_limit == heap_allocated_pages) next_used_limit++;
-
-    heap_allocatable_pages_set(objspace, next_used_limit - used);
+    size_t extend_page_count = next_used - used;
+    /* Extend by at least 1 page. */
+    if (extend_page_count == 0) extend_page_count = 1;
 
-    gc_report(1, objspace, "heap_set_increment: heap_allocatable_pages is %"PRIdSIZE"\n",
-              heap_allocatable_pages);
+    return extend_page_count;
 }
 
 static int
@@ -5498,7 +5488,7 @@ gc_heap_prepare_minimum_pages(rb_objspace_t *objspace, rb_heap_t *heap) https://github.com/ruby/ruby/blob/trunk/gc.c#L5488
 {
     if (!heap->free_pages && heap_increment(objspace, heap) == FALSE) {
 	/* there is no free after page_sweep() */
-	heap_set_increment(objspace, 1);
+        heap_allocatable_pages_set(objspace, 1);
 	if (!heap_increment(objspace, heap)) { /* can't allocate additional free objects */
 	    rb_memerror();
 	}
@@ -8019,7 +8009,7 @@ gc_marks_finish(rb_objspace_t *objspace) https://github.com/ruby/ruby/blob/trunk/gc.c#L8009
             if (full_marking) {
               /* increment: */
 		gc_report(1, objspace, "gc_marks_finish: heap_set_increment!!\n");
-		heap_set_increment(objspace, heap_extend_pages(objspace, sweep_slots, total_slots));
+                heap_allocatable_pages_set(objspace, heap_extend_pages(objspace, sweep_slots, total_slots));
 		heap_increment(objspace, heap);
 	    }
 	}
@@ -8766,7 +8756,7 @@ heap_ready_to_gc(rb_objspace_t *objspace, rb_heap_t *heap) https://github.com/ruby/ruby/blob/trunk/gc.c#L8756
 {
     if (!heap->free_pages) {
 	if (!heap_increment(objspace, heap)) {
-	    heap_set_increment(objspace, 1);
+            heap_allocatable_pages_set(objspace, 1);
 	    heap_increment(objspace, heap);
 	}
     }
-- 
cgit v1.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]