|
24 | 24 | cpu_perc(void)
|
25 | 25 | {
|
26 | 26 | static long double a[7];
|
27 |
| - long double b[7]; |
| 27 | + long double b[7], sum; |
28 | 28 |
|
29 | 29 | memcpy(b, a, sizeof(b));
|
30 | 30 | /* cpu user nice system idle iowait irq softirq */
|
|
37 | 37 | return NULL;
|
38 | 38 | }
|
39 | 39 |
|
| 40 | + sum = (b[0] + b[1] + b[2] + b[3] + b[4] + b[5] + b[6]) - |
| 41 | + (a[0] + a[1] + a[2] + a[3] + a[4] + a[5] + a[6]); |
| 42 | + |
| 43 | + if (sum == 0) { |
| 44 | + return NULL; |
| 45 | + } |
| 46 | + |
40 | 47 | return bprintf("%d", (int)(100 *
|
41 |
| - ((b[0] + b[1] + b[2] + b[5] + b[6]) - |
42 |
| - (a[0] + a[1] + a[2] + a[5] + a[6])) / |
43 |
| - ((b[0] + b[1] + b[2] + b[3] + b[4] + b[5] + |
44 |
| - b[6]) - |
45 |
| - (a[0] + a[1] + a[2] + a[3] + a[4] + a[5] + |
46 |
| - a[6])))); |
| 48 | + ((b[0] + b[1] + b[2] + b[5] + b[6]) - |
| 49 | + (a[0] + a[1] + a[2] + a[5] + a[6])) / sum)); |
47 | 50 | }
|
48 | 51 | #elif defined(__OpenBSD__)
|
49 | 52 | #include <sys/param.h>
|
|
53 | 56 | const char *
|
54 | 57 | cpu_freq(void)
|
55 | 58 | {
|
56 |
| - int mib[2]; |
57 |
| - uintmax_t freq; |
| 59 | + int freq, mib[2]; |
58 | 60 | size_t size;
|
59 | 61 |
|
60 | 62 | mib[0] = CTL_HW;
|
|
76 | 78 | {
|
77 | 79 | int mib[2];
|
78 | 80 | static uintmax_t a[CPUSTATES];
|
79 |
| - uintmax_t b[CPUSTATES]; |
| 81 | + uintmax_t b[CPUSTATES], sum; |
80 | 82 | size_t size;
|
81 | 83 |
|
82 | 84 | mib[0] = CTL_KERN;
|
|
93 | 95 | return NULL;
|
94 | 96 | }
|
95 | 97 |
|
| 98 | + sum = (a[CP_USER] + a[CP_NICE] + a[CP_SYS] + a[CP_INTR] + a[CP_IDLE]) - |
| 99 | + (b[CP_USER] + b[CP_NICE] + b[CP_SYS] + b[CP_INTR] + b[CP_IDLE]); |
| 100 | + |
| 101 | + if (sum == 0) { |
| 102 | + return NULL; |
| 103 | + } |
| 104 | + |
96 | 105 | return bprintf("%d", 100 *
|
97 |
| - ((a[CP_USER] + a[CP_NICE] + a[CP_SYS] + |
98 |
| - a[CP_INTR]) - |
99 |
| - (b[CP_USER] + b[CP_NICE] + b[CP_SYS] + |
100 |
| - b[CP_INTR])) / |
101 |
| - ((a[CP_USER] + a[CP_NICE] + a[CP_SYS] + |
102 |
| - a[CP_INTR] + a[CP_IDLE]) - |
103 |
| - (b[CP_USER] + b[CP_NICE] + b[CP_SYS] + |
104 |
| - b[CP_INTR] + b[CP_IDLE]))); |
| 106 | + ((a[CP_USER] + a[CP_NICE] + a[CP_SYS] + |
| 107 | + a[CP_INTR]) - |
| 108 | + (b[CP_USER] + b[CP_NICE] + b[CP_SYS] + |
| 109 | + b[CP_INTR])) / sum); |
105 | 110 | }
|
106 | 111 | #elif defined(__FreeBSD__)
|
107 | 112 | #include <sys/param.h>
|
|
130 | 135 | {
|
131 | 136 | size_t size;
|
132 | 137 | static long a[CPUSTATES];
|
133 |
| - long b[CPUSTATES]; |
| 138 | + long b[CPUSTATES], sum; |
134 | 139 |
|
135 | 140 | size = sizeof(a);
|
136 | 141 | memcpy(b, a, sizeof(b));
|
|
143 | 148 | return NULL;
|
144 | 149 | }
|
145 | 150 |
|
| 151 | + sum = (a[CP_USER] + a[CP_NICE] + a[CP_SYS] + a[CP_INTR] + a[CP_IDLE]) - |
| 152 | + (b[CP_USER] + b[CP_NICE] + b[CP_SYS] + b[CP_INTR] + b[CP_IDLE]); |
| 153 | + |
| 154 | + if (sum == 0) { |
| 155 | + return NULL; |
| 156 | + } |
| 157 | + |
146 | 158 | return bprintf("%d", 100 *
|
147 |
| - ((a[CP_USER] + a[CP_NICE] + a[CP_SYS] + |
148 |
| - a[CP_INTR]) - |
149 |
| - (b[CP_USER] + b[CP_NICE] + b[CP_SYS] + |
150 |
| - b[CP_INTR])) / |
151 |
| - ((a[CP_USER] + a[CP_NICE] + a[CP_SYS] + |
152 |
| - a[CP_INTR] + a[CP_IDLE]) - |
153 |
| - (b[CP_USER] + b[CP_NICE] + b[CP_SYS] + |
154 |
| - b[CP_INTR] + b[CP_IDLE]))); |
| 159 | + ((a[CP_USER] + a[CP_NICE] + a[CP_SYS] + |
| 160 | + a[CP_INTR]) - |
| 161 | + (b[CP_USER] + b[CP_NICE] + b[CP_SYS] + |
| 162 | + b[CP_INTR])) / sum); |
155 | 163 | }
|
156 | 164 | #endif
|
0 commit comments