diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-04-10 15:57:07 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-04-11 16:21:00 +0100 |
commit | 88dfe16b5abd804bae0c1e3b60cb93cb951cbc3f (patch) | |
tree | f0847c48d8789441a121b0d8329bfabc841eeec4 | |
parent | b44694b1efc7389536df2f901a8b70321edfeeba (diff) | |
download | bitbake-88dfe16b5abd804bae0c1e3b60cb93cb951cbc3f.tar.gz |
cooker/server: Fix up 100% CPU usage at idle
The recent inotify changes are causing a 100% cpu usage issue in the
idle handlers. To avoid this, we update the idle functions to optionally
report a float value which is the delay before the function needs to be
called again. 1 second is fine for the inotify handler, in reality its
more like 0.1s due to the default idle function sleep.
This reverts performance regressions of 1.5 minutes on a kernel build
and ~5-6 minutes on a image from scratch.
(Bitbake rev: 0e0ba408c2dce14a0fabd3fdf61d8465a031495b)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | lib/bb/cooker.py | 2 | ||||
-rw-r--r-- | lib/bb/server/process.py | 3 | ||||
-rw-r--r-- | lib/bb/server/xmlrpc.py | 3 |
3 files changed, 7 insertions, 1 deletions
diff --git a/lib/bb/cooker.py b/lib/bb/cooker.py index 2f2a8523a..aeb3f71e2 100644 --- a/lib/bb/cooker.py +++ b/lib/bb/cooker.py @@ -142,7 +142,7 @@ class BBCooker: # read notified events and enqeue them n.read_events() n.process_events() - return True + return 1.0 self.configuration.server_register_idlecallback(_process_inotify_updates, [self.confignotifier, self.notifier]) diff --git a/lib/bb/server/process.py b/lib/bb/server/process.py index d362f8d7f..302ee5fc8 100644 --- a/lib/bb/server/process.py +++ b/lib/bb/server/process.py @@ -135,6 +135,9 @@ class ProcessServer(Process, BaseImplServer): nextsleep = None elif retval is True: nextsleep = None + elif isinstance(retval, float): + if (retval < nextsleep): + nextsleep = retval elif nextsleep is None: continue else: diff --git a/lib/bb/server/xmlrpc.py b/lib/bb/server/xmlrpc.py index 4205a4c35..10d4b5c77 100644 --- a/lib/bb/server/xmlrpc.py +++ b/lib/bb/server/xmlrpc.py @@ -241,6 +241,9 @@ class XMLRPCServer(SimpleXMLRPCServer, BaseImplServer): del self._idlefuns[function] elif retval is True: nextsleep = 0 + elif isinstance(retval, float): + if (retval < nextsleep): + nextsleep = retval else: fds = fds + retval except SystemExit: |