* [PATCH -tip 0/2] sched: Get group names back in /proc/sched_debug @ 2011-01-10 5:14 Bharata B Rao 2011-01-10 5:15 ` [PATCH -tip 1/2] sched: Reinstate group names " Bharata B Rao 2011-01-10 5:16 ` [PATCH -tip 2/2] sched: Display autogroup " Bharata B Rao 0 siblings, 2 replies; 7+ messages in thread From: Bharata B Rao @ 2011-01-10 5:14 UTC (permalink / raw) To: linux-kernel; +Cc: Mike Galbraith, Peter Zijlstra, Ingo Molnar Hi, With autogroup patches, the group names got dropped off from /proc/sched_debug. Without group name info, it is difficult to figure out which cfs_rq or task belongs to which group in /proc/sched_debug output. This patchset brings back the group name and also adds autogroup names to /proc/sched_debug output. Before this patchset ==================== # grep cfs_rq /proc/sched_debug cfs_rq[0]: cfs_rq[0]: cfs_rq[1]: cfs_rq[1]: cfs_rq[2]: cfs_rq[2]: cfs_rq[3]: cfs_rq[3]: cfs_rq[4]: cfs_rq[5]: cfs_rq[6]: cfs_rq[7]: cfs_rq[8]: cfs_rq[9]: cfs_rq[10]: cfs_rq[11]: cfs_rq[12]: cfs_rq[13]: cfs_rq[13]: cfs_rq[14]: cfs_rq[14]: cfs_rq[15]: cfs_rq[15]: # grep while1 /proc/sched_debug R while1 2203 48420.920338 5007 120 48420.920338 48951.419166 7.485277 R while1 2226 23823.872648 2865 120 23823.872648 28347.561387 3.988024 R while1 2204 43006.490234 4851 120 43006.490234 48459.814725 0.000000 With this patchset ================== # grep cfs_rq /proc/sched_debug cfs_rq[0]:/autogroup-52 cfs_rq[0]:/autogroup-0 cfs_rq[1]:/autogroup-54 cfs_rq[1]:/autogroup-0 cfs_rq[2]:/autogroup-51 cfs_rq[2]:/autogroup-0 cfs_rq[3]:/autogroup-0 cfs_rq[4]:/autogroup-50 cfs_rq[4]:/autogroup-0 cfs_rq[5]:/autogroup-11 cfs_rq[5]:/autogroup-0 cfs_rq[6]:/autogroup-0 cfs_rq[7]:/autogroup-0 cfs_rq[8]:/autogroup-13 cfs_rq[8]:/autogroup-0 cfs_rq[9]:/autogroup-0 cfs_rq[10]:/autogroup-52 cfs_rq[10]:/autogroup-0 cfs_rq[11]:/autogroup-52 cfs_rq[11]:/autogroup-0 cfs_rq[12]:/autogroup-0 cfs_rq[13]:/autogroup-0 cfs_rq[14]:/1 cfs_rq[14]:/autogroup-0 cfs_rq[15]:/autogroup-0 # grep while1 /proc/sched_debug R while1 2208 38199.296761 3826 120 38199.296761 38200.395907 4.341835 /autogroup-54 R while1 2205 31251.518310 5629 120 31251.518310 54431.493631 6.882145 /autogroup-50 R while1 2206 43920.889967 5402 120 43920.889967 53954.315334 0.000000 /1 Regards, Bharata. ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH -tip 1/2] sched: Reinstate group names in /proc/sched_debug. 2011-01-10 5:14 [PATCH -tip 0/2] sched: Get group names back in /proc/sched_debug Bharata B Rao @ 2011-01-10 5:15 ` Bharata B Rao 2011-01-11 1:53 ` Yong Zhang 2011-01-10 5:16 ` [PATCH -tip 2/2] sched: Display autogroup " Bharata B Rao 1 sibling, 1 reply; 7+ messages in thread From: Bharata B Rao @ 2011-01-10 5:15 UTC (permalink / raw) To: linux-kernel; +Cc: Mike Galbraith, Peter Zijlstra, Ingo Molnar sched: Reinstate group names in /proc/sched_debug. Displaying of group names in /proc/sched_debug was dropped in autogroup patches. Add group names while displaying cfs_rq and tasks information. Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com> --- kernel/sched_debug.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) --- a/kernel/sched_debug.c +++ b/kernel/sched_debug.c @@ -16,6 +16,9 @@ #include <linux/kallsyms.h> #include <linux/utsname.h> +static char group_path[PATH_MAX]; +static DEFINE_SPINLOCK(sched_debug_lock); + /* * This allows printing both to /proc/sched_debug and * to the console @@ -86,6 +89,23 @@ static void print_cfs_group_stats(struct } #endif +#ifdef CONFIG_CGROUP_SCHED +static char * task_group_path(struct task_group *tg) +{ + /* + * May be NULL if the underlying cgroup isn't fully-created yet + */ + if (!tg->css.cgroup) { + group_path[0] = '\0'; + return group_path; + } + rcu_read_lock(); + cgroup_path(tg->css.cgroup, group_path, PATH_MAX); + rcu_read_unlock(); + return group_path; +} +#endif + static void print_task(struct seq_file *m, struct rq *rq, struct task_struct *p) { @@ -108,6 +128,9 @@ print_task(struct seq_file *m, struct rq SEQ_printf(m, "%15Ld %15Ld %15Ld.%06ld %15Ld.%06ld %15Ld.%06ld", 0LL, 0LL, 0LL, 0L, 0LL, 0L, 0LL, 0L); #endif +#ifdef CONFIG_CGROUP_SCHED + SEQ_printf(m, " %s", task_group_path(task_group(p))); +#endif SEQ_printf(m, "\n"); } @@ -144,7 +167,11 @@ void print_cfs_rq(struct seq_file *m, in struct sched_entity *last; unsigned long flags; +#if defined(CONFIG_CGROUP_SCHED) && defined(CONFIG_FAIR_GROUP_SCHED) + SEQ_printf(m, "\ncfs_rq[%d]:%s\n", cpu, task_group_path(cfs_rq->tg)); +#else SEQ_printf(m, "\ncfs_rq[%d]:\n", cpu); +#endif SEQ_printf(m, " .%-30s: %Ld.%06ld\n", "exec_clock", SPLIT_NS(cfs_rq->exec_clock)); @@ -191,7 +218,11 @@ void print_cfs_rq(struct seq_file *m, in void print_rt_rq(struct seq_file *m, int cpu, struct rt_rq *rt_rq) { +#if defined(CONFIG_CGROUP_SCHED) && defined(CONFIG_RT_GROUP_SCHED) + SEQ_printf(m, "\nrt_rq[%d]:%s\n", cpu, task_group_path(rt_rq->tg)); +#else SEQ_printf(m, "\nrt_rq[%d]:\n", cpu); +#endif #define P(x) \ SEQ_printf(m, " .%-30s: %Ld\n", #x, (long long)(rt_rq->x)) @@ -212,6 +243,7 @@ extern __read_mostly int sched_clock_run static void print_cpu(struct seq_file *m, int cpu) { struct rq *rq = cpu_rq(cpu); + unsigned long flags; #ifdef CONFIG_X86 { @@ -266,10 +298,12 @@ static void print_cpu(struct seq_file *m #undef P #endif + spin_lock_irqsave(&sched_debug_lock, flags); print_cfs_stats(m, cpu); print_rt_stats(m, cpu); print_rq(m, rq, cpu); + spin_unlock_irqrestore(&sched_debug_lock, flags); } static const char *sched_tunable_scaling_names[] = { ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH -tip 1/2] sched: Reinstate group names in /proc/sched_debug. 2011-01-10 5:15 ` [PATCH -tip 1/2] sched: Reinstate group names " Bharata B Rao @ 2011-01-11 1:53 ` Yong Zhang 2011-01-11 10:13 ` Bharata B Rao 0 siblings, 1 reply; 7+ messages in thread From: Yong Zhang @ 2011-01-11 1:53 UTC (permalink / raw) To: bharata; +Cc: linux-kernel, Mike Galbraith, Peter Zijlstra, Ingo Molnar On Mon, Jan 10, 2011 at 1:15 PM, Bharata B Rao <bharata@linux.vnet.ibm.com> wrote: > sched: Reinstate group names in /proc/sched_debug. > > Displaying of group names in /proc/sched_debug was dropped in autogroup > patches. Add group names while displaying cfs_rq and tasks information. > > Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com> > --- > @@ -144,7 +167,11 @@ void print_cfs_rq(struct seq_file *m, in > struct sched_entity *last; > unsigned long flags; > > +#if defined(CONFIG_CGROUP_SCHED) && defined(CONFIG_FAIR_GROUP_SCHED) defined(CONFIG_CGROUP_SCHED) is not necessary here, CONFIG_[FAIR|RT]_GROUP_SCHED always imply CONFIG_CGROUP_SCHED > + SEQ_printf(m, "\ncfs_rq[%d]:%s\n", cpu, task_group_path(cfs_rq->tg)); > +#else > SEQ_printf(m, "\ncfs_rq[%d]:\n", cpu); > +#endif > SEQ_printf(m, " .%-30s: %Ld.%06ld\n", "exec_clock", > SPLIT_NS(cfs_rq->exec_clock)); > > @@ -191,7 +218,11 @@ void print_cfs_rq(struct seq_file *m, in > > void print_rt_rq(struct seq_file *m, int cpu, struct rt_rq *rt_rq) > { > +#if defined(CONFIG_CGROUP_SCHED) && defined(CONFIG_RT_GROUP_SCHED) Ditto. Thanks, Yong -- Only stand for myself ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH -tip 1/2] sched: Reinstate group names in /proc/sched_debug. 2011-01-11 1:53 ` Yong Zhang @ 2011-01-11 10:13 ` Bharata B Rao 0 siblings, 0 replies; 7+ messages in thread From: Bharata B Rao @ 2011-01-11 10:13 UTC (permalink / raw) To: Yong Zhang; +Cc: linux-kernel, Mike Galbraith, Peter Zijlstra, Ingo Molnar On Tue, Jan 11, 2011 at 09:53:05AM +0800, Yong Zhang wrote: > On Mon, Jan 10, 2011 at 1:15 PM, Bharata B Rao > <bharata@linux.vnet.ibm.com> wrote: > > sched: Reinstate group names in /proc/sched_debug. > > > > Displaying of group names in /proc/sched_debug was dropped in autogroup > > patches. Add group names while displaying cfs_rq and tasks information. > > > > Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com> > > --- > > @@ -144,7 +167,11 @@ void print_cfs_rq(struct seq_file *m, in > > struct sched_entity *last; > > unsigned long flags; > > > > +#if defined(CONFIG_CGROUP_SCHED) && defined(CONFIG_FAIR_GROUP_SCHED) > > defined(CONFIG_CGROUP_SCHED) is not necessary here, > CONFIG_[FAIR|RT]_GROUP_SCHED always imply CONFIG_CGROUP_SCHED Took care of this in my latest post. Thanks, Bharata. ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH -tip 2/2] sched: Display autogroup names in /proc/sched_debug. 2011-01-10 5:14 [PATCH -tip 0/2] sched: Get group names back in /proc/sched_debug Bharata B Rao 2011-01-10 5:15 ` [PATCH -tip 1/2] sched: Reinstate group names " Bharata B Rao @ 2011-01-10 5:16 ` Bharata B Rao 2011-01-10 9:38 ` Mike Galbraith 1 sibling, 1 reply; 7+ messages in thread From: Bharata B Rao @ 2011-01-10 5:16 UTC (permalink / raw) To: linux-kernel; +Cc: Mike Galbraith, Peter Zijlstra, Ingo Molnar sched: Display autogroup names in /proc/sched_debug. Add autogroup name to cfs_rq and tasks information in /proc/sched_debug. Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com> --- kernel/sched_debug.c | 8 ++++++++ 1 file changed, 8 insertions(+) --- a/kernel/sched_debug.c +++ b/kernel/sched_debug.c @@ -92,6 +92,14 @@ static void print_cfs_group_stats(struct #ifdef CONFIG_CGROUP_SCHED static char * task_group_path(struct task_group *tg) { +#ifdef CONFIG_SCHED_AUTOGROUP + int enabled = ACCESS_ONCE(sysctl_sched_autogroup_enabled); + + if (enabled && tg->autogroup) { + autogroup_path(tg, group_path, PATH_MAX); + return group_path; + } +#endif /* * May be NULL if the underlying cgroup isn't fully-created yet */ ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH -tip 2/2] sched: Display autogroup names in /proc/sched_debug. 2011-01-10 5:16 ` [PATCH -tip 2/2] sched: Display autogroup " Bharata B Rao @ 2011-01-10 9:38 ` Mike Galbraith 2011-01-10 10:09 ` Bharata B Rao 0 siblings, 1 reply; 7+ messages in thread From: Mike Galbraith @ 2011-01-10 9:38 UTC (permalink / raw) To: bharata; +Cc: linux-kernel, Peter Zijlstra, Ingo Molnar On Mon, 2011-01-10 at 10:46 +0530, Bharata B Rao wrote: > sched: Display autogroup names in /proc/sched_debug. > > Add autogroup name to cfs_rq and tasks information in /proc/sched_debug. > > Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com> > --- > kernel/sched_debug.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > --- a/kernel/sched_debug.c > +++ b/kernel/sched_debug.c > @@ -92,6 +92,14 @@ static void print_cfs_group_stats(struct > #ifdef CONFIG_CGROUP_SCHED > static char * task_group_path(struct task_group *tg) > { > +#ifdef CONFIG_SCHED_AUTOGROUP > + int enabled = ACCESS_ONCE(sysctl_sched_autogroup_enabled); > + > + if (enabled && tg->autogroup) { > + autogroup_path(tg, group_path, PATH_MAX); > + return group_path; > + } > +#endif > /* > * May be NULL if the underlying cgroup isn't fully-created yet > */ What prevents the task being moved, and the task group being freed under you? Looks to me like task_group_path() needs rcu_read_lock(). It is locked in the other two instances. How about the below? Date: Mon, 10 Jan 2011 10:46:43 +0530 From: Bharata B Rao <bharata@linux.vnet.ibm.com> To: linux-kernel@vger.kernel.org Cc: Mike Galbraith <efault@gmx.de>, Peter Zijlstra <a.p.zijlstra@chello.nl>, Ingo Molnar <mingo@elte.hu> Subject: [PATCH -tip 2/2] sched: Display autogroup names in /proc/sched_debug. sched: Display autogroup names in /proc/sched_debug. Add autogroup name to cfs_rq and tasks information in /proc/sched_debug. Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com> --- kernel/sched_autogroup.c | 5 +++++ kernel/sched_debug.c | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) Index: linux-2.6/kernel/sched_debug.c =================================================================== --- linux-2.6.orig/kernel/sched_debug.c +++ linux-2.6/kernel/sched_debug.c @@ -92,6 +92,9 @@ static void print_cfs_group_stats(struct #ifdef CONFIG_CGROUP_SCHED static char * task_group_path(struct task_group *tg) { + if (autogroup_path(tg, group_path, PATH_MAX)) + return group_path; + /* * May be NULL if the underlying cgroup isn't fully-created yet */ @@ -99,9 +102,7 @@ static char * task_group_path(struct tas group_path[0] = '\0'; return group_path; } - rcu_read_lock(); cgroup_path(tg->css.cgroup, group_path, PATH_MAX); - rcu_read_unlock(); return group_path; } #endif @@ -302,7 +303,9 @@ static void print_cpu(struct seq_file *m print_cfs_stats(m, cpu); print_rt_stats(m, cpu); + rcu_read_lock(); print_rq(m, rq, cpu); + rcu_read_unlock(); spin_unlock_irqrestore(&sched_debug_lock, flags); } Index: linux-2.6/kernel/sched_autogroup.c =================================================================== --- linux-2.6.orig/kernel/sched_autogroup.c +++ linux-2.6/kernel/sched_autogroup.c @@ -231,6 +231,11 @@ void proc_sched_autogroup_show_task(stru #ifdef CONFIG_SCHED_DEBUG static inline int autogroup_path(struct task_group *tg, char *buf, int buflen) { + int enabled = ACCESS_ONCE(sysctl_sched_autogroup_enabled); + + if (!enabled || tg == &root_task_group) + return 0; + return snprintf(buf, buflen, "%s-%ld", "/autogroup", tg->autogroup->id); } #endif /* CONFIG_SCHED_DEBUG */ ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH -tip 2/2] sched: Display autogroup names in /proc/sched_debug. 2011-01-10 9:38 ` Mike Galbraith @ 2011-01-10 10:09 ` Bharata B Rao 0 siblings, 0 replies; 7+ messages in thread From: Bharata B Rao @ 2011-01-10 10:09 UTC (permalink / raw) To: Mike Galbraith; +Cc: linux-kernel, Peter Zijlstra, Ingo Molnar On Mon, Jan 10, 2011 at 10:38:07AM +0100, Mike Galbraith wrote: > On Mon, 2011-01-10 at 10:46 +0530, Bharata B Rao wrote: > > sched: Display autogroup names in /proc/sched_debug. > > > > Add autogroup name to cfs_rq and tasks information in /proc/sched_debug. > > > > Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com> > > --- > > kernel/sched_debug.c | 8 ++++++++ > > 1 file changed, 8 insertions(+) > > > > --- a/kernel/sched_debug.c > > +++ b/kernel/sched_debug.c > > @@ -92,6 +92,14 @@ static void print_cfs_group_stats(struct > > #ifdef CONFIG_CGROUP_SCHED > > static char * task_group_path(struct task_group *tg) > > { > > +#ifdef CONFIG_SCHED_AUTOGROUP > > + int enabled = ACCESS_ONCE(sysctl_sched_autogroup_enabled); > > + > > + if (enabled && tg->autogroup) { > > + autogroup_path(tg, group_path, PATH_MAX); > > + return group_path; > > + } > > +#endif > > /* > > * May be NULL if the underlying cgroup isn't fully-created yet > > */ > > What prevents the task being moved, and the task group being freed under > you? Looks to me like task_group_path() needs rcu_read_lock(). It is > locked in the other two instances. How about the below? You are right, we need rcu_read_lock() there. Let me spin out an other version with the changes. Thanks, Bharata. ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2011-01-11 10:13 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-01-10 5:14 [PATCH -tip 0/2] sched: Get group names back in /proc/sched_debug Bharata B Rao 2011-01-10 5:15 ` [PATCH -tip 1/2] sched: Reinstate group names " Bharata B Rao 2011-01-11 1:53 ` Yong Zhang 2011-01-11 10:13 ` Bharata B Rao 2011-01-10 5:16 ` [PATCH -tip 2/2] sched: Display autogroup " Bharata B Rao 2011-01-10 9:38 ` Mike Galbraith 2011-01-10 10:09 ` Bharata B Rao
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).