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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox