svn commit: r350661 - head/sys/vm

Jeff Roberson jeff at FreeBSD.org
Tue Aug 6 23:05:00 UTC 2019


Author: jeff
Date: Tue Aug  6 23:04:59 2019
New Revision: 350661
URL: https://svnweb.freebsd.org/changeset/base/350661

Log:
  Implement a MINBUCKET zone flag so we can use minimal caching on zones that
  may be expensive to cache.
  
  Reviewed by:	markj, kib
  Sponsored by:		Netflix
  Differential Revision:	https://reviews.freebsd.org/D20930

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

Modified: head/sys/vm/uma.h
==============================================================================
--- head/sys/vm/uma.h	Tue Aug  6 22:36:29 2019	(r350660)
+++ head/sys/vm/uma.h	Tue Aug  6 23:04:59 2019	(r350661)
@@ -274,6 +274,7 @@ uma_zone_t uma_zcache_create(char *name, int size, uma
 					 * NUMA aware Zone.  Implements a best
 					 * effort first-touch policy.
 					 */
+#define	UMA_ZONE_MINBUCKET	0x20000	/* Use smallest buckets. */
 
 /*
  * 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	Tue Aug  6 22:36:29 2019	(r350660)
+++ head/sys/vm/uma_core.c	Tue Aug  6 23:04:59 2019	(r350661)
@@ -209,6 +209,7 @@ struct uma_bucket_zone {
     (((sizeof(void *) * (n)) - sizeof(struct uma_bucket)) / sizeof(void *))
 
 #define	BUCKET_MAX	BUCKET_SIZE(256)
+#define	BUCKET_MIN	BUCKET_SIZE(4)
 
 struct uma_bucket_zone bucket_zones[] = {
 	{ NULL, "4 Bucket", BUCKET_SIZE(4), 4096 },
@@ -1867,9 +1868,12 @@ out:
 	KASSERT((arg->flags & (UMA_ZONE_MAXBUCKET | UMA_ZONE_NOBUCKET)) !=
 	    (UMA_ZONE_MAXBUCKET | UMA_ZONE_NOBUCKET),
 	    ("Invalid zone flag combination"));
-	if ((arg->flags & UMA_ZONE_MAXBUCKET) != 0)
+	if ((arg->flags & UMA_ZONE_MAXBUCKET) != 0) {
 		zone->uz_count = BUCKET_MAX;
-	else if ((arg->flags & UMA_ZONE_NOBUCKET) != 0)
+	} else if ((arg->flags & UMA_ZONE_MINBUCKET) != 0) {
+		zone->uz_count = BUCKET_MIN;
+		zone->uz_count_max = BUCKET_MIN;
+	} else if ((arg->flags & UMA_ZONE_NOBUCKET) != 0)
 		zone->uz_count = 0;
 	else
 		zone->uz_count = bucket_select(zone->uz_size);


More information about the svn-src-head mailing list