summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_clock.c
diff options
context:
space:
mode:
authormpi <mpi@openbsd.org>2018-05-14 12:31:21 +0000
committermpi <mpi@openbsd.org>2018-05-14 12:31:21 +0000
commit531d8034253fb82282f0f353c086e9ad827e031c (patch)
tree2ff6558583b14dbec8a9390a12118fb3a9bb8b6e /sys/kern/kern_clock.c
parentRemove duplicated word ("scope scope"). (diff)
downloadwireguard-openbsd-531d8034253fb82282f0f353c086e9ad827e031c.tar.xz
wireguard-openbsd-531d8034253fb82282f0f353c086e9ad827e031c.zip
Stopping counting and reporting CPU time spent spinning on a lock as
system time. Introduce a new CP_SPIN "scheduler state" and modify userland tools to display the % of timer a CPU spents spinning. Based on a diff from jmatthew@, ok pirofti@, bluhm@, visa@, deraadt@
Diffstat (limited to 'sys/kern/kern_clock.c')
-rw-r--r--sys/kern/kern_clock.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/kern/kern_clock.c b/sys/kern/kern_clock.c
index 2aef10f72c5..d77a4191d8c 100644
--- a/sys/kern/kern_clock.c
+++ b/sys/kern/kern_clock.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kern_clock.c,v 1.93 2017/07/22 14:33:45 kettenis Exp $ */
+/* $OpenBSD: kern_clock.c,v 1.94 2018/05/14 12:31:21 mpi Exp $ */
/* $NetBSD: kern_clock.c,v 1.34 1996/06/09 04:51:03 briggs Exp $ */
/*-
@@ -381,6 +381,7 @@ statclock(struct clockframe *frame)
return;
/*
* Came from kernel mode, so we were:
+ * - spinning on a lock
* - handling an interrupt,
* - doing syscall or trap work on behalf of the current
* user process, or
@@ -391,7 +392,9 @@ statclock(struct clockframe *frame)
* so that we know how much of its real time was spent
* in ``non-process'' (i.e., interrupt) work.
*/
- if (CLKF_INTR(frame)) {
+ if (spc->spc_spinning)
+ spc->spc_cp_time[CP_SPIN]++;
+ else if (CLKF_INTR(frame)) {
if (p != NULL)
p->p_iticks++;
spc->spc_cp_time[CP_INTR]++;