diff options
author | Chen Qi <Qi.Chen@windriver.com> | 2023-04-06 20:07:14 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2023-04-13 12:01:45 +0100 |
commit | ba94f9a3b1960cc0fdc831c20a9d2f8ad289f307 (patch) | |
tree | 523fb1bdee86574fdd44a29a0da87c1e7e544cc4 /bitbake/lib/bb/runqueue.py | |
parent | a99566dac13f0ec1e91fd79c5b78395f3ee0ef56 (diff) | |
download | poky-ba94f9a3b1960cc0fdc831c20a9d2f8ad289f307.tar.gz |
bitbake: runqueue: fix PSI check calculation
The current PSI check calculation does not take into consideration
the possibility of the time interval between last check and current
check being much larger than 1s. In fact, the current behavior does
not match what the manual says about BB_PRESSURE_MAX_XXX, even if
the value is set to upper limit, 1000000, we still get many blocks
on new task launch. The difference between 'total' should be divided
by the time interval if it's larger than 1s.
(Bitbake rev: b4763c2c93e7494e0a27f5970c19c1aac66c228b)
Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/runqueue.py')
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index e629ab7e7b..02f1474540 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
@@ -198,15 +198,20 @@ class RunQueueScheduler(object): | |||
198 | curr_cpu_pressure = cpu_pressure_fds.readline().split()[4].split("=")[1] | 198 | curr_cpu_pressure = cpu_pressure_fds.readline().split()[4].split("=")[1] |
199 | curr_io_pressure = io_pressure_fds.readline().split()[4].split("=")[1] | 199 | curr_io_pressure = io_pressure_fds.readline().split()[4].split("=")[1] |
200 | curr_memory_pressure = memory_pressure_fds.readline().split()[4].split("=")[1] | 200 | curr_memory_pressure = memory_pressure_fds.readline().split()[4].split("=")[1] |
201 | exceeds_cpu_pressure = self.rq.max_cpu_pressure and (float(curr_cpu_pressure) - float(self.prev_cpu_pressure)) > self.rq.max_cpu_pressure | ||
202 | exceeds_io_pressure = self.rq.max_io_pressure and (float(curr_io_pressure) - float(self.prev_io_pressure)) > self.rq.max_io_pressure | ||
203 | exceeds_memory_pressure = self.rq.max_memory_pressure and (float(curr_memory_pressure) - float(self.prev_memory_pressure)) > self.rq.max_memory_pressure | ||
204 | now = time.time() | 201 | now = time.time() |
205 | if now - self.prev_pressure_time > 1.0: | 202 | tdiff = now - self.prev_pressure_time |
203 | if tdiff > 1.0: | ||
204 | exceeds_cpu_pressure = self.rq.max_cpu_pressure and (float(curr_cpu_pressure) - float(self.prev_cpu_pressure)) / tdiff > self.rq.max_cpu_pressure | ||
205 | exceeds_io_pressure = self.rq.max_io_pressure and (float(curr_io_pressure) - float(self.prev_io_pressure)) / tdiff > self.rq.max_io_pressure | ||
206 | exceeds_memory_pressure = self.rq.max_memory_pressure and (float(curr_memory_pressure) - float(self.prev_memory_pressure)) / tdiff > self.rq.max_memory_pressure | ||
206 | self.prev_cpu_pressure = curr_cpu_pressure | 207 | self.prev_cpu_pressure = curr_cpu_pressure |
207 | self.prev_io_pressure = curr_io_pressure | 208 | self.prev_io_pressure = curr_io_pressure |
208 | self.prev_memory_pressure = curr_memory_pressure | 209 | self.prev_memory_pressure = curr_memory_pressure |
209 | self.prev_pressure_time = now | 210 | self.prev_pressure_time = now |
211 | else: | ||
212 | exceeds_cpu_pressure = self.rq.max_cpu_pressure and (float(curr_cpu_pressure) - float(self.prev_cpu_pressure)) > self.rq.max_cpu_pressure | ||
213 | exceeds_io_pressure = self.rq.max_io_pressure and (float(curr_io_pressure) - float(self.prev_io_pressure)) > self.rq.max_io_pressure | ||
214 | exceeds_memory_pressure = self.rq.max_memory_pressure and (float(curr_memory_pressure) - float(self.prev_memory_pressure)) > self.rq.max_memory_pressure | ||
210 | return (exceeds_cpu_pressure or exceeds_io_pressure or exceeds_memory_pressure) | 215 | return (exceeds_cpu_pressure or exceeds_io_pressure or exceeds_memory_pressure) |
211 | return False | 216 | return False |
212 | 217 | ||