staging/lustre/obdclass: Eliminate hash bucket scans in lu_cache_shrink
The lu_cache_shrink slab shrinker is too slow, accounting for > 90% of the time spent in shrink_slab when allocating huge pages. Most of its time is spent iterating over the buckets in each site's object hash table to compute the number of freeable objects. This iteration is eliminated by adding an lru length count to the lu_site struct. A percpu counter is used to maintain the lru length, so that the lu_site does not need to be locked when an object is accessed through the hash table. A counter is updated whenever an object is added to or deleted from any of the hash table buckets. The number of freeable objects is the sum of the counter values across all cpus. Signed-off-by:Ann Koehler <amk@cray.com> Reviewed-on: http://review.whamcloud.com/14066 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-6365 Reviewed-by:
Mike Pershin <mike.pershin@intel.com> Reviewed-by:
Andreas Dilger <andreas.dilger@intel.com> Reviewed-by:
Alex Zhuravlev <alexey.zhuravlev@intel.com> Signed-off-by:
Oleg Drokin <oleg.drokin@intel.com> Signed-off-by:
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Loading
Please sign in to comment