linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Repost sched-rt: Reduce rq lock contention by eliminating locking of non-feasible target
@ 2015-01-06 19:01 Tim Chen
  2015-01-06 19:30 ` Peter Zijlstra
  2015-01-16  1:58 ` Steven Rostedt
  0 siblings, 2 replies; 10+ messages in thread
From: Tim Chen @ 2015-01-06 19:01 UTC (permalink / raw)
  To: Peter Zijlstra, Ingo Molnar
  Cc: Andi Kleen, Shawn Bohrer, Steven Rostedt, Suruchi Kadu,
	Doug Nelson, linux-kernel

Didn't get any response for this patch probably due to the holidays.
Reposting it as we will like to get it merged to help our database
workload.

This patch added checks that prevent futile attempts to move rt tasks
to cpu with active tasks of equal or higher priority.  This reduces
run queue lock contention and improves the performance of a well
known OLTP benchmark by 0.7%.

Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>
---
 kernel/sched/rt.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
index ee15f5a..0e4382e 100644
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
@@ -1337,7 +1337,8 @@ select_task_rq_rt(struct task_struct *p, int cpu, int sd_flag, int flags)
 	     curr->prio <= p->prio)) {
 		int target = find_lowest_rq(p);
 
-		if (target != -1)
+		if (target != -1 &&
+		    p->prio < cpu_rq(target)->rt.highest_prio.curr)
 			cpu = target;
 	}
 	rcu_read_unlock();
@@ -1613,6 +1614,12 @@ static struct rq *find_lock_lowest_rq(struct task_struct *task, struct rq *rq)
 			break;
 
 		lowest_rq = cpu_rq(cpu);
+		
+		if (lowest_rq->rt.highest_prio.curr <= task->prio) {
+		/* target rq has tasks of equal or higher priority, try again */
+			lowest_rq = NULL;
+			continue;
+		}
 
 		/* if the prio of this runqueue changed, try again */
 		if (double_lock_balance(rq, lowest_rq)) {
-- 
1.8.3.1



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH] Repost sched-rt: Reduce rq lock contention by eliminating locking of non-feasible target
  2015-01-06 19:01 [PATCH] Repost sched-rt: Reduce rq lock contention by eliminating locking of non-feasible target Tim Chen
@ 2015-01-06 19:30 ` Peter Zijlstra
  2015-01-15 17:13   ` Tim Chen
  2015-01-16  1:58 ` Steven Rostedt
  1 sibling, 1 reply; 10+ messages in thread
From: Peter Zijlstra @ 2015-01-06 19:30 UTC (permalink / raw)
  To: Tim Chen
  Cc: Ingo Molnar, Andi Kleen, Shawn Bohrer, Steven Rostedt,
	Suruchi Kadu, Doug Nelson, linux-kernel, Juri Lelli

On Tue, Jan 06, 2015 at 11:01:51AM -0800, Tim Chen wrote:
> Didn't get any response for this patch probably due to the holidays.
> Reposting it as we will like to get it merged to help our database
> workload.
> 
> This patch added checks that prevent futile attempts to move rt tasks
> to cpu with active tasks of equal or higher priority.  This reduces
> run queue lock contention and improves the performance of a well
> known OLTP benchmark by 0.7%.

Don't immediately see anything wrong with this, Steve?

Juri, do we want to do a similar thing to the dl bits?

> Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>
> ---
>  kernel/sched/rt.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
> index ee15f5a..0e4382e 100644
> --- a/kernel/sched/rt.c
> +++ b/kernel/sched/rt.c
> @@ -1337,7 +1337,8 @@ select_task_rq_rt(struct task_struct *p, int cpu, int sd_flag, int flags)
>  	     curr->prio <= p->prio)) {
>  		int target = find_lowest_rq(p);
>  
> -		if (target != -1)
> +		if (target != -1 &&
> +		    p->prio < cpu_rq(target)->rt.highest_prio.curr)
>  			cpu = target;
>  	}
>  	rcu_read_unlock();
> @@ -1613,6 +1614,12 @@ static struct rq *find_lock_lowest_rq(struct task_struct *task, struct rq *rq)
>  			break;
>  
>  		lowest_rq = cpu_rq(cpu);
> +		
> +		if (lowest_rq->rt.highest_prio.curr <= task->prio) {
> +		/* target rq has tasks of equal or higher priority, try again */
> +			lowest_rq = NULL;
> +			continue;
> +		}
>  
>  		/* if the prio of this runqueue changed, try again */
>  		if (double_lock_balance(rq, lowest_rq)) {
> -- 
> 1.8.3.1
> 
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Repost sched-rt: Reduce rq lock contention by eliminating locking of non-feasible target
  2015-01-06 19:30 ` Peter Zijlstra
