On Mon, Apr 18, 2022 at 12:27:36PM +0300, Mike Rapoport wrote: > On Fri, Apr 15, 2022 at 05:27:51PM -0700, Roman Gushchin wrote: > > There are 50+ different shrinkers in the kernel, many with their own bells and > > whistles. Under the memory pressure the kernel applies some pressure on each of > > them in the order of which they were created/registered in the system. Some > > of them can contain only few objects, some can be quite large. Some can be > > effective at reclaiming memory, some not. > > > > The only existing debugging mechanism is a couple of tracepoints in > > do_shrink_slab(): mm_shrink_slab_start and mm_shrink_slab_end. They aren't > > covering everything though: shrinkers which report 0 objects will never show up, > > there is no support for memcg-aware shrinkers. Shrinkers are identified by their > > scan function, which is not always enough (e.g. hard to guess which super > > block's shrinker it is having only "super_cache_scan"). They are a passive > > mechanism: there is no way to call into counting and scanning of an individual > > shrinker and profile it. > > > > To provide a better visibility and debug options for memory shrinkers > > this patchset introduces a /sys/kernel/shrinker interface, to some extent > > similar to /sys/kernel/slab. > > Wouldn't debugfs better fit the purpose of shrinker debugging? I think sysfs fits better, but not a very strong opinion. Even though the interface is likely not very useful for the general public, big cloud instances might wanna enable it to gather statistics (and it's certainly what we gonna do at Facebook) and to provide additional data when something is off. They might not have debugfs mounted. And it's really similar to /sys/kernel/slab. Are there any reasons why debugfs is preferable? Thanks!