From: Andrew Morton <akpm@linux-foundation.org>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
Glauber Costa <glommer@parallels.com>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Ingo Molnar <mingo@elte.hu>,
linux-kernel@vger.kernel.org,
Russell King - ARM Linux <linux@arm.linux.org.uk>,
Paul Tuner <pjt@google.com>
Subject: Re: [PATCH] proc: speedup /proc/stat handling
Date: Fri, 20 Jan 2012 14:55:45 -0800 [thread overview]
Message-ID: <20120120145545.bcf5c76f.akpm@linux-foundation.org> (raw)
In-Reply-To: <1327075164.12389.31.camel@edumazet-HP-Compaq-6005-Pro-SFF-PC>
On Fri, 20 Jan 2012 16:59:24 +0100
Eric Dumazet <eric.dumazet@gmail.com> wrote:
> On a typical 16 cpus machine, "cat /proc/stat" gives more than 4096
> bytes, and is slow :
>
> # strace -T -o /tmp/STRACE cat /proc/stat | wc -c
> 5826
> # grep "cpu " /tmp/STRACE
> read(0, "cpu 1949310 19 2144714 12117253"..., 32768) = 5826 <0.001504>
>
>
> Thats partly because show_stat() must be called twice since initial
> buffer size is too small (4096 bytes for less than 32 possible cpus)
>
> Fix this by :
>
> 1) Taking into account nr_irqs in the initial buffer sizing.
>
> 2) Using ksize() to allow better filling of initial buffer.
>
> 3) Reduce the bloat on "intr ..." line :
> Dont output trailing " 0" values at the end of irq range.
This one is worrisome. Mainly because the number of fields in the
`intr' line can now increase over time (yes?). So if a monitoring program
were to read this line and use the result to size an internal buffer
then after a while it might start to drop information or to get buffer
overruns.
> An alternative to 1) would be to remember the largest m->count reached
> in show_stat()
>
>
> ...
>
> @@ -157,14 +171,17 @@ static int show_stat(struct seq_file *p, void *v)
>
> static int stat_open(struct inode *inode, struct file *file)
> {
> - unsigned size = 4096 * (1 + num_possible_cpus() / 32);
> + unsigned size = 1024 + 128 * num_possible_cpus();
> char *buf;
> struct seq_file *m;
> int res;
>
> + /* minimum size to display a 0 count per interrupt : 2 bytes */
> + size += 2 * nr_irqs;
> +
> /* don't ask for more than the kmalloc() max size */
> - if (size > KMALLOC_MAX_SIZE)
> - size = KMALLOC_MAX_SIZE;
> + size = min_t(unsigned, size, KMALLOC_MAX_SIZE);
The change looks reasonable, however the use of KMALLOC_MAX_SIZE in the
existing code is worrisome. If `size' ever gets that large then
there's a decent chance that the kmalloc() will simply fail and a
better chance that it would cause tons of VM scanning activity,
including disk writeout.
But I've never seen anyone report problems in this area, so shrug.
next prev parent reply other threads:[~2012-01-20 22:55 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-01-20 15:59 [PATCH] proc: speedup /proc/stat handling Eric Dumazet
2012-01-20 22:55 ` Andrew Morton [this message]
2012-01-23 10:16 ` KAMEZAWA Hiroyuki
2012-01-23 10:33 ` Glauber Costa
2012-01-24 1:25 ` KAMEZAWA Hiroyuki
2012-01-25 0:01 ` [PATCH v2] " Eric Dumazet
2012-01-25 0:12 ` Andrew Morton
2012-01-25 0:22 ` Eric Dumazet
2012-01-25 1:27 ` Andrew Morton
2012-01-25 5:29 ` Eric Dumazet
2012-01-26 1:04 ` Andrew Morton
2012-01-26 9:55 ` KAMEZAWA Hiroyuki
2012-01-27 0:43 ` Andrew Morton
2012-01-27 1:09 ` KAMEZAWA Hiroyuki
2012-01-27 1:18 ` Andrew Morton
2012-01-30 5:16 ` [PATCH] Add num_to_str() for speedup /proc/stat KAMEZAWA Hiroyuki
2012-01-30 23:20 ` Andrew Morton
2012-01-30 23:58 ` KAMEZAWA Hiroyuki
2012-02-01 14:43 ` Andrea Righi
2012-02-01 23:46 ` KAMEZAWA Hiroyuki
2012-01-27 7:09 ` [PATCH v2] proc: speedup /proc/stat handling Eric Dumazet
2012-01-25 0:18 ` KAMEZAWA Hiroyuki
2012-01-25 0:26 ` Eric Dumazet
2012-01-30 8:06 ` Jörg-Volker Peetz
2012-01-30 9:25 ` Eric Dumazet
2012-01-30 10:00 ` Jörg-Volker Peetz
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=20120120145545.bcf5c76f.akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=a.p.zijlstra@chello.nl \
--cc=eric.dumazet@gmail.com \
--cc=glommer@parallels.com \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=mingo@elte.hu \
--cc=pjt@google.com \
/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 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).