]> git.proxmox.com Git - mirror_spl.git/commit - module/spl/spl-kmem.c
kmem_cache hardening and performance improvements
authorBrian Behlendorf <behlendorf1@llnl.gov>
Sat, 31 Jan 2009 04:54:49 +0000 (20:54 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Sat, 31 Jan 2009 04:54:49 +0000 (20:54 -0800)
commitea3e6ca9e595ebfba82b964ee2eaf1ddd7076f0f
tree7480b87145297f3882ffe18234280512e136cdb4
parent34e71c9e97f4d0d2b3ede850d016a7de558b0f3c
kmem_cache hardening and performance improvements

- Added slab work queue task which gradually ages and free's slabs
  from the cache which have not been used recently.
- Optimized slab packing algorithm to ensure each slab contains the
  maximum number of objects without create to large a slab.
- Fix deadlock, we can never call kv_free() under the skc_lock.  We
  now unlink the objects and slabs from the cache itself and attach
  them to a private work list.  The contents of the list are then
  subsequently freed outside the spin lock.
- Move magazine create/destroy operation on to local cpu.
- Further performace optimizations by minimize the usage of the large
  per-cache skc_lock.  This includes the addition of KMC_BIT_REAPING
  bit mask which is used to prevent concurrent reaping, and to defer
  new slab creation when reaping is occuring.
- Add KMC_BIT_DESTROYING bit mask which is set when the cache is being
  destroyed, this is used to catch any task accessing the cache while
  it is being destroyed.
- Add comments to all the functions and additional comments to try
  and make everything as clear as possible.
- Major cleanup and additions to the SPLAT kmem tests to more
  rigerously stress the cache implementation and look for any problems.
  This includes correctness and performance tests.
- Updated portable work queue interfaces
include/sys/kmem.h
include/sys/sysmacros.h
include/sys/vmsystm.h
module/spl/spl-kmem.c
module/splat/splat-internal.h
module/splat/splat-kmem.c