Skip to main content

perf event wrapper for python

Project description

Performance Counters api for python

A high-level abstraction API for Linux perf events with low overhead

Continuous Integration

Table of contents

Install from pip

sudo apt install g++ gcc swig libpfm4-dev python3-dev python3-pip
pip install performance-features

Install from source

git clone https://github.com/VitorRamos/performance_features.git
cd performance_features
sudo ./install.sh

Usage

List events

from performance_features import *

print(get_supported_pmus())
print(get_supported_events())

Sampling events

from performance_features import *

try:
    events= [['PERF_COUNT_HW_INSTRUCTIONS'],
            ['PERF_COUNT_HW_BRANCH_INSTRUCTIONS','PERF_COUNT_HW_BRANCH_MISSES'],
            ['PERF_COUNT_SW_PAGE_FAULTS']]
    perf= Profiler(program_args= ['/bin/ls','/'], events_groups=events)
    data= perf.run(sample_period= 0.01)
    print(data)
except RuntimeError as e:
    print(e.args[0])

How it works:

A c module create a workload using Linux ptrace to ensure we control the starting the application and collect the events data with minimal overhead. The events are setup using the perf_event_open syscall through the perfmom library.

What are the performance counters

Performance counters are special hardware registers available on most modern CPUs. These registers count the number of certain types of events: such as instructions executed, cache misses suffered, or branches mis-predicted without slowing down the kernel or applications. These registers can also trigger interrupts when a threshold number of events have passed and can thus be used to profile the code that runs on that CPU.

Reading Performance counters

  • Instructions
    • rdmsr: Reads the contents of a 64-bit model specific register (MSR) specified in the ECX register into registers EDX:EAX. This instruction must be executed at privilege level 0 or in real-address mode

    • rdpmc: Is slightly faster that the equivelent rdmsr instruction. rdpmc can also be configured to allow access to the counters from userspace, without being priviledged.

  • From Userspace (Linux) : The Linux Performance Counter subsystem provides an abstraction of these hardware capabilities. It provides per task and per CPU counters, counter groups, and it provides event capabilities on top of those. It provides "virtual" 64-bit counters, regardless of the width of the underlying hardware counters. Performance counters are accessed via special file descriptors. There's one file descriptor per virtual counter used. The special file descriptor is opened via the perf_event_open() system call. These system call do not use rdpmc but rdpmc is not necessarily faster than other methods for reading event values.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

performance_features-0.2.6.tar.gz (27.6 kB view details)

Uploaded Source

File details

Details for the file performance_features-0.2.6.tar.gz.

File metadata

  • Download URL: performance_features-0.2.6.tar.gz
  • Upload date:
  • Size: 27.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for performance_features-0.2.6.tar.gz
Algorithm Hash digest
SHA256 6d823a387fe41a455fb703b6bd8eac4bd0126867fc8f4614375e5ff6aef94181
MD5 bfcf3e7ad3595191a713fd53cb1fa8d9
BLAKE2b-256 ecb6d6defdafed60a0da5c2ae2d2acb8341b722d88e8736e8bd573284e8888b7

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page