All of lore.kernel.org
 help / color / mirror / Atom feed
From: Glauber Costa <glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
To: Paul Turner <pjt-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	devel-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org,
	Peter Zijlstra
	<a.p.zijlstra-/NLkJaSkS4VmR6Xm/wNWPw@public.gmane.org>,
	Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	"Eric W. Biederman"
	<ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>,
	handai.szj-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
	Andrew.Phillips-xheW4WVAX9Y@public.gmane.org,
	Serge Hallyn
	<serge.hallyn-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org>
Subject: Re: [PATCH v3 3/6] expose fine-grained per-cpu data for cpuacct stats
Date: Wed, 30 May 2012 16:20:15 +0400	[thread overview]
Message-ID: <4FC6107F.9020802@parallels.com> (raw)
In-Reply-To: <CAPM31RJanAvDB+pZ+h5J3W6KXvAwPgbbeXgw6C_56tx_Mc+cgA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>

On 05/30/2012 03:24 PM, Paul Turner wrote:
>> +static int cpuacct_stats_percpu_show(struct cgroup *cgrp, struct cftype *cft,
>> >  +                                    struct cgroup_map_cb *cb)
>> >  +{
>> >  +       struct cpuacct *ca = cgroup_ca(cgrp);
>> >  +       int cpu;
>> >  +
>> >  +       for_each_online_cpu(cpu) {
>> >  +               do_fill_cb(cb, ca, "user", cpu, CPUTIME_USER);
>> >  +               do_fill_cb(cb, ca, "nice", cpu, CPUTIME_NICE);
>> >  +               do_fill_cb(cb, ca, "system", cpu, CPUTIME_SYSTEM);
>> >  +               do_fill_cb(cb, ca, "irq", cpu, CPUTIME_IRQ);
>> >  +               do_fill_cb(cb, ca, "softirq", cpu, CPUTIME_SOFTIRQ);
>> >  +               do_fill_cb(cb, ca, "guest", cpu, CPUTIME_GUEST);
>> >  +               do_fill_cb(cb, ca, "guest_nice", cpu, CPUTIME_GUEST_NICE);
>> >  +       }
>> >  +
> I don't know if there's much that can be trivially done about it but I
> suspect these are a bit of a memory allocation time-bomb on a many-CPU
> machine.  The cgroup:seq_file mating (via read_map) treats everything
> as/one/  record.  This means that seq_printf is going to end up
> eventually allocating a buffer that can fit_everything_  (as well as
> every power-of-2 on the way there).  Adding insult to injury is that
> that the backing buffer is kmalloc() not vmalloc().
>
> 200+ bytes per-cpu above really is not unreasonable (46 bytes just for
> the text, plus a byte per base 10 digit we end up reporting), but that
> then  leaves us looking at order-12/13 allocations just to print this
> thing when there are O(many) cpus.
>

And how's /proc/stat different ?
It will suffer from the very same problems, since it also have this very 
same information (actually more, since I am skipping some), per-cpu.

Now, if you guys are okay with a file per-cpu, I can do it as well.
It pollutes the filesystem, but at least protects against the fact that 
this is kmalloc-backed.

WARNING: multiple messages have this Message-ID (diff)
From: Glauber Costa <glommer@parallels.com>
To: Paul Turner <pjt@google.com>
Cc: <linux-kernel@vger.kernel.org>, <cgroups@vger.kernel.org>,
	<devel@openvz.org>, Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Tejun Heo <tj@kernel.org>,
	"Eric W. Biederman" <ebiederm@xmission.com>,
	<handai.szj@gmail.com>, <Andrew.Phillips@lmax.com>,
	Serge Hallyn <serge.hallyn@canonical.com>
Subject: Re: [PATCH v3 3/6] expose fine-grained per-cpu data for cpuacct stats
Date: Wed, 30 May 2012 16:20:15 +0400	[thread overview]
Message-ID: <4FC6107F.9020802@parallels.com> (raw)
In-Reply-To: <CAPM31RJanAvDB+pZ+h5J3W6KXvAwPgbbeXgw6C_56tx_Mc+cgA@mail.gmail.com>

On 05/30/2012 03:24 PM, Paul Turner wrote:
>> +static int cpuacct_stats_percpu_show(struct cgroup *cgrp, struct cftype *cft,
>> >  +                                    struct cgroup_map_cb *cb)
>> >  +{
>> >  +       struct cpuacct *ca = cgroup_ca(cgrp);
>> >  +       int cpu;
>> >  +
>> >  +       for_each_online_cpu(cpu) {
>> >  +               do_fill_cb(cb, ca, "user", cpu, CPUTIME_USER);
>> >  +               do_fill_cb(cb, ca, "nice", cpu, CPUTIME_NICE);
>> >  +               do_fill_cb(cb, ca, "system", cpu, CPUTIME_SYSTEM);
>> >  +               do_fill_cb(cb, ca, "irq", cpu, CPUTIME_IRQ);
>> >  +               do_fill_cb(cb, ca, "softirq", cpu, CPUTIME_SOFTIRQ);
>> >  +               do_fill_cb(cb, ca, "guest", cpu, CPUTIME_GUEST);
>> >  +               do_fill_cb(cb, ca, "guest_nice", cpu, CPUTIME_GUEST_NICE);
>> >  +       }
>> >  +
> I don't know if there's much that can be trivially done about it but I
> suspect these are a bit of a memory allocation time-bomb on a many-CPU
> machine.  The cgroup:seq_file mating (via read_map) treats everything
> as/one/  record.  This means that seq_printf is going to end up
> eventually allocating a buffer that can fit_everything_  (as well as
> every power-of-2 on the way there).  Adding insult to injury is that
> that the backing buffer is kmalloc() not vmalloc().
>
> 200+ bytes per-cpu above really is not unreasonable (46 bytes just for
> the text, plus a byte per base 10 digit we end up reporting), but that
> then  leaves us looking at order-12/13 allocations just to print this
> thing when there are O(many) cpus.
>

And how's /proc/stat different ?
It will suffer from the very same problems, since it also have this very 
same information (actually more, since I am skipping some), per-cpu.

Now, if you guys are okay with a file per-cpu, I can do it as well.
It pollutes the filesystem, but at least protects against the fact that 
this is kmalloc-backed.


  parent reply	other threads:[~2012-05-30 12:20 UTC|newest]

Thread overview: 70+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-30  9:48 [PATCH v3 0/6] per cgroup /proc/stat statistics Glauber Costa
2012-05-30  9:48 ` Glauber Costa
2012-05-30  9:48 ` [PATCH v3 2/6] account guest time per-cgroup as well Glauber Costa
2012-05-30  9:48   ` Glauber Costa
     [not found]   ` <1338371317-5980-3-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-05-30 10:32     ` Peter Zijlstra
2012-05-30 10:32       ` Peter Zijlstra
2012-05-30 10:36       ` Glauber Costa
2012-05-30 10:36         ` Glauber Costa
2012-05-30 10:46         ` Paul Turner
2012-05-30  9:48 ` [PATCH v3 4/6] add a new scheduler hook for context switch Glauber Costa
2012-05-30  9:48   ` Glauber Costa
     [not found]   ` <1338371317-5980-5-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-05-30 11:20     ` Peter Zijlstra
2012-05-30 11:20       ` Peter Zijlstra
2012-05-30 11:40       ` Peter Zijlstra
2012-05-30 11:40         ` Peter Zijlstra
2012-05-30 12:08         ` Glauber Costa
2012-05-30 12:08           ` Glauber Costa
2012-05-30 12:07       ` Glauber Costa
2012-05-30 12:07         ` Glauber Costa
2012-05-30  9:48 ` [PATCH v3 5/6] Also record sleep start for a task group Glauber Costa
2012-05-30  9:48   ` Glauber Costa
     [not found]   ` <1338371317-5980-6-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-05-30 11:35     ` Paul Turner
2012-05-30 11:35       ` Paul Turner
     [not found]       ` <CAPM31R+VXsffUOSOtMPG=g+G9OdzWMKQvx9usTFa3KBbrqPe6A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-05-30 12:24         ` Glauber Costa
2012-05-30 12:24           ` Glauber Costa
     [not found]           ` <4FC61188.8000908-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-05-30 12:44             ` Peter Zijlstra
2012-05-30 12:44               ` Peter Zijlstra
2012-05-30 12:44               ` Glauber Costa
2012-05-30 12:44                 ` Glauber Costa
     [not found] ` <1338371317-5980-1-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-05-30  9:48   ` [PATCH v3 1/6] measure exec_clock for rt sched entities Glauber Costa
2012-05-30  9:48     ` Glauber Costa
     [not found]     ` <1338371317-5980-2-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-05-30 10:29       ` Peter Zijlstra
2012-05-30 10:29         ` Peter Zijlstra
2012-05-30 10:32         ` Glauber Costa
2012-05-30 10:32           ` Glauber Costa
     [not found]           ` <4FC5F727.2040804-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-05-30 10:42             ` Peter Zijlstra
2012-05-30 10:42               ` Peter Zijlstra
2012-05-30 10:42               ` Glauber Costa
2012-05-30 10:42                 ` Glauber Costa
     [not found]                 ` <4FC5F99B.2060109-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-05-30 11:00                   ` Paul Turner
2012-05-30 11:00                     ` Paul Turner
     [not found]                     ` <CAPM31RL-X2GYju-opjUumPq_cfGiRzGowXEOx9Tq4kVEG-z3SA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-05-30 12:09                       ` Glauber Costa
2012-05-30 12:09                         ` Glauber Costa
2012-05-30  9:48   ` [PATCH v3 3/6] expose fine-grained per-cpu data for cpuacct stats Glauber Costa
2012-05-30  9:48     ` Glauber Costa
     [not found]     ` <1338371317-5980-4-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-05-30 10:34       ` Peter Zijlstra
2012-05-30 10:34         ` Peter Zijlstra
2012-05-30 10:34         ` Glauber Costa
2012-05-30 10:34           ` Glauber Costa
     [not found]           ` <4FC5F7A0.2000201-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-05-30 10:43             ` Peter Zijlstra
2012-05-30 10:43               ` Peter Zijlstra
2012-05-30 10:44               ` Glauber Costa
2012-05-30 10:44                 ` Glauber Costa
     [not found]                 ` <4FC5FA20.50301-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-05-30 11:24                   ` Peter Zijlstra
2012-05-30 11:24                     ` Peter Zijlstra
2012-05-30 11:24     ` Paul Turner
     [not found]       ` <CAPM31RJanAvDB+pZ+h5J3W6KXvAwPgbbeXgw6C_56tx_Mc+cgA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-05-30 12:20         ` Glauber Costa [this message]
2012-05-30 12:20           ` Glauber Costa
     [not found]           ` <4FC6107F.9020802-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-05-30 12:48             ` Paul Turner
2012-05-30 12:48               ` Paul Turner
2012-05-30 12:52               ` Glauber Costa
2012-05-30 12:52                 ` Glauber Costa
     [not found]               ` <CAPM31RJ7s+pNciOEnsfXRU9xCwnUano1k8CTEUuCjsSN5n0-1Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-05-30 13:26                 ` Glauber Costa
2012-05-30 13:26                   ` Glauber Costa
2012-05-30 13:26               ` Glauber Costa
2012-05-30 13:26                 ` Glauber Costa
2012-05-30  9:48   ` [PATCH v3 6/6] expose per-taskgroup schedstats in cgroup Glauber Costa
2012-05-30  9:48     ` Glauber Costa
     [not found]     ` <1338371317-5980-7-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-05-30 11:22       ` Peter Zijlstra
2012-05-30 11:22         ` Peter Zijlstra

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=4FC6107F.9020802@parallels.com \
    --to=glommer-bzqdu9zft3wakbo8gow8eq@public.gmane.org \
    --cc=Andrew.Phillips-xheW4WVAX9Y@public.gmane.org \
    --cc=a.p.zijlstra-/NLkJaSkS4VmR6Xm/wNWPw@public.gmane.org \
    --cc=cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=devel-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org \
    --cc=ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org \
    --cc=handai.szj-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=pjt-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
    --cc=serge.hallyn-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org \
    --cc=tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.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.