cpu_perc: Port to OpenBSD
In OpenBSD the CPU usage in percent is now computed using KERN_CPTIME sysctl.
This commit is contained in:
parent
efb41724b5
commit
2b82bf0248
2
README
2
README
@ -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:
|
The following functions are not portable at the moment:
|
||||||
- wifi_{perc,essid}
|
- wifi_{perc,essid}
|
||||||
- cpu_{perc,iowait}
|
- cpu_iowait
|
||||||
- entropy
|
- entropy
|
||||||
|
@ -68,6 +68,8 @@
|
|||||||
return bprintf("%d", perc);
|
return bprintf("%d", perc);
|
||||||
}
|
}
|
||||||
#elif defined(__OpenBSD__)
|
#elif defined(__OpenBSD__)
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <sys/sched.h>
|
||||||
#include <sys/sysctl.h>
|
#include <sys/sysctl.h>
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
@ -89,4 +91,37 @@
|
|||||||
|
|
||||||
return bprintf("%d", freq);
|
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
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user