@ 2015-01-15 17:13   ` Tim Chen
  0 siblings, 0 replies; 10+ messages in thread
From: Tim Chen @ 2015-01-15 17:13 UTC (permalink / raw)
  To: Peter Zijlstra, Steven Rostedt
  Cc: Ingo Molnar, Andi Kleen, Shawn Bohrer, Suruchi Kadu, Doug Nelson,
	linux-kernel, Juri Lelli

On Tue, 2015-01-06 at 20:30 +0100, Peter Zijlstra wrote:
> On Tue, Jan 06, 2015 at 11:01:51AM -0800, Tim Chen wrote:
> > Didn't get any response for this patch probably due to the holidays.
> > Reposting it as we will like to get it merged to help our database
> > workload.
> > 
> > This patch added checks that prevent futile attempts to move rt tasks
> > to cpu with active tasks of equal or higher priority.  This reduces
> > run queue lock contention and improves the performance of a well
> > known OLTP benchmark by 0.7%.
> 
> Don't immediately see anything wrong with this, Steve?

Steve, do you have any objections to this patch?  Thanks.

Tim



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Repost sched-rt: Reduce rq lock contention by eliminating locking of non-feasible target
  2015-01-06 19:01 [PATCH] Repost sched-rt: Reduce rq lock contention by eliminating locking of non-feasible target Tim Chen
  2015-01-06 19:30 ` Peter Zijlstra
@ 2015-01-16  1:58 ` Steven Rostedt
  2015-01-16 17:46   ` Tim Chen
  1 sibling, 1 reply; 10+ messages in thread
From: Steven Rostedt @ 2015-01-16  1:58 UTC (permalink / raw)
  To: Tim Chen
  Cc: Peter Zijlstra, Ingo Molnar, Andi Kleen, Shawn Bohrer,
	Suruchi Kadu, Doug Nelson, linux-kernel

On Tue, 06 Jan 2015 11:01:51 -0800
Tim Chen <tim.c.chen@linux.intel.com> wrote:

