Skip to content
  • Eric Dumazet's avatar
    modules: Use a better scheme for refcounting · 720eba31
    Eric Dumazet authored
    
    
    Current refcounting for modules (done if CONFIG_MODULE_UNLOAD=y) is
    using a lot of memory.
    
    Each 'struct module' contains an [NR_CPUS] array of full cache lines.
    
    This patch uses existing infrastructure (percpu_modalloc() &
    percpu_modfree()) to allocate percpu space for the refcount storage.
    
    Instead of wasting NR_CPUS*128 bytes (on i386), we now use
    nr_cpu_ids*sizeof(local_t) bytes.
    
    On a typical distro, where NR_CPUS=8, shiping 2000 modules, we reduce
    size of module files by about 2 Mbytes. (1Kb per module)
    
    Instead of having all refcounters in the same memory node - with TLB misses
    because of vmalloc() - this new implementation permits to have better
    NUMA properties, since each  CPU will use storage on its preferred node,
    thanks to percpu storage.
    
    Signed-off-by: default avatarEric Dumazet <dada1@cosmosbay.com>
    Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    720eba31