profiling: Add a "gc" profiling component.
* guix/profiling.scm (show-gc-stats): New procedure. <top level>: Call 'register-profiling-hook!'.
This commit is contained in:
parent
eac7ed195b
commit
461d6c2eff
|
@ -1,5 +1,5 @@
|
||||||
;;; GNU Guix --- Functional package management for GNU
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org>
|
;;; Copyright © 2017, 2019 Ludovic Courtès <ludo@gnu.org>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
;;;
|
;;;
|
||||||
|
@ -18,6 +18,7 @@
|
||||||
|
|
||||||
(define-module (guix profiling)
|
(define-module (guix profiling)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
|
#:autoload (ice-9 format) (format)
|
||||||
#:export (profiled?
|
#:export (profiled?
|
||||||
register-profiling-hook!))
|
register-profiling-hook!))
|
||||||
|
|
||||||
|
@ -50,3 +51,25 @@
|
||||||
(for-each (lambda (hook)
|
(for-each (lambda (hook)
|
||||||
(add-hook! hook thunk))
|
(add-hook! hook thunk))
|
||||||
%profiling-hooks)))
|
%profiling-hooks)))
|
||||||
|
|
||||||
|
(define (show-gc-stats)
|
||||||
|
"Display garbage collection statistics."
|
||||||
|
(define MiB (* 1024 1024.))
|
||||||
|
(define stats (gc-stats))
|
||||||
|
|
||||||
|
(format (current-error-port) "Garbage collection statistics:
|
||||||
|
heap size: ~,2f MiB
|
||||||
|
allocated: ~,2f MiB
|
||||||
|
GC times: ~a
|
||||||
|
time spent in GC: ~,2f seconds (~d% of user time)~%"
|
||||||
|
(/ (assq-ref stats 'heap-size) MiB)
|
||||||
|
(/ (assq-ref stats 'heap-total-allocated) MiB)
|
||||||
|
(assq-ref stats 'gc-times)
|
||||||
|
(/ (assq-ref stats 'gc-time-taken)
|
||||||
|
internal-time-units-per-second 1.)
|
||||||
|
(inexact->exact
|
||||||
|
(round (* (/ (assq-ref stats 'gc-time-taken)
|
||||||
|
(tms:utime (times)) 1.)
|
||||||
|
100)))))
|
||||||
|
|
||||||
|
(register-profiling-hook! "gc" show-gc-stats)
|
||||||
|
|
Loading…
Reference in New Issue