Skip to content
Processor Counter Monitor
C++ C Makefile Objective-C Shell Python
Branch: master
Clone or download

Latest commit

Latest commit 6ba8d85 May 29, 2020

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
MacMSRDriver [pcm] fix default install paths for mac os May 4, 2020
PCM-Core_Win pcm-sensor-server: execute lambda functions in the threadpool Apr 20, 2020
PCM-IIO_Win pcm-sensor-server: execute lambda functions in the threadpool Apr 20, 2020
PCM-LSPCI_Win pcm-sensor-server: execute lambda functions in the threadpool Apr 20, 2020
PCM-Latency_Win pcm-sensor-server: execute lambda functions in the threadpool Apr 20, 2020
PCM-Lib_Win pcm-sensor-server: execute lambda functions in the threadpool Apr 20, 2020
PCM-MMIO_Win add pcm-mmio project to MSVC solution May 1, 2020
PCM-MSR_Win pcm-sensor-server: execute lambda functions in the threadpool Apr 20, 2020
PCM-Memory_Win pcm-sensor-server: execute lambda functions in the threadpool Apr 20, 2020
PCM-NUMA_Win pcm-sensor-server: execute lambda functions in the threadpool Apr 20, 2020
PCM-PCICFG_Win pcm-sensor-server: execute lambda functions in the threadpool Apr 20, 2020
PCM-PCIE_Win pcm-sensor-server: execute lambda functions in the threadpool Apr 20, 2020
PCM-Power_Win pcm-sensor-server: execute lambda functions in the threadpool Apr 20, 2020
PCM-Service_Win pcm-sensor-server: execute lambda functions in the threadpool Apr 20, 2020
PCM-TSX_Win pcm-sensor-server: execute lambda functions in the threadpool Apr 20, 2020
PCM_Win pcm-sensor-server: execute lambda functions in the threadpool Apr 20, 2020
WinMSRDriver/Win7 update copyright years Dec 21, 2018
daemon pcm-sensor-server: execute lambda functions in the threadpool Apr 20, 2020
exceptions Calculate QPI utilisation using difference mode (when using absolute … Oct 20, 2017
freegetopt #1 Oct 31, 2016
grafana improve formatting in README.md May 26, 2020
pcm.so Cleanup: Makefile, change compile option -std=c++0x to -std=c++11 Mar 28, 2020
winpmem introduce MMIORange for memory mapped IO and refactor ClientBW Jan 9, 2019
winring0 #1 Oct 31, 2016
.bdsignore.all #1 Oct 31, 2016
.cirrus.yml upgrade to freebsd-12-1 on cirrus May 4, 2020
.gitattributes do not include CI config files to export/archive May 20, 2020
.gitignore Better ignore file (#131) Apr 8, 2019
.gitlab-ci.yml add more compilers for ci May 18, 2020
.travis.yml try older compiler in travis CI May 29, 2020
CUSTOM-COMPILE-OPTIONS.md Update CUSTOM-COMPILE-OPTIONS.md Feb 19, 2020
DOCKER_README.md add URL of the docker container repository May 15, 2020
Dockerfile don't use perf API inside container May 13, 2020
Doxyfile rename Intel PCM -> PCM Feb 3, 2017
FREEBSD_HOWTO.txt #1 Oct 31, 2016
KSysGuard HOWTO.docx rename Intel PCM -> PCM Feb 3, 2017
KSysGuard HOWTO.pdf rename Intel PCM -> PCM Feb 3, 2017
LICENSE update copyright year Mar 4, 2020
LINUX_HOWTO.txt #1 Oct 31, 2016
MAC_HOWTO.txt added instructions for disabling SIP or signing KEXTs May 15, 2017
Makefile add pcm-mmio tool May 1, 2020
README.md add link to docker hub instructions to the main readme May 14, 2020
WINDOWS_HOWTO.md Remove duplicate numbers (#173) Oct 24, 2019
build_solution.bat add (inactive) paths for MSVC2017 Nov 23, 2018
client_bw.cpp add pcm-mmio tool May 1, 2020
client_bw.h move MMIORange into mmio.h/cpp Jan 10, 2019
cpuasynchcounter.h pcm-sensor-server: execute lambda functions in the threadpool Apr 20, 2020
cpucounters.cpp update error messages May 27, 2020
cpucounters.h introduce RawCStateResidency metric for prometheus May 26, 2020
dashboard.cpp add c-state metrics to prometheus dashboard May 26, 2020
dashboard.h generate dashboard for prometheus May 25, 2020
dashboardtest.cpp don't use regex because of broken g++4.8 May 25, 2020
debug.cpp pcm-sensor-server: execute lambda functions in the threadpool Apr 20, 2020
debug.h pcm-sensor-server: execute lambda functions in the threadpool Apr 20, 2020
favicon.ico.h add pcm-sensor-server Apr 1, 2020
license.txt rename Intel PCM -> PCM Feb 3, 2017
lspci.h add pcm-sensor-server Apr 1, 2020
memoptest.cpp Add required flushes Mar 25, 2020
mmio.cpp Replace endl with \n to get rid of many unnecessary flushes Mar 25, 2020
mmio.h Replace endl with \n to get rid of many unnecessary flushes Mar 25, 2020
msr.cpp Replace endl with \n to get rid of many unnecessary flushes Mar 25, 2020
msr.h Cleanup: the returns are unreachable code, change exception to contai… Mar 28, 2020
msrtest.cpp Replace endl with \n to get rid of many unnecessary flushes Mar 25, 2020
mutex.h protect socket2bus for multithreaded initialization Jul 6, 2017
opCode.txt Explicitly state bytes tracked for IB and OB. Sep 23, 2019
pci.cpp Comment out unused variables, perhaps it is best to remove it completely Mar 28, 2020
pci.h update copyright years Dec 21, 2018
pcm-all.sln add pcm-mmio project to MSVC solution May 1, 2020
pcm-bw-histogram.sh extend pcm-bw-histogram with (DC)PMM support Sep 26, 2019
pcm-core.cpp Whitespace changes to improve readability Mar 25, 2020
pcm-iio.cpp pcm-iio: do not program PMUs that are not required May 29, 2020
pcm-latency.cpp Comment out unused variables, perhaps it is best to remove it completely Mar 28, 2020
pcm-lspci.cpp Comment out unused variables, perhaps it is best to remove it completely Mar 28, 2020
pcm-memory.cpp Cleanup: mising break or missing /* fall-through */ Mar 28, 2020
pcm-mmio.cpp pcm-mmio: fix output and -d option May 1, 2020
pcm-msr.cpp pcm-msr: fix -d option May 1, 2020
pcm-numa.cpp Whitespace changes to improve readability Mar 25, 2020
pcm-pcicfg.cpp moved read_number to utils (avoid code duplication) May 1, 2020
pcm-pcie.cpp Refactoring pcm-pcie code base to simplify adding support for new pla… Apr 27, 2020
pcm-pcie.h pcm-pcie: do not program PMUs that are not required May 29, 2020
pcm-power.cpp Due to the using namespace std at the top we can get rid of the remai… Mar 25, 2020
pcm-sensor-server.cpp use consistent formatting May 26, 2020
pcm-sensor.cpp Replace endl with \n to get rid of many unnecessary flushes Mar 25, 2020
pcm-tsx.cpp Replace endl with \n to get rid of many unnecessary flushes Mar 25, 2020
pcm.cpp Comment out unused variables, perhaps it is best to remove it completely Mar 28, 2020
pcm.spec add pcm-sensor-server Apr 1, 2020
pmu-query.py differentiate between skylake and cascade lake x using stepping Mar 7, 2019
readmem.cpp Add flushes back in Mar 25, 2020
readmem.sh #1 Oct 31, 2016
realtime.cpp Replace endl with \n to get rid of many unnecessary flushes Mar 25, 2020
run-as-administrator.png Convert WINDOWS_HOWTO.rtf to Markdown (#163) Oct 21, 2019
threadpool.cpp pcm-sensor-server: execute lambda functions in the threadpool Apr 20, 2020
threadpool.h fix compilation failure on Ubuntu 16.04 May 11, 2020
topology.cpp pcm-sensor-server: execute lambda functions in the threadpool Apr 20, 2020
topology.h pcm-sensor-server: execute lambda functions in the threadpool Apr 20, 2020
types.h Refactoring pcm-pcie code base to simplify adding support for new pla… Apr 27, 2020
utils.cpp moved read_number to utils (avoid code duplication) May 1, 2020
utils.h moved read_number to utils (avoid code duplication) May 1, 2020
width_extender.h Replace endl with \n to get rid of many unnecessary flushes Mar 25, 2020

README.md


Processor Counter Monitor (PCM)

Processor Counter Monitor (PCM) is an application programming interface (API) and a set of tools based on the API to monitor performance and energy metrics of Intel® Core™, Xeon®, Atom™ and Xeon Phi™ processors. PCM works on Linux, Windows, Mac OS X, FreeBSD and DragonFlyBSD operating systems.


Current Build Status

  • Linux and OSX: Build Status
  • Windows: Build status
  • FreeBSD: Build Status

PCM Tools

PCM provides a number of command-line utilities for real-time monitoring:

  • pcm : basic processor monitoring utility (instructions per cycle, core frequency (including Intel(r) Turbo Boost Technology), memory and Intel(r) Quick Path Interconnect bandwidth, local and remote memory bandwidth, cache misses, core and CPU package sleep C-state residency, core and CPU package thermal headroom, cache utilization, CPU and memory energy consumption) pcm output
  • pcm-sensor-server : pcm collector exposing metrics over http in JSON or Prometheus (text based) format
  • pcm-memory : monitor memory bandwidth (per-channel and per-DRAM DIMM rank) pcm-memory output
  • pcm-latency : monitor L1 cache miss and DDR/PMM memory latency
  • pcm-pcie : monitor PCIe bandwidth per-socket
  • pcm-iio : monitor PCIe bandwidth per PCIe device pcm-iio output
  • pcm-numa : monitor local and remote memory accesses
  • pcm-power : monitor sleep and energy states of processor, Intel(r) Quick Path Interconnect, DRAM memory, reasons of CPU frequency throttling and other energy-related metrics
  • pcm-tsx: monitor performance metrics for Intel(r) Transactional Synchronization Extensions
  • pcm-core and pmu-query: query and monitor arbitrary processor core events
  • pcm-bw-histogram: collect memory bandwidth utilization histogram

Graphical front ends:

  • pcm Grafana dashboard : front-end for Grafana (in grafana directory) pcm grafana output
  • pcm-sensor : front-end for KDE KSysGuard
  • pcm-service : front-end for Windows perfmon

There are also utilities for reading/writing model specific registers (pcm-msr), PCI configuration registers (pcm-pcicfg) and memory mapped registers (pcm-mmio) supported on Linux, Windows, Mac OS X and FreeBSD.

And finally a daemon that stores core, memory and QPI counters in shared memory that can be be accessed by non-root users.


Building PCM Tools

  • Linux: just type 'make'. You will get all the utilities (pcm.x, pcm-memory.x, etc) built in the main PCM directory.
  • FreeBSD/DragonFlyBSD: just type 'gmake'. You will get all the utilities (pcm.x, pcm-memory.x, etc) built in the main PCM directory. If the 'gmake' command is not available, you need to install GNU make from ports (for example with 'pkg install gmake').
  • Windows: follow the steps in WINDOWS_HOWTO.md (will need to build or download additional drivers).
  • Mac OS X: follow instructions in MAC_HOWTO.txt

Downloading Pre-Compiled PCM Tools


PCM API documentation

PCM API documentation is embedded in the source code and can be generated into html format from source using Doxygen (www.doxygen.org).


Custom compilation options

The list of custom compilation options is located here

You can’t perform that action at this time.