[hackers] [slstatus] cpu_perc: Port to OpenBSD || Aaron Marcher

From: <git_AT_suckless.org>
Date: Sun, 6 May 2018 17:49:44 +0200 (CEST)

commit 2b82bf02488147a3e69a715267934f015fe29a43
Author: Aaron Marcher <me_AT_drkhsh.at>
AuthorDate: Sun May 6 17:48:37 2018 +0200
Commit: Aaron Marcher <me_AT_drkhsh.at>
CommitDate: Sun May 6 17:48:37 2018 +0200

    cpu_perc: Port to OpenBSD
    
    In OpenBSD the CPU usage in percent is now computed using KERN_CPTIME
    sysctl.

diff --git a/README b/README
index 0961030..805f541 100644
--- a/README
+++ b/README
_AT_@ -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
diff --git a/components/cpu.c b/components/cpu.c
index e7f4cd9..79bb881 100644
--- a/components/cpu.c
+++ b/components/cpu.c
_AT_@ -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 *
_AT_@ -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
Received on Sun May 06 2018 - 17:49:44 CEST

This archive was generated by hypermail 2.3.0 : Sun May 06 2018 - 18:00:26 CEST