With r343051 UMA switched from atomic counts to counter(9) and now kernel

reports snap counts of how much a zone alloced and how much it freed.  It
may happen that snap values doesn't match, e.g alloced - freed < 0.
Workaround that in memstat library.

Reported by:	pho
This commit is contained in:
Gleb Smirnoff 2019-02-18 21:27:13 +00:00
parent 63f582e0f5
commit aa43298309

View File

@ -213,6 +213,15 @@ memstat_sysctl_uma(struct memory_type_list *list, int flags)
mtp->mt_numfrees += upsp->ups_frees;
}
/*
* Values for uth_allocs and uth_frees frees are snap.
* It may happen that kernel reports that number of frees
* is greater than number of allocs. See counter(9) for
* details.
*/
if (mtp->mt_numallocs < mtp->mt_numfrees)
mtp->mt_numallocs = mtp->mt_numfrees;
mtp->mt_size = uthp->uth_size;
mtp->mt_rsize = uthp->uth_rsize;
mtp->mt_memalloced = mtp->mt_numallocs * uthp->uth_size;