module: Fix performance regression on modules with large symbol tables
authorKevin Cernekee <cernekee@gmail.com>
Thu, 12 Jan 2012 23:02:14 +0000 (09:02 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Thu, 12 Jan 2012 23:02:14 +0000 (09:02 +1030)
commit48fd11880b5ef04270be8a87d9a9a9ee2fdae338
tree1dc62486665f1d28e74a0e12fec5f01beb233313
parent70b1e9161e903a9e1682aca3a832ed29ef876a4d
module: Fix performance regression on modules with large symbol tables

Looking at /proc/kallsyms, one starts to ponder whether all of the extra
strtab-related complexity in module.c is worth the memory savings.

Instead of making the add_kallsyms() loop even more complex, I tried the
other route of deleting the strmap logic and naively copying each string
into core_strtab with no consideration for consolidating duplicates.

Performance on an "already exists" insmod of nvidia.ko (runs
add_kallsyms() but does not actually initialize the module):

Original scheme: 1.230s
With naive copying: 0.058s

Extra space used: 35k (of a 408k module).

Signed-off-by: Kevin Cernekee <cernekee@gmail.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
LKML-Reference: <73defb5e4bca04a6431392cc341112b1@localhost>
kernel/module.c