diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2019-12-14 18:17:01 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2019-12-15 09:40:33 +0000 |
commit | de18824996841c3f35f54ff5ad12f94f6dc20d88 (patch) | |
tree | e2b24bb79b1f2ab215c9d798ae7fddc3ff79bc1b | |
parent | 6a32af2808d748819f4af55c443578c8a63062b3 (diff) | |
download | bitbake-contrib-de18824996841c3f35f54ff5ad12f94f6dc20d88.tar.gz |
runqueue: Fix sstate task iteration performance
Creating a new sorted list of sstate tasks each iteration through runqueue is
extremely ineffecient and was compounded by the recent change from a list to set.
Create one sorted list instead of recreating it each time.
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | lib/bb/runqueue.py | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/lib/bb/runqueue.py b/lib/bb/runqueue.py index 515e9d431..2ba4557f9 100644 --- a/lib/bb/runqueue.py +++ b/lib/bb/runqueue.py @@ -1965,10 +1965,14 @@ class RunQueueExecute: self.rq.read_workers() self.process_possible_migrations() + if not hasattr(self, "sorted_setscene_tids"): + # Don't want to sort this set every execution + self.sorted_setscene_tids = sorted(self.rqdata.runq_setscene_tids) + task = None if not self.sqdone and self.can_start_task(): # Find the next setscene to run - for nexttask in sorted(self.rqdata.runq_setscene_tids): + for nexttask in self.sorted_setscene_tids: if nexttask in self.sq_buildable and nexttask not in self.sq_running and self.sqdata.stamps[nexttask] not in self.build_stamps.values(): if nexttask not in self.sqdata.unskippable and len(self.sqdata.sq_revdeps[nexttask]) > 0 and self.sqdata.sq_revdeps[nexttask].issubset(self.scenequeue_covered) and self.check_dependencies(nexttask, self.sqdata.sq_revdeps[nexttask]): if nexttask not in self.rqdata.target_tids: |