unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
To: "Ludovic Courtès" <ludovic.courtes@inria.fr>
Cc: Guix-devel <guix-devel@gnu.org>
Subject: Re: Speeding up archive export
Date: Mon, 14 Sep 2020 21:40:30 -0400	[thread overview]
Message-ID: <87d02n4y29.fsf@gmail.com> (raw)
In-Reply-To: <87a6xyhujp.fsf@inria.fr> ("Ludovic Courtès"'s message of "Thu, 10 Sep 2020 11:04:26 +0200")

Hi Ludo!

Ludovic Courtès <ludovic.courtes@inria.fr> writes:

> Hello Guix!
>
> If you’ve ever used offloading (or ‘guix copy’), you’ve probably noticed
> that the time to send store items is proportional to the number of store
> items to send rather than their total size.  Namely:
>
>   guix archive --export coreutils
>
> is fast, but:
>
>   guix archive --export $(guix build -d coreutils)
>
> is slow (there are lots of small files).
>
> Running ‘perf timechart record guix archive --export …’ confirms the
> problem: guix-daemon is mostly idle, waiting for all the tiny ‘guix
> authenticate’ programs it spawns to sign each every store item.  Here’s
> the Gantt diagram (grey = idle, blue = busy):

Very cool!  The timechart suggests the guix-authenticate programs are
run sequentially?  Perhaps running them in parallel would be a cheap,
first step to improve performance?

> How can we improve on that?
>
> Here are several solutions that come to mind:
>
>   1. Sign the whole bundle instead of each individual item.
>
>      That solves the problem, but that would prevent the receiver from
>      storing individual store item signatures in the future (a few years
>      ago Nix added signatures as part of the ‘ValidPathInfo’ table of
>      the store database, and I think that’s something we might want to
>      have too).

Why? Couldn't the receiver do the book keeping no matter if it received
a signed bundle or a single file?  It could assign the bundle signature
to individual store files in the database, for example.  This seems the
obvious, easy solution.  We need good arguments to not implement it.

>   2. Sign fewer items: we can do that by signing only store items that
>      are not content-addressed—i.e., resulting from a fixed-output
>      derivation or being a “source” coming from ‘add-to-store’ or
>      similar.
>
>      That means we wouldn’t have to sign .drv and *-guile-builder, which
>      would make a big difference and is generally advisable.
>      Unfortunately, there’s no easy way to determine whether a store
>      item is content-addressable.  Again Nix added
>      “certificate-addressability claims” to ‘ValidPathInfo’, which might
>      help, though it’s not entirely clear.
>
>   3. Reimplement ‘guix authenticate’ and a subset of (guix pki) in C++ (!).
>      We could load the keys and the ACL only once, and we wouldn’t have
>      to fork and all, I’m sure it’d be very fast… and very distracting
>      too: I’d rather investigate in the daemon rewrite in Scheme.
>
>   4. Spawn ‘guix authenticate’ once and talk to it over a pipe (similar
>      to ‘guix offload’).  That might be the easiest short-term solution.

Failing 1., 4. is my second favorite, because it seems the most Guixy of
the remaining options, and should provide acceptable performance.

Maxim


  reply	other threads:[~2020-09-15  1:39 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-10  9:04 Speeding up archive export Ludovic Courtès
2020-09-15  1:40 ` Maxim Cournoyer [this message]
2020-09-15  7:53   ` Ludovic Courtès
2020-09-15 17:14     ` Maxim Cournoyer

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

  List information: https://guix.gnu.org/

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

  git send-email \
    --in-reply-to=87d02n4y29.fsf@gmail.com \
    --to=maxim.cournoyer@gmail.com \
    --cc=guix-devel@gnu.org \
    --cc=ludovic.courtes@inria.fr \
    /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 public inbox

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).