summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/runqueue.py16
1 files changed, 16 insertions, 0 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py
index e86ccd8c61..6987de3e29 100644
--- a/bitbake/lib/bb/runqueue.py
+++ b/bitbake/lib/bb/runqueue.py
@@ -220,6 +220,16 @@ class RunQueueScheduler(object):
220 bb.note("Pressure status changed to CPU: %s, IO: %s, Mem: %s (CPU: %s/%s, IO: %s/%s, Mem: %s/%s) - using %s/%s bitbake threads" % (pressure_state + pressure_values + (len(self.rq.runq_running.difference(self.rq.runq_complete)), self.rq.number_tasks))) 220 bb.note("Pressure status changed to CPU: %s, IO: %s, Mem: %s (CPU: %s/%s, IO: %s/%s, Mem: %s/%s) - using %s/%s bitbake threads" % (pressure_state + pressure_values + (len(self.rq.runq_running.difference(self.rq.runq_complete)), self.rq.number_tasks)))
221 self.pressure_state = pressure_state 221 self.pressure_state = pressure_state
222 return (exceeds_cpu_pressure or exceeds_io_pressure or exceeds_memory_pressure) 222 return (exceeds_cpu_pressure or exceeds_io_pressure or exceeds_memory_pressure)
223 elif self.rq.max_loadfactor:
224 limit = False
225 loadfactor = float(os.getloadavg()[0]) / os.cpu_count()
226 # bb.warn("Comparing %s to %s" % (loadfactor, self.rq.max_loadfactor))
227 if loadfactor > self.rq.max_loadfactor:
228 limit = True
229 if hasattr(self, "loadfactor_limit") and limit != self.loadfactor_limit:
230 bb.note("Load average limiting set to %s as load average: %s - using %s/%s bitbake threads" % (limit, loadfactor, len(self.rq.runq_running.difference(self.rq.runq_complete)), self.rq.number_tasks))
231 self.loadfactor_limit = limit
232 return limit
223 return False 233 return False
224 234
225 def next_buildable_task(self): 235 def next_buildable_task(self):
@@ -1822,6 +1832,7 @@ class RunQueueExecute:
1822 self.max_cpu_pressure = self.cfgData.getVar("BB_PRESSURE_MAX_CPU") 1832 self.max_cpu_pressure = self.cfgData.getVar("BB_PRESSURE_MAX_CPU")
1823 self.max_io_pressure = self.cfgData.getVar("BB_PRESSURE_MAX_IO") 1833 self.max_io_pressure = self.cfgData.getVar("BB_PRESSURE_MAX_IO")
1824 self.max_memory_pressure = self.cfgData.getVar("BB_PRESSURE_MAX_MEMORY") 1834 self.max_memory_pressure = self.cfgData.getVar("BB_PRESSURE_MAX_MEMORY")
1835 self.max_loadfactor = self.cfgData.getVar("BB_LOADFACTOR_MAX")
1825 1836
1826 self.sq_buildable = set() 1837 self.sq_buildable = set()
1827 self.sq_running = set() 1838 self.sq_running = set()
@@ -1875,6 +1886,11 @@ class RunQueueExecute:
1875 bb.fatal("Invalid BB_PRESSURE_MAX_MEMORY %s, minimum value is %s." % (self.max_memory_pressure, lower_limit)) 1886 bb.fatal("Invalid BB_PRESSURE_MAX_MEMORY %s, minimum value is %s." % (self.max_memory_pressure, lower_limit))
1876 if self.max_memory_pressure > upper_limit: 1887 if self.max_memory_pressure > upper_limit:
1877 bb.warn("Your build will be largely unregulated since BB_PRESSURE_MAX_MEMORY is set to %s. It is very unlikely that such high pressure will be experienced." % (self.max_io_pressure)) 1888 bb.warn("Your build will be largely unregulated since BB_PRESSURE_MAX_MEMORY is set to %s. It is very unlikely that such high pressure will be experienced." % (self.max_io_pressure))
1889
1890 if self.max_loadfactor:
1891 self.max_loadfactor = float(self.max_loadfactor)
1892 if self.max_loadfactor <= 0:
1893 bb.fatal("Invalid BB_LOADFACTOR_MAX %s, needs to be greater than zero." % (self.max_loadfactor))
1878 1894
1879 # List of setscene tasks which we've covered 1895 # List of setscene tasks which we've covered
1880 self.scenequeue_covered = set() 1896 self.scenequeue_covered = set()