From: Glauber Costa <glommer@parallels.com>
To: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: <linux-kernel@vger.kernel.org>, <paul@paulmenage.org>,
<lizf@cn.fujitsu.com>, <daniel.lezcano@free.fr>,
<jbottomley@parallels.com>,
Frederic Weisbecker <fweisbec@gmail.com>
Subject: Re: [PATCH 05/10] Make total_forks per-cgroup
Date: Wed, 5 Oct 2011 16:12:00 +0400 [thread overview]
Message-ID: <4E8C4990.1050704@parallels.com> (raw)
In-Reply-To: <1317805535.6766.6.camel@twins>
On 10/05/2011 01:05 PM, Peter Zijlstra wrote:
> On Sun, 2011-10-02 at 23:21 +0400, Glauber Costa wrote:
>> This patch counts the total number of forks per-cgroup.
>> The information is propagated to the parent, so the total
>> number of forks in the system, is the parent cgroup's one.
>>
>> To achieve that, total_forks is made per-cpu. There is no
>> particular reason to do that, but by doing this, we are
>> able to bundle it inside the cpustat structure already
>> present.
>
> I think fweisbec is also doing something with forks and cgroups.
I am all ears...
Frederic, does it conflict with what you're doing ?
>> Signed-off-by: Glauber Costa<glommer@parallels.com>
>> ---
>> include/linux/kernel_stat.h | 1 +
>> include/linux/sched.h | 1 +
>> kernel/fork.c | 7 ++-----
>> kernel/sched.c | 9 ++++++++-
>> 4 files changed, 12 insertions(+), 6 deletions(-)
>>
>> diff --git a/include/linux/kernel_stat.h b/include/linux/kernel_stat.h
>> index 71a69a0..9fb0dda 100644
>> --- a/include/linux/kernel_stat.h
>> +++ b/include/linux/kernel_stat.h
>> @@ -29,6 +29,7 @@ enum cpu_usage_stat {
>> GUEST_NICE,
>> IDLE_BASE,
>> IOWAIT_BASE,
>> + TOTAL_FORKS,
>> NR_STATS,
>> };
>>
>> diff --git a/include/linux/sched.h b/include/linux/sched.h
>> index 64c5ba5..4ba9dde 100644
>> --- a/include/linux/sched.h
>> +++ b/include/linux/sched.h
>> @@ -2716,6 +2716,7 @@ struct cgroup;
>> struct cftype;
>> int cpu_cgroup_proc_stat(struct cgroup *cgrp, struct cftype *cft,
>> struct seq_file *p);
>> +void task_group_new_fork(struct task_struct *p);
>> #endif /* __KERNEL__ */
>>
>> #endif
>> diff --git a/kernel/fork.c b/kernel/fork.c
>> index 8e6b6f4..ec2b729 100644
>> --- a/kernel/fork.c
>> +++ b/kernel/fork.c
>> @@ -76,10 +76,6 @@
>>
>> #include<trace/events/sched.h>
>>
>> -/*
>> - * Protected counters by write_lock_irq(&tasklist_lock)
>> - */
>> -unsigned long total_forks; /* Handle normal Linux uptimes. */
>> int nr_threads; /* The idle threads do not count.. */
>>
>> int max_threads; /* tunable limit on nr_threads */
>> @@ -1372,7 +1368,8 @@ static struct task_struct *copy_process(unsigned long clone_flags,
>> nr_threads++;
>> }
>>
>> - total_forks++;
>> + task_group_new_fork(p);
>> +
>> spin_unlock(¤t->sighand->siglock);
>> write_unlock_irq(&tasklist_lock);
>> proc_fork_connector(p);
>> diff --git a/kernel/sched.c b/kernel/sched.c
>> index 89d2248..5a8181e 100644
>> --- a/kernel/sched.c
>> +++ b/kernel/sched.c
>> @@ -691,6 +691,11 @@ static inline void task_group_account_field(struct task_struct *p,
>> }
>> #endif /* CONFIG_CGROUP_SCHED */
>>
>> +void task_group_new_fork(struct task_struct *p)
>> +{
>> + task_group_account_field(p, 1, TOTAL_FORKS);
>> +}
>> +
>> static void update_rq_clock_task(struct rq *rq, s64 delta);
>>
>> static void update_rq_clock(struct rq *rq)
>> @@ -9161,6 +9166,7 @@ int cpu_cgroup_proc_stat(struct cgroup *cgrp, struct cftype *cft,
>> u64 guest, guest_nice;
>> u64 sum = 0;
>> u64 sum_softirq = 0;
>> + u64 total_forks = 0;
>> unsigned int per_softirq_sums[NR_SOFTIRQS] = {0};
>> struct timespec boottime;
>> #ifdef CONFIG_CGROUP_SCHED
>> @@ -9201,6 +9207,7 @@ int cpu_cgroup_proc_stat(struct cgroup *cgrp, struct cftype *cft,
>> steal += kstat->cpustat[STEAL];
>> guest += kstat->cpustat[GUEST];
>> guest_nice += kstat->cpustat[GUEST_NICE];
>> + total_forks += kstat->cpustat[TOTAL_FORKS];
>> sum += kstat_cpu_irqs_sum(i);
>> sum += arch_irq_stat_cpu(i);
>>
>> @@ -9272,7 +9279,7 @@ int cpu_cgroup_proc_stat(struct cgroup *cgrp, struct cftype *cft,
>> seq_printf(p,
>> "\nctxt %llu\n"
>> "btime %lu\n"
>> - "processes %lu\n"
>> + "processes %llu\n"
>> "procs_running %lu\n"
>> "procs_blocked %lu\n",
>> nr_context_switches(),
>
next prev parent reply other threads:[~2011-10-05 12:12 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-02 19:21 [PATCH 00/10] Per-cgroup /proc/stat information Glauber Costa
2011-10-02 19:21 ` [PATCH 01/10] trivial: initialize root cgroup's sibling list Glauber Costa
2011-10-02 19:21 ` [PATCH 02/10] Change cpustat fields to an array Glauber Costa
2011-10-02 19:21 ` [PATCH 03/10] Move /proc/stat logic inside sched.c Glauber Costa
2011-10-02 19:21 ` [PATCH 04/10] Display /proc/stat information per cgroup Glauber Costa
2011-10-05 8:56 ` Peter Zijlstra
2011-10-05 12:10 ` Glauber Costa
2011-10-05 12:38 ` Peter Zijlstra
2011-10-05 12:43 ` Glauber Costa
2011-10-05 9:04 ` Peter Zijlstra
2011-10-05 12:11 ` Glauber Costa
2011-10-02 19:21 ` [PATCH 05/10] Make total_forks per-cgroup Glauber Costa
2011-10-05 9:05 ` Peter Zijlstra
2011-10-05 12:12 ` Glauber Costa [this message]
2011-10-11 23:45 ` Frederic Weisbecker
2011-10-12 7:35 ` Glauber Costa
2011-10-12 12:59 ` Frederic Weisbecker
2011-10-12 12:59 ` Glauber Costa
2011-10-12 13:03 ` Frederic Weisbecker
2011-10-12 13:03 ` Glauber Costa
2011-10-12 14:03 ` Frederic Weisbecker
2011-10-02 19:21 ` [PATCH 06/10] per-cgroup boot time Glauber Costa
2011-10-02 19:21 ` [PATCH 07/10] Report steal time for cgroup Glauber Costa
2011-10-02 19:21 ` [PATCH 08/10] provide a version of cpuacct statistics inside cpu cgroup Glauber Costa
2011-10-05 9:10 ` Peter Zijlstra
2011-10-05 12:16 ` Glauber Costa
2011-10-02 19:21 ` [PATCH 09/10] provide a version of cpuusage " Glauber Costa
2011-10-05 9:14 ` Peter Zijlstra
2011-10-05 12:17 ` Glauber Costa
2011-10-05 9:46 ` Peter Zijlstra
2011-10-05 12:22 ` Glauber Costa
2011-10-05 12:31 ` Peter Zijlstra
2011-10-05 15:05 ` Glauber Costa
2011-10-02 19:21 ` [PATCH 10/10] Change CPUACCT to default n Glauber Costa
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=4E8C4990.1050704@parallels.com \
--to=glommer@parallels.com \
--cc=a.p.zijlstra@chello.nl \
--cc=daniel.lezcano@free.fr \
--cc=fweisbec@gmail.com \
--cc=jbottomley@parallels.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lizf@cn.fujitsu.com \
--cc=paul@paulmenage.org \
/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.