all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: ludo@gnu.org (Ludovic Courtès)
To: 27284@debbugs.gnu.org
Subject: bug#27284: Memory leak in 'guix pull' or 'make' in guix source
Date: Tue, 19 Sep 2017 22:48:16 +0200	[thread overview]
Message-ID: <87poamv2i7.fsf@gnu.org> (raw)
In-Reply-To: <20170608083935.izw747zaetkaxv4o@abyayala> (ng0@pragmatique.xyz's message of "Thu, 8 Jun 2017 08:39:35 +0000")

Hello Guix!

A heads-up to share the cognitive burden related to this topic.  :-)

So, we have two problems: compilation time, and memory consumption.  I
*think* I’ve identified one of the major causes for both in Guile,
though it’s too early to say exactly how much this will impact resource
consumption for a full Guix compilation.  See
<https://lists.gnu.org/archive/html/guile-devel/2017-09/msg00031.html>
for details.

When that is fixed, we’ll still have a performance problem: building all
of Guix will still take more time than we’d like, and it won’t get
better as we add new files.  So we need to address this.

This has been discussed informally many times, and here’s a summary of
the ideas I’m aware of:

  1. Build Guix as separate derivations: the first derivation builds the
     closure of (guix packages), the second one builds the closure of
     (guix scripts *), and finally we build (gnu *).  We could also have
     derivations for the non-Scheme parts: the daemon, the manual, etc.

     (That amounts to compartmentalizing Guix in sub-packages, which in
     a way solves the bootstrapping issue that Pjotr complained about at
     some point—the fact that to build Guix one needs Guile, Guile-JSON,
     GnuTLS, Autotools, etc.)

     The advantage is that when running ‘guix pull’ frequently, you
     won’t have to recompile all of these.  However, you’ll almost
     always have to rebuild (gnu packages *), which is the longest part.

  2. Build all of Guix like the ‘guix’ package does, and hope that we
     can get a substitute.

     Bootstrapping issue: to do that, we first need compute the
     derivation of this new ‘guix’ package.  Thus, we at least need to
     build the closure of (guix packages), which should take a minute or
     so, after which we can compute the derivation, which could take a
     couple of minutes maybe.

     The problem is that building all of Guix (including running the
     test suite) takes some time, potentially more than the interval
     between two subsequent pushes to the repo.  Thus, it’s quite likely
     that the build farm would always be lagging behind.

     We could work around that by having the build farm automatically
     tag commits for which it has successfully built Guix.  That would
     introduce delays in deploying the latest Guix to users, but maybe
     that can be short enough to be acceptable.

  2b. To address the bootstrapping issue above, we also discussed the
     possibility of setting up a “meta-derivation” service: you’d give
     it a Git commit, and it’d return the derivation of ‘guix’ for that
     commit.

     Less computation would take place on the user side, but that
     doesn’t reduce the delay mentioned above.

     It also has the downside of introducing another service without
     which using Guix is more painful.

I think that’s about it.

Thoughts?  Hacks?  :-)

Ludo’.

  parent reply	other threads:[~2017-09-19 20:49 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-08  8:39 bug#27284: Memory leak in 'guix pull' or 'make' in guix source ng0
2017-06-08 15:02 ` ng0
2017-09-19 20:48 ` Ludovic Courtès [this message]
2017-09-20  2:40   ` Maxim Cournoyer
2017-09-20 11:42     ` Ludovic Courtès
2017-09-20 18:29       ` Maxim Cournoyer
2017-09-20 20:12         ` Ludovic Courtès
2017-09-21 14:43           ` Maxim Cournoyer
2017-09-23 18:14       ` Taylan Ulrich Bayırlı/Kammer
2017-09-24 19:44         ` Ludovic Courtès
2017-09-25 21:00           ` Maxim Cournoyer
2017-10-20 16:05   ` bug#27284: [PATCH 0/8] 'guix pull' creates several derivations Ludovic Courtès
2017-10-20 16:05     ` bug#27284: [PATCH 1/8] build: Factorize module compilation in (guix build compile) Ludovic Courtès
2017-10-22 21:22       ` Maxim Cournoyer
2017-10-23  1:50         ` Ludovic Courtès
2017-10-22 21:42           ` Eric Bavier
2017-10-23  2:51             ` Ludovic Courtès
2017-10-22 22:52               ` Eric Bavier
2017-10-23  5:10                 ` Ludovic Courtès
2017-10-20 16:05     ` bug#27284: [PATCH 2/8] build: Honor make's '-j' flag Ludovic Courtès
2017-10-20 16:05     ` bug#27284: [PATCH 3/8] discovery: Move 'file-name->module-name' to (guix modules) Ludovic Courtès
2017-10-20 16:05     ` bug#27284: [PATCH 4/8] gexp: Add 'file-union' Ludovic Courtès
2017-10-20 16:05     ` bug#27284: [PATCH 5/8] gexp: Add 'directory-union' Ludovic Courtès
2017-10-20 16:05     ` bug#27284: [PATCH 6/8] union: Parametrize the symlink procedure Ludovic Courtès
2017-10-20 16:05     ` bug#27284: [PATCH 7/8] gexp: 'directory-union' has a #:quiet? parameter Ludovic Courtès
2017-10-20 16:05     ` bug#27284: [PATCH 8/8] DRAFT Add (guix self) and use it when pulling Ludovic Courtès
2017-10-22 20:05       ` Maxim Cournoyer
2017-10-27 23:49         ` Ludovic Courtès
2017-11-21 22:26     ` bug#27284: [PATCH 0/8] 'guix pull' creates several derivations Ludovic Courtès
2017-11-21 22:56       ` Ludovic Courtès
2017-12-11 10:52         ` bug#27284: [PATCH 0/4] 'guix pull' reloads modules, second try Ludovic Courtès
2017-12-11 10:52           ` bug#27284: [PATCH 1/4] gnu: Fix ambiguous 'zip' reference Ludovic Courtès
2017-12-11 10:52           ` bug#27284: [PATCH 2/4] gexp: 'computed-file' has a new #:guile parameter Ludovic Courtès
2017-12-11 10:52           ` bug#27284: [PATCH 3/4] Add (guix self) and use it when pulling Ludovic Courtès
2017-12-18 14:57             ` Ludovic Courtès
2018-03-27  9:14               ` bug#27284: ‘guix pull’ builds using multiple derivations Ludovic Courtès
2018-03-27 14:33                 ` Ludovic Courtès
2018-03-27 19:25                 ` Nils Gillmann
2018-03-27 20:51                   ` Ludovic Courtès
2018-04-08 16:37                 ` Ludovic Courtès
2018-04-09 19:53                   ` Ricardo Wurmus
2018-04-10 21:53                     ` bug#27284: ‘guix pull’ broken on Guile 2.0 Ludovic Courtès
2018-04-10 23:18                       ` bug#31117: " Ludovic Courtès
2018-04-14 17:39                         ` Ricardo Wurmus
2017-12-11 10:52           ` bug#27284: [PATCH 4/4] pull: Reload modules before doing anything else Ludovic Courtès
2017-11-12 21:33   ` bug#27284: Memory leak in 'guix pull' or 'make' in guix source Ludovic Courtès
2017-11-13  8:59     ` Ricardo Wurmus
2017-11-13  9:28       ` Ludovic Courtès
2017-11-13 14:09         ` Ricardo Wurmus
2017-11-13 17:48           ` Ricardo Wurmus
2017-11-14  7:54           ` Ludovic Courtès

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87poamv2i7.fsf@gnu.org \
    --to=ludo@gnu.org \
    --cc=27284@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.