git: kernel - Fix jumbo cluster buffer deadlock

Matthew Dillon dillon at crater.dragonflybsd.org
Thu Jul 24 12:07:46 PDT 2014


commit d5b73e647792df4d820050db50d9709f5bbcfa82
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Thu Jul 24 11:56:16 2014 -0700

    kernel - Fix jumbo cluster buffer deadlock
    
    * mbufjcluster_cache and mbufphdr_jcluster_cache did not have
      a nominal maintainance number set, which causes objcache to
      default to (cluster_limit / 2).  Both of these caches are fed
      from mjclmeta_cache.  The default maintainance value combined
      for these two allows mjclmeta_cache to become completely exhausted.
    
      The exhaustion results in an edge case when combined with the per-cpu
      caches which can deadlock the mjclmeta_cache.  The other mbuf caches
      do not have this problem because they specify maintainance divisors
      of at least 4.
    
    * Implement kern.ipc.mjclph_cachefrac and kern.ipc.mjcl_cachefrac to
      force the two jcluster caches to return more buffers to mjclmeta_cache.
      Default to 4 and 16.
    
    * Force all cachefrac values for all mbuf caches to not be less than 3
      to prevent sysop foot-shooting.
    
    * Also set a fixed cachefrac of 4 for mbuf_cache, mclmeta_cache, and
      mjclmeta_cache.  The default in objcache of 2 (aka 1/2) is overkill.
      (this change is subject to review from Sephe).
    
    Reported-by: joris

Summary of changes:
 sys/kern/uipc_mbuf.c | 49 ++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 40 insertions(+), 9 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/d5b73e647792df4d820050db50d9709f5bbcfa82


-- 
DragonFly BSD source repository



More information about the Commits mailing list