Skip to content
Processor Counter Monitor
Branch: master
Clone or download
opcm Merge pull request #134 from G-Research/WinMicroSleep
Improved microsecond sleep function for Windows
Latest commit d6be39f Apr 17, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
MacMSRDriver fix macos automatic installation Nov 6, 2018
PCM-Core_Win move MMIORange into mmio.h/cpp Jan 10, 2019
PCM-IIO_Win move MMIORange into mmio.h/cpp Jan 10, 2019
PCM-LSPCI_Win move MMIORange into mmio.h/cpp Jan 10, 2019
PCM-Latency_Win move MMIORange into mmio.h/cpp Jan 10, 2019
PCM-Lib_Win move MMIORange into mmio.h/cpp Jan 10, 2019
PCM-MSR_Win move MMIORange into mmio.h/cpp Jan 10, 2019
PCM-Memory_Win move MMIORange into mmio.h/cpp Jan 10, 2019
PCM-NUMA_Win move MMIORange into mmio.h/cpp Jan 10, 2019
PCM-PCICFG_Win move MMIORange into mmio.h/cpp Jan 10, 2019
PCM-PCIE_Win move MMIORange into mmio.h/cpp Jan 10, 2019
PCM-Power_Win move MMIORange into mmio.h/cpp Jan 10, 2019
PCM-Service_Win
PCM-TSX_Win move MMIORange into mmio.h/cpp Jan 10, 2019
PCM_Win Reduce duplication of Windows driver name Apr 16, 2019
WinMSRDriver/Win7 update copyright years Dec 21, 2018
daemon if only 3 counters are available limit the number of metrics Mar 13, 2019
exceptions Calculate QPI utilisation using difference mode (when using absolute … Oct 20, 2017
freegetopt #1 Oct 31, 2016
pcm.so move MMIORange into mmio.h/cpp Jan 10, 2019
winpmem introduce MMIORange for memory mapped IO and refactor ClientBW Jan 9, 2019
winring0 #1 Oct 31, 2016
.bdsignore.all #1 Oct 31, 2016
.gitattributes ensure consistent autocrlf behavior for git Nov 23, 2018
.gitignore Better ignore file (#131) Apr 8, 2019
.travis.yml add clang to the test matrix Jul 6, 2017
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 LICENSE (#49) Oct 20, 2017
LINUX_HOWTO.txt #1 Oct 31, 2016
MAC_HOWTO.txt added instructions for disabling SIP or signing KEXTs May 15, 2017
Makefile add memoptest make goal (with -O0) Jan 15, 2019
README.md point to appveyor build history to download binaries (artifacts) Apr 11, 2019
TODO #1 Oct 31, 2016
WINDOWS_HOWTO.rtf rename Intel PCM -> PCM Feb 3, 2017
build_solution.bat add (inactive) paths for MSVC2017 Nov 23, 2018
client_bw.cpp use std::make_shared Jan 10, 2019
client_bw.h move MMIORange into mmio.h/cpp Jan 10, 2019
cpuasynchcounter.h improved code formatting Nov 25, 2016
cpucounters.cpp drop (un)-reserve PMU calls Mar 29, 2019
cpucounters.h drop (un)-reserve PMU calls Mar 29, 2019
license.txt rename Intel PCM -> PCM Feb 3, 2017
lspci.h Look for pci.ids at a default path on Unix-like systems Nov 30, 2018
memoptest.cpp #1 Oct 31, 2016
mmio.cpp fix compilation on OSX Jan 31, 2019
mmio.h move MMIORange into mmio.h/cpp Jan 10, 2019
msr.cpp update copyright years Dec 21, 2018
msr.h improved code formatting Nov 25, 2016
msrtest.cpp improved code formatting Nov 25, 2016
mutex.h protect socket2bus for multithreaded initialization Jul 6, 2017
opCode.txt pcm-iio.x: Change default events Nov 6, 2018
pci.cpp print a warning and a solution when the limit on the number of files … Jan 9, 2019
pci.h update copyright years Dec 21, 2018
pcm-all.sln add MSVC project for pcm-latency and fix warnings Dec 20, 2018
pcm-core.cpp implement 'force RTM abort mode' Mar 13, 2019
pcm-iio.cpp drop CR symbol (if opCode.txt is in Windows format) Jan 16, 2019
pcm-latency.cpp pcm-latency: implement average socket L1 cache miss latency metric Feb 3, 2019
pcm-lspci.cpp update copyright years Dec 21, 2018
pcm-memory.cpp improve robustness for ServerUncorePowerState Feb 4, 2019
pcm-msr.cpp update copyright years Dec 21, 2018
pcm-numa.cpp update copyright years Dec 21, 2018
pcm-pcicfg.cpp add a note about *extended* configuration space access Nov 6, 2018
pcm-pcie.cpp fix spelling Mar 21, 2019
pcm-power.cpp add -i switch to more utilities Jul 6, 2017
pcm-sensor.cpp pcm-sensor: don't normalize core cache misses Feb 7, 2019
pcm-tsx.cpp implement 'force RTM abort mode' Mar 13, 2019
pcm.cpp implement 'force RTM abort mode' Mar 13, 2019
pmu-query.py differentiate between skylake and cascade lake x using stepping Mar 7, 2019
readmem.cpp #1 Oct 31, 2016
readmem.sh #1 Oct 31, 2016
realtime.cpp improved code formatting Nov 25, 2016
types.h implement 'force RTM abort mode' Mar 13, 2019
utils.cpp implement 'force RTM abort mode' Mar 13, 2019
utils.h Use thr/xthread for windows microsecond sleep Apr 15, 2019
width_extender.h update copyright years Dec 21, 2018

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

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-memory : monitor memory bandwidth (per-channel and per-DRAM DIMM rank)
  • 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-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

Graphical front ends:

  • pcm-sensor : front-end for KDE KSysGuard
  • pcm-service : front-end for Windows perfmon

There is also a utility for reading/writing Intel model specific registers (pcm-msr) 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.


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).


Building the 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.rtf (will will need to build or download additional drivers). You can also download PCM binaries as appveyor build service artifacts and required Visual C++ Redistributable from www.microsoft.com.
  • Mac OS X: follow instructions in MAC_HOWTO.txt
You can’t perform that action at this time.