lkml.org 
[lkml]   [2005]   [Sep]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: Slow loading big kernel module in 2.6 on PPC platform
Date
From

On Thu, 29 Sep 2005, Wilson Li wrote:

>
>
>> --- "linux-os (Dick Johnson)" <linux-os@analogic.com> wrote:
>>
>> On Wed, 28 Sep 2005, Wilson Li wrote:
>>
>> I have a module I am currently working on. It has some assembly
>> stuff linked with it, so it was easy to modify. In the assembly
>> I allocated 16 megabytes of static storage (using the .space
>> keyword),
>> first in the .data section, then in .rodata, then in .text. The
>> .text section is where code exists. In no case did the module take
>> more than 1/4 second to load. In all cases the size shown by
>> `lsmod`
>> reflected the enormous size of the module.
>>
>> Now, that's static storage. If your code uses kmalloc() and
>> friends to allocate a lot of storage when it is being loaded,
>> then that's a different story. FYI, when you see a kernel message
>> on the screen, that's not necessarily when it was "printed". It
>> gets buffered, you know. If you want to time-check when various
>> sections get control, to find out what's eating the time, then
>> put the jiffie count into your kernel messages.
>>
>> A simple macro using the __FUNCTION__ string and the jiffie
>> count can go a long way towards finding out what's happening.
>>
>> For instance, I once had a problem with continuous interrupts
>> from a device, that couldn't be cleared, until the device was
>> initialized. That slowed the system to a stand-still until
>> I found that. The fix was easy, do some initialization before
>> attaching the interrupt, at least enough to quiet the board.
>> This board had an empty FPGA, whos bits need to be loaded
>> with a bit-banger to make it work. The pin connected to an
>> interrupt was just whatever-it-was-from-the-factory, before
>> the intelligence was loaded. That system took about a minute
>> for the first kernel message to be printed. Sometimes the
>> system was very quiet <forever> and needed to be kicked.
>>
>>
>> Cheers,
>> Dick Johnson
>> Penguin : Linux version 2.6.13 on an i686 machine (5589.55
>> BogoMips).
>> Warning : 98.36% of all statistics are fiction.
>>
>> ****************************************************************
>> The information transmitted in this message is confidential and may
>> be privileged. Any review, retransmission, dissemination, or other
>> use of this information by persons or entities other than the
>> intended recipient is prohibited. If you are not the intended
>> recipient, please notify Analogic Corporation immediately - by
>> replying to this message or by sending an email to
>> DeliveryErrors@analogic.com - and destroy all copies of this
>> information, including any attachments, without reading or
>> disclosing them.
>>
>> Thank you.
>
> Appreciate your advice and help. I finally tracked it down to the
> function called in init_module() in kernel/module.c.
>
> /* Allow arches to frob section contents and sizes. */
> err = module_frob_arch_sections(hdr, sechdrs, secstrings, mod);
>
> which takes most of time (more then 99%) during module loading just
> as the reply from Semuel earlier.
>
> Wilson Li
>

Yes. Look at the code in .../arch/ppc/kernel/module.c count_relocs()
and you will see a quadratic (n ^2) example of how not to do something!

This probably could be fixed as (n * 2) order, two passes, however in
the meantime, you might want to make as many symbols as you can in
your code static. Because of the quadratic relationship, a small
change in the number of symbols will make a large change in the
load-time!

Cheers,
Dick Johnson
Penguin : Linux version 2.6.13 on an i686 machine (5589.55 BogoMips).
Warning : 98.36% of all statistics are fiction.

****************************************************************
The information transmitted in this message is confidential and may be privileged. Any review, retransmission, dissemination, or other use of this information by persons or entities other than the intended recipient is prohibited. If you are not the intended recipient, please notify Analogic Corporation immediately - by replying to this message or by sending an email to DeliveryErrors@analogic.com - and destroy all copies of this information, including any attachments, without reading or disclosing them.

Thank you.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-09-30 17:50    [W:0.040 / U:0.384 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site