All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH v5 0/2] hung_task: Display every hung task warning
@ 2014-01-23 10:56 Aaron Tomlin
  2014-01-23 10:56 ` [RFC PATCH v5 1/2] sysctl: Make neg_one a standard constraint Aaron Tomlin
  2014-01-23 10:56 ` [RFC PATCH v5 2/2] hung_task: Display every hung task warning Aaron Tomlin
  0 siblings, 2 replies; 5+ messages in thread
From: Aaron Tomlin @ 2014-01-23 10:56 UTC (permalink / raw)
  To: mingo; +Cc: linux-kernel, rientjes, mingo, oleg, riel, akpm, atomlin

When khungtaskd detects hung tasks, it prints out backtraces from
a number of those tasks. Limiting the number of backtraces being
printed out can result in the user not seeing the information
necessary to debug the issue. The hung_task_warnings sysctl
controls this feature.

This patch makes it possible for hung_task_warnings to accept a
special value to print an unlimited number of backtraces when
khungtaskd detects hung tasks.

The special value is -1. To use this value it is necessary to
change types from ulong to int.

Rebased against v3.13-rc8.

Changes since v4:
 - Improve the documentation on hung_task_warnings

Changes since v3:
 - Simplify the commit message (Rik van Riel and David Rientjes)
 - Document hung_task_* sysctl parameters (David Rientjes)

Aaron Tomlin (2):
  sysctl: Make neg_one a standard constraint
  hung_task: Display every hung task warning

 Documentation/sysctl/kernel.txt | 42 +++++++++++++++++++++++++++++++++++++++++
 include/linux/sched/sysctl.h    |  2 +-
 kernel/hung_task.c              |  6 ++++--
 kernel/sysctl.c                 |  6 ++++--
 4 files changed, 51 insertions(+), 5 deletions(-)

-- 
1.8.4.2


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [RFC PATCH v5 1/2] sysctl: Make neg_one a standard constraint
  2014-01-23 10:56 [RFC PATCH v5 0/2] hung_task: Display every hung task warning Aaron Tomlin
@ 2014-01-23 10:56 ` Aaron Tomlin
  2014-01-25  8:48   ` Ingo Molnar
  2014-01-23 10:56 ` [RFC PATCH v5 2/2] hung_task: Display every hung task warning Aaron Tomlin
  1 sibling, 1 reply; 5+ messages in thread
From: Aaron Tomlin @ 2014-01-23 10:56 UTC (permalink / raw)
  To: mingo; +Cc: linux-kernel, rientjes, mingo, oleg, riel, akpm, atomlin

Add neg_one to the list of standard constraints.

Signed-off-by: Aaron Tomlin <atomlin@redhat.com>
Acked-by: Rik van Riel <riel@redhat.com>
Acked-by: David Rientjes <rientjes@google.com>
---
 kernel/sysctl.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 34a6047..dd531a6 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -122,6 +122,7 @@ extern int blk_iopoll_enabled;
 static int sixty = 60;
 #endif
 
+static int neg_one = -1;
 static int zero;
 static int __maybe_unused one = 1;
 static int __maybe_unused two = 2;
-- 
1.8.4.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [RFC PATCH v5 2/2] hung_task: Display every hung task warning
  2014-01-23 10:56 [RFC PATCH v5 0/2] hung_task: Display every hung task warning Aaron Tomlin
  2014-01-23 10:56 ` [RFC PATCH v5 1/2] sysctl: Make neg_one a standard constraint Aaron Tomlin
@ 2014-01-23 10:56 ` Aaron Tomlin
  1 sibling, 0 replies; 5+ messages in thread
From: Aaron Tomlin @ 2014-01-23 10:56 UTC (permalink / raw)
  To: mingo; +Cc: linux-kernel, rientjes, mingo, oleg, riel, akpm, atomlin

When khungtaskd detects hung tasks, it prints out
backtraces from a number of those tasks.
Limiting the number of backtraces being printed
out can result in the user not seeing the information
necessary to debug the issue. The hung_task_warnings
sysctl controls this feature.

This patch makes it possible for hung_task_warnings
to accept a special value to print an unlimited
number of backtraces when khungtaskd detects hung
tasks.

The special value is -1. To use this value it is
necessary to change types from ulong to int.

Signed-off-by: Aaron Tomlin <atomlin@redhat.com>
Reviewed-by: Rik van Riel <riel@redhat.com>
Acked-by: David Rientjes <rientjes@google.com>
---
 Documentation/sysctl/kernel.txt | 43 +++++++++++++++++++++++++++++++++++++++++
 include/linux/sched/sysctl.h    |  2 +-
 kernel/hung_task.c              |  6 ++++--
 kernel/sysctl.c                 |  5 +++--
 4 files changed, 51 insertions(+), 5 deletions(-)

diff --git a/Documentation/sysctl/kernel.txt b/Documentation/sysctl/kernel.txt
index 26b7ee4..aff1d31 100644
--- a/Documentation/sysctl/kernel.txt
+++ b/Documentation/sysctl/kernel.txt
@@ -33,6 +33,10 @@ show up in /proc/sys/kernel:
 - domainname
 - hostname
 - hotplug
+- hung_task_panic
+- hung_task_check_count
+- hung_task_timeout_secs
+- hung_task_warnings
 - kptr_restrict
 - kstack_depth_to_print       [ X86 only ]
 - l2cr                        [ PPC only ]
@@ -287,6 +291,45 @@ Default value is "/sbin/hotplug".
 
 ==============================================================
 
+hung_task_panic:
+
+Controls the kernel's behavior when a hung task is detected.
+This file shows up if CONFIG_DETECT_HUNG_TASK is enabled.
+
+0: continue operation. This is the default behavior.
+
+1: panic immediately.
+
+==============================================================
+
+hung_task_check_count:
+
+The upper bound on the number of tasks that are checked.
+This file shows up if CONFIG_DETECT_HUNG_TASK is enabled.
+
+==============================================================
+
+hung_task_timeout_secs:
+
+Check interval. When a task in D state did not get scheduled
+for more than this value report a warning.
+This file shows up if CONFIG_DETECT_HUNG_TASK is enabled.
+
+0: means infinite timeout - no checking done.
+
+==============================================================
+
+hung_task_warning:
+
+The maximum number of warnings to report. During a check interval
+if a hung task is detected, this value is decreased by 1.
+When this value reaches 0, no more warnings will be reported.
+This file shows up if CONFIG_DETECT_HUNG_TASK is enabled.
+
+-1: report an infinite number of warnings.
+
+==============================================================
+
 kptr_restrict:
 
 This toggle indicates whether restrictions are placed on
diff --git a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h
index 41467f8..eb3c72d7 100644
--- a/include/linux/sched/sysctl.h
+++ b/include/linux/sched/sysctl.h
@@ -5,7 +5,7 @@
 extern int	     sysctl_hung_task_check_count;
 extern unsigned int  sysctl_hung_task_panic;
 extern unsigned long sysctl_hung_task_timeout_secs;
-extern unsigned long sysctl_hung_task_warnings;
+extern int sysctl_hung_task_warnings;
 extern int proc_dohung_task_timeout_secs(struct ctl_table *table, int write,
 					 void __user *buffer,
 					 size_t *lenp, loff_t *ppos);
diff --git a/kernel/hung_task.c b/kernel/hung_task.c
index 9328b80..0b9c169 100644
--- a/kernel/hung_task.c
+++ b/kernel/hung_task.c
@@ -37,7 +37,7 @@ int __read_mostly sysctl_hung_task_check_count = PID_MAX_LIMIT;
  */
 unsigned long __read_mostly sysctl_hung_task_timeout_secs = CONFIG_DEFAULT_HUNG_TASK_TIMEOUT;
 
-unsigned long __read_mostly sysctl_hung_task_warnings = 10;
+int __read_mostly sysctl_hung_task_warnings = 10;
 
 static int __read_mostly did_panic;
 
@@ -98,7 +98,9 @@ static void check_hung_task(struct task_struct *t, unsigned long timeout)
 
 	if (!sysctl_hung_task_warnings)
 		return;
-	sysctl_hung_task_warnings--;
+
+	if (sysctl_hung_task_warnings > 0)
+		sysctl_hung_task_warnings--;
 
 	/*
 	 * Ok, the task did not get scheduled for more than 2 minutes,
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index dd531a6..b50cd13 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -985,9 +985,10 @@ static struct ctl_table kern_table[] = {
 	{
 		.procname	= "hung_task_warnings",
 		.data		= &sysctl_hung_task_warnings,
-		.maxlen		= sizeof(unsigned long),
+		.maxlen		= sizeof(int),
 		.mode		= 0644,
-		.proc_handler	= proc_doulongvec_minmax,
+		.proc_handler	= proc_dointvec_minmax,
+		.extra1		= &neg_one,
 	},
 #endif
 #ifdef CONFIG_COMPAT
-- 
1.8.4.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [RFC PATCH v5 1/2] sysctl: Make neg_one a standard constraint
  2014-01-23 10:56 ` [RFC PATCH v5 1/2] sysctl: Make neg_one a standard constraint Aaron Tomlin
