From: Adrian Bunk <bunk@stusta.de>
To: Richard Purdie <richard.purdie@linuxfoundation.org>
Cc: openembedded-core@lists.openembedded.org
Subject: Re: [PATCH v2] bitbake.conf: omit XZ threads and RAM from sstate signatures
Date: Mon, 24 Feb 2020 19:12:26 +0200 [thread overview]
Message-ID: <20200224171226.GF27036@localhost> (raw)
In-Reply-To: <669ba509f1df86a8f2c7ea172aa8ff23d7449744.camel@linuxfoundation.org>
On Mon, Feb 24, 2020 at 04:44:28PM +0000, Richard Purdie wrote:
> On Mon, 2020-02-24 at 15:40 +0200, Adrian Bunk wrote:
> > On Mon, Feb 24, 2020 at 12:59:55PM +0000, André Draszik wrote:
> > > The number of threads used, and the amount of memory allowed
> > > to be used, should not affect sstate signatures, as they
> > > don't affect the result.
> >
> > Unfortunately they can affect the result.
>
> I looked into this a bit and its complicated. The threads are used to
> compress chunks and their compression should be deterministic whether
> done serially or in parallel.
>
> I did some tests and:
>
> xz <file>
> gave equivalent output to:
> xz <file> --threads=1
>
> and
>
> xz <file> --threads=2
> xz <file> --threads=5
> xz <file> --threads=50
>
> all give different identical output.
>
> So if we force --threads >=2 we should have determinism?
This was also my guess after reading the manpage,
but no definite answer from me.
> > > Otherwise, it becomes impossible to re-use sstate from
> > > automated builders on developer's machines (as the former
> > > might execute bitbake with certain constraints different
> > > compared to developer's machines).
> > > ...
> > > -XZ_DEFAULTS ?= "--memlimit=50% --threads=${@oe.utils.cpu_count()}"
> > > ...
> >
> > Threaded compression can result in slightly worse compression
> > than single-threaded compression.
> >
> > With memlimit the problem is actually the opposite way,
> > and worse than what you were trying to fix:
> >
> > When a developer hits memlimit during compression, the documented
> > behavour of xz is to scale down the compression level.
> >
> > I assume 50% wrongly gives the same sstate signature no matter how
> > much RAM is installed on the local machine?
>
> I did some tests locally and I could see different output checksums
> depending on how much memory I gave xz.
>
> Perhaps we should specify a specific high amount like 1GB?
xz -9 needs 1.25 GB per thread.
And since xz decompression speed is linear to compressed size,
-9 is often wanted since it gives the fastest xz decompression.
> Does anyone know more about the internals and how to have this behave
> "nicely" for our needs?
>
> FWIW we haven't seen variation on the autobuilder due to this as far as
> I know.
I assume the autobuilders have plenty of RAM per core?
For any reasonably sizes machine that doesn't OOM on larger C++ projects
the memlimit is a nop and can be dropped.
More problematic might be developers with oldish desktops/laptops with
many cores and few RAM.
> Cheers,
>
> Richard
cu
Adrian
next prev parent reply other threads:[~2020-02-24 17:12 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-24 12:59 [PATCH v2] bitbake.conf: omit XZ threads and RAM from sstate signatures André Draszik
2020-02-24 13:40 ` Adrian Bunk
2020-02-24 14:21 ` André Draszik
2020-02-24 14:31 ` Adrian Bunk
2020-02-24 14:58 ` André Draszik
2020-02-24 15:10 ` Adrian Bunk
2020-02-25 11:16 ` reproducible builds involving xz (was: Re: [PATCH v2] bitbake.conf: omit XZ threads and RAM from sstate signatures) André Draszik
2020-02-25 11:23 ` Richard Purdie
2020-02-24 16:44 ` [PATCH v2] bitbake.conf: omit XZ threads and RAM from sstate signatures Richard Purdie
2020-02-24 17:12 ` Adrian Bunk [this message]
2020-02-24 17:14 ` André Draszik
2020-02-24 17:32 ` Richard Purdie
2020-02-24 22:00 ` Adrian Bunk
2020-02-25 9:16 ` André Draszik
2020-02-25 9:54 ` Adrian Bunk
2020-02-26 15:26 ` xz threads / memlimit behaviour (was: Re: [PATCH v2] bitbake.conf: omit XZ threads and RAM from sstate signatures) André Draszik
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=20200224171226.GF27036@localhost \
--to=bunk@stusta.de \
--cc=openembedded-core@lists.openembedded.org \
--cc=richard.purdie@linuxfoundation.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.
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.