All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] Clean up schedstat and task delay acct config options
@ 2015-06-25 18:23 Naveen N. Rao
  2015-06-25 18:23 ` [PATCH v2 1/2] schedstat: Simplify sched_info accounting dependency Naveen N. Rao
  2015-06-25 18:23 ` [PATCH v2 2/2] schedstat: Expose /proc/pid/schedstat if CONFIG_SCHED_INFO is set Naveen N. Rao
  0 siblings, 2 replies; 14+ messages in thread
From: Naveen N. Rao @ 2015-06-25 18:23 UTC (permalink / raw)
  To: bsingharora, mingo; +Cc: linux-kernel, srikar, ricklind, a.p.zijlstra

Further to the earlier discussion [1], this patch set introduces CONFIG_SCHED_INFO for the common code associated with CONFIG_SCHEDSTATS and CONFIG_TASK_DELAY_ACCT. Further, /proc/<pid>/schedstat is now exposed if either of these is enabled.

[1] http://thread.gmane.org/gmane.linux.kernel/1961707

- Naveen


Naveen N. Rao (2):
  schedstat: Simplify sched_info accounting dependency
  schedstat: Expose /proc/pid/schedstat if CONFIG_SCHED_INFO is set

 fs/proc/base.c        | 11 +++++++----
 include/linux/sched.h |  6 +++---
 init/Kconfig          |  1 +
 kernel/sched/core.c   |  2 +-
 kernel/sched/stats.h  |  4 ++--
 lib/Kconfig.debug     |  5 +++++
 6 files changed, 19 insertions(+), 10 deletions(-)

-- 
2.4.0


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

* [PATCH v2 1/2] schedstat: Simplify sched_info accounting dependency
  2015-06-25 18:23 [PATCH v2 0/2] Clean up schedstat and task delay acct config options Naveen N. Rao
@ 2015-06-25 18:23 ` Naveen N. Rao
  2015-06-30 13:30   ` Srikar Dronamraju
                     ` (2 more replies)
  2015-06-25 18:23 ` [PATCH v2 2/2] schedstat: Expose /proc/pid/schedstat if CONFIG_SCHED_INFO is set Naveen N. Rao
  1 sibling, 3 replies; 14+ messages in thread
From: Naveen N. Rao @ 2015-06-25 18:23 UTC (permalink / raw)
  To: bsingharora, mingo; +Cc: linux-kernel, srikar, ricklind, a.p.zijlstra

Both CONFIG_SCHEDSTATS and CONFIG_TASK_DELAY_ACCT track task sched_info.
Simplify by introducing a common CONFIG_SCHED_INFO selected by both.

Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
---
 include/linux/sched.h | 6 +++---
 init/Kconfig          | 1 +
 kernel/sched/core.c   | 2 +-
 kernel/sched/stats.h  | 4 ++--
 lib/Kconfig.debug     | 5 +++++
 5 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/include/linux/sched.h b/include/linux/sched.h
index 6633e83..9bf4bc0 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -849,7 +849,7 @@ extern struct user_struct root_user;
 struct backing_dev_info;
 struct reclaim_state;
 
