* proc/stat: idle goes backward
[not found] ` <1277145964.2082352.1376490809716.JavaMail.root@redhat.com>
@ 2013-08-16 14:47 ` Oleg Nesterov
2013-08-16 15:01 ` Frederic Weisbecker
0 siblings, 1 reply; 4+ messages in thread
From: Oleg Nesterov @ 2013-08-16 14:47 UTC (permalink / raw)
To: Jaromir Capik, Andrew Morton, Michal Hocko, Martin Schwidefsky,
Ingo Molnar, Frederic Weisbecker, Thomas Gleixner
Cc: Ania Honess, atomlin, asolanas, linux-kernel
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?
Oleg.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: proc/stat: idle goes backward
2013-08-16 14:47 ` proc/stat: idle goes backward Oleg Nesterov
@ 2013-08-16 15:01 ` Frederic Weisbecker
2013-08-16 15:13 ` Oleg Nesterov
0 siblings, 1 reply; 4+ messages in thread
From: Frederic Weisbecker @ 2013-08-16 15:01 UTC (permalink / raw)
To: Oleg Nesterov
Cc: Jaromir Capik, Andrew Morton, Michal Hocko, Martin Schwidefsky,
Ingo Molnar, Thomas Gleixner, Ania Honess, atomlin, asolanas,
linux-kernel
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.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: proc/stat: idle goes backward
2013-08-16 15:01 ` Frederic Weisbecker
@ 2013-08-16 15:13 ` Oleg Nesterov
2013-08-16 15:30 ` Frederic Weisbecker
0 siblings, 1 reply; 4+ messages in thread
From: Oleg Nesterov @ 2013-08-16 15:13 UTC (permalink / raw)
To: Frederic Weisbecker
Cc: Jaromir Capik, Andrew Morton, Michal Hocko, Martin Schwidefsky,
Ingo Molnar, Thomas Gleixner, Ania Honess, atomlin, asolanas,
linux-kernel
On 08/16, Frederic Weisbecker wrote:
>
> On Fri, Aug 16, 2013 at 04:47:04PM +0200, Oleg Nesterov wrote:
> >
> > 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! it is not easy to read the patches on lkml.org and I do
not understand this code enough. But it seems that this should
address my concerns, including the "even ignoring drivers/cpuidle/".
Except, I am not sure that these changes handle the case when
nr_iowait() change in between.
Are you going to resend?
Oleg.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: proc/stat: idle goes backward
2013-08-16 15:13 ` Oleg Nesterov
@ 2013-08-16 15:30 ` Frederic Weisbecker
0 siblings, 0 replies; 4+ messages in thread
From: Frederic Weisbecker @ 2013-08-16 15:30 UTC (permalink / raw)
To: Oleg Nesterov
Cc: Jaromir Capik, Andrew Morton, Michal Hocko, Martin Schwidefsky,
Ingo Molnar, Thomas Gleixner, Ania Honess, atomlin, asolanas,
linux-kernel
On Fri, Aug 16, 2013 at 05:13:39PM +0200, Oleg Nesterov wrote:
> On 08/16, Frederic Weisbecker wrote:
> >
> > On Fri, Aug 16, 2013 at 04:47:04PM +0200, Oleg Nesterov wrote:
> > >
> > > 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! it is not easy to read the patches on lkml.org and I do
> not understand this code enough. But it seems that this should
> address my concerns, including the "even ignoring drivers/cpuidle/".
>
> Except, I am not sure that these changes handle the case when
> nr_iowait() change in between.
Yeah it handles iowait and idle sleeps.
>
> Are you going to resend?
I'm more than happy that you want to review these patches.
I'm resending.
Thanks.
>
> Oleg.
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2013-08-16 15:30 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <v5wUE000000000000000000000000000000000000000000000MRITO500uRRuI-89T-iqXCkOVGWF4w@sfdc.net>
[not found] ` <1904614521.2884383.1376487067689.JavaMail.root@redhat.com>
[not found] ` <1277145964.2082352.1376490809716.JavaMail.root@redhat.com>
2013-08-16 14:47 ` proc/stat: idle goes backward Oleg Nesterov
2013-08-16 15:01 ` Frederic Weisbecker
2013-08-16 15:13 ` Oleg Nesterov
2013-08-16 15:30 ` Frederic Weisbecker
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox