The Gaudi Framework  v36r16 (ea80daf8)
PerfMonAuditor Class Reference
Inheritance diagram for PerfMonAuditor:
Collaboration diagram for PerfMonAuditor:

Public Member Functions

void before (StandardEventType evt, INamedInterface *alg) override
 
void after (StandardEventType evt, INamedInterface *alg, const StatusCode &sc) override
 
StatusCode initialize () override
 
StatusCode finalize () override
 
int is_nehalem ()
 
 PerfMonAuditor (const std::string &name, ISvcLocator *pSvc)
 
virtual ~PerfMonAuditor ()
 
void after (StandardEventType, INamedInterface *, const StatusCode &) override
 
void after (StandardEventType, const std::string &, const StatusCode &) override
 
void after (CustomEventTypeRef, INamedInterface *, const StatusCode &) override
 
void after (CustomEventTypeRef, const std::string &, const StatusCode &) override
 
void before (StandardEventType, INamedInterface *) override
 The following methods are meant to be implemented by the child class... More...
 
void before (StandardEventType, const std::string &) override
 
void before (CustomEventTypeRef, INamedInterface *) override
 
void before (CustomEventTypeRef, const std::string &) override
 
- Public Member Functions inherited from Auditor
 Auditor (std::string name, ISvcLocator *svcloc)
 Constructor. More...
 
 Auditor (const Auditor &a)=delete
 
Auditoroperator= (const Auditor &rhs)=delete
 
StatusCode sysInitialize () override
 Initialization method invoked by the framework. More...
 
StatusCode sysFinalize () override
 Finalization method invoked by the framework. More...
 
void before (StandardEventType, INamedInterface *) override
 The following methods are meant to be implemented by the child class... More...
 
void before (StandardEventType, const std::string &) override
 
void before (CustomEventTypeRef, INamedInterface *) override
 
void before (CustomEventTypeRef, const std::string &) override
 
void after (StandardEventType, INamedInterface *, const StatusCode &) override
 
void after (StandardEventType, const std::string &, const StatusCode &) override
 
void after (CustomEventTypeRef, INamedInterface *, const StatusCode &) override
 
void after (CustomEventTypeRef, const std::string &, const StatusCode &) override
 
void beforeInitialize (INamedInterface *) override
 
void afterInitialize (INamedInterface *) override
 
void beforeReinitialize (INamedInterface *) override
 
void afterReinitialize (INamedInterface *) override
 
void beforeExecute (INamedInterface *) override
 
void afterExecute (INamedInterface *, const StatusCode &) override
 
void beforeFinalize (INamedInterface *) override
 
void afterFinalize (INamedInterface *) override
 
const std::stringname () const override
 
bool isEnabled () const override
 
SmartIF< ISvcLocator > & serviceLocator () const override
 The standard service locator. More...
 
template<class T >
StatusCode service (std::string_view name, T *&svc, bool createIf=false) const
 Access a service by name, creating it if it doesn't already exist. More...
 
template<class T = IService>
SmartIF< T > service (std::string_view name, bool createIf=false) const
 
- Public Member Functions inherited from PropertyHolder< CommonMessaging< implements< IAuditor, IProperty > > >
 PropertyHolder ()=default
 
Gaudi::Details::PropertyBasedeclareProperty (Gaudi::Details::PropertyBase &prop)
 Declare a property. More...
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, TYPE &value, const std::string &doc="none")
 Helper to wrap a regular data member and use it as a regular property. More...
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, Gaudi::Property< TYPE, VERIFIER, HANDLERS > &prop, const std::string &doc="none")
 Declare a PropertyBase instance setting name and documentation. More...
 
Gaudi::Details::PropertyBasedeclareRemoteProperty (const std::string &name, IProperty *rsvc, const std::string &rname="")
 Declare a remote property. More...
 
StatusCode setProperty (const std::string &name, const Gaudi::Details::PropertyBase &p) override
 set the property from another property with a different name More...
 
StatusCode setProperty (const std::string &s) override
 set the property from the formatted string More...
 
StatusCode setProperty (const Gaudi::Details::PropertyBase &p)
 Set the property from a property. More...
 
virtual StatusCode setProperty (const std::string &name, const Gaudi::Details::PropertyBase &p)=0
 Set the property from a property with a different name. More...
 
virtual StatusCode setProperty (const std::string &s)=0
 Set the property by string. More...
 
StatusCode setProperty (const std::string &name, const char *v)
 Special case for string literals. More...
 
StatusCode setProperty (const std::string &name, const std::string &v)
 Special case for std::string. More...
 
StatusCode setProperty (const std::string &name, const TYPE &value)
 set the property form the value More...
 
StatusCode setPropertyRepr (const std::string &n, const std::string &r) override
 set the property from name and value string representation More...
 
StatusCode getProperty (Gaudi::Details::PropertyBase *p) const override
 get the property More...
 
const Gaudi::Details::PropertyBasegetProperty (std::string_view name) const override
 get the property by name More...
 
StatusCode getProperty (std::string_view n, std::string &v) const override
 convert the property to the string More...
 
const std::vector< Gaudi::Details::PropertyBase * > & getProperties () const override
 get all properties More...
 
bool hasProperty (std::string_view name) const override
 Return true if we have a property with the given name. More...
 
Gaudi::Details::PropertyBaseproperty (std::string_view name) const
 \fixme property and bindPropertiesTo should be protected More...
 
void bindPropertiesTo (Gaudi::Interfaces::IOptionsSvc &optsSvc)
 
 PropertyHolder (const PropertyHolder &)=delete
 
PropertyHolderoperator= (const PropertyHolder &)=delete
 
- Public Member Functions inherited from CommonMessaging< implements< IAuditor, IProperty > >
MSG::Level msgLevel () const
 get the cached level (originally extracted from the embedded MsgStream) More...
 
bool msgLevel (MSG::Level lvl) const
 get the output level from the embedded MsgStream More...
 

Private Types

typedef GaudiUtils::VectorMap< const INamedInterface *, int > Map
 

Private Member Functions

void i_beforeInitialize (INamedInterface *alg)
 
void i_afterInitialize (INamedInterface *alg)
 
void i_beforeExecute (INamedInterface *alg)
 
void i_afterExecute (INamedInterface *alg)
 
 PerfMonAuditor ()
 
 PerfMonAuditor (const PerfMonAuditor &)
 
PerfMonAuditoroperator= (const PerfMonAuditor &)
 
void startpm ()
 
void pausepm ()
 
void stoppm ()
 
void finalizepm ()
 
int detect_unavail_pmu_regs (int fd, pfmlib_regmask_t *r_pmcs, pfmlib_regmask_t *r_pmds)
 
int detect_unavail_pmcs (int fd, pfmlib_regmask_t *r_pmcs)
 
void pfm_bv_set (uint64_t *bv, uint16_t rnum)
 
int pfm_bv_isset (uint64_t *bv, uint16_t rnum)
 
void pfm_bv_copy (uint64_t *d, uint64_t *j, uint16_t n)
 
void start_smpl ()
 
void stop_smpl ()
 
void finalize_smpl ()
 

Static Private Member Functions

static void process_smpl_buf (pfm_dfl_smpl_hdr_t *hdr, size_t entry_size)
 
static void sigio_handler (int, siginfo_t *, void *)
 

Private Attributes

PFMon & m_pfm
 
Map m_map
 
int m_indent
 
bool m_inEvent
 
int is_nehalem_ret
 
pfmlib_input_param_t inp
 
pfmlib_output_param_t outp
 
pfarg_ctx_t ctx
 
pfarg_pmd_t pd [NUM_PMDS]
 
pfarg_pmc_t pc [NUM_PMCS]
 
pfarg_load_t load_arg
 
int fd
 
unsigned int i
 
int ret { 0 }
 
std::string event_str [MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS]
 
std::string prefix
 
std::string family
 
char event_cstr [MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS][MAX_EVENT_NAME_LENGTH]
 
char prefix_cstr [MAX_PREFIX_NAME_LENGTH]
 
unsigned int ph_ev_count { 0 }
 
bool inv [MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS]
 
unsigned int cmask [MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS]
 
unsigned int start_at_event
 
pfmlib_core_input_param_t params
 
pfmlib_nhm_input_param_t nhm_params
 
int used_counters_number
 
