[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20130816150122.GB24210@somewhere>
Date: Fri, 16 Aug 2013 17:01:24 +0200
From: Frederic Weisbecker <fweisbec@...il.com>
To: Oleg Nesterov <oleg@...hat.com>
Cc: Jaromir Capik <jcapik@...hat.com>,
Andrew Morton <akpm@...ux-foundation.org>,
Michal Hocko <mhocko@...e.cz>,
Martin Schwidefsky <schwidefsky@...ibm.com>,
Ingo Molnar <mingo@...nel.org>,
Thomas Gleixner <tglx@...utronix.de>,
Ania Honess <ahoness@...hat.com>, atomlin@...hat.com,
asolanas@...hat.com, linux-kernel@...r.kernel.org
Subject: Re: proc/stat: idle goes backward
On Fri, Aug 16, 2013 at 04:47:04PM +0200, Oleg Nesterov wrote:
> Hello.
>
> Out customer reports that "idle" field is not monotonic. So far this
> is all I know. I do not know how to reproduce, etc.
>
> But when I look at this code, this looks really possible even
> ignoring drivers/cpuidle/ which plays with update_ts_time_stats().
>
> So, get_cpu_idle_time_us(last_update_time => NULL) does:
>
> if (ts->idle_active && !nr_iowait_cpu(cpu)) {
> ktime_t delta = ktime_sub(now, ts->idle_entrytime);
>
> idle = ktime_add(ts->idle_sleeptime, delta);
> } else {
> idle = ts->idle_sleeptime;
> }
>
>
> Suppose that ts->idle_active == T. By the time we calculate
>
> idle = ktime_add(ts->idle_sleeptime, delta);
>
> this cpu can be already non-idle and ->idle_sleeptime can be already
> updated by tick_nohz_stop_idle(), we return the wrong value.
>
> If user-space reads /proc/stat again after that, "idle" can obviously
> go back.
>
> get_cpu_iowait_time_us() has the same problem.
>
> Plus nr_iowait_cpu() can change in between even if cpu stays idle,
> io_schedule() can return on another CPU.
>
> Questions:
>
> - Any other reason why it can be non-monotonic?
>
> - Should we fix this or should we document that userspace
> should handle this itself?
>
> IOW, is this is bug or not?
I don't know if we want to fix it (I personally think we should because it is not the
first time I hear complains about this) but if we do, here is a possible fix:
https://lkml.org/lkml/2013/8/8/638
Thanks.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists