1. 05 May, 2009 1 commit
  2. 21 Apr, 2009 1 commit
    • Gautham R Shenoy's avatar
      sched: Replace first_cpu() with cpumask_first() in ILB nomination code · 6e29ec57
      Gautham R Shenoy authored
      Stephen Rothwell reported this build warning:
      
      >  kernel/sched.c: In function 'find_new_ilb':
      >  kernel/sched.c:4355: warning: passing argument 1 of '__first_cpu' from incompatible pointer type
      >
      > Possibly caused by commit f711f609
      > ("sched: Nominate idle load balancer from a semi-idle package") from
      > the sched tree.  Should this call to first_cpu be cpumask_first?
      
      For !(CONFIG_SCHED_MC || CONFIG_SCHED_SMT), find_new_ilb() nominates the
      Idle load balancer as the first cpu from the nohz.cpu_mask.
      
      This code uses the older API first_cpu(). Replace it with cpumask_first(),
      which is the correct API here.
      
      [ Impact: cleanup, address build warning ]
      Reported-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
      Signed-off-by: default avatarGautham R Shenoy <ego@in.ibm.com>
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      LKML-Reference: <20090421031049.GA4140@in.ibm.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      6e29ec57
  3. 20 Apr, 2009 1 commit
  4. 15 Apr, 2009 1 commit
  5. 14 Apr, 2009 3 commits
    • Johannes Weiner's avatar
      wait: don't use __wake_up_common() · 78ddb08f
      Johannes Weiner authored
      '777c6c5f wait: prevent exclusive waiter starvation' made
      __wake_up_common() global to be used from abort_exclusive_wait().
      
      It was needed to do a wake-up with the waitqueue lock held while
      passing down a key to the wake-up function.
      
      Since '4ede816a epoll keyed wakeups: add __wake_up_locked_key() and
      __wake_up_sync_key()' there is an appropriate wrapper for this case:
      __wake_up_locked_key().
      
      Use it here and make __wake_up_common() private to the scheduler
      again.
      Signed-off-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      LKML-Reference: <1239720785-19661-1-git-send-email-hannes@cmpxchg.org>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      78ddb08f
    • Gautham R Shenoy's avatar
      sched: Nominate a power-efficient ilb in select_nohz_balancer() · e790fb0b
      Gautham R Shenoy authored
      The CPU that first goes idle becomes the idle-load-balancer and remains
      that until either it picks up a task or till all the CPUs of the system
      goes idle.
      
      Optimize this further to allow it to relinquish it's post
      once all it's siblings in the power-aware sched_domain go idle, thereby
      allowing the whole package-core to go idle. While relinquising the post,
      nominate another an idle-load balancer from a semi-idle core/package.
      Signed-off-by: default avatarGautham R Shenoy <ego@in.ibm.com>
      Acked-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      LKML-Reference: <20090414045535.7645.31641.stgit@sofia.in.ibm.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      e790fb0b
    • Gautham R Shenoy's avatar
      sched: Nominate idle load balancer from a semi-idle package. · f711f609
      Gautham R Shenoy authored
      Currently the nomination of idle-load balancer is done by choosing the first
      idle cpu in the nohz.cpu_mask. This may not be power-efficient, since
      such an idle cpu could come from a completely idle core/package thereby
      preventing the whole core/package from being in a low-power state.
      
      For eg, consider a quad-core dual package system. The cpu numbering need
      not be sequential and can something like [0, 2, 4, 6] and [1, 3, 5, 7].
      With sched_mc/smt_power_savings and the power-aware IRQ balance, we try to keep
      as fewer Packages/Cores active. But the current idle load balancer logic
      goes against this by choosing the first_cpu in the nohz.cpu_mask and not
      taking the system topology into consideration.
      
      Improve the algorithm to nominate the idle load balancer from a semi idle
      cores/packages thereby increasing the probability of the cores/packages being
      in deeper sleep states for longer duration.
      
      The algorithm is activated only when sched_mc/smt_power_savings != 0.
      Signed-off-by: default avatarGautham R Shenoy <ego@in.ibm.com>
      Acked-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      LKML-Reference: <20090414045530.7645.12175.stgit@sofia.in.ibm.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      f711f609
  6. 09 Apr, 2009 2 commits
    • Paul Turner's avatar
      sched: remove redundant hierarchy walk in check_preempt_wakeup · 002f128b
      Paul Turner authored
      Impact: micro-optimization
      
      Under group scheduling we traverse up until we are at common siblings
      to make the wakeup comparison on.
      
      At this point however, they should have the same parent so continuing
      to check up the tree is redundant.
      Signed-off-by: default avatarPaul Turner <pjt@google.com>
      Acked-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      LKML-Reference: <alpine.DEB.1.00.0904081520320.30317@kitami.corp.google.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      002f128b
    • Nathan Lynch's avatar
      sched: do not count frozen tasks toward load · e3c8ca83
      Nathan Lynch authored
      Freezing tasks via the cgroup freezer causes the load average to climb
      because the freezer's current implementation puts frozen tasks in
      uninterruptible sleep (D state).
      
      Some applications which perform job-scheduling functions consult the
      load average when making decisions.  If a cgroup is frozen, the load
      average does not provide a useful measure of the system's utilization
      to such applications.  This is especially inconvenient if the job
      scheduler employs the cgroup freezer as a mechanism for preempting low
      priority jobs.  Contrast this with using SIGSTOP for the same purpose:
      the stopped tasks do not count toward system load.
      
      Change task_contributes_to_load() to return false if the task is
      frozen.  This results in /proc/loadavg behavior that better meets
      users' expectations.
      Signed-off-by: default avatarNathan Lynch <ntl@pobox.com>
      Acked-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Acked-by: default avatarNigel Cunningham <nigel@tuxonice.net>
      Tested-by: default avatarNigel Cunningham <nigel@tuxonice.net>
      Cc: <stable@kernel.org>
      Cc: containers@lists.linux-foundation.org
      Cc: linux-pm@lists.linux-foundation.org
      Cc: Matt Helsley <matthltc@us.ibm.com>
      LKML-Reference: <20090408194512.47a99b95@manatee.lan>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      e3c8ca83
  7. 08 Apr, 2009 2 commits
  8. 07 Apr, 2009 29 commits