From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH] graph-depends: optimize remove_transitive_deps()
Date: Tue, 29 Dec 2015 23:28:25 +0100 [thread overview]
Message-ID: <20151229232825.0820a970@free-electrons.com> (raw)
In-Reply-To: <1450174901-30667-1-git-send-email-thomas.petazzoni@free-electrons.com>
Hello,
On Tue, 15 Dec 2015 11:21:41 +0100, Thomas Petazzoni wrote:
> For large configurations, the execution time of
> remove_transitive_deps() becomes really high, due to the number of
> nested loops + the is_dep() function being recursive.
>
> For an allyespackageconfig, the remove_extra_deps() function takes 334
> seconds to execute, and the overall time to generate the .dot file is
> 6 minutes and 39 seconds. Here is a timing of the different
> graph-depends steps and the overall execution time:
>
> Getting dependencies: 42.5735 seconds
> Turn deps into a dict: 0.0023 seconds
> Remove extra deps: 334.1542 seconds
> Get version: 22.4919 seconds
> Generate .dot: 0.0197 seconds
>
> real 6m39.289s
> user 6m16.644s
> sys 0m8.792s
>
> By adding a very simple cache for the results of is_dep(), we bring
> down the execution time of the "Remove extra deps" step from 334
> seconds to just 4 seconds, reducing the overall execution time to 1
> minutes and 10 seconds:
>
> Getting dependencies: 42.9546 seconds
> Turn deps into a dict: 0.0025 seconds
> Remove extra deps: 4.9643 seconds
> Get version: 22.1865 seconds
> Generate .dot: 0.0207 seconds
>
> real 1m10.201s
> user 0m47.716s
> sys 0m7.948s
>
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> ---
> support/scripts/graph-depends | 27 +++++++++++++++++++++++++++
> 1 file changed, 27 insertions(+)
I've applied an improved version provided by Yann E. Morin,
implementing the various suggestions he has made (mainly using
exceptions, and making the code more pythonic).
Thanks!
Thomas
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
prev parent reply other threads:[~2015-12-29 22:28 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-15 10:21 [Buildroot] [PATCH] graph-depends: optimize remove_transitive_deps() Thomas Petazzoni
2015-12-15 11:20 ` Gustavo Zacarias
2015-12-15 20:37 ` Yann E. MORIN
2015-12-15 21:23 ` Samuel Martin
2015-12-15 21:27 ` Samuel Martin
2015-12-29 22:28 ` Thomas Petazzoni [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=20151229232825.0820a970@free-electrons.com \
--to=thomas.petazzoni@free-electrons.com \
--cc=buildroot@busybox.net \
/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.