From 26d2b6377b04ed761c7167d7904b5ddfe5e3d2c2 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Sun, 29 Jun 2025 09:19:30 +0200 Subject: [PATCH] Add the gc watcher from the build coordinator --- guix-data-service/web/server.scm | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/guix-data-service/web/server.scm b/guix-data-service/web/server.scm index e564a68..38e219b 100644 --- a/guix-data-service/web/server.scm +++ b/guix-data-service/web/server.scm @@ -21,6 +21,7 @@ #:use-module (srfi srfi-11) #:use-module (srfi srfi-71) #:use-module (ice-9 match) + #:use-module (ice-9 format) #:use-module (ice-9 threads) #:use-module (web http) #:use-module (web request) @@ -127,6 +128,30 @@ (setrlimit 'nofile 4096 4096)) #:unwind? #t) + (call-with-new-thread + (lambda () + (set-thread-name "gc watcher") + + (add-hook! + after-gc-hook + (let ((last-gc-time-taken + (assq-ref (gc-stats) 'gc-time-taken))) + (lambda () + (let* ((gc-time-taken + (assq-ref (gc-stats) 'gc-time-taken)) + (time-since-last + (/ (- gc-time-taken + last-gc-time-taken) + internal-time-units-per-second))) + (when (> time-since-last 0.1) + (format (current-error-port) + "after gc (additional time taken: ~f)\n" + time-since-last)) + (set! last-gc-time-taken + (assq-ref (gc-stats) 'gc-time-taken)))))) + (while #t + (sleep 0.1)))) + (let ((finished? (make-condition)) (request-scheduler #f)) (call-with-sigint