[Buildroot] 2019.02 performance

Thomas Petazzoni thomas.petazzoni at bootlin.com
Tue Mar 12 08:05:18 UTC 2019


Hello,

First of all, thanks a *lot* for sharing this kind of analysis. This is
very useful.

On Mon, 11 Mar 2019 21:59:03 +0000
Trent Piepho <tpiepho at impinj.com> wrote:

> With 2018.02, I had to disable the package size and related hooks as
> they were too slow: over half the build time.  As I'm sure some
> remember, there was a thread about it and performance was
> improved.  Here's the results with 2019.02.  I'm using a real config
> for a product we have and testing on a reasonably modern native Linux
> workstation with a decent NVMe SSD and a four core processor.  Using
> ccache, which had already built the software.

A hot ccache will drastically decrease the time of the "build" step of
each package, and make the "configure" and "install" steps look
comparatively very long. A build without ccache support or with a cold
cache will show a much larger "build" time I believe.

> Breakdown by build step (host/stage/target/images mean install same),
> across all packages:
> 
> configure                666.223
> build                    381.480
> host                     122.191
> extract                   57.489
> target                    57.039
> stage                     28.356
> patch                      9.711
> postimage                  9.008
> finalize                   6.396
> images                     0.063
> download                   0.022
> 
> 
> The single threaded configure and cmake scripts remain the killer,
> through total of all install steps is about 2/3 of the build step time.
> 
> Breakdown for the global instrumentation hooks, across all packages and
> build steps:
> 
> check_host_rpath          64.345
> step_pkg_size             32.992
> check_bin_arch            26.286
> step_check_build_dir       8.365
> step_time                  7.895
> 
> pkg_size is much more reasonable now.  In total, these are about 10.2%
> of the total build time.

10% just for the instrumentation is still a lot. Our of 22 minutes of
your build time, it's still ~2 minutes. The clear dominating factor
here is check_host_rpath. If I'm reading the check-host-rpath
correctly, we are checking all files in $(HOST_DIR) at the end of the
build of every package. Couldn't this be optimized by using the list of
files installed by a package, like we do for check-bin-arch ?

I think that back when check-host-rpath we introduced, we did not had
the list of files installed by host packages. But now that we do,
perhaps we should use it ?

For the other ones, I don't immediately see any easy optimization
route, except perhaps writing some dedicated C programs instead of
using the slower shell scripts forking like crazy.

Best regards,

Thomas Petazzoni
-- 
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com


More information about the buildroot mailing list