bool nehalem
 
bool westmere
 
bool core
 
bool sampling
 
pfm_dfl_smpl_arg_t buf_arg
 
pfarg_load_t load_args
 
void * buf_addr
 
unsigned num_counters
 
unsigned int max_pmd
 
pfmlib_options_t pfmlib_options
 
int level
 
bool first_alg
 
std::string first_alg_name
 
bool event_count_reached
 

Additional Inherited Members

- Public Types inherited from Auditor
using Factory = Gaudi::PluginService::Factory< IAuditor *(const std::string &, ISvcLocator *)>
 
- Public Types inherited from PropertyHolder< CommonMessaging< implements< IAuditor, IProperty > > >
using PropertyHolderImpl = PropertyHolder< CommonMessaging< implements< IAuditor, IProperty > > >
 Typedef used to refer to this class from derived classes, as in. More...
 
- Public Types inherited from CommonMessaging< implements< IAuditor, IProperty > >
using base_class = CommonMessaging
 
- Protected Member Functions inherited from CommonMessaging< implements< IAuditor, IProperty > >
MSG::Level setUpMessaging () const
 Set up local caches. More...
 
MSG::Level resetMessaging ()
 Reinitialize internal states. More...
 
void updateMsgStreamOutputLevel (int level)
 Update the output level of the cached MsgStream. More...
 

Detailed Description

Performance Monitoring Auditor that uses Perfmon2 library to monitor algorithms.

Author
Daniele Francesco KRUSE danie.nosp@m.le.f.nosp@m.rance.nosp@m.sco..nosp@m.kruse.nosp@m.@cer.nosp@m.n.ch
Date
2009-10-28

Definition at line 208 of file PerfMonAuditor.cpp.

Member Typedef Documentation

◆ Map

Definition at line 360 of file PerfMonAuditor.cpp.

Constructor & Destructor Documentation

◆ PerfMonAuditor() [1/3]

PerfMonAuditor::PerfMonAuditor ( const std::string name,
ISvcLocator pSvc 
)
inline

Definition at line 281 of file PerfMonAuditor.cpp.

282  : // standard constructor
283  Auditor( name, pSvc )
284  , m_pfm( PFMon::instance() )
285  , m_map()
286  , m_indent( 0 )
287  , m_inEvent( false ) {
289  declareProperty( "EVENT0", event_str[0] );
290  declareProperty( "EVENT1", event_str[1] );
291  declareProperty( "EVENT2", event_str[2] );
292  declareProperty( "EVENT3", event_str[3] );
293  declareProperty( "FAMILY", family );
294  declareProperty( "PREFIX", prefix );
295  declareProperty( "INV0", inv[0] );
296  declareProperty( "INV1", inv[1] );
297  declareProperty( "INV2", inv[2] );
298  declareProperty( "INV3", inv[3] );
299  declareProperty( "CMASK0", cmask[0] );
300  declareProperty( "CMASK1", cmask[1] );
301  declareProperty( "CMASK2", cmask[2] );
302  declareProperty( "CMASK3", cmask[3] );
303  declareProperty( "SP0", sp[0] );
304  declareProperty( "SP1", sp[1] );
305  declareProperty( "SP2", sp[2] );
306  declareProperty( "SP3", sp[3] );
307  declareProperty( "SAMPLE", sampling );
308  declareProperty( "START_AT_EVENT", start_at_event );
309  declareProperty( "IS_NEHALEM", is_nehalem_ret );
310 
312  /*
313  // loading functions from PFM library
314  void* handle = dlopen("libpfm.so", RTLD_NOW);
315  if (!handle) {
316  // error() << "Cannot open library: " << dlerror() << endmsg;
317  }
318  typedef void (*hello_t)();
319  hello_t hello = (hello_t) dlsym(handle, "hello");
320  if (!hello) {
321  // error() << "Cannot load symbol 'hello': " << dlerror() << endmsg;
322  dlclose(handle);
323  }
324 
325  pfm_start = (pfm_start_t) dlsym(handle, "pfm_start");
326  pfm_stop = (pfm_stop_t) dlsym(handle, "pfm_stop");
327  pfm_self_stop = (pfm_self_stop_t) dlsym(handle, "pfm_stop"); //it's the same
328  pfm_restart = (pfm_restart_t) dlsym(handle, "pfm_restart");
329  //pfm_read_pmds = (pfm_read_pmds_t) dlsym(handle, "pfm_read_pmds");
330  pfm_initialize = (pfm_initialize_t) dlsym(handle, "pfm_initialize");
331  pfm_find_full_event = (pfm_find_full_event_t) dlsym(handle, "pfm_find_full_event");
332  pfm_dispatch_events = (pfm_dispatch_events_t) dlsym(handle, "pfm_dispatch_events");
333  pfm_create_context = (pfm_create_context_t) dlsym(handle, "pfm_create_context");
334  pfm_write_pmcs = (pfm_write_pmcs_t) dlsym(handle, "pfm_write_pmcs");
335  pfm_write_pmds = (pfm_write_pmds_t) dlsym(handle, "pfm_write_pmds");
336  pfm_load_context = (pfm_load_context_t) dlsym(handle, "pfm_load_context");
337  pfm_strerror = (pfm_strerror_t) dlsym(handle, "pfm_strerror");
338  pfm_set_options = (pfm_set_options_t) dlsym(handle, "pfm_set_options");
339  pfm_get_num_counters = (pfm_get_num_counters_t) dlsym(handle, "pfm_get_num_counters");
340  // use it to do the calculation
341  // info() << "Calling hello..." << endmsg;
342  // hello();
343 
344  // close the library
345  // info() << "Closing library..." << endmsg;
346  dlclose(handle);
347  */
348 
350  }

◆ ~PerfMonAuditor()

virtual PerfMonAuditor::~PerfMonAuditor ( )
inlinevirtual

Definition at line 352 of file PerfMonAuditor.cpp.

352 {} // virtual destructor

◆ PerfMonAuditor() [2/3]

PerfMonAuditor::PerfMonAuditor ( )
private

◆ PerfMonAuditor() [3/3]

PerfMonAuditor::PerfMonAuditor ( const PerfMonAuditor )
private

Member Function Documentation

◆ after() [1/5]

void Auditor::after
override

Definition at line 77 of file Auditor.cpp.

139 {}

◆ after() [2/5]

void Auditor::after
override

Definition at line 76 of file Auditor.cpp.

138 {}

◆ after() [3/5]

void PerfMonAuditor::after ( StandardEventType  evt,
INamedInterface alg,
const StatusCode sc 
)
override

Definition at line 903 of file PerfMonAuditor.cpp.

903  {
904  switch ( evt ) {
907  break;
908  case IAuditor::Execute:
909  i_afterExecute( alg );
910  break;
911  default:
912  break;
913  }
914  return;
915 }

◆ after() [4/5]

void Auditor::after
override

Definition at line 74 of file Auditor.cpp.

136 {}

◆ after() [5/5]

void Auditor::after
override

Definition at line 73 of file Auditor.cpp.

112  {
113  switch ( evt ) {
114  case Initialize:
115  afterInitialize( obj );
116  break;
117  case ReInitialize:
118  afterReinitialize( obj );
119  break;
120  case Execute:
121  afterExecute( obj, sc );
122  break;
123  case Finalize:
124  afterFinalize( obj );
125  break;
126  case Start:
127  break;
128  case Stop:
129  break;
130  case ReStart:
131  break;
132  default:
133  break; // do nothing
134  }
135 }

◆ before() [1/5]

void Auditor::before
override

Definition at line 71 of file Auditor.cpp.

109 {}

◆ before() [2/5]

void Auditor::before
override

Definition at line 70 of file Auditor.cpp.

108 {}

◆ before() [3/5]

void PerfMonAuditor::before ( StandardEventType  evt,
INamedInterface alg 
)
override

Definition at line 889 of file PerfMonAuditor.cpp.

889  {
890  switch ( evt ) {
893  break;
894  case IAuditor::Execute:
895  i_beforeExecute( alg );
896  break;
897  default:
898  break;
899  }
900  return;
901 }

◆ before() [4/5]

void Auditor::before
override

Definition at line 68 of file Auditor.cpp.

106 {}

◆ before() [5/5]

void Auditor::before
override

The following methods are meant to be implemented by the child class...

