On Wed, Feb 26, 2020 at 06:31:28PM +0000, Christoph Lameter wrote: > On Mon, 24 Feb 2020, Roman Gushchin wrote: > > > > I suggest that you simply use the number of partial slabs and multiply > > > them by the number of objects in a slab and use that as a value. Both > > > values are readily available via /sys/kernel/slab/<...>/ > > > > So maybe something like this? > > > > @@ -5907,7 +5907,9 @@ void get_slabinfo(struct kmem_cache *s, struct slabinfo *sinfo) > > for_each_kmem_cache_node(s, node, n) { > > nr_slabs += node_nr_slabs(n); > > nr_objs += node_nr_objs(n); > > +#ifndef CONFIG_SLUB_CPU_PARTIAL > > nr_free += count_partial(n, count_free); > > +#endif > > } > > Why would not having cpu partials screws up the counting of objects in > partial slabs? > > > You dont need kernel mods for this. The numbers are exposed already in > /sys/kernel/slab/xxx. Stepping a little bit back, there are two independent problems: 1) Reading /proc/slabinfo can cause latency spikes in concurrent memory allocations. This is the problem which Wen raised initially. 2) The number of active objects as displayed in /proc/slabinfo is misleadingly big if CONFIG_SLUB_CPU_PARTIAL is set. Maybe mixing them in a single workaround wasn't the best idea, but what do you suggest instead? Thank you! Roman