From: Paulo Marques <pmarques@grupopie.com>
To: Andrew Morton <akpm@osdl.org>
Cc: viro@parcelfarce.linux.theplanet.co.uk, mpm@selenic.com,
linux-kernel@vger.kernel.org, bcasavan@sgi.com
Subject: Re: [PATCH] kallsyms data size reduction / lookup speedup
Date: Thu, 26 Aug 2004 11:26:33 +0100 [thread overview]
Message-ID: <412DBAD9.6020303@grupopie.com> (raw)
In-Reply-To: <20040826025904.02bf4c0e.akpm@osdl.org>
Andrew Morton wrote:
> viro@parcelfarce.linux.theplanet.co.uk wrote:
>
>>On Thu, Aug 26, 2004 at 12:40:30AM +0100, Paulo Marques wrote:
>> > That is why I kept a big *If* in that sentence. I'm quite new to all
>> > this, and I'm still reading a lot of source code.
>> >
>> > If the culprit is in fact seq_file, and seq_file can be improved in a
>> > way that works for everyone (not only kallsyms), then I also agree
>> > that is is the way to go. But hunting this down might prove that the
>> > problem is somewhere else. It is just too soon to draw conclusions.
>>
>> readprofile(1) ought to narrow it down with that kind of timing difference...
>
>
>
>
> c014696c do_anonymous_page 4 0.0133
> c0133550 kallsyms_expand_symbol 17 0.1545
> c026b78f __copy_user_intel 31 0.2039
> c026a5ec vsnprintf 39 0.0283
> c026a318 number 40 0.0552
> c011d102 write_profile 79 0.7182
> c0131f39 is_exported 3805 17.0628
> c0104028 default_idle 4254 86.8163
> 00000000 total 8325 0.0025
>
> It's all in the O(n) is_exported(). Rusty's fault ;)
The is_exported function is only called for kernel symbols, and not
module symbols AFAICT.
If there is a way to know at compile time the exported symbols, then
scripts/kallsyms might generate a bitmap along with all the other data
it generates so that checking is_exported would become O(1).
For a tipical scenario of less than 16k symbols, the bitmap would take
2kB. If we don't want to spend this 2kB we can do something a little
more ugly:
The format of the compressed stream is basicaly:
[1 byte <name length>][N-bytes name]
repeated for every symbol. Since KSYM_NAME_LEN is defined to be 127, we
still have an extra bit in the length to keep the "is_exported"
information there. The format would then be:
[1 byte <7:is_exported bit>:<6..0:name length>][N-bytes name]
Of course, this limits future changes to KSYM_NAME_LEN :(
If the information is hard to get at compile time, then we could do a
single loop the first time the information is needed, and then use that
for subsequent calls.
But with this solved we could have sub-milisecond "cat /proc/kallsyms" :)
--
Paulo Marques - www.grupopie.com
next prev parent reply other threads:[~2004-08-26 10:29 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-08-25 4:04 [PATCH] kallsyms data size reduction / lookup speedup pmarques
2004-08-25 17:39 ` Matt Mackall
2004-08-25 18:46 ` Paulo Marques
2004-08-25 18:58 ` Matt Mackall
2004-08-25 19:09 ` Paulo Marques
2004-08-25 19:29 ` viro
2004-08-25 23:40 ` Paulo Marques
2004-08-25 23:43 ` viro
2004-08-26 9:59 ` Andrew Morton
2004-08-26 10:26 ` Paulo Marques [this message]
2004-08-30 18:21 ` Sam Ravnborg
2004-08-30 18:38 ` Paulo Marques
2004-08-25 21:12 ` Matt Mackall
2004-08-25 23:50 ` Paulo Marques
2004-08-25 20:51 ` Sam Ravnborg
2004-08-25 21:25 ` Randy.Dunlap
2004-08-26 0:27 ` Paulo Marques
2004-08-26 11:01 ` Paulo Marques
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=412DBAD9.6020303@grupopie.com \
--to=pmarques@grupopie.com \
--cc=akpm@osdl.org \
--cc=bcasavan@sgi.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mpm@selenic.com \
--cc=viro@parcelfarce.linux.theplanet.co.uk \
/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.