diff options
author | Chen Qi <Qi.Chen@windriver.com> | 2023-11-10 14:54:33 +0100 |
---|---|---|
committer | Steve Sakoman <steve@sakoman.com> | 2023-12-11 06:13:49 -1000 |
commit | a76bc698c43a3e9792ec0ff8c97c446a20c1439e (patch) | |
tree | 652c546aabcd7166098e01676be6dcb626303255 /bitbake | |
parent | 3e73216a32a2b01916eb8c555a41579bd69a47aa (diff) | |
download | poky-a76bc698c43a3e9792ec0ff8c97c446a20c1439e.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: 2b2997ab6bdda730e4b638f416311a73e0c42156)
Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Diffstat (limited to 'bitbake')
-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 8605c46c86..3e89c38bcf 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 | ||