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