-#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
+#ifdef CONFIG_SCHED_INFO
 struct sched_info {
 	/* cumulative counters */
 	unsigned long pcount;	      /* # of times run on this cpu */
@@ -859,7 +859,7 @@ struct sched_info {
 	unsigned long long last_arrival,/* when we last ran on a cpu */
 			   last_queued;	/* when we were last queued to run */
 };
-#endif /* defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) */
+#endif /* CONFIG_SCHED_INFO */
 
 #ifdef CONFIG_TASK_DELAY_ACCT
 struct task_delay_info {
@@ -1408,7 +1408,7 @@ struct task_struct {
 	int rcu_tasks_idle_cpu;
 #endif /* #ifdef CONFIG_TASKS_RCU */
 
-#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
+#ifdef CONFIG_SCHED_INFO
 	struct sched_info sched_info;
 #endif
 
diff --git a/init/Kconfig b/init/Kconfig
index b999fa3..12cb556 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -435,6 +435,7 @@ config TASKSTATS
 config TASK_DELAY_ACCT
 	bool "Enable per-task delay accounting"
 	depends on TASKSTATS
+	select SCHED_INFO
 	help
 	  Collect information on time spent by a task waiting for system
 	  resources like cpu, synchronous block I/O completion and swapping
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index b803e1b..5caa029 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -2164,7 +2164,7 @@ int sched_fork(unsigned long clone_flags, struct task_struct *p)
 	set_task_cpu(p, cpu);
 	raw_spin_unlock_irqrestore(&p->pi_lock, flags);
 
-#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
+#ifdef CONFIG_SCHED_INFO
 	if (likely(sched_info_on()))
 		memset(&p->sched_info, 0, sizeof(p->sched_info));
 #endif
diff --git a/kernel/sched/stats.h b/kernel/sched/stats.h
index 077ebbd..b0fbc76 100644
--- a/kernel/sched/stats.h
+++ b/kernel/sched/stats.h
@@ -47,7 +47,7 @@ rq_sched_info_depart(struct rq *rq, unsigned long long delta)
 # define schedstat_set(var, val)	do { } while (0)
 #endif
 
-#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
+#ifdef CONFIG_SCHED_INFO
 static inline void sched_info_reset_dequeued(struct task_struct *t)
 {
 	t->sched_info.last_queued = 0;
@@ -156,7 +156,7 @@ sched_info_switch(struct rq *rq,
 #define sched_info_depart(rq, t)		do { } while (0)
 #define sched_info_arrive(rq, next)		do { } while (0)
 #define sched_info_switch(rq, t, next)		do { } while (0)
-#endif /* CONFIG_SCHEDSTATS || CONFIG_TASK_DELAY_ACCT */
+#endif /* CONFIG_SCHED_INFO */
 
 /*
  * The following are functions that support scheduler-internal time accounting.
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index b908048..e2894b2 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -841,9 +841,14 @@ config SCHED_DEBUG
 	  that can help debug the scheduler. The runtime overhead of this
 	  option is minimal.
 
+config SCHED_INFO
+	bool
+	default n
+
 config SCHEDSTATS
 	bool "Collect scheduler statistics"
 	depends on DEBUG_KERNEL && PROC_FS
+	select SCHED_INFO
 	help
 	  If you say Y here, additional code will be inserted into the
 	  scheduler and related routines to collect statistics about
-- 
2.4.0


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

* [PATCH v2 2/2] schedstat: Expose /proc/pid/schedstat if CONFIG_SCHED_INFO is set
  2015-06-25 18:23 [PATCH v2 0/2] Clean up schedstat and task delay acct config options Naveen N. Rao
  2015-06-25 18:23 ` [PATCH v2 1/2] schedstat: Simplify sched_info accounting dependency Naveen N. Rao
@ 2015-06-25 18:23 ` Naveen N. Rao
  2015-06-30  5:55   ` Srikar Dronamraju
  1 sibling, 1 reply; 14+ messages in thread
From: Naveen N. Rao @ 2015-06-25 18:23 UTC (permalink / raw)
  To: bsingharora, mingo; +Cc: linux-kernel, srikar, ricklind, a.p.zijlstra

In the unlikely scenario that the kernel is booted with nodelayacct, we
dump all zeroes so as to make it clear that scheduler statistics are not
available.

Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
---
 fs/proc/base.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/fs/proc/base.c b/fs/proc/base.c
index 286a422..a299131 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -304,14 +304,17 @@ static int proc_pid_stack(struct seq_file *m, struct pid_namespace *ns,
 }
 #endif
 
-#ifdef CONFIG_SCHEDSTATS
+#ifdef CONFIG_SCHED_INFO
 /*
  * Provides /proc/PID/schedstat
  */
 static int proc_pid_schedstat(struct seq_file *m, struct pid_namespace *ns,
 			      struct pid *pid, struct task_struct *task)
 {
-	seq_printf(m, "%llu %llu %lu\n",
+	if (unlikely(!sched_info_on()))
+		seq_printf(m, "0 0 0\n");
+	else
+		seq_printf(m, "%llu %lld %ld\n",
 		   (unsigned long long)task->se.sum_exec_runtime,
 		   (unsigned long long)task->sched_info.run_delay,
 		   task->sched_info.pcount);
@@ -2600,7 +2603,7 @@ static const struct pid_entry tgid_base_stuff[] = {
 #ifdef CONFIG_STACKTRACE
 	ONE("stack",      S_IRUSR, proc_pid_stack),
 #endif
-#ifdef CONFIG_SCHEDSTATS
+#ifdef CONFIG_SCHED_INFO
 	ONE("schedstat",  S_IRUGO, proc_pid_schedstat),
 #endif
 #ifdef CONFIG_LATENCYTOP
@@ -2948,7 +2951,7 @@ static const struct pid_entry tid_base_stuff[] = {
 #ifdef CONFIG_STACKTRACE
 	ONE("stack",      S_IRUSR, proc_pid_stack),
 #endif
-#ifdef CONFIG_SCHEDSTATS
+#ifdef CONFIG_SCHED_INFO
 	ONE("schedstat", S_IRUGO, proc_pid_schedstat),
 #endif
 #ifdef CONFIG_LATENCYTOP
-- 
2.4.0


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

* Re: [PATCH v2 2/2] schedstat: Expose /proc/pid/schedstat if CONFIG_SCHED_INFO is set
  2015-06-25 18:23 ` [PATCH v2 2/2] schedstat: Expose /proc/pid/schedstat if CONFIG_SCHED_INFO is set Naveen N. Rao
@ 2015-06-30  5:55   ` Srikar Dronamraju
  2015-06-30  6:16     ` Naveen N. Rao
  2015-06-30  9:06     ` [PATCH v3 " Naveen N. Rao
  0 siblings, 2 replies; 14+ messages in thread
From: Srikar Dronamraju @ 2015-06-30  5:55 UTC (permalink / raw)
  To: Naveen N. Rao; +Cc: bsingharora, mingo, linux-kernel, ricklind, a.p.zijlstra

* Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> [2015-06-25 23:53:38]:

>  /*
>   * Provides /proc/PID/schedstat
>   */
>  static int proc_pid_schedstat(struct seq_file *m, struct pid_namespace *ns,
>  			      struct pid *pid, struct task_struct *task)
>  {
> -	seq_printf(m, "%llu %llu %lu\n",
> +	if (unlikely(!sched_info_on()))
> +		seq_printf(m, "0 0 0\n");
> +	else
> +		seq_printf(m, "%llu %lld %ld\n",

Should the above be seq_printf(m, "%llu %llu %lu\n", ?

>  		   (unsigned long long)task->se.sum_exec_runtime,
>  		   (unsigned long long)task->sched_info.run_delay,
>  		   task->sched_info.pcount);
> -- 
> 2.4.0
> 

-- 
Thanks and Regards
Srikar Dronamraju


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

* Re: [PATCH v2 2/2] schedstat: Expose /proc/pid/schedstat if CONFIG_SCHED_INFO is set
  2015-06-30  5:55   ` Srikar Dronamraju
@ 2015-06-30  6:16     ` Naveen N. Rao
  2015-06-30  9:06     ` [PATCH v3 " Naveen N. Rao
  1 sibling, 0 replies; 14+ messages in thread
From: Naveen N. Rao @ 2015-06-30  6:16 UTC (permalink / raw)
  To: Srikar Dronamraju
  Cc: bsingharora, mingo, linux-kernel, ricklind, a.p.zijlstra

On 2015/06/30 11:25AM, Srikar Dronamraju wrote:
> * Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> [2015-06-25 23:53:38]:
> 
> >  /*
> >   * Provides /proc/PID/schedstat
> >   */
> >  static int proc_pid_schedstat(struct seq_file *m, struct pid_namespace *ns,
> >  			      struct pid *pid, struct task_struct *task)
> >  {
> > -	seq_printf(m, "%llu %llu %lu\n",
> > +	if (unlikely(!sched_info_on()))
> > +		seq_printf(m, "0 0 0\n");
> > +	else
> > +		seq_printf(m, "%llu %lld %ld\n",
> 
> Should the above be seq_printf(m, "%llu %llu %lu\n", ?

Yikes! Nice catch, thanks! This looks to be left over from my tests with 
returning -1. Fixed patch on the way...

Regards,
Naveen


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

* [PATCH v3 2/2] schedstat: Expose /proc/pid/schedstat if CONFIG_SCHED_INFO is set
  2015-06-30  5:55   ` Srikar Dronamraju
  2015-06-30  6:16     ` Naveen N. Rao
@ 2015-06-30  9:06     ` Naveen N. Rao
  2015-06-30 13:29       ` Srikar Dronamraju
                         ` (2 more replies)
  1 sibling, 3 replies; 14+ messages in thread
From: Naveen N. Rao @ 2015-06-30  9:06 UTC (permalink / raw)
  To: bsingharora, mingo; +Cc: linux-kernel, srikar, ricklind, a.p.zijlstra

In the unlikely scenario that the kernel is booted with nodelayacct, we
dump all zeroes so as to make it clear that scheduler statistics are not
available.

Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
---
Changes since v2: Revert to unsigned long in printf


 fs/proc/base.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/fs/proc/base.c b/fs/proc/base.c
index 286a422..ad63fa3 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -304,14 +304,17 @@ static int proc_pid_stack(struct seq_file *m, struct pid_namespace *ns,
 }
 #endif
 
-#ifdef CONFIG_SCHEDSTATS
+#ifdef CONFIG_SCHED_INFO
 /*
  * Provides /proc/PID/schedstat
  */
 static int proc_pid_schedstat(struct seq_file *m, struct pid_namespace *ns,
 			      struct pid *pid, struct task_struct *task)
 {
-	seq_printf(m, "%llu %llu %lu\n",
+	if (unlikely(!sched_info_on()))
+		seq_printf(m, "0 0 0\n");
+	else
+		seq_printf(m, "%llu %llu %lu\n",
 		   (unsigned long long)task->se.sum_exec_runtime,
 		   (unsigned long long)task->sched_info.run_delay,
 		   task->sched_info.pcount);
@@ -2600,7 +2603,7 @@ static const struct pid_entry tgid_base_stuff[] = {
 #ifdef CONFIG_STACKTRACE
 	ONE("stack",      S_IRUSR, proc_pid_stack),
 #endif
-#ifdef CONFIG_SCHEDSTATS
+#ifdef CONFIG_SCHED_INFO
 	ONE("schedstat",  S_IRUGO, proc_pid_schedstat),
 #endif
 #ifdef CONFIG_LATENCYTOP
@@ -2948,7 +2951,7 @@ static const struct pid_entry tid_base_stuff[] = {
 #ifdef CONFIG_STACKTRACE
 	ONE("stack",      S_IRUSR, proc_pid_stack),
 #endif
-#ifdef CONFIG_SCHEDSTATS
+#ifdef CONFIG_SCHED_INFO
 	ONE("schedstat", S_IRUGO, proc_pid_schedstat),
 #endif
 #ifdef CONFIG_LATENCYTOP
-- 
2.4.0


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

* Re: [PATCH v3 2/2] schedstat: Expose /proc/pid/schedstat if CONFIG_SCHED_INFO is set
  2015-06-30  9:06     ` [PATCH v3 " Naveen N. Rao
@ 2015-06-30 13:29       ` Srikar Dronamraju
  2015-06-30 13:32         ` Balbir Singh
  2015-07-03  7:46       ` [tip:sched/urgent] sched/stat: Expose /proc/pid/ schedstat if CONFIG_SCHED_INFO=y tip-bot for Naveen N. Rao
  2015-07-04  8:07       ` tip-bot for Naveen N. Rao
  2 siblings, 1 reply; 14+ messages in thread
From: Srikar Dronamraju @ 2015-06-30 13:29 UTC (permalink / raw)
  To: Naveen N. Rao; +Cc: bsingharora, mingo, linux-kernel, ricklind, a.p.zijlstra

* Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> [2015-06-30 14:36:03]:

> In the unlikely scenario that the kernel is booted with nodelayacct, we
> dump all zeroes so as to make it clear that scheduler statistics are not
> available.
> 
> Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
> ---
> Changes since v2: Revert to unsigned long in printf
> 

Looks good to me.

Acked-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
-- 
Thanks and Regards
Srikar Dronamraju


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

* Re: [PATCH v2 1/2] schedstat: Simplify sched_info accounting dependency
  2015-06-25 18:23 ` [PATCH v2 1/2] schedstat: Simplify sched_info accounting dependency Naveen N. Rao
@ 2015-06-30 13:30   ` Srikar Dronamraju
  2015-06-30 13:33     ` Balbir Singh
  2015-07-03  7:45   ` [tip:sched/urgent] sched/stat: Simplify the " tip-bot for Naveen N. Rao
  2015-07-04  8:07   ` tip-bot for Naveen N. Rao
  2 siblings, 1 reply; 14+ messages in thread
From: Srikar Dronamraju @ 2015-06-30 13:30 UTC (permalink / raw)
  To: Naveen N. Rao; +Cc: bsingharora, mingo, linux-kernel, ricklind, a.p.zijlstra

* Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> [2015-06-25 23:53:37]:

> Both CONFIG_SCHEDSTATS and CONFIG_TASK_DELAY_ACCT track task sched_info.
> Simplify by introducing a common CONFIG_SCHED_INFO selected by both.
> 
> Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
> ---

Looks good to me.

Acked-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
-- 
Thanks and Regards
Srikar Dronamraju


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

* Re: [PATCH v3 2/2] schedstat: Expose /proc/pid/schedstat if CONFIG_SCHED_INFO is set
  2015-06-30 13:29       ` Srikar Dronamraju
@ 2015-06-30 13:32         ` Balbir Singh
  0 siblings, 0 replies; 14+ messages in thread
From: Balbir Singh @ 2015-06-30 13:32 UTC (permalink / raw)
  To: Srikar Dronamraju
  Cc: Naveen N. Rao, mingo, linux-kernel, ricklind, Peter Zijlstra

On Tue, Jun 30, 2015 at 6:59 PM, Srikar Dronamraju
<srikar@linux.vnet.ibm.com> wrote:
> * Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> [2015-06-30 14:36:03]:
>
>> In the unlikely scenario that the kernel is booted with nodelayacct, we
>> dump all zeroes so as to make it clear that scheduler statistics are not
>> available.
>>
>> Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
>> ---
>> Changes since v2: Revert to unsigned long in printf
>>
>
> Looks good to me.
>
> Acked-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>

Acked-by: Balbir Singh <bsingharora@gmail.com>

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

* Re: [PATCH v2 1/2] schedstat: Simplify sched_info accounting dependency
  2015-06-30 13:30   ` Srikar Dronamraju
@ 2015-06-30 13:33     ` Balbir Singh
  0 siblings, 0 replies; 14+ messages in thread
From: Balbir Singh @ 2015-06-30 13:33 UTC (permalink / raw)
  To: Srikar Dronamraju
  Cc: Naveen N. Rao, mingo, linux-kernel, ricklind, Peter Zijlstra

On Tue, Jun 30, 2015 at 7:00 PM, Srikar Dronamraju
<srikar@linux.vnet.ibm.com> wrote:
> * Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> [2015-06-25 23:53:37]:
>
>> Both CONFIG_SCHEDSTATS and CONFIG_TASK_DELAY_ACCT track task sched_info.
>> Simplify by introducing a common CONFIG_SCHED_INFO selected by both.
>>
>> Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
>> ---
>
> Looks good to me.
>
> Acked-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>


Acked-by: Balbir Singh <bsingharora@gmail.com>

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

* [tip:sched/urgent] sched/stat: Simplify the sched_info accounting dependency
  2015-06-25 18:23 ` [PATCH v2 1/2] schedstat: Simplify sched_info accounting dependency Naveen N. Rao
  2015-06-30 13:30   ` Srikar Dronamraju
@ 2015-07-03  7:45   ` tip-bot for Naveen N. Rao
  2015-07-04  8:07   ` tip-bot for Naveen N. Rao
  2 siblings, 0 replies; 14+ messages in thread
From: tip-bot for Naveen N. Rao @ 2015-07-03  7:45 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: naveen.n.rao, bsingharora, mingo, srikar, tglx, hpa,
	linux-kernel, torvalds, peterz

Commit-ID:  640032ed8d55bf6f09b0701e7464aab7e24e0361
Gitweb:     http://git.kernel.org/tip/640032ed8d55bf6f09b0701e7464aab7e24e0361
Author:     Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
AuthorDate: Thu, 25 Jun 2015 23:53:37 +0530
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Wed, 1 Jul 2015 10:02:58 +0200

sched/stat: Simplify the sched_info accounting dependency

Both CONFIG_SCHEDSTATS=y and CONFIG_TASK_DELAY_ACCT=y track task
sched_info, which results in ugly #if clauses.

Simplify the code by introducing a synthethic CONFIG_SCHED_INFO
switch, selected by both.

Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Cc: Balbir Singh <bsingharora@gmail.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: a.p.zijlstra@chello.nl
Cc: ricklind@us.ibm.com
Link: http://lkml.kernel.org/r/8d19eef800811a94b0f91bcbeb27430a884d7433.1435255405.git.naveen.n.rao@linux.vnet.ibm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 include/linux/sched.h | 6 +++---
 init/Kconfig          | 1 +
 kernel/sched/core.c   | 2 +-
 kernel/sched/stats.h  | 4 ++--
 lib/Kconfig.debug     | 5 +++++
 5 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/include/linux/sched.h b/include/linux/sched.h
index 6633e83..9bf4bc0 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -849,7 +849,7 @@ extern struct user_struct root_user;
 struct backing_dev_info;
 struct reclaim_state;
 
-#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
+#ifdef CONFIG_SCHED_INFO
 struct sched_info {
 	/* cumulative counters */
 	unsigned long pcount;	      /* # of times run on this cpu */
@@ -859,7 +859,7 @@ struct sched_info {
 	unsigned long long last_arrival,/* when we last ran on a cpu */
 			   last_queued;	/* when we were last queued to run */
 };
-#endif /* defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) */
+#endif /* CONFIG_SCHED_INFO */
 
 #ifdef CONFIG_TASK_DELAY_ACCT
 struct task_delay_info {
@@ -1408,7 +1408,7 @@ struct task_struct {
 	int rcu_tasks_idle_cpu;
 #endif /* #ifdef CONFIG_TASKS_RCU */
 
-#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
+#ifdef CONFIG_SCHED_INFO
 	struct sched_info sched_info;
 #endif
 
diff --git a/init/Kconfig b/init/Kconfig
index b999fa3..12cb556 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -435,6 +435,7 @@ config TASKSTATS
 config TASK_DELAY_ACCT
 	bool "Enable per-task delay accounting"
 	depends on TASKSTATS
+	select SCHED_INFO
 	help
 	  Collect information on time spent by a task waiting for system
 	  resources like cpu, synchronous block I/O completion and swapping
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 5bcf926..435d8e4 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -1975,7 +1975,7 @@ int sched_fork(unsigned long clone_flags, struct task_struct *p)
 	set_task_cpu(p, cpu);
 	raw_spin_unlock_irqrestore(&p->pi_lock, flags);
 
-#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
+#ifdef CONFIG_SCHED_INFO
 	if (likely(sched_info_on()))
 		memset(&p->sched_info, 0, sizeof(p->sched_info));
 #endif
diff --git a/kernel/sched/stats.h b/kernel/sched/stats.h
index 077ebbd..b0fbc76 100644
--- a/kernel/sched/stats.h
+++ b/kernel/sched/stats.h
@@ -47,7 +47,7 @@ rq_sched_info_depart(struct rq *rq, unsigned long long delta)
 # define schedstat_set(var, val)	do { } while (0)
 #endif
 
-#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
+#ifdef CONFIG_SCHED_INFO
 static inline void sched_info_reset_dequeued(struct task_struct *t)
 {
 	t->sched_info.last_queued = 0;
@@ -156,7 +156,7 @@ sched_info_switch(struct rq *rq,
 #define sched_info_depart(rq, t)		do { } while (0)
 #define sched_info_arrive(rq, next)		do { } while (0)
 #define sched_info_switch(rq, t, next)		do { } while (0)
-#endif /* CONFIG_SCHEDSTATS || CONFIG_TASK_DELAY_ACCT */
+#endif /* CONFIG_SCHED_INFO */
 
 /*
  * The following are functions that support scheduler-internal time accounting.
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index b908048..e2894b2 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -841,9 +841,14 @@ config SCHED_DEBUG
 	  that can help debug the scheduler. The runtime overhead of this
 	  option is minimal.
 
+config SCHED_INFO
+	bool
+	default n
+
 config SCHEDSTATS
 	bool "Collect scheduler statistics"
 	depends on DEBUG_KERNEL && PROC_FS
+	select SCHED_INFO
 	help
 	  If you say Y here, additional code will be inserted into the
 	  scheduler and related routines to collect statistics about

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

* [tip:sched/urgent] sched/stat: Expose /proc/pid/ schedstat if CONFIG_SCHED_INFO=y
  2015-06-30  9:06     ` [PATCH v3 " Naveen N. Rao
  2015-06-30 13:29       ` Srikar Dronamraju
@ 2015-07-03  7:46       ` tip-bot for Naveen N. Rao
  2015-07-04  8:07       ` tip-bot for Naveen N. Rao
  2 siblings, 0 replies; 14+ messages in thread
From: tip-bot for Naveen N. Rao @ 2015-07-03  7:46 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: mingo, torvalds, hpa, bsingharora, naveen.n.rao, tglx, peterz,
	srikar, linux-kernel

Commit-ID:  74ed568374f0e74d80a63ab5496bf32db641ec60
Gitweb:     http://git.kernel.org/tip/74ed568374f0e74d80a63ab5496bf32db641ec60
Author:     Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
AuthorDate: Tue, 30 Jun 2015 14:36:03 +0530
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Wed, 1 Jul 2015 10:02:58 +0200

sched/stat: Expose /proc/pid/schedstat if CONFIG_SCHED_INFO=y

Expand /proc/pid/schedstat output:

 - enable it on CONFIG_TASK_DELAY_ACCT=y && !CONFIG_SCHEDSTATS kernels.

 - dump all zeroes on kernels that are booted with the 'nodelayacct'
   option, which boot option disables delay accounting on
   CONFIG_TASK_DELAY_ACCT=y kernels.

Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Cc: Balbir Singh <bsingharora@gmail.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: a.p.zijlstra@chello.nl
Cc: ricklind@us.ibm.com
Link: http://lkml.kernel.org/r/5ccbef17d4bc841084ea6e6421d4e4a23b7b806f.1435654789.git.naveen.n.rao@linux.vnet.ibm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 fs/proc/base.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/fs/proc/base.c b/fs/proc/base.c
index 286a422..ad63fa3 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -304,14 +304,17 @@ static int proc_pid_stack(struct seq_file *m, struct pid_namespace *ns,
 }
 #endif
 
-#ifdef CONFIG_SCHEDSTATS
+#ifdef CONFIG_SCHED_INFO
 /*
  * Provides /proc/PID/schedstat
  */
 static int proc_pid_schedstat(struct seq_file *m, struct pid_namespace *ns,
 			      struct pid *pid, struct task_struct *task)
 {
-	seq_printf(m, "%llu %llu %lu\n",
+	if (unlikely(!sched_info_on()))
+		seq_printf(m, "0 0 0\n");
+	else
+		seq_printf(m, "%llu %llu %lu\n",
 		   (unsigned long long)task->se.sum_exec_runtime,
 		   (unsigned long long)task->sched_info.run_delay,
 		   task->sched_info.pcount);
@@ -2600,7 +2603,7 @@ static const struct pid_entry tgid_base_stuff[] = {
 #ifdef CONFIG_STACKTRACE
 	ONE("stack",      S_IRUSR, proc_pid_stack),
 #endif
-#ifdef CONFIG_SCHEDSTATS
+#ifdef CONFIG_SCHED_INFO
 	ONE("schedstat",  S_IRUGO, proc_pid_schedstat),
 #endif
 #ifdef CONFIG_LATENCYTOP
@@ -2948,7 +2951,7 @@ static const struct pid_entry tid_base_stuff[] = {
 #ifdef CONFIG_STACKTRACE
 	ONE("stack",      S_IRUSR, proc_pid_stack),
 #endif
-#ifdef CONFIG_SCHEDSTATS
+#ifdef CONFIG_SCHED_INFO
 	ONE("schedstat", S_IRUGO, proc_pid_schedstat),
 #endif
 #ifdef CONFIG_LATENCYTOP

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

* [tip:sched/urgent] sched/stat: Simplify the sched_info accounting dependency
  2015-06-25 18:23 ` [PATCH v2 1/2] schedstat: Simplify sched_info accounting dependency Naveen N. Rao
  2015-06-30 13:30   ` Srikar Dronamraju
  2015-07-03  7:45   ` [tip:sched/urgent] sched/stat: Simplify the " tip-bot for Naveen N. Rao
@ 2015-07-04  8:07   ` tip-bot for Naveen N. Rao
  2 siblings, 0 replies; 14+ messages in thread
From: tip-bot for Naveen N. Rao @ 2015-07-04  8:07 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: mingo, peterz, hpa, naveen.n.rao, tglx, srikar, torvalds,
	linux-kernel, bsingharora

Commit-ID:  f6db8347993256b58bd4746b0c4c5b935c32210d
Gitweb:     http://git.kernel.org/tip/f6db8347993256b58bd4746b0c4c5b935c32210d
Author:     Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
AuthorDate: Thu, 25 Jun 2015 23:53:37 +0530
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Sat, 4 Jul 2015 10:04:30 +0200

sched/stat: Simplify the sched_info accounting dependency

Both CONFIG_SCHEDSTATS=y and CONFIG_TASK_DELAY_ACCT=y track task
sched_info, which results in ugly #if clauses.

Simplify the code by introducing a synthethic CONFIG_SCHED_INFO
switch, selected by both.

Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Cc: Balbir Singh <bsingharora@gmail.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: a.p.zijlstra@chello.nl
Cc: ricklind@us.ibm.com
Link: http://lkml.kernel.org/r/8d19eef800811a94b0f91bcbeb27430a884d7433.1435255405.git.naveen.n.rao@linux.vnet.ibm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 include/linux/sched.h | 6 +++---
 init/Kconfig          | 1 +
 kernel/sched/core.c   | 2 +-
 kernel/sched/stats.h  | 4 ++--
 lib/Kconfig.debug     | 5 +++++
 5 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/include/linux/sched.h b/include/linux/sched.h
index 6633e83..9bf4bc0 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -849,7 +849,7 @@ extern struct user_struct root_user;
 struct backing_dev_info;
 struct reclaim_state;
 
-#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
+#ifdef CONFIG_SCHED_INFO
 struct sched_info {
 	/* cumulative counters */
 	unsigned long pcount;	      /* # of times run on this cpu */
@@ -859,7 +859,7 @@ struct sched_info {
 	unsigned long long last_arrival,/* when we last ran on a cpu */
 			   last_queued;	/* when we were last queued to run */
 };
-#endif /* defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) */
+#endif /* CONFIG_SCHED_INFO */
 
 #ifdef CONFIG_TASK_DELAY_ACCT
 struct task_delay_info {
@@ -1408,7 +1408,7 @@ struct task_struct {
 	int rcu_tasks_idle_cpu;
 #endif /* #ifdef CONFIG_TASKS_RCU */
 
-#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
+#ifdef CONFIG_SCHED_INFO
 	struct sched_info sched_info;
 #endif
 
diff --git a/init/Kconfig b/init/Kconfig
index b999fa3..12cb556 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -435,6 +435,7 @@ config TASKSTATS
 config TASK_DELAY_ACCT
 	bool "Enable per-task delay accounting"
 	depends on TASKSTATS
+	select SCHED_INFO
 	help
 	  Collect information on time spent by a task waiting for system
 	  resources like cpu, synchronous block I/O completion and swapping
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index c86935a..abb8785 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -1975,7 +1975,7 @@ int sched_fork(unsigned long clone_flags, struct task_struct *p)
 	set_task_cpu(p, cpu);
 	raw_spin_unlock_irqrestore(&p->pi_lock, flags);
 
-#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
+#ifdef CONFIG_SCHED_INFO
 	if (likely(sched_info_on()))
 		memset(&p->sched_info, 0, sizeof(p->sched_info));
 #endif
diff --git a/kernel/sched/stats.h b/kernel/sched/stats.h
index 077ebbd..b0fbc76 100644
--- a/kernel/sched/stats.h
+++ b/kernel/sched/stats.h
@@ -47,7 +47,7 @@ rq_sched_info_depart(struct rq *rq, unsigned long long delta)
 # define schedstat_set(var, val)	do { } while (0)
 #endif
 
-#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
+#ifdef CONFIG_SCHED_INFO
 static inline void sched_info_reset_dequeued(struct task_struct *t)
 {
 	t->sched_info.last_queued = 0;
@@ -156,7 +156,7 @@ sched_info_switch(struct rq *rq,
 #define sched_info_depart(rq, t)		do { } while (0)
 #define sched_info_arrive(rq, next)		do { } while (0)
 #define sched_info_switch(rq, t, next)		do { } while (0)
-#endif /* CONFIG_SCHEDSTATS || CONFIG_TASK_DELAY_ACCT */
+#endif /* CONFIG_SCHED_INFO */
 
 /*
  * The following are functions that support scheduler-internal time accounting.
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index b908048..e2894b2 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -841,9 +841,14 @@ config SCHED_DEBUG
 	  that can help debug the scheduler. The runtime overhead of this
 	  option is minimal.
 
+config SCHED_INFO
+	bool
+	default n
+
 config SCHEDSTATS
 	bool "Collect scheduler statistics"
 	depends on DEBUG_KERNEL && PROC_FS
+	select SCHED_INFO
 	help
 	  If you say Y here, additional code will be inserted into the
 	  scheduler and related routines to collect statistics about

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

* [tip:sched/urgent] sched/stat: Expose /proc/pid/ schedstat if CONFIG_SCHED_INFO=y
  2015-06-30  9:06     ` [PATCH v3 " Naveen N. Rao
  2015-06-30 13:29       ` Srikar Dronamraju
  2015-07-03  7:46       ` [tip:sched/urgent] sched/stat: Expose /proc/pid/ schedstat if CONFIG_SCHED_INFO=y tip-bot for Naveen N. Rao
@ 2015-07-04  8:07       ` tip-bot for Naveen N. Rao
  2 siblings, 0 replies; 14+ messages in thread
From: tip-bot for Naveen N. Rao @ 2015-07-04  8:07 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: peterz, torvalds, mingo, linux-kernel, srikar, bsingharora, hpa,
	naveen.n.rao, tglx

Commit-ID:  5968cecedd7a09f23e9fcb5f9fb4e893712f35ba
Gitweb:     http://git.kernel.org/tip/5968cecedd7a09f23e9fcb5f9fb4e893712f35ba
Author:     Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
AuthorDate: Tue, 30 Jun 2015 14:36:03 +0530
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Sat, 4 Jul 2015 10:04:31 +0200

sched/stat: Expose /proc/pid/schedstat if CONFIG_SCHED_INFO=y

Expand /proc/pid/schedstat output:

 - enable it on CONFIG_TASK_DELAY_ACCT=y && !CONFIG_SCHEDSTATS kernels.

 - dump all zeroes on kernels that are booted with the 'nodelayacct'
   option, which boot option disables delay accounting on
   CONFIG_TASK_DELAY_ACCT=y kernels.

Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Cc: Balbir Singh <bsingharora@gmail.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: a.p.zijlstra@chello.nl
Cc: ricklind@us.ibm.com
Link: http://lkml.kernel.org/r/5ccbef17d4bc841084ea6e6421d4e4a23b7b806f.1435654789.git.naveen.n.rao@linux.vnet.ibm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 fs/proc/base.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/fs/proc/base.c b/fs/proc/base.c
index 286a422..ad63fa3 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -304,14 +304,17 @@ static int proc_pid_stack(struct seq_file *m, struct pid_namespace *ns,
 }
 #endif
 
-#ifdef CONFIG_SCHEDSTATS
+#ifdef CONFIG_SCHED_INFO
 /*
  * Provides /proc/PID/schedstat
  */
 static int proc_pid_schedstat(struct seq_file *m, struct pid_namespace *ns,
 			      struct pid *pid, struct task_struct *task)
 {
-	seq_printf(m, "%llu %llu %lu\n",
+	if (unlikely(!sched_info_on()))
+		seq_printf(m, "0 0 0\n");
+	else
+		seq_printf(m, "%llu %llu %lu\n",
 		   (unsigned long long)task->se.sum_exec_runtime,
 		   (unsigned long long)task->sched_info.run_delay,
 		   task->sched_info.pcount);
@@ -2600,7 +2603,7 @@ static const struct pid_entry tgid_base_stuff[] = {
 #ifdef CONFIG_STACKTRACE
 	ONE("stack",      S_IRUSR, proc_pid_stack),
 #endif
-#ifdef CONFIG_SCHEDSTATS
+#ifdef CONFIG_SCHED_INFO
 	ONE("schedstat",  S_IRUGO, proc_pid_schedstat),
 #endif
 #ifdef CONFIG_LATENCYTOP
@@ -2948,7 +2951,7 @@ static const struct pid_entry tid_base_stuff[] = {
 #ifdef CONFIG_STACKTRACE
 	ONE("stack",      S_IRUSR, proc_pid_stack),
 #endif
-#ifdef CONFIG_SCHEDSTATS
+#ifdef CONFIG_SCHED_INFO
 	ONE("schedstat", S_IRUGO, proc_pid_schedstat),
 #endif
 #ifdef CONFIG_LATENCYTOP

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

end of thread, other threads:[~2015-07-05  8:36 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-06-25 18:23 [PATCH v2 0/2] Clean up schedstat and task delay acct config options Naveen N. Rao
2015-06-25 18:23 ` [PATCH v2 1/2] schedstat: Simplify sched_info accounting dependency Naveen N. Rao
2015-06-30 13:30   ` Srikar Dronamraju
2015-06-30 13:33     ` Balbir Singh
2015-07-03  7:45   ` [tip:sched/urgent] sched/stat: Simplify the " tip-bot for Naveen N. Rao
2015-07-04  8:07   ` tip-bot for Naveen N. Rao
2015-06-25 18:23 ` [PATCH v2 2/2] schedstat: Expose /proc/pid/schedstat if CONFIG_SCHED_INFO is set Naveen N. Rao
2015-06-30  5:55   ` Srikar Dronamraju
2015-06-30  6:16     ` Naveen N. Rao
2015-06-30  9:06     ` [PATCH v3 " Naveen N. Rao
2015-06-30 13:29       ` Srikar Dronamraju
2015-06-30 13:32         ` Balbir Singh
2015-07-03  7:46       ` [tip:sched/urgent] sched/stat: Expose /proc/pid/ schedstat if CONFIG_SCHED_INFO=y tip-bot for Naveen N. Rao
2015-07-04  8:07       ` tip-bot for Naveen N. Rao

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.