Processor Counter Monitor
|
CPU Performance Monitor. More...
#include <cpucounters.h>
Classes | |
struct | CustomCoreEventDescription |
Custom Core event description. More... | |
struct | CustomIIOEventDescription |
struct | ExtendedCustomCoreEventDescription |
Extended custom core event description. More... | |
struct | SimplePCIeDevInfo |
Public Types | |
enum | { MAX_C_STATE = 10 } |
enum | ProgramMode { DEFAULT_EVENTS = 0, CUSTOM_CORE_EVENTS = 1, EXT_CUSTOM_CORE_EVENTS = 2, INVALID_MODE } |
Mode of programming (parameter in the program() method) More... | |
enum | ErrorCode { Success = 0, MSRAccessDenied = 1, PMUBusy = 2, UnknownError } |
Return codes (e.g. for program(..) method) | |
enum | PerfmonField { INVALID, OPCODE, EVENT_SELECT, UMASK, RESET, EDGE_DET, IGNORED, OVERFLOW_ENABLE, ENABLE, INVERT, THRESH, CH_MASK, FC_MASK, H_EVENT_NAME, V_EVENT_NAME, MULTIPLIER, DIVIDER, COUNTER_INDEX } |
enum | PCIeWidthMode { X1, X4, X8, X16, XFF } |
enum | { IIO_CBDMA = 0, IIO_PCIe0 = 1, IIO_PCIe1 = 2, IIO_PCIe2 = 3, IIO_MCP0 = 4, IIO_MCP1 = 5, IIO_STACK_COUNT = 6 } |
enum | SupportedCPUModels { NEHALEM_EP = 26, NEHALEM = 30, ATOM = 28, ATOM_2 = 53, ATOM_CENTERTON = 54, ATOM_BAYTRAIL = 55, ATOM_AVOTON = 77, ATOM_CHERRYTRAIL = 76, ATOM_APOLLO_LAKE = 92, ATOM_DENVERTON = 95, CLARKDALE = 37, WESTMERE_EP = 44, NEHALEM_EX = 46, WESTMERE_EX = 47, SANDY_BRIDGE = 42, JAKETOWN = 45, IVY_BRIDGE = 58, HASWELL = 60, HASWELL_ULT = 69, HASWELL_2 = 70, IVYTOWN = 62, HASWELLX = 63, BROADWELL = 61, BROADWELL_XEON_E3 = 71, BDX_DE = 86, SKL_UY = 78, KBL = 158, KBL_1 = 142, BDX = 79, KNL = 87, SKL = 94, SKX = 85, END_OF_MODEL_LIST = 0x0ffff } |
Identifiers of supported CPU models. | |
enum | PCIeEventCode { PCIeRdCur = 0x19E, PCIeNSRd = 0x1E4, PCIeWiLF = 0x194, PCIeItoM = 0x19C, PCIeNSWr = 0x1E5, PCIeNSWrF = 0x1E6, RFO = 0x180, CRd = 0x181, DRd = 0x182, PRd = 0x187, WiL = 0x18F, ItoM = 0x1C8, SKX_RFO = 0x200, SKX_CRd = 0x201, SKX_DRd = 0x202, SKX_PRd = 0x207, SKX_WiL = 0x20F, SKX_RdCur = 0x21E, SKX_ItoM = 0x248 } |
enum | ChaPipelineQueue { None, IRQ, PRQ } |
enum | CBoEventTid { RFOtid = 0x3E, ItoMtid = 0x3E } |
Public Member Functions | |
bool | isCoreCStateResidencySupported (int state) |
Returns true if the specified core C-state residency metric is supported. | |
bool | isPackageCStateResidencySupported (int state) |
Returns true if the specified package C-state residency metric is supported. | |
void | setOutput (const std::string filename) |
Redirects output destination to provided file, instead of std::cout. | |
void | restoreOutput () |
Restores output, closes output file if opened. | |
void | setRunState (int new_state) |
Set Run State. | |
int | getRunState (void) |
Returns program's Run State. | |
bool | isBlocked (void) |
void | setBlocked (const bool new_blocked) |
void | allowMultipleInstances () |
Call it before program() to allow multiple running instances of PCM on the same system. | |
bool | isSecureBoot () const |
check if in secure boot mode | |
bool | useLinuxPerfForUncore () const |
true if Linux perf for uncore PMU programming should AND can be used internally | |
bool | QOSMetricAvailable () const |
checks if QOS monitoring support present More... | |
bool | L3QOSMetricAvailable () const |
checks L3 cache support for QOS present More... | |
bool | L3CacheOccupancyMetricAvailable () const |
checks if L3 cache monitoring present More... | |
bool | CoreLocalMemoryBWMetricAvailable () const |
checks if local memory bandwidth monitoring present More... | |
bool | CoreRemoteMemoryBWMetricAvailable () const |
checks if total memory bandwidth monitoring present More... | |
unsigned | getMaxRMID () const |
returns the max number of RMID supported by socket More... | |
bool | good () |
Checks the status of PCM object. More... | |
const std::string & | getErrorMessage () const |
Returns the error message. More... | |
ErrorCode | program (const ProgramMode mode_=DEFAULT_EVENTS, const void *parameter_=NULL) |
Programs performance counters. More... | |
ErrorCode | programServerUncoreLatencyMetrics (bool enable_pmm) |
Programs uncore latency counters on microarchitectures codename SandyBridge-EP and later Xeon uarch. More... | |
ErrorCode | programServerUncorePowerMetrics (int mc_profile, int pcu_profile, int *freq_bands=NULL) |
Programs uncore power/energy counters on microarchitectures codename SandyBridge-EP and later Xeon uarch. More... | |
ErrorCode | programServerUncoreMemoryMetrics (int rankA=-1, int rankB=-1, bool PMM=false) |
Programs uncore memory counters on microarchitectures codename SandyBridge-EP and later Xeon uarch. More... | |
void | freezeServerUncoreCounters () |
Freezes uncore event counting (works only on microarchitecture codename SandyBridge-EP and IvyTown) | |
void | unfreezeServerUncoreCounters () |
Unfreezes uncore event counting (works only on microarchitecture codename SandyBridge-EP and IvyTown) | |
ServerUncorePowerState | getServerUncorePowerState (uint32 socket) |
Reads the power/energy counter state of a socket (works only on microarchitecture codename SandyBridge-EP) More... | |
void | cleanup () |
Cleanups resources and stops performance counting. More... | |
void | resetPMU () |
Forces PMU reset. More... | |
void | getAllCounterStates (SystemCounterState &systemState, std::vector< SocketCounterState > &socketStates, std::vector< CoreCounterState > &coreStates) |
Reads all counter states (including system, sockets and cores) More... | |
void | getUncoreCounterStates (SystemCounterState &systemState, std::vector< SocketCounterState > &socketStates) |
Reads uncore counter states (including system and sockets) but no core counters. More... | |
bool | isCoreOnline (int32 os_core_id) const |
Return true if the core in online. More... | |
bool | isSocketOnline (int32 socket_id) const |
Return true if the socket in online. More... | |
SystemCounterState | getSystemCounterState () |
Reads the counter state of the system. More... | |
SocketCounterState | getSocketCounterState (uint32 socket) |
Reads the counter state of a socket. More... | |
CoreCounterState | getCoreCounterState (uint32 core) |
Reads the counter state of a (logical) core. More... | |
uint32 | getNumCores () const |
Reads number of logical cores in the system. More... | |
uint32 | getNumOnlineCores () const |
Reads number of online logical cores in the system. More... | |
uint32 | getNumSockets () const |
Reads number of sockets (CPUs) in the system. More... | |
uint32 | getNumOnlineSockets () const |
Reads number of online sockets (CPUs) in the system. More... | |
uint32 | getThreadsPerCore () const |
Reads how many hardware threads has a physical core "Hardware thread" is a logical core in a different terminology. If Intel(r) Hyperthreading(tm) is enabled then this function returns 2. More... | |
bool | getSMT () const |
Checks if SMT (HyperThreading) is enabled. More... | |
uint64 | getNominalFrequency () const |
Reads the nominal core frequency. More... | |
uint32 | getL3ScalingFactor () const |
runs CPUID.0xF.0x01 to get the L3 up scaling factor to calculate L3 Occupancy Scaling factor is returned in EBX register after running the CPU instruction More... | |
bool | isSomeCoreOfflined () |
runs CPUID.0xB.0x01 to get maximum logical cores (including SMT) per socket. max_lcores_per_socket is returned in EBX[15:0]. Compare this value with number of cores per socket detected in the system to see if some cores are offlined More... | |
int32 | getMaxCustomCoreEvents () |
Returns the maximum number of custom (general-purpose) core events supported by CPU. | |
uint32 | getCPUModel () const |
Reads CPU model id. More... | |
uint32 | getOriginalCPUModel () const |
Reads original CPU model id. More... | |
uint32 | getCPUStepping () const |
Reads CPU stepping id. More... | |
int32 | getThreadId (uint32 os_id) const |
Determines physical thread of given processor ID within a core. More... | |
int32 | getCoreId (uint32 os_id) const |
Determines physical core of given processor ID within a socket. More... | |
int32 | getTileId (uint32 os_id) const |
Determines physical tile (cores sharing L2 cache) of given processor ID. More... | |
int32 | getSocketId (uint32 core_id) const |
Determines socket of given core. More... | |
uint64 | getQPILinksPerSocket () const |
Returns the number of Intel(r) Quick Path Interconnect(tm) links per socket. More... | |
uint32 | getMCPerSocket () const |
Returns the number of detected integrated memory controllers per socket. | |
size_t | getMCChannelsPerSocket () const |
Returns the total number of detected memory channels on all integrated memory controllers per socket. | |
size_t | getMCChannels (uint32 socket, uint32 controller) const |
Returns the number of detected memory channels on given integrated memory controllers. More... | |
size_t | getEDCChannelsPerSocket () const |
Returns the total number of detected memory channels on all integrated memory controllers per socket. | |
uint32 | getMaxIPC () const |
Returns the max number of instructions per cycle. More... | |
uint64 | getPCUFrequency () const |
Returns the frequency of Power Control Unit. | |
uint64 | getTickCount (uint64 multiplier=1000, uint32 core=0) |
Return TSC timer value in time units. More... | |
uint64 | getTickCountRDTSCP (uint64 multiplier=1000) |
Return TSC timer value in time units using rdtscp instruction from current core. More... | |
uint64 | getUncoreClocks (const uint32 socket_) |
Returns uncore clock ticks on specified socket. | |
uint64 | getQPILinkSpeed (uint32 socketNr, uint32 linkNr) const |
Return QPI Link Speed in GBytes/second. More... | |
double | getJoulesPerEnergyUnit () const |
Returns how many joules are in an internal processor energy unit. | |
int32 | getPackageThermalSpecPower () const |
Returns thermal specification power of the package domain in Watt. | |
int32 | getPackageMinimumPower () const |
Returns minimum power derived from electrical spec of the package domain in Watt. | |
int32 | getPackageMaximumPower () const |
Returns maximum power derived from electrical spec of the package domain in Watt. | |
void | disableJKTWorkaround () |
void | programPCIeCounters (const PCIeEventCode event_, const uint32 tid_=0, const uint32 miss_=0, const uint32 q_=0, const uint32 nc_=0) |
Program uncore PCIe monitoring event(s) More... | |
void | programPCIeMissCounters (const PCIeEventCode event_, const uint32 tid_=0, const uint32 q_=0, const uint32 nc_=0) |
PCIeCounterState | getPCIeCounterState (const uint32 socket_) |
Get the state of PCIe counter(s) More... | |
void | programIIOCounters (IIOPMUCNTCTLRegister rawEvents[4], int IIOStack=-1) |
Program uncore IIO events. More... | |
IIOCounterState | getIIOCounterState (int socket, int IIOStack, int counter) |
Get the state of IIO counter. More... | |
void | getIIOCounterStates (int socket, int IIOStack, IIOCounterState *result) |
Get the states of the four IIO counters in bulk (faster than four single reads) More... | |
uint64 | extractCoreGenCounterValue (uint64 val) |
uint64 | extractCoreFixedCounterValue (uint64 val) |
uint64 | extractUncoreGenCounterValue (uint64 val) |
uint64 | extractUncoreFixedCounterValue (uint64 val) |
uint64 | extractQOSMonitoring (uint64 val) |
const char * | getUArchCodename (const int32 cpu_model_=-1) const |
Get a string describing the codename of the processor microarchitecture. More... | |
std::string | getCPUFamilyModelString () |
int64 | getCPUMicrocodeLevel () const |
Get microcode level (returns -1 if retrieval not supported due to some restrictions) | |
bool | packageEnergyMetricsAvailable () const |
bool | dramEnergyMetricsAvailable () const |
bool | packageThermalMetricsAvailable () const |
bool | outgoingQPITrafficMetricsAvailable () const |
bool | incomingQPITrafficMetricsAvailable () const |
bool | qpiUtilizationMetricsAvailable () const |
bool | memoryTrafficMetricsAvailable () const |
bool | MCDRAMmemoryTrafficMetricsAvailable () const |
bool | memoryIOTrafficMetricAvailable () const |
bool | IIOEventsAvailable () const |
bool | LatencyMetricsAvailable () const |
bool | PMMTrafficMetricsAvailable () const |
bool | LLCReadMissLatencyMetricsAvailable () const |
bool | hasBecktonUncore () const |
bool | hasPCICFGUncore () const |
bool | hasUPI () const |
const char * | xPI () const |
bool | supportsHLE () const |
bool | supportsRTM () const |
bool | useSkylakeEvents () const |
double | getBytesPerFlit () const |
double | getDataBytesPerFlit () const |
double | getBytesPerLinkCycle () const |
double | getBytesPerLinkTransfer () const |
void | setupCustomCoreEventsForNuma (PCM::ExtendedCustomCoreEventDescription &conf) const |
Setup ExtendedCustomCoreEventDescription object to read offcore (numa) counters for each processor type. More... | |
PCM_GENERATE_METRIC_AVAILABLE_FUNCTION (CyclesLostDueL3CacheMissesAvailable) PCM_GENERATE_METRIC_AVAILABLE_FUNCTION(CyclesLostDueL2CacheMissesAvailable) bool isActiveRelativeFrequencyAvailable() const | |
Static Public Member Functions | |
static PCM * | getInstance () |
Returns PCM object. More... | |
static bool | initWinRing0Lib () |
Loads and initializes Winring0 third party library for access to processor model specific and PCI configuration registers. More... | |
static std::string | getCPUBrandString () |
Get Brand string of processor. | |
static double | getBytesPerFlit (int32 cpu_model_) |
static double | getDataBytesPerFlit (int32 cpu_model_) |
static double | getFlitsPerLinkCycle (int32 cpu_model_) |
static double | getBytesPerLinkCycle (int32 cpu_model_) |
static double | getLinkTransfersPerLinkCycle () |
Friends | |
class | BasicCounterState |
class | UncoreCounterState |
class | PerfVirtualControlRegister |
CPU Performance Monitor.
This singleton object needs to be instantiated for each process before accessing counting and measuring routines
enum PCM::ProgramMode |
Mode of programming (parameter in the program() method)
Enumerator | |
---|---|
DEFAULT_EVENTS |
Default choice of events, the additional parameter is not needed and ignored |
CUSTOM_CORE_EVENTS |
Custom set of core events specified in the parameter to the program method. The parameter must be a pointer to array of four |
EXT_CUSTOM_CORE_EVENTS |
Custom set of core events specified in the parameter to the program method. The parameter must be a pointer to a |
INVALID_MODE |
Non-programmed mode |
void PCM::cleanup | ( | ) |
Cleanups resources and stops performance counting.
One needs to call this method when your program finishes or/and you are not going to use the performance counting routines anymore.
Referenced by exit_cleanup().
bool PCM::CoreLocalMemoryBWMetricAvailable | ( | ) | const |
checks if local memory bandwidth monitoring present
References L3QOSMetricAvailable(), and QOSMetricAvailable().
bool PCM::CoreRemoteMemoryBWMetricAvailable | ( | ) | const |
checks if total memory bandwidth monitoring present
References L3QOSMetricAvailable(), and QOSMetricAvailable().
void PCM::getAllCounterStates | ( | SystemCounterState & | systemState, |
std::vector< SocketCounterState > & | socketStates, | ||
std::vector< CoreCounterState > & | coreStates | ||
) |
Reads all counter states (including system, sockets and cores)
systemState | system counter state (return parameter) |
socketStates | socket counter states (return parameter) |
coreStates | core counter states (return parameter) |
References isCoreOnline().
CoreCounterState PCM::getCoreCounterState | ( | uint32 | core | ) |
Reads the counter state of a (logical) core.
Be aware that during the measurement other threads may be scheduled on the same core by the operating system (this is called context-switching). The performance events caused by these threads will be counted as well.
\param core core id \return State of counters in the core
Referenced by getCoreCounterState(), and getTickCount().
|
inline |
Determines physical core of given processor ID within a socket.
os_id | processor identifier |
|
inline |
Reads CPU model id.
Referenced by getCyclesLostDueL2CacheMisses(), getCyclesLostDueL3CacheMisses(), getDRAMConsumedJoules(), getL2CacheHitRatio(), getL2CacheHits(), getL2CacheMisses(), and setupCustomCoreEventsForNuma().
|
inline |
Reads CPU stepping id.
|
inline |
Returns the error message.
Call this when good() returns false, otherwise return an empty string
IIOCounterState PCM::getIIOCounterState | ( | int | socket, |
int | IIOStack, | ||
int | counter | ||
) |
Get the state of IIO counter.
socket | socket of the IIO stack |
IIOStack | id of the IIO stack |
Referenced by getIIOCounterStates().
void PCM::getIIOCounterStates | ( | int | socket, |
int | IIOStack, | ||
IIOCounterState * | result | ||
) |
Get the states of the four IIO counters in bulk (faster than four single reads)
socket | socket of the IIO stack |
IIOStack | id of the IIO stack |
result | states of IIO counters (array of four IIOCounterState elements) |
References getIIOCounterState().
|
static |
Returns PCM object.
Returns PCM object. If the PCM has not been created before than an instance is created. PCM is a singleton.
Referenced by ServerPCICFGUncore::computeQPISpeed(), exit_cleanup(), getActiveAverageFrequency(), getAllIncomingQPILinkBytes(), getAllOutgoingQPILinkBytes(), getAverageFrequency(), getConsumedJoules(), getCoreCounterState(), getCoreCStateResidency(), getCoreIPC(), getCyclesLostDueL2CacheMisses(), getCyclesLostDueL3CacheMisses(), getDRAMConsumedJoules(), getIncomingQPILinkBytes(), getIncomingQPILinkUtilization(), getL2CacheHitRatio(), getL2CacheHits(), getL2CacheMisses(), getL3CacheHitRatio(), getL3CacheHits(), getL3CacheHitsNoSnoop(), getL3CacheHitsSnoop(), getL3CacheMisses(), getLLCReadMissLatency(), getOutgoingQPILinkBytes(), getOutgoingQPILinkUtilization(), getQPItoMCTrafficRatio(), getSocketCounterState(), getSocketIncomingQPILinkBytes(), getSystemCounterState(), getTotalExecUsage(), MySystem(), ServerPCICFGUncore::program(), ServerPCICFGUncore::program_power_metrics(), ServerPCICFGUncore::programServerUncoreMemoryMetrics(), ServerPCICFGUncore::reportQPISpeed(), sigINT_handler(), and sigSTOP_handler().
uint32 PCM::getL3ScalingFactor | ( | ) | const |
runs CPUID.0xF.0x01 to get the L3 up scaling factor to calculate L3 Occupancy Scaling factor is returned in EBX register after running the CPU instruction
|
inline |
Returns the max number of instructions per cycle.
unsigned PCM::getMaxRMID | ( | ) | const |
returns the max number of RMID supported by socket
|
inline |
Returns the number of detected memory channels on given integrated memory controllers.
socket | socket |
controller | controller |
uint64 PCM::getNominalFrequency | ( | ) | const |
Reads the nominal core frequency.
Referenced by getActiveAverageFrequency(), getAverageFrequency(), getIncomingQPILinkUtilization(), getOutgoingQPILinkBytes(), getOutgoingQPILinkUtilization(), getTickCount(), and getTickCountRDTSCP().
uint32 PCM::getNumCores | ( | ) | const |
Reads number of logical cores in the system.
Referenced by getCoreIPC(), getIncomingQPILinkUtilization(), getOutgoingQPILinkBytes(), getOutgoingQPILinkUtilization(), getTotalExecUsage(), and getUncoreCounterStates().
uint32 PCM::getNumOnlineCores | ( | ) | const |
Reads number of online logical cores in the system.
Referenced by getCoreIPC(), getTotalExecUsage(), and isSomeCoreOfflined().
uint32 PCM::getNumOnlineSockets | ( | ) | const |
Reads number of online sockets (CPUs) in the system.
uint32 PCM::getNumSockets | ( | ) | const |
Reads number of sockets (CPUs) in the system.
Referenced by getAllIncomingQPILinkBytes(), getAllOutgoingQPILinkBytes(), and isSomeCoreOfflined().
|
inline |
Reads original CPU model id.
PCIeCounterState PCM::getPCIeCounterState | ( | const uint32 | socket_ | ) |
Get the state of PCIe counter(s)
socket_ | socket of the PCIe controller |
|
inline |
Return QPI Link Speed in GBytes/second.
Referenced by getIncomingQPILinkUtilization(), getOutgoingQPILinkBytes(), and getOutgoingQPILinkUtilization().
|
inline |
Returns the number of Intel(r) Quick Path Interconnect(tm) links per socket.
Referenced by getAllIncomingQPILinkBytes(), getAllOutgoingQPILinkBytes(), and getSocketIncomingQPILinkBytes().
ServerUncorePowerState PCM::getServerUncorePowerState | ( | uint32 | socket | ) |
Reads the power/energy counter state of a socket (works only on microarchitecture codename SandyBridge-EP)
socket | socket id |
bool PCM::getSMT | ( | ) | const |
Checks if SMT (HyperThreading) is enabled.
SocketCounterState PCM::getSocketCounterState | ( | uint32 | socket | ) |
Reads the counter state of a socket.
socket | socket id |
References isCoreOnline().
Referenced by getSocketCounterState().
|
inline |
Determines socket of given core.
core_id | core identifier |
SystemCounterState PCM::getSystemCounterState | ( | ) |
Reads the counter state of the system.
System consists of several sockets (CPUs). Socket has a CPU in it. Socket (CPU) consists of several (logical) cores.
Referenced by getSystemCounterState().
|
inline |
Determines physical thread of given processor ID within a core.
os_id | processor identifier |
uint32 PCM::getThreadsPerCore | ( | ) | const |
Reads how many hardware threads has a physical core "Hardware thread" is a logical core in a different terminology. If Intel(r) Hyperthreading(tm) is enabled then this function returns 2.
Referenced by getCoreIPC(), and getTotalExecUsage().
uint64 PCM::getTickCount | ( | uint64 | multiplier = 1000 , |
uint32 | core = 0 |
||
) |
Return TSC timer value in time units.
multiplier | use 1 for seconds, 1000 for ms, 1000000 for mks, etc (default is 1000: ms) |
core | core to read on-chip TSC value (default is 0) |
References getCoreCounterState(), getInvariantTSC(), and getNominalFrequency().
Referenced by ServerPCICFGUncore::computeQPISpeed().
uint64 PCM::getTickCountRDTSCP | ( | uint64 | multiplier = 1000 | ) |
Return TSC timer value in time units using rdtscp instruction from current core.
multiplier | use 1 for seconds, 1000 for ms, 1000000 for mks, etc (default is 1000: ms) |
References getNominalFrequency().
|
inline |
Determines physical tile (cores sharing L2 cache) of given processor ID.
os_id | processor identifier |
const char * PCM::getUArchCodename | ( | const int32 | cpu_model_ = -1 | ) | const |
Get a string describing the codename of the processor microarchitecture.
cpu_model_ | cpu model (if no parameter provided the codename of the detected CPU is returned) |
void PCM::getUncoreCounterStates | ( | SystemCounterState & | systemState, |
std::vector< SocketCounterState > & | socketStates | ||
) |
Reads uncore counter states (including system and sockets) but no core counters.
systemState | system counter state (return parameter) |
socketStates | socket counter states (return parameter) |
References getNumCores(), and isCoreOnline().
bool PCM::good | ( | ) |
|
static |
Loads and initializes Winring0 third party library for access to processor model specific and PCI configuration registers.
bool PCM::isCoreOnline | ( | int32 | os_core_id | ) | const |
Return true if the core in online.
os_core_id | OS core id |
Referenced by getAllCounterStates(), getSocketCounterState(), and getUncoreCounterStates().
bool PCM::isSocketOnline | ( | int32 | socket_id | ) | const |
Return true if the socket in online.
socket_id | OS socket id |
bool PCM::isSomeCoreOfflined | ( | ) |
runs CPUID.0xB.0x01 to get maximum logical cores (including SMT) per socket. max_lcores_per_socket is returned in EBX[15:0]. Compare this value with number of cores per socket detected in the system to see if some cores are offlined
References getNumOnlineCores(), and getNumSockets().
bool PCM::L3CacheOccupancyMetricAvailable | ( | ) | const |
checks if L3 cache monitoring present
References L3QOSMetricAvailable(), and QOSMetricAvailable().
bool PCM::L3QOSMetricAvailable | ( | ) | const |
checks L3 cache support for QOS present
References isSecureBoot().
Referenced by CoreLocalMemoryBWMetricAvailable(), CoreRemoteMemoryBWMetricAvailable(), and L3CacheOccupancyMetricAvailable().
PCM::ErrorCode PCM::program | ( | const ProgramMode | mode_ = DEFAULT_EVENTS , |
const void * | parameter_ = NULL |
||
) |
Programs performance counters.
mode_ | mode of programming, see ProgramMode definition |
parameter_ | optional parameter for some of programming modes Call this method before you start using the performance counting routines. |
References ServerPCICFGUncore::computeQPISpeed(), CUSTOM_CORE_EVENTS, and EXT_CUSTOM_CORE_EVENTS.
void PCM::programIIOCounters | ( | IIOPMUCNTCTLRegister | rawEvents[4], |
int | IIOStack = -1 |
||
) |
Program uncore IIO events.
rawEvents | events to program (raw format) |
IIOStack | id of the IIO stack to program (-1 for all, if parameter omitted) |
void PCM::programPCIeCounters | ( | const PCIeEventCode | event_, |
const uint32 | tid_ = 0 , |
||
const uint32 | miss_ = 0 , |
||
const uint32 | q_ = 0 , |
||
const uint32 | nc_ = 0 |
||
) |
Program uncore PCIe monitoring event(s)
event_ | a PCIe event to monitor |
tid_ | tid filter (PCM supports it only on Haswell server) |
PCM::ErrorCode PCM::programServerUncoreLatencyMetrics | ( | bool | enable_pmm | ) |
Programs uncore latency counters on microarchitectures codename SandyBridge-EP and later Xeon uarch.
enable_pmm | enables DDR/PMM. See possible profile values in pcm-latency.cpp example |
Call this method before you start using the latency counter routines on microarchitecture codename SandyBridge-EP and later Xeon uarch
PCM::ErrorCode PCM::programServerUncoreMemoryMetrics | ( | int | rankA = -1 , |
int | rankB = -1 , |
||
bool | PMM = false |
||
) |
Programs uncore memory counters on microarchitectures codename SandyBridge-EP and later Xeon uarch.
rankA | count DIMM rank1 statistics (disables memory channel monitoring) |
rankB | count DIMM rank2 statistics (disables memory channel monitoring) |
PMM | monitor PMM bandwidth instead of partial writes |
Call this method before you start using the memory counter routines on microarchitecture codename SandyBridge-EP and later Xeon uarch
PCM::ErrorCode PCM::programServerUncorePowerMetrics | ( | int | mc_profile, |
int | pcu_profile, | ||
int * | freq_bands = NULL |
||
) |
Programs uncore power/energy counters on microarchitectures codename SandyBridge-EP and later Xeon uarch.
mc_profile | profile for integrated memory controller PMU. See possible profile values in pcm-power.cpp example |
pcu_profile | profile for power control unit PMU. See possible profile values in pcm-power.cpp example |
freq_bands | array of three integer values for core frequency band monitoring. See usage in pcm-power.cpp example |
Call this method before you start using the power counter routines on microarchitecture codename SandyBridge-EP and later Xeon uarch
bool PCM::QOSMetricAvailable | ( | ) | const |
checks if QOS monitoring support present
References isSecureBoot().
Referenced by CoreLocalMemoryBWMetricAvailable(), CoreRemoteMemoryBWMetricAvailable(), and L3CacheOccupancyMetricAvailable().
void PCM::resetPMU | ( | ) |
Forces PMU reset.
If there is no chance to free up PMU from other applications you might try to call this method at your own risk.
void PCM::setupCustomCoreEventsForNuma | ( | PCM::ExtendedCustomCoreEventDescription & | conf | ) | const |
Setup ExtendedCustomCoreEventDescription object to read offcore (numa) counters for each processor type.
conf | conf object to setup offcore MSR values |
References getCPUModel().