vmtotal consumes significant portion of cpu cycles

Jia-Shiun Li jiashiun at gmail.com
Mon Oct 26 13:28:46 UTC 2015


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


More information about the freebsd-hackers mailing list