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