From: Thomas Gleixner <tglx@linutronix.de>
To: Yunhong Jiang <yunhong.jiang@linux.intel.com>
Cc: arjan@linux.intel.com, linux-kernel@vger.kernel.org
Subject: Re: [RFC] nohz: no update idle entry time on get_cpu_idle/iowait_time_us()
Date: Sun, 11 Oct 2015 20:38:17 +0200 (CEST) [thread overview]
Message-ID: <alpine.DEB.2.11.1510112020520.6097@nanos> (raw)
In-Reply-To: <1443488484-24305-1-git-send-email-yunhong.jiang@linux.intel.com>
On Mon, 28 Sep 2015, Yunhong Jiang wrote:
> Currently the get_cpu_idle/iowait_time_us() updates the idle_entrytime.
> When it's invoked from another CPU and the target CPU has been on idle
> already, it will update the idle_entrytime to now, which is incorrect.
>
> However, the get_cpu_idle/iowait_time_us() is not guranteed to be called
> on the target CPU. For example, the get_cpu_idle_time_us() seems is
> invoked remotely on drivers/cpufreq/cpufreq_governor.c through
> get_cpu_idle_time().
>
> There is a check that the update happens only if a valid last_update_time
> parameter passed. IMHO, this is more a hack because there is no guarantee
> that it's invoked on the target CPU when last_update_time is valid.
Looking at the call sites, this last_update_time parameter is
silly. Why is the calling code not taking the timestamp? There is
hardly a requirement that this needs to be the same timestamp as the
one which is used to calculate idle time. That cpufreq calculations
are speculative anyway.
So we better get rid of that parameter completely.
> In fact, we don't need update the idle stats from
> get_cpu_idle/iowait_time_us(). Now the policy is, we record the
> entrytime when tick_nohz_start_idle() and update the stats
> when tick_nohz_stop_idle(). We calculate the stats on other situations.
>
> Please notice:
> 1) There is a bug currently that the tick_nohz_stop_idle() calls the
> update_ts_time_stats() and update the idle_entrytime, which is sure
> to be wrong. Removing the idle_entrytime update resolves the bug also.
Care to explain the actual bug and what wreckage it causes? If it's a
real bug then removing "ts->idle_entrytime = now" needs to be a
separate patch. AFAICT, it's a cosmetic issue.
> 2) There is a small widows in tick_nohz_stop_idle() between
> update_ts_time_stats() and clear ts->idle_active, that
> get_cpu_idle/iowait_time_us(), when invoked remotely, may double
> count last idle period. This window exists w/o this change and this
> change does not fix it.
Calling any of those functions from a remote cpu is broken to begin
with, especially on 32bit machines. And that does not change with your
patch at all.
What we really need here is protecting the idle stats fields with a
raw_spinlock.
Thanks,
tglx
next prev parent reply other threads:[~2015-10-11 18:39 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-29 1:01 Yunhong Jiang
2015-10-11 18:38 ` Thomas Gleixner [this message]
2015-10-20 23:17 ` Yunhong Jiang
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=alpine.DEB.2.11.1510112020520.6097@nanos \
--to=tglx@linutronix.de \
--cc=arjan@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=yunhong.jiang@linux.intel.com \
/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
all inboxes | Powered by JetHome®