vmtotal consumes significant portion of cpu cycles

Jia-Shiun Li jiashiun at gmail.com
Tue Oct 27 01:34:37 UTC 2015


On Mon, Oct 26, 2015 at 11:56 PM, Allan Jude <allanjude at freebsd.org> wrote:

> On 2015-10-26 09:28, Jia-Shiun Li wrote:
> > Hi all,
> >
> > I noticed that 'sysctl -vm 1' consumes about 5% cpu time on a machine
> with
> > 2x 6-core Xeon E5v3 and 64GB memory. That's a lot for a monitoring tool.
> >
> > After digging a while I found that it is vmtotal() in kernel that
> consumes
> > major cycles. When memory usage is high the cost of vmtotal() rises too.
> It
> > is reproducible with sysctl when memory utilization is high:
> >
> > % time repeat 100 sysctl vm.vmtotal > /dev/null
> > 0.055u 8.102s 0:08.19 99.5% 31+175k 0+0io 0pf+0w
> >
> > % top
> > last pid: 40272;  load averages:  0.32,  4.74,  8.01    up 3+01:19:54
> >  17:23:59
> > 58 processes:  1 running, 57 sleeping
> > CPU:  0.1% user,  0.0% nice,  1.6% system,  0.1% interrupt, 98.3% idle
> > Mem: 4509M Active, 52G Inact, 2819M Wired, 1572M Buf, 2930M Free
> > Swap: 3598M Total, 3598M Free
> >
> >   PID USERNAME    THR PRI NICE   SIZE    RES STATE   C   TIME     CPU
> > COMMAND
> > 46841 root         30  20    0  9248M  7930M kqread  9  20.8H  11.88%
> bhyve
> > 49914 jsli          1  23    0 19320K  3884K select  5 134:08   4.79%
> systat
> >
> >
> > In FreeBSD source tree systat and vmstat are major user. Other tools like
> > bsnmpd may use it  too via sysctl.
> >
> > I don't have idea yet how this can be improved. Shall I create a bug to
> > keep track of it?
> >
> >
> > -Jia-Shiun
> > _______________________________________________
> > freebsd-hackers at freebsd.org mailing list
> > https://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> > To unsubscribe, send any mail to "
> freebsd-hackers-unsubscribe at freebsd.org"
> >
>
> In the first 2 references you say 'sysctl', do you mean 'systat' in all
> instances?
>
>
Allan,

sorry the first one is typo and should be 'systat -vm', or 'systat -vmstat
1'. And the steps to reproduce the unexpected loading can be minimized to
getting sysctl variable vm.vmtotal, which systat uses to get vm and process
stats.

-Jia-shiun.


More information about the freebsd-hackers mailing list