The Gaudi Framework  master (37c0b60a)
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 76 of file Auditor.cpp.

139 {}

◆ after() [2/5]

void Auditor::after
override

Definition at line 75 of file Auditor.cpp.

138 {}

◆ after() [3/5]

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

Definition at line 892 of file PerfMonAuditor.cpp.

892  {
893  switch ( evt ) {
896  break;
897  case IAuditor::Execute:
898  i_afterExecute( alg );
899  break;
900  default:
901  break;
902  }
903  return;
904 }

◆ after() [4/5]

void Auditor::after
override

Definition at line 73 of file Auditor.cpp.

136 {}

◆ after() [5/5]

void Auditor::after
override

Definition at line 72 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 70 of file Auditor.cpp.

109 {}

◆ before() [2/5]

void Auditor::before
override

Definition at line 69 of file Auditor.cpp.

108 {}

◆ before() [3/5]

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

Definition at line 878 of file PerfMonAuditor.cpp.

878  {
879  switch ( evt ) {
882  break;
883  case IAuditor::Execute:
884  i_beforeExecute( alg );
885  break;
886  default:
887  break;
888  }
889  return;
890 }

◆ before() [4/5]

void Auditor::before
override

Definition at line 67 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 66 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 870 of file PerfMonAuditor.cpp.

870  {
871  if ( sampling == 0 )
872  finalizepm();
873  else
874  finalize_smpl();
875  return Auditor::finalize();
876 }

◆ finalize_smpl()

void PerfMonAuditor::finalize_smpl ( )
private

Definition at line 794 of file PerfMonAuditor.cpp.

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

◆ finalizepm()

void PerfMonAuditor::finalizepm ( )
private

Definition at line 516 of file PerfMonAuditor.cpp.

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

◆ i_afterExecute()

void PerfMonAuditor::i_afterExecute ( INamedInterface alg)
private

Definition at line 947 of file PerfMonAuditor.cpp.

947  {
948  if ( !alg ) { return; } // info() << "after:inside! " << alg->name() << endmsg;
949 
950  if ( event_count_reached ) {
951  // info() << "after:inside! " << alg->name() << endmsg;
952 
953  if ( sampling == 0 )
954  stoppm();
955  else
956  stop_smpl();
957  alg_stack.pop();
958  --m_indent;
959  if ( !alg_stack.empty() ) {
960  if ( sampling == 0 )
961  startpm();
962  else
963  start_smpl(); // resuming father algorithm counting
964  }
965  }
966 }

◆ i_afterInitialize()

void PerfMonAuditor::i_afterInitialize ( INamedInterface alg)
private

Definition at line 908 of file PerfMonAuditor.cpp.

908 {}

◆ i_beforeExecute()

void PerfMonAuditor::i_beforeExecute ( INamedInterface alg)
private

Definition at line 910 of file PerfMonAuditor.cpp.

910  {
911  if ( !alg ) return;
912  // info() << "before:inside! " << alg->name() << endmsg;
913  if ( first_alg ) {
914  first_alg = false;
915  first_alg_name = alg->name();
916  // info() << "first_alg_name= " << alg->name() << endmsg;
917  }
918  if ( !event_count_reached ) {
919  if ( !first_alg_name.compare( alg->name() ) ) {
920  ph_ev_count++;
921  // info() << "EVENT COUNT: " << ph_ev_count << endmsg;
922  if ( ph_ev_count == start_at_event ) {
923  event_count_reached = true;
924  // info() << "!!! EVENT COUNT REACHED: " << ph_ev_count << endmsg;
925  }
926  }
927  }
928  if ( event_count_reached ) {
929  // info() << "before:inside! " << alg->name() << endmsg;
930 
931  if ( !alg_stack.empty() ) {
932  if ( sampling == 0 )
933  pausepm(); // pausing father algorithm counting
934  else
935  stop_smpl();
936  }
937  ++m_indent;
938  std::vector<unsigned long int> zeroes( 4, 0 );
939  alg_stack.push( std::make_pair( alg, zeroes ) );
940  if ( sampling == 0 )
941  startpm();
942  else
943  start_smpl();
944  }
945 }

◆ i_beforeInitialize()

void PerfMonAuditor::i_beforeInitialize ( INamedInterface alg)
private

Definition at line 906 of file PerfMonAuditor.cpp.

906 {}

◆ initialize()

StatusCode PerfMonAuditor::initialize ( )
overridevirtual

Reimplemented from Auditor.

Definition at line 549 of file PerfMonAuditor.cpp.

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

◆ 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 504 of file PerfMonAuditor.cpp.

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

◆ 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 { memcpy( d, j, ( n >> LBPL ) * sizeof( uint64_t ) ); }
408  }

◆ 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 588 of file PerfMonAuditor.cpp.

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

◆ sigio_handler()

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

Definition at line 621 of file PerfMonAuditor.cpp.

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

◆ start_smpl()

void PerfMonAuditor::start_smpl ( )
private

Definition at line 665 of file PerfMonAuditor.cpp.

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

◆ startpm()

void PerfMonAuditor::startpm ( )
private

Definition at line 429 of file PerfMonAuditor.cpp.

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

◆ stop_smpl()

void PerfMonAuditor::stop_smpl ( )
private

Definition at line 781 of file PerfMonAuditor.cpp.

781  {
782  m_pfm.pfm_self_stop( ctx_fd );
783  process_smpl_buf( hdr, entry_size );
784  close( ctx_fd );
785  ret = munmap( hdr, buf_arg.buf_size );
786  if ( ret ) { error() << "Cannot unmap buffer: %s" << strerror( errno ) << endmsg; }
787  return;
788 }

◆ stoppm()

void PerfMonAuditor::stoppm ( )
private

Definition at line 494 of file PerfMonAuditor.cpp.

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

Member Data Documentation

◆ buf_addr

void* PerfMonAuditor::buf_addr
private

Definition at line 417 of file PerfMonAuditor.cpp.

◆ buf_arg

pfm_dfl_smpl_arg_t PerfMonAuditor::buf_arg
private

Definition at line 415 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 426 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 424 of file PerfMonAuditor.cpp.

◆ first_alg_name

std::string PerfMonAuditor::first_alg_name
private

Definition at line 425 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 422 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 416 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 419 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 418 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 420 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:107
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:906
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:947
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:416
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:781
ctest_measurements_reporter.results
results
Definition: ctest_measurements_reporter.py:25
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:525
PerfMonAuditor::pfmlib_options
pfmlib_options_t pfmlib_options
Definition: PerfMonAuditor.cpp:420
Auditor::afterExecute
void afterExecute(INamedInterface *, const StatusCode &) override
Definition: Auditor.cpp:146
PerfMonAuditor::pausepm
void pausepm()
Definition: PerfMonAuditor.cpp:504
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:794
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
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
ManySmallAlgs.alg
alg
Definition: ManySmallAlgs.py:81
Auditor::name
const std::string & name() const override
Definition: Auditor.cpp:192
PerfMonAuditor::first_alg_name
std::string first_alg_name
Definition: PerfMonAuditor.cpp:425
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)
PerfMonAuditor::pfm_bv_set
void pfm_bv_set(uint64_t *bv, uint16_t rnum)
Definition: PerfMonAuditor.cpp:400
ProduceConsume.j
j
Definition: ProduceConsume.py:104
PerfMonAuditor::startpm
void startpm()
Definition: PerfMonAuditor.cpp:429
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:516
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:494
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:202
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
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:417
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
cpluginsvc.n
n
Definition: cpluginsvc.py:234
PerfMonAuditor::num_counters
unsigned num_counters
Definition: PerfMonAuditor.cpp:418
PerfMonAuditor::prefix
std::string prefix
Definition: PerfMonAuditor.cpp:382
PerfMonAuditor::buf_arg
pfm_dfl_smpl_arg_t buf_arg
Definition: PerfMonAuditor.cpp:415
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:426
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:32
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:424
PerfMonAuditor::process_smpl_buf
static void process_smpl_buf(pfm_dfl_smpl_hdr_t *hdr, size_t entry_size)
Definition: PerfMonAuditor.cpp:588
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
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:908
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
PerfMonAuditor::max_pmd
unsigned int max_pmd
Definition: PerfMonAuditor.cpp:419
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:621
PerfMonAuditor::i_beforeExecute
void i_beforeExecute(INamedInterface *alg)
Definition: PerfMonAuditor.cpp:910
PerfMonAuditor::start_smpl
void start_smpl()
Definition: PerfMonAuditor.cpp:665
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:130
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