From 684e8c983d8388417a00385d9b86b60bcc88c02b Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Thu, 18 Jan 2007 13:12:45 +0100 Subject: [PATCH] further memory trace polish. --- scm/memory-trace.scm | 88 ++++++++++++++++++++++++++------------------ 1 file changed, 53 insertions(+), 35 deletions(-) diff --git a/scm/memory-trace.scm b/scm/memory-trace.scm index 0bcf5bd19c..f5a19e8e4b 100644 --- a/scm/memory-trace.scm +++ b/scm/memory-trace.scm @@ -1,4 +1,6 @@ (define-module (scm memory-trace)) +(use-modules (lily) + (ice-9 format)) (define-public (mtrace:start-trace freq) (set! usecond-interval (inexact->exact (/ 1000000 freq))) @@ -15,6 +17,8 @@ (define continue-tracing #t) (define busy-tracing #f) (define trace-thread #f) +(define start-time 0) +(define start-memory 0) (define trace-count 0) (define usecond-interval 100000) @@ -23,7 +27,7 @@ (pair? (cdr args)) (pair? (cadr args))) (caadr args) #f)) - +(define last-count 0) (define (record-stack key continuation . args) (if (eq? (current-thread) trace-thread) #t ;; do nothing. @@ -33,7 +37,10 @@ (trap-disable 'enter-frame) (set! trace-count (1+ trace-count)) - + (ly:progress "<~a: ~a>\n" + trace-count + (- (cdr (assoc 'total-cells-allocated (gc-stats))) last-count)) + (set! last-count (cdr (assoc 'total-cells-allocated (gc-stats)))) (set! trace-points (cons (list (assoc 'total-cells-allocated (gc-stats)) @@ -48,6 +55,12 @@ (define (start-install-tracepoint) (set! trace-thread (current-thread)) + (set! trace-points '()) + (set! continue-tracing #t) + (set! trace-count 0) + (set! start-memory (cdr (assoc 'total-cells-allocated (gc-stats)))) + (set! start-time (tms:utime (times))) + (install-tracepoint)) (define (install-tracepoint) @@ -63,39 +76,44 @@ (install-tracepoint))) (define-public (mtrace:dump-results base) - (define out-graph (open-output-file (format #f "~a.graph" base))) - (define stacks-out (open-output-file (format #f "~a.stacks" base))) - (define i 0) - (define last-mem 0) - - (format out-graph "# memory trace with ~a points\n" (length trace-points)) - - (for-each - (lambda (r) - (let* - ((mem (cdr (assoc 'total-cells-allocated r))) - (proc (cdr (assoc 'proc r))) - (stack (cdr (assoc 'stack r))) - (time (cdr (assoc 'time r)))) - - (format out-graph "~a ~a\n" time mem) - (if stack - (begin - (format stacks-out "~15a - delta-mem: ~15a - ~a \n" i - (- mem last-mem) proc) - (do - ((j 0 (1+ j)) - (stack (cdr (assoc 'stack r)) stack)) - ((>= j (vector-length stack))) - - (format stacks-out "\t~a\n" - (vector-ref stack j))))) - - (set! i (1+ i)) - (set! last-mem mem) - )) - (reverse trace-points))) - + (let* + ((stacks-name (format #f "~a.stacks" base)) + (graph-name (format #f "~a.graph" base)) + (graph-out (open-output-file graph-name)) + (stacks-out (open-output-file stacks-name)) + (i 0) + (last-mem 0) + ) + + (ly:progress "Memory statistics to ~a and ~a..." + stacks-name graph-name) + (format graph-out "# memory trace with ~a points\n" (length trace-points)) + (for-each + (lambda (r) + (let* + ((mem (- (cdr (assoc 'total-cells-allocated r)) start-memory)) + (proc (cdr (assoc 'proc r))) + (stack (cdr (assoc 'stack r))) + (time (- (cdr (assoc 'time r)) start-time))) + + (format graph-out "~a ~a\n" time mem) + (if stack + (begin + (format stacks-out "~5a t = ~5a - delta-mem: ~15a - ~a \n" i + time + (- mem last-mem) proc) + (do + ((j 0 (1+ j)) + (stack (cdr (assoc 'stack r)) stack)) + ((>= j (vector-length stack))) + + (format stacks-out "\t~a\n" + (vector-ref stack j))))) + + (set! i (1+ i)) + (set! last-mem mem) + )) + (reverse trace-points)))) (define (test-graph . rest) -- 2.39.2