Definition at line 67 of file Auditor.cpp.

82  {
83  switch ( evt ) {
84  case Initialize:
85  beforeInitialize( obj );
86  break;
87  case ReInitialize:
88  beforeReinitialize( obj );
89  break;
90  case Execute:
91  beforeExecute( obj );
92  break;
93  case Finalize:
94  beforeFinalize( obj );
95  break;
96  case Start:
97  break;
98  case Stop:
99  break;
100  case ReStart:
101  break;
102  default:
103  break; // do nothing
104  }
105 }

◆ detect_unavail_pmcs()

int PerfMonAuditor::detect_unavail_pmcs ( int  fd,
pfmlib_regmask_t r_pmcs 
)
inlineprivate

Definition at line 399 of file PerfMonAuditor.cpp.

399 { return detect_unavail_pmu_regs( fd, r_pmcs, NULL ); }

◆ detect_unavail_pmu_regs()

int PerfMonAuditor::detect_unavail_pmu_regs ( int  fd,
pfmlib_regmask_t r_pmcs,
pfmlib_regmask_t r_pmds 
)
private

◆ finalize()

StatusCode PerfMonAuditor::finalize ( )
overridevirtual

Reimplemented from Auditor.

Definition at line 881 of file PerfMonAuditor.cpp.

881  {
882  if ( sampling == 0 )
883  finalizepm();
884  else
885  finalize_smpl();
886  return Auditor::finalize();
887 }

◆ finalize_smpl()

void PerfMonAuditor::finalize_smpl ( )
private

Definition at line 800 of file PerfMonAuditor.cpp.

800  {
801  int err;
802  for ( int i = 0; i < used_counters_number; i++ ) {
804  filename += '_';
805  filename += event_cstr[i];
806 
807  for ( auto& c : filename )
808  if ( c == ':' ) c = '-';
809 
810  if ( inv[i] ) filename += "_INV_1";
811  if ( cmask[i] > 0 ) filename += "_CMASK_" + std::to_string( cmask[i] );
812  filename += ".txt.gz";
813 
814  gzFile outfile = gzopen( filename.c_str(), "wb" );
815  if ( outfile != NULL ) {
816  if ( nehalem ) {
817  gzprintf( outfile, "NHM " );
818  } else if ( westmere ) {
819  gzprintf( outfile, "WSM " );
820  } else if ( core ) {
821  gzprintf( outfile, "CORE " );
822  }
823  if ( gzprintf( outfile, "%s %d %d %d\n", event_cstr[i], cmask[i], inv[i], sp[i] ) <
824  (int)strlen( event_cstr[i] ) ) {
825  error() << "ERROR: gzputs err: " << gzerror( outfile, &err ) << ". Aborting..." << endmsg;
826  }
827  for ( std::map<std::string, std::map<unsigned long, unsigned int>>::iterator it = samples[i].begin();
828  it != samples[i].end(); it++ ) {
829  unsigned long long sum = 0;
830  for ( std::map<unsigned long, unsigned int>::iterator jt = ( it->second ).begin(); jt != ( it->second ).end();
831  jt++ ) {
832  sum += jt->second;
833  }
834  if ( gzprintf( outfile, "%s%%%llu\n", ( it->first ).c_str(), sum ) < (int)( ( it->first ).length() ) ) {
835  error() << "ERROR: gzputs err: " << gzerror( outfile, &err ) << ". Aborting..." << endmsg;
836  }
837  for ( std::map<unsigned long, unsigned int>::iterator jt = ( it->second ).begin(); jt != ( it->second ).end();
838  jt++ ) {
839  char sym_name[SYM_NAME_MAX_LENGTH];
840  bzero( sym_name, SYM_NAME_MAX_LENGTH );
841  const char* libName;
842  const char* symbolName;
843  int libOffset = 0;
844  int offset = 0;
845  void* sym_addr = IgHookTrace::tosymbol( (void*)( jt->first ) );
846  if ( sym_addr != NULL ) {
847  bool success = IgHookTrace::symbol( sym_addr, symbolName, libName, offset, libOffset );
848  if ( success ) {
849  if ( symbolName != NULL && strlen( symbolName ) > 0 ) {
850  strcpy( sym_name, symbolName );
851  strcat( sym_name, " " );
852  } else {
853  strcpy( sym_name, "??? " );
854  }
855  if ( libName != NULL && strlen( libName ) > 0 ) {
856  strcat( sym_name, libName );
857  strcat( sym_name, " " );
858  } else {
859  strcat( sym_name, "??? " );
860  }
861  sprintf( sym_name + strlen( sym_name ), "%d ", libOffset );
862  if ( strlen( sym_name ) <= 0 ) { error() << "ERROR: Symbol name length is zero. Aborting..." << endmsg; }
863  } else {
864  strcpy( sym_name, "??? ??? 0 " );
865  }
866  } else {
867  strcpy( sym_name, "??? ??? 0 " );
868  }
869  if ( gzprintf( outfile, "%s %d\n", sym_name, jt->second ) < (int)strlen( sym_name ) ) {
870  error() << "ERROR: gzputs err: " << gzerror( outfile, &err ) << endmsg;
871  }
872  }
873  }
874  } else {
875  error() << "ERROR: Could not open file: " << filename << ". Aborting..." << endmsg;
876  }
877  gzclose( outfile );
878  }
879 }

◆ finalizepm()

void PerfMonAuditor::finalizepm ( )
private

Definition at line 518 of file PerfMonAuditor.cpp.

518  {
519  info() << "start of finalizepm ucn:" << used_counters_number << endmsg;
520  for ( int i = 0; i < used_counters_number; i++ ) {
522  filename += '_';
523  filename += event_cstr[i];
524 
525  for ( auto& c : filename )
526  if ( c == ':' ) c = '-';
527 
528  if ( inv[i] ) filename += "_INV_1";
529  if ( cmask[i] > 0 ) filename += "_CMASK_" + std::to_string( cmask[i] );
530  filename += ".txt";
531 
532  info() << "Filename:" << filename << endmsg;
533  FILE* outfile = fopen( filename.c_str(), "w" );
534  if ( nehalem ) {
535  fprintf( outfile, "NHM " );
536  } else if ( westmere ) {
537  fprintf( outfile, "WSM " );
538  } else if ( core ) {
539  fprintf( outfile, "CORE " );
540  }
541  fprintf( outfile, "%s %d %d %d\n", event_cstr[i], cmask[i], inv[i], sp[i] );
542  for ( std::map<std::string, std::vector<unsigned long int>>::iterator it = ( results[i] ).begin();
543  it != ( results[i] ).end(); it++ ) {
544  fprintf( outfile, "%s\n", ( it->first ).c_str() );
545  for ( std::vector<unsigned long int>::iterator j = ( it->second ).begin(); j != ( it->second ).end(); j++ ) {
546  fprintf( outfile, "%lu\n", *j );
547  }
548  }
549  fclose( outfile );
550  }
551 }

◆ i_afterExecute()

void PerfMonAuditor::i_afterExecute ( INamedInterface alg)
private

Definition at line 958 of file PerfMonAuditor.cpp.

958  {
959  if ( !alg ) { return; } // info() << "after:inside! " << alg->name() << endmsg;
960 
961  if ( event_count_reached ) {
962  // info() << "after:inside! " << alg->name() << endmsg;
963 
964  if ( sampling == 0 )
965  stoppm();
966  else
967  stop_smpl();
968  alg_stack.pop();
969  --m_indent;
970  if ( !alg_stack.empty() ) {
971  if ( sampling == 0 )
972  startpm();
973  else
974  start_smpl(); // resuming father algorithm counting
975  }
976  }
977 }

◆ i_afterInitialize()

void PerfMonAuditor::i_afterInitialize ( INamedInterface alg)
private

Definition at line 919 of file PerfMonAuditor.cpp.

919 {}

◆ i_beforeExecute()

void PerfMonAuditor::i_beforeExecute ( INamedInterface alg)
private

Definition at line 921 of file PerfMonAuditor.cpp.

