diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2025-07-16 16:15:31 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2025-07-17 10:45:57 +0100 |
commit | f209f127e654df7424adf41de07f88714d7952ab (patch) | |
tree | 5baa3d4f1f860dbdc0592cdb20e2bdac39b512e4 /bitbake/lib | |
parent | b7173ca2254421c45f01243a77be611fe4b9d1c5 (diff) | |
download | poky-master.tar.gz |
Starting with python 3.12, profiling now stays enabled over threads yet
you can't extract the profile data in the threads themselves, which makes it
difficult to use for our use case.
Our main loop starts the idle loop which starts the parsing threads and this
means we can't profile in the main loop and the parsing threads or the idle
loop at the same time due to this.
Add options to the commandline so you can specify which piece of bitbake
you want to enable profiling for. This allows some profiling with python 3.12
onwards rather than crashing.
(Bitbake rev: 09f29a4968841ee5070f70277ba8c253bb14f017)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib')
-rw-r--r-- | bitbake/lib/bb/cooker.py | 2 | ||||
-rwxr-xr-x | bitbake/lib/bb/main.py | 6 | ||||
-rw-r--r-- | bitbake/lib/bb/server/process.py | 6 |
3 files changed, 8 insertions, 6 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index c60fcd2719..fe33a4f34c 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py | |||
@@ -2027,7 +2027,7 @@ class Parser(multiprocessing.Process): | |||
2027 | self.exit = True | 2027 | self.exit = True |
2028 | 2028 | ||
2029 | def run(self): | 2029 | def run(self): |
2030 | bb.utils.profile_function(self.profile, self.realrun, "profile-parse-%s.log" % multiprocessing.current_process().name, process=False) | 2030 | bb.utils.profile_function("parsing" in self.profile, self.realrun, "profile-parse-%s.log" % multiprocessing.current_process().name, process=False) |
2031 | 2031 | ||
2032 | def realrun(self): | 2032 | def realrun(self): |
2033 | # Signal handling here is hard. We must not terminate any process or thread holding the write | 2033 | # Signal handling here is hard. We must not terminate any process or thread holding the write |
diff --git a/bitbake/lib/bb/main.py b/bitbake/lib/bb/main.py index bca8ebfa09..597cb27846 100755 --- a/bitbake/lib/bb/main.py +++ b/bitbake/lib/bb/main.py | |||
@@ -208,8 +208,10 @@ def create_bitbake_parser(): | |||
208 | "failed and anything depending on it cannot be built, as much as " | 208 | "failed and anything depending on it cannot be built, as much as " |
209 | "possible will be built before stopping.") | 209 | "possible will be built before stopping.") |
210 | 210 | ||
211 | exec_group.add_argument("-P", "--profile", action="store_true", | 211 | exec_group.add_argument("-P", "--profile", action="append", |
212 | help="Profile the command and save reports.") | 212 | default=[], |
213 | help="Profile the command and save reports. Specify 'main', 'idle' or 'parsing' " | ||
214 | "to indicate which bitbake code to profile.") | ||
213 | 215 | ||
214 | exec_group.add_argument("-S", "--dump-signatures", action="append", | 216 | exec_group.add_argument("-S", "--dump-signatures", action="append", |
215 | default=[], metavar="SIGNATURE_HANDLER", | 217 | default=[], metavar="SIGNATURE_HANDLER", |
diff --git a/bitbake/lib/bb/server/process.py b/bitbake/lib/bb/server/process.py index 2c5057bff1..7d1b38f78c 100644 --- a/bitbake/lib/bb/server/process.py +++ b/bitbake/lib/bb/server/process.py | |||
@@ -137,7 +137,7 @@ class ProcessServer(): | |||
137 | serverlog("Error writing to lock file: %s" % str(e)) | 137 | serverlog("Error writing to lock file: %s" % str(e)) |
138 | pass | 138 | pass |
139 | 139 | ||
140 | return bb.utils.profile_function(self.cooker.configuration.profile, self.main, "profile-mainloop.log") | 140 | return bb.utils.profile_function("main" in self.cooker.configuration.profile, self.main, "profile-mainloop.log") |
141 | 141 | ||
142 | def _idle_check(self): | 142 | def _idle_check(self): |
143 | return len(self._idlefuns) == 0 and self.cooker.command.currentAsyncCommand is None | 143 | return len(self._idlefuns) == 0 and self.cooker.command.currentAsyncCommand is None |
@@ -398,7 +398,7 @@ class ProcessServer(): | |||
398 | serverlog("".join(msg)) | 398 | serverlog("".join(msg)) |
399 | 399 | ||
400 | def idle_thread(self): | 400 | def idle_thread(self): |
401 | bb.utils.profile_function(self.cooker.configuration.profile, self.idle_thread_internal, "profile-idleloop.log") | 401 | bb.utils.profile_function("idle" in self.cooker.configuration.profile, self.idle_thread_internal, "profile-idleloop.log") |
402 | 402 | ||
403 | def idle_thread_internal(self): | 403 | def idle_thread_internal(self): |
404 | def remove_idle_func(function): | 404 | def remove_idle_func(function): |
@@ -600,7 +600,7 @@ class BitBakeServer(object): | |||
600 | os.set_inheritable(self.bitbake_lock.fileno(), True) | 600 | os.set_inheritable(self.bitbake_lock.fileno(), True) |
601 | os.set_inheritable(self.readypipein, True) | 601 | os.set_inheritable(self.readypipein, True) |
602 | serverscript = os.path.realpath(os.path.dirname(__file__) + "/../../../bin/bitbake-server") | 602 | serverscript = os.path.realpath(os.path.dirname(__file__) + "/../../../bin/bitbake-server") |
603 | os.execl(sys.executable, sys.executable, serverscript, "decafbad", str(self.bitbake_lock.fileno()), str(self.readypipein), self.logfile, self.bitbake_lock.name, self.sockname, str(self.server_timeout or 0), str(int(self.profile)), str(self.xmlrpcinterface[0]), str(self.xmlrpcinterface[1])) | 603 | os.execl(sys.executable, sys.executable, serverscript, "decafbad", str(self.bitbake_lock.fileno()), str(self.readypipein), self.logfile, self.bitbake_lock.name, self.sockname, str(self.server_timeout or 0), str(list(self.profile)), str(self.xmlrpcinterface[0]), str(self.xmlrpcinterface[1])) |
604 | 604 | ||
605 | def execServer(lockfd, readypipeinfd, lockname, sockname, server_timeout, xmlrpcinterface, profile): | 605 | def execServer(lockfd, readypipeinfd, lockname, sockname, server_timeout, xmlrpcinterface, profile): |
606 | 606 | ||