cpu_perc: Port to OpenBSD

In OpenBSD the CPU usage in percent is now computed using KERN_CPTIME
sysctl.
This commit is contained in:
Aaron Marcher 2018-05-06 17:48:37 +02:00
parent efb41724b5
commit 2b82bf0248
2 changed files with 36 additions and 1 deletions

2
README
View file

@ -62,5 +62,5 @@ Porting to OpenBSD is the current goal before thinking about a release.
The following functions are not portable at the moment:
- wifi_{perc,essid}
- cpu_{perc,iowait}
- cpu_iowait
- entropy

View file

@ -68,6 +68,8 @@
return bprintf("%d", perc);
}
#elif defined(__OpenBSD__)
#include <sys/param.h>
#include <sys/sched.h>
#include <sys/sysctl.h>
const char *
@ -89,4 +91,37 @@
return bprintf("%d", freq);
}
const char *
cpu_perc(void)
{
int mib[2], perc;
static int valid;
static long int a[CPUSTATES];
long int b[CPUSTATES];
size_t size;
mib[0] = CTL_KERN;
mib[1] = KERN_CPTIME;
size = sizeof(a);
memcpy(b, a, sizeof(b));
if (sysctl(mib, 2, &a, &size, NULL, 0) == -1) {
fprintf(stderr, "sysctl 'KERN_CPTIME': %s\n", strerror(errno));
return NULL;
}
if (!valid) {
valid = 1;
return NULL;
}
perc = 100 *
((a[CP_USER]+a[CP_NICE]+a[CP_SYS]+a[CP_INTR]) -
(b[CP_USER]+b[CP_NICE]+b[CP_SYS]+b[CP_INTR])) /
((a[CP_USER]+a[CP_NICE]+a[CP_SYS]+a[CP_INTR]+a[CP_IDLE]) -
(b[CP_USER]+b[CP_NICE]+b[CP_SYS]+b[CP_INTR]+b[CP_IDLE]));
return bprintf("%d", perc);
}
#endif