linux-rt-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH]sched/rt: Do not try to push tasks if pinned task switches to RT
@ 2013-01-28 20:23 Kirill Tkhai
  2013-01-29  8:42 ` Libo Chen
  2013-01-29 13:26 ` Steven Rostedt
  0 siblings, 2 replies; 8+ messages in thread
From: Kirill Tkhai @ 2013-01-28 20:23 UTC (permalink / raw)
  To: linux-kernel@vger.kernel.org
  Cc: Steven Rostedt, Ingo Molnar, Peter Zijlstra, linux-rt-users

Just switched pinned task is not able to be pushed. If the rq had had
several RT tasks before they have already been considered as candidates
to be pushed (or pulled).

Signed-off-by: Kirill V Tkhai <tkhai@yandex.ru>
CC: Steven Rostedt <rostedt@goodmis.org>
CC: Ingo Molnar <mingo@kernel.org>
CC: Peter Zijlstra <peterz@infradead.org>
CC: linux-rt-users <linux-rt-users@vger.kernel.org>
---
 kernel/sched/rt.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
index 4e8f0f4..5f7d92b 100644
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
@@ -1925,9 +1925,9 @@ static void switched_to_rt(struct rq *rq, struct task_struct *p)
 	 */
 	if (p->on_rq && rq->curr != p) {
 #ifdef CONFIG_SMP
-		if (rq->rt.overloaded && push_rt_task(rq) &&
+		if (rq->rt.overloaded && p->nr_cpus_allowed > 1 &&
 		    /* Don't resched if we changed runqueues */
-		    rq != task_rq(p))
+		    push_rt_task(rq) && rq != task_rq(p))
 			check_resched = 0;
 #endif /* CONFIG_SMP */
 		if (check_resched && p->prio < rq->curr->prio)

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

* Re: [PATCH]sched/rt: Do not try to push tasks if pinned task switches to RT
  2013-01-28 20:23 [PATCH]sched/rt: Do not try to push tasks if pinned task switches to RT Kirill Tkhai
@ 2013-01-29  8:42 ` Libo Chen
  2013-01-29 13:26 ` Steven Rostedt
  1 sibling, 0 replies; 8+ messages in thread
From: Libo Chen @ 2013-01-29  8:42 UTC (permalink / raw)
  To: Kirill Tkhai
  Cc: linux-kernel@vger.kernel.org, Steven Rostedt, Ingo Molnar,
	Peter Zijlstra, linux-rt-users, lizefan, jovi.zhangwei

From: Libo Chen <libo.chen@huawei.com>


On 2013-1-29 4:23, Kirill Tkhai wrote:
> Just switched pinned task is not able to be pushed. If the rq had had
> several RT tasks before they have already been considered as candidates
> to be pushed (or pulled).
>
> Signed-off-by: Kirill V Tkhai <tkhai@yandex.ru>
> CC: Steven Rostedt <rostedt@goodmis.org>
> CC: Ingo Molnar <mingo@kernel.org>
> CC: Peter Zijlstra <peterz@infradead.org>
> CC: linux-rt-users <linux-rt-users@vger.kernel.org>
> ---
>  kernel/sched/rt.c |    4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
> index 4e8f0f4..5f7d92b 100644
> --- a/kernel/sched/rt.c
> +++ b/kernel/sched/rt.c
> @@ -1925,9 +1925,9 @@ static void switched_to_rt(struct rq *rq, struct task_struct *p)
>  	 */
>  	if (p->on_rq && rq->curr != p) {
>  #ifdef CONFIG_SMP
> -		if (rq->rt.overloaded && push_rt_task(rq) &&
> +		if (rq->rt.overloaded && p->nr_cpus_allowed > 1 &&
>  		    /* Don't resched if we changed runqueues */
> -		    rq != task_rq(p))
> +		    push_rt_task(rq) && rq != task_rq(p))

I think you worry about it was excess to call push_rt_task, since the task of p->nr_cpus_allowed=1 can`t be pushed. is that right?

The task of p->nr_cpus_allowed =1 would`t be added to  pushable_tasks list (see the enqueue_task_rt())and  this push_rt_task() need to push other tasks when rt.overloaded.

So I don`t agree this patch.  


>  			check_resched = 0;
>  #endif /* CONFIG_SMP */
>  		if (check_resched && p->prio < rq->curr->prio)
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

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

* Re: [PATCH]sched/rt: Do not try to push tasks if pinned task switches to RT
  2013-01-28 20:23 [PATCH]sched/rt: Do not try to push tasks if pinned task switches to RT Kirill Tkhai
  2013-01-29  8:42 ` Libo Chen
@ 2013-01-29 13:26 ` Steven Rostedt
  1 sibling, 0 replies; 8+ messages in thread
From: Steven Rostedt @ 2013-01-29 13:26 UTC (permalink / raw)
  To: Kirill Tkhai
  Cc: linux-kernel@vger.kernel.org, Ingo Molnar, Peter Zijlstra,
	linux-rt-users

On Tue, 2013-01-29 at 00:23 +0400, Kirill Tkhai wrote:
> Just switched pinned task is not able to be pushed. If the rq had had
> several RT tasks before they have already been considered as candidates
> to be pushed (or pulled).

Thanks, but I have one minor nit.

> 
> Signed-off-by: Kirill V Tkhai <tkhai@yandex.ru>
> CC: Steven Rostedt <rostedt@goodmis.org>
> CC: Ingo Molnar <mingo@kernel.org>
> CC: Peter Zijlstra <peterz@infradead.org>
> CC: linux-rt-users <linux-rt-users@vger.kernel.org>
> ---
>  kernel/sched/rt.c |    4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
> index 4e8f0f4..5f7d92b 100644
> --- a/kernel/sched/rt.c
> +++ b/kernel/sched/rt.c
> @@ -1925,9 +1925,9 @@ static void switched_to_rt(struct rq *rq, struct task_struct *p)
>  	 */
>  	if (p->on_rq && rq->curr != p) {
>  #ifdef CONFIG_SMP
> -		if (rq->rt.overloaded && push_rt_task(rq) &&
> +		if (rq->rt.overloaded && p->nr_cpus_allowed > 1 &&

I would swap the order here. That is, check p->nr_cpus_allowed before
rq->rt.overloaded. The order doesn't really matter, and even though
rq->rt.overloaded is probably more likely to be 0, it is used by other
CPUs. And as a micro-optimization, I rather read something that is used
by only one CPU than to read something that may be modified by many
CPUs.

-- Steve


>  		    /* Don't resched if we changed runqueues */
> -		    rq != task_rq(p))
> +		    push_rt_task(rq) && rq != task_rq(p))
>  			check_resched = 0;
>  #endif /* CONFIG_SMP */
>  		if (check_resched && p->prio < rq->curr->prio)

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

* Re: [PATCH]sched/rt: Do not try to push tasks if pinned task switches to RT
  2013-01-29 14:45 Kirill Tkhai
@ 2014-03-12 10:18 ` Steven Rostedt
  2014-03-12 10:39   ` Nicholas Mc Guire
  2014-03-12 13:33   ` Peter Zijlstra
  0 siblings, 2 replies; 8+ messages in thread
From: Steven Rostedt @ 2014-03-12 10:18 UTC (permalink / raw)
  To: Peter Zijlstra; +Cc: Kirill Tkhai, linux-kernel, Ingo Molnar, linux-rt-users

Peter,

I'm going through my inbox (over a year old), and found this patch from
Kirill. It looks fine to me. You can apply it with my

  Acked-by: Steven Rostedt <rostedt@goodmis.org>

-- Steve

[PATCH]sched/rt: Do not try to push tasks if pinned task switches to RT

Just switched pinned task is not able to be pushed. If the rq had had
several RT tasks before they have already been considered as candidates
to be pushed (or pulled).

Signed-off-by: Kirill V Tkhai <tkhai@yandex.ru>
CC: Steven Rostedt <rostedt@goodmis.org>
CC: Ingo Molnar <mingo@kernel.org>
CC: Peter Zijlstra <peterz@infradead.org>
CC: linux-rt-users <linux-rt-users@vger.kernel.org>
---
 kernel/sched/rt.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
index 4e8f0f4..5aab032 100644
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
@@ -1925,9 +1925,9 @@ static void switched_to_rt(struct rq *rq, struct task_struct *p)
 	 */
 	if (p->on_rq && rq->curr != p) {
 #ifdef CONFIG_SMP
-		if (rq->rt.overloaded && push_rt_task(rq) &&
+		if (p->nr_cpus_allowed > 1 && rq->rt.overloaded &&
 		    /* Don't resched if we changed runqueues */
-		    rq != task_rq(p))
+		    push_rt_task(rq) && rq != task_rq(p))
 			check_resched = 0;
 #endif /* CONFIG_SMP */
 		if (check_resched && p->prio < rq->curr->prio)

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

* Re: [PATCH]sched/rt: Do not try to push tasks if pinned task switches to RT
  2014-03-12 10:18 ` [PATCH]sched/rt: " Steven Rostedt
@ 2014-03-12 10:39   ` Nicholas Mc Guire
  2014-03-12 12:23     ` Kirill Tkhai
  2014-03-12 13:33   ` Peter Zijlstra
  1 sibling, 1 reply; 8+ messages in thread
From: Nicholas Mc Guire @ 2014-03-12 10:39 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: Peter Zijlstra, Kirill Tkhai, linux-kernel, Ingo Molnar,
	linux-rt-users

On Wed, 12 Mar 2014, Steven Rostedt wrote:

> Peter,
> 
> I'm going through my inbox (over a year old), and found this patch from
> Kirill. It looks fine to me. You can apply it with my
> 
>   Acked-by: Steven Rostedt <rostedt@goodmis.org>
>
> -- Steve
> 
> [PATCH]sched/rt: Do not try to push tasks if pinned task switches to RT
> 
> Just switched pinned task is not able to be pushed. If the rq had had
> several RT tasks before they have already been considered as candidates
> to be pushed (or pulled).
> 
> Signed-off-by: Kirill V Tkhai <tkhai@yandex.ru>
> CC: Steven Rostedt <rostedt@goodmis.org>
> CC: Ingo Molnar <mingo@kernel.org>
> CC: Peter Zijlstra <peterz@infradead.org>
> CC: linux-rt-users <linux-rt-users@vger.kernel.org>
> ---
>  kernel/sched/rt.c |    4 ++--
>  1 files changed, 2 insertions(+), 2 deletions(-)
> diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
> index 4e8f0f4..5aab032 100644
> --- a/kernel/sched/rt.c
> +++ b/kernel/sched/rt.c
> @@ -1925,9 +1925,9 @@ static void switched_to_rt(struct rq *rq, struct task_struct *p)
>  	 */
>  	if (p->on_rq && rq->curr != p) {
>  #ifdef CONFIG_SMP
> -		if (rq->rt.overloaded && push_rt_task(rq) &&
> +		if (p->nr_cpus_allowed > 1 && rq->rt.overloaded &&
>  		    /* Don't resched if we changed runqueues */
> -		    rq != task_rq(p))
> +		    push_rt_task(rq) && rq != task_rq(p))
>  			check_resched = 0;
>  #endif /* CONFIG_SMP */
>  		if (check_resched && p->prio < rq->curr->prio)

would there not need to be a check for p->migrate_disable ?
push_rt_task() is not checking and so a high prio RT task 
preemting a low prio RT task in a migrate_disable() section
would actually push it off this cpu ? atleast I did not 
find why that would not happen.

thx!
hofrat

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

* Re: [PATCH]sched/rt: Do not try to push tasks if pinned task switches to RT
  2014-03-12 10:39   ` Nicholas Mc Guire
@ 2014-03-12 12:23     ` Kirill Tkhai
  2014-03-20 18:21       ` Steven Rostedt
  0 siblings, 1 reply; 8+ messages in thread
From: Kirill Tkhai @ 2014-03-12 12:23 UTC (permalink / raw)
  To: Nicholas Mc Guire, Steven Rostedt
  Cc: Peter Zijlstra, linux-kernel@vger.kernel.org, Ingo Molnar,
	linux-rt-users

12.03.2014, 14:39, "Nicholas Mc Guire" <der.herr@hofr.at>:
> On Wed, 12 Mar 2014, Steven Rostedt wrote:
>
>>  Peter,
>>
>>  I'm going through my inbox (over a year old), and found this patch from
>>  Kirill. It looks fine to me. You can apply it with my
>>
>>    Acked-by: Steven Rostedt <rostedt@goodmis.org>
>>
>>  -- Steve
>>
>>  [PATCH]sched/rt: Do not try to push tasks if pinned task switches to RT
>>
>>  Just switched pinned task is not able to be pushed. If the rq had had
>>  several RT tasks before they have already been considered as candidates
>>  to be pushed (or pulled).
>>
>>  Signed-off-by: Kirill V Tkhai <tkhai@yandex.ru>
>>  CC: Steven Rostedt <rostedt@goodmis.org>
>>  CC: Ingo Molnar <mingo@kernel.org>
>>  CC: Peter Zijlstra <peterz@infradead.org>
>>  CC: linux-rt-users <linux-rt-users@vger.kernel.org>
>>  ---
>>   kernel/sched/rt.c |    4 ++--
>>   1 files changed, 2 insertions(+), 2 deletions(-)
>>  diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
>>  index 4e8f0f4..5aab032 100644
>>  --- a/kernel/sched/rt.c
>>  +++ b/kernel/sched/rt.c
>>  @@ -1925,9 +1925,9 @@ static void switched_to_rt(struct rq *rq, struct task_struct *p)
>>            */
>>           if (p->on_rq && rq->curr != p) {
>>   #ifdef CONFIG_SMP
>>  - if (rq->rt.overloaded && push_rt_task(rq) &&
>>  + if (p->nr_cpus_allowed > 1 && rq->rt.overloaded &&
>>                       /* Don't resched if we changed runqueues */
>>  -    rq != task_rq(p))
>>  +    push_rt_task(rq) && rq != task_rq(p))
>>                           check_resched = 0;
>>   #endif /* CONFIG_SMP */
>>                   if (check_resched && p->prio < rq->curr->prio)
>
> would there not need to be a check for p->migrate_disable ?
> push_rt_task() is not checking and so a high prio RT task
> preemting a low prio RT task in a migrate_disable() section
> would actually push it off this cpu ? atleast I did not
> find why that would not happen.

Hi, Nicholas!

p is not rq->curr, so its p->migrate_disable state is already updated and
it can't be pushed (nr_cpus_allowed == 1 and it's not pushable).

(If I understand right, that you worry about this).

Kirill

> thx!
> hofrat

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

* Re: [PATCH]sched/rt: Do not try to push tasks if pinned task switches to RT
  2014-03-12 10:18 ` [PATCH]sched/rt: " Steven Rostedt
  2014-03-12 10:39   ` Nicholas Mc Guire
@ 2014-03-12 13:33   ` Peter Zijlstra
  1 sibling, 0 replies; 8+ messages in thread
From: Peter Zijlstra @ 2014-03-12 13:33 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: Kirill Tkhai, linux-kernel, Ingo Molnar, linux-rt-users

On Wed, Mar 12, 2014 at 06:18:33AM -0400, Steven Rostedt wrote:
> Peter,
> 
> I'm going through my inbox (over a year old), and found this patch from
> Kirill. It looks fine to me. You can apply it with my
> 

Thanks!

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

* Re: [PATCH]sched/rt: Do not try to push tasks if pinned task switches to RT
  2014-03-12 12:23     ` Kirill Tkhai
@ 2014-03-20 18:21       ` Steven Rostedt
  0 siblings, 0 replies; 8+ messages in thread
From: Steven Rostedt @ 2014-03-20 18:21 UTC (permalink / raw)
  To: Kirill Tkhai
  Cc: Nicholas Mc Guire, Peter Zijlstra, linux-kernel@vger.kernel.org,
	Ingo Molnar, linux-rt-users

On Wed, 12 Mar 2014 16:23:48 +0400
Kirill Tkhai <tkhai@yandex.ru> wrote:

> > would there not need to be a check for p->migrate_disable ?
> > push_rt_task() is not checking and so a high prio RT task
> > preemting a low prio RT task in a migrate_disable() section
> > would actually push it off this cpu ? atleast I did not
> > find why that would not happen.
> 
> Hi, Nicholas!
> 
> p is not rq->curr, so its p->migrate_disable state is already updated and
> it can't be pushed (nr_cpus_allowed == 1 and it's not pushable).
> 
> (If I understand right, that you worry about this).
> 

Correct. If p has migrate_disabled set and scheduled out, then when it
gets scheduled out, its cpu affinity gets set to only the current cpu
and nr_cpu_allowed to 1. No need to check here if p->migrate_disabled is
set.

-- Steve

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

end of thread, other threads:[~2014-03-20 18:21 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-28 20:23 [PATCH]sched/rt: Do not try to push tasks if pinned task switches to RT Kirill Tkhai
2013-01-29  8:42 ` Libo Chen
2013-01-29 13:26 ` Steven Rostedt
  -- strict thread matches above, loose matches on Subject: below --
2013-01-29 14:45 Kirill Tkhai
2014-03-12 10:18 ` [PATCH]sched/rt: " Steven Rostedt
2014-03-12 10:39   ` Nicholas Mc Guire
2014-03-12 12:23     ` Kirill Tkhai
2014-03-20 18:21       ` Steven Rostedt
2014-03-12 13:33   ` Peter Zijlstra

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).