pcm is a free, open source monitoring & observability project written in C++ and released under BSD-3-Clause. It has 3,331 GitHub stars, 528 forks and 69 open issues, and was last pushed yesterday. On this registry it ranks #124 of 271 tracked projects in Monitoring & Observability, with 5 head-to-head comparisons available.

What is pcm?

Intel® Performance Counter Monitor (Intel® PCM) is a BSD-3-Clause licensed C++ API and command-line toolset from Intel for monitoring the performance and energy metrics of Intel® Core™, Xeon®, Atom™ and Xeon Phi™ processors.

What it is

Intel PCM lives in the Infrastructure & Operations / Monitoring & Observability space, and specifically in the hardware-level performance counter ecosystem of Intel processors. It provides both an application programming interface (API) and a set of tools built on that API, allowing software to read performance and energy metrics directly from the processor rather than inferring them from the operating system or from application-level instrumentation.

The concrete problem it solves is fragmented, per-platform visibility into processor behaviour. The same API and the same utilities apply across Linux, Windows, FreeBSD, DragonFlyBSD and ChromeOS, instead of each platform requiring its own separate means of gathering core frequency, memory bandwidth, cache or energy data. The topic list reflects this scope directly: cpu, energy, intel, monitor-performance, performance-counters, power, processor, processor-architecture, xeon and performance-visualization.

Key capabilities

  • pcm, the basic processor monitoring utility, reports instructions per cycle, core frequency including Intel® Turbo Boost Technology, memory and Intel® 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, and CPU and memory energy consumption.
  • pcm-memory monitors memory bandwidth per channel and per DRAM DIMM rank.
  • pcm-accel monitors the Intel® In-Memory Analytics Accelerator.
  • pcm-sensor-server acts as a collector that exposes metrics over HTTP in JSON or Prometheus (exporter text based) format, and is also distributed as a Docker container.
  • A C++ API underpins all tools, with published API documentation, environment variables and custom compilation options.
  • Dedicated documentation files cover integration: doc/PCM-EXPORTER.md, doc/PCM-SENSOR-SERVER-README.md and doc/DOCKER_README.md.
  • Continuous integration covers Linux (linux_make.yml), FreeBSD (freebsd_build.yml), Docker (docker.yml) and Windows via AppVeyor, alongside CodeQL, OpenSSF Scorecard and OpenSSF Best Practices checks.

Who uses it and how

  • Performance engineers profiling Intel Core, Xeon, Atom and Xeon Phi servers, reading instruction-level and cache-level counters from the command line.
  • Capacity and energy analysts tracking CPU and memory energy consumption and package C-state residency on Intel hardware.
  • Monitoring teams running pcm-sensor-server to scrape PCM metrics into Prometheus, typically for Grafana-style dashboards.
  • Container-oriented deployments, where pcm-sensor-server runs as a prebuilt Docker image rather than being compiled on the host.
  • Mixed-OS fleets, since the same toolset is used on Linux, Windows, FreeBSD, DragonFlyBSD and ChromeOS machines.

Getting started

Build the tools from source as described in the README's "Building PCM Tools" section, or download a pre-compiled PCM build from the "Downloading Pre-Compiled PCM Tools" section; pcm-sensor-server can alternatively be run as the Docker container documented in doc/DOCKER_README.md.

How it compares

This registry entry provides no list of paid products that Intel PCM replaces, and the facts name no directly comparable tools. It therefore stands alone in this registry as the vendor-authored, BSD-3-Clause implementation of Intel processor performance and energy monitoring.

When to use it — and when not to

Choose Intel PCM when the target hardware is an Intel Core, Xeon, Atom or Xeon Phi processor and the goal is direct hardware-level performance or energy measurement on Linux, Windows, FreeBSD, DragonFlyBSD or ChromeOS. It is the wrong tool for non-Intel CPUs, and it is not a general application-performance-monitoring product, so teams wanting language-level tracing or service-level dashboards should look elsewhere. A prospective user must also be prepared to build and install the toolset, or run the sensor server container, rather than expecting a single hosted service; the repository currently carries 69 open issues, so some fix-up work or workaround may be required.

project readme (upstream, from github) — read inline

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


Executing PCM tools under non-root user on Linux

Executing PCM tools under an unprivileged user on a Linux operating system is feasible. However, the

readme truncated — read the full docs on github

Frequently asked questions

Is pcm free to use?

pcm is open source under the BSD-3-Clause licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does pcm do?

Intel® Performance Counter Monitor (Intel® PCM)

What is pcm written in?

pcm is primarily written in C++. Its source is publicly available at https://github.com/intel/pcm, and it has 3,331 GitHub stars.