@ 2014-01-25  8:48   ` Ingo Molnar
  2014-01-25  8:58     ` Ingo Molnar
  0 siblings, 1 reply; 5+ messages in thread
From: Ingo Molnar @ 2014-01-25  8:48 UTC (permalink / raw)
  To: Aaron Tomlin; +Cc: linux-kernel, rientjes, mingo, oleg, riel, akpm


* Aaron Tomlin <atomlin@redhat.com> wrote:

> Add neg_one to the list of standard constraints.
> 
> Signed-off-by: Aaron Tomlin <atomlin@redhat.com>
> Acked-by: Rik van Riel <riel@redhat.com>
> Acked-by: David Rientjes <rientjes@google.com>
> ---
>  kernel/sysctl.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/kernel/sysctl.c b/kernel/sysctl.c
> index 34a6047..dd531a6 100644
> --- a/kernel/sysctl.c
> +++ b/kernel/sysctl.c
> @@ -122,6 +122,7 @@ extern int blk_iopoll_enabled;
>  static int sixty = 60;
>  #endif
>  
> +static int neg_one = -1;
>  static int zero;
>  static int __maybe_unused one = 1;
>  static int __maybe_unused two = 2;

So what happens if CONFIG_DETECT_HUNG_TASK is not defined and neg_one 
is unused? The compiler generates an unused variable warning.

Thanks,

	Ingo



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC PATCH v5 1/2] sysctl: Make neg_one a standard constraint
  2014-01-25  8:48   ` Ingo Molnar
@ 2014-01-25  8:58     ` Ingo Molnar
  0 siblings, 0 replies; 5+ messages in thread
From: Ingo Molnar @ 2014-01-25  8:58 UTC (permalink / raw)
  To: Aaron Tomlin; +Cc: linux-kernel, rientjes, mingo, oleg, riel, akpm


* Ingo Molnar <mingo@kernel.org> wrote:

> 
> * Aaron Tomlin <atomlin@redhat.com> wrote:
> 
> > Add neg_one to the list of standard constraints.
> > 
> > Signed-off-by: Aaron Tomlin <atomlin@redhat.com>
> > Acked-by: Rik van Riel <riel@redhat.com>
> > Acked-by: David Rientjes <rientjes@google.com>
> > ---
> >  kernel/sysctl.c | 1 +
> >  1 file changed, 1 insertion(+)
> > 
> > diff --git a/kernel/sysctl.c b/kernel/sysctl.c
> > index 34a6047..dd531a6 100644
> > --- a/kernel/sysctl.c
> > +++ b/kernel/sysctl.c
> > @@ -122,6 +122,7 @@ extern int blk_iopoll_enabled;
> >  static int sixty = 60;
> >  #endif
> >  
> > +static int neg_one = -1;
> >  static int zero;
> >  static int __maybe_unused one = 1;
> >  static int __maybe_unused two = 2;
> 
> So what happens if CONFIG_DETECT_HUNG_TASK is not defined and 
> neg_one is unused? The compiler generates an unused variable 
> warning.

Note, I fixed this up in your patch, no need to resend.

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2014-01-25  8:58 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-01-23 10:56 [RFC PATCH v5 0/2] hung_task: Display every hung task warning Aaron Tomlin
2014-01-23 10:56 ` [RFC PATCH v5 1/2] sysctl: Make neg_one a standard constraint Aaron Tomlin
2014-01-25  8:48   ` Ingo Molnar
2014-01-25  8:58     ` Ingo Molnar
2014-01-23 10:56 ` [RFC PATCH v5 2/2] hung_task: Display every hung task warning Aaron Tomlin

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.