From: Jacob Pan <jacob.jun.pan@linux.intel.com>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
John Stultz <john.stultz@linaro.org>,
LKML <linux-kernel@vger.kernel.org>,
Arjan van de Ven <arjan@linux.intel.com>,
Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
Len Brown <len.brown@intel.com>,
Rafael Wysocki <rafael.j.wysocki@intel.com>,
Eduardo Valentin <edubezval@gmail.com>,
Paul Turner <pjt@google.com>,
jacob.jun.pan@linux.intel.com
Subject: Re: [PATCH 2/4] timer: relax tick stop in idle entry
Date: Fri, 13 Nov 2015 14:24:38 -0800 [thread overview]
Message-ID: <20151113142438.3144d47d@icelake> (raw)
In-Reply-To: <alpine.DEB.2.11.1511131516180.3987@nanos>
On Fri, 13 Nov 2015 15:22:16 -0500 (EST)
Thomas Gleixner <tglx@linutronix.de> wrote:
>
>
> On Fri, 13 Nov 2015, Jacob Pan wrote:
>
> > Upon entering idle, we can turn off tick if the next timeout
> > is exactly one tick away. Otherwise, we could enter inner idle loop
> > with tick still enabled, without resched set, the tick will continue
> > during idle therefore less optimal in terms of energy savings.
>
> This does not make any sense at all.
>
> next_tick is the next required tick event. If it's exactly ONE tick
> away why should we go through the hassle of stopping it? Just to
> cancel the timer and then set it to the same value again? Oh well.
>
I have been trying to understand this code, please help. Here is my theory
and the ftrace of an injection period where tick did not stop.
(sorry about the long lines). My comments are after [JP]
cat-1993 [000] 30.093405: sched_cfs_idle_inject: action:0 throttled:1
[JP] injection timer expired, set forced idle flag, call scheduler
cat-1993 [000] 30.093406: hrtimer_expire_exit: hrtimer=0xffff88003de0cc20
cat-1993 [000] 30.093406: hrtimer_start: hrtimer=0xffff88003de0cc20 function=idle_inject_timer_fn/0x0 expires=29993055250 softexpires=29993055250
cat-1993 [000] 30.093407: hrtimer_cancel: hrtimer=0xffff88003dfce400
cat-1993 [000] 30.093407: hrtimer_expire_entry: hrtimer=0xffff88003dfce400 now=29988042960 function=tick_sched_timer/0x0
cat-1993 [000] 30.093407: function: tick_sched_timer
cat-1993 [000] 30.093422: function: tick_sched_do_timer
cat-1993 [000] 30.093422: function: tick_do_update_jiffies64
cat-1993 [000] 30.093433: function: tick_sched_handle.isra.15
cat-1993 [000] 30.093447: sched_stat_runtime: comm=cat pid=1993 runtime=1058498 [ns] vruntime=6695549826 [ns]
cat-1993 [000] 30.093449: hrtimer_expire_exit: hrtimer=0xffff88003dfce400
cat-1993 [000] 30.093449: hrtimer_start: hrtimer=0xffff88003dfce400 function=tick_sched_timer/0x0 expires=29989000000 softexpires=29989000000
cat-1993 [000] 30.093450: function: tick_program_event
cat-1993 [000] 30.093460: sched_waking: comm=rcu_preempt pid=7 prio=120 target_cpu=002
cat-1993 [000] 30.093461: sched_wake_idle_without_ipi: cpu=2
cat-1993 [000] 30.093463: sched_cfs_idle_inject: action:1 throttled:1
[JP] CFS pick_next_task_fair sees forced idle, pick no task to run.
cat-1993 [000] 30.093463: sched_stat_runtime: comm=cat pid=1993 runtime=16122 [ns] vruntime=6695565948 [ns]
cat-1993 [000] 30.093464: sched_switch: cat:1993 [120] R ==> swapper/0:0 [120]
<idle>-0 [000] 30.093465: function: tick_nohz_idle_enter
<idle>-0 [000] 30.093473: bprint: __tick_nohz_idle_enter: JPAN: __tick_nohz_idle_enter 803
<idle>-0 [000] 30.093473: bprint: __tick_nohz_idle_enter: JPAN: can_stop_idle_tick 743
[JP] can_stop_idle_tick() checks ok to stop tick
<idle>-0 [000] 30.093474: bprint: __tick_nohz_idle_enter: JPAN: tick_nohz_stop_sched_tick 609 delta 1000000
[JP] but sees delta is exactly 1 tick away. didn't stop tick.
<idle>-0 [000] 30.093475: function: tick_check_broadcast_expired
<idle>-0 [000] 30.094366: function: tick_irq_enter
<idle>-0 [000] 30.094367: function: tick_check_oneshot_broadcast_this_cpu
<idle>-0 [000] 30.094372: function: tick_nohz_stop_idle
<idle>-0 [000] 30.094387: hrtimer_cancel:
hrtimer=0xffff88003dfce400
[JP] enter repeated tick sched in inner idle loop since !need_resched()
> Thanks,
>
> tglx
>
>
[Jacob Pan]
next prev parent reply other threads:[~2015-11-13 22:25 UTC|newest]
Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-13 19:53 [PATCH 0/4] CFS idle injection Jacob Pan
2015-11-13 19:53 ` [PATCH 1/4] ktime: add a roundup function Jacob Pan
2015-11-13 20:11 ` John Stultz
2015-11-13 22:33 ` Jacob Pan
2015-11-13 20:13 ` Thomas Gleixner
2015-11-13 22:36 ` Jacob Pan
2015-11-13 19:53 ` [PATCH 2/4] timer: relax tick stop in idle entry Jacob Pan
2015-11-13 20:22 ` Thomas Gleixner
2015-11-13 22:24 ` Jacob Pan [this message]
2015-11-16 15:06 ` Thomas Gleixner
2015-11-16 21:51 ` Jacob Pan
2015-11-16 22:01 ` Thomas Gleixner
2015-11-17 0:09 ` Jacob Pan
2015-11-19 17:43 ` Jacob Pan
2015-11-19 19:06 ` Peter Zijlstra
2015-11-19 19:21 ` Jacob Pan
2015-11-19 19:59 ` Peter Zijlstra
2015-11-19 23:41 ` Jacob Pan
2015-11-16 22:31 ` Paul E. McKenney
2015-11-16 23:05 ` Jacob Pan
2015-11-16 23:15 ` Jacob Pan
2015-11-16 23:28 ` Paul E. McKenney
2015-11-16 23:32 ` Arjan van de Ven
2015-11-16 23:40 ` Jacob Pan
2015-11-17 0:00 ` Paul E. McKenney
2015-11-16 22:32 ` Josh Triplett
2015-11-16 23:26 ` Paul E. McKenney
2015-11-17 1:41 ` Josh Triplett
2015-11-17 2:53 ` Paul E. McKenney
2015-11-17 2:57 ` Arjan van de Ven
2015-11-17 5:04 ` Paul E. McKenney
2015-11-17 10:24 ` Peter Zijlstra
2015-11-17 12:57 ` Jacob Pan
2015-11-17 13:49 ` Paul E. McKenney
2015-11-13 19:53 ` [PATCH 3/4] sched: introduce synchronized idle injection Jacob Pan
2015-11-13 20:23 ` kbuild test robot
2015-11-18 8:36 ` Ingo Molnar
2015-11-18 10:35 ` Peter Zijlstra
2015-11-18 12:27 ` Morten Rasmussen
2015-11-18 12:49 ` Peter Zijlstra
2015-11-18 14:04 ` Morten Rasmussen
2015-11-18 14:52 ` Jacob Pan
2015-11-18 15:09 ` Morten Rasmussen
2015-11-18 15:11 ` Jacob Pan
2015-11-18 15:21 ` Thomas Gleixner
2015-11-18 17:03 ` Jacob Pan
2015-11-18 16:04 ` Morten Rasmussen
2015-11-27 9:17 ` Ingo Molnar
2015-11-18 14:10 ` Jacob Pan
2015-11-27 9:17 ` Ingo Molnar
2015-12-02 17:28 ` Jacob Pan
2015-11-18 14:19 ` Arjan van de Ven
2015-11-18 15:44 ` Morten Rasmussen
2015-11-18 15:51 ` Arjan van de Ven
2015-11-19 17:24 ` Morten Rasmussen
2015-11-19 20:09 ` Peter Zijlstra
2015-11-20 9:45 ` Thomas Gleixner
2015-11-20 10:20 ` Peter Zijlstra
2015-11-20 10:58 ` Thomas Gleixner
2015-11-20 12:54 ` Peter Zijlstra
2015-11-20 18:53 ` Thomas Gleixner
2016-01-11 21:50 ` Jacob Pan
2016-01-19 12:06 ` Ingo Molnar
2016-01-19 18:00 ` Jacob Pan
2015-11-24 11:38 ` Jacob Pan
2015-11-23 17:59 ` Jacob Pan
2015-11-23 17:56 ` Javi Merino
2015-11-23 18:07 ` Peter Zijlstra
2015-11-24 9:12 ` Javi Merino
2015-11-24 10:09 ` Peter Zijlstra
2015-11-24 11:10 ` Jacob Pan
2015-11-24 12:00 ` Javi Merino
2015-11-24 18:22 ` Jacob Pan
2015-11-25 9:41 ` Javi Merino
2015-11-13 19:53 ` [PATCH 4/4] sched: add trace event for " Jacob Pan
2015-11-13 20:10 ` kbuild test robot
2015-11-19 14:39 ` Javi Merino
2015-11-19 15:35 ` Jacob Pan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20151113142438.3144d47d@icelake \
--to=jacob.jun.pan@linux.intel.com \
--cc=arjan@linux.intel.com \
--cc=edubezval@gmail.com \
--cc=john.stultz@linaro.org \
--cc=len.brown@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=pjt@google.com \
--cc=rafael.j.wysocki@intel.com \
--cc=srinivas.pandruvada@linux.intel.com \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox