| The Gaudi Framework v32r1 (f65d50dc)

Public Member Functions | Private Attributes | List of all members
JemallocProfile Class Reference

Algorithm to enable/disable the profiling of the head by Jemalloc. More...

`#include <jemalloc/JemallocProfile.h>`

Inheritance diagram for JemallocProfile:
[legend]
Collaboration diagram for JemallocProfile:
[legend]

## Public Member Functions
StatusCode | initialize () override
| Algorithm initialization. More...
StatusCode | execute () override
| Algorithm execution. More...
StatusCode | finalize () override
| Algorithm finalization. More...
| GaudiAlgorithm (const std::string &name, ISvcLocator *pSvcLocator)
| Standard constructor. More...
| GaudiAlgorithm (const GaudiAlgorithm &)=delete
| Standard constructor. More...
Public Member Functions inherited from GaudiAlgorithm
StatusCode | initialize () override
| standard initialization method More...
StatusCode | execute () override
| standard execution method More...
StatusCode | finalize () override
| standard finalization method More...
StatusCode | sysExecute (const EventContext &ctx) override
| the generic actions for the execution. More...
void | put (IDataProviderSvc *svc, DataObject *object, const std::string &address, const bool useRootInTES=true) const
| Register a data object or container into Gaudi Event Transient Store. More...
void | put (IDataProviderSvc *svc, std::unique_ptr< DataObject > object, const std::string &address, const bool useRootInTES=true) const
const DataObject * | put (DataObject *object, const std::string &address, const bool useRootInTES=true) const
| Register a data object or container into Gaudi Event Transient Store. More...
const DataObject * | put (std::unique_ptr< DataObject > object, const std::string &address, const bool useRootInTES=true) const
template<class TYPE >
Gaudi::Utils::GetData< TYPE >::return_type | get (IDataProviderSvc *svc, const std::string &location, const bool useRootInTES=true) const
| Templated access to the data in Gaudi Transient Store. More...
template<class TYPE >
Gaudi::Utils::GetData< TYPE >::return_type | getIfExists (IDataProviderSvc *svc, const std::string &location, const bool useRootInTES=true) const
| Templated access to the data in Gaudi Transient Store. More...
template<class TYPE >
Gaudi::Utils::GetData< TYPE >::return_type | get (const std::string &location, const bool useRootInTES=true) const
| Templated access to the data from Gaudi Event Transient Store. More...
template<class TYPE >
Gaudi::Utils::GetData< TYPE >::return_type | getIfExists (const std::string &location, const bool useRootInTES=true) const
| Templated access to the data in Gaudi Transient Store. More...
template<class TYPE >
TYPE * | getDet (IDataProviderSvc *svc, const std::string &location) const
| Templated access to the detector data from the Gaudi Detector Transient Store. More...
template<class TYPE >
Gaudi::Utils::GetData< TYPE >::return_type | getDetIfExists (IDataProviderSvc *svc, const std::string &location) const
| Templated access to the detector data from the Gaudi Detector Transient Store. More...
template<class TYPE >
TYPE * | getDet (const std::string &location) const
| Templated access to the detector data from the Gaudi Detector Transient Store. More...
template<class TYPE >
Gaudi::Utils::GetData< TYPE >::return_type | getDetIfExists (const std::string &location) const
| Templated access to the detector data from the Gaudi Detector Transient Store. More...
template<class TYPE >
bool | exist (IDataProviderSvc *svc, const std::string &location, const bool useRootInTES=true) const
| Check the existence of a data object or container in the Gaudi Transient Event Store. More...
template<class TYPE >
bool | exist (const std::string &location, const bool useRootInTES=true) const
| Check the existence of a data object or container in the Gaudi Transient Event Store. More...
template<class TYPE >
bool | existDet (IDataProviderSvc *svc, const std::string &location) const
| Check the existence of detector objects in the Gaudi Transient Detector Store. More...
template<class TYPE >
bool | existDet (const std::string &location) const
| Check the existence of detector objects in the Gaudi Transient Detector Store. More...
template<class TYPE , class TYPE2 >
Gaudi::Utils::GetData< TYPE >::return_type | getOrCreate (IDataProviderSvc *svc, const std::string &location, const bool useRootInTES=true) const
| Get the existing data object from Gaudi Event Transient store. More...
template<class TYPE , class TYPE2 >
Gaudi::Utils::GetData< TYPE >::return_type | getOrCreate (const std::string &location, const bool useRootInTES=true) const
| Get the existing data object from Gaudi Event Transient store. More...
| GaudiAlgorithm (const std::string &name, ISvcLocator *pSvcLocator)
| Standard constructor. More...
| GaudiAlgorithm (const GaudiAlgorithm &)=delete
GaudiAlgorithm & | operator= (const GaudiAlgorithm &)=delete
SmartIF< INTupleSvc > & | evtColSvc () const
| Access the standard event collection service. More...
Public Member Functions inherited from GaudiCommon< Algorithm >
Gaudi::Utils::GetData< TYPE >::return_type | get (IDataProviderSvc *svc, const std::string &location, const bool useRootInTES=true) const
| Templated access to the data in Gaudi Transient Store. More...
Gaudi::Utils::GetData< TYPE >::return_type | getIfExists (IDataProviderSvc *svc, const std::string &location, const bool useRootInTES=true) const
| Quicker version of the get function which bypasses the check on the retrieved data. More...
bool | exist (IDataProviderSvc *svc, const std::string &location, const bool useRootInTES=true) const
| Check the existence of a data object or container in the Gaudi Transient Event Store. More...
Gaudi::Utils::GetData< TYPE >::return_type | getOrCreate (IDataProviderSvc *svc, const std::string &location, const bool useRootInTES=true) const
| Get the existing data object from Gaudi Event Transient store. More...
DataObject * | put (IDataProviderSvc *svc, std::unique_ptr< DataObject > object, const std::string &location, const bool useRootInTES=true) const
| Register a data object or container into Gaudi Event Transient Store. More...
DataObject * | put (IDataProviderSvc *svc, DataObject *object, const std::string &location, const bool useRootInTES=true) const
TOOL * | tool (const std::string &type, const std::string &name, const IInterface *parent=0, bool create=true) const
| Useful method for the easy location of tools. More...
TOOL * | tool (const std::string &type, const IInterface *parent=0, bool create=true) const
| A useful method for the easy location of tools. More...
SmartIF< SERVICE > | svc (const std::string &name, const bool create=true) const
| A useful method for the easy location of services. More...
IUpdateManagerSvc * | updMgrSvc () const
| Short-cut to locate the Update Manager Service. More...
WARN_UNUSED StatusCode | Error (const std::string &msg, const StatusCode st=StatusCode::FAILURE, const size_t mx=10) const
| Print the error message and return with the given StatusCode. More...
WARN_UNUSED StatusCode | Warning (const std::string &msg, const StatusCode st=StatusCode::FAILURE, const size_t mx=10) const
| Print the warning message and return with the given StatusCode. More...
WARN_UNUSED StatusCode | Info (const std::string &msg, const StatusCode st=StatusCode::SUCCESS, const size_t mx=10) const
| Print the info message and return with the given StatusCode. More...
WARN_UNUSED StatusCode | Print (const std::string &msg, const StatusCode st=StatusCode::SUCCESS, const MSG::Level lev=MSG::INFO) const
| Print the message and return with the given StatusCode. More...
void | Assert (const bool ok, const std::string &message="", const StatusCode sc=StatusCode(StatusCode::FAILURE, true)) const
| Assertion - throw exception if the given condition is not fulfilled. More...
void | Assert (const bool ok, const char *message, const StatusCode sc=StatusCode(StatusCode::FAILURE, true)) const
| Assertion - throw exception if the given condition is not fulfilled. More...
void | Exception (const std::string &msg, const GaudiException &exc, const StatusCode sc=StatusCode(StatusCode::FAILURE, true)) const
| Create and (re)-throw a given GaudiException. More...
void | Exception (const std::string &msg, const std::exception &exc, const StatusCode sc=StatusCode(StatusCode::FAILURE, true)) const
| Create and (re)-throw a given exception. More...
void | Exception (const std::string &msg="no message", const StatusCode sc=StatusCode(StatusCode::FAILURE, true)) const
| Create and throw an exception with the given message. More...
StatEntity & | counter (const std::string &tag) const
| accessor to certain counter by name More...
StatEntity & | counter (const std::string &tag)
bool | typePrint () const
| Insert the actual C++ type of the algorithm/tool in the messages ? More...
bool | propsPrint () const
| Print properties at initialization ? More...
bool | statPrint () const
| Print statistical counters at finalization ? More...
bool | errorsPrint () const
| Print error counters at finalization ? More...
long | printStat (const MSG::Level level=MSG::ALWAYS) const
| perform the actual printout of statistical counters More...
long | printErrors (const MSG::Level level=MSG::ALWAYS) const
| perform the actual printout of error counters More...
long | printProps (const MSG::Level level=MSG::ALWAYS) const
| perform the actual printout of properties More...
void | registerCondition (const std::string &condition, StatusCode(CallerClass::*mf)()=nullptr)
| register the current instance to the UpdateManagerSvc as a consumer for a condition. More...
void | registerCondition (const std::string &condition, CondType *&condPtrDest, StatusCode(CallerClass::*mf)()=NULL)
| register the current instance to the UpdateManagerSvc as a consumer for a condition. More...
void | registerCondition (char *condition, StatusCode(CallerClass::*mf)()=NULL)
| just to avoid conflicts with the version using a pointer to a template class. More...
void | registerCondition (TargetClass *condition, StatusCode(CallerClass::*mf)()=NULL)
| register the current instance to the UpdateManagerSvc as a consumer for a condition. More...
StatusCode | runUpdate ()
| asks the UpdateManagerSvc to perform an update of the instance (if needed) without waiting the next BeginEvent incident. More...
| GaudiCommon (const std::string &name, ISvcLocator *pSvcLocator)
| Algorithm constructor - the SFINAE constraint below ensures that this is constructor is only defined if PBASE derives from Algorithm. More...
| GaudiCommon (const std::string &type, const std::string &name, const IInterface *ancestor)
| Tool constructor - SFINAE-ed to insure this constructor is only defined if PBASE derives from AlgTool. More...
StatusCode | initialize () override
| standard initialization method More...
StatusCode | finalize () override
| standard finalization method More...
StatusCode | release (const IInterface *interface) const
| Manual forced (and 'safe') release of the active tool or service. More...
const Services & | services () const
| get the list of aquired services More...
const std::string & | context () const
| Returns the "context" string. Used to identify different processing states. More...
Public Member Functions inherited from FixTESPath< BASE >
template<typename U = BASE, typename = std::enable_if_t<std::is_base_of_v<Gaudi::Algorithm, BASE>, U>>
| FixTESPath (const std::string &name, ISvcLocator *pSvcLocator)
| Algorithm constructor - the SFINAE constraint below ensures that this is constructor is only defined if BASE derives from Algorithm. More...
template<typename U = BASE, typename = std::enable_if_t<std::is_base_of_v<AlgTool, BASE>, U>>
| FixTESPath (const std::string &type, const std::string &name, const IInterface *ancestor)
| Tool constructor - SFINAE-ed to insure this constructor is only defined if BASE derives from AlgTool. More...
StatusCode | initialize () override
const std::string & | rootInTES () const
| Returns the "rootInTES" string. More...
std::string | fullTESLocation (std::string_view location, bool useRootInTES) const
| Returns the full correct event location given the rootInTes settings. More...

## Private Attributes
Gaudi::Property< int > | m_nStartFromEvent {this, "StartFromEventN", 1, "After what event we start profiling. "}
Gaudi::Property< int > | m_nStopAtEvent
Gaudi::Property< int > | m_dumpPeriod {this, "DumpPeriod", 100, "Period for dumping head to a file. Default=100"}
bool | m_profiling = false
int | m_eventNumber = 0

## Additional Inherited Members
Protected Types inherited from GaudiCommon< Algorithm >
using | base_class = FixTESPath< Algorithm >
typedef std::map< std::string, StatEntity > | StatisticsOwn
| the actual type of general counters More...
typedef std::map< std::string, std::reference_wrapper< Gaudi::Accumulators::PrintableCounter > > | Statistics
typedef std::map< std::string, unsigned int > | Counter
| the actual type error/warning counter More...
typedef std::vector< IAlgTool * > | AlgTools
| storage for active tools More...
typedef std::vector< SmartIF< IService > > | Services
| storage for active services More...
Protected Member Functions inherited from GaudiCommon< Algorithm >
StatusCode | releaseTool (const IAlgTool *tool) const
| manual forced (and 'safe') release of the tool More...
StatusCode | releaseSvc (const IInterface *svc) const
| manual forced (and 'safe') release of the service More...
Protected Attributes inherited from GaudiCommon< Algorithm >
SmartIF< ICounterSummarySvc > | m_counterSummarySvc
| a pointer to the CounterSummarySvc More...
Static Protected Attributes inherited from GaudiCommon< Algorithm >
static const bool | IgnoreRootInTES
| Simple definition to be used with the new useRootInTES argument get<TYPE> and put methods. More...
static const bool | UseRootInTES
| Simple definition to be used with the new useRootInTES argument get<TYPE> and put methods. More...

## Detailed Description

Algorithm to enable/disable the profiling of the head by Jemalloc.

For this to run, you must set the env variables: LD_PRELOAD=<jemalloc lib>=""> MALLOC_CONF=prof:true,prof_leak:true,prof_prefix:<dumpprefix>

Author
  Ben Couturier

Date
  2015-06-09

Definition at line 19 of file JemallocProfile.h.

## Member Function Documentation

## ◆ execute()

StatusCode JemallocProfile::execute | ( |  | ) |
| override

Algorithm execution.

Definition at line 40 of file JemallocProfile.cpp.

40 {
41
42 if ( msgLevel( MSG::DEBUG ) ) debug() << "==> Execute" << endmsg;
43
44 // Increase event number
45 m_eventNumber += 1;
46
47 if ( m_eventNumber == m_nStartFromEvent ) {
48 m_profiling = true;
49 info() << "Starting Jemalloc profile at event " << m_eventNumber << endmsg;
50 }
51
52 if ( m_profiling && ( ( m_eventNumber - m_nStartFromEvent ) % m_dumpPeriod == 0 ) ) {
53 info() << "Jemalloc Dumping heap at event " << m_eventNumber << endmsg;
54 mallctl( "prof.dump", NULL, NULL, NULL, 0 );
55 }
56
57 if ( m_eventNumber == m_nStopAtEvent ) {
58 m_profiling = false;
59 info() << "Stopping Jemalloc profile at event " << m_eventNumber << endmsg;
60 mallctl( "prof.dump", NULL, NULL, NULL, 0 );
61 }
62 return StatusCode::SUCCESS;
63 }
MSG::DEBUG
Definition: IMessageSvc.h:15
JemallocProfile::m_nStopAtEvent
Gaudi::Property< int > m_nStopAtEvent
Definition: JemallocProfile.h:30
StatusCode::SUCCESS
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
JemallocProfile::m_eventNumber
int m_eventNumber
Definition: JemallocProfile.h:36
JemallocProfile::m_dumpPeriod
Gaudi::Property< int > m_dumpPeriod
Definition: JemallocProfile.h:33
JemallocProfile::m_profiling
bool m_profiling
Definition: JemallocProfile.h:35
JemallocProfile::m_nStartFromEvent
Gaudi::Property< int > m_nStartFromEvent
Definition: JemallocProfile.h:29
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192
mallctl
int mallctl(const char *name, void *oldp, size_t *oldlenp, void *newp, size_t newlen)

## ◆ finalize()

StatusCode JemallocProfile::finalize | ( |  | ) |
| override

Algorithm finalization.

Definition at line 68 of file JemallocProfile.cpp.

68 {
69
70 if ( msgLevel( MSG::DEBUG ) ) debug() << "==> Finalize" << endmsg;
71 return GaudiAlgorithm::finalize(); // must be called after all other actions
72 }
MSG::DEBUG
Definition: IMessageSvc.h:15
GaudiAlgorithm::finalize
StatusCode finalize() override
standard finalization method
Definition: GaudiAlgorithm.cpp:55
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192

## ◆ GaudiAlgorithm() [1/2]

GaudiAlgorithm::GaudiAlgorithm

Standard constructor.

Definition at line 35 of file GaudiAlgorithm.cpp.

36 : GaudiCommon<Algorithm>( name, pSvcLocator ) {
37 setProperty( "RegisterForContextService", true ).ignore();
38 }
gaudiComponentHelp.name
name
Definition: gaudiComponentHelp.py:41
setProperty
bool PyHelper() setProperty(IInterface *p, char *name, char *value)
Definition: Bootstrap.cpp:233
GaudiCommon< Algorithm >

## ◆ GaudiAlgorithm() [2/2]

GaudiAlgorithm::GaudiAlgorithm
| delete

Standard constructor.

## ◆ initialize()

StatusCode JemallocProfile::initialize | ( |  | ) |
| override

Algorithm initialization.

Definition at line 26 of file JemallocProfile.cpp.

26 {
27 StatusCode sc = GaudiAlgorithm::initialize(); // must be executed first
28 if ( sc.isFailure() ) return sc; // error printed already by GaudiAlgorithm
29
30 if ( msgLevel( MSG::DEBUG ) ) debug() << "==> Initialize" << endmsg;
31 bool active = true;
32 int res = mallctl( "prof.active", NULL, NULL, &active, sizeof( active ) );
33 if ( res != 0 ) { return StatusCode::FAILURE; }
34 return StatusCode::SUCCESS;
35 }
GaudiAlgorithm::initialize
StatusCode initialize() override
standard initialization method
Definition: GaudiAlgorithm.cpp:42
MSG::DEBUG
Definition: IMessageSvc.h:15
StatusCode::SUCCESS
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
StatusCode::FAILURE
constexpr static const auto FAILURE
Definition: StatusCode.h:86
StatusCode::isFailure
bool isFailure() const
Definition: StatusCode.h:130
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192
mallctl
int mallctl(const char *name, void *oldp, size_t *oldlenp, void *newp, size_t newlen)

## Member Data Documentation

## ◆ m_dumpPeriod

Gaudi::Property<int> JemallocProfile::m_dumpPeriod {this, "DumpPeriod", 100, "Period for dumping head to a file. Default=100"}
| private

Definition at line 33 of file JemallocProfile.h.

## ◆ m_eventNumber

int JemallocProfile::m_eventNumber = 0
| private

Definition at line 36 of file JemallocProfile.h.

## ◆ m_nStartFromEvent

Gaudi::Property<int> JemallocProfile::m_nStartFromEvent {this, "StartFromEventN", 1, "After what event we start profiling. "}
| private

Definition at line 29 of file JemallocProfile.h.

## ◆ m_nStopAtEvent

Gaudi::Property<int> JemallocProfile::m_nStopAtEvent
| private

Initial value:
{
this, "StopAtEventN", 0,
"After what event we stop profiling. If 0 than we also profile finalization stage. Default = 0."}

Definition at line 30 of file JemallocProfile.h.

## ◆ m_profiling

bool JemallocProfile::m_profiling = false
| private

Definition at line 35 of file JemallocProfile.h.

The documentation for this class was generated from the following files:

- GaudiProfiling/src/component/jemalloc/JemallocProfile.h
- GaudiProfiling/src/component/jemalloc/JemallocProfile.cpp