mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-19 10:10:23 +02:00
* gc.c (s_scm_gc_stats): return total cells allocated in a run as
'total-cells-allocated in gc-stats output. This allows profiling of a program's memory use. * gc-segment.c (scm_i_sweep_some_cards): update scm_gc_cells_allocated_acc when sweeping happens. * gc.h: add scm_gc_cells_allocated_acc, scm_last_cells_allocated.
This commit is contained in:
parent
578c39fbf3
commit
c010108334
4 changed files with 44 additions and 6 deletions
|
@ -1,3 +1,15 @@
|
||||||
|
2007-01-23 Han-Wen Nienhuys <hanwen@lilypond.org>
|
||||||
|
|
||||||
|
* gc.c (s_scm_gc_stats): return total cells allocated in a run as
|
||||||
|
'total-cells-allocated in gc-stats output. This allows profiling
|
||||||
|
of a program's memory use.
|
||||||
|
|
||||||
|
* gc-segment.c (scm_i_sweep_some_cards): update
|
||||||
|
scm_gc_cells_allocated_acc when sweeping happens.
|
||||||
|
|
||||||
|
* gc.h: add scm_gc_cells_allocated_acc, scm_last_cells_allocated.
|
||||||
|
|
||||||
|
|
||||||
2007-01-19 Ludovic Courtès <ludovic.courtes@laas.fr>
|
2007-01-19 Ludovic Courtès <ludovic.courtes@laas.fr>
|
||||||
|
|
||||||
* struct.c (scm_i_struct_equalp): Skip comparison if both FIELD1
|
* struct.c (scm_i_struct_equalp): Skip comparison if both FIELD1
|
||||||
|
|
|
@ -170,8 +170,13 @@ scm_i_sweep_some_cards (scm_t_heap_segment *seg)
|
||||||
scm_gc_cells_collected += collected * seg->span;
|
scm_gc_cells_collected += collected * seg->span;
|
||||||
|
|
||||||
if (!seg->first_time)
|
if (!seg->first_time)
|
||||||
scm_cells_allocated -= collected * seg->span;
|
{
|
||||||
|
scm_gc_cells_allocated_acc +=
|
||||||
|
(scm_cells_allocated - scm_last_cells_allocated);
|
||||||
|
|
||||||
|
scm_cells_allocated -= collected * seg->span;
|
||||||
|
scm_last_cells_allocated = scm_cells_allocated;
|
||||||
|
}
|
||||||
seg->freelist->collected += collected * seg->span;
|
seg->freelist->collected += collected * seg->span;
|
||||||
|
|
||||||
|
|
||||||
|
@ -202,14 +207,24 @@ scm_i_sweep_segment (scm_t_heap_segment * seg)
|
||||||
int yield = scm_gc_cells_collected;
|
int yield = scm_gc_cells_collected;
|
||||||
int coll = seg->freelist->collected;
|
int coll = seg->freelist->collected;
|
||||||
unsigned long alloc = scm_cells_allocated ;
|
unsigned long alloc = scm_cells_allocated ;
|
||||||
|
unsigned long last_alloc = scm_last_cells_allocated;
|
||||||
|
double last_total
|
||||||
|
= scm_gc_cells_allocated_acc
|
||||||
|
+ (alloc - last_alloc);
|
||||||
|
|
||||||
while (scm_i_sweep_some_cards (seg) != SCM_EOL)
|
while (scm_i_sweep_some_cards (seg) != SCM_EOL)
|
||||||
;
|
;
|
||||||
|
|
||||||
scm_gc_cells_collected = yield;
|
|
||||||
scm_cells_allocated = alloc;
|
|
||||||
seg->freelist->collected = coll;
|
|
||||||
|
|
||||||
|
scm_gc_cells_collected = yield;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* restore old stats.
|
||||||
|
*/
|
||||||
|
scm_gc_cells_allocated_acc = last_total;
|
||||||
|
scm_cells_allocated = alloc;
|
||||||
|
scm_last_cells_allocated = alloc;
|
||||||
|
|
||||||
|
seg->freelist->collected = coll;
|
||||||
seg->next_free_card =p;
|
seg->next_free_card =p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -213,6 +213,7 @@ unsigned long scm_mtrigger;
|
||||||
/* GC Statistics Keeping
|
/* GC Statistics Keeping
|
||||||
*/
|
*/
|
||||||
unsigned long scm_cells_allocated = 0;
|
unsigned long scm_cells_allocated = 0;
|
||||||
|
unsigned long scm_last_cells_allocated;
|
||||||
unsigned long scm_mallocated = 0;
|
unsigned long scm_mallocated = 0;
|
||||||
unsigned long scm_gc_cells_collected;
|
unsigned long scm_gc_cells_collected;
|
||||||
unsigned long scm_gc_cells_collected_1 = 0; /* previous GC yield */
|
unsigned long scm_gc_cells_collected_1 = 0; /* previous GC yield */
|
||||||
|
@ -225,6 +226,7 @@ unsigned long scm_gc_times = 0;
|
||||||
unsigned long scm_gc_cells_swept = 0;
|
unsigned long scm_gc_cells_swept = 0;
|
||||||
double scm_gc_cells_marked_acc = 0.;
|
double scm_gc_cells_marked_acc = 0.;
|
||||||
double scm_gc_cells_swept_acc = 0.;
|
double scm_gc_cells_swept_acc = 0.;
|
||||||
|
double scm_gc_cells_allocated_acc = 0.;
|
||||||
int scm_gc_cell_yield_percentage =0;
|
int scm_gc_cell_yield_percentage =0;
|
||||||
int scm_gc_malloc_yield_percentage = 0;
|
int scm_gc_malloc_yield_percentage = 0;
|
||||||
unsigned long protected_obj_count = 0;
|
unsigned long protected_obj_count = 0;
|
||||||
|
@ -243,6 +245,7 @@ SCM_SYMBOL (sym_cells_swept, "cells-swept");
|
||||||
SCM_SYMBOL (sym_malloc_yield, "malloc-yield");
|
SCM_SYMBOL (sym_malloc_yield, "malloc-yield");
|
||||||
SCM_SYMBOL (sym_cell_yield, "cell-yield");
|
SCM_SYMBOL (sym_cell_yield, "cell-yield");
|
||||||
SCM_SYMBOL (sym_protected_objects, "protected-objects");
|
SCM_SYMBOL (sym_protected_objects, "protected-objects");
|
||||||
|
SCM_SYMBOL (sym_total_cells_allocated, "total-cells-allocated");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -315,6 +318,7 @@ SCM_DEFINE (scm_gc_stats, "gc-stats", 0, 0, 0,
|
||||||
unsigned long int local_protected_obj_count;
|
unsigned long int local_protected_obj_count;
|
||||||
double local_scm_gc_cells_swept;
|
double local_scm_gc_cells_swept;
|
||||||
double local_scm_gc_cells_marked;
|
double local_scm_gc_cells_marked;
|
||||||
|
double local_scm_total_cells_allocated;
|
||||||
SCM answer;
|
SCM answer;
|
||||||
unsigned long *bounds = 0;
|
unsigned long *bounds = 0;
|
||||||
int table_size = scm_i_heap_segment_table_size;
|
int table_size = scm_i_heap_segment_table_size;
|
||||||
|
@ -356,6 +360,9 @@ SCM_DEFINE (scm_gc_stats, "gc-stats", 0, 0, 0,
|
||||||
+(double) scm_gc_cells_swept
|
+(double) scm_gc_cells_swept
|
||||||
-(double) scm_gc_cells_collected;
|
-(double) scm_gc_cells_collected;
|
||||||
|
|
||||||
|
local_scm_total_cells_allocated = scm_gc_cells_allocated_acc
|
||||||
|
+ (double) (scm_cells_allocated - scm_last_cells_allocated);
|
||||||
|
|
||||||
for (i = table_size; i--;)
|
for (i = table_size; i--;)
|
||||||
{
|
{
|
||||||
heap_segs = scm_cons (scm_cons (scm_from_ulong (bounds[2*i]),
|
heap_segs = scm_cons (scm_cons (scm_from_ulong (bounds[2*i]),
|
||||||
|
@ -369,6 +376,8 @@ SCM_DEFINE (scm_gc_stats, "gc-stats", 0, 0, 0,
|
||||||
scm_from_ulong (local_scm_gc_time_taken)),
|
scm_from_ulong (local_scm_gc_time_taken)),
|
||||||
scm_cons (sym_cells_allocated,
|
scm_cons (sym_cells_allocated,
|
||||||
scm_from_ulong (local_scm_cells_allocated)),
|
scm_from_ulong (local_scm_cells_allocated)),
|
||||||
|
scm_cons (sym_total_cells_allocated,
|
||||||
|
scm_from_ulong (local_scm_total_cells_allocated)),
|
||||||
scm_cons (sym_heap_size,
|
scm_cons (sym_heap_size,
|
||||||
scm_from_ulong (local_scm_heap_size)),
|
scm_from_ulong (local_scm_heap_size)),
|
||||||
scm_cons (sym_mallocated,
|
scm_cons (sym_mallocated,
|
||||||
|
|
|
@ -278,10 +278,12 @@ SCM_API unsigned long scm_gc_cells_collected;
|
||||||
SCM_API unsigned long scm_gc_malloc_collected;
|
SCM_API unsigned long scm_gc_malloc_collected;
|
||||||
SCM_API unsigned long scm_gc_ports_collected;
|
SCM_API unsigned long scm_gc_ports_collected;
|
||||||
SCM_API unsigned long scm_cells_allocated;
|
SCM_API unsigned long scm_cells_allocated;
|
||||||
|
SCM_API unsigned long scm_last_cells_allocated;
|
||||||
SCM_API int scm_gc_cell_yield_percentage;
|
SCM_API int scm_gc_cell_yield_percentage;
|
||||||
SCM_API int scm_gc_malloc_yield_percentage;
|
SCM_API int scm_gc_malloc_yield_percentage;
|
||||||
SCM_API unsigned long scm_mallocated;
|
SCM_API unsigned long scm_mallocated;
|
||||||
SCM_API unsigned long scm_mtrigger;
|
SCM_API unsigned long scm_mtrigger;
|
||||||
|
SCM_API double scm_gc_cells_allocated_acc;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue