[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[RFC] vPMU rework proposal


  • To: Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Teddy Astie <teddy.astie@xxxxxxxxxx>
  • Date: Wed, 28 Oct 2026 18:17:35 +0100
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:Feedback-ID"
  • Autocrypt: addr=teddy.astie@xxxxxxxxxx; keydata= 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 x9fhaZEsniw8/bYgC3igkk5YJiOa
  • Delivery-date: Wed, 28 Oct 2026 17:17:43 +0000
  • Feedback-id: default:8631fc262581453bbf619ec5b2062170:Sweego
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

Hello,

As of today, vPMU is quite difficult to use for profiling the system, and has various issues. One in particular is lack of stacktrace support ([1] exists, but is complicated partly due to ABI shortcomings, and has limitations).

The idea here is rather than expanding the current design would be to make a major rework of the feature, considering significantly the ABI (i.e increasing XENPMU_VER_MAJ) and simplify the design.

A important use-case of vPMU is to profile the entire system (including Xen itself), which is only possible if the PMU covers the entire system (and not just Dom0), and if the Dom0 can use the PMU consistently. The idea here is to have a mode where the PMU registers are "global" (system-wide) and requires pinned Dom0 vCPUs.

In the current design, the PMU registers are stashedin the pmu page, and synced on PMI. The issue is that the for several of these registers, their count is uarch-dependant (and even SKU dependent), which makes the layout of the shared page complex. A proposed alternative would be to not have PMU registers in the page and rely on either a new dedicated hypercall (PV/PVH Dom0) or directly use RDMSR/WRMSR (PVH Dom0) to interact with them instead.

With that new layout, the hypervisor stacktrace can be placed right below the other fields of the shared PMU page, instead of at the bottom of the page, which makes things much simpler.

Another idea I had would be to expose rdpmc to PV Dom0 (CR4.PCE), but I'm not sure how useful it's going to be in practice.

In this new design, at least in the current proposal, either only PV/PVH Dom0 has access to vPMU, or select PVH/HVM have access to their own vPMU. There is no longer support for vPMU for PV DomU anymore.

Teddy

[1] https://lore.kernel.org/xen-devel/cover.1753372928.git.edwin.torok@xxxxxxxxx/T/#m9507ad8840515503f736823d0d699fb1b8ffa7a1

---

# Proposal (“vPMU v2”)

There are roughly 2 (exclusive) modes for vPMU :

- Profile the system as a whole, driven by Dom0
- Virtualize PMU in HVM guests (non-security supported)
- Use hardware facilities (AMD PMC Virtualization / Intel "load `IA32_PERF_GLOBAL_CTRL`" VMX control)

These 2 use-cases are exclusive and needs to be chosen at boot time i.e :

- `vpmu=off` / `no-vpmu` : vPMU disabled (default)
- `vpmu=global` : Native PMU driven by Dom0, requires `dom0_vcpus_pin`
  - → let Dom0 profile the system
  - effectively similar to `XENPMU_MODE_ALL`
- `vpmu=hvm` : Possibility to virtualize vPMU per PVH/HVM guest (with `XEN_DOMCTL_CDF_vpmu`)
  - → make profilers work in guests

## Global PMU for Dom0 (vpmu=global)

Guest (Dom0) observe this capability through (to be introduced) `XENFEAT_vpmu`.

Additional information (stacktrace, domid, guest registers, ...) could be exposed through a optional (simplified) shared page per CPU.

### PV

PV domains will interact (e.g write) to PMU registers through a new dedicated hypercall (`XENPMU_{read,write}_regs`). These PV domains will get `CR4[PCE]=1` (at least, for "kernel-mode" and are expected to read performance counters through `RDPMC` instruction (which is more efficient than through hypercalls).

PMI are forwarded through `VIRQ_XENPMU`.

### PVH

PVH Dom0 will observe "all" PMU registers non-intercepted and is able to control it through usual means (`wrmsr/rdmsr/rdpmc`), along with `XENPMU_{read,write}_regs`.

Xen will ensure that the PMI is forwarded through the architectural way (and also with `VIRQ_XENPMU` ?).

## PMU for HVM guests (vpmu=hvm)

TODO

## Notes

Intel PEBS/DS_AREA/BTS is out of scope and will not be exposed at least for global PMU for the time being.

Attachment: OpenPGP_signature.asc
Description: OpenPGP digital signature


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.