|
|
@@ -93,6 +93,56 @@ |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
|
|
|
|
return bprintf("%d", 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]))); |
|
|
|
} |
|
|
|
#elif defined(__FreeBSD__) |
|
|
|
#include <sys/param.h> |
|
|
|
#include <sys/sysctl.h> |
|
|
|
#include <devstat.h> |
|
|
|
|
|
|
|
const char * |
|
|
|
cpu_freq(void) |
|
|
|
{ |
|
|
|
int freq; |
|
|
|
size_t size; |
|
|
|
|
|
|
|
size = sizeof(freq); |
|
|
|
/* in MHz */ |
|
|
|
if (sysctlbyname("hw.clockrate", &freq, &size, NULL, 0) == -1 |
|
|
|
|| !size) { |
|
|
|
warn("sysctlbyname 'hw.clockrate':"); |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
|
|
|
|
return fmt_human(freq * 1E6, 1000); |
|
|
|
} |
|
|
|
|
|
|
|
const char * |
|
|
|
cpu_perc(void) |
|
|
|
{ |
|
|
|
size_t size; |
|
|
|
static long a[CPUSTATES]; |
|
|
|
long b[CPUSTATES]; |
|
|
|
|
|
|
|
size = sizeof(a); |
|
|
|
memcpy(b, a, sizeof(b)); |
|
|
|
if (sysctlbyname("kern.cp_time", &a, &size, NULL, 0) == -1 |
|
|
|
|| !size) { |
|
|
|
warn("sysctlbyname 'kern.cp_time':"); |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
if (b[0] == 0) { |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
|
|
|
|
return bprintf("%d", 100 * |
|
|
|
((a[CP_USER] + a[CP_NICE] + a[CP_SYS] + |
|
|
|
a[CP_INTR]) - |
|
|
|