VM: add marking as a timed gc phase
I think that makes sense because most time when doing a full gc is spent marking.char-rename
parent
752c895d23
commit
f070a47ec0
|
@ -197,6 +197,7 @@ SYMBOL: gc-events
|
|||
{ "Total time:" [ [ total-time>> ] map-sum nanos>string ] }
|
||||
{ "Card scan time:" [ PHASE-CARD-SCAN sum-phase-times ] }
|
||||
{ "Code block scan time:" [ PHASE-CODE-SCAN sum-phase-times ] }
|
||||
{ "Marking time:" [ PHASE-MARKING sum-phase-times ] }
|
||||
{ "Data heap sweep time:" [ PHASE-DATA-SWEEP sum-phase-times ] }
|
||||
{ "Code heap sweep time:" [ PHASE-CODE-SWEEP sum-phase-times ] }
|
||||
{ "Data compaction time:" [ PHASE-DATA-COMPACTION sum-phase-times ] }
|
||||
|
|
|
@ -86,6 +86,7 @@ CONSTANT: PHASE-CODE-SCAN 1
|
|||
CONSTANT: PHASE-DATA-SWEEP 2
|
||||
CONSTANT: PHASE-CODE-SWEEP 3
|
||||
CONSTANT: PHASE-DATA-COMPACTION 4
|
||||
CONSTANT: PHASE-MARKING 5
|
||||
|
||||
! gc-event should be kept in sync with:
|
||||
! vm/gc.hpp
|
||||
|
@ -100,7 +101,7 @@ STRUCT: gc-event
|
|||
{ code-blocks-scanned cell_t }
|
||||
{ start-time ulonglong }
|
||||
{ total-time cell_t }
|
||||
{ times cell_t[5] }
|
||||
{ times cell_t[6] }
|
||||
{ temp-time ulonglong } ;
|
||||
|
||||
! gc-info should be kept in sync with:
|
||||
|
|
|
@ -57,6 +57,10 @@ struct full_collection_copier : no_fixup {
|
|||
};
|
||||
|
||||
void factor_vm::collect_mark_impl() {
|
||||
gc_event* event = current_gc->event;
|
||||
if (event)
|
||||
event->reset_timer();
|
||||
|
||||
slot_visitor<full_collection_copier>
|
||||
visitor(this, full_collection_copier(data->tenured, code, &mark_stack));
|
||||
|
||||
|
@ -75,11 +79,13 @@ void factor_vm::collect_mark_impl() {
|
|||
data->reset_aging();
|
||||
data->reset_nursery();
|
||||
code->clear_remembered_set();
|
||||
|
||||
if (event)
|
||||
event->ended_phase(PHASE_MARKING);
|
||||
}
|
||||
|
||||
void factor_vm::collect_sweep_impl() {
|
||||
gc_event* event = current_gc->event;
|
||||
|
||||
if (event)
|
||||
event->reset_timer();
|
||||
data->tenured->sweep();
|
||||
|
|
|
@ -19,6 +19,7 @@ enum gc_phase {
|
|||
PHASE_DATA_SWEEP,
|
||||
PHASE_CODE_SWEEP,
|
||||
PHASE_DATA_COMPACTION,
|
||||
PHASE_MARKING
|
||||
};
|
||||
|
||||
struct gc_event {
|
||||
|
@ -32,7 +33,7 @@ struct gc_event {
|
|||
cell code_blocks_scanned;
|
||||
uint64_t start_time;
|
||||
cell total_time;
|
||||
cell times[5];
|
||||
cell times[6];
|
||||
uint64_t temp_time;
|
||||
|
||||
gc_event(gc_op op, factor_vm* parent);
|
||||
|
|
Loading…
Reference in New Issue