# 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 [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?

Upon completion of this Learning Path, you will be able to:

- Install WindowsPerf on Windows on Arm machine
- Generate a sample report

### Prerequisites

Before starting, you will need the following:

- 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

<details>
<summary>Which command should I run first to verify that WindowsPerf is working?</summary>
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.
</details>

<details>
<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.
</details>

<details>
<summary>How do I choose the CPU core and duration for a measurement?</summary>
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.
</details>

<details>
<summary>What result should I expect from a sampling run?</summary>
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`.
</details>

<details>
<summary>Which events or metrics can I try from the cheat sheet examples?</summary>
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`.
</details>
