Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
PerfMonMTUtils.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 /*
6  * @authors: Alaettin Serhan Mete, Hasan Ozturk - alaettin.serhan.mete@cern.ch, haozturk@cern.ch
7  */
8 
9 #ifndef PERFMONCOMPS_PERFMONMTUTILS_H
10 #define PERFMONCOMPS_PERFMONMTUTILS_H
11 
12 // Thread-safety-checker
14 
15 // PerfMon includes
16 
17 // STL includes
18 #include <dlfcn.h> // for dlsym
19 #include <fcntl.h> // for open function
20 #include <malloc.h> // for mallinfo function
21 #include <sys/stat.h> // to check whether /proc/* exists in the machine
22 
23 #include <chrono>
24 #include <cstdint>
25 #include <ctime>
26 #include <fstream>
27 #include <map>
28 #include <string>
29 
30 typedef std::map<std::string, int64_t> MemoryMap_t; // Component : Memory Measurement(kB)
31 
32 /*
33  * Inline function prototypes
34  */
35 inline MemoryMap_t operator-(const MemoryMap_t& map1, const MemoryMap_t& map2);
36 
37 /*
38  * Necessary tools
39  */
40 namespace PMonMT {
41 
42  // Base methods for collecting data
43  double get_thread_cpu_time();
44  double get_process_cpu_time();
45  double get_wall_time();
46 
47  // Non-efficient memory measurement
49 
50  // Efficient memory measurements
51  double get_vmem();
52 
53  // Simple check if directory exists
54  bool doesDirectoryExist(const std::string& dir);
55 
56  // Malloc memory measurements
57  double get_malloc_kb ATLAS_NOT_THREAD_SAFE ();
58 
59  // Get library name from symbol
60  const char * symb2lib(const char* symbol, const char* failstr);
61 
62  // Step name and Component name pairs. Ex: Initialize - StoreGateSvc
63  struct StepComp {
64  std::string stepName;
65  std::string compName;
66 
67  // Overload < operator, because we are using a custom key(StepComp) for std::map
68  bool operator<(const StepComp& sc) const {
69  return std::make_pair(this->stepName, this->compName) < std::make_pair(sc.stepName, sc.compName);
70  }
71  };
72 
73  // ComponentMeasurement
75 
76  // Variables to store measurements
77  double cpu_time{}, wall_time{}; // Timing
78  double vmem{}, malloc{}; // Memory: Vmem, Malloc
79 
80  // Capture component-level measurements
81  void capture() {
82 
83  // Timing
86  }
87 
88  // Capture component-level memory measurements
89  bool capture_memory ATLAS_NOT_THREAD_SAFE() {
90 
91  // Memory
92  malloc = get_malloc_kb();
93  vmem = get_vmem();
94  return true; // dummy return value for use with thread-checker macros
95  }
96 
97  // Constructor
98  ComponentMeasurement() : cpu_time{0.}, wall_time{0.}, vmem{0.}, malloc{0.} { }
99 
100  }; // End ComponentMeasurement
101 
102  // Component Data
103  struct ComponentData {
104 
105  // These variables are used to calculate and store the component level measurements
107  double m_tmp_cpu{}, m_delta_cpu{};
111 
112  // [Component Level Monitoring] : Start
113  void addPointStart(const ComponentMeasurement& meas, const bool doMem = false) {
114 
115  // Timing
116  m_tmp_cpu = meas.cpu_time;
117  m_tmp_wall = meas.wall_time;
118 
119  // Memory if only necessary
120  if (!doMem) return;
121 
122  // Memory
123  m_tmp_malloc = meas.malloc;
124  m_tmp_vmem = meas.vmem;
125 
126  }
127 
128  // [Component Level Monitoring] : Stop
129  void addPointStop(const ComponentMeasurement& meas, const bool doMem = false) {
130 
131  // Call count
132  m_call_count++;
133 
134  // Timing
135  m_delta_cpu += meas.cpu_time - m_tmp_cpu;
137 
138  // Memory if only necessary
139  if (!doMem) return;
140 
141  // Memory
143  m_delta_vmem += meas.vmem - m_tmp_vmem;
144 
145  }
146 
147  // Convenience methods
148  uint64_t getCallCount() const { return m_call_count; }
150 
151  double getDeltaCPU() const { return m_delta_cpu; }
152  void add2DeltaCPU(double val) { m_delta_cpu += val; }
153 
154  double getDeltaWall() const { return m_delta_wall; }
155  void add2DeltaWall(double val) { m_delta_wall += val; }
156 
157  double getDeltaVmem() const { return m_delta_vmem; }
158  void add2DeltaVmem(double val) { m_delta_vmem += val; }
159 
160  double getDeltaMalloc() const { return m_delta_malloc; }
161  void add2DeltaMalloc(double val) { m_delta_malloc += val; }
162 
163  // Constructor
165  m_tmp_vmem{0.}, m_delta_vmem{0.}, m_tmp_malloc{0.}, m_delta_malloc{0.} { }
166 
167  }; // End ComponentData
168 
169  // Snapshot Measurement
171 
172  // Variables to store measurements
173  double cpu_time{}, wall_time{}; // Timing
174  MemoryMap_t mem_stats; // Memory: Vmem, Rss, Pss, Swap
175 
176  // Capture snapshot measurements
177  void capture() {
178 
179  // Timing
182 
183  // Memory
185 
186  }
187 
188  // Constructor
190  mem_stats["vmem"] = 0; mem_stats["pss"] = 0; mem_stats["rss"] = 0; mem_stats["swap"] = 0;
191  }
192 
193  }; // End SnapshotMeasurement
194 
195  // Event Level Data
196  struct EventLevelData {
197 
198  // This map is used to store the event level measurements
199  typedef std::map<uint64_t, SnapshotMeasurement> EventMeasMap_t; // Event number: Measurement
201 
202  // [Event Level Monitoring] : Record the measurement for the current checkpoint
203  void recordEvent(const SnapshotMeasurement& meas, const int eventCount) {
204 
205  // Timing
206  m_eventLevelDeltaMap[eventCount].cpu_time = meas.cpu_time;
207  m_eventLevelDeltaMap[eventCount].wall_time = meas.wall_time - m_offset_wall;
208 
209  // Memory
210  m_eventLevelDeltaMap[eventCount].mem_stats = meas.mem_stats;
211 
212  }
213 
214  // Wall time offset for event level monitoring
215  double m_offset_wall{};
216 
217  // Convenience methods
218  void set_wall_time_offset(const double wall_time_offset) { m_offset_wall = wall_time_offset; }
219 
221  return m_eventLevelDeltaMap;
222  }
223 
225  return m_eventLevelDeltaMap.size();
226  }
227 
228  double getEventLevelCpuTime(const uint64_t event_count) const {
229  return m_eventLevelDeltaMap.at(event_count).cpu_time;
230  }
231 
232  double getEventLevelWallTime(const uint64_t event_count) const {
233  return m_eventLevelDeltaMap.at(event_count).wall_time;
234  }
235 
236  int64_t getEventLevelMemory(const uint64_t event_count,
237  const std::string& stat) const {
238  return m_eventLevelDeltaMap.at(event_count).mem_stats.at(stat);
239  }
240 
241  int64_t getEventLevelMemoryMax(const std::string& stat) const {
242  int64_t result = 0;
243  for (const auto& it : getEventLevelData()) {
244  if (it.second.mem_stats.at(stat) > result) {
245  result = it.second.mem_stats.at(stat);
246  }
247  }
248  return result;
249  }
250 
251  }; // Add EventLevelData
252 
253  // Snapshot Data
254  struct SnapshotData {
255 
256  // These variables are used to calculate and store the serial component level measurements
257  double m_tmp_cpu{}, m_delta_cpu{};
260 
261  // [Snapshot Level Monitoring] : Start
262  void addPointStart(const SnapshotMeasurement& meas) {
263 
264  // Timing
265  m_tmp_cpu = meas.cpu_time;
266  m_tmp_wall = meas.wall_time;
267 
268  // Non-efficient memory measurements
269  m_memMonTmpMap = meas.mem_stats;
270 
271  }
272 
273  // [Snapshot Level Monitoring] : Stop
274  void addPointStop(const SnapshotMeasurement& meas) {
275 
276  // Timing
277  m_delta_cpu = meas.cpu_time - m_tmp_cpu;
279 
280  // Non-efficient memory measurements
282 
283  }
284 
285  // Convenience methods
286  double getDeltaCPU() const { return m_delta_cpu; }
287  void add2DeltaCPU(double val) { m_delta_cpu += val; }
288 
289  double getDeltaWall() const { return m_delta_wall; }
290  void add2DeltaWall(double val) { m_delta_wall += val; }
291 
292  int64_t getMemMonDeltaMap(const std::string& mem_stat) const {
293  return m_memMonDeltaMap.at(mem_stat);
294  }
295 
296  // Constructor
298  m_memMonTmpMap["vmem"] = 0; m_memMonTmpMap["pss"] = 0; m_memMonTmpMap["rss"] = 0; m_memMonTmpMap["swap"] = 0;
299  m_memMonDeltaMap["vmem"] = 0; m_memMonDeltaMap["pss"] = 0; m_memMonDeltaMap["rss"] = 0; m_memMonDeltaMap["swap"] = 0;
300  }
301 
302  }; // End SnapshotData
303 
304 } // namespace PMonMT
305 
307 // Inline methods:
309 
310 /*
311  * Thread specific CPU time measurement in ms
312  */
314  // Get the thread specific CPU time
315  struct timespec ctime;
316  clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ctime);
317 
318  // Return the measurement in ms
319  return static_cast<double>(ctime.tv_sec * 1.e3 + ctime.tv_nsec * 1.e-6);
320 }
321 
322 /*
323  * Process specific CPU time measurement in ms
324  */
325 inline double PMonMT::get_process_cpu_time() { return static_cast<double>(std::clock() * (1.e3 / CLOCKS_PER_SEC)); }
326 
327 /*
328  * Wall-time measurement since epoch in ms
329  */
330 inline double PMonMT::get_wall_time() {
331  return static_cast<double>(std::chrono::system_clock::now().time_since_epoch() / std::chrono::milliseconds(1));
332 }
333 
334 /*
335  * Memory statistics
336  */
337 
338 // Read from proc's smaps file. It is costly to do this operation too often.
339 // In a realistic reconstruction job, the smaps for the the whole application can get large.
340 // Therefore, this operation might take about 100 ms per call, which is fairly substantial.
341 // However, this is one of the most reliable way to get PSS.
342 // Therefore, keep it as is but don't call it too often!
344  // Result object
346 
347  // Zero initialize
348  result["vmem"] = result["rss"] = result["pss"] = result["swap"] = 0;
349 
350  // This is the input where we read the stats from
351  static const std::string fileName = "/proc/self/smaps";
352  std::ifstream smaps_file{fileName};
353 
354  std::string line{}, key{}, value{};
355 
356  // Loop over the file
357  while (smaps_file) {
358  // Read interesting key value pairs
359  smaps_file >> key >> value;
360  smaps_file.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
361 
362  if(smaps_file) {
363  if (key == "Size:") {
364  result["vmem"] += std::stol(value);
365  }
366  if (key == "Rss:") {
367  result["rss"] += std::stol(value);
368  }
369  if (key == "Pss:") {
370  result["pss"] += std::stol(value);
371  }
372  if (key == "Swap:") {
373  result["swap"] += std::stol(value);
374  }
375  }
376  }
377 
378  return result;
379 }
380 
381 // This operation is less costly than the previous one. Since statm is a much smaller file compared to smaps.
382 inline double PMonMT::get_vmem() {
383  // Result
384  double result = 0.;
385 
386  // This is where we read the stats from
387  static const std::string fileName = "/proc/self/statm";
388  std::ifstream statm_file{fileName};
389 
390  std::string vmem_in_pages{}, line{}; // vmem measured in pages
391 
392  // We simply get the first line
393  if (getline(statm_file, line)) {
394  std::stringstream ss{line};
395  ss >> vmem_in_pages; // The first number in this file is the vmem measured in pages
396  }
397 
398  static const double page_size = sysconf(_SC_PAGESIZE) / 1024.0; // page size in KB
399  result = std::stod(vmem_in_pages) * page_size;
400 
401  return result;
402 }
403 
404 inline MemoryMap_t operator-(const MemoryMap_t& map1, const MemoryMap_t& map2) {
405  MemoryMap_t result_map;
406  for (auto it : map1) {
407  result_map[it.first] = map1.at(it.first) - map2.at(it.first);
408  }
409  return result_map;
410 }
411 
412 /*
413  * Simple check if a given directory exists
414  */
415 inline bool PMonMT::doesDirectoryExist(const std::string& dir) {
416  struct stat buffer;
417  return (stat(dir.c_str(), &buffer) == 0);
418 }
419 
420 /*
421  * Get Malloc (from SemiDetMisc.h)
422  */
423 inline double PMonMT::get_malloc_kb ATLAS_NOT_THREAD_SAFE () {
424 #ifndef __linux
425  return 0.0;
426 #else
427  struct mallinfo2 m = mallinfo2();
428  return (m.uordblks+m.hblkhd)/1024.0;
429 #endif
430 }
431 
432 /*
433  * Get library name from symbol (from SemiDetMisc.h)
434  */
435 inline const char * PMonMT::symb2lib(const char*symbol,const char * failstr = "unknown") {
436  void * addr = dlsym(RTLD_DEFAULT,symbol);
437  if (!addr) return failstr;
438  Dl_info di;
439  if (!dladdr(addr, &di)) return failstr;
440  if (!di.dli_fname) return failstr;
441  return di.dli_fname;
442 }
443 
444 #endif // PERFMONCOMPS_PERFMONMTUTILS_H
PMonMT::ComponentMeasurement::ComponentMeasurement
ComponentMeasurement()
Definition: PerfMonMTUtils.h:98
PMonMT::ComponentData::m_delta_wall
double m_delta_wall
Definition: PerfMonMTUtils.h:108
PMonMT::ComponentData::m_tmp_wall
double m_tmp_wall
Definition: PerfMonMTUtils.h:108
checkFileSG.line
line
Definition: checkFileSG.py:75
PMonMT::ATLAS_NOT_THREAD_SAFE
double get_malloc_kb ATLAS_NOT_THREAD_SAFE()
get_generator_info.result
result
Definition: get_generator_info.py:21
PMonMT::symb2lib
const char * symb2lib(const char *symbol, const char *failstr)
Definition: PerfMonMTUtils.h:435
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
PowhegControl_ttHplus_NLO.ss
ss
Definition: PowhegControl_ttHplus_NLO.py:83
PMonMT::ComponentData::ComponentData
ComponentData()
Definition: PerfMonMTUtils.h:164
PMonMT::ComponentData::addPointStart
void addPointStart(const ComponentMeasurement &meas, const bool doMem=false)
Definition: PerfMonMTUtils.h:113
PMonMT::SnapshotData::getMemMonDeltaMap
int64_t getMemMonDeltaMap(const std::string &mem_stat) const
Definition: PerfMonMTUtils.h:292
PMonMT::EventLevelData
Definition: PerfMonMTUtils.h:196
PMonMT::ComponentData::m_tmp_malloc
double m_tmp_malloc
Definition: PerfMonMTUtils.h:110
PMonMT::get_vmem
double get_vmem()
Definition: PerfMonMTUtils.h:382
PMonMT::SnapshotData::add2DeltaWall
void add2DeltaWall(double val)
Definition: PerfMonMTUtils.h:290
PMonMT::ComponentData::getCallCount
uint64_t getCallCount() const
Definition: PerfMonMTUtils.h:148
PMonMT::StepComp::operator<
bool operator<(const StepComp &sc) const
Definition: PerfMonMTUtils.h:68
PMonMT::ComponentData::add2DeltaWall
void add2DeltaWall(double val)
Definition: PerfMonMTUtils.h:155
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
PMonMT::SnapshotMeasurement
Definition: PerfMonMTUtils.h:170
ATLAS_NOT_THREAD_SAFE
double PMonMT::get_malloc_kb ATLAS_NOT_THREAD_SAFE()
Install fatal handler with default options.
Definition: PerfMonMTUtils.h:423
skel.it
it
Definition: skel.GENtoEVGEN.py:407
PMonMT::StepComp
Definition: PerfMonMTUtils.h:63
PMonMT::ComponentData::m_tmp_cpu
double m_tmp_cpu
Definition: PerfMonMTUtils.h:107
PMonMT::ComponentData::m_delta_vmem
double m_delta_vmem
Definition: PerfMonMTUtils.h:109
athena.value
value
Definition: athena.py:124
PMonMT::SnapshotData::m_tmp_cpu
double m_tmp_cpu
Definition: PerfMonMTUtils.h:257
PMonMT::ComponentData::getDeltaCPU
double getDeltaCPU() const
Definition: PerfMonMTUtils.h:151
PMonMT::get_process_cpu_time
double get_process_cpu_time()
Definition: PerfMonMTUtils.h:325
PMonMT::ComponentMeasurement::ATLAS_NOT_THREAD_SAFE
bool capture_memory ATLAS_NOT_THREAD_SAFE()
Definition: PerfMonMTUtils.h:89
PMonMT::ComponentMeasurement::cpu_time
double cpu_time
Definition: PerfMonMTUtils.h:77
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
PMonMT::ComponentMeasurement
Definition: PerfMonMTUtils.h:74
operator-
MemoryMap_t operator-(const MemoryMap_t &map1, const MemoryMap_t &map2)
Definition: PerfMonMTUtils.h:404
PMonMT::ComponentData::add2DeltaMalloc
void add2DeltaMalloc(double val)
Definition: PerfMonMTUtils.h:161
PMonMT::get_wall_time
double get_wall_time()
Definition: PerfMonMTUtils.h:330
PMonMT::EventLevelData::getEventLevelData
const EventMeasMap_t & getEventLevelData() const
Definition: PerfMonMTUtils.h:220
python.handimod.now
now
Definition: handimod.py:675
createCoolChannelIdFile.buffer
buffer
Definition: createCoolChannelIdFile.py:12
FortranAlgorithmOptions.fileName
fileName
Definition: FortranAlgorithmOptions.py:13
PMonMT::ComponentMeasurement::wall_time
double wall_time
Definition: PerfMonMTUtils.h:77
PMonMT::SnapshotData::add2DeltaCPU
void add2DeltaCPU(double val)
Definition: PerfMonMTUtils.h:287
PMonMT::EventLevelData::getEventLevelMemoryMax
int64_t getEventLevelMemoryMax(const std::string &stat) const
Definition: PerfMonMTUtils.h:241
PMonMT::SnapshotData::m_delta_cpu
double m_delta_cpu
Definition: PerfMonMTUtils.h:257
PMonMT::SnapshotMeasurement::wall_time
double wall_time
Definition: PerfMonMTUtils.h:173
PMonMT::ComponentData::add2DeltaVmem
void add2DeltaVmem(double val)
Definition: PerfMonMTUtils.h:158
xAOD::uint64_t
uint64_t
Definition: EventInfo_v1.cxx:123
PMonMT::SnapshotMeasurement::SnapshotMeasurement
SnapshotMeasurement()
Definition: PerfMonMTUtils.h:189
PMonMT::ComponentData::getDeltaWall
double getDeltaWall() const
Definition: PerfMonMTUtils.h:154
PMonMT::ComponentData::m_call_count
uint64_t m_call_count
Definition: PerfMonMTUtils.h:106
PMonMT::SnapshotMeasurement::capture
void capture()
Definition: PerfMonMTUtils.h:177
PMonMT::ComponentData
Definition: PerfMonMTUtils.h:103
PMonMT::ComponentData::m_delta_cpu
double m_delta_cpu
Definition: PerfMonMTUtils.h:107
beamspotman.stat
stat
Definition: beamspotman.py:266
PMonMT::EventLevelData::m_eventLevelDeltaMap
EventMeasMap_t m_eventLevelDeltaMap
Definition: PerfMonMTUtils.h:200
beamspotman.dir
string dir
Definition: beamspotman.py:623
PMonMT::EventLevelData::m_offset_wall
double m_offset_wall
Definition: PerfMonMTUtils.h:215
PMonMT::SnapshotData
Definition: PerfMonMTUtils.h:254
PMonMT::SnapshotData::SnapshotData
SnapshotData()
Definition: PerfMonMTUtils.h:297
PMonMT::SnapshotData::m_memMonDeltaMap
MemoryMap_t m_memMonDeltaMap
Definition: PerfMonMTUtils.h:259
PMonMT::StepComp::stepName
std::string stepName
Definition: PerfMonMTUtils.h:64
PMonMT::EventLevelData::getEventLevelMemory
int64_t getEventLevelMemory(const uint64_t event_count, const std::string &stat) const
Definition: PerfMonMTUtils.h:236
PMonMT::get_mem_stats
MemoryMap_t get_mem_stats()
Definition: PerfMonMTUtils.h:343
PMonMT::ComponentMeasurement::vmem
double vmem
Definition: PerfMonMTUtils.h:78
PMonMT::ComponentData::m_tmp_vmem
double m_tmp_vmem
Definition: PerfMonMTUtils.h:109
PMonMT::SnapshotMeasurement::mem_stats
MemoryMap_t mem_stats
Definition: PerfMonMTUtils.h:174
PMonMT::EventLevelData::set_wall_time_offset
void set_wall_time_offset(const double wall_time_offset)
Definition: PerfMonMTUtils.h:218
PMonMT::ComponentData::getDeltaVmem
double getDeltaVmem() const
Definition: PerfMonMTUtils.h:157
PMonMT::EventLevelData::getNMeasurements
uint64_t getNMeasurements() const
Definition: PerfMonMTUtils.h:224
PMonMT::SnapshotData::m_delta_wall
double m_delta_wall
Definition: PerfMonMTUtils.h:258
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
PMonMT::ComponentMeasurement::malloc
double malloc
Definition: PerfMonMTUtils.h:78
PMonMT::ComponentData::add2DeltaCPU
void add2DeltaCPU(double val)
Definition: PerfMonMTUtils.h:152
PMonMT::ComponentData::getDeltaMalloc
double getDeltaMalloc() const
Definition: PerfMonMTUtils.h:160
MemoryMap_t
std::map< std::string, int64_t > MemoryMap_t
Definition: PerfMonMTUtils.h:30
PMonMT::SnapshotData::addPointStart
void addPointStart(const SnapshotMeasurement &meas)
Definition: PerfMonMTUtils.h:262
PMonMT::ComponentData::add2CallCount
void add2CallCount(uint64_t val)
Definition: PerfMonMTUtils.h:149
PMonMT::StepComp::compName
std::string compName
Definition: PerfMonMTUtils.h:65
PMonMT::SnapshotData::addPointStop
void addPointStop(const SnapshotMeasurement &meas)
Definition: PerfMonMTUtils.h:274
PMonMT::ComponentData::addPointStop
void addPointStop(const ComponentMeasurement &meas, const bool doMem=false)
Definition: PerfMonMTUtils.h:129
PMonMT::SnapshotData::m_tmp_wall
double m_tmp_wall
Definition: PerfMonMTUtils.h:258
PMonMT::SnapshotData::getDeltaWall
double getDeltaWall() const
Definition: PerfMonMTUtils.h:289
PMonMT::get_thread_cpu_time
double get_thread_cpu_time()
Definition: PerfMonMTUtils.h:313
checker_macros.h
Define macros for attributes used to control the static checker.
PMonMT::SnapshotMeasurement::cpu_time
double cpu_time
Definition: PerfMonMTUtils.h:173
PMonMT::EventLevelData::EventMeasMap_t
std::map< uint64_t, SnapshotMeasurement > EventMeasMap_t
Definition: PerfMonMTUtils.h:199
PMonMT::doesDirectoryExist
bool doesDirectoryExist(const std::string &dir)
Definition: PerfMonMTUtils.h:415
PMonMT::ComponentMeasurement::capture
void capture()
Definition: PerfMonMTUtils.h:81
PMonMT::SnapshotData::getDeltaCPU
double getDeltaCPU() const
Definition: PerfMonMTUtils.h:286
PMonMT::EventLevelData::getEventLevelWallTime
double getEventLevelWallTime(const uint64_t event_count) const
Definition: PerfMonMTUtils.h:232
PMonMT::SnapshotData::m_memMonTmpMap
MemoryMap_t m_memMonTmpMap
Definition: PerfMonMTUtils.h:259
PMonMT::EventLevelData::recordEvent
void recordEvent(const SnapshotMeasurement &meas, const int eventCount)
Definition: PerfMonMTUtils.h:203
PMonMT
Definition: PerfMonMTUtils.h:40
PMonMT::ComponentData::m_delta_malloc
double m_delta_malloc
Definition: PerfMonMTUtils.h:110
PMonMT::EventLevelData::getEventLevelCpuTime
double getEventLevelCpuTime(const uint64_t event_count) const
Definition: PerfMonMTUtils.h:228
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37