> Didn't get any response for this patch probably due to the holidays.
> Reposting it as we will like to get it merged to help our database
> workload.
> 
> This patch added checks that prevent futile attempts to move rt tasks
> to cpu with active tasks of equal or higher priority.  This reduces
> run queue lock contention and improves the performance of a well
> known OLTP benchmark by 0.7%.
> 
> Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>
> ---
>  kernel/sched/rt.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
> index ee15f5a..0e4382e 100644
> --- a/kernel/sched/rt.c
> +++ b/kernel/sched/rt.c
> @@ -1337,7 +1337,8 @@ select_task_rq_rt(struct task_struct *p, int
> cpu, int sd_flag, int flags) curr->prio <= p->prio)) {
>  		int target = find_lowest_rq(p);
> 

Please add a comment here that says something like:

		/*
		 * Don't bother moving it if the destination CPU is
		 * not running a lower priority task.
		 */

> -		if (target != -1)
> +		if (target != -1 &&
> +		    p->prio < cpu_rq(target)->rt.highest_prio.curr)
>  			cpu = target;
>  	}
>  	rcu_read_unlock();
> @@ -1613,6 +1614,12 @@ static struct rq *find_lock_lowest_rq(struct
> task_struct *task, struct rq *rq) break;
>  
>  		lowest_rq = cpu_rq(cpu);
> +		
> +		if (lowest_rq->rt.highest_prio.curr <= task->prio) {
> +		/* target rq has tasks of equal or higher priority,
> try again */
> +			lowest_rq = NULL;
> +			continue;

This should just break out and not try again. The reason for the other
try again is because of the double_lock which can release the locks
which can cause a process waiting for the lock to sneak in and
change the priorities. But this case, a try again is highly unlikely to
do anything differently (no locks are released) and just waste cycles.

-- Steve


> +		}
>  
>  		/* if the prio of this runqueue changed, try again */
>  		if (double_lock_balance(rq, lowest_rq)) {


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Repost sched-rt: Reduce rq lock contention by eliminating locking of non-feasible target
  2015-01-16  1:58 ` Steven Rostedt
@ 2015-01-16 17:46   ` Tim Chen
  2015-01-22 17:48     ` Tim Chen
  2015-02-01 17:52     ` [tip:sched/core] sched/rt: " tip-bot for Tim Chen
  0 siblings, 2 replies; 10+ messages in thread
From: Tim Chen @ 2015-01-16 17:46 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: Peter Zijlstra, Ingo Molnar, Andi Kleen, Shawn Bohrer,
	Suruchi Kadu, Doug Nelson, linux-kernel

On Thu, 2015-01-15 at 20:58 -0500, Steven Rostedt wrote:

> 
> Please add a comment here that says something like:
> 
> 		/*
> 		 * Don't bother moving it if the destination CPU is
> 		 * not running a lower priority task.
> 		 */
> 
Okay.  Updated in patch below.

> > -		if (target != -1)
> > +		if (target != -1 &&
> > +		    p->prio < cpu_rq(target)->rt.highest_prio.curr)
> >  			cpu = target;
> >  	}
> >  	rcu_read_unlock();
> > @@ -1613,6 +1614,12 @@ static struct rq *find_lock_lowest_rq(struct
> > task_struct *task, struct rq *rq) break;
> >  
> >  		lowest_rq = cpu_rq(cpu);
> > +		
> > +		if (lowest_rq->rt.highest_prio.curr <= task->prio) {
> > +		/* target rq has tasks of equal or higher priority,
> > try again */
> > +			lowest_rq = NULL;
> > +			continue;
> 
> This should just break out and not try again. The reason for the other
> try again is because of the double_lock which can release the locks
> which can cause a process waiting for the lock to sneak in and
> change the priorities. But this case, a try again is highly unlikely to
> do anything differently (no locks are released) and just waste cycles.

Agree.  Updated in updated patch below.

Thanks.

Tim

---->8------

>From 5f676f7a351e85eb5cc64f1971dd03eca43b5271 Mon Sep 17 00:00:00 2001
From: Tim Chen <tim.c.chen@linux.intel.com>
Date: Fri, 12 Dec 2014 15:38:12 -0800
Subject: [PATCH] sched-rt: Reduce rq lock contention by eliminating
locking of
 non-feasible target
To: Peter Zijlstra <peterz@infradead.org>
Cc: Andi Kleen <andi@firstfloor.org>,  Ingo Molnar <mingo@elte.hu>,
Shawn Bohrer <sbohrer@rgmadvisors.com>, Steven Rostedt
<rostedt@goodmis.org>, Suruchi Kadu <suruchi.a.kadu@intel.com>, Doug
Nelson <doug.nelson@intel.com>,  linux-kernel@vger.kernel.org

This patch added checks that prevent futile attempts to move rt tasks
to cpu with active tasks of equal or higher priority.  This reduces
run queue lock contention and improves the performance of a well
known OLTP benchmark by 0.7%.

Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>
---
 kernel/sched/rt.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
index ee15f5a..46ebcb1 100644
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
@@ -1337,7 +1337,12 @@ select_task_rq_rt(struct task_struct *p, int cpu, int sd_flag, int flags)
 	     curr->prio <= p->prio)) {
 		int target = find_lowest_rq(p);
 
-		if (target != -1)
+		/*
+		 * Don't bother moving it if the destination CPU is
+		 * not running a lower priority task.
+		 */
+		if (target != -1 &&
+		    p->prio < cpu_rq(target)->rt.highest_prio.curr)
 			cpu = target;
 	}
 	rcu_read_unlock();
@@ -1614,6 +1619,16 @@ static struct rq *find_lock_lowest_rq(struct task_struct *task, struct rq *rq)
 
 		lowest_rq = cpu_rq(cpu);
 
