svn commit: r331862 - head/sys/vm

Jeff Roberson jeff at FreeBSD.org
Sun Apr 1 04:47:06 UTC 2018


Author: jeff
Date: Sun Apr  1 04:47:05 2018
New Revision: 331862
URL: https://svnweb.freebsd.org/changeset/base/331862

Log:
  Add the flag ZONE_NOBUCKETCACHE.  This flag instructions UMA not to keep
  a cache of fully populated buckets.  This will be used in a follow-on
  commit.
  
  The flag idea was originally from markj.
  
  Reviewed by:	markj, kib
  Tested by:	pho
  Sponsored by:	Netflix, Dell/EMC Isilon

Modified:
  head/sys/vm/uma.h
  head/sys/vm/uma_core.c

Modified: head/sys/vm/uma.h
==============================================================================
--- head/sys/vm/uma.h	Sun Apr  1 04:11:38 2018	(r331861)
+++ head/sys/vm/uma.h	Sun Apr  1 04:47:05 2018	(r331862)
@@ -286,6 +286,10 @@ uma_zone_t uma_zcache_create(char *name, int size, uma
 					 * NUMA aware Zone.  Implements a best
 					 * effort first-touch policy.
 					 */
+#define	UMA_ZONE_NOBUCKETCACHE	0x20000	/*
+					 * Don't cache full buckets.  Limit
+					 * UMA to per-cpu state.
+					 */
 
 /*
  * These flags are shared between the keg and zone.  In zones wishing to add

Modified: head/sys/vm/uma_core.c
==============================================================================
--- head/sys/vm/uma_core.c	Sun Apr  1 04:11:38 2018	(r331861)
+++ head/sys/vm/uma_core.c	Sun Apr  1 04:47:05 2018	(r331862)
@@ -2965,7 +2965,13 @@ zfree_start:
 		/* ub_cnt is pointing to the last free item */
 		KASSERT(bucket->ub_cnt != 0,
 		    ("uma_zfree: Attempting to insert an empty bucket onto the full list.\n"));
-		LIST_INSERT_HEAD(&zdom->uzd_buckets, bucket, ub_link);
+		if ((zone->uz_flags & UMA_ZONE_NOBUCKETCACHE) != 0) {
+			ZONE_UNLOCK(zone);
+			bucket_drain(zone, bucket);
+			bucket_free(zone, bucket, udata);
+			goto zfree_restart;
+		} else
+			LIST_INSERT_HEAD(&zdom->uzd_buckets, bucket, ub_link);
 	}
 
 	/*


More information about the svn-src-all mailing list