set min/maximum free slots relative to ractor cnt

A program with multiple ractors can consume more objects per
unit time, so this patch set minimum/maximum free_slots to
relative to ractors count (upto 8).
This commit is contained in:
Koichi Sasada 2020-12-10 10:38:30 +09:00
parent eafe000af3
commit 554c094977
Notes: git 2020-12-10 13:06:12 +09:00

10
gc.c
View File

@ -7298,11 +7298,15 @@ gc_marks_finish(rb_objspace_t *objspace)
size_t max_free_slots = (size_t)(total_slots * gc_params.heap_free_slots_max_ratio); size_t max_free_slots = (size_t)(total_slots * gc_params.heap_free_slots_max_ratio);
size_t min_free_slots = (size_t)(total_slots * gc_params.heap_free_slots_min_ratio); size_t min_free_slots = (size_t)(total_slots * gc_params.heap_free_slots_min_ratio);
int full_marking = is_full_marking(objspace); int full_marking = is_full_marking(objspace);
const int r_cnt = GET_VM()->ractor.cnt;
const int r_mul = r_cnt > 8 ? 8 : r_cnt; // upto 8
GC_ASSERT(heap->total_slots >= objspace->marked_slots); GC_ASSERT(heap->total_slots >= objspace->marked_slots);
/* setup free-able page counts */ /* setup free-able page counts */
if (max_free_slots < gc_params.heap_init_slots) max_free_slots = gc_params.heap_init_slots; if (max_free_slots < gc_params.heap_init_slots * r_mul) {
max_free_slots = gc_params.heap_init_slots * r_mul;
}
if (sweep_slots > max_free_slots) { if (sweep_slots > max_free_slots) {
heap_pages_freeable_pages = (sweep_slots - max_free_slots) / HEAP_PAGE_OBJ_LIMIT; heap_pages_freeable_pages = (sweep_slots - max_free_slots) / HEAP_PAGE_OBJ_LIMIT;
@ -7312,7 +7316,9 @@ gc_marks_finish(rb_objspace_t *objspace)
} }
/* check free_min */ /* check free_min */
if (min_free_slots < gc_params.heap_free_slots) min_free_slots = gc_params.heap_free_slots; if (min_free_slots < gc_params.heap_free_slots * r_mul) {
min_free_slots = gc_params.heap_free_slots * r_mul;
}
if (sweep_slots < min_free_slots) { if (sweep_slots < min_free_slots) {
if (!full_marking) { if (!full_marking) {