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; });