[bitbake-devel] [PATCH] cooker/siggen: Empty siggen cache during parsing
akuster808
akuster808 at gmail.com
Tue Feb 18 15:44:47 UTC 2020
On 2/17/20 8:23 AM, Richard Purdie wrote:
> When parsing recipes its apparent the memory usage of bitbake rises linearly
> with number of recipes parsed. It shouldn't.
This seems back port worthy to 1.44, 1.42
- armin
>
> Using tracemalloc (thanks for the tip Joshua Lock) it was clear that the
> dependency information left behind in siggen was the culprit. Add a new
> method to allow us to drop this information. We don't need it after the recipe
> has been parsed and hashes calculated (at runtime its different but only the
> currently executing task would be in memory).
>
> This should give signficant memory usage improvements for bitbake and that
> in turn should help speed on more constrained systems, as well as when used in
> multiconfig environments.
>
> Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
> ---
> lib/bb/cooker.py | 3 ++-
> lib/bb/siggen.py | 11 +++++++++++
> 2 files changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/lib/bb/cooker.py b/lib/bb/cooker.py
> index 1124332186..a05630d52d 100644
> --- a/lib/bb/cooker.py
> +++ b/lib/bb/cooker.py
> @@ -1940,7 +1940,8 @@ class Parser(multiprocessing.Process):
> except IndexError:
> break
> result = self.parse(*job)
> -
> + # Clear the siggen cache after parsing to control memory usage, its huge
> + bb.parse.siggen.postparsing_clean_cache()
> try:
> self.results.put(result, timeout=0.25)
> except queue.Full:
> diff --git a/lib/bb/siggen.py b/lib/bb/siggen.py
> index ffd8fcaf36..c2d0c736cf 100644
> --- a/lib/bb/siggen.py
> +++ b/lib/bb/siggen.py
> @@ -51,6 +51,9 @@ class SignatureGenerator(object):
> def finalise(self, fn, d, varient):
> return
>
> + def postparsing_clean_cache(self):
> + return
> +
> def get_unihash(self, tid):
> return self.taskhash[tid]
>
> @@ -188,6 +191,14 @@ class SignatureGeneratorBasic(SignatureGenerator):
> for task in taskdeps:
> d.setVar("BB_BASEHASH_task-%s" % task, self.basehash[fn + ":" + task])
>
> + def postparsing_clean_cache(self):
> + #
> + # After parsing we can remove some things from memory to reduce our memory footprint
> + #
> + self.gendeps = {}
> + self.lookupcache = {}
> + self.taskdeps = {}
> +
> def rundep_check(self, fn, recipename, task, dep, depname, dataCache):
> # Return True if we should keep the dependency, False to drop it
> # We only manipulate the dependencies for packages not in the whitelist
More information about the bitbake-devel
mailing list