I think this remark in the referenced link is the best summary of "what could
be improved":
"""the biggest weakness of the sstate signature bits, in my opinion, is that
it only tracks inputs, not outputs. If task A depends on B, and the metadata
input to B changes, then A will be rebuilt, even if the *output* of B didn't
change as a result of the change to its metadata."""
For example, if someone fixes a bug in gcc that only applies to MIPS, then
builds that only target an ARM machine shouldn't be affected. Much worse than
that, I have a dependency like:
gcc -> ... -> python -> bitstream tool -> FPGA image
so this means that a change in gcc causes Python to rebuild, which causes the
bitstream tool to be rebuilt and produce idential output, and that triggers a
roughly 31-hour build of lots of FPGA images. These are the ones we really
want to break. A binary output compare would help a lot, even if 80% of the
libraries fail to create reproducible output, I may still be spared those 31
hours...
I think tracking digital output is technically feasible, and won't require any
change to existing recipes.
Also think about "feed" setups. When I see my settop reporting "331 packages
need updating"... It'd be great if that could be avoided.
On 01-07-17 09:48, Martin Jansa wrote:
I haven't tried the patches, but I really like this idea (I was suggesting
something like that since 2011
http://permalink.gmane.org/gmane.comp.handhelds.openembedded.core/10327) and
I'm glad you weren't discouraged attempting to do this.
It also implements 3) b) idea from
https://bugzilla.yoctoproject.org/show_bug.cgi?id=5970 , you might be
interested read that ticket.
Thanks
On Fri, Jun 30, 2017 at 11:48 AM, Michael Ho <michael...@bmw-carit.de
<mailto:michael...@bmw-carit.de>> wrote:
Hi, at BMW Car IT we are working on an experimental feature to improve
sstate
cache hits and we are looking for comments on the approach who might have
some
insights to the problem and seeing if anyone is interested in the feature
for
mainline.
The sstate-cache of a recipe is tied closely to its build dependencies, as
the
signature generated for a task includes all parent task's signatures as
part of
the signature information. This means that when changes occur in the parent
recipes, even if insignificant, all children recipes that have valid sstate
cache must invalidate their sstate cache objects.
What this patchset does is propose to add another optional variable to
recipes,
CDEPENDS, which acts like DEPENDS for all RunQueue purposes but for
signature
generation it excludes any parent tasks that come from dependencies listed
in
it. This is to break the signature change domino effect.
This patchset also proposes modifying RunQueue to then be able to run a
compatibility checker during task execution phase for recipes and tasks
that use
CDEPENDS and allow for deciding to re-execute a task despite being covered
by
sstate-cache.
The patchset is based on the jethro branch for the poky repository, as this
is
the branch that we are using. If the general idea sounds good, we can
consider
porting it to master.
Included is an patch that adds an example recipe and compatibility checker,
where compatibility is based on the file checksums of the parent recipes
packages. An example recipe, cdepends-test1, generates a compatibility
report
containing the file checksums of all files that it packages and which file
paths
they are at. Another recipe, cdepends-test2, can then strip this
compatibility
report to the minimal files it needs to be consistent and can compare the
latest
checksums it used to configure/compile/install with and if they have
changed,
trigger a rebuild. If not, the previous version restored from sstate-cache
is
used.
We are still experimenting with the usages of this, including the use of
having
abi-compliance-checker to compare the ABI of shared libraries as a
compatibility
checker during RunQueue and using the results to avoid rebuilding child
recipes
when the .so files they depend on are still compatible. Example use cases of
this are allowing recipes which provide multiple shared libraries to change
a
single .so file without rebuilding all its children that depend on the other
shared libraries but not the one that changed.
We're aware of the SIGGEN_EXCLUDERECIPES_ABISAFE feature but feel it
didn't meet
the feature requirements of what this compatibility checker callback is
doing,
although maybe when porting to master we could refactor to make better use
of
the work already done there. The current implementation is a bit hacky but
comments would be appreciated in regards to if the concept is feasible and
if
people are interested in making use of it and their use cases.
Kind regards,
Michael Ho
--
BMW Car IT GmbH
Michael Ho
Spezialist Entwicklung - Linux Software Integration
Lise-Meitner-Str. 14
89081 Ulm
Tel.: +49 731 3780 4071 <tel:%2B49%20731%203780%204071>
Mobil: +49 152 5498 0471 <tel:%2B49%20152%205498%200471>
Fax: +49-731-37804-001 <tel:%2B49-731-37804-001>
Mail: michael...@bmw-carit.de <mailto:michael...@bmw-carit.de>
Web: http://www.bmw-carit.de
--------------------------------------------------------
BMW Car IT GmbH
Gechäftsführer: Kai-Uwe Balszuweit und Alexis Trolin
Sitz und Registergericht: München HRB 134810
--------------------------------------------------------
--
Kind regards,
Mike Looijmans
System Expert
TOPIC Products
Materiaalweg 4, NL-5681 RJ Best
Postbus 440, NL-5680 AK Best
Telefoon: +31 (0) 499 33 69 79
E-mail: mike.looijm...@topicproducts.com
Website: www.topicproducts.com
Please consider the environment before printing this e-mail
Visit us at the Space Tech Expo Europe (Stand E-71)
_______________________________________________
yocto mailing list
yocto@yoctoproject.org <mailto:yocto@yoctoproject.org>
https://lists.yoctoproject.org/listinfo/yocto
<https://lists.yoctoproject.org/listinfo/yocto>
--
_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto