Performance & Virtualization

Hardware counters are unavailable to perf

Perf software events work while CPU cycles or instructions are unavailable. Check PMU exposure, supported event names and the guest CPU model.

On this page
  1. Symptoms & scope
  2. Possible causes
  3. Diagnose safely
  4. Evidence-guided next steps
  5. References & review
  6. Related problems

Symptoms & scope

  • cycles or instructions reports not supported despite working software counters.
  • The boot journal reports no PMU driver and software events only.

Relevant environment

Linux perf and hardware PMUs, including virtual machines with a limited or disabled virtual PMU.

Recognizable messages (synthetic examples)
kernel: Performance Events: no PMU driver, software events only.

Hardware counter support is absent in that boot context; this does not imply CPU execution itself is broken.

Possible causes

These are possible explanations, not a confirmed diagnosis. Several independent faults can coexist.

  • The kernel may not support this CPU PMU, or virtualization may hide it from the guest.
  • An event name may belong to another CPU model or PMU; permission errors are a separate problem.

Diagnose safely

Run one command at a time in the relevant session. Read the explanation first. Uppercase placeholders need your own values; tools and privileges vary by distribution. These commands are displayed here and never executed by the website.

Check 1

Reads event descriptions; listing does not start a measurement and requires perf to be installed.

perf list

Interpret the result: Separate hardware, software and tracepoint categories. A listed generic alias may still fail to open on an unsupported or hidden PMU.

Check 2

Read-only directory listing of kernel event-source devices; normally no elevation needed.

ls /sys/bus/event_source/devices

Interpret the result: A cpu or architecture-specific PMU device supports hardware exposure. Only software sources support inspecting guest PMU policy, not lowering perf permissions.

Check 3

Reads kernel initialization messages; authorized journal read access may be needed.

journalctl -k -b --grep='Performance Events|PMU' --no-pager

Interpret the result: A software-only message identifies PMU availability at boot. Successful PMU initialization does not guarantee every vendor-specific event exists.

Evidence-guided next steps

Use supported events for this PMU

If the event belongs to another CPU model, choose events documented by this machine's perf list and use software counters or application timing when hardware support is absent. Label the measurement type accurately.

Precautions: Software time is not interchangeable with retired instructions or hardware cycles. Do not compare unlike counters as the same metric.

Recovery / rollback: Restore the original event selection for a later supported environment; no system policy changes are needed.

Did this solution help you?

Share this solution#

Expose a supported virtual PMU deliberately

If the host supports a PMU and profiling is intended, configure the guest's documented PMU feature and a compatible CPU model through its hypervisor configuration. If the host kernel lacks support, assess an appropriate supported kernel upgrade with a retained recovery kernel.

Precautions: Changing the guest CPU model can affect migration and requires a controlled guest restart. More permissions do not create an absent PMU.

Recovery / rollback: Restore recorded guest CPU/PMU settings or boot the retained kernel, then verify the same event availability.

Did this solution help you?

Share this solution#

References & review

This guide was prepared from primary project or distribution sources and reviewed on the date shown. This is an editorial source check, not evidence that a fix was reproduced on your hardware. Diagnostic log examples are synthetic fixtures. Version-dependent details must be checked against your installed release.