# Get started with WindowsPerf

## In this learning path

- [Introduction](https://learn.arm.com/learning-paths/laptops-and-desktops/windowsperf/)
- [WindowsPerf](https://learn.arm.com/learning-paths/laptops-and-desktops/windowsperf/windowsperf/)
- [WindowsPerf cheat sheet](https://learn.arm.com/learning-paths/laptops-and-desktops/windowsperf/windowsperf_cheatsheet/)
- [Next Steps](https://learn.arm.com/learning-paths/laptops-and-desktops/windowsperf/_next-steps/)

## About this Learning Path

|  |  |
| --- | --- |
| Skill level: | Introductory |
| Reading time: | 20 min |
| Last updated: | 11 Aug 2026 |

|  |  |
| --- | --- |
| Author: | Ronan Synnott , Arm<br>[LinkedIn](https://linkedin.com/in/ronansynnott) |
| Arm IP: | [Cortex-A](https://support.arm.com/?tab=compute-ip&Product%20Type=Application%20Processors) [Neoverse](https://support.arm.com/?tab=compute-ip&Product%20Type=Infrastructure%20Processors) |
| Tags: | [Performance and Architecture](https://learn.arm.com/tag/performance-and-architecture) [Windows](https://learn.arm.com/tag/windows) [WindowsPerf](https://learn.arm.com/tag/windowsperf) |

### Who is this for?
This is an introductory topic for software developers working on laptops and desktops and new to the Arm architecture.

### What will you learn?
After completing this Learning Path, you'll be able to perform the following tasks:
- Install WindowsPerf on Windows on Arm machine
- Generate a sample report

### Prerequisites
Before starting, you'll need the following prerequisites:
- Windows on Arm desktop or development machine

### Summary
You’ll install WindowsPerf on Windows on Arm and use `wperf` to generate performance reports. First, you’ll collect aggregate Arm PMU event counts with `wperf stat`, then use `wperf sample` or `wperf record` to attribute activity to functions, basic blocks, or instructions. You’ll select events, pin measurements to a core, and interpret the resulting profiling data.

### Frequently asked questions

**Which command should I run first to verify that WindowsPerf is working?**

Start with a short counting run using `wperf stat` on a few events for a brief timeout. For example, use `inst_spec`, `vfp_spec`, `ase_spec`, and `ld_spec` to confirm you see nonzero aggregate counts without errors.

<summary>When should I use `wperf stat` versus `wperf sample` or `wperf record`?</summary>
Use `wperf stat` to obtain aggregate counts of PMU events over a measurement window. Use `wperf sample` or `wperf record` to collect samples that show where events occur at the function, basic block, or instruction level.

**How do I choose the CPU core and duration for a measurement?**

Select the core with the `-c` option (for example, `-c 0`) and control the run length with `--timeout`. Pick values that cover the code you want to observe during the measurement window.

**What result should I expect from a sampling run?**

Sampling output attributes PMU event occurrences to program locations at the function, basic block, or instruction levels. If you see only totals, verify that you used a sampling command rather than `wperf stat`.

**Which events or metrics can I try from the cheat sheet examples?**

The examples use `inst_spec`, `vfp_spec`, `ase_spec`, and `ld_spec`, and include the `imix` metric, which groups related events. You can also add an additional event such as `l1i_c`.
