Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1381268 > unrolled thread
| Started by | Wanpeng Li <kernellwp@gmail.com> |
|---|---|
| First post | 2016-04-18 08:00 +0200 |
| Last post | 2016-04-21 00:30 +0200 |
| Articles | 14 — 5 participants |
Back to article view | Back to linux.kernel
[PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running Wanpeng Li <kernellwp@gmail.com> - 2016-04-18 08:00 +0200
Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running "Rafael J. Wysocki" <rjw@rjwysocki.net> - 2016-04-20 02:30 +0200
Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running Wanpeng Li <kernellwp@gmail.com> - 2016-04-20 02:50 +0200
Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running Peter Zijlstra <peterz@infradead.org> - 2016-04-20 16:10 +0200
Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running "Rafael J. Wysocki" <rafael.j.wysocki@intel.com> - 2016-04-21 00:30 +0200
Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running Wanpeng Li <kernellwp@gmail.com> - 2016-04-21 03:10 +0200
Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running "Rafael J. Wysocki" <rafael.j.wysocki@intel.com> - 2016-04-21 13:20 +0200
Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running Wanpeng Li <kernellwp@gmail.com> - 2016-04-21 14:20 +0200
Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running Wanpeng Li <kernellwp@gmail.com> - 2016-04-21 14:30 +0200
Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running Peter Zijlstra <peterz@infradead.org> - 2016-04-21 14:40 +0200
Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running Wanpeng Li <kernellwp@gmail.com> - 2016-04-21 15:40 +0200
Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running "Rafael J. Wysocki" <rafael@kernel.org> - 2016-04-21 19:10 +0200
Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running Peter Zijlstra <peterz@infradead.org> - 2016-04-21 19:20 +0200
Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running Wanpeng Li <kernellwp@gmail.com> - 2016-04-21 00:30 +0200
| From | Wanpeng Li <kernellwp@gmail.com> |
|---|---|
| Date | 2016-04-18 08:00 +0200 |
| Subject | [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running |
| Message-ID | <rpao1-n7-1@gated-at.bofh.it> |
Sometimes update_curr() is called w/o tasks actually running, it is captured by: u64 delta_exec = rq_clock_task(rq) - curr->se.exec_start; We should not trigger cpufreq update in this case for rt/deadline classes, and this patch fix it. Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com> --- kernel/sched/deadline.c | 8 ++++---- kernel/sched/rt.c | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c index affd97e..8f9b5af 100644 --- a/kernel/sched/deadline.c +++ b/kernel/sched/deadline.c @@ -717,10 +717,6 @@ static void update_curr_dl(struct rq *rq) if (!dl_task(curr) || !on_dl_rq(dl_se)) return; - /* Kick cpufreq (see the comment in linux/cpufreq.h). */ - if (cpu_of(rq) == smp_processor_id()) - cpufreq_trigger_update(rq_clock(rq)); - /* * Consumed budget is computed considering the time as * observed by schedulable tasks (excluding time spent @@ -736,6 +732,10 @@ static void update_curr_dl(struct rq *rq) return; } + /* kick cpufreq (see the comment in linux/cpufreq.h). */ + if (cpu_of(rq) == smp_processor_id()) + cpufreq_trigger_update(rq_clock(rq)); + schedstat_set(curr->se.statistics.exec_max, max(curr->se.statistics.exec_max, delta_exec)); diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c index c41ea7a..19e1306 100644 --- a/kernel/sched/rt.c +++ b/kernel/sched/rt.c @@ -953,14 +953,14 @@ static void update_curr_rt(struct rq *rq) if (curr->sched_class != &rt_sched_class) return; - /* Kick cpufreq (see the comment in linux/cpufreq.h). */ - if (cpu_of(rq) == smp_processor_id()) - cpufreq_trigger_update(rq_clock(rq)); - delta_exec = rq_clock_task(rq) - curr->se.exec_start; if (unlikely((s64)delta_exec <= 0)) return; + /* Kick cpufreq (see the comment in linux/cpufreq.h). */ + if (cpu_of(rq) == smp_processor_id()) + cpufreq_trigger_update(rq_clock(rq)); + schedstat_set(curr->se.statistics.exec_max, max(curr->se.statistics.exec_max, delta_exec)); -- 1.9.1
[toc] | [next] | [standalone]
| From | "Rafael J. Wysocki" <rjw@rjwysocki.net> |
|---|---|
| Date | 2016-04-20 02:30 +0200 |
| Message-ID | <rpObM-7pt-13@gated-at.bofh.it> |
| In reply to | #1381268 |
On Monday, April 18, 2016 01:51:24 PM Wanpeng Li wrote: > Sometimes update_curr() is called w/o tasks actually running, it is > captured by: > u64 delta_exec = rq_clock_task(rq) - curr->se.exec_start; > We should not trigger cpufreq update in this case for rt/deadline > classes, and this patch fix it. > > Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com> The signed-off-by tag should agree with the From: header. One way to achieve that is to add an extra From: line at the start of the changelog. That said, this looks like a good catch that should go into 4.6 to me. Peter, what do you think? > --- > kernel/sched/deadline.c | 8 ++++---- > kernel/sched/rt.c | 8 ++++---- > 2 files changed, 8 insertions(+), 8 deletions(-) > > diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c > index affd97e..8f9b5af 100644 > --- a/kernel/sched/deadline.c > +++ b/kernel/sched/deadline.c > @@ -717,10 +717,6 @@ static void update_curr_dl(struct rq *rq) > if (!dl_task(curr) || !on_dl_rq(dl_se)) > return; > > - /* Kick cpufreq (see the comment in linux/cpufreq.h). */ > - if (cpu_of(rq) == smp_processor_id()) > - cpufreq_trigger_update(rq_clock(rq)); > - > /* > * Consumed budget is computed considering the time as > * observed by schedulable tasks (excluding time spent > @@ -736,6 +732,10 @@ static void update_curr_dl(struct rq *rq) > return; > } > > + /* kick cpufreq (see the comment in linux/cpufreq.h). */ > + if (cpu_of(rq) == smp_processor_id()) > + cpufreq_trigger_update(rq_clock(rq)); > + > schedstat_set(curr->se.statistics.exec_max, > max(curr->se.statistics.exec_max, delta_exec)); > > diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c > index c41ea7a..19e1306 100644 > --- a/kernel/sched/rt.c > +++ b/kernel/sched/rt.c > @@ -953,14 +953,14 @@ static void update_curr_rt(struct rq *rq) > if (curr->sched_class != &rt_sched_class) > return; > > - /* Kick cpufreq (see the comment in linux/cpufreq.h). */ > - if (cpu_of(rq) == smp_processor_id()) > - cpufreq_trigger_update(rq_clock(rq)); > - > delta_exec = rq_clock_task(rq) - curr->se.exec_start; > if (unlikely((s64)delta_exec <= 0)) > return; > > + /* Kick cpufreq (see the comment in linux/cpufreq.h). */ > + if (cpu_of(rq) == smp_processor_id()) > + cpufreq_trigger_update(rq_clock(rq)); > + > schedstat_set(curr->se.statistics.exec_max, > max(curr->se.statistics.exec_max, delta_exec)); > >
[toc] | [prev] | [next] | [standalone]
| From | Wanpeng Li <kernellwp@gmail.com> |
|---|---|
| Date | 2016-04-20 02:50 +0200 |
| Subject | Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running |
| Message-ID | <rpOv7-7xA-5@gated-at.bofh.it> |
| In reply to | #1382925 |
2016-04-20 8:32 GMT+08:00 Rafael J. Wysocki <rjw@rjwysocki.net>: > On Monday, April 18, 2016 01:51:24 PM Wanpeng Li wrote: >> Sometimes update_curr() is called w/o tasks actually running, it is >> captured by: >> u64 delta_exec = rq_clock_task(rq) - curr->se.exec_start; >> We should not trigger cpufreq update in this case for rt/deadline >> classes, and this patch fix it. >> >> Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com> > > The signed-off-by tag should agree with the From: header. One way to achieve > that is to add an extra From: line at the start of the changelog. Thanks for the tip Rafael, just send out v2 to fix it. Regards, Wanpeng Li
[toc] | [prev] | [next] | [standalone]
| From | Peter Zijlstra <peterz@infradead.org> |
|---|---|
| Date | 2016-04-20 16:10 +0200 |
| Subject | Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running |
| Message-ID | <rq0Zj-Go-9@gated-at.bofh.it> |
| In reply to | #1382925 |
On Wed, Apr 20, 2016 at 02:32:35AM +0200, Rafael J. Wysocki wrote: > On Monday, April 18, 2016 01:51:24 PM Wanpeng Li wrote: > > Sometimes update_curr() is called w/o tasks actually running, it is > > captured by: > > u64 delta_exec = rq_clock_task(rq) - curr->se.exec_start; > > We should not trigger cpufreq update in this case for rt/deadline > > classes, and this patch fix it. > > > > Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com> > > The signed-off-by tag should agree with the From: header. One way to achieve > that is to add an extra From: line at the start of the changelog. > > That said, this looks like a good catch that should go into 4.6 to me. > > Peter, what do you think? I'm confused by the Changelog. *what* ?
[toc] | [prev] | [next] | [standalone]
| From | "Rafael J. Wysocki" <rafael.j.wysocki@intel.com> |
|---|---|
| Date | 2016-04-21 00:30 +0200 |
| Subject | Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running |
| Message-ID | <rq8Nc-71F-35@gated-at.bofh.it> |
| In reply to | #1383423 |
On 4/21/2016 12:24 AM, Wanpeng Li wrote: > 2016-04-20 22:01 GMT+08:00 Peter Zijlstra <peterz@infradead.org>: >> On Wed, Apr 20, 2016 at 02:32:35AM +0200, Rafael J. Wysocki wrote: >>> On Monday, April 18, 2016 01:51:24 PM Wanpeng Li wrote: >>>> Sometimes update_curr() is called w/o tasks actually running, it is >>>> captured by: >>>> u64 delta_exec = rq_clock_task(rq) - curr->se.exec_start; >>>> We should not trigger cpufreq update in this case for rt/deadline >>>> classes, and this patch fix it. >>>> >>>> Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com> >>> The signed-off-by tag should agree with the From: header. One way to achieve >>> that is to add an extra From: line at the start of the changelog. >>> >>> That said, this looks like a good catch that should go into 4.6 to me. >>> >>> Peter, what do you think? >> I'm confused by the Changelog. *what* ? > Sometimes .update_curr hook is called w/o tasks actually running, it is > captured by: > > u64 delta_exec = rq_clock_task(rq) - curr->se.exec_start; > > We should not trigger cpufreq update in this case for rt/deadline > classes, and this patch fix it. That's what you wrote in the changelog, no need to repeat that. I guess Peter is asking for more details, though. I actually would like to get some more details here too. Like an example of when the situation in question actually happens. Thanks, Rafael
[toc] | [prev] | [next] | [standalone]
| From | Wanpeng Li <kernellwp@gmail.com> |
|---|---|
| Date | 2016-04-21 03:10 +0200 |
| Subject | Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running |
| Message-ID | <rqbi2-Ai-3@gated-at.bofh.it> |
| In reply to | #1383772 |
2016-04-21 6:28 GMT+08:00 Rafael J. Wysocki <rafael.j.wysocki@intel.com>:
> On 4/21/2016 12:24 AM, Wanpeng Li wrote:
>>
>> 2016-04-20 22:01 GMT+08:00 Peter Zijlstra <peterz@infradead.org>:
>>>
>>> On Wed, Apr 20, 2016 at 02:32:35AM +0200, Rafael J. Wysocki wrote:
>>>>
>>>> On Monday, April 18, 2016 01:51:24 PM Wanpeng Li wrote:
>>>>>
>>>>> Sometimes update_curr() is called w/o tasks actually running, it is
>>>>> captured by:
>>>>> u64 delta_exec = rq_clock_task(rq) - curr->se.exec_start;
>>>>> We should not trigger cpufreq update in this case for rt/deadline
>>>>> classes, and this patch fix it.
>>>>>
>>>>> Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
>>>>
>>>> The signed-off-by tag should agree with the From: header. One way to
>>>> achieve
>>>> that is to add an extra From: line at the start of the changelog.
>>>>
>>>> That said, this looks like a good catch that should go into 4.6 to me.
>>>>
>>>> Peter, what do you think?
>>>
>>> I'm confused by the Changelog. *what* ?
>>
>> Sometimes .update_curr hook is called w/o tasks actually running, it is
>> captured by:
>>
>> u64 delta_exec = rq_clock_task(rq) - curr->se.exec_start;
>>
>> We should not trigger cpufreq update in this case for rt/deadline
>> classes, and this patch fix it.
>
>
> That's what you wrote in the changelog, no need to repeat that.
>
> I guess Peter is asking for more details, though. I actually would like to
> get some more details here too. Like an example of when the situation in
> question actually happens.
I add a print to print when delta_exec is zero for rt class, something
like below:
watchdog/5-48 [005] d... 568.449095: update_curr_rt: rt
delta_exec is zero
watchdog/5-48 [005] d... 568.449104: <stack trace>
=> pick_next_task_rt
=> __schedule
=> schedule
=> smpboot_thread_fn
=> kthread
=> ret_from_fork
watchdog/5-48 [005] d... 568.449105: update_curr_rt: rt
delta_exec is zero
watchdog/5-48 [005] d... 568.449111: <stack trace>
=> put_prev_task_rt
=> pick_next_task_idle
=> __schedule
=> schedule
=> smpboot_thread_fn
=> kthread
=> ret_from_fork
watchdog/6-56 [006] d... 568.510094: update_curr_rt: rt
delta_exec is zero
watchdog/6-56 [006] d... 568.510103: <stack trace>
=> pick_next_task_rt
=> __schedule
=> schedule
=> smpboot_thread_fn
=> kthread
=> ret_from_fork
watchdog/6-56 [006] d... 568.510105: update_curr_rt: rt
delta_exec is zero
watchdog/6-56 [006] d... 568.510111: <stack trace>
=> put_prev_task_rt
=> pick_next_task_idle
=> __schedule
=> schedule
=> smpboot_thread_fn
=> kthread
=> ret_from_fork
[...]
Regards,
Wanpeng Li
[toc] | [prev] | [next] | [standalone]
| From | "Rafael J. Wysocki" <rafael.j.wysocki@intel.com> |
|---|---|
| Date | 2016-04-21 13:20 +0200 |
| Subject | Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running |
| Message-ID | <rqkOm-8hw-15@gated-at.bofh.it> |
| In reply to | #1383819 |
On 4/21/2016 3:09 AM, Wanpeng Li wrote: > 2016-04-21 6:28 GMT+08:00 Rafael J. Wysocki <rafael.j.wysocki@intel.com>: >> On 4/21/2016 12:24 AM, Wanpeng Li wrote: >>> 2016-04-20 22:01 GMT+08:00 Peter Zijlstra <peterz@infradead.org>: >>>> On Wed, Apr 20, 2016 at 02:32:35AM +0200, Rafael J. Wysocki wrote: >>>>> On Monday, April 18, 2016 01:51:24 PM Wanpeng Li wrote: >>>>>> Sometimes update_curr() is called w/o tasks actually running, it is >>>>>> captured by: >>>>>> u64 delta_exec = rq_clock_task(rq) - curr->se.exec_start; >>>>>> We should not trigger cpufreq update in this case for rt/deadline >>>>>> classes, and this patch fix it. >>>>>> >>>>>> Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com> >>>>> The signed-off-by tag should agree with the From: header. One way to >>>>> achieve >>>>> that is to add an extra From: line at the start of the changelog. >>>>> >>>>> That said, this looks like a good catch that should go into 4.6 to me. >>>>> >>>>> Peter, what do you think? >>>> I'm confused by the Changelog. *what* ? >>> Sometimes .update_curr hook is called w/o tasks actually running, it is >>> captured by: >>> >>> u64 delta_exec = rq_clock_task(rq) - curr->se.exec_start; >>> >>> We should not trigger cpufreq update in this case for rt/deadline >>> classes, and this patch fix it. >> >> That's what you wrote in the changelog, no need to repeat that. >> >> I guess Peter is asking for more details, though. I actually would like to >> get some more details here too. Like an example of when the situation in >> question actually happens. > I add a print to print when delta_exec is zero for rt class, something > like below: > > watchdog/5-48 [005] d... 568.449095: update_curr_rt: rt > delta_exec is zero > watchdog/5-48 [005] d... 568.449104: <stack trace> > => pick_next_task_rt > => __schedule > => schedule > => smpboot_thread_fn > => kthread > => ret_from_fork > watchdog/5-48 [005] d... 568.449105: update_curr_rt: rt > delta_exec is zero > watchdog/5-48 [005] d... 568.449111: <stack trace> > => put_prev_task_rt > => pick_next_task_idle > => __schedule > => schedule > => smpboot_thread_fn > => kthread > => ret_from_fork > watchdog/6-56 [006] d... 568.510094: update_curr_rt: rt > delta_exec is zero > watchdog/6-56 [006] d... 568.510103: <stack trace> > => pick_next_task_rt > => __schedule > => schedule > => smpboot_thread_fn > => kthread > => ret_from_fork > watchdog/6-56 [006] d... 568.510105: update_curr_rt: rt > delta_exec is zero > watchdog/6-56 [006] d... 568.510111: <stack trace> > => put_prev_task_rt > => pick_next_task_idle > => __schedule > => schedule > => smpboot_thread_fn > => kthread > => ret_from_fork > [...] And the statement in your changelog follows from this I suppose. How does it follow, exactly? Thanks, Rafael
[toc] | [prev] | [next] | [standalone]
| From | Wanpeng Li <kernellwp@gmail.com> |
|---|---|
| Date | 2016-04-21 14:20 +0200 |
| Subject | Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running |
| Message-ID | <rqlKp-zM-11@gated-at.bofh.it> |
| In reply to | #1384087 |
2016-04-21 19:11 GMT+08:00 Rafael J. Wysocki <rafael.j.wysocki@intel.com>:
> On 4/21/2016 3:09 AM, Wanpeng Li wrote:
>>
>> 2016-04-21 6:28 GMT+08:00 Rafael J. Wysocki <rafael.j.wysocki@intel.com>:
>>>
>>> On 4/21/2016 12:24 AM, Wanpeng Li wrote:
>>>>
>>>> 2016-04-20 22:01 GMT+08:00 Peter Zijlstra <peterz@infradead.org>:
>>>>>
>>>>> On Wed, Apr 20, 2016 at 02:32:35AM +0200, Rafael J. Wysocki wrote:
>>>>>>
>>>>>> On Monday, April 18, 2016 01:51:24 PM Wanpeng Li wrote:
>>>>>>>
>>>>>>> Sometimes update_curr() is called w/o tasks actually running, it is
>>>>>>> captured by:
>>>>>>> u64 delta_exec = rq_clock_task(rq) - curr->se.exec_start;
>>>>>>> We should not trigger cpufreq update in this case for rt/deadline
>>>>>>> classes, and this patch fix it.
>>>>>>>
>>>>>>> Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
>>>>>>
>>>>>> The signed-off-by tag should agree with the From: header. One way to
>>>>>> achieve
>>>>>> that is to add an extra From: line at the start of the changelog.
>>>>>>
>>>>>> That said, this looks like a good catch that should go into 4.6 to me.
>>>>>>
>>>>>> Peter, what do you think?
>>>>>
>>>>> I'm confused by the Changelog. *what* ?
>>>>
>>>> Sometimes .update_curr hook is called w/o tasks actually running, it is
>>>> captured by:
>>>>
>>>> u64 delta_exec = rq_clock_task(rq) - curr->se.exec_start;
>>>>
>>>> We should not trigger cpufreq update in this case for rt/deadline
>>>> classes, and this patch fix it.
>>>
>>>
>>> That's what you wrote in the changelog, no need to repeat that.
>>>
>>> I guess Peter is asking for more details, though. I actually would like
>>> to
>>> get some more details here too. Like an example of when the situation in
>>> question actually happens.
>>
>> I add a print to print when delta_exec is zero for rt class, something
>> like below:
>>
>> watchdog/5-48 [005] d... 568.449095: update_curr_rt: rt
>> delta_exec is zero
>> watchdog/5-48 [005] d... 568.449104: <stack trace>
>> => pick_next_task_rt
>> => __schedule
>> => schedule
>> => smpboot_thread_fn
>> => kthread
>> => ret_from_fork
>> watchdog/5-48 [005] d... 568.449105: update_curr_rt: rt
>> delta_exec is zero
>> watchdog/5-48 [005] d... 568.449111: <stack trace>
>> => put_prev_task_rt
>> => pick_next_task_idle
>> => __schedule
>> => schedule
>> => smpboot_thread_fn
>> => kthread
>> => ret_from_fork
>> watchdog/6-56 [006] d... 568.510094: update_curr_rt: rt
>> delta_exec is zero
>> watchdog/6-56 [006] d... 568.510103: <stack trace>
>> => pick_next_task_rt
>> => __schedule
>> => schedule
>> => smpboot_thread_fn
>> => kthread
>> => ret_from_fork
>> watchdog/6-56 [006] d... 568.510105: update_curr_rt: rt
>> delta_exec is zero
>> watchdog/6-56 [006] d... 568.510111: <stack trace>
>> => put_prev_task_rt
>> => pick_next_task_idle
>> => __schedule
>> => schedule
>> => smpboot_thread_fn
>> => kthread
>> => ret_from_fork
>> [...]
>
>
> And the statement in your changelog follows from this I suppose. How does it
> follow, exactly?
For example, rt task A will go to sleep, an rt task B is the next
candidate to run.
__schedule()
-> deactivate_task(A, DEQUEUE_SLEEP)
-> dequeue_task_rt()
-> update_curr_rt()
-> cpufreq_trigger_update()
-> delta_exec = rq_clock_task(rq) - curr->se.exec_start;
[...]
-> pick_next_task_rt()
-> update_curr_rt() => rq->curr is still A currently
-> cpufreq_trigger_update()
-> delta_exec = rq_clock_task(rq) - curr->se.exec_start;
=> delta == 0, actually A is not running between these two updates
if (likely(prev != next)) {
rq->curr = B;
[...]
}
Regards,
Wanpeng Li
[toc] | [prev] | [next] | [standalone]
| From | Wanpeng Li <kernellwp@gmail.com> |
|---|---|
| Date | 2016-04-21 14:30 +0200 |
| Subject | Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running |
| Message-ID | <rqlU7-EL-31@gated-at.bofh.it> |
| In reply to | #1384140 |
2016-04-21 20:12 GMT+08:00 Wanpeng Li <kernellwp@gmail.com>:
> 2016-04-21 19:11 GMT+08:00 Rafael J. Wysocki <rafael.j.wysocki@intel.com>:
>> On 4/21/2016 3:09 AM, Wanpeng Li wrote:
>>>
>>> 2016-04-21 6:28 GMT+08:00 Rafael J. Wysocki <rafael.j.wysocki@intel.com>:
>>>>
>>>> On 4/21/2016 12:24 AM, Wanpeng Li wrote:
>>>>>
>>>>> 2016-04-20 22:01 GMT+08:00 Peter Zijlstra <peterz@infradead.org>:
>>>>>>
>>>>>> On Wed, Apr 20, 2016 at 02:32:35AM +0200, Rafael J. Wysocki wrote:
>>>>>>>
>>>>>>> On Monday, April 18, 2016 01:51:24 PM Wanpeng Li wrote:
>>>>>>>>
>>>>>>>> Sometimes update_curr() is called w/o tasks actually running, it is
>>>>>>>> captured by:
>>>>>>>> u64 delta_exec = rq_clock_task(rq) - curr->se.exec_start;
>>>>>>>> We should not trigger cpufreq update in this case for rt/deadline
>>>>>>>> classes, and this patch fix it.
>>>>>>>>
>>>>>>>> Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
>>>>>>>
>>>>>>> The signed-off-by tag should agree with the From: header. One way to
>>>>>>> achieve
>>>>>>> that is to add an extra From: line at the start of the changelog.
>>>>>>>
>>>>>>> That said, this looks like a good catch that should go into 4.6 to me.
>>>>>>>
>>>>>>> Peter, what do you think?
>>>>>>
>>>>>> I'm confused by the Changelog. *what* ?
>>>>>
>>>>> Sometimes .update_curr hook is called w/o tasks actually running, it is
>>>>> captured by:
>>>>>
>>>>> u64 delta_exec = rq_clock_task(rq) - curr->se.exec_start;
>>>>>
>>>>> We should not trigger cpufreq update in this case for rt/deadline
>>>>> classes, and this patch fix it.
>>>>
>>>>
>>>> That's what you wrote in the changelog, no need to repeat that.
>>>>
>>>> I guess Peter is asking for more details, though. I actually would like
>>>> to
>>>> get some more details here too. Like an example of when the situation in
>>>> question actually happens.
>>>
>>> I add a print to print when delta_exec is zero for rt class, something
>>> like below:
>>>
>>> watchdog/5-48 [005] d... 568.449095: update_curr_rt: rt
>>> delta_exec is zero
>>> watchdog/5-48 [005] d... 568.449104: <stack trace>
>>> => pick_next_task_rt
>>> => __schedule
>>> => schedule
>>> => smpboot_thread_fn
>>> => kthread
>>> => ret_from_fork
>>> watchdog/5-48 [005] d... 568.449105: update_curr_rt: rt
>>> delta_exec is zero
>>> watchdog/5-48 [005] d... 568.449111: <stack trace>
>>> => put_prev_task_rt
>>> => pick_next_task_idle
>>> => __schedule
>>> => schedule
>>> => smpboot_thread_fn
>>> => kthread
>>> => ret_from_fork
>>> watchdog/6-56 [006] d... 568.510094: update_curr_rt: rt
>>> delta_exec is zero
>>> watchdog/6-56 [006] d... 568.510103: <stack trace>
>>> => pick_next_task_rt
>>> => __schedule
>>> => schedule
>>> => smpboot_thread_fn
>>> => kthread
>>> => ret_from_fork
>>> watchdog/6-56 [006] d... 568.510105: update_curr_rt: rt
>>> delta_exec is zero
>>> watchdog/6-56 [006] d... 568.510111: <stack trace>
>>> => put_prev_task_rt
>>> => pick_next_task_idle
>>> => __schedule
>>> => schedule
>>> => smpboot_thread_fn
>>> => kthread
>>> => ret_from_fork
>>> [...]
>>
>>
>> And the statement in your changelog follows from this I suppose. How does it
>> follow, exactly?
>
> For example, rt task A will go to sleep, an rt task B is the next
> candidate to run.
>
> __schedule()
> -> deactivate_task(A, DEQUEUE_SLEEP)
> -> dequeue_task_rt()
> -> update_curr_rt()
> -> cpufreq_trigger_update()
> -> delta_exec = rq_clock_task(rq) - curr->se.exec_start;
> [...]
> -> pick_next_task_rt()
> -> update_curr_rt() => rq->curr is still A currently
> -> cpufreq_trigger_update()
> -> delta_exec = rq_clock_task(rq) - curr->se.exec_start;
> => delta == 0, actually A is not running between these two updates
> if (likely(prev != next)) {
> rq->curr = B;
> [...]
> }
Actually I suspect that there is another cpufreq update w/ delta == 0
due to pick_next_task_rt() currently implementation:
if (prev->sched_class == &rt_sched_class)
update_curr(rq); => rq->curr is still A currently
[...]
put_prev_task(rq, prev);
-> update_curr(rq); => rq->curr is still A currently
Regards,
Wanpeng Li
[toc] | [prev] | [next] | [standalone]
| From | Peter Zijlstra <peterz@infradead.org> |
|---|---|
| Date | 2016-04-21 14:40 +0200 |
| Subject | Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running |
| Message-ID | <rqm3M-Ju-23@gated-at.bofh.it> |
| In reply to | #1383819 |
On Thu, Apr 21, 2016 at 09:09:43AM +0800, Wanpeng Li wrote: > >> Sometimes .update_curr hook is called w/o tasks actually running, it is > >> captured by: > >> > >> u64 delta_exec = rq_clock_task(rq) - curr->se.exec_start; > >> > >> We should not trigger cpufreq update in this case for rt/deadline > >> classes, and this patch fix it. > I add a print to print when delta_exec is zero for rt class, something So its zero, so what? > like below: > watchdog/5-48 [005] d... 568.449105: update_curr_rt: rt > delta_exec is zero > watchdog/5-48 [005] d... 568.449111: <stack trace> > => put_prev_task_rt > => pick_next_task_idle So we'll go idle, but as of this point we're still running the rt task. So your Changelog is actively wrong, the tasks _are_ still running, albeit not for very much longer.
[toc] | [prev] | [next] | [standalone]
| From | Wanpeng Li <kernellwp@gmail.com> |
|---|---|
| Date | 2016-04-21 15:40 +0200 |
| Subject | Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running |
| Message-ID | <rqmZR-1qh-25@gated-at.bofh.it> |
| In reply to | #1384157 |
Hi Peterz, 2016-04-21 20:33 GMT+08:00 Peter Zijlstra <peterz@infradead.org>: > On Thu, Apr 21, 2016 at 09:09:43AM +0800, Wanpeng Li wrote: >> >> Sometimes .update_curr hook is called w/o tasks actually running, it is >> >> captured by: >> >> >> >> u64 delta_exec = rq_clock_task(rq) - curr->se.exec_start; >> >> >> >> We should not trigger cpufreq update in this case for rt/deadline >> >> classes, and this patch fix it. > >> I add a print to print when delta_exec is zero for rt class, something > > So its zero, so what? > >> like below: > >> watchdog/5-48 [005] d... 568.449105: update_curr_rt: rt >> delta_exec is zero >> watchdog/5-48 [005] d... 568.449111: <stack trace> >> => put_prev_task_rt >> => pick_next_task_idle > > So we'll go idle, but as of this point we're still running the rt task. > > So your Changelog is actively wrong, the tasks _are_ still running, > albeit not for very much longer. Thanks for your pointing out, I will update the changelog as we discuss in IRC. :-) Regards, Wanpeng Li
[toc] | [prev] | [next] | [standalone]
| From | "Rafael J. Wysocki" <rafael@kernel.org> |
|---|---|
| Date | 2016-04-21 19:10 +0200 |
| Subject | Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running |
| Message-ID | <rqqh5-46m-15@gated-at.bofh.it> |
| In reply to | #1384157 |
On Thu, Apr 21, 2016 at 2:33 PM, Peter Zijlstra <peterz@infradead.org> wrote: > On Thu, Apr 21, 2016 at 09:09:43AM +0800, Wanpeng Li wrote: >> >> Sometimes .update_curr hook is called w/o tasks actually running, it is >> >> captured by: >> >> >> >> u64 delta_exec = rq_clock_task(rq) - curr->se.exec_start; >> >> >> >> We should not trigger cpufreq update in this case for rt/deadline >> >> classes, and this patch fix it. > >> I add a print to print when delta_exec is zero for rt class, something > > So its zero, so what? > >> like below: > >> watchdog/5-48 [005] d... 568.449105: update_curr_rt: rt >> delta_exec is zero >> watchdog/5-48 [005] d... 568.449111: <stack trace> >> => put_prev_task_rt >> => pick_next_task_idle > > So we'll go idle, but as of this point we're still running the rt task. Skipping the update in that case might be the right thing to do, though. It doesn't matter in 4.6-rc, because the current governors don't use util/max anyway, so they just get an extra call they can use to evaluate things. However, it matters for schedutil, because it will (over)react to the special util/max combination then. So this looks like a change to make in 4.7.
[toc] | [prev] | [next] | [standalone]
| From | Peter Zijlstra <peterz@infradead.org> |
|---|---|
| Date | 2016-04-21 19:20 +0200 |
| Subject | Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running |
| Message-ID | <rqqqL-4ao-15@gated-at.bofh.it> |
| In reply to | #1384439 |
On Thu, Apr 21, 2016 at 07:07:51PM +0200, Rafael J. Wysocki wrote: > On Thu, Apr 21, 2016 at 2:33 PM, Peter Zijlstra <peterz@infradead.org> wrote: > > On Thu, Apr 21, 2016 at 09:09:43AM +0800, Wanpeng Li wrote: > >> >> Sometimes .update_curr hook is called w/o tasks actually running, it is > >> >> captured by: > >> >> > >> >> u64 delta_exec = rq_clock_task(rq) - curr->se.exec_start; > >> >> > >> >> We should not trigger cpufreq update in this case for rt/deadline > >> >> classes, and this patch fix it. > > > >> I add a print to print when delta_exec is zero for rt class, something > > > > So its zero, so what? > > > >> like below: > > > >> watchdog/5-48 [005] d... 568.449105: update_curr_rt: rt > >> delta_exec is zero > >> watchdog/5-48 [005] d... 568.449111: <stack trace> > >> => put_prev_task_rt > >> => pick_next_task_idle > > > > So we'll go idle, but as of this point we're still running the rt task. > > Skipping the update in that case might be the right thing to do, though. It is; the patch looks fine, but the Changelog is entirely misleading/wrong. Its not because the task isn't running; it is. Its because we end up calling update_curr() multiple times and bailing when nothing changed is indeed the right thing.
[toc] | [prev] | [next] | [standalone]
| From | Wanpeng Li <kernellwp@gmail.com> |
|---|---|
| Date | 2016-04-21 00:30 +0200 |
| Subject | Re: [PATCH] sched/cpufreq: don't trigger cpufreq update w/o real rt/deadline tasks running |
| Message-ID | <rq8Nc-71F-37@gated-at.bofh.it> |
| In reply to | #1383423 |
2016-04-20 22:01 GMT+08:00 Peter Zijlstra <peterz@infradead.org>:
> On Wed, Apr 20, 2016 at 02:32:35AM +0200, Rafael J. Wysocki wrote:
>> On Monday, April 18, 2016 01:51:24 PM Wanpeng Li wrote:
>> > Sometimes update_curr() is called w/o tasks actually running, it is
>> > captured by:
>> > u64 delta_exec = rq_clock_task(rq) - curr->se.exec_start;
>> > We should not trigger cpufreq update in this case for rt/deadline
>> > classes, and this patch fix it.
>> >
>> > Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
>>
>> The signed-off-by tag should agree with the From: header. One way to achieve
>> that is to add an extra From: line at the start of the changelog.
>>
>> That said, this looks like a good catch that should go into 4.6 to me.
>>
>> Peter, what do you think?
>
> I'm confused by the Changelog. *what* ?
Sometimes .update_curr hook is called w/o tasks actually running, it is
captured by:
u64 delta_exec = rq_clock_task(rq) - curr->se.exec_start;
We should not trigger cpufreq update in this case for rt/deadline
classes, and this patch fix it.
Regards,
Wanpeng Li
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web