![Logo](../../ATLAS-Logo-Square-Blue-RGB.png) |
ATLAS Offline Software
|
Go to the documentation of this file.
15 #ifndef PERFMONCOMPS_SEMIDETMISC_H
16 #define PERFMONCOMPS_SEMIDETMISC_H
30 #include <unordered_map>
187 static int index(
const std::string& stepName);
191 typedef std::pair<std::string,std::string>
OtherKey;
197 if (
a.size()!=
b.size())
return a.size()<
b.size();
198 if (!
a.empty()&&
a[
a.size()-1]!=
b[
a.size()-1])
199 return a[
a.size()-1]<
b[
a.size()-1];
203 if (
a.first.size()!=
b.first.size())
return a.first.size()<
b.first.size();
204 if (
a.second.size()!=
b.second.size())
return a.second.size()<
b.second.size();
208 typedef std::map<std::string,CompDataStdSteps,FastStrCmp>
MapStdSteps;
228 return ok ?
data : 0;
264 MapStdSteps::const_iterator
m_it;
282 return &(
it->second);
298 MapOtherSteps::const_iterator
m_it;
299 MapOtherSteps::const_iterator
m_itE;
304 FILE*
file = fopen(
"/proc/self/status",
"r");
309 while (fgets(
line, 256,
file) != NULL){
310 if (strncmp(
line,
"VmPeak:", 7) == 0) {
328 while (fgets(
line, 256,
file) != NULL){
329 if (strncmp(
line, fieldname.c_str(), fieldname.size()) == 0) {
330 size_t pos = std::string(
line).find(
':', fieldname.size() );
331 if (
pos==std::string::npos) {
336 bool ignore_nextspace=
true;
342 if (ignore_nextspace)
344 ignore_nextspace=
true;
348 ignore_nextspace=
false;
364 s<<
get_field(
"/proc/cpuinfo",
"model name",
'_')<<
"/"<<
get_field(
"/proc/cpuinfo",
"cache size",
'_');
369 std::string bm=
get_field(
"/proc/cpuinfo",
"bogomips",
' ');
372 return int(
atof(bm.c_str())+0.5);
374 inline const char *
envvar(
const char*
e,
const char * def =
"")
381 if (!
c)
return false;
382 return strncmp(
c,
"1",2)==0;
386 FILE*
file = fopen(
"/proc/stat",
"r");
390 while (fgets(
line, 32,
file) != NULL){
391 if (strncmp(
line,
"btime ", 6) == 0) {
393 sscanf(&(
line[6]),
"%80lu",&
l);
405 int err=gettimeofday(&tv, 0);
409 return 0.001*res_usec;
417 long tick=sysconf(_SC_CLK_TCK);
418 if (tick>=1&&tick<1000000)
422 clock_t
t0=clock(); clock_t
t1=
t0;
while (
t1==
t0)
t1=clock();
427 const double d=strtod(&(
s[0]),0);
if (
d<=0.)
return 0;
430 return 1000.0*(
d*spj+
b);
433 inline const char *
symb2lib(
const char*symbol,
const char * failstr =
"unknown") {
434 void * addr = dlsym(RTLD_DEFAULT,symbol);
435 if (!addr)
return failstr;
437 if (!dladdr(addr, &di))
return failstr;
438 if (!di.dli_fname)
return failstr;
454 int fd =
open(
"/proc/self/statm", O_RDONLY);
460 static const float pg_size_in_kb = sysconf(_SC_PAGESIZE)/1024.0;
465 for (
unsigned i=0;
i+1<
sizeof(
data);++
i)
486 int64_t uordblks_raw =
m.uordblks;
487 if (
sizeof(
m.uordblks)==
sizeof(int32_t)) {
490 static int64_t last_uordblks=
m.uordblks;
491 static int64_t offset_uordblks=0;
492 if (uordblks_raw-last_uordblks>half_range) {
494 offset_uordblks-=2*half_range;
495 }
else if (last_uordblks-uordblks_raw>half_range) {
497 offset_uordblks+=2*half_range;
499 last_uordblks=uordblks_raw;
500 uordblks_raw+=offset_uordblks;
503 int64_t hblkhd_raw =
m.hblkhd;
504 if (
sizeof(
m.hblkhd)==
sizeof(int32_t)) {
507 static int64_t last_hblkhd=
m.hblkhd;
508 static int64_t offset_hblkhd=0;
509 if (hblkhd_raw-last_hblkhd>half_range) {
511 offset_hblkhd-=2*half_range;
512 }
else if (last_hblkhd-hblkhd_raw>half_range) {
514 offset_hblkhd+=2*half_range;
516 last_hblkhd=hblkhd_raw;
517 hblkhd_raw+=offset_hblkhd;
519 return (uordblks_raw+hblkhd_raw)/1024.0;
530 assert(std::numeric_limits<clock_t>::is_integer);
531 if (
sizeof(clock_t)>=
sizeof(int64_t))
535 static clock_t last=clock();
547 m_tmp_dcpu(0.),m_sum_dcpu(0.),
548 m_tmp_dmem(0.),m_sum_dmem(0.),
549 m_tmp_dmal(0.),m_sum_dmal(0.)
560 float dcpu(
m.cpu-m_tmp_dcpu);m_sum_dcpu+=dcpu;
561 float dmem(
m.vmem-m_tmp_dmem);m_sum_dmem+=dmem;
562 float dmal(
m.malloc-m_tmp_dmal);m_sum_dmal+=dmal;
563 m.incrementOffsets(dmem,dmal,dcpu);
572 m_max_dcpu(0.),m_max_dcpu_ientry(0),
573 m_max_dmem(0.),m_max_dmem_ientry(0),
574 m_max_dmal(0.),m_max_dmal_ientry(0)
584 float dcpu(
m.cpu-m_tmp_dcpu);m_sum_dcpu+=dcpu;
585 float dmem(
m.vmem-m_tmp_dmem);m_sum_dmem+=dmem;
586 float dmal(
m.malloc-m_tmp_dmal);m_sum_dmal+=dmal;
587 m.incrementOffsets(dmem,dmal,dcpu);
588 if (dcpu>m_max_dcpu) { m_max_dcpu=dcpu; m_max_dcpu_ientry=val_nevt; }
589 if (dmem>m_max_dmem) { m_max_dmem=dmem; m_max_dmem_ientry=val_nevt; }
590 if (dmal>m_max_dmal) { m_max_dmal=dmal; m_max_dmal_ientry=val_nevt; }
603 if (stepName ==
"evt")
return index_evt;
604 if (stepName ==
"cbk")
return index_cbk;
605 if (stepName ==
"1st")
return index_1st;
606 if (stepName ==
"ini")
return index_ini;
607 if (stepName ==
"fin")
return index_fin;
616 time_t
t =
time(NULL);
618 t+=
static_cast<time_t
>(0.5+0.001*offset_ms);
623 size_t r = strftime(&(
s[0]),25,
"%Y-%m-%dT%H:%M:%S+0000",&ptm);
624 if (
r>0&&
r<25)
s.resize(
r);
625 else s=
"0000-00-00T00:00:00+0000";
634 static const double offset = [&]() {
640 #endif // PERFMONCOMPS_SEMIDETMISC_H
IovVectorMap_t read(const Folder &theFolder, const SelectionCriterion &choice, const unsigned int limit=10)
char data[hepevt_bytes_allocation_ATLAS]
double get_malloc_kb ATLAS_NOT_THREAD_SAFE()
virtual const CompDataBasic * getData(const std::string &compName) const =0
const std::string & stepName() const
void setUTCTimeString(std::string &s, double offset_ms=0)
const MapStdSteps * m_map
const CompDataBasic * getData(const std::string &compName) const
virtual const std::string & stepName() const =0
static constexpr int index_ini
Meas(bool enable_walltime=false)
double get_absolute_wall_ms()
virtual bool extended() const
double sortValMalloc() const
static constexpr int index_fin
double meanDeltaVMEM() const
std::map< OtherKey, CompDataBasic, FastStrCmp > MapOtherSteps
std::vector< ALFA_RawData_p1 > t0
virtual unsigned nComps() const =0
static constexpr int index_evt
std::vector< ALFA_RawDataCollection_p1 > t1
static constexpr int index_other
void addPointStop(Meas &, unsigned val_nevts)
const CompDataBasic * getData(const std::string &compName) const
const std::string m_stepName
float getVal(unsigned i) const
virtual void addPointStart(const Meas &)
unsigned m_max_dmem_ientry
MapOtherSteps::const_iterator m_itE
static constexpr int index_1st
unsigned maxDeltaVMEM_iEntry() const
double meanDeltaMalloc() const
static constexpr unsigned ival_malloc
const std::string & stepName() const
unsigned long system_boot_time_seconds()
bool operator()(const std::string &a, const std::string &b) const
bool operator()(const OtherKey &a, const OtherKey &b) const
void addPointStart(const Meas &)
StepWrapperStd(const char *stepName, const MapStdSteps *m)
const CompDataBasic * getExampleData()
std::pair< std::string, std::string > OtherKey
StepWrapperOther(const std::string &stepName, const MapOtherSteps *m)
const char * envvar(const char *e, const char *def="")
double jobstart_jiffy2unix_ms(const std::string &s)
double PMonSD::get_malloc_kb ATLAS_NOT_THREAD_SAFE()
Install fatal handler with default options.
void incrementOffsets(double pvmem, double pmalloc, double pcpu, double pwall=0)
double sortVal(unsigned i) const
std::string get_field(const char *filename, const std::string &fieldname, char space='_')
bool mallocDisabled() const
virtual void addPointStop(Meas &, unsigned val_nevts=0)
unsigned m_max_dcpu_ientry
unsigned nEntries() const
virtual bool getNext(const std::string *&compName, const CompDataBasic *&)=0
struct mallinfo mallinfo_t
unsigned m_max_dmal_ientry
double maxDeltaVMEM() const
virtual unsigned nComps() const
double atof(std::string_view str)
Converts a string into a double / float.
void setEntries(unsigned n)
double sortValCPU() const
virtual unsigned nComps() const
const char * symb2lib(const char *symbol, const char *failstr="unknown")
void capture ATLAS_NOT_THREAD_SAFE(bool cpufirst=true)
static constexpr int index_cbk
unsigned maxDeltaCPU_iEntry() const
double sortValMemory() const
virtual bool getNext(const std::string *&compName, const CompDataBasic *&data)
const MapOtherSteps * m_map
void captureIfUnused ATLAS_NOT_THREAD_SAFE()
virtual bool extended() const
virtual void iterateReset()=0
void add(const CompDataBasic &other)
static constexpr unsigned ival_vmem
std::string getenv(const std::string &variableName)
get an environment variable
def time(flags, cells_name, *args, **kw)
static constexpr unsigned nvals
MapOtherSteps::const_iterator m_it
const std::string m_stepName
double sortValVMEM() const
MapStdSteps::const_iterator m_it
void get_vmem_rss_kb(double &vmem, double &rss, bool vmemonly=false)
double meanDeltaCPU() const
unsigned maxDeltaMalloc_iEntry() const
int atoi(std::string_view str)
Helper functions to unpack numbers decoded in string into integers and doubles The strings are requir...
static constexpr unsigned ival_cpu
double maxDeltaMalloc() const
CompDataExtended data_evt
std::map< std::string, CompDataStdSteps, FastStrCmp > MapStdSteps
static int index(const std::string &stepName)
Define macros for attributes used to control the static checker.
MapStdSteps::const_iterator m_itE
virtual void iterateReset()
bool envvar_is_set(const char *e)
double maxDeltaCPU() const
bool getNext(const std::string *&compName, const CompDataBasic *&data)
int64_t clock_nooverflow()