systat(1): vmstat: measure elapsed time with clock_gettime(2) instead of ticks
authorcheloha <cheloha@openbsd.org>
Sun, 4 Dec 2022 18:01:57 +0000 (18:01 +0000)
committercheloha <cheloha@openbsd.org>
Sun, 4 Dec 2022 18:01:57 +0000 (18:01 +0000)
commitbe5c9bf8edd6e653dc889b59d54f26a9013a6965
tree7d8bfc5f30261b8c32fc28038c6e07dbafd49b9f
parent9034200fc383d51770feb9f8473307fc91a23c72
systat(1): vmstat: measure elapsed time with clock_gettime(2) instead of ticks

The vmstat view in systat(1) should not use statclock() ticks to count
elapsed time.  First, ticks are low resolution.  Second, the statclock
is sometimes randomized, so each tick is not necessarily of equal
length.  Third, we're counting ticks from every CPU on the system, so
every rate in the view is divided by the number of CPUs.  For example,
on an amd64 system with 8 CPUs you currently see:

     200 clock

... when the true clock interrupt rate on that system is 1600.

Instead, measure elapsed time with clock_gettime(2).  Use CLOCK_UPTIME
here so we exclude time when the system is suspended.  With this
change we no longer need "stathz" or "hertz".  We can also get rid of
the anachronistic secondary clock failure test.

Prompted by dlg@ and jmatthew@.  deraadt@ says this has been in snaps
since 2022-11-21; no complaints.

Link: https://marc.info/?l=openbsd-tech&m=166898960831136&w=2
ok dlg@ deraadt@
usr.bin/systat/main.c
usr.bin/systat/systat.h
usr.bin/systat/vmstat.c