From: ludo@gnu.org (Ludovic Courtès)
To: Andy Wingo <wingo@igalia.com>
Cc: guix-devel <guix-devel@gnu.org>
Subject: Re: Guile 2.2 .go files are larger
Date: Thu, 27 Apr 2017 16:03:36 +0200 [thread overview]
Message-ID: <87zif254nb.fsf@gnu.org> (raw)
In-Reply-To: <cuc60hugqlk.fsf@igalia.com> (Andy Wingo's message of "Mon, 24 Apr 2017 10:24:55 +0200")
Hi!
Andy Wingo <wingo@igalia.com> skribis:
> On Sat 22 Apr 2017 15:19, ludo@gnu.org (Ludovic Courtès) writes:
>
>> The closure of Guix built with 2.0 is 193.8 MiB; when built with 2.2,
>> it’s 311.8 MiB. Guix itself goes from 66 to 150 MiB:
>>
>> $ du -ms /gnu/store/jh07pwbyf5dbpdd5q0nvgagqkgmh76nh-guix-0.12.0-9.25a4/lib/guile/2.2
>> 101 /gnu/store/jh07pwbyf5dbpdd5q0nvgagqkgmh76nh-guix-0.12.0-9.25a4/lib/guile/2.2
>> $ du -ms /gnu/store/rnpz1svz4aw75kibb5qb02hhccy2m4y0-guix-0.12.0-7.aabe/lib/guile/2.0
>> 24 /gnu/store/rnpz1svz4aw75kibb5qb02hhccy2m4y0-guix-0.12.0-7.aabe/lib/guile/2.0
>
> Before we begin, some general notes. My understanding is that the heap
> usage corresponding to an individual Guix process will be lower, both
> due to allocation of read-only data in read-only, shareable sections of
> the .go ELF files, allocation of read-write data in packed sections
> known to the GC but not managed by GC, and various optimizations that
> can eliminate or simplify some heap allocations (closure optimization
> among them). In short my understanding is that Guile 2.2 (and systems
> built on it) should have a smaller run-time footprint than Guile 2.2.
Yes of course.
>> Would you have any suggestions to shrink the ELF files a bit?
>
> Why? Have you compared gzipped or lzipped sizes? I don't want to put
> effort in here that's not worth it :)
--8<---------------cut here---------------start------------->8---
$ du -ms $(./pre-inst-env guix pack guile@2.0)
35 /gnu/store/25ppdmridc8i1j771s9c498y1sr9xfzb-tarball-pack.tar.gz
$ du -ms $(./pre-inst-env guix pack guile@2.2)
40 /gnu/store/3fkhdpfpjjn8088fs0dxgb6hi38ac46m-tarball-pack.tar.gz
--8<---------------cut here---------------end--------------->8---
(Of course the difference is also due to the additional source code in
2.2.)
> Part of it is that our page alignment is 64 kB and so average wasteage
> per .go is 32kB, and there are a lot of .go files. These are just zero
> bytes though.
OK. It might be that file systems can store sparse files reasonably
efficiently.
> If you look at an individual file, you can use readelf to see things, or
> that old ELF visualizer I wrote:
>
> https://wingolog.org/elf-mapper/
>
> Here's a map of gnu/packages/curl.go:
>
> https://wingolog.org/pub/elf/elf-JWXYrI.png
>
> I think stripping the .debug_* stuff won't get you much of anywhere.
>
> Stripping arities info could reduce size by 10%. We could figure out a
> different way to represent arities that takes less space.
>
> Compiling all the .go files together (requires Guile hacking) could
> remove that per-go 64kB alignment overhead. Alternately we could do
> what GNU tools / ld.so do which maps the linear sequence of bytes in the
> file to aligned segments in memory.
>
> Honestly though I would punt. It's not a run-time issue. I don't think
> it's a transport issue. It's only a disk space issue. I personally
> don't plan to spend time on it but am happy to point out possibilities
> to people that will do so.
Sure, I understand. I was just wondering if there was some low-hanging
fruit here.
Thanks for your feedback!
Ludo’.
prev parent reply other threads:[~2017-04-27 14:03 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-22 13:19 Guile 2.2 .go files are larger Ludovic Courtès
2017-04-24 8:24 ` Andy Wingo
2017-04-24 8:57 ` Andy Wingo
2017-04-27 14:03 ` Ludovic Courtès [this message]
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=87zif254nb.fsf@gnu.org \
--to=ludo@gnu.org \
--cc=guix-devel@gnu.org \
--cc=wingo@igalia.com \
/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.