Back to Powershell

PowerShell Performance Analysis

tools/performance/README.md

7.6.11.9 KB
Original Source

PowerShell Performance Analysis

This directory contains useful scripts and related files for analyzing PowerShell performance.

If you use the Windows Performance Toolkit, you can use the following to collect data and analyze a trace.

PowerShell
$PowerShellGitRepo = "D:\PowerShell"
wpr -start $PowerShellGitRepo\tools\performance\PowerShell.wprp -filemode
pwsh.exe -NoProfile -Command "echo 1"
wpr -stop PowerShellTrace.etl
wpa -i wpa://.\PowerShellTrace.etl?profile=$PowerShellGitRepo\tools\performance\PowerShell.wpaProfile

When wpa opens, under System Activity, you'll find a section "Regions of Interest". With the above wpaProfile, you should see a bunch of PowerShell related regions as well as GC and JIT activity.

If you use PerfView, you can collect a trace by running

PowerShell
Invoke-PerfviewPS.ps1 -scenario { echo 1 }
perfview .\perfviewdata.etl

The etl files collected with perfview or wpr should contain roughly the same events.

Also note that you can collect the trace with one tool and analyze with the other.

Symbols

PDB files are not published for PowerShell Core, so the current recommendation is to build PowerShell yourself passing -CrossGen to Start-Build.

If profiling Windows PowerShell, symbols are generated from GAC. wprui.exe and perfview.exe will both generate the PDB files needed.

Files

FileDescription
GC.Regions.xmlWPA regions of interest for GC
JIT.Regions.xmlWPA regions of interest for JIT
PowerShell.Regions.xmlWPA regions of interest for PowerShell
PowerShell.stacktagsPowerShell stack tags
PowerShell.wpaProfileWPA profile to load regions of interest and stack tags
PowerShell.wprpWPR profile to enable CLR and PowerShell ETW events
Invoke-PerfviewPS.ps1Script to run perfview and with PowerShell ETW events enabled