Linux CPU utilization improvement, #4039
Ylian Saint-Hilaire committed
May 25, 2022 at 10:04 UTC
1188f0711f48f9f56b9fd574b4d34ab1d51c6abd
2 files changed
+42
-28
agents/modules_meshcmd/sysinfo.js
+21
-14
@@ -106,32 +106,39 @@ function windows_memUtilization()
106
return (ret);
107
}
108
109
-function linux_cpuUtilization()
110
-{
109
+var cpuLastIdle = [];
110
+var cpuLastSum = [];
111
+function linux_cpuUtilization() {
112
var ret = { cpus: [] };
113
var info = require('fs').readFileSync('/proc/stat');
114
var lines = info.toString().split('\n');
115
var columns;
116
var x, y;
116
- var sum, idle, utilization;
117
- for (var i in lines)
118
- {
117
+ var cpuNo = 0;
118
+ var currSum, currIdle, utilization;
119
+ for (var i in lines) {
120
columns = lines[i].split(' ');
121
if (!columns[0].startsWith('cpu')) { break; }
122
122
- x = 0, sum = 0;
123
+ x = 0, currSum = 0;
124
while (columns[++x] == '');
124
- for (y = x; y < columns.length; ++y) { sum += parseInt(columns[y]); }
125
- idle = parseInt(columns[3 + x]);
126
- utilization = (100 - ((idle / sum) * 100)); //.toFixed(2);
127
- if (!ret.total)
128
- {
125
+ for (y = x; y < columns.length; ++y) { currSum += parseInt(columns[y]); }
126
+ currIdle = parseInt(columns[3 + x]);
127
+
128
+ var diffIdle = currIdle - cpuLastIdle[cpuNo];
129
+ var diffSum = currSum - cpuLastSum[cpuNo];
130
+
131
+ utilization = (100 - ((diffIdle / diffSum) * 100));
132
+
133
+ cpuLastSum[cpuNo] = currSum;
134
+ cpuLastIdle[cpuNo] = currIdle;
135
+
136
+ if (!ret.total) {
137
ret.total = utilization;
130
- }
131
- else
132
- {
138
+ } else {
139
ret.cpus.push(utilization);
140
}
141
+ ++cpuNo;
142
}
143
144
var p = new promise(function (res, rej) { this._res = res; this._rej = rej; });
agents/modules_meshcore/sysinfo.js
+21
-14
@@ -106,32 +106,39 @@ function windows_memUtilization()
106
return (ret);
107
}
108
109
-function linux_cpuUtilization()
110
-{
109
+var cpuLastIdle = [];
110
+var cpuLastSum = [];
111
+function linux_cpuUtilization() {
112
var ret = { cpus: [] };
113
var info = require('fs').readFileSync('/proc/stat');
114
var lines = info.toString().split('\n');
115
var columns;
116
var x, y;
116
- var sum, idle, utilization;
117
- for (var i in lines)
118
- {
117
+ var cpuNo = 0;
118
+ var currSum, currIdle, utilization;
119
+ for (var i in lines) {
120
columns = lines[i].split(' ');
121
if (!columns[0].startsWith('cpu')) { break; }
122
122
- x = 0, sum = 0;
123
+ x = 0, currSum = 0;
124
while (columns[++x] == '');
124
- for (y = x; y < columns.length; ++y) { sum += parseInt(columns[y]); }
125
- idle = parseInt(columns[3 + x]);
126
- utilization = (100 - ((idle / sum) * 100)); //.toFixed(2);
127
- if (!ret.total)
128
- {
125
+ for (y = x; y < columns.length; ++y) { currSum += parseInt(columns[y]); }
126
+ currIdle = parseInt(columns[3 + x]);
127
+
128
+ var diffIdle = currIdle - cpuLastIdle[cpuNo];
129
+ var diffSum = currSum - cpuLastSum[cpuNo];
130
+
131
+ utilization = (100 - ((diffIdle / diffSum) * 100));
132
+
133
+ cpuLastSum[cpuNo] = currSum;
134
+ cpuLastIdle[cpuNo] = currIdle;
135
+
136
+ if (!ret.total) {
137
ret.total = utilization;
130
- }
131
- else
132
- {
138
+ } else {
139
ret.cpus.push(utilization);
140
}
141
+ ++cpuNo;
142
}
143
144
var p = new promise(function (res, rej) { this._res = res; this._rej = rej; });