Wednesday, September 26, 2018

Re: KERN_CPTIME2 [cheloha@openbsd.org: CVS: cvs.openbsd.org: src]

On 2018/09/26 19:16, Stuart Henderson wrote:
> N.B. "Ports using KERN_CPTIME2 will need to be updated."
>
> This is likely to cause a bunch of breakage in things reporting CPU stats
> and time is very short to fix them before release.
>
> If you look after ports that do this, get onto a kernel with this change
> (very new commit so it probably won't be in snaps quite just yet) and
> test ASAP.

Some starting points for investigation,

assorted mozillas
collectd
conky
go
htop
libgtop2
net-snmp
node
pgtop
py-psutil
libuv (+ embedded copies, at least in cmake, maybe more)
zabbix

>
>
>
> ----- Forwarded message from Scott Soule Cheloha <cheloha@openbsd.org> -----
>
> From: Scott Soule Cheloha <cheloha@openbsd.org>
> Date: Wed, 26 Sep 2018 11:23:13 -0600 (MDT)
> To: source-changes@openbsd.org
> Subject: CVS: cvs.openbsd.org: src
>
> CVSROOT: /cvs
> Module name: src
> Changes by: cheloha@cvs.openbsd.org 2018/09/26 11:23:13
>
> Modified files:
> sys/kern : kern_sched.c kern_sysctl.c
> sys/sys : sched.h
> usr.bin/systat : cpu.c vmstat.c
> usr.bin/top : display.c display.h machine.c machine.h top.c
>
> Log message:
> KERN_CPTIME2: set ENODEV if the CPU is offline.
>
> This lets userspace distinguish between idle CPUs and those that are
> not schedulable because hw.smt=0.
>
> A subsequent commit probably needs to add documentation for this
> to sysctl.2 (and perhaps elsewhere) after the dust settles.
>
> Also included here are changes to systat(1) and top(1) that account
> for the ENODEV case and adjust behavior accordingly:
>
> - systat(1)'s cpu view prints placeholder marks ('-') instead of
> percentages for each state if the given CPU is offline.
>
> - systat(1)'s vmstat view checks for offline CPUs when computing the
> machine state total and excludes them, so the CPU usage graph
> only represents the states for online CPUs.
>
> - top(1) does not draw CPU rows for offline CPUs when the view is
> redrawn. If CPUs "go offline", percentages for each state are
> replaced by placeholder marks ('-'); the view will need to be
> redrawn to remove these rows. If CPUs "go online" the view will
> need to be redrawn to show these new CPUs. In "combined CPU" mode,
> the count and the state totals only represent online CPUs.
>
> Ports using KERN_CPTIME2 will need to be updated. The changes
> described above to make systat(1) and top(1) aware of the ENODEV
> case *and* gracefully handle a changing HW_NCPUONLINE while the
> application is running are not necessarily appropriate for each
> and every port.
>
> The changes described above are so extensive in part to demonstrate
> one way a program *might* be made robust to changing CPU availability.
> In particular, changing hw.smt after boot is an extremely rare event,
> and this needs to be weighed when updating ports.
>
> The logic needed to account for the KERN_CPTIME2 ENODEV case is
> very roughly:
>
> if (sysctl(...) == -1) {
> if (errno != ENODEV) {
> /* Actual error occurred. */
> } else {
> /* CPU is offline. */
> }
> } else {
> /* CPU is online and CPU states were set by sysctl(2). */
> }
>
> Prompted by deraadt@. Basic idea for ENODEV from kettenis@. Discussed at
> length with kettenis@. Additional testing by tb@.
>
> No complaints from hackers@ after a week.
>
> ok kettenis@, "I think you should commit [now]" deraadt@
>
>
> ----- End forwarded message -----
>

No comments:

Post a Comment