921  {
922  if ( !alg ) return;
923  // info() << "before:inside! " << alg->name() << endmsg;
924  if ( first_alg ) {
925  first_alg = false;
926  first_alg_name = alg->name();
927  // info() << "first_alg_name= " << alg->name() << endmsg;
928  }
929  if ( !event_count_reached ) {
930  if ( !first_alg_name.compare( alg->name() ) ) {
931  ph_ev_count++;
932  // info() << "EVENT COUNT: " << ph_ev_count << endmsg;
933  if ( ph_ev_count == start_at_event ) {
934  event_count_reached = true;
935  // info() << "!!! EVENT COUNT REACHED: " << ph_ev_count << endmsg;
936  }
937  }
938  }
939  if ( event_count_reached ) {
940  // info() << "before:inside! " << alg->name() << endmsg;
941 
942  if ( !alg_stack.empty() ) {
943  if ( sampling == 0 )
944  pausepm(); // pausing father algorithm counting
945  else
946  stop_smpl();
947  }
948  ++m_indent;
949  std::vector<unsigned long int> zeroes( 4, 0 );
950  alg_stack.push( std::make_pair( alg, zeroes ) );
951  if ( sampling == 0 )
952  startpm();
953  else
954  start_smpl();
955  }
956 }

◆ i_beforeInitialize()

void PerfMonAuditor::i_beforeInitialize ( INamedInterface alg)
private

Definition at line 917 of file PerfMonAuditor.cpp.

917 {}

◆ initialize()

StatusCode PerfMonAuditor::initialize ( )
overridevirtual

Reimplemented from Auditor.

Definition at line 553 of file PerfMonAuditor.cpp.

553  {
554  if ( !m_pfm.loaded ) {
555  error() << "pfm library could not be loaded" << endmsg;
556  return StatusCode::FAILURE;
557  }
558 
559  info() << "Initializing..." << endmsg;
561  if ( sc.isFailure() ) { return sc; }
563  for ( int i = 0; i < MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS; i++ ) {
564  if ( event_str[i].length() > 0 ) used_counters_number++;
565  }
566  for ( int i = 0; i < MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS; i++ ) { strcpy( event_cstr[i], event_str[i].c_str() ); }
568 
569  if ( m_pfm.pfm_initialize() != PFMLIB_SUCCESS ) { error() << "Cannot initialize perfmon!!" << endmsg; }
570  ph_ev_count = 0;
571  first_alg = true;
572  event_count_reached = false;
573  nehalem = false;
574  core = false;
575  westmere = false;
576  if ( family.compare( "CORE" ) == 0 )
577  core = true;
578  else if ( family.compare( "NEHALEM" ) == 0 )
579  nehalem = true;
580  else if ( family.compare( "WESTMERE" ) == 0 )
581  westmere = true;
582  else {
583  error() << "ERROR: Unsupported processor family " << family << ". aborting..." << endmsg;
584  }
585 
586  info() << "Initialized!" << endmsg;
587  return StatusCode::SUCCESS;
588 }

◆ is_nehalem()

int PerfMonAuditor::is_nehalem ( )
inline

Definition at line 224 of file PerfMonAuditor.cpp.

224  {
225 #ifdef __ICC
226 // Disable ICC remark #593: variable "x" was set but never used
227 # pragma warning( push )
228 # pragma warning( disable : 593 )
229 #endif
230  int a, b, c, d;
231  cpuid( 1, a, b, c, d );
232  int sse4_2_mask = 1 << 20;
233  if ( c & sse4_2_mask )
234  return 1;
235  else
236  return 0;
237 #ifdef __ICC
238 # pragma warning( pop )
239 #endif
240  }

◆ operator=()

PerfMonAuditor& PerfMonAuditor::operator= ( const PerfMonAuditor )
private

◆ pausepm()

void PerfMonAuditor::pausepm ( )
private

Definition at line 506 of file PerfMonAuditor.cpp.

506  {
507  m_pfm.pfm_stop( fd );
508  if ( m_pfm.pfm_read_pmds( fd, pd, inp.pfp_event_count ) == -1 ) { error() << "Could not read pmds" << endmsg; }
509 
510  for ( int i = 0; i < used_counters_number; i++ ) { alg_stack.top().second[i] += pd[i].reg_value; }
511 
512  close( fd );
513 }

◆ pfm_bv_copy()

void PerfMonAuditor::pfm_bv_copy ( uint64_t *  d,
uint64_t *  j,
uint16_t  n 
)
inlineprivate

Definition at line 404 of file PerfMonAuditor.cpp.

404  {
405  if ( n <= BPL )
406  *d = *j;
407  else {
408  memcpy( d, j, ( n >> LBPL ) * sizeof( uint64_t ) );
409  }
410  }

◆ pfm_bv_isset()

int PerfMonAuditor::pfm_bv_isset ( uint64_t *  bv,
uint16_t  rnum 
)
inlineprivate

Definition at line 401 of file PerfMonAuditor.cpp.

401  {
402  return bv[rnum >> LBPL] & ( 1UL << ( rnum & ( BPL - 1 ) ) ) ? 1 : 0;
403  }

◆ pfm_bv_set()

void PerfMonAuditor::pfm_bv_set ( uint64_t *  bv,
uint16_t  rnum 
)
inlineprivate

Definition at line 400 of file PerfMonAuditor.cpp.

400 { bv[rnum >> LBPL] |= 1UL << ( rnum & ( BPL - 1 ) ); }

◆ process_smpl_buf()

void PerfMonAuditor::process_smpl_buf ( pfm_dfl_smpl_hdr_t hdr,
size_t  entry_size 
)
staticprivate

Definition at line 594 of file PerfMonAuditor.cpp.

594  {
597  size_t pos, count;
598  uint64_t entry;
599  if ( hdr->hdr_overflows == last_overflow && hdr->hdr_count == last_count ) {
600  printf( "skipping identical set of samples...\n" );
601  return;
602  }
603  count = hdr->hdr_count;
604  ent = (pfm_dfl_smpl_entry_t*)( hdr + 1 );
605  pos = (unsigned long)ent;
606  entry = collected_samples;
607  while ( count-- ) {
608  // if(ent->ovfl_pmd>=0 && ent->ovfl_pmd<=3)
609  if ( ent->ovfl_pmd <= 3 ) {
610  ( ( samples[ent->ovfl_pmd] )[( alg_stack.top().first )->name()] )[(unsigned long)( ent->ip )]++;
611  }
612  pos += entry_size;
613  ent = (pfm_dfl_smpl_entry_t*)pos;
614  entry++;
615  }
616  collected_samples = entry;
617  last_overflow = hdr->hdr_overflows;
618  if ( last_count != hdr->hdr_count && ( last_count || last_overflow == 0 ) ) { collected_partial += hdr->hdr_count; }
619  last_count = hdr->hdr_count;
620  return;
621 }

◆ sigio_handler()

void PerfMonAuditor::sigio_handler ( int  ,
siginfo_t *  ,
void *   
)
staticprivate

Definition at line 627 of file PerfMonAuditor.cpp.

627  {
628  PFMon& pfm = PFMon::instance();
630  int fd = ctx_fd;
631  int r;
632  if ( fd != ctx_fd ) {
633  // error() << "ERROR: handler does not get valid file descriptor. Aborting..." << endmsg;
634  }
635  if ( pfm.pfm_read_pmds( fd, pd_smpl + 1, 1 ) == -1 ) {
636  // error() << "ERROR: pfm_read_pmds: " << strerror(errno) << ". Aborting..." << endmsg;
637  }
638  while ( true ) {
639  r = read( fd, &msg, sizeof( msg ) );
640  if ( r != sizeof( msg ) ) {
641  if ( r == -1 && errno == EINTR ) {
642  printf( "read interrupted, retrying\n" );
643  continue;
644  }
645  // error() << "ERROR: cannot read overflow message: " << strerror(errno) << ". Aborting..." << endmsg;
646  }
647  break;
648  }
649  switch ( msg.type ) {
650  case PFM_MSG_OVFL: // the sampling buffer is full
651  process_smpl_buf( hdr, entry_size );
652  ovfl_count++;
653  if ( pfm.pfm_restart( fd ) ) {
654  if ( errno != EBUSY ) {
655  // error() << "ERROR: pfm_restart error errno " << errno << ". Aborting..." << endmsg;
656  } else {
657  printf( "pfm_restart: task probably terminated \n" );
658  }
659  }
660  break;
661  default:
662  // error() << "ERROR: unknown message type " << msg.type << ". Aborting..." << endmsg;
663  break;
664  }
665 }

◆ start_smpl()

void PerfMonAuditor::start_smpl ( )
private

Definition at line 671 of file PerfMonAuditor.cpp.

671  {
672  ovfl_count = 0;
673  num_smpl_pmds = 0;
674  last_overflow = ~0;
675  max_pmd = 0;
676  memset( &pfmlib_options, 0, sizeof( pfmlib_options ) );
679  m_pfm.pfm_set_options( &pfmlib_options );
680  ret = m_pfm.pfm_initialize();
681  if ( ret != PFMLIB_SUCCESS ) {
682  error() << "ERROR: Cannot initialize library: " << m_pfm.pfm_strerror( ret ) << ". Aborting..." << endmsg;
683  }
684  struct sigaction act;
685  memset( &act, 0, sizeof( act ) );
686  act.sa_sigaction = sigio_handler; // dlopen() ==>
687  // act.sa_handler = (sig_t)&sigio_handler;
688  sigaction( SIGIO, &act, 0 );
689  memset( &ctx, 0, sizeof( ctx ) );
690  memset( &buf_arg, 0, sizeof( buf_arg ) );
691  memset( &inp, 0, sizeof( inp ) );
692  memset( &outp, 0, sizeof( outp ) );
693  memset( pd_smpl, 0, sizeof( pd_smpl ) );
694  memset( pc, 0, sizeof( pc ) );
695  memset( &load_args, 0, sizeof( load_args ) );
696  m_pfm.pfm_get_num_counters( &num_counters );
697  memset( &params, 0, sizeof( params ) );
698  memset( &nhm_params, 0, sizeof( nhm_params ) );
699 
700  for ( int i = 0; i < used_counters_number; i++ ) {
701  ret = m_pfm.pfm_find_full_event( event_cstr[i], &inp.pfp_events[i] );
702  if ( ret != PFMLIB_SUCCESS ) {
703  error() << "ERROR: cannot find event: " << event_cstr[i] << ". Aborting..." << endmsg;
704  }
705  }
707  inp.pfp_event_count = 4;
708  for ( int i = 0; i < used_counters_number; i++ ) {
709  if ( inv[i] ) {
712  }
713  if ( cmask[i] > 0 ) {
714  ( params.pfp_core_counters[i] ).cnt_mask = cmask[i];
715  ( nhm_params.pfp_nhm_counters[i] ).cnt_mask = cmask[i];
716  }
717  }
718  if ( nehalem || westmere ) {
719  ret = m_pfm.pfm_dispatch_events( &inp, &nhm_params, &outp, NULL );
720  } else {
721  ret = m_pfm.pfm_dispatch_events( &inp, &params, &outp, NULL );
722  }
723  if ( ret != PFMLIB_SUCCESS ) {
724  error() << "ERROR: cannot configure events: " << m_pfm.pfm_strerror( ret ) << ". Aborting..." << endmsg;
725  }
726  for ( unsigned int i = 0; i < outp.pfp_pmc_count; i++ ) {
729  }
730  for ( unsigned int i = 0; i < outp.pfp_pmd_count; i++ ) {
731  pd_smpl[i].reg_num = outp.pfp_pmds[i].reg_num;
732  if ( i ) {
733  pfm_bv_set( pd_smpl[0].reg_smpl_pmds, pd_smpl[i].reg_num );
734  if ( pd_smpl[i].reg_num > max_pmd ) { max_pmd = pd_smpl[i].reg_num; }
735  num_smpl_pmds++;
736  }
737  }
738  for ( int i = 0; i < used_counters_number; i++ ) {
740  pfm_bv_copy( pd_smpl[i].reg_reset_pmds, pd_smpl[i].reg_smpl_pmds, max_pmd );
741  pd_smpl[i].reg_value = (uint64_t)( sp[i] * -1 );
742  pd_smpl[i].reg_short_reset = (uint64_t)( sp[i] * -1 );
743  pd_smpl[i].reg_long_reset = (uint64_t)( sp[i] * -1 );
744  pd_smpl[i].reg_random_seed = 5; // tocheck
745  pd_smpl[i].reg_random_mask = 0xff; // tocheck
746  }
747  entry_size = sizeof( pfm_dfl_smpl_entry_t ) + ( num_smpl_pmds << 3 );
748  ctx.ctx_flags = 0;
749  buf_arg.buf_size = 3 * getpagesize() + 512;
750  ctx_fd = m_pfm.pfm_create_context( &ctx, (char*)FMT_NAME, &buf_arg, sizeof( buf_arg ) );
751  if ( ctx_fd == -1 ) {
752  if ( errno == ENOSYS ) {
753  error() << "ERROR: Your kernel does not have performance monitoring support! Aborting..." << endmsg;
754  }
755  error() << "ERROR: Can't create PFM context " << strerror( errno ) << ". Aborting..." << endmsg;
756  }
757  buf_addr = mmap( NULL, buf_arg.buf_size, PROT_READ, MAP_PRIVATE, ctx_fd, 0 );
758  if ( buf_addr == MAP_FAILED ) {
759  error() << "ERROR: cannot mmap sampling buffer: " << strerror( errno ) << ". Aborting..." << endmsg;
760  }
762  if ( PFM_VERSION_MAJOR( hdr->hdr_version ) < 1 ) {
763  error() << "ERROR: invalid buffer format version. Aborting..." << endmsg;
764  }
765  if ( m_pfm.pfm_write_pmcs( ctx_fd, pc, outp.pfp_pmc_count ) ) {
766  error() << "ERROR: pfm_write_pmcs error errno " << strerror( errno ) << ". Aborting..." << endmsg;
767  }
768  if ( m_pfm.pfm_write_pmds( ctx_fd, pd_smpl, outp.pfp_pmd_count ) ) {
769  error() << "ERROR: pfm_write_pmds error errno " << strerror( errno ) << ". Aborting..." << endmsg;
770  }
771  load_args.load_pid = getpid();
772  if ( m_pfm.pfm_load_context( ctx_fd, &load_args ) ) {
773  error() << "ERROR: pfm_load_context error errno " << strerror( errno ) << ". Aborting..." << endmsg;
774  }
775  ret = fcntl( ctx_fd, F_SETFL, fcntl( ctx_fd, F_GETFL, 0 ) | O_ASYNC );
776  if ( ret == -1 ) { error() << "ERROR: cannot set ASYNC: " << strerror( errno ) << ". Aborting..." << endmsg; }
777  ret = fcntl( ctx_fd, F_SETOWN, getpid() );
778  if ( ret == -1 ) { error() << "ERROR: cannot setown: " << strerror( errno ) << ". Aborting..." << endmsg; }
779  // pfm_self_start(ctx_fd); ==>
780  m_pfm.pfm_start( ctx_fd, NULL );
781 }

◆ startpm()

void PerfMonAuditor::startpm ( )
private

Definition at line 431 of file PerfMonAuditor.cpp.

