@@ -30,6 +30,12 @@ namespace o2
3030namespace monitoring
3131{
3232
33+ #ifdef O2_MONITORING_OS_CS8
34+ static constexpr auto SMAPS_FILE = " /proc/self/smaps_rollup" ;
35+ #else
36+ static constexpr auto SMAPS_FILE = " /proc/self/smaps" ;
37+ #endif
38+
3339ProcessMonitor::ProcessMonitor ()
3440{
3541 mPid = static_cast <unsigned int >(::getpid ());
@@ -38,6 +44,7 @@ ProcessMonitor::ProcessMonitor()
3844#ifdef O2_MONITORING_OS_LINUX
3945 setTotalMemory ();
4046#endif
47+ mEnabledMeasurements .fill (false );
4148}
4249
4350void ProcessMonitor::init ()
@@ -46,6 +53,11 @@ void ProcessMonitor::init()
4653 getrusage (RUSAGE_SELF, &mPreviousGetrUsage );
4754}
4855
56+ void ProcessMonitor::enable (Monitor measurement)
57+ {
58+ mEnabledMeasurements [static_cast <short >(measurement)] = true ;
59+ }
60+
4961void ProcessMonitor::setTotalMemory ()
5062{
5163 std::ifstream memInfo (" /proc/meminfo" );
@@ -85,7 +97,7 @@ std::vector<Metric> ProcessMonitor::getMemoryUsage()
8597
8698std::vector<Metric> ProcessMonitor::getSmaps ()
8799{
88- std::ifstream statusStream (" /proc/self/smaps " );
100+ std::ifstream statusStream (SMAPS_FILE );
89101 double pssTotal = 0 ;
90102 double cleanTotal = 0 ;
91103 double dirtyTotal = 0 ;
@@ -147,41 +159,53 @@ double ProcessMonitor::splitStatusLineAndRetriveValue(const std::string& line) c
147159
148160std::vector<Metric> ProcessMonitor::getPerformanceMetrics ()
149161{
150- auto metrics = getCpuAndContexts ();
162+ std::vector<Metric> metrics;
163+ metrics.reserve (12 );
164+ if (mEnabledMeasurements .at (static_cast <short >(Monitor::Cpu))) {
165+ auto cpuMetrics = getCpuAndContexts ();
166+ std::move (cpuMetrics.begin (), cpuMetrics.end (), std::back_inserter (metrics));
167+ }
151168#ifdef O2_MONITORING_OS_LINUX
152- auto memoryMetrics = getMemoryUsage ();
153- std::move (memoryMetrics.begin (), memoryMetrics.end (), std::back_inserter (metrics));
154- auto smapMetrics = getSmaps ();
155- std::move (smapMetrics.begin (), smapMetrics.end (), std::back_inserter (metrics));
169+ if (mEnabledMeasurements .at (static_cast <short >(Monitor::Mem))) {
170+ auto memoryMetrics = getMemoryUsage ();
171+ std::move (memoryMetrics.begin (), memoryMetrics.end (), std::back_inserter (metrics));
172+ }
173+ if (mEnabledMeasurements .at (static_cast <short >(Monitor::Smaps))) {
174+ auto smapMetrics = getSmaps ();
175+ std::move (smapMetrics.begin (), smapMetrics.end (), std::back_inserter (metrics));
176+ }
156177#endif
157178 return metrics;
158179}
159180
160181std::vector<Metric> ProcessMonitor::makeLastMeasurementAndGetMetrics ()
161182{
162183 std::vector<Metric> metrics;
163- getCpuAndContexts ();
164184#ifdef O2_MONITORING_OS_LINUX
165- getMemoryUsage ();
185+ if (mEnabledMeasurements .at (static_cast <short >(Monitor::Mem))) {
186+ getMemoryUsage ();
166187
167- auto avgVmRSS = std::accumulate (mVmRssMeasurements .begin (), mVmRssMeasurements .end (), 0.0 ) /
168- mVmRssMeasurements .size ();
188+ auto avgVmRSS = std::accumulate (mVmRssMeasurements .begin (), mVmRssMeasurements .end (), 0.0 ) /
189+ mVmRssMeasurements .size ();
169190
170- metrics.emplace_back (avgVmRSS, metricsNames[AVG_RESIDENT_SET_SIZE]);
191+ metrics.emplace_back (avgVmRSS, metricsNames[AVG_RESIDENT_SET_SIZE]);
171192
172- auto avgVmSize = std::accumulate (mVmSizeMeasurements .begin (), mVmSizeMeasurements .end (), 0.0 ) /
173- mVmSizeMeasurements .size ();
174- metrics.emplace_back (avgVmSize, metricsNames[AVG_VIRTUAL_MEMORY_SIZE]);
193+ auto avgVmSize = std::accumulate (mVmSizeMeasurements .begin (), mVmSizeMeasurements .end (), 0.0 ) /
194+ mVmSizeMeasurements .size ();
195+ metrics.emplace_back (avgVmSize, metricsNames[AVG_VIRTUAL_MEMORY_SIZE]);
196+ }
175197#endif
198+ if (mEnabledMeasurements .at (static_cast <short >(Monitor::Cpu))) {
199+ getCpuAndContexts ();
176200
177- auto avgCpuUsage = std::accumulate (mCpuPerctange .begin (), mCpuPerctange .end (), 0.0 ) /
178- mCpuPerctange .size ();
179- uint64_t accumulationOfCpuTimeConsumption = std::accumulate (mCpuMicroSeconds .begin (),
180- mCpuMicroSeconds .end (), 0UL );
181-
182- metrics.emplace_back (avgCpuUsage, metricsNames[AVG_CPU_USED_PERCENTAGE]);
183- metrics.emplace_back (accumulationOfCpuTimeConsumption, metricsNames[ACCUMULATED_CPU_TIME]);
201+ auto avgCpuUsage = std::accumulate (mCpuPerctange .begin (), mCpuPerctange .end (), 0.0 ) /
202+ mCpuPerctange .size ();
203+ uint64_t accumulationOfCpuTimeConsumption = std::accumulate (mCpuMicroSeconds .begin (),
204+ mCpuMicroSeconds .end (), 0UL );
184205
206+ metrics.emplace_back (avgCpuUsage, metricsNames[AVG_CPU_USED_PERCENTAGE]);
207+ metrics.emplace_back (accumulationOfCpuTimeConsumption, metricsNames[ACCUMULATED_CPU_TIME]);
208+ }
185209 return metrics;
186210}
187211
0 commit comments