+		if (lowest_rq->rt.highest_prio.curr <= task->prio) {
+			/*
+			 * Target rq has tasks of equal or higher priority,
+			 * retrying does not release any lock and is unlikely
+			 * to yield a different result.
+			 */
+			lowest_rq = NULL;
+			break;
+		}
+
 		/* if the prio of this runqueue changed, try again */
 		if (double_lock_balance(rq, lowest_rq)) {
 			/*
-- 
1.8.3.1





^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH] Repost sched-rt: Reduce rq lock contention by eliminating locking of non-feasible target
  2015-01-16 17:46   ` Tim Chen
@ 2015-01-22 17:48     ` Tim Chen
  2015-02-01 17:52     ` [tip:sched/core] sched/rt: " tip-bot for Tim Chen
  1 sibling, 0 replies; 10+ messages in thread
From: Tim Chen @ 2015-01-22 17:48 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: Peter Zijlstra, Ingo Molnar, Andi Kleen, Shawn Bohrer,
	Suruchi Kadu, Doug Nelson, linux-kernel

On Fri, 2015-01-16 at 09:46 -0800, Tim Chen wrote:
> On Thu, 2015-01-15 at 20:58 -0500, Steven Rostedt wrote:
> 
> > 
> > Please add a comment here that says something like:
> > 
> > 		/*
> > 		 * Don't bother moving it if the destination CPU is
> > 		 * not running a lower priority task.
> > 		 */
> > 
> Okay.  Updated in patch below.
> 
> > > -		if (target != -1)
> > > +		if (target != -1 &&
> > > +		    p->prio < cpu_rq(target)->rt.highest_prio.curr)
> > >  			cpu = target;
> > >  	}
> > >  	rcu_read_unlock();
> > > @@ -1613,6 +1614,12 @@ static struct rq *find_lock_lowest_rq(struct
> > > task_struct *task, struct rq *rq) break;
> > >  
> > >  		lowest_rq = cpu_rq(cpu);
> > > +		
> > > +		if (lowest_rq->rt.highest_prio.curr <= task->prio) {
> > > +		/* target rq has tasks of equal or higher priority,
> > > try again */
> > > +			lowest_rq = NULL;
> > > +			continue;
> > 
> > This should just break out and not try again. The reason for the other
> > try again is because of the double_lock which can release the locks
> > which can cause a process waiting for the lock to sneak in and
> > change the priorities. But this case, a try again is highly unlikely to
> > do anything differently (no locks are released) and just waste cycles.
> 
> Agree.  Updated in updated patch below.
> 
> Thanks.
> 
> Tim
> 

Steven and Peter, are you okay with the updated patch?

Thanks.

Tim


> ---->8------
> 
> From 5f676f7a351e85eb5cc64f1971dd03eca43b5271 Mon Sep 17 00:00:00 2001
> From: Tim Chen <tim.c.chen@linux.intel.com>
> Date: Fri, 12 Dec 2014 15:38:12 -0800
> Subject: [PATCH] sched-rt: Reduce rq lock contention by eliminating
> locking of
>  non-feasible target
> To: Peter Zijlstra <peterz@infradead.org>
> Cc: Andi Kleen <andi@firstfloor.org>,  Ingo Molnar <mingo@elte.hu>,
> Shawn Bohrer <sbohrer@rgmadvisors.com>, Steven Rostedt
> <rostedt@goodmis.org>, Suruchi Kadu <suruchi.a.kadu@intel.com>, Doug
> Nelson <doug.nelson@intel.com>,  linux-kernel@vger.kernel.org
> 
> This patch added checks that prevent futile attempts to move rt tasks
> to cpu with active tasks of equal or higher priority.  This reduces
> run queue lock contention and improves the performance of a well
> known OLTP benchmark by 0.7%.
> 
> Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>
> ---
>  kernel/sched/rt.c | 17 ++++++++++++++++-
>  1 file changed, 16 insertions(+), 1 deletion(-)
> 
> diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
> index ee15f5a..46ebcb1 100644
> --- a/kernel/sched/rt.c
> +++ b/kernel/sched/rt.c
> @@ -1337,7 +1337,12 @@ select_task_rq_rt(struct task_struct *p, int cpu, int sd_flag, int flags)
>  	     curr->prio <= p->prio)) {
>  		int target = find_lowest_rq(p);
>  
> -		if (target != -1)
> +		/*
> +		 * Don't bother moving it if the destination CPU is
> +		 * not running a lower priority task.
> +		 */
> +		if (target != -1 &&
> +		    p->prio < cpu_rq(target)->rt.highest_prio.curr)
>  			cpu = target;
>  	}
>  	rcu_read_unlock();
> @@ -1614,6 +1619,16 @@ static struct rq *find_lock_lowest_rq(struct task_struct *task, struct rq *rq)
>  
>  		lowest_rq = cpu_rq(cpu);
>  
> +		if (lowest_rq->rt.highest_prio.curr <= task->prio) {
> +			/*
> +			 * Target rq has tasks of equal or higher priority,
> +			 * retrying does not release any lock and is unlikely
> +			 * to yield a different result.
> +			 */
> +			lowest_rq = NULL;
> +			break;
> +		}
> +
>  		/* if the prio of this runqueue changed, try again */
>  		if (double_lock_balance(rq, lowest_rq)) {
>  			/*



^ permalink raw reply	[flat|nested] 10+ messages in thread

* [tip:sched/core] sched/rt: Reduce rq lock contention by eliminating locking of non-feasible target
  2015-01-16 17:46   ` Tim Chen
  2015-01-22 17:48     ` Tim Chen
@ 2015-02-01 17:52     ` tip-bot for Tim Chen
  2015-02-24 16:12       ` Steven Rostedt
  1 sibling, 1 reply; 10+ messages in thread
From: tip-bot for Tim Chen @ 2015-02-01 17:52 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: suruchi.a.kadu, linux-kernel, rostedt, sbohrer, peterz, mingo,
	tglx, doug.nelson, torvalds, tim.c.chen, hpa

Commit-ID:  80e3d87b2c5582db0ab5e39610ce3707d97ba409
Gitweb:     http://git.kernel.org/tip/80e3d87b2c5582db0ab5e39610ce3707d97ba409
Author:     Tim Chen <tim.c.chen@linux.intel.com>
AuthorDate: Fri, 12 Dec 2014 15:38:12 -0800
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Fri, 30 Jan 2015 19:38:49 +0100

sched/rt: Reduce rq lock contention by eliminating locking of non-feasible target

This patch adds checks that prevens futile attempts to move rt tasks
to a CPU with active tasks of equal or higher priority.

This reduces run queue lock contention and improves the performance of
a well known OLTP benchmark by 0.7%.

Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Shawn Bohrer <sbohrer@rgmadvisors.com>
Cc: Suruchi Kadu <suruchi.a.kadu@intel.com>
Cc: Doug Nelson<doug.nelson@intel.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: http://lkml.kernel.org/r/1421430374.2399.27.camel@schen9-desk2.jf.intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 kernel/sched/rt.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
index 6725e3c..f4d4b07 100644
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
@@ -1340,7 +1340,12 @@ select_task_rq_rt(struct task_struct *p, int cpu, int sd_flag, int flags)
 	     curr->prio <= p->prio)) {
 		int target = find_lowest_rq(p);
 
-		if (target != -1)
+		/*
+		 * Don't bother moving it if the destination CPU is
+		 * not running a lower priority task.
+		 */
+		if (target != -1 &&
+		    p->prio < cpu_rq(target)->rt.highest_prio.curr)
 			cpu = target;
 	}
 	rcu_read_unlock();
