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
This commit is contained in:
Jeff Roberson 2019-08-06 23:04:59 +00:00
parent c168508655
commit eda1b01647
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=350661
2 changed files with 7 additions and 2 deletions

View File

@ -274,6 +274,7 @@ uma_zone_t uma_zcache_create(char *name, int size, uma_ctor ctor, uma_dtor dtor,
* 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

View File

@ -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 @@ zone_ctor(void *mem, int size, void *udata, int flags)
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);