public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Robert Foss <robert.foss@collabora.com>
To: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>,
	adurbin@chromium.org, akpm@linux-foundation.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PACTH v1] kernel/hung_task.c: Dump all UNINTERUPTIBLE tasks
Date: Thu, 4 Aug 2016 11:29:24 -0400	[thread overview]
Message-ID: <0a2b3495-9c80-8200-24cd-0ec73afcded1@collabora.com> (raw)
In-Reply-To: <201608042222.CIG47969.LOQMFHOFFOJSVt@I-love.SAKURA.ne.jp>



On 2016-08-04 09:22 AM, Tetsuo Handa wrote:
> Robert Foss wrote:
>> From: Aaron Durbin <adurbin@chromium.org>
>>
>> When the panic path is taken for khungtaskd dump all
>> tasks with the UNINTERUPTIBLE state. That way, any
>> inter-dependent tasks that caused one another to hang
>> will be saved in the crash output.
>
> How useful do you think this change is? If kdump is configured, you
> can obtain the same information from vmcore using crash utility. If
> kdump is not configured, it might be so in order to reboot as quick
> as possible using panic_timeout < 0.

The general idea is to provide more potentially helpful information 
since we have access to it.
kdump may or may not be configured on a system, but even without kdump 
we have access to this set of information, which me might as well supply 
to provide more information for figuring out the root cause of the hung 
task.

Having the information be available by default simplifies debugging when 
interacting with non-technical endusers.

>
> Also, from my experience, inter-dependent tasks are not always blocked
> in UNINTERUPTIBLE state. If they are AB-BA deadlock, this change will
> help only when they are waiting using unkillable version of wait
> primitives. I think most of simple AB-BA deadlocks are detected by
> lockdep and fixed by now. An example where kswapd is reported as a
> hung task ( http://lkml.kernel.org/r/20160211225929.GU14668@dastard ) is
> AB-BA deadlock which lockdep can't detect and inter-dependent tasks are
> not blocked for long in UNINTERUPTIBLE state.

If a task is blocking in a non-UNINTERUPTIBLE state this patch won't do 
anything, but this logging not catching all potential inter-dependency 
caused hangs, does not mean that the patch won't be helpful is some 
scenarios.

>
> Also, slide 18 of http://I-love.SAKURA.ne.jp/tomoyo/LCJ2014-en.pdf uses
> SystemTap to install a hook for SysRq-t when a hung task is reported.
> You will be able to run SysRq-w using it.
>
> I don't NACK this patch. But I think this patch could be conditional (e.g.
> show_state_filter(0) if sysctl_hung_task_panic == 2 and
> show_state_filter(TASK_UNINTERRUPTIBLE) if sysctl_hung_task_panic == 3)
> for environment where SystemTap can't be used.

That sounds like a good alternative to me, if the below snippet looks 
good to you, I'll submit it as v2.

         if (sysctl_hung_task_panic) {
+               if (sysctl_hung_task_panic == 2)
+                       show_state_filter(0);
+               else if (sysctl_hung_task_panic == 3)
+                       show_state_filter(TASK_UNINTERRUPTIBLE);
+
                 trigger_all_cpu_backtrace();


>
>>
>> Signed-off-by: Aaron Durbin <adurbin@chromium.org>
>> Tested-by: Robert Foss <robert.foss@collabora.com>
>> Signed-off-by: Robert Foss <robert.foss@collabora.com>
>> ---
>>  kernel/hung_task.c | 2 ++
>>  1 file changed, 2 insertions(+)
>>
>> diff --git a/kernel/hung_task.c b/kernel/hung_task.c
>> index d234022..946caf9 100644
>> --- a/kernel/hung_task.c
>> +++ b/kernel/hung_task.c
>> @@ -122,6 +122,8 @@ static void check_hung_task(struct task_struct *t, unsigned long timeout)
>>  	touch_nmi_watchdog();
>>
>>  	if (sysctl_hung_task_panic) {
>> +		/* Dump all tasks. */
>> +		show_state_filter(TASK_UNINTERRUPTIBLE);
>>  		trigger_all_cpu_backtrace();
>>  		panic("hung_task: blocked tasks");
>>  	}
>> --
>> 2.7.4
>>
>>

  reply	other threads:[~2016-08-04 15:31 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-02 15:23 [PACTH v1] kernel/hung_task.c: Dump all UNINTERUPTIBLE tasks robert.foss
2016-08-04 13:22 ` Tetsuo Handa
2016-08-04 15:29   ` Robert Foss [this message]
2016-08-10 22:43 ` Andrew Morton
2016-08-11 16:35   ` Robert Foss
2016-08-29 19:04     ` Robert Foss

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=0a2b3495-9c80-8200-24cd-0ec73afcded1@collabora.com \
    --to=robert.foss@collabora.com \
    --cc=adurbin@chromium.org \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=penguin-kernel@I-love.SAKURA.ne.jp \
    /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