• Rasmus Villemoes's avatar
    mm: slub: make slab_sysfs_init() a late_initcall · 1a5ad30b
    Rasmus Villemoes authored
    Currently, slab_sysfs_init() is an __initcall aka device_initcall. It
    is rather time-consuming; on my board it takes around 11ms. That's
    about 1% of the time budget I have from U-Boot letting go and until
    linux must assume responsibility of keeping the external watchdog
    happy.
    
    There's no particular reason this would need to run at device_initcall
    time, so instead make it a late_initcall to allow vital functionality
    to get started a bit sooner.
    
    This actually ends up winning more than just those 11ms, because the
    slab caches that get created during other device_initcalls (and before
    my watchdog device gets probed) now don't end up doing the somewhat
    expensive sysfs_slab_add() themselves. Some example lines (with
    initcall_debug set) before/after:
    
    initcall ext4_init_fs+0x0/0x1ac returned 0 after 1386 usecs
    initcall journal_init+0x0/0x138 returned 0 after 517 usecs
    initcall init_fat_fs+0x0/0x68 returned 0 after 294 usecs
    
    initcall ext4_init_fs+0x0/0x1ac returned 0 after 240 usecs
    initcall journal_init+0x0/0x138 returned 0 after 32 usecs
    initcall init_fat_fs+0x0/0x68 returned 0 after 18 usecs
    
    Altogether, this means I now get to petting the watchdog around 17ms
    sooner. [Of course, the time the other initcalls save is instead spent
    in slab_sysfs_init(), which goes from 11ms to 16ms, so there's no
    overall change in boot time.]
    Signed-off-by: default avatarRasmus Villemoes <linux@rasmusvillemoes.dk>
    Acked-by: default avatarHyeonggon Yoo <42.hyeyoo@gmail.com>
    Acked-by: default avatarDavid Rientjes <rientjes@google.com>
    Signed-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
    1a5ad30b
slub.c 156 KB