• Vlastimil Babka's avatar
    lib/stackdepot: replace CONFIG_STACK_HASH_ORDER with automatic sizing · f9987921
    Vlastimil Babka authored
    As Linus explained [1], setting the stackdepot hash table size as a config
    option is suboptimal, especially as stackdepot becomes a dependency of
    less "expert" subsystems than initially (e.g.  DRM, networking,
    SLUB_DEBUG):
    
    : (a) it introduces a new compile-time question that isn't sane to ask
    : a regular user, but is now exposed to regular users.
    
    : (b) this by default uses 1MB of memory for a feature that didn't in
    : the past, so now if you have small machines you need to make sure you
    : make a special kernel config for them.
    
    Ideally we would employ rhashtable for fully automatic resizing, which
    should be feasible for many of the new users, but problematic for the
    original users with restricted context that call __stack_depot_save() with
    can_alloc == false, i.e.  KASAN.
    
    However we can easily remove the config option and scale the hash table
    automatically with system memory.  The STACK_HASH_MASK constant becomes
    stack_hash_mask variable and is used only in one mask operation, so the
    overhead should be negligible to none.  For early allocation we can employ
    the existing alloc_large_system_hash() function and perform similar
    scaling for the late allocation.
    
    The existing limits of the config option (between 4k and 1M buckets) are
    preserved, and scaling factor is set to one bucket per 16kB memory so on
    64bit the max 1M buckets (8MB memory) is achieved with 16GB system, while
    a 1GB system will use 512kB.
    
    Because KASAN is reported to need the maximum number of buckets even with
    smaller amounts of memory [2], set it as such when kasan_enabled().
    
    If needed, the automatic scaling could be complemented with a boot-time
    kernel parameter, but it feels pointless to add it without a specific use
    case.
    
    [1] https://lore.kernel.org/all/CAHk-=wjC5nS+fnf6EzRD9yQRJApAhxx7gRB87ZV+pAWo9oVrTg@mail.gmail.com/
    [2] https://lore.kernel.org/all/CACT4Y+Y4GZfXOru2z5tFPzFdaSUd+GFc6KVL=bsa0+1m197cQQ@mail.gmail.com/
    
    Link: https://lkml.kernel.org/r/20220620150249.16814-1-vbabka@suse.czSigned-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Reported-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Acked-by: default avatarDmitry Vyukov <dvyukov@google.com>
    Cc: Marco Elver <elver@google.com>
    Cc: Alexander Potapenko <glider@google.com>
    Cc: Andrey Konovalov <andreyknvl@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    f9987921
Kconfig 16.3 KB