@@ -1617,6 +1622,16 @@ static struct rq *find_lock_lowest_rq(struct task_struct *task, struct rq *rq)
 
 		lowest_rq = cpu_rq(cpu);
 
+		if (lowest_rq->rt.highest_prio.curr <= task->prio) {
+			/*
+			 * Target rq has tasks of equal or higher priority,
+			 * retrying does not release any lock and is unlikely
+			 * to yield a different result.
+			 */
+			lowest_rq = NULL;
+			break;
+		}
+
 		/* if the prio of this runqueue changed, try again */
 		if (double_lock_balance(rq, lowest_rq)) {
 			/*

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [tip:sched/core] sched/rt:  Reduce rq lock contention by eliminating locking of non-feasible target
  2015-02-01 17:52     ` [tip:sched/core] sched/rt: " tip-bot for Tim Chen
@ 2015-02-24 16:12       ` Steven Rostedt
  2015-03-03 21:12         ` Ben Hutchings
  2015-04-09  1:17         ` Zefan Li
  0 siblings, 2 replies; 10+ messages in thread
From: Steven Rostedt @ 2015-02-24 16:12 UTC (permalink / raw)
  To: tip-bot for Tim Chen
  Cc: suruchi.a.kadu, linux-kernel, sbohrer, peterz, mingo, tglx,
	doug.nelson, torvalds, tim.c.chen, hpa, stable, Clark Williams

On Sun, 1 Feb 2015 09:52:24 -0800
tip-bot for Tim Chen <tipbot@zytor.com> wrote:

> Commit-ID:  80e3d87b2c5582db0ab5e39610ce3707d97ba409
> Gitweb:     http://git.kernel.org/tip/80e3d87b2c5582db0ab5e39610ce3707d97ba409
> Author:     Tim Chen <tim.c.chen@linux.intel.com>
> AuthorDate: Fri, 12 Dec 2014 15:38:12 -0800
> Committer:  Ingo Molnar <mingo@kernel.org>
> CommitDate: Fri, 30 Jan 2015 19:38:49 +0100
> 
> sched/rt: Reduce rq lock contention by eliminating locking of non-feasible target
> 
> This patch adds checks that prevens futile attempts to move rt tasks
> to a CPU with active tasks of equal or higher priority.
> 
> This reduces run queue lock contention and improves the performance of
> a well known OLTP benchmark by 0.7%.
> 
> Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>
> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
> Cc: Shawn Bohrer <sbohrer@rgmadvisors.com>
> Cc: Suruchi Kadu <suruchi.a.kadu@intel.com>
> Cc: Doug Nelson<doug.nelson@intel.com>
> Cc: Steven Rostedt <rostedt@goodmis.org>
> Cc: Linus Torvalds <torvalds@linux-foundation.org>
> Link: http://lkml.kernel.org/r/1421430374.2399.27.camel@schen9-desk2.jf.intel.com
> Signed-off-by: Ingo Molnar <mingo@kernel.org>

I see this has been added to mainline already. I think this should go
to stable as well. As far back as it applies. I'll even add this to the
stable-rt if need be. But I rather pull it into stable-rt via the
stable branches.

Thanks,

-- Steve

> ---
>  kernel/sched/rt.c | 17 ++++++++++++++++-
>  1 file changed, 16 insertions(+), 1 deletion(-)
> 
> diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
> index 6725e3c..f4d4b07 100644
> --- a/kernel/sched/rt.c
> +++ b/kernel/sched/rt.c
> @@ -1340,7 +1340,12 @@ select_task_rq_rt(struct task_struct *p, int cpu, int sd_flag, int flags)
>  	     curr->prio <= p->prio)) {
>  		int target = find_lowest_rq(p);
>  
> -		if (target != -1)
> +		/*
> +		 * Don't bother moving it if the destination CPU is
> +		 * not running a lower priority task.
> +		 */
> +		if (target != -1 &&
> +		    p->prio < cpu_rq(target)->rt.highest_prio.curr)
>  			cpu = target;
>  	}
>  	rcu_read_unlock();
> @@ -1617,6 +1622,16 @@ static struct rq *find_lock_lowest_rq(struct task_struct *task, struct rq *rq)
>  
>  		lowest_rq = cpu_rq(cpu);
>  
> +		if (lowest_rq->rt.highest_prio.curr <= task->prio) {
> +			/*
> +			 * Target rq has tasks of equal or higher priority,
> +			 * retrying does not release any lock and is unlikely
> +			 * to yield a different result.
> +			 */
> +			lowest_rq = NULL;
> +			break;
> +		}
> +
>  		/* if the prio of this runqueue changed, try again */
>  		if (double_lock_balance(rq, lowest_rq)) {
>  			/*


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [tip:sched/core] sched/rt:  Reduce rq lock contention by eliminating locking of non-feasible target
  2015-02-24 16:12       ` Steven Rostedt
@ 2015-03-03 21:12         ` Ben Hutchings
  2015-04-09  1:17         ` Zefan Li
  1 sibling, 0 replies; 10+ messages in thread
From: Ben Hutchings @ 2015-03-03 21:12 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: tip-bot for Tim Chen, suruchi.a.kadu, linux-kernel, sbohrer,
	peterz, mingo, tglx, doug.nelson, torvalds, tim.c.chen, hpa,
	stable, Clark Williams

[-- Attachment #1: Type: text/plain, Size: 1727 bytes --]

On Tue, 2015-02-24 at 11:12 -0500, Steven Rostedt wrote:
> On Sun, 1 Feb 2015 09:52:24 -0800
> tip-bot for Tim Chen <tipbot@zytor.com> wrote:
> 
> > Commit-ID:  80e3d87b2c5582db0ab5e39610ce3707d97ba409
> > Gitweb:     http://git.kernel.org/tip/80e3d87b2c5582db0ab5e39610ce3707d97ba409
> > Author:     Tim Chen <tim.c.chen@linux.intel.com>
> > AuthorDate: Fri, 12 Dec 2014 15:38:12 -0800
> > Committer:  Ingo Molnar <mingo@kernel.org>
> > CommitDate: Fri, 30 Jan 2015 19:38:49 +0100
> > 
> > sched/rt: Reduce rq lock contention by eliminating locking of non-feasible target
> > 
> > This patch adds checks that prevens futile attempts to move rt tasks
> > to a CPU with active tasks of equal or higher priority.
> > 
> > This reduces run queue lock contention and improves the performance of
> > a well known OLTP benchmark by 0.7%.
> > 
> > Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>
> > Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
> > Cc: Shawn Bohrer <sbohrer@rgmadvisors.com>
> > Cc: Suruchi Kadu <suruchi.a.kadu@intel.com>
> > Cc: Doug Nelson<doug.nelson@intel.com>
> > Cc: Steven Rostedt <rostedt@goodmis.org>
> > Cc: Linus Torvalds <torvalds@linux-foundation.org>
> > Link: http://lkml.kernel.org/r/1421430374.2399.27.camel@schen9-desk2.jf.intel.com
> > Signed-off-by: Ingo Molnar <mingo@kernel.org>
> 
> I see this has been added to mainline already. I think this should go
> to stable as well. As far back as it applies. I'll even add this to the
> stable-rt if need be. But I rather pull it into stable-rt via the
> stable branches.
[...]

I've queued this up for 3.2, thanks.

Ben.

-- 
Ben Hutchings
The world is coming to an end.	Please log off.

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 811 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [tip:sched/core] sched/rt:  Reduce rq lock contention by eliminating locking of non-feasible target
  2015-02-24 16:12       ` Steven Rostedt
  2015-03-03 21:12         ` Ben Hutchings
@ 2015-04-09  1:17         ` Zefan Li
  1 sibling, 0 replies; 10+ messages in thread
From: Zefan Li @ 2015-04-09  1:17 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: tip-bot for Tim Chen, suruchi.a.kadu, linux-kernel, sbohrer,
	peterz, mingo, tglx, doug.nelson, torvalds, tim.c.chen, hpa,
	stable, Clark Williams

>> Commit-ID:  80e3d87b2c5582db0ab5e39610ce3707d97ba409
>> Gitweb:     http://git.kernel.org/tip/80e3d87b2c5582db0ab5e39610ce3707d97ba409
>> Author:     Tim Chen <tim.c.chen@linux.intel.com>
>> AuthorDate: Fri, 12 Dec 2014 15:38:12 -0800
>> Committer:  Ingo Molnar <mingo@kernel.org>
>> CommitDate: Fri, 30 Jan 2015 19:38:49 +0100
>>
>> sched/rt: Reduce rq lock contention by eliminating locking of non-feasible target
>>
>> This patch adds checks that prevens futile attempts to move rt tasks
>> to a CPU with active tasks of equal or higher priority.
>>
>> This reduces run queue lock contention and improves the performance of
>> a well known OLTP benchmark by 0.7%.
>>
>> Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>
>> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
>> Cc: Shawn Bohrer <sbohrer@rgmadvisors.com>
>> Cc: Suruchi Kadu <suruchi.a.kadu@intel.com>
>> Cc: Doug Nelson<doug.nelson@intel.com>
>> Cc: Steven Rostedt <rostedt@goodmis.org>
>> Cc: Linus Torvalds <torvalds@linux-foundation.org>
>> Link: http://lkml.kernel.org/r/1421430374.2399.27.camel@schen9-desk2.jf.intel.com
>> Signed-off-by: Ingo Molnar <mingo@kernel.org>
> 
> I see this has been added to mainline already. I think this should go
> to stable as well. As far back as it applies. I'll even add this to the
> stable-rt if need be. But I rather pull it into stable-rt via the
> stable branches.
> 

Queued up for 3.4. Thanks!


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2015-04-09  1:19 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-01-06 19:01 [PATCH] Repost sched-rt: Reduce rq lock contention by eliminating locking of non-feasible target Tim Chen
2015-01-06 19:30 ` Peter Zijlstra
2015-01-15 17:13   ` Tim Chen
2015-01-16  1:58 ` Steven Rostedt
2015-01-16 17:46   ` Tim Chen
2015-01-22 17:48     ` Tim Chen
2015-02-01 17:52     ` [tip:sched/core] sched/rt: " tip-bot for Tim Chen
2015-02-24 16:12       ` Steven Rostedt
2015-03-03 21:12         ` Ben Hutchings
2015-04-09  1:17         ` Zefan Li

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).