* [BUG] idle_balance() does not call load_balance_newidle()
@ 2008-12-08 15:22 Vaidyanathan Srinivasan
2008-12-08 15:27 ` Peter Zijlstra
2008-12-08 15:49 ` Ingo Molnar
0 siblings, 2 replies; 6+ messages in thread
From: Vaidyanathan Srinivasan @ 2008-12-08 15:22 UTC (permalink / raw)
To: Linux Kernel; +Cc: Ingo Molnar, Gautham R Shenoy, Peter Zijlstra
Hi,
load_balance_newidle() does not get called if SD_BALANCE_NEWIDLE is
set at higher level domain (3-CPU) and not in low level domain (2-MC).
pulled_task is initialised to -1 and checked for non-zero which is
always true if the lowest level sched_domain does not have
SD_BALANCE_NEWIDLE flag set.
Trivial fix to initialise pulled_task to zero.
Patch against 2.6.28-rc7
Thanks,
Vaidy
Signed-off-by: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
---
kernel/sched.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/kernel/sched.c b/kernel/sched.c
index f79c7c4..4abdce1 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -3801,7 +3801,7 @@ out_balanced:
static void idle_balance(int this_cpu, struct rq *this_rq)
{
struct sched_domain *sd;
- int pulled_task = -1;
+ int pulled_task = 0;
unsigned long next_balance = jiffies + HZ;
cpumask_t tmpmask;
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [BUG] idle_balance() does not call load_balance_newidle()
2008-12-08 15:22 [BUG] idle_balance() does not call load_balance_newidle() Vaidyanathan Srinivasan
@ 2008-12-08 15:27 ` Peter Zijlstra
2008-12-08 15:49 ` Ingo Molnar
1 sibling, 0 replies; 6+ messages in thread
From: Peter Zijlstra @ 2008-12-08 15:27 UTC (permalink / raw)
To: svaidy; +Cc: Linux Kernel, Ingo Molnar, Gautham R Shenoy
On Mon, 2008-12-08 at 20:52 +0530, Vaidyanathan Srinivasan wrote:
> Hi,
>
> load_balance_newidle() does not get called if SD_BALANCE_NEWIDLE is
> set at higher level domain (3-CPU) and not in low level domain (2-MC).
>
> pulled_task is initialised to -1 and checked for non-zero which is
> always true if the lowest level sched_domain does not have
> SD_BALANCE_NEWIDLE flag set.
>
> Trivial fix to initialise pulled_task to zero.
> Patch against 2.6.28-rc7
>
> Thanks,
> Vaidy
>
> Signed-off-by: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
Seems sane
> ---
>
> kernel/sched.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
>
> diff --git a/kernel/sched.c b/kernel/sched.c
> index f79c7c4..4abdce1 100644
> --- a/kernel/sched.c
> +++ b/kernel/sched.c
> @@ -3801,7 +3801,7 @@ out_balanced:
> static void idle_balance(int this_cpu, struct rq *this_rq)
> {
> struct sched_domain *sd;
> - int pulled_task = -1;
> + int pulled_task = 0;
> unsigned long next_balance = jiffies + HZ;
> cpumask_t tmpmask;
>
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [BUG] idle_balance() does not call load_balance_newidle()
2008-12-08 15:22 [BUG] idle_balance() does not call load_balance_newidle() Vaidyanathan Srinivasan
2008-12-08 15:27 ` Peter Zijlstra
@ 2008-12-08 15:49 ` Ingo Molnar
2008-12-09 4:07 ` Vaidyanathan Srinivasan
1 sibling, 1 reply; 6+ messages in thread
From: Ingo Molnar @ 2008-12-08 15:49 UTC (permalink / raw)
To: Linux Kernel, Gautham R Shenoy, Peter Zijlstra
* Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com> wrote:
> Hi,
>
> load_balance_newidle() does not get called if SD_BALANCE_NEWIDLE is
> set at higher level domain (3-CPU) and not in low level domain (2-MC).
>
> pulled_task is initialised to -1 and checked for non-zero which is
> always true if the lowest level sched_domain does not have
> SD_BALANCE_NEWIDLE flag set.
>
> Trivial fix to initialise pulled_task to zero.
> Patch against 2.6.28-rc7
applied to tip/sched/core, thanks! (Not for v2.6.28 because this could
affect performance.)
Ingo
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [BUG] idle_balance() does not call load_balance_newidle()
2008-12-08 15:49 ` Ingo Molnar
@ 2008-12-09 4:07 ` Vaidyanathan Srinivasan
2008-12-09 6:34 ` Ingo Molnar
0 siblings, 1 reply; 6+ messages in thread
From: Vaidyanathan Srinivasan @ 2008-12-09 4:07 UTC (permalink / raw)
To: Ingo Molnar; +Cc: Linux Kernel, Gautham R Shenoy, Peter Zijlstra
* Ingo Molnar <mingo@elte.hu> [2008-12-08 16:49:39]:
>
> * Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com> wrote:
>
> > Hi,
> >
> > load_balance_newidle() does not get called if SD_BALANCE_NEWIDLE is
> > set at higher level domain (3-CPU) and not in low level domain (2-MC).
> >
> > pulled_task is initialised to -1 and checked for non-zero which is
> > always true if the lowest level sched_domain does not have
> > SD_BALANCE_NEWIDLE flag set.
> >
> > Trivial fix to initialise pulled_task to zero.
> > Patch against 2.6.28-rc7
>
> applied to tip/sched/core, thanks! (Not for v2.6.28 because this could
> affect performance.)
Thanks Ingo. This patch does not change any functionality in v2.6.28
and hence will not affect performance. The SD flags are not touched.
I found this bug while setting different SD flags at MC level and CPU
level in my power saving balance patches.
--Vaidy
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [BUG] idle_balance() does not call load_balance_newidle()
2008-12-09 4:07 ` Vaidyanathan Srinivasan
@ 2008-12-09 6:34 ` Ingo Molnar
2008-12-09 8:22 ` Vaidyanathan Srinivasan
0 siblings, 1 reply; 6+ messages in thread
From: Ingo Molnar @ 2008-12-09 6:34 UTC (permalink / raw)
To: Linux Kernel, Gautham R Shenoy, Peter Zijlstra
* Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com> wrote:
> * Ingo Molnar <mingo@elte.hu> [2008-12-08 16:49:39]:
>
> >
> > * Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com> wrote:
> >
> > > Hi,
> > >
> > > load_balance_newidle() does not get called if SD_BALANCE_NEWIDLE is
> > > set at higher level domain (3-CPU) and not in low level domain (2-MC).
> > >
> > > pulled_task is initialised to -1 and checked for non-zero which is
> > > always true if the lowest level sched_domain does not have
> > > SD_BALANCE_NEWIDLE flag set.
> > >
> > > Trivial fix to initialise pulled_task to zero.
> > > Patch against 2.6.28-rc7
> >
> > applied to tip/sched/core, thanks! (Not for v2.6.28 because this could
> > affect performance.)
>
> Thanks Ingo. This patch does not change any functionality in v2.6.28
> and hence will not affect performance. The SD flags are not touched. I
> found this bug while setting different SD flags at MC level and CPU
> level in my power saving balance patches.
if it does not change any functionality then we would not be doing the
change, right?
It does change functionality, because:
> > > load_balance_newidle() does not get called if SD_BALANCE_NEWIDLE is
> > > set at higher level domain (3-CPU) and not in low level domain
> > > (2-MC).
even though it's a bug fix, it affects how the SD flags are interpreted
and acted upon by the load balancer - i.e. the change can impact
performance.
Ingo
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [BUG] idle_balance() does not call load_balance_newidle()
2008-12-09 6:34 ` Ingo Molnar
@ 2008-12-09 8:22 ` Vaidyanathan Srinivasan
0 siblings, 0 replies; 6+ messages in thread
From: Vaidyanathan Srinivasan @ 2008-12-09 8:22 UTC (permalink / raw)
To: Ingo Molnar; +Cc: Linux Kernel, Gautham R Shenoy, Peter Zijlstra
* Ingo Molnar <mingo@elte.hu> [2008-12-09 07:34:48]:
>
> * Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com> wrote:
>
> > * Ingo Molnar <mingo@elte.hu> [2008-12-08 16:49:39]:
> >
> > >
> > > * Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com> wrote:
> > >
> > > > Hi,
> > > >
> > > > load_balance_newidle() does not get called if SD_BALANCE_NEWIDLE is
> > > > set at higher level domain (3-CPU) and not in low level domain (2-MC).
> > > >
> > > > pulled_task is initialised to -1 and checked for non-zero which is
> > > > always true if the lowest level sched_domain does not have
> > > > SD_BALANCE_NEWIDLE flag set.
> > > >
> > > > Trivial fix to initialise pulled_task to zero.
> > > > Patch against 2.6.28-rc7
> > >
> > > applied to tip/sched/core, thanks! (Not for v2.6.28 because this could
> > > affect performance.)
> >
> > Thanks Ingo. This patch does not change any functionality in v2.6.28
> > and hence will not affect performance. The SD flags are not touched. I
> > found this bug while setting different SD flags at MC level and CPU
> > level in my power saving balance patches.
>
> if it does not change any functionality then we would not be doing the
> change, right?
:)
> It does change functionality, because:
>
> > > > load_balance_newidle() does not get called if SD_BALANCE_NEWIDLE is
> > > > set at higher level domain (3-CPU) and not in low level domain
> > > > (2-MC).
>
> even though it's a bug fix, it affects how the SD flags are interpreted
> and acted upon by the load balancer - i.e. the change can impact
> performance.
Agreed. In my test setup with two levels of sched_domains,
SD_BALANCE_NEWIDLE has not been set in both CPU level and MC level
starting from 2.6.28-rc4. In a setup with more levels of
sched_domains and if the higher levels have SD_BALANCE_NEWIDLE set,
then we will have a functional impact.
You are right in queueing it for 2.6.29.
Thanks for the clarification.
--Vaidy
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2008-12-09 8:20 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-12-08 15:22 [BUG] idle_balance() does not call load_balance_newidle() Vaidyanathan Srinivasan
2008-12-08 15:27 ` Peter Zijlstra
2008-12-08 15:49 ` Ingo Molnar
2008-12-09 4:07 ` Vaidyanathan Srinivasan
2008-12-09 6:34 ` Ingo Molnar
2008-12-09 8:22 ` Vaidyanathan Srinivasan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox