]> granicus.if.org Git - spl/commit
kmem slab fixes
authorBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 12 Feb 2009 21:32:10 +0000 (13:32 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 12 Feb 2009 21:32:10 +0000 (13:32 -0800)
commit37db7d8cf9936e6d2851a4329c11efcd9f61305c
treef4fe4f3523de9302b80e56d3240a8c6f58f5c0e4
parentf500ccff35a55d04e7f6b8ddb54ff6e54e9c5d70
kmem slab fixes

- Default SPL_KMEM_CACHE_DELAY changed to 15 to match Solaris.
- Aged out slab checking occurs every SPL_KMEM_CACHE_DELAY / 3.
- skc->skc_reap tunable added whichs allows callers of
  spl_slab_reclaim() to cap the number of slabs reclaimed.
  On Solaris all eligible slabs are always reclaimed, and this
  is still the default behavior.  However, I suspect that is
  not always wise for reasons such as in the next comment.
- spl_slab_reclaim() added cond_resched() while walking the
  slab/object free lists.  Soft lockups were observed when
  freeing large numbers of vmalloc'd slabs/objets.
- spl_slab_reclaim() 'sks->sks_ref > 0' check changes from
  incorrect 'break' to 'continue' to ensure all slabs are
  checked.
- spl_cache_age() reworked to avoid a deadlock with
  do_flush_tlb_all() which occured because we slept waiting
  for completion in spl_cache_age().  To waiting for magazine
  reclamation to finish is not required so we no longer wait.
- spl_magazine_create() and spl_magazine_destroy() shifted
  back to using for_each_online_cpu() instead of the
  spl_on_each_cpu() approach which was of course a bad idea
  due to memory allocations which Ricardo pointed out.
include/sys/kmem.h
module/spl/spl-kmem.c