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:
parent
eafe000af3
commit
554c094977
Notes:
git
2020-12-10 13:06:12 +09:00
10
gc.c
10
gc.c
@ -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) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user