Rework per proc and per process time usage accounting
authorclaudio <claudio@openbsd.org>
Mon, 8 Jul 2024 13:17:11 +0000 (13:17 +0000)
committerclaudio <claudio@openbsd.org>
Mon, 8 Jul 2024 13:17:11 +0000 (13:17 +0000)
commit241d67236ebca4e312268d4bd8b47b617b426414
treef48bc3dbc57d73dfd3a12b03bc4075188cc0b863
parent82f77922c94f2a8a45f183d5314b67075786d50e
Rework per proc and per process time usage accounting

For procs (threads) the accounting happens now lockless by curproc using
a generation counter. Callers need to use tu_enter() and tu_leave() for this.
To read the proc p_tu struct tuagg_get_proc() should be used. It ensures
that the values read is consistent.

For processes only the time of exited threads is accumulated in ps_tu and
to get the proper process time usage tuagg_get_process() needs to be called.
tuagg_get_process() will sum up all procs p_tu plus the ps_tu.

This removes another SCHED_LOCK() dependency. Adjust the code in
exit1() and exit2() to correctly account for the full run time.
For this adjust sched_exit() to do the runtime accounting like it is done
in mi_switch().

OK jca@ dlg@
14 files changed:
sys/kern/kern_acct.c
sys/kern/kern_clock.c
sys/kern/kern_exec.c
sys/kern/kern_exit.c
sys/kern/kern_proc.c
sys/kern/kern_resource.c
sys/kern/kern_sched.c
sys/kern/kern_sysctl.c
sys/kern/kern_time.c
sys/kern/sched_bsd.c
sys/kern/tty.c
sys/sys/proc.h
sys/sys/resourcevar.h
sys/sys/sysctl.h