vmstat -m strangeness
John Baldwin
jhb at freebsd.org
Wed Nov 25 17:57:07 UTC 2015
On Tuesday, November 24, 2015 08:32:36 PM Ian Lepore wrote:
> On Tue, 2015-11-24 at 17:10 -0800, John Baldwin wrote:
> > On Tuesday, October 20, 2015 03:59:46 PM Ian Lepore wrote:
> > > root at wand:~ # vmstat -m | egrep "busdma|bounce|devbuf|Type"
> > > Type InUse MemUse HighUse Requests Size(s)
> > > devbuf 125 10K - 166 16,32,64,256,512,1024
> > > busdma 922 116K - 922 128
> > > bounce 385 775K - 385 32,128
> > >
> > > How do 385 allocations of 32 or 128 bytes add up to 775K? The
> > > answer... 768K of individual pages each allocated via
> > > contigmalloc() do
> > > n't show up in that output. Why is that, and is it something that
> > > should be fixed?
> >
> > Hmm. The output is "correct", it's just that these small allocations
> > have
> > relatively high overhead (PAGE_SIZE - 32 for a 32 byte allocation,
> > etc.).
> >
> > Not sure if there's a way to explain (in vmstat output) why the
> > overhead for
> > certain malloc buckets is so high. Perhaps the vmstat(8) manpage
> > could be
> > expanded to explain what MemUse is and list the contigmalloc() case
> > explicitly
> > as one possible reason for high overhead?
> >
>
> I think I wasn't very clear. There are 385 small allocations (mostly
> 32 byte) which are using 7 pages. The other 768 pages were allocated
> by calling contigmalloc() 768 times asking for one page. The
> strangeness is that those pages aren't reflected in that output.
> There's no '4096' category in sizes.
>
> To put it another way, contigmalloc() is accounting for the memory it
> allocates in a way that makes it show up in MemUse but not in Size(s),
> which makes for confusing output. No big deal really, just something I
> noticed.
Oh, that is indeed odd. I'm not sure how one could address that cleanly
since contigmalloc takes arbitrary sizes. (E.g. it wouldn't be really
correct to count a contigmalloc() of 8 pages as 8 1-page allocations
though that is one way we could do this (by treating any contigmalloc()
as N 1-page allocations).)
--
John Baldwin
More information about the freebsd-hackers
mailing list