Skip to content

Commit

Permalink
Update cpu collector for OpenBSD 6.4 (prometheus#1094)
Browse files Browse the repository at this point in the history
Starting with (not yet released) OpenBSD 6.4, sysctl KERN_CPTIME2 will
return ENODEV for offline CPUs.

SMT siblings are reported as offline when hw.smt is disabled, which is
the default since one of the later Spectre variants. So this might
affect a few systems.

For more details see:
https://cvsweb.openbsd.org/src/sys/kern/kern_sysctl.c#rev1.348

Signed-off-by: Ralf Horstmann <[email protected]>
  • Loading branch information
ra1fh authored and SuperQ committed Oct 2, 2018
1 parent 5a461d2 commit 9f820bd
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 2 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ Darwin meminfo metrics have been renamed to match Prometheus conventions. #1060
* [BUGFIX] Handle vanishing PIDs #1043
* [BUGFIX] Correctly cast Darwin memory info #1060
* [BUGFIX] Filter systemd units in Go for compatibility with older versions #1083
* [BUGFIX] Update cpu collector for OpenBSD 6.4

## 0.16.0 / 2018-05-15

Expand Down
6 changes: 4 additions & 2 deletions collector/cpu_openbsd.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,12 @@ func (c *cpuCollector) Update(ch chan<- prometheus.Metric) (err error) {
var cp_time [][C.CPUSTATES]C.int64_t
for i := 0; i < int(ncpus); i++ {
cp_timeb, err := unix.SysctlRaw("kern.cp_time2", i)
if err != nil {
if err != nil && err != unix.ENODEV {
return err
}
cp_time = append(cp_time, *(*[C.CPUSTATES]C.int64_t)(unsafe.Pointer(&cp_timeb[0])))
if err != unix.ENODEV {
cp_time = append(cp_time, *(*[C.CPUSTATES]C.int64_t)(unsafe.Pointer(&cp_timeb[0])))
}
}

for cpu, time := range cp_time {
Expand Down

0 comments on commit 9f820bd

Please sign in to comment.