Messages in this thread | | | Subject | Re: [PATCH] mm/slab: Improve performance of gathering slabinfo stats | From | Aruna Ramakrishna <> | Date | Mon, 1 Aug 2016 18:43:00 -0700 |
| |
Hi Joonsoo,
On 08/01/2016 05:55 PM, Joonsoo Kim wrote: > Your patch updates these counters not only when a slabs are created and > destroyed but also when object is allocated/freed from the slab. This > would hurt runtime performance. >
The counters are not updated for each object allocation/free - only if that allocation/free results in that slab moving from one list (free/partial/full) to another.
>> > slab lists for gathering slabinfo stats, resulting in a dramatic >> > performance improvement. We tested this after growing the dentry cache to >> > 70GB, and the performance improved from 2s to 2ms. > Nice improvement. I can think of an altenative. > > I guess that improvement of your change comes from skipping to iterate > n->slabs_full list. We can achieve it just with introducing only num_slabs. > num_slabs can be updated when a slabs are created and destroyed. >
Yes, slabs_full is typically the largest list.
> We can calculate num_slabs_full by following equation. > > num_slabs_full = num_slabs - num_slabs_partial - num_slabs_free > > Calculating both num_slabs_partial and num_slabs_free by iterating > n->slabs_XXX list would not take too much time.
Yes, this would work too. We cannot avoid traversal of slabs_partial, and slabs_free is usually a small list, so this should give us similar performance benefits. But having separate counters could also be useful for debugging, like the ones defined under CONFIG_DEBUG_SLAB/STATS. Won't that help?
Thanks, Aruna
| |