Hi Jeff and Konstantin,
You have a logical breakage after the domainset patches for malloc. The
size used for allocation statistics is not the same like for freeing
causing messed up "vmstat -m".
Also you should audit the code for zero-sized allocations, because upon
alloc, zero-sized is not counted, while on free it is.
See attached patch.
--HPS
diff --git a/sys/kern/kern_malloc.c b/sys/kern/kern_malloc.c
index eba9fc3e1ef..aab33873741 100644
--- a/sys/kern/kern_malloc.c
+++ b/sys/kern/kern_malloc.c
@@ -669,8 +669,10 @@ malloc_domain(size_t size, int *indxp, struct malloc_type *mtp, int domain,
krequests[size >> KMEM_ZSHIFT]++;
#endif
va = uma_zalloc_domain(zone, NULL, domain, flags);
- if (va != NULL)
+ if (__predict_true(va != NULL)) {
size = zone->uz_size;
+ malloc_type_zone_allocated(mtp, size, indx);
+ }
*indxp = indx;
return ((void *) va);
@@ -699,7 +701,8 @@ malloc_domainset(size_t size, struct malloc_type *mtp, struct domainset *ds,
ret = malloc_domain(size, &indx, mtp, domain, flags);
} while (ret == NULL &&
vm_domainset_iter_policy(&di, &domain) == 0);
- malloc_type_zone_allocated(mtp, ret == NULL ? 0 : size, indx);
+ if (__predict_false(ret == NULL))
+ malloc_type_zone_allocated(mtp, 0, indx);
} else {
/* Policy is handled by kmem. */
ret = malloc_large(&size, ds, flags);
_______________________________________________
freebsd-current@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"