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);
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to