Patchwork [bitbake-devel] build: Add BB_TASK_NICE_LEVEL to task code

login
register
mail settings
Submitter Richard Purdie
Date Sept. 20, 2013, 10:29 a.m.
Message ID <1379672987.18603.139.camel@ted>
Download mbox | patch
Permalink /patch/58433/
State New
Headers show

Comments

Richard Purdie - Sept. 20, 2013, 10:29 a.m.
On Linux its not possible for processes to regain a previous nice level after
it has changed. Its therefore not possible to have a core low priority and
then raise the priorities of individual tasks.

This variable allows us to do something like:

BB_TASK_NICE_LEVEL = "5"
BB_TASK_NICE_LEVEL_task-testimage = "0"

to give priority to specific tasks which the BB_NICE_LEVEL functionality
doesn't give us the option of.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
Paul Eggleton - Sept. 20, 2013, 11:09 a.m.
On Friday 20 September 2013 11:29:47 Richard Purdie wrote:
> On Linux its not possible for processes to regain a previous nice level
> after it has changed. Its therefore not possible to have a core low
> priority and then raise the priorities of individual tasks.
> 
> This variable allows us to do something like:
> 
> BB_TASK_NICE_LEVEL = "5"
> BB_TASK_NICE_LEVEL_task-testimage = "0"
> 
> to give priority to specific tasks which the BB_NICE_LEVEL functionality
> doesn't give us the option of.
> 
> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
> ---
> diff --git a/bitbake/lib/bb/build.py b/bitbake/lib/bb/build.py
> index 8aec699..9addd71 100644
> --- a/bitbake/lib/bb/build.py
> +++ b/bitbake/lib/bb/build.py
> @@ -346,6 +346,13 @@ def _exec_task(fn, task, d, quieterr):
>      if not tempdir:
>          bb.fatal("T variable not set, unable to build")
> 
> +    # Change nice level if we're asked to
> +    nice = localdata.getVar("BB_TASK_NICE_LEVEL", True)
> +    if nice:
> +        curnice = os.nice(0)
> +        nice = int(nice) - curnice
> +        logger.debug(1, "Renice to %s " % os.nice(nice))

It's a matter of style to be sure, but I think it's better not to have debug 
statements that do more than just printing debug output - could the latter be 
split onto two lines? Then it's easy to tell what's being done.

Cheers,
Paul
Richard Purdie - Sept. 20, 2013, 11:59 a.m.
On Fri, 2013-09-20 at 12:09 +0100, Paul Eggleton wrote:
> On Friday 20 September 2013 11:29:47 Richard Purdie wrote:
> > On Linux its not possible for processes to regain a previous nice level
> > after it has changed. Its therefore not possible to have a core low
> > priority and then raise the priorities of individual tasks.
> > 
> > This variable allows us to do something like:
> > 
> > BB_TASK_NICE_LEVEL = "5"
> > BB_TASK_NICE_LEVEL_task-testimage = "0"
> > 
> > to give priority to specific tasks which the BB_NICE_LEVEL functionality
> > doesn't give us the option of.
> > 
> > Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
> > ---
> > diff --git a/bitbake/lib/bb/build.py b/bitbake/lib/bb/build.py
> > index 8aec699..9addd71 100644
> > --- a/bitbake/lib/bb/build.py
> > +++ b/bitbake/lib/bb/build.py
> > @@ -346,6 +346,13 @@ def _exec_task(fn, task, d, quieterr):
> >      if not tempdir:
> >          bb.fatal("T variable not set, unable to build")
> > 
> > +    # Change nice level if we're asked to
> > +    nice = localdata.getVar("BB_TASK_NICE_LEVEL", True)
> > +    if nice:
> > +        curnice = os.nice(0)
> > +        nice = int(nice) - curnice
> > +        logger.debug(1, "Renice to %s " % os.nice(nice))
> 
> It's a matter of style to be sure, but I think it's better not to have debug 
> statements that do more than just printing debug output - could the latter be 
> split onto two lines? Then it's easy to tell what's being done.

Agreed, although this is a copy and paste of the BB_NICE_LEVEL code so
we should probably fix both.

Cheers,

Richard

Patch

diff --git a/bitbake/lib/bb/build.py b/bitbake/lib/bb/build.py
index 8aec699..9addd71 100644
--- a/bitbake/lib/bb/build.py
+++ b/bitbake/lib/bb/build.py
@@ -346,6 +346,13 @@  def _exec_task(fn, task, d, quieterr):
     if not tempdir:
         bb.fatal("T variable not set, unable to build")
 
+    # Change nice level if we're asked to
+    nice = localdata.getVar("BB_TASK_NICE_LEVEL", True)
+    if nice:
+        curnice = os.nice(0)
+        nice = int(nice) - curnice
+        logger.debug(1, "Renice to %s " % os.nice(nice))
+
     bb.utils.mkdirhier(tempdir)
 
     # Determine the logfile to generate