GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - intel/pcm: Intel® Performance Counter Monitor (Intel® PCM)

BranchesTags
Open more actions menu

Latest commit

 

History

3,916 Commits
3,916 Commits

Folders and files

NameName
Last commit message
Last commit date
.bandit
.bandit
 
 
.github
.github
 
 
Intel-PMT @ 3aa02d3
Intel-PMT @ 3aa02d3
 
 
cmake
cmake
 
 
doc
doc
 
 
examples
examples
 
 
perfmon @ 1cc8f8a
perfmon @ 1cc8f8a
 
 
scripts
scripts
 
 
src
src
 
 
tests
tests
 
 
.bdsignore.all
.bdsignore.all
 
 
.cirrus.yml
.cirrus.yml
 
 
.codedocs
.codedocs
 
 
.dockerignore
.dockerignore
 
 
.gitattributes
.gitattributes
 
 
.gitignore
.gitignore
 
 
.gitmodules
.gitmodules
 
 
.pre-commit-config.yaml
.pre-commit-config.yaml
 
 
AGENTS.md
AGENTS.md
 
 
CMakeLists.txt
CMakeLists.txt
 
 
CONTRIBUTING.md
CONTRIBUTING.md
 
 
Dockerfile
Dockerfile
 
 
Doxyfile
Doxyfile
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
SECURITY.md
SECURITY.md
 
 
_codeql_detected_source_root
_codeql_detected_source_root
 
 
_service
_service
 
 
appveyor.yml
appveyor.yml
 
 
docker-compose.yml
docker-compose.yml
 
 
pcm-kubernetes.yaml.experimental
pcm-kubernetes.yaml.experimental
 
 
pcm.spec
pcm.spec
 
 
third-party-software.txt
third-party-software.txt
 
 

Repository files navigation


Intel® Performance Counter Monitor (Intel® PCM)

CodeQL OpenSSF Scorecard OpenSSF Best Practices

PCM Tools | Building PCM | Downloading Pre-Compiled PCM | FAQ | API Documentation | Environment Variables | Compilation Options

Intel® Performance Counter Monitor (Intel® 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, FreeBSD, DragonFlyBSD and ChromeOS operating systems.

Github repository statistics: Custom badge Custom badge Custom badge

We welcome bug reports and enhancement requests, which can be submitted via the "Issues" section on GitHub. For those interested in contributing to the code, please refer to the guidelines outlined in the CONTRIBUTING.md file.


Current Build Status

  • Linux: GitHub Workflow Status
  • Windows: Build status
  • FreeBSD: GitHub Workflow Status
  • Docker container: GitHub Workflow 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 (exporter text based) format (how-to). Also available as a docker container. More info about Global PCM events is here.

  • pcm-memory : monitor memory bandwidth (per-channel and per-DRAM DIMM rank) pcm-memory output

  • pcm-accel : monitor Intel® In-Memory Analytics Accelerator (Intel® IAA), Intel® Data Streaming Accelerator (Intel® DSA) and Intel® QuickAssist Technology (Intel® QAT) accelerators image

  • 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 bus/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-raw: program arbitrary core and uncore events by specifying raw register event ID encoding
  • pcm-bw-histogram: collect memory bandwidth utilization histogram

Graphical front ends:

  • pcm Grafana dashboard : front-end for Grafana (in scripts/grafana directory). Full Grafana Readme is here pcm grafana output
  • pcm-service : front-end for Windows perfmon

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

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

Clone PCM repository with submodules:

git clone --recursive https://github.com/intel/pcm
cd pcm

or clone the repository first, and then update submodules with:

git submodule update --init --recursive

Install cmake (and libasan on Linux) then compile:

Choose one of the following build methods:

  • Incremental Build (Fastest): if you have a previous build to reuse the existing build directory and preserve previous build artifacts, go straight to the cd build step.
  • Clean Build (From Scratch): Run cmake -E rm -rf build && cmake -E make_directory build for your first build, or for a full rebuild to ensure a "clean state" by deleting all previous build data.
cd build
cmake ..
cmake --build .

You will get all the utilities (pcm, pcm-memory, etc) in build/bin directory. '--parallel' can be used for faster building:

cmake --build . --parallel

Debug is default on Windows. Specify config to build Release:

cmake --build . --config Release

On Windows additional drivers and steps are required. Please find instructions here: WINDOWS_HOWTO.md.

FreeBSD/DragonFlyBSD-specific details can be found in FREEBSD_HOWTO.txt

pcm-build-run-2


Downloading Pre-Compiled PCM Tools

  • Linux:
    • Ubuntu/Debian: sudo apt install pcm
    • openSUSE: sudo zypper install pcm
    • RHEL8.5 or later: sudo dnf install pcm
    • Fedora: sudo yum install pcm
    • RPMs and DEBs with the latest PCM version for RHEL/SLE/Ubuntu/Debian/openSUSE/etc distributions (binary and source) are available here
  • Windows: download PCM binaries as appveyor build service artifacts and required Visual C++ Redistributable from www.microsoft.com. Additional steps and drivers are required, see WINDOWS_HOWTO.md.
  • Docker: see instructions on how to use pcm-sensor-server pre-compiled container from docker hub.

Executing PCM tools under non-root user on Linux

Executing PCM tools under an unprivileged user on a Linux operating system is feasible. However, there are certain prerequisites that need to be met, such as having Linux perf_event support for your processor in the Linux kernel version you are currently running. To successfully run the PCM tools, you need to set the /proc/sys/kernel/perf_event_paranoid setting to -1 as root once:

echo -1 > /proc/sys/kernel/perf_event_paranoid

and configure two specific environment variables when running the tools under a non-root user:

export PCM_NO_MSR=1
export PCM_KEEP_NMI_WATCHDOG=1

For instance, you can execute the following commands to set the environment variables and run pcm:

export PCM_NO_MSR=1
export PCM_KEEP_NMI_WATCHDOG=1
pcm

or (to run the pcm sensor server as non-root):

PCM_NO_MSR=1 PCM_KEEP_NMI_WATCHDOG=1 pcm-sensor-server

Please keep in mind that when executing PCM tools under an unprivileged user on Linux, certain PCM metrics may be unavailable. This limitation specifically affects metrics that rely solely on direct MSR (Model-Specific Register) register access. Due to the restricted privileges of the user, accessing these registers is not permitted, resulting in the absence of corresponding metrics.


Frequently Asked Questions (FAQ)

PCM's frequently asked questions (FAQ) are located here.


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


PCM environment variables

The list of PCM environment variables is located here


Custom compilation options

The list of custom compilation options is located here


Packaging

Packaging with CPack is supported on Debian and Redhat/SUSE system families. To create DEB of RPM package need to call cpack after building in build folder:

cd build
cpack

This creates package:

  • "pcm-VERSION-Linux.deb" on Debian family systems;
  • "pcm-VERSION-Linux.rpm" on Redhat/SUSE-family systems. Packages contain pcm-* binaries and required for usage opCode-* files.

About

Intel® Performance Counter Monitor (Intel® PCM)

Topics

cpuenergyfreebsdintellinuxmonitor-performancemonitoringosxpcmperformance-analysisperformance-countersperformance-dashboardperformance-metricsperformance-monitoringperformance-visualizationpowerprocessorprocessor-architecturewindowsxeon

Resources

Readme
BSD-3-Clause license

Code of conduct

Code of conduct

Contributing

Contributing

Security policy

Security policy
Activity
Custom properties

Stars

3.4k stars

Watchers

86 watching

Forks

532 forks
Report repository

Releases

Packages

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.