mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* gc.c: change terminlogy "..._num" to "..._slots" about slot opetaion.
* final_num -> final_slots * objspace_live_num() -> objspace_live_slots() * objspace_limit_num() -> objspace_limit_slots() * objspace_free_num() -> objspace_free_slots() git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43836 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
f06002208d
commit
a87eaf88a0
2 changed files with 38 additions and 30 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
Mon Nov 25 04:16:09 2013 Koichi Sasada <ko1@atdot.net>
|
||||||
|
|
||||||
|
* gc.c: change terminlogy "..._num" to "..._slots" about slot opetaion.
|
||||||
|
* final_num -> final_slots
|
||||||
|
* objspace_live_num() -> objspace_live_slots()
|
||||||
|
* objspace_limit_num() -> objspace_limit_slots()
|
||||||
|
* objspace_free_num() -> objspace_free_slots()
|
||||||
|
|
||||||
Mon Nov 25 04:03:12 2013 Koichi Sasada <ko1@atdot.net>
|
Mon Nov 25 04:03:12 2013 Koichi Sasada <ko1@atdot.net>
|
||||||
|
|
||||||
* gc.c (gc_stat): add internal information.
|
* gc.c (gc_stat): add internal information.
|
||||||
|
|
60
gc.c
60
gc.c
|
@ -419,7 +419,7 @@ typedef struct rb_objspace {
|
||||||
size_t max_free_slots;
|
size_t max_free_slots;
|
||||||
|
|
||||||
/* final */
|
/* final */
|
||||||
size_t final_num;
|
size_t final_slots;
|
||||||
RVALUE *deferred_final;
|
RVALUE *deferred_final;
|
||||||
} heap_pages;
|
} heap_pages;
|
||||||
|
|
||||||
|
@ -538,7 +538,7 @@ struct heap_page {
|
||||||
struct heap_page_body *body;
|
struct heap_page_body *body;
|
||||||
RVALUE *freelist;
|
RVALUE *freelist;
|
||||||
RVALUE *start;
|
RVALUE *start;
|
||||||
size_t final_num;
|
size_t final_slots;
|
||||||
size_t limit;
|
size_t limit;
|
||||||
struct heap_page *next;
|
struct heap_page *next;
|
||||||
struct heap_page *prev;
|
struct heap_page *prev;
|
||||||
|
@ -590,7 +590,7 @@ VALUE *ruby_initial_gc_stress_ptr = &rb_objspace.gc_stress;
|
||||||
#define heap_pages_increment objspace->heap_pages.increment
|
#define heap_pages_increment objspace->heap_pages.increment
|
||||||
#define heap_pages_min_free_slots objspace->heap_pages.min_free_slots
|
#define heap_pages_min_free_slots objspace->heap_pages.min_free_slots
|
||||||
#define heap_pages_max_free_slots objspace->heap_pages.max_free_slots
|
#define heap_pages_max_free_slots objspace->heap_pages.max_free_slots
|
||||||
#define heap_pages_final_num objspace->heap_pages.final_num
|
#define heap_pages_final_slots objspace->heap_pages.final_slots
|
||||||
#define heap_pages_deferred_final objspace->heap_pages.deferred_final
|
#define heap_pages_deferred_final objspace->heap_pages.deferred_final
|
||||||
#define heap_eden (&objspace->eden_heap)
|
#define heap_eden (&objspace->eden_heap)
|
||||||
#define heap_tomb (&objspace->tomb_heap)
|
#define heap_tomb (&objspace->tomb_heap)
|
||||||
|
@ -977,7 +977,7 @@ heap_pages_free_unused_pages(rb_objspace_t *objspace)
|
||||||
for (i = j = 1; j < heap_pages_used; i++) {
|
for (i = j = 1; j < heap_pages_used; i++) {
|
||||||
struct heap_page *page = heap_pages_sorted[i];
|
struct heap_page *page = heap_pages_sorted[i];
|
||||||
|
|
||||||
if (page->heap == heap_tomb && page->final_num == 0) {
|
if (page->heap == heap_tomb && page->final_slots == 0) {
|
||||||
if (heap_pages_swept_slots - page->limit > heap_pages_max_free_slots) {
|
if (heap_pages_swept_slots - page->limit > heap_pages_max_free_slots) {
|
||||||
if (0) fprintf(stderr, "heap_pages_free_unused_pages: %d free page %p, heap_pages_swept_slots: %d, heap_pages_max_free_slots: %d\n",
|
if (0) fprintf(stderr, "heap_pages_free_unused_pages: %d free page %p, heap_pages_swept_slots: %d, heap_pages_max_free_slots: %d\n",
|
||||||
(int)i, page, (int)heap_pages_swept_slots, (int)heap_pages_max_free_slots);
|
(int)i, page, (int)heap_pages_swept_slots, (int)heap_pages_max_free_slots);
|
||||||
|
@ -1995,7 +1995,7 @@ run_final(rb_objspace_t *objspace, VALUE obj)
|
||||||
RUBY_DATA_FUNC free_func = 0;
|
RUBY_DATA_FUNC free_func = 0;
|
||||||
st_data_t key, table;
|
st_data_t key, table;
|
||||||
|
|
||||||
heap_pages_final_num--;
|
heap_pages_final_slots--;
|
||||||
|
|
||||||
RBASIC_CLEAR_CLASS(obj);
|
RBASIC_CLEAR_CLASS(obj);
|
||||||
|
|
||||||
|
@ -2025,7 +2025,7 @@ finalize_list(rb_objspace_t *objspace, RVALUE *p)
|
||||||
run_final(objspace, (VALUE)p);
|
run_final(objspace, (VALUE)p);
|
||||||
objspace->profile.total_freed_object_num++;
|
objspace->profile.total_freed_object_num++;
|
||||||
|
|
||||||
page->final_num--;
|
page->final_slots--;
|
||||||
heap_page_add_freeobj(objspace, GET_HEAP_PAGE(p), (VALUE)p);
|
heap_page_add_freeobj(objspace, GET_HEAP_PAGE(p), (VALUE)p);
|
||||||
heap_pages_swept_slots++;
|
heap_pages_swept_slots++;
|
||||||
|
|
||||||
|
@ -2625,21 +2625,21 @@ lazy_sweep_enable(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
static size_t
|
static size_t
|
||||||
objspace_live_num(rb_objspace_t *objspace)
|
objspace_live_slot(rb_objspace_t *objspace)
|
||||||
{
|
{
|
||||||
return objspace->profile.total_allocated_object_num - objspace->profile.total_freed_object_num;
|
return objspace->profile.total_allocated_object_num - objspace->profile.total_freed_object_num;
|
||||||
}
|
}
|
||||||
|
|
||||||
static size_t
|
static size_t
|
||||||
objspace_limit_num(rb_objspace_t *objspace)
|
objspace_limit_slot(rb_objspace_t *objspace)
|
||||||
{
|
{
|
||||||
return heap_eden->limit + heap_tomb->limit;
|
return heap_eden->limit + heap_tomb->limit;
|
||||||
}
|
}
|
||||||
|
|
||||||
static size_t
|
static size_t
|
||||||
objspace_free_num(rb_objspace_t *objspace)
|
objspace_free_slot(rb_objspace_t *objspace)
|
||||||
{
|
{
|
||||||
return objspace_limit_num(objspace) - (objspace_live_num(objspace) - heap_pages_final_num);
|
return objspace_limit_slot(objspace) - (objspace_live_slot(objspace) - heap_pages_final_slots);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -2658,7 +2658,7 @@ static inline void
|
||||||
gc_page_sweep(rb_objspace_t *objspace, rb_heap_t *heap, struct heap_page *sweep_page)
|
gc_page_sweep(rb_objspace_t *objspace, rb_heap_t *heap, struct heap_page *sweep_page)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
size_t empty_num = 0, freed_num = 0, final_num = 0;
|
size_t empty_slots = 0, freed_slots = 0, final_slots = 0;
|
||||||
RVALUE *p, *pend,*offset;
|
RVALUE *p, *pend,*offset;
|
||||||
bits_t *bits, bitset;
|
bits_t *bits, bitset;
|
||||||
|
|
||||||
|
@ -2687,22 +2687,22 @@ gc_page_sweep(rb_objspace_t *objspace, rb_heap_t *heap, struct heap_page *sweep_
|
||||||
if (rgengc_remembered(objspace, (VALUE)p)) rb_bug("page_sweep: %p (%s) is remembered.\n", p, obj_type_name((VALUE)p));
|
if (rgengc_remembered(objspace, (VALUE)p)) rb_bug("page_sweep: %p (%s) is remembered.\n", p, obj_type_name((VALUE)p));
|
||||||
#endif
|
#endif
|
||||||
if (obj_free(objspace, (VALUE)p)) {
|
if (obj_free(objspace, (VALUE)p)) {
|
||||||
final_num++;
|
final_slots++;
|
||||||
}
|
}
|
||||||
else if (FL_TEST(p, FL_FINALIZE)) {
|
else if (FL_TEST(p, FL_FINALIZE)) {
|
||||||
RDATA(p)->dfree = 0;
|
RDATA(p)->dfree = 0;
|
||||||
make_deferred(objspace,p);
|
make_deferred(objspace,p);
|
||||||
final_num++;
|
final_slots++;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
(void)VALGRIND_MAKE_MEM_UNDEFINED((void*)p, sizeof(RVALUE));
|
(void)VALGRIND_MAKE_MEM_UNDEFINED((void*)p, sizeof(RVALUE));
|
||||||
heap_page_add_freeobj(objspace, sweep_page, (VALUE)p);
|
heap_page_add_freeobj(objspace, sweep_page, (VALUE)p);
|
||||||
rgengc_report(3, objspace, "page_sweep: %p (%s) is added to freelist\n", p, obj_type_name((VALUE)p));
|
rgengc_report(3, objspace, "page_sweep: %p (%s) is added to freelist\n", p, obj_type_name((VALUE)p));
|
||||||
freed_num++;
|
freed_slots++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
empty_num++;
|
empty_slots++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
p++;
|
p++;
|
||||||
|
@ -2716,28 +2716,28 @@ gc_page_sweep(rb_objspace_t *objspace, rb_heap_t *heap, struct heap_page *sweep_
|
||||||
#if GC_PROFILE_MORE_DETAIL
|
#if GC_PROFILE_MORE_DETAIL
|
||||||
if (objspace->profile.run) {
|
if (objspace->profile.run) {
|
||||||
gc_profile_record *record = gc_prof_record(objspace);
|
gc_profile_record *record = gc_prof_record(objspace);
|
||||||
record->removing_objects += final_num + freed_num;
|
record->removing_objects += final_slots + freed_slots;
|
||||||
record->empty_objects += empty_num;
|
record->empty_objects += empty_slots;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (final_num + freed_num + empty_num == sweep_page->limit) {
|
if (final_slots + freed_slots + empty_slots == sweep_page->limit) {
|
||||||
/* there are no living objects -> move this page to tomb heap */
|
/* there are no living objects -> move this page to tomb heap */
|
||||||
heap_unlink_page(objspace, heap, sweep_page);
|
heap_unlink_page(objspace, heap, sweep_page);
|
||||||
heap_add_page(objspace, heap_tomb, sweep_page);
|
heap_add_page(objspace, heap_tomb, sweep_page);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (freed_num + empty_num > 0) {
|
if (freed_slots + empty_slots > 0) {
|
||||||
heap_add_freepage(objspace, heap, sweep_page);
|
heap_add_freepage(objspace, heap, sweep_page);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
sweep_page->free_next = NULL;
|
sweep_page->free_next = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
heap_pages_swept_slots += freed_num + empty_num;
|
heap_pages_swept_slots += freed_slots + empty_slots;
|
||||||
objspace->profile.total_freed_object_num += freed_num;
|
objspace->profile.total_freed_object_num += freed_slots;
|
||||||
heap_pages_final_num += final_num;
|
heap_pages_final_slots += final_slots;
|
||||||
sweep_page->final_num = final_num;
|
sweep_page->final_slots = final_slots;
|
||||||
|
|
||||||
if (heap_pages_deferred_final && !finalizing) {
|
if (heap_pages_deferred_final && !finalizing) {
|
||||||
rb_thread_t *th = GET_THREAD();
|
rb_thread_t *th = GET_THREAD();
|
||||||
|
@ -2787,7 +2787,7 @@ static void
|
||||||
gc_before_sweep(rb_objspace_t *objspace)
|
gc_before_sweep(rb_objspace_t *objspace)
|
||||||
{
|
{
|
||||||
rb_heap_t *heap;
|
rb_heap_t *heap;
|
||||||
size_t total_limit_num;
|
size_t total_limit_slot;
|
||||||
|
|
||||||
rgengc_report(1, objspace, "gc_before_sweep\n");
|
rgengc_report(1, objspace, "gc_before_sweep\n");
|
||||||
|
|
||||||
|
@ -2797,13 +2797,13 @@ gc_before_sweep(rb_objspace_t *objspace)
|
||||||
}
|
}
|
||||||
|
|
||||||
heap_pages_swept_slots = 0;
|
heap_pages_swept_slots = 0;
|
||||||
total_limit_num = objspace_limit_num(objspace);
|
total_limit_slot = objspace_limit_slot(objspace);
|
||||||
|
|
||||||
heap_pages_min_free_slots = (size_t)(total_limit_num * 0.30);
|
heap_pages_min_free_slots = (size_t)(total_limit_slot * 0.30);
|
||||||
if (heap_pages_min_free_slots < gc_params.heap_free_slots) {
|
if (heap_pages_min_free_slots < gc_params.heap_free_slots) {
|
||||||
heap_pages_min_free_slots = gc_params.heap_free_slots;
|
heap_pages_min_free_slots = gc_params.heap_free_slots;
|
||||||
}
|
}
|
||||||
heap_pages_max_free_slots = (size_t)(total_limit_num * 0.80);
|
heap_pages_max_free_slots = (size_t)(total_limit_slot * 0.80);
|
||||||
if (heap_pages_max_free_slots < gc_params.heap_init_slots) {
|
if (heap_pages_max_free_slots < gc_params.heap_init_slots) {
|
||||||
heap_pages_max_free_slots = gc_params.heap_init_slots;
|
heap_pages_max_free_slots = gc_params.heap_init_slots;
|
||||||
}
|
}
|
||||||
|
@ -5132,9 +5132,9 @@ gc_stat(int argc, VALUE *argv, VALUE self)
|
||||||
SET(heap_used, heap_pages_used);
|
SET(heap_used, heap_pages_used);
|
||||||
SET(heap_length, heap_pages_length);
|
SET(heap_length, heap_pages_length);
|
||||||
SET(heap_increment, heap_pages_increment);
|
SET(heap_increment, heap_pages_increment);
|
||||||
SET(heap_live_slot, objspace_live_num(objspace));
|
SET(heap_live_slot, objspace_live_slot(objspace));
|
||||||
SET(heap_free_slot, objspace_free_num(objspace));
|
SET(heap_free_slot, objspace_free_slot(objspace));
|
||||||
SET(heap_final_slot, heap_pages_final_num);
|
SET(heap_final_slot, heap_pages_final_slots);
|
||||||
SET(heap_swept_slot, heap_pages_swept_slots);
|
SET(heap_swept_slot, heap_pages_swept_slots);
|
||||||
SET(total_allocated_object, objspace->profile.total_allocated_object_num);
|
SET(total_allocated_object, objspace->profile.total_allocated_object_num);
|
||||||
SET(total_freed_object, objspace->profile.total_freed_object_num);
|
SET(total_freed_object, objspace->profile.total_freed_object_num);
|
||||||
|
|
Loading…
Add table
Reference in a new issue