From: Randy Dunlap <rdunlap@infradead.org>
To: chenguanyou <chenguanyou9338@gmail.com>, linux-kernel@vger.kernel.org
Cc: akpm@linux-foundation.org, keescook@chromium.org,
mhocko@suse.com, lukas.bulwahn@gmail.com, vbabka@suse.cz,
gpiccoli@canonical.com, chenguanyou <chenguanyou@xiaomi.com>
Subject: Re: [PATCH] hungtask: add filter kthread/check comm
Date: Wed, 19 May 2021 10:53:51 -0700 [thread overview]
Message-ID: <26c6c7a7-4c85-7487-6dd6-1e66b41a2a27@infradead.org> (raw)
In-Reply-To: <20210519121325.22083-1-chenguanyou@xiaomi.com>
Hi,
Along with what Micahl has said, please see below.
On 5/19/21 5:13 AM, chenguanyou wrote:
> Some kernel threads are always in D state, when we enable hung_task,
> it will misjudge, we should skip these to narrow the scope.
>
> exp mtk mobilephone:
> root 420 420 2 0 0 kwdt_thread 0 D wdtk-0
> root 421 421 2 0 0 kwdt_thread 0 D wdtk-1
> root 422 422 2 0 0 kwdt_thread 0 D wdtk-2
> root 423 423 2 0 0 kwdt_thread 0 D wdtk-3
> root 424 424 2 0 0 kwdt_thread 0 D wdtk-4
> root 425 425 2 0 0 kwdt_thread 0 D wdtk-5
> root 426 426 2 0 0 kwdt_thread 0 D wdtk-6
> root 427 427 2 0 0 kwdt_thread 0 D wdtk-7
> root 435 435 2 0 0 mtk_lpm_monitor_thread 0 D LPM-0
> root 436 436 2 0 0 mtk_lpm_monitor_thread 0 D LPM-1
> root 437 437 2 0 0 mtk_lpm_monitor_thread 0 D LPM-2
> root 438 438 2 0 0 mtk_lpm_monitor_thread 0 D LPM-3
> root 439 439 2 0 0 mtk_lpm_monitor_thread 0 D LPM-4
> root 440 440 2 0 0 mtk_lpm_monitor_thread 0 D LPM-5
> root 441 441 2 0 0 mtk_lpm_monitor_thread 0 D LPM-6
> root 442 442 2 0 0 mtk_lpm_monitor_thread 0 D LPM-7
>
> Signed-off-by: chenguanyou <chenguanyou@xiaomi.com>
> ---
> include/linux/sched/sysctl.h | 4 ++++
> kernel/hung_task.c | 17 +++++++++++++++++
> kernel/sysctl.c | 15 +++++++++++++++
> lib/Kconfig.debug | 23 +++++++++++++++++++++++
> 4 files changed, 59 insertions(+)
>
> diff --git a/kernel/hung_task.c b/kernel/hung_task.c
> index 396ebaebea3f..e018563d4882 100644
> --- a/kernel/hung_task.c
> +++ b/kernel/hung_task.c
> @@ -23,6 +23,7 @@
> #include <linux/sched/sysctl.h>
>
> #include <trace/events/sched.h>
> +#include <linux/string.h>
>
> /*
> * The number of tasks checked:
> @@ -48,6 +49,16 @@ unsigned long __read_mostly sysctl_hung_task_timeout_secs = CONFIG_DEFAULT_HUNG_
> */
> unsigned long __read_mostly sysctl_hung_task_check_interval_secs;
>
> +/*
> + * Non zero means no checking kthread
Non-zero
> + */
> +unsigned int __read_mostly sysctl_hung_task_filter_kthread = CONFIG_DEFAULT_HUNG_TASK_FILTER_KTHREAD;
> +
> +/*
> + * Only one
> + */
> +char __read_mostly sysctl_hung_task_check_comm[TASK_COMM_LEN] = CONFIG_DEFAULT_HUNG_TASK_CHECK_COMM;
> +
> int __read_mostly sysctl_hung_task_warnings = 10;
>
> static int __read_mostly did_panic;
> @@ -88,6 +99,12 @@ static void check_hung_task(struct task_struct *t, unsigned long timeout)
> {
> unsigned long switch_count = t->nvcsw + t->nivcsw;
>
> + if (unlikely(strlen(sysctl_hung_task_check_comm) && !strstr(t->comm, sysctl_hung_task_check_comm)))
> + return;
> +
> + if (unlikely(sysctl_hung_task_filter_kthread && t->flags & PF_KTHREAD))
> + return;
> +
> /*
> * Ensure the task is not frozen.
> * Also, skip vfork and any other user process that freezer should skip.
> diff --git a/kernel/sysctl.c b/kernel/sysctl.c
> index 62fbd09b5dc1..157c47a8430a 100644
> --- a/kernel/sysctl.c
> +++ b/kernel/sysctl.c
> @@ -2519,6 +2519,21 @@ static struct ctl_table kern_table[] = {
> .proc_handler = proc_dointvec_minmax,
> .extra1 = &neg_one,
> },
> + {
> + .procname = "hung_task_filter_kthread",
> + .data = &sysctl_hung_task_filter_kthread,
> + .maxlen = sizeof(int),
> + .mode = 0644,
> + .extra1 = SYSCTL_ZERO,
> + .extra2 = SYSCTL_ONE,
> + },
> + {
> + .procname = "hung_task_check_comm",
> + .data = &sysctl_hung_task_check_comm,
> + .maxlen = TASK_COMM_LEN,
> + .mode = 0644,
> + .proc_handler = proc_dostring,
> + },
> #endif
These new sysctls should be documented in Documentation/admin-guide/sysctl/kernel.rst.
> #ifdef CONFIG_RT_MUTEXES
> {
> diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
> index 2c7f46b366f1..59cfa9e230ee 100644
> --- a/lib/Kconfig.debug
> +++ b/lib/Kconfig.debug
> @@ -1101,6 +1101,29 @@ config DEFAULT_HUNG_TASK_TIMEOUT
> A timeout of 0 disables the check. The default is two minutes.
> Keeping the default should be fine in most cases.
>
> +config DEFAULT_HUNG_TASK_FILTER_KTHREAD
> + bool "Default filter kthread for hung task"
> + depends on DETECT_HUNG_TASK
> + default 0
> + help
> + This option controls filter kthread used to determine when
uses
> + a kernel task has become "state=TASK_UNINTERRUPTIBLE" and should be skip.
skipped.
> +
> + It can be adjusted at runtime via the kernel.hung_task_filter_kthread
> + sysctl or by writing a value to
> + /proc/sys/kernel/hung_task_filter_kthread.
> +
> + A filter of 1 disables the check
check.
> +
> +config DEFAULT_HUNG_TASK_CHECK_COMM
> + string "Default check only one comm"
> + depends on DETECT_HUNG_TASK
> + default ""
> + help
> + It can be adjusted at runtime via the kernel.hung_task_check_comm
> + sysctl or by writing a value to
> + /proc/sys/kernel/hung_task_check_comm.
That help text doesn't tell how the Kconfig symbol is used.
> +
> config BOOTPARAM_HUNG_TASK_PANIC
> bool "Panic (Reboot) On Hung Tasks"
> depends on DETECT_HUNG_TASK
>
thanks.
--
~Randy
next prev parent reply other threads:[~2021-05-19 17:54 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-19 12:13 [PATCH] hungtask: add filter kthread/check comm chenguanyou
2021-05-19 13:06 ` Michal Hocko
2021-05-19 17:53 ` Randy Dunlap [this message]
[not found] ` <CAHS3RMVYbHTzD6JnOmE331qSbcnvuYnBe0jraNuuLc0Z2NnStg@mail.gmail.com>
2021-05-21 8:31 ` Michal Hocko
-- strict thread matches above, loose matches on Subject: below --
2021-05-21 13:25 chenguanyou
2021-05-22 21:51 ` Andrew Morton
[not found] ` <CAHS3RMWjuB98TzvcYyQ0qtNYOxDeM7W1YmyqDYs=H-cn-VsVdw@mail.gmail.com>
2021-05-25 7:26 ` Michal Hocko
2021-05-21 13:25 chenguanyou
2021-05-21 16:37 ` Randy Dunlap
2021-05-18 11:16 chenguanyou
2021-05-19 11:28 ` Vlastimil Babka
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=26c6c7a7-4c85-7487-6dd6-1e66b41a2a27@infradead.org \
--to=rdunlap@infradead.org \
--cc=akpm@linux-foundation.org \
--cc=chenguanyou9338@gmail.com \
--cc=chenguanyou@xiaomi.com \
--cc=gpiccoli@canonical.com \
--cc=keescook@chromium.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lukas.bulwahn@gmail.com \
--cc=mhocko@suse.com \
--cc=vbabka@suse.cz \
/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.