[bitbake-devel] [PATCH 1/3] runqueue: Optimise holdoff task handling

Richard Purdie richard.purdie at linuxfoundation.org
Fri Aug 16 16:16:35 UTC 2019


We don't need to process the holdoff task list until we're executing tasks
which saves some data manipulation, at the cost of some data structures
not being correct at all times. This saves significant amounts of time
in various profile charts of larger builds.

Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
 lib/bb/runqueue.py | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/lib/bb/runqueue.py b/lib/bb/runqueue.py
index 88212ca00c..0c17a23bdc 100644
--- a/lib/bb/runqueue.py
+++ b/lib/bb/runqueue.py
@@ -1711,6 +1711,7 @@ class RunQueueExecute:
         self.stampcache = {}
 
         self.holdoff_tasks = set()
+        self.holdoff_need_update = True
         self.sqdone = False
 
         self.stats = RunQueueStats(len(self.rqdata.runtaskentries))
@@ -2057,6 +2058,8 @@ class RunQueueExecute:
                 self.rq.state = runQueueComplete
                 return True
 
+        self.update_holdofftasks()
+
         if self.cooker.configuration.setsceneonly:
             task = None
         else:
@@ -2194,6 +2197,9 @@ class RunQueueExecute:
         return taskdepdata
 
     def update_holdofftasks(self):
+
+        if not self.holdoff_need_update:
+            return
         self.holdoff_tasks = set()
 
         for tid in self.rqdata.runq_setscene_tids:
@@ -2205,6 +2211,8 @@ class RunQueueExecute:
                 if dep not in self.runq_complete:
                     self.holdoff_tasks.add(dep)
 
+        self.holdoff_need_update = False
+
     def process_possible_migrations(self):
 
         changed = set()
@@ -2324,7 +2332,7 @@ class RunQueueExecute:
             self.sqdone = False
 
         if changed:
-            self.update_holdofftasks()
+            self.holdoff_need_update = True
 
     def scenequeue_updatecounters(self, task, fail=False):
 
@@ -2373,7 +2381,7 @@ class RunQueueExecute:
         self.tasks_covered = covered
         self.tasks_notcovered = notcovered
 
-        self.update_holdofftasks()
+        self.holdoff_need_update = True
 
     def sq_task_completeoutright(self, task):
         """
-- 
2.20.1



More information about the bitbake-devel mailing list