intel / PerfSpect

System performance characterization tool based on linux perf
https://intel.github.io/PerfSpect/
BSD 3-Clause "New" or "Revised" License
333 stars 30 forks source link
cpu linux metrics micro-architecture monitoring observability perf performance perfspect power profiling python telemetry tma tool

Notice: We plan to share a new implementation of PerfSpect in the coming months. The new implementation of PerfSpect will enhance its functionality by offering "live" metric generation. This means that the current post-processing step will be optional. Additionally, PerfSpect will incorporate features from other Intel tools, streamlining their acquisition and deployment for users. Stay tuned!

    PerfSpect

[![Build](https://github.com/intel/PerfSpect/actions/workflows/build.yml/badge.svg)](https://github.com/intel/PerfSpect/actions/workflows/build.yml)[![CodeQL](https://github.com/intel/PerfSpect/actions/workflows/codeql.yml/badge.svg)](https://github.com/intel/PerfSpect/actions/workflows/codeql.yml)[![License](https://img.shields.io/badge/License-BSD--3-blue)](https://github.com/intel/PerfSpect/blob/master/LICENSE) [![Static Badge](https://img.shields.io/badge/Live_Demo-red?style=for-the-badge)](https://intel.github.io/PerfSpect/) [Quick Start](#quick-start-requires-perf-installed) | [Output](#output) | [Deploy in Kubernetes](#deploy-in-kubernetes) | [Requirements](#requirements) | [Build from source](#build-from-source)

PerfSpect is a system performance characterization tool built on top of linux perf. It contains two parts:

perf-collect: Collects hardware events at a 5 second output interval with practically zero overhead since PMU's run in counting mode.

perf-postprocess: Calculates high level metrics from hardware events

Quick start (requires perf installed)

wget -qO- https://github.com/intel/PerfSpect/releases/latest/download/perfspect.tgz | tar xvz
cd perfspect
sudo ./perf-collect --timeout 10
./perf-postprocess

Running perf-collect as a non-root user

As seen in the examples above, sudo is the standard approach to running perf-collect with elevated privileges. If sudo is not possible and running as the root user is not possible, then a user may request the following changes be made to the system by an administrator:

for i in $(find /sys/devices -name perf_event_mux_interval_ms); do echo 125 > $i; done

Recommend returning these settings to their prior values when analysis with PerfSpect is complete.

Output

perf-collect outputs:

  1. perfstat.csv: raw event counts with system metadata

perf-postprocess outputs:

  1. metric_out.sys.average.csv: average metrics
  2. metric_out.sys.csv: metric values at every 5 second interval
  3. metric_out.html: html view of a few select metrics

basic_stats

Deploy in Kubernetes

Modify the template deamonset.yml to deploy in kubernetes

Requirements

perf - PerfSpect uses the Linux perf tool to collect PMU counters

Different events require different minimum kernels (PerfSpect will automatically collect only supported events)

  1. Base (CPU util, CPI, Cache misses, etc.)
    • 3.10
  2. Uncore (NUMA traffic, DRAM traffic, etc.)
    • 4.9
  3. TMA (Micro-architecture boundness breakdown)
    • ICX, SPR: 5.10
    • BDX, SKX, CLX: 3.10

Build from source

Requires recent python. On successful build, binaries will be created in dist folder

pip3 install -r requirements.txt
make

Note: Most metrics and events come from perfmon and TMA v4.5