431  {
432  memset( &ctx, 0, sizeof( ctx ) );
433  memset( &inp, 0, sizeof( inp ) );
434  memset( &outp, 0, sizeof( outp ) );
435  memset( pd, 0, sizeof( pd ) );
436  memset( pc, 0, sizeof( pc ) );
437  memset( &load_arg, 0, sizeof( load_arg ) );
438  memset( &params, 0, sizeof( params ) );
439  memset( &nhm_params, 0, sizeof( nhm_params ) );
440 
441  for ( int i = 0; i < used_counters_number; i++ ) {
442  ret = m_pfm.pfm_find_full_event( event_cstr[i], &inp.pfp_events[i] );
443  if ( ret != PFMLIB_SUCCESS ) {
444  error() << "ERROR: cannot find event: " << event_cstr[i] << ". Aborting..." << endmsg;
445  }
446  }
448  inp.pfp_event_count = 4;
449  for ( int i = 0; i < used_counters_number; i++ ) {
450  if ( inv[i] ) {
453  }
454  if ( cmask[i] > 0 ) {
455  ( params.pfp_core_counters[i] ).cnt_mask = cmask[i];
456  ( nhm_params.pfp_nhm_counters[i] ).cnt_mask = cmask[i];
457  }
458  }
459  if ( nehalem || westmere ) {
460  ret = m_pfm.pfm_dispatch_events( &inp, &nhm_params, &outp, NULL );
461  } else {
462  ret = m_pfm.pfm_dispatch_events( &inp, &params, &outp, NULL );
463  }
464  if ( ret != PFMLIB_SUCCESS ) {
465  error() << "ERROR: cannot dispatch events: " << m_pfm.pfm_strerror( ret ) << ". Aborting..." << endmsg;
466  }
467  for ( unsigned int i = 0; i < outp.pfp_pmc_count; i++ ) {
470  }
471  for ( unsigned int i = 0; i < outp.pfp_pmd_count; i++ ) {
473  pd[i].reg_value = 0;
474  }
475  fd = m_pfm.pfm_create_context( &ctx, NULL, 0, 0 );
476  if ( fd == -1 ) { error() << "ERROR: Context not created. Aborting..." << endmsg; }
477  if ( m_pfm.pfm_write_pmcs( fd, pc, outp.pfp_pmc_count ) == -1 ) {
478  error() << "ERROR: Could not write pmcs. Aborting..." << endmsg;
479  }
480  if ( m_pfm.pfm_write_pmds( fd, pd, outp.pfp_pmd_count ) == -1 ) {
481  error() << "ERROR: Could not write pmds. Aborting..." << endmsg;
482  }
483  load_arg.load_pid = getpid();
484  if ( m_pfm.pfm_load_context( fd, &load_arg ) == -1 ) {
485  error() << "ERROR: Could not load context. Aborting..." << endmsg;
486  // error() << "Could not read pmds" << endmsg;
487  }
488 
489  m_pfm.pfm_start( fd, NULL );
490 }

◆ stop_smpl()

void PerfMonAuditor::stop_smpl ( )
private

Definition at line 787 of file PerfMonAuditor.cpp.

787  {
788  m_pfm.pfm_self_stop( ctx_fd );
789  process_smpl_buf( hdr, entry_size );
790  close( ctx_fd );
791  ret = munmap( hdr, buf_arg.buf_size );
792  if ( ret ) { error() << "Cannot unmap buffer: %s" << strerror( errno ) << endmsg; }
793  return;
794 }

◆ stoppm()

void PerfMonAuditor::stoppm ( )
private

Definition at line 496 of file PerfMonAuditor.cpp.

496  {
497  m_pfm.pfm_stop( fd );
498  if ( m_pfm.pfm_read_pmds( fd, pd, inp.pfp_event_count ) == -1 ) { error() << "Could not read pmds" << endmsg; }
499  for ( int i = 0; i < used_counters_number; i++ ) {
500  results[i][( alg_stack.top().first )->name()].push_back( alg_stack.top().second[i] + pd[i].reg_value );
501  }
502 
503  close( fd );
504 }

Member Data Documentation

◆ buf_addr

void* PerfMonAuditor::buf_addr
private

Definition at line 419 of file PerfMonAuditor.cpp.

◆ buf_arg

pfm_dfl_smpl_arg_t PerfMonAuditor::buf_arg
private

Definition at line 417 of file PerfMonAuditor.cpp.

◆ cmask

unsigned int PerfMonAuditor::cmask[MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS]
private

Definition at line 388 of file PerfMonAuditor.cpp.

◆ core

bool PerfMonAuditor::core
private

Definition at line 395 of file PerfMonAuditor.cpp.

◆ ctx

pfarg_ctx_t PerfMonAuditor::ctx
private

Definition at line 370 of file PerfMonAuditor.cpp.

◆ event_count_reached

bool PerfMonAuditor::event_count_reached
private

Definition at line 428 of file PerfMonAuditor.cpp.

◆ event_cstr

char PerfMonAuditor::event_cstr[MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS][MAX_EVENT_NAME_LENGTH]
private

Definition at line 384 of file PerfMonAuditor.cpp.

◆ event_str

std::string PerfMonAuditor::event_str[MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS]
private

Definition at line 381 of file PerfMonAuditor.cpp.

◆ family

std::string PerfMonAuditor::family
private

Definition at line 383 of file PerfMonAuditor.cpp.

◆ fd

int PerfMonAuditor::fd
private

Definition at line 374 of file PerfMonAuditor.cpp.

◆ first_alg

bool PerfMonAuditor::first_alg
private

Definition at line 426 of file PerfMonAuditor.cpp.

◆ first_alg_name

std::string PerfMonAuditor::first_alg_name
private

Definition at line 427 of file PerfMonAuditor.cpp.

◆ i

unsigned int PerfMonAuditor::i
private

Definition at line 375 of file PerfMonAuditor.cpp.

◆ inp

pfmlib_input_param_t PerfMonAuditor::inp
private

Definition at line 368 of file PerfMonAuditor.cpp.

◆ inv

bool PerfMonAuditor::inv[MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS]
private

Definition at line 387 of file PerfMonAuditor.cpp.

◆ is_nehalem_ret

int PerfMonAuditor::is_nehalem_ret
private

Definition at line 366 of file PerfMonAuditor.cpp.

◆ level

int PerfMonAuditor::level
private

Definition at line 424 of file PerfMonAuditor.cpp.

◆ load_arg

pfarg_load_t PerfMonAuditor::load_arg
private

Definition at line 373 of file PerfMonAuditor.cpp.

◆ load_args

pfarg_load_t PerfMonAuditor::load_args
private

Definition at line 418 of file PerfMonAuditor.cpp.

◆ m_indent

int PerfMonAuditor::m_indent
private

Definition at line 362 of file PerfMonAuditor.cpp.

◆ m_inEvent

bool PerfMonAuditor::m_inEvent
private

Definition at line 363 of file PerfMonAuditor.cpp.

◆ m_map

Map PerfMonAuditor::m_map
private

Definition at line 361 of file PerfMonAuditor.cpp.

◆ m_pfm

PFMon& PerfMonAuditor::m_pfm
private

Definition at line 243 of file PerfMonAuditor.cpp.

◆ max_pmd

unsigned int PerfMonAuditor::max_pmd
private

Definition at line 421 of file PerfMonAuditor.cpp.

◆ nehalem

bool PerfMonAuditor::nehalem
private

Definition at line 393 of file PerfMonAuditor.cpp.

◆ nhm_params

pfmlib_nhm_input_param_t PerfMonAuditor::nhm_params
private

Definition at line 391 of file PerfMonAuditor.cpp.

◆ num_counters

unsigned PerfMonAuditor::num_counters
private

Definition at line 420 of file PerfMonAuditor.cpp.

◆ outp

pfmlib_output_param_t PerfMonAuditor::outp
private

Definition at line 369 of file PerfMonAuditor.cpp.

◆ params

pfmlib_core_input_param_t PerfMonAuditor::params
private

Definition at line 390 of file PerfMonAuditor.cpp.

◆ pc

pfarg_pmc_t PerfMonAuditor::pc[NUM_PMCS]
private

Definition at line 372 of file PerfMonAuditor.cpp.

◆ pd

pfarg_pmd_t PerfMonAuditor::pd[NUM_PMDS]
private

Definition at line 371 of file PerfMonAuditor.cpp.

◆ pfmlib_options

pfmlib_options_t PerfMonAuditor::pfmlib_options
private

Definition at line 422 of file PerfMonAuditor.cpp.

◆ ph_ev_count

unsigned int PerfMonAuditor::ph_ev_count { 0 }
private

Definition at line 386 of file PerfMonAuditor.cpp.

◆ prefix

std::string PerfMonAuditor::prefix
private

Definition at line 382 of file PerfMonAuditor.cpp.

◆ prefix_cstr

char PerfMonAuditor::prefix_cstr[MAX_PREFIX_NAME_LENGTH]
private

Definition at line 385 of file PerfMonAuditor.cpp.

◆ ret

int PerfMonAuditor::ret { 0 }
private

Definition at line 376 of file PerfMonAuditor.cpp.

◆ sampling

bool PerfMonAuditor::sampling
private

Definition at line 397 of file PerfMonAuditor.cpp.

◆ start_at_event

unsigned int PerfMonAuditor::start_at_event
private

Definition at line 389 of file PerfMonAuditor.cpp.

◆ used_counters_number

int PerfMonAuditor::used_counters_number
private

Definition at line 392 of file PerfMonAuditor.cpp.

◆ westmere

bool PerfMonAuditor::westmere
private

Definition at line 394 of file PerfMonAuditor.cpp.


