Subject: Re: [bug#37305] Making system installation tests faster

From: Maxim Cournoyer <[email-masked]>
Date: Fri, 06 Mar 2020 23:01:14 -0500

Hello, this is a small update, to reflect recent changes to the code
base.

Maxim Cournoyer <[email-masked]> writes:

> Hello Ludovic!
>
> I have more benchmark results.  Not to be compared with the previous
> results, as these were executed on a much faster machine (24 cores vs 4
> cores), with an SSD instead of a rotative disk.
>
>
> Commands used:
>
> current-guix/pre-built:
>
> time ./pre-inst-env guix system build -e \
> '(begin
>   (use-modules
>    (gnu packages package-management))
>   (parameterize
>       ((current-guix-package
> 	(current-guix/pre-built)))
>     ((@@
>       (gnu tests install)
>       operating-system-with-current-guix)
>      (@@
>       (gnu tests install)
>       %btrfs-root-os))))'
>
>
> current-guix (old fashionned):
>
> time ./pre-inst-env guix system build -e \
> '(begin
>   (use-modules
>    (gnu packages package-management))
>   (parameterize
>       ((current-guix-package
> 	(current-guix)))
>     ((@@
>       (gnu tests install)
>       operating-system-with-current-guix)
>      (@@
>       (gnu tests install)
>       %btrfs-root-os))))'
>
>
> new current-guix (guix self):
>
> time ./pre-inst-env guix system build -e \
> '(begin
>    (use-modules ((gnu ci) #:select (channel-instance->package))
> 		(guix monads)
> 		(guix channels)
> 		(guix store)
> 		((guix status) #:select (with-status-verbosity))
> 		((guix git-download) #:select (git-predicate))
> 		(guix utils)
> 		(gnu packages package-management))
>    (with-store store
>      (with-status-verbosity 2
>        (run-with-store store
> 	 (mlet* %store-monad
> 	     ((source-dir -> "/home/mcournoyer/src/guix")
> 	      (source (interned-file source-dir
> 				     "guix-source"
> 				     #:recursive? #t
> 				     #:select? (or (git-predicate source-dir)
> 						   (const #t))))
> 	      (instance -> (checkout->channel-instance source))
> 	      (new-guix-current -> (channel-instance->package instance)))
> 	   (return  (parameterize ((current-guix-package new-guix-current))
> 		      ((@@ (gnu tests install) operating-system-with-current-guix)
> 		       (@@ (gnu tests install) %btrfs-root-os)))))))))'

There have been some changes made to the modules used in the benchmark code
above.  Here's an updated version:

--8<---------------cut here---------------start------------->8---
time ./pre-inst-env guix system build -e \
'(begin
   (use-modules ((gnu ci) #:select (channel-source->package))
		(guix monads)
		(guix channels)
		(guix store)
		((guix status) #:select (with-status-verbosity))
		((guix git-download) #:select (git-predicate))
		(guix utils)
		(gnu packages package-management))
   (with-store store
     (with-status-verbosity 2
       (run-with-store store
	 (mlet* %store-monad
	     ((source-dir -> "/home/mcournoyer/src/guix")
	      (source (interned-file source-dir
				     "guix-source"
				     #:recursive? #t
				     #:select? (or (git-predicate source-dir)
						   (const #t))))
	      (instance -> (checkout->channel-instance source))
	      (new-guix-current -> (channel-source->package instance)))
	   (return  (parameterize ((current-guix-package new-guix-current))
		      ((@@ (gnu tests install) operating-system-with-current-guix)
		       (@@ (gnu tests install) %btrfs-root-os)))))))))'
--8<---------------cut here---------------end--------------->8---

Time taken:

real    7m39.912s
user    0m57.129s
sys     0m0.499s

Compared to recycling the Guix development copy from the work tree:

real    0m48.297s
user    0m2.516s
sys     0m0.229s

Maxim