From: Preeti U Murthy <preeti@linux.vnet.ibm.com>
To: lkp@lists.01.org
Subject: Re: [nohz] 2a16fc93d2c: kernel lockup on idle injection
Date: Mon, 15 Dec 2014 12:55:53 +0530 [thread overview]
Message-ID: <548E8D01.9050707@linux.vnet.ibm.com> (raw)
In-Reply-To: <CAKohpokEw6f5+u8J_AoV76sOAQO=J8dGhX1eZb=QZOuE+Jhq_A@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 3227 bytes --]
Hi Viresh,
Let me explain why I think this is happening.
1. tick_nohz_irq_enter/exit() both get called *only if the cpu is idle*
and receives an interrupt.
2. Commit 2a16fc93d2c9568e1, cancels programming of tick_sched timer
in its handler, assuming that tick_nohz_irq_exit() will take care of
programming the clock event device appropriately, and hence it would
requeue or cancel the tick_sched timer.
3. But the intel_powerclamp driver injects an idle period only.
*The CPU however is not idle*. It has work on its runqueue and the
rq->curr != idle. This means that *tick_nohz_irq_enter()/exit() will not
get called on any interrupt*.
4. As a consequence, when we get a hrtimer interrupt during the period
that the powerclamp driver is mimicking idle, the exit path of the
interrupt never calls tick_nohz_irq_exit(). Hence the tick_sched timer
that would have got removed due to the above commit will not get
enqueued back on for any pending timers that there might be. Besides
this, *jiffies never gets updated*.
5. If you look at the code of the powerclamp driver, clamp_thread()
loops on jiffies getting updated. It continues to do so with preemption
disabled and no tick_sched timer to force a scheduler tick to update the
jiffies. Since this happens on cpus in a package, all of them get soft
lockedup.
Hope the above explanation makes sense.
Regards
Preeti U Murthy
On 12/12/2014 05:27 PM, Viresh Kumar wrote:
> Cc'ing Thomas as well..
>
> On 12 December 2014 at 01:12, Fengguang Wu <fengguang.wu@intel.com> wrote:
>> Hi Viresh,
>>
>> We noticed the below lockup regression on commit 2a16fc93d2c ("nohz:
>> Avoid tick's double reprogramming in highres mode").
>>
>> testbox/testcase/testparams: ivb42/idle-inject/60s-200%-10cp
>>
>> b5e995e671d8e4d7 2a16fc93d2c9568e16d45db77c
>> ---------------- --------------------------
>> fail:runs %reproduction fail:runs
>> | | |
>> :5 100% 1:1 last_state.is_incomplete_run
>> :5 100% 1:1 last_state.running
>>
>> testbox/testcase/testparams: lkp-sb03/idle-inject/60s-200%-10cp
>>
>> b5e995e671d8e4d7 2a16fc93d2c9568e16d45db77c
>> ---------------- --------------------------
>> :7 100% 1:1 last_state.is_incomplete_run
>> :7 100% 1:1 last_state.running
>>
>> Where test box ivb42 is Ivy Bridge-EP and lkp-sb03 is Sandy Bridge-EP.
>>
>> To reproduce:
>>
>> apt-get install ruby ruby-oj
>> git clone git://git.kernel.org/pub/scm/linux/kernel/git/wfg/lkp-tests.git
>> cd lkp-tests
>> bin/setup-local job.yaml # the job file attached in this email
>> bin/run-local job.yaml
>>
>> Basically what the test case does is to
>>
>> - find a Sandy Bridge or newer machine
>> - look for a cooling device with type “intel_powerclamp”
>> - set cur_state to 10
>> - run any CPU extensive workload
>>
>> Then expect soft lockup. It's very reproducible.
>
> Thanks Fengguang. Yes I am able to reproduce it, but don't know yet what
> went wrong..
>
> --
> viresh
>
WARNING: multiple messages have this Message-ID (diff)
From: Preeti U Murthy <preeti@linux.vnet.ibm.com>
To: Viresh Kumar <viresh.kumar@linaro.org>,
Fengguang Wu <fengguang.wu@intel.com>,
Thomas Gleixner <tglx@linutronix.de>
Cc: Frederic Weisbecker <frederic@kernel.org>,
"Pan, Jacob jun" <jacob.jun.pan@intel.com>,
LKML <linux-kernel@vger.kernel.org>, LKP <lkp@01.org>
Subject: Re: [nohz] 2a16fc93d2c: kernel lockup on idle injection
Date: Mon, 15 Dec 2014 12:55:53 +0530 [thread overview]
Message-ID: <548E8D01.9050707@linux.vnet.ibm.com> (raw)
In-Reply-To: <CAKohpokEw6f5+u8J_AoV76sOAQO=J8dGhX1eZb=QZOuE+Jhq_A@mail.gmail.com>
Hi Viresh,
Let me explain why I think this is happening.
1. tick_nohz_irq_enter/exit() both get called *only if the cpu is idle*
and receives an interrupt.
2. Commit 2a16fc93d2c9568e1, cancels programming of tick_sched timer
in its handler, assuming that tick_nohz_irq_exit() will take care of
programming the clock event device appropriately, and hence it would
requeue or cancel the tick_sched timer.
3. But the intel_powerclamp driver injects an idle period only.
*The CPU however is not idle*. It has work on its runqueue and the
rq->curr != idle. This means that *tick_nohz_irq_enter()/exit() will not
get called on any interrupt*.
4. As a consequence, when we get a hrtimer interrupt during the period
that the powerclamp driver is mimicking idle, the exit path of the
interrupt never calls tick_nohz_irq_exit(). Hence the tick_sched timer
that would have got removed due to the above commit will not get
enqueued back on for any pending timers that there might be. Besides
this, *jiffies never gets updated*.
5. If you look at the code of the powerclamp driver, clamp_thread()
loops on jiffies getting updated. It continues to do so with preemption
disabled and no tick_sched timer to force a scheduler tick to update the
jiffies. Since this happens on cpus in a package, all of them get soft
lockedup.
Hope the above explanation makes sense.
Regards
Preeti U Murthy
On 12/12/2014 05:27 PM, Viresh Kumar wrote:
> Cc'ing Thomas as well..
>
> On 12 December 2014 at 01:12, Fengguang Wu <fengguang.wu@intel.com> wrote:
>> Hi Viresh,
>>
>> We noticed the below lockup regression on commit 2a16fc93d2c ("nohz:
>> Avoid tick's double reprogramming in highres mode").
>>
>> testbox/testcase/testparams: ivb42/idle-inject/60s-200%-10cp
>>
>> b5e995e671d8e4d7 2a16fc93d2c9568e16d45db77c
>> ---------------- --------------------------
>> fail:runs %reproduction fail:runs
>> | | |
>> :5 100% 1:1 last_state.is_incomplete_run
>> :5 100% 1:1 last_state.running
>>
>> testbox/testcase/testparams: lkp-sb03/idle-inject/60s-200%-10cp
>>
>> b5e995e671d8e4d7 2a16fc93d2c9568e16d45db77c
>> ---------------- --------------------------
>> :7 100% 1:1 last_state.is_incomplete_run
>> :7 100% 1:1 last_state.running
>>
>> Where test box ivb42 is Ivy Bridge-EP and lkp-sb03 is Sandy Bridge-EP.
>>
>> To reproduce:
>>
>> apt-get install ruby ruby-oj
>> git clone git://git.kernel.org/pub/scm/linux/kernel/git/wfg/lkp-tests.git
>> cd lkp-tests
>> bin/setup-local job.yaml # the job file attached in this email
>> bin/run-local job.yaml
>>
>> Basically what the test case does is to
>>
>> - find a Sandy Bridge or newer machine
>> - look for a cooling device with type “intel_powerclamp”
>> - set cur_state to 10
>> - run any CPU extensive workload
>>
>> Then expect soft lockup. It's very reproducible.
>
> Thanks Fengguang. Yes I am able to reproduce it, but don't know yet what
> went wrong..
>
> --
> viresh
>
next prev parent reply other threads:[~2014-12-15 7:25 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-11 19:42 [nohz] 2a16fc93d2c: kernel lockup on idle injection Fengguang Wu
2014-12-11 19:42 ` Fengguang Wu
2014-12-12 11:57 ` Viresh Kumar
2014-12-12 11:57 ` Viresh Kumar
2014-12-15 7:25 ` Preeti U Murthy [this message]
2014-12-15 7:25 ` Preeti U Murthy
2014-12-15 9:32 ` Viresh Kumar
2014-12-15 9:32 ` Viresh Kumar
2014-12-15 9:43 ` Preeti U Murthy
2014-12-15 9:43 ` Preeti U Murthy
2014-12-15 21:24 ` Pan, Jacob jun
2014-12-15 21:24 ` Pan, Jacob jun
2014-12-16 4:18 ` Viresh Kumar
2014-12-16 4:18 ` Viresh Kumar
2014-12-16 17:15 ` Jacob Pan
2014-12-16 17:15 ` Jacob Pan
2014-12-16 21:15 ` Thomas Gleixner
2014-12-16 21:15 ` Thomas Gleixner
2014-12-15 23:44 ` Frederic Weisbecker
2014-12-15 23:44 ` Frederic Weisbecker
2014-12-16 4:53 ` Viresh Kumar
2014-12-16 4:53 ` Viresh Kumar
2014-12-16 9:36 ` Preeti U Murthy
2014-12-16 9:36 ` Preeti U Murthy
2014-12-16 12:49 ` Thomas Gleixner
2014-12-16 12:49 ` Thomas Gleixner
2014-12-16 14:20 ` Frederic Weisbecker
2014-12-16 14:20 ` Frederic Weisbecker
2014-12-16 14:50 ` Thomas Gleixner
2014-12-16 14:50 ` Thomas Gleixner
2014-12-16 21:21 ` Thomas Gleixner
2014-12-16 21:21 ` Thomas Gleixner
2014-12-16 22:49 ` Peter Zijlstra
2014-12-16 22:49 ` Peter Zijlstra
2014-12-16 22:54 ` Thomas Gleixner
2014-12-16 22:54 ` Thomas Gleixner
2014-12-17 0:26 ` Frederic Weisbecker
2014-12-17 0:26 ` Frederic Weisbecker
2014-12-17 0:12 ` Frederic Weisbecker
2014-12-17 0:12 ` Frederic Weisbecker
2014-12-17 9:11 ` Thomas Gleixner
2014-12-17 9:11 ` Thomas Gleixner
2014-12-17 12:47 ` Frederic Weisbecker
2014-12-17 12:47 ` Frederic Weisbecker
2014-12-16 14:32 ` Thomas Gleixner
2014-12-16 14:32 ` Thomas Gleixner
2014-12-16 14:56 ` Peter Zijlstra
2014-12-16 14:56 ` Peter Zijlstra
2014-12-16 16:54 ` Thomas Gleixner
2014-12-16 16:54 ` Thomas Gleixner
2014-12-17 12:31 ` Preeti Murthy
2014-12-17 12:31 ` Preeti Murthy
2014-12-17 15:42 ` Thomas Gleixner
2014-12-17 15:42 ` Thomas Gleixner
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=548E8D01.9050707@linux.vnet.ibm.com \
--to=preeti@linux.vnet.ibm.com \
--cc=lkp@lists.01.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.