The documentation for this class was generated from the following file:
std::strcpy
T strcpy(T... args)
IOTest.evt
evt
Definition: IOTest.py:105
PerfMonAuditor::params
pfmlib_core_input_param_t params
Definition: PerfMonAuditor.cpp:390
pfm_dfl_smpl_hdr_t::hdr_version
uint32_t hdr_version
Definition: perfmon_dfl_smpl.h:51
pfmlib_nhm_input_param_t::pfp_nhm_counters
pfmlib_nhm_counter_t pfp_nhm_counters[PMU_NHM_NUM_COUNTERS]
Definition: pfmlib_intel_nhm.h:139
Auditor::beforeInitialize
void beforeInitialize(INamedInterface *) override
Definition: Auditor.cpp:141
PerfMonAuditor::i_beforeInitialize
void i_beforeInitialize(INamedInterface *alg)
Definition: PerfMonAuditor.cpp:917
pfm_dfl_smpl_arg_t::buf_size
uint64_t buf_size
Definition: perfmon_dfl_smpl.h:35
PerfMonAuditor::inv
bool inv[MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS]
Definition: PerfMonAuditor.cpp:387
pfmlib_core_input_param_t::pfp_core_counters
pfmlib_core_counter_t pfp_core_counters[PMU_CORE_NUM_COUNTERS]
Definition: pfmlib_core.h:79
PerfMonAuditor::is_nehalem
int is_nehalem()
Definition: PerfMonAuditor.cpp:224
std::strlen
T strlen(T... args)
pfmlib_options_t::pfm_verbose
unsigned int pfm_verbose
Definition: pfmlib.h:138
std::string
STL class.
pfmlib_output_param_t::pfp_pmd_count
unsigned int pfp_pmd_count
Definition: pfmlib.h:127
pfmlib_input_param_t::pfp_events
pfmlib_event_t pfp_events[PFMLIB_MAX_PMCS]
Definition: pfmlib.h:112
IAuditor::Execute
@ Execute
Definition: IAuditor.h:34
PerfMonAuditor::i_afterExecute
void i_afterExecute(INamedInterface *alg)
Definition: PerfMonAuditor.cpp:958
pfarg_pmd_t::reg_short_reset
uint64_t reg_short_reset
Definition: perfmon_v2.h:44
pfarg_pmc_t::reg_num
uint16_t reg_num
Definition: perfmon_v2.h:28
pfm_dfl_smpl_hdr_t::hdr_overflows
uint64_t hdr_overflows
Definition: perfmon_dfl_smpl.h:48
PerfMonAuditor::inp
pfmlib_input_param_t inp
Definition: PerfMonAuditor.cpp:368
PerfMonAuditor::family
std::string family
Definition: PerfMonAuditor.cpp:383
PerfMonAuditor::core
bool core
Definition: PerfMonAuditor.cpp:395
PerfMonAuditor::load_args
pfarg_load_t load_args
Definition: PerfMonAuditor.cpp:418
Properties.long
long
(c) Copyright 1998-2020 CERN for the benefit of the LHCb and ATLAS collaborations # # This software i...
Definition: Properties.py:15
pfarg_pmd_t::reg_flags
uint32_t reg_flags
Definition: perfmon_v2.h:41
pfmlib_options_t::pfm_debug
unsigned int pfm_debug
Definition: pfmlib.h:137
std::vector
STL class.
std::strcat
T strcat(T... args)
PerfMonAuditor::stop_smpl
void stop_smpl()
Definition: PerfMonAuditor.cpp:787
GaudiMP.FdsRegistry.msg
msg
Definition: FdsRegistry.py:19
pfarg_pmd_t::reg_value
uint64_t reg_value
Definition: perfmon_v2.h:42
pfarg_pmc_t::reg_value
uint64_t reg_value
Definition: perfmon_v2.h:31
Auditor::beforeReinitialize
void beforeReinitialize(INamedInterface *) override
Definition: Auditor.cpp:143
gaudirun.c
c
Definition: gaudirun.py:527
PerfMonAuditor::pfmlib_options
pfmlib_options_t pfmlib_options
Definition: PerfMonAuditor.cpp:422
Auditor::afterExecute
void afterExecute(INamedInterface *, const StatusCode &) override
Definition: Auditor.cpp:146
PerfMonAuditor::pausepm
void pausepm()
Definition: PerfMonAuditor.cpp:506
SYM_NAME_MAX_LENGTH
#define SYM_NAME_MAX_LENGTH
Definition: PerfMonAuditor.cpp:75
std::strerror
T strerror(T... args)
pfmlib_reg_t::reg_value
unsigned long long reg_value
Definition: pfmlib.h:97
PerfMonAuditor::finalize_smpl
void finalize_smpl()
Definition: PerfMonAuditor.cpp:800
pfm_dfl_smpl_entry_t
Definition: perfmon_dfl_smpl.h:67
PFM_PLM3
#define PFM_PLM3
Definition: pfmlib.h:53
Auditor::finalize
virtual StatusCode finalize()
Definition: Auditor.cpp:190
PerfMonAuditor::pfm_bv_copy
void pfm_bv_copy(uint64_t *d, uint64_t *j, uint16_t n)
Definition: PerfMonAuditor.cpp:404
basic.alg
alg
Definition: basic.py:15
PerfMonAuditor::outp
pfmlib_output_param_t outp
Definition: PerfMonAuditor.cpp:369
PFM_VERSION_MAJOR
#define PFM_VERSION_MAJOR(x)
Definition: perfmon.h:213
Auditor::initialize
virtual StatusCode initialize()
Definition: Auditor.cpp:79
Auditor::name
const std::string & name() const override
Definition: Auditor.cpp:192
PerfMonAuditor::first_alg_name
std::string first_alg_name
Definition: PerfMonAuditor.cpp:427
Auditor::beforeFinalize
void beforeFinalize(INamedInterface *) override
Definition: Auditor.cpp:147
PerfMonAuditor::nhm_params
pfmlib_nhm_input_param_t nhm_params
Definition: PerfMonAuditor.cpp:391
pfarg_pmd_t::reg_num
uint16_t reg_num
Definition: perfmon_v2.h:39
StatusCode
Definition: StatusCode.h:65
Auditor::afterReinitialize
void afterReinitialize(INamedInterface *) override
Definition: Auditor.cpp:144
std::sprintf
T sprintf(T... args)
std::fclose
T fclose(T... args)
HistoDumpEx.r
r
Definition: HistoDumpEx.py:20
PerfMonAuditor::pfm_bv_set
void pfm_bv_set(uint64_t *bv, uint16_t rnum)
Definition: PerfMonAuditor.cpp:400
ProduceConsume.j
j
Definition: ProduceConsume.py:101
PerfMonAuditor::startpm
void startpm()
Definition: PerfMonAuditor.cpp:431
CLHEP::begin
double * begin(CLHEP::HepVector &v)
Definition: TupleAlg.cpp:45
IgHookTrace::symbol
static bool symbol(void *address, const char *&sym, const char *&lib, int &offset, int &liboffset)
Definition: IgHook_IgHookTrace.cpp:222
IAuditor::Initialize
@ Initialize
Definition: IAuditor.h:34
Auditor::afterFinalize
void afterFinalize(INamedInterface *) override
Definition: Auditor.cpp:148
std::string::c_str
T c_str(T... args)
PFM_CORE_SEL_INV
#define PFM_CORE_SEL_INV
Definition: pfmlib_core.h:68
pfmlib_reg_t::reg_num
unsigned int reg_num
Definition: pfmlib.h:99
PerfMonAuditor::finalizepm
void finalizepm()
Definition: PerfMonAuditor.cpp:518
pfmlib_output_param_t::pfp_pmcs
pfmlib_reg_t pfp_pmcs[PFMLIB_MAX_PMCS]
Definition: pfmlib.h:128
std::string::compare
T compare(T... args)
PerfMonAuditor::ctx
pfarg_ctx_t ctx
Definition: PerfMonAuditor.cpp:370
std::to_string
T to_string(T... args)
PerfMonAuditor::detect_unavail_pmu_regs
int detect_unavail_pmu_regs(int fd, pfmlib_regmask_t *r_pmcs, pfmlib_regmask_t *r_pmds)
LBPL
#define LBPL
Definition: PerfMonAuditor.cpp:73
std::fopen
T fopen(T... args)
IgHookTrace::tosymbol
static void * tosymbol(void *address)
Definition: IgHook_IgHookTrace.cpp:247
PerfMonAuditor::is_nehalem_ret
int is_nehalem_ret
Definition: PerfMonAuditor.cpp:366
Auditor::afterInitialize
void afterInitialize(INamedInterface *) override
Definition: Auditor.cpp:142
PerfMonAuditor::stoppm
void stoppm()
Definition: PerfMonAuditor.cpp:496
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:203
FMT_NAME
#define FMT_NAME
Definition: PerfMonAuditor.cpp:71
pfmlib_input_param_t::pfp_dfl_plm
unsigned int pfp_dfl_plm
Definition: pfmlib.h:109
PerfMonAuditor::m_map
Map m_map
Definition: PerfMonAuditor.cpp:361
std::map
STL class.
PerfMonAuditor::event_str
std::string event_str[MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS]
Definition: PerfMonAuditor.cpp:381
pfmlib_input_param_t::pfp_event_count
unsigned int pfp_event_count
Definition: pfmlib.h:108
PerfMonAuditor::ret
int ret
Definition: PerfMonAuditor.cpp:376
PerfMonAuditor::buf_addr
void * buf_addr
Definition: PerfMonAuditor.cpp:419
PerfMonAuditor::m_indent
int m_indent
Definition: PerfMonAuditor.cpp:362
PFM_NHM_SEL_INV
#define PFM_NHM_SEL_INV
Definition: pfmlib_intel_nhm.h:103
pfm_dfl_smpl_hdr_t
Definition: perfmon_dfl_smpl.h:45
GaudiPluginService.cpluginsvc.n
n
Definition: cpluginsvc.py:235
PerfMonAuditor::num_counters
unsigned num_counters
Definition: PerfMonAuditor.cpp:420
PerfMonAuditor::prefix
std::string prefix
Definition: PerfMonAuditor.cpp:382
PerfMonAuditor::buf_arg
pfm_dfl_smpl_arg_t buf_arg
Definition: PerfMonAuditor.cpp:417
Auditor::beforeExecute
void beforeExecute(INamedInterface *) override
Definition: Auditor.cpp:145
PFMLIB_SUCCESS
#define PFMLIB_SUCCESS
Definition: pfmlib.h:267
pfm_dfl_smpl_entry_t::ip
uint64_t ip
Definition: perfmon_dfl_smpl.h:72
PerfMonAuditor::event_count_reached
bool event_count_reached
Definition: PerfMonAuditor.cpp:428
PerfMonAuditor::westmere
bool westmere
Definition: PerfMonAuditor.cpp:394
StatusCode::isFailure
bool isFailure() const
Definition: StatusCode.h:129
hivetimeline.read
def read(f, regex=".*", skipevents=0)
Definition: hivetimeline.py:33
pfarg_pmd_t::reg_random_mask
uint64_t reg_random_mask
Definition: perfmon_v2.h:50
PerfMonAuditor::i
unsigned int i
Definition: PerfMonAuditor.cpp:375
PerfMonAuditor::pc
pfarg_pmc_t pc[NUM_PMCS]
Definition: PerfMonAuditor.cpp:372
PerfMonAuditor::start_at_event
unsigned int start_at_event
Definition: PerfMonAuditor.cpp:389
PropertyHolder< CommonMessaging< implements< IAuditor, IProperty > > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Details::PropertyBase &prop)
Declare a property.
Definition: PropertyHolder.h:106
pfarg_ctx_t::ctx_flags
uint32_t ctx_flags
Definition: perfmon_v2.h:19
PerfMonAuditor::first_alg
bool first_alg
Definition: PerfMonAuditor.cpp:426
PerfMonAuditor::process_smpl_buf
static void process_smpl_buf(pfm_dfl_smpl_hdr_t *hdr, size_t entry_size)
Definition: PerfMonAuditor.cpp:594
MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS
#define MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS
Definition: PerfMonAuditor.cpp:81
StatusCode::SUCCESS
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
PFM_REGFL_RANDOM
#define PFM_REGFL_RANDOM
Definition: perfmon.h:113
PerfMonAuditor::m_inEvent
bool m_inEvent
Definition: PerfMonAuditor.cpp:363
PerfMonAuditor::used_counters_number
int used_counters_number
Definition: PerfMonAuditor.cpp:392
PerfMonAuditor::event_cstr
char event_cstr[MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS][MAX_EVENT_NAME_LENGTH]
Definition: PerfMonAuditor.cpp:384
PerfMonAuditor::fd
int fd
Definition: PerfMonAuditor.cpp:374
std::map::begin
T begin(T... args)
PerfMonAuditor::m_pfm
PFMon & m_pfm
Definition: PerfMonAuditor.cpp:243
pfarg_msg_t
Definition: perfmon.h:205
PerfMonAuditor::pd
pfarg_pmd_t pd[NUM_PMDS]
Definition: PerfMonAuditor.cpp:371
Auditor::Auditor
Auditor(std::string name, ISvcLocator *svcloc)
Constructor.
Definition: Auditor.cpp:21
std::count
T count(T... args)
BPL
#define BPL
Definition: PerfMonAuditor.cpp:72
PerfMonAuditor::prefix_cstr
char prefix_cstr[MAX_PREFIX_NAME_LENGTH]
Definition: PerfMonAuditor.cpp:385
pfm_dfl_smpl_entry_t::ovfl_pmd
uint16_t ovfl_pmd
Definition: perfmon_dfl_smpl.h:69
PerfMonAuditor::nehalem
bool nehalem
Definition: PerfMonAuditor.cpp:393
PerfMonAuditor::i_afterInitialize
void i_afterInitialize(INamedInterface *alg)
Definition: PerfMonAuditor.cpp:919
std::memcpy
T memcpy(T... args)
pfmlib_output_param_t::pfp_pmds
pfmlib_reg_t pfp_pmds[PFMLIB_MAX_PMDS]
Definition: pfmlib.h:129
PerfMonAuditor::cmask
unsigned int cmask[MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS]
Definition: PerfMonAuditor.cpp:388
std::make_pair
T make_pair(T... args)
PFM_MSG_OVFL
#define PFM_MSG_OVFL
Definition: perfmon.h:210
PerfMonAuditor::ph_ev_count
unsigned int ph_ev_count
Definition: PerfMonAuditor.cpp:386
IOTest.end
end
Definition: IOTest.py:123
PerfMonAuditor::max_pmd
unsigned int max_pmd
Definition: PerfMonAuditor.cpp:421
StatusCode::FAILURE
constexpr static const auto FAILURE
Definition: StatusCode.h:101
PerfMonAuditor::sigio_handler
static void sigio_handler(int, siginfo_t *, void *)
Definition: PerfMonAuditor.cpp:627
PerfMonAuditor::i_beforeExecute
void i_beforeExecute(INamedInterface *alg)
Definition: PerfMonAuditor.cpp:921
PerfMonAuditor::start_smpl
void start_smpl()
Definition: PerfMonAuditor.cpp:671
pfmlib_output_param_t::pfp_pmc_count
unsigned int pfp_pmc_count
Definition: pfmlib.h:126
pfarg_pmd_t::reg_long_reset
uint64_t reg_long_reset
Definition: perfmon_v2.h:43
pfm_dfl_smpl_hdr_t::hdr_count
uint64_t hdr_count
Definition: perfmon_dfl_smpl.h:46
graphanalysis.filename
filename
Definition: graphanalysis.py:131
PerfMonAuditor::sampling
bool sampling
Definition: PerfMonAuditor.cpp:397
pfarg_pmd_t::reg_random_seed
uint32_t reg_random_seed
Definition: perfmon_v2.h:51
cpuid
#define cpuid(func, ax, bx, cx, dx)
Definition: PerfMonAuditor.cpp:83
PerfMonAuditor::load_arg
pfarg_load_t load_arg
Definition: PerfMonAuditor.cpp:373
pfarg_load_t::load_pid
uint32_t load_pid
Definition: perfmon_v2.h:69
std::memset
T memset(T... args)
PFM_REGFL_OVFL_NOTIFY
#define PFM_REGFL_OVFL_NOTIFY
Definition: perfmon.h:112