Skip to content

Commit f8afbc4

Browse files
committed
added readout.percentCpuUsed metric, the one provided by monitoring lib is bad
1 parent 404e02e commit f8afbc4

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

src/ConsumerStats.cxx

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
#include <math.h>
1010
#include <Common/Timer.h>
1111

12+
#include <sys/time.h>
13+
#include <sys/resource.h>
14+
1215

1316

1417
#include <Monitoring/MonitoringFactory.h>
@@ -56,7 +59,31 @@ class ConsumerStats: public Consumer {
5659
int monitoringUpdatePeriod;
5760
std::unique_ptr<Collector> monitoringCollector;
5861

62+
struct rusage previousUsage; // variable to keep track of last getrusage() result
63+
struct rusage currentUsage; // variable to keep track of last getrusage() result
64+
double timePreviousGetrusage=0; // variable storing 'runningTime' value when getrusage was previously called (0 if not called yet)
65+
double cpuUsedOverLastInterval=0; // average CPU usage over latest measurement interval
66+
5967
void publishStats() {
68+
69+
double now=runningTime.getTime();
70+
getrusage(RUSAGE_SELF,&currentUsage);
71+
if (timePreviousGetrusage!=0) {
72+
double tDiff=(now-timePreviousGetrusage)*1000000.0; // delta time in microseconds
73+
double fractionCpuUsed=
74+
(
75+
currentUsage.ru_utime.tv_sec*1000000.0+currentUsage.ru_utime.tv_usec-(previousUsage.ru_utime.tv_sec*1000000.0+previousUsage.ru_utime.tv_usec)
76+
+ currentUsage.ru_stime.tv_sec*1000000.0+currentUsage.ru_stime.tv_usec-(previousUsage.ru_stime.tv_sec*1000000.0+previousUsage.ru_stime.tv_usec)
77+
) / tDiff;
78+
if (monitoringEnabled) {
79+
monitoringCollector->send(fractionCpuUsed*100, "readout.percentCpuUsed");
80+
//theLog.log("CPU used = %.2f %%",100*fractionCpuUsed);
81+
}
82+
}
83+
timePreviousGetrusage=now;
84+
previousUsage=currentUsage;
85+
// todo: per thread? -> add feature in Thread class
86+
6087
if (monitoringEnabled) {
6188
// todo: support for long long types
6289
// https://alice.its.cern.ch/jira/browse/FLPPROT-69

0 commit comments

Comments
 (0)