9#ifndef PERFMONCOMPS_PERFMONMTUTILS_H
10#define PERFMONCOMPS_PERFMONMTUTILS_H
60 const char *
symb2lib(
const char* symbol,
const char* failstr);
69 return std::make_pair(this->stepName, this->compName) < std::make_pair(
sc.stepName,
sc.compName);
237 const std::string& stat)
const {
244 if (it.second.mem_stats.at(stat) >
result) {
245 result = it.second.mem_stats.at(stat);
315 struct timespec ctime;
316 clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ctime);
319 return static_cast<double>(ctime.tv_sec * 1.e3 + ctime.tv_nsec * 1.e-6);
331 return static_cast<double>(std::chrono::system_clock::now().time_since_epoch() / std::chrono::milliseconds(1));
351 static const std::string fileName =
"/proc/self/smaps";
352 std::ifstream smaps_file{fileName};
354 std::string line{}, key{}, value{};
359 smaps_file >> key >> value;
360 smaps_file.ignore(std::numeric_limits<std::streamsize>::max(),
'\n');
363 if (key ==
"Size:") {
364 result[
"vmem"] += std::stol(value);
367 result[
"rss"] += std::stol(value);
370 result[
"pss"] += std::stol(value);
372 if (key ==
"Swap:") {
373 result[
"swap"] += std::stol(value);
387 static const std::string fileName =
"/proc/self/statm";
388 std::ifstream statm_file{fileName};
390 std::string vmem_in_pages{}, line{};
393 if (getline(statm_file, line)) {
394 std::stringstream
ss{line};
398 static const double page_size = sysconf(_SC_PAGESIZE) / 1024.0;
399 result = std::stod(vmem_in_pages) * page_size;
406 for (
const auto& it : map1) {
407 result_map[it.first] = map1.at(it.first) - map2.at(it.first);
417 return (stat(dir.c_str(), &buffer) == 0);
427 struct mallinfo2 m = mallinfo2();
428 return (m.uordblks+m.hblkhd)/1024.0;
436 void * addr = dlsym(RTLD_DEFAULT,symbol);
437 if (!addr)
return failstr;
439 if (!dladdr(addr, &di))
return failstr;
440 if (!di.dli_fname)
return failstr;
MemoryMap_t operator-(const MemoryMap_t &map1, const MemoryMap_t &map2)
std::map< std::string, int64_t > MemoryMap_t
double PMonMT::get_malloc_kb ATLAS_NOT_THREAD_SAFE()
Install fatal handler with default options.
Define macros for attributes used to control the static checker.
bool doesDirectoryExist(const std::string &dir)
double get_thread_cpu_time()
MemoryMap_t get_mem_stats()
const char * symb2lib(const char *symbol, const char *failstr)
double get_malloc_kb ATLAS_NOT_THREAD_SAFE()
double get_process_cpu_time()
void add2CallCount(uint64_t val)
void add2DeltaWall(double val)
double getDeltaVmem() const
double getDeltaCPU() const
uint64_t getCallCount() const
double getDeltaWall() const
void addPointStart(const ComponentMeasurement &meas, const bool doMem=false)
double getDeltaMalloc() const
void add2DeltaCPU(double val)
void add2DeltaVmem(double val)
void add2DeltaMalloc(double val)
void addPointStop(const ComponentMeasurement &meas, const bool doMem=false)
bool capture_memory ATLAS_NOT_THREAD_SAFE()
double getEventLevelCpuTime(const uint64_t event_count) const
void set_wall_time_offset(const double wall_time_offset)
const EventMeasMap_t & getEventLevelData() const
double getEventLevelWallTime(const uint64_t event_count) const
std::map< uint64_t, SnapshotMeasurement > EventMeasMap_t
EventMeasMap_t m_eventLevelDeltaMap
void recordEvent(const SnapshotMeasurement &meas, const int eventCount)
int64_t getEventLevelMemoryMax(const std::string &stat) const
int64_t getEventLevelMemory(const uint64_t event_count, const std::string &stat) const
uint64_t getNMeasurements() const
void addPointStop(const SnapshotMeasurement &meas)
double getDeltaCPU() const
void addPointStart(const SnapshotMeasurement &meas)
MemoryMap_t m_memMonDeltaMap
MemoryMap_t m_memMonTmpMap
void add2DeltaCPU(double val)
void add2DeltaWall(double val)
int64_t getMemMonDeltaMap(const std::string &mem_stat) const
double getDeltaWall() const
bool operator<(const StepComp &sc) const