git: kernel - Fix sys% time reporting
Matthew Dillon
dillon at crater.dragonflybsd.org
Tue Sep 12 20:07:56 PDT 2017
commit c6a766f42233dbe511d3ecfb945a20440c968533
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date: Tue Sep 12 19:50:47 2017 -0700
kernel - Fix sys% time reporting
* Fix system time reporting in systat -vm 1, systat -pv 1, and process
stats.
* Basically the issue is that when coincident systimer interrupts occur,
such as when the statclock, hardclock, and schedclock all fire at the
same time, the statclock must execute first in order to properly detect
the state the current thread is in. If it does not, it may see a lwkt
thread schedule by one of the other systimers and improper dock the
current thread as being in 'system' time.
* The various systimer interrupts could wind up out of phase and
desynchronized due to the tsc_frequency not being perfectly divisible
by the requested frequencies. In addition, various timers could queue
in an undesirable order due to being different integral frequencies of
each other.
* Refactor the systimer API a bit, adding new functions which guarantee
synchronization for nominally requested frequencies and which guarantee
ordering for coincident systimer events (which statclock uses). This
should completely solve the problem.
* Also, if the RQF_INTPEND flag is set, count as interrupt time. This
will give us a slightly more accurate understanding of interrupt overhead
(alternatively we could do this test for just the case where curthread is
the idlethread, which might be more accurate).
Summary of changes:
sys/kern/kern_clock.c | 32 ++++++------
sys/kern/kern_systimer.c | 131 +++++++++++++++++++++++++++++++++++------------
sys/kern/lwkt_thread.c | 15 ++++--
sys/sys/systimer.h | 8 +++
4 files changed, 133 insertions(+), 53 deletions(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/c6a766f42233dbe511d3ecfb945a20440c968533
--
DragonFly BSD source repository
More information about the Commits
mailing list