Appearance
Windows 效能分析:WPR + WPA + xperf
以 ETW(Event Tracing for Windows)技術錄製與分析系統卡頓,精準定位 DPC/ISR 驅動延遲、CPU 熱點與磁碟 I/O 瓶頸。
概述
Windows 系統出現卡頓、滑鼠抖動、輸入延遲或畫面凍結時,找出根源需要低層次的效能追蹤工具。Windows ADK(免費)內附的 WPR + WPA + xperf 工具組,使用與作業系統核心整合的 ETW 機制,能以極低開銷錄製驅動中斷(DPC/ISR)、CPU 使用率、磁碟 I/O 等完整時序資料。
相對於 LatencyMon 免費版的功能限制(無法持續監控或匯出報告),WPR + WPA 使用相同底層技術且完全免費,適合作為長期維運的首選診斷方案。診斷流程分為三步:WPR 錄製、xperf 匯出文字報告(適合 AI 輔助分析)、WPA 圖形化視覺檢視。
實際操作中,最常見的卡頓根源是佔用 DPC 時間過長的驅動程式(特別是網卡、音效卡驅動),其次是背景行程搶佔 CPU 或磁碟 I/O 飽和。ETW trace 能精準定位到驅動模組名稱與發生時間點,大幅縮短診斷時間。
核心內容
工具角色分工
三個工具各司其職,形成完整的分析流水線:
| 工具 | 角色 | 輸出 |
|---|---|---|
| WPR(Windows Performance Recorder) | 系統服務模式背景錄製 ETW 事件 | .etl 二進位格式 |
| xperf | CLI 後處理工具,從 .etl 批次匯出文字報告 | .txt 人可讀格式 |
| WPA(Windows Performance Analyzer) | 圖形化互動分析,時間軸縮放與多圖疊加 | 視覺化介面 |
錄製設定選擇
wpr -start GeneralProfile 是最通用的入門設定,涵蓋 CPU 採樣、DPC/ISR、磁碟 I/O、記憶體等主要面向。若已知問題屬於特定領域(如網路延遲),可改用更精細的 profile 以減少 .etl 檔案大小。錄製時間只需涵蓋卡頓重現的時間窗口,通常 10~60 秒即足夠,不需長時間錄製。
常見卡頓根源與對應分析圖表
| 症狀 | 優先查看的圖表 | 展開欄位 |
|---|---|---|
| 滑鼠卡頓 / 音訊破音 | DPC/ISR Duration | Module(驅動名稱) |
| 程式無回應 / CPU 飆高 | CPU Usage (Sampled) | Process |
| 大量讀寫操作卡住 | Disk I/O | Process / Filename |
| 開機或喚醒慢 | CPU Usage + Disk I/O 同時 | Process |
分析技巧:時間軸確認卡頓發生的時間點是否有明顯 spike,DPC/ISR 展開到 Module 欄即可看到驅動程式名稱,CPU Usage 展開到 Process 欄找出搶佔資源的行程。
使用 xperf 匯出報告供 AI 分析
圖形介面截圖難以系統化分析;將 .etl 匯出為文字後直接提供給 AI 可大幅加速診斷。dpcisr 分析是找出卡頓驅動的首選,cpudisk 涵蓋 CPU 與磁碟,marks 記錄使用者標記的事件點。將輸出的 .txt 內容貼入 Claude 等 AI,可直接解讀驅動名稱與時間分佈並給出改進建議。
管理員權限的必要性
WPR 需要系統服務權限才能附掛 ETW provider,在非管理員下執行會回傳 0xc5585011 錯誤。停止錄製(wpr -stop)也需要相同權限,且停止過程需 10~30 秒同步 ETW buffer;期間不可中斷,按 Ctrl+C 會觸發 0x800704c7(使用者取消)並遺失已錄製的資料,需重新錄製。
關鍵要點
- 必須以管理員身份執行 WPR,否則出現
0xc5585011錯誤 wpr -stop等待過程不可按 Ctrl+C,需等 10~30 秒完成- xperf 匯出的
.txt報告適合直接提供給 AI 進行診斷分析 - WPA 的 DPC/ISR Duration 圖表展開 Module 欄即可定位卡頓驅動
- 若
wpa指令未加入 PATH,用Get-ChildItem找出完整路徑再執行 - 快速入門可先用
perfmon /report(無需管理員,60 秒出 HTML 報告)
實際應用
懷疑特定驅動造成音訊卡頓時:用 WPR 在卡頓發生時錄製 10 秒,匯出 DPC/ISR 報告後找出 Module 欄最高值的驅動名稱,更新或移除該驅動即可解決。若卡頓發生在重度磁碟讀寫期間,則改查 Disk I/O 圖表並展開 Filename 欄,找出造成 I/O 飽和的行程。
此工具組也適合作為 AI 輔助診斷的前端:xperf 匯出的文字報告可直接貼入 Claude,AI 解讀驅動名稱與時間分佈後給出具體改進建議,比人工逐行看圖更有效率。
部署設定參考
以下為實際操作時使用的完整指令,供日後查詢與複製使用。
安裝 Windows ADK
下載頁面(只勾選 Windows Performance Toolkit,其他元件不需要):
https://go.microsoft.com/fwlink/?linkid=2271337安裝後 WPA 的常見路徑:
C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\wpa.exe錄製指令
powershell
# 必須以管理員身份執行
# 開始錄製
wpr -start GeneralProfile
# 停止錄製並輸出 .etl(等待 10~30 秒,勿中斷)
wpr -stop C:\trace.etlxperf 匯出指令
powershell
# 匯出 DPC/ISR 報告(找卡頓驅動,最常用)
xperf -i C:\trace.etl -o C:\trace_dpcisr.txt -a dpcisr
# 匯出 CPU 使用報告
xperf -i C:\trace.etl -o C:\trace_cpu.txt -a cpudisk
# 匯出磁碟 I/O 報告
xperf -i C:\trace.etl -o C:\trace_disk.txt -a diskio
# 一次匯出所有常用分析
xperf -i C:\trace.etl -o C:\trace_full.txt -a dpcisr -a cpudisk -a diskio -a marksWPA 開啟指令
powershell
# 若 wpa 指令可用
wpa C:\trace.etl
# 若 wpa 未加入 PATH,用完整路徑
& "C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\wpa.exe" C:\trace.etl
# 找出 wpa.exe 位置
Get-ChildItem "C:\Program Files (x86)\Windows Kits" -Recurse -Filter "wpa.exe" -ErrorAction SilentlyContinue | Select-Object FullNameWPA 重點圖表載入順序
| 優先順序 | 圖表名稱 | 路徑 |
|---|---|---|
| ⭐ 最重要 | DPC/ISR Duration | Computation → DPC/ISR |
| ⭐ 最重要 | CPU Usage (Sampled) | Computation → CPU Usage (Sampled) |
| ⭐ 最重要 | Disk I/O | Storage → Disk I/O |
| 次要 | GPU Utilization | Video → GPU Utilization |
| 次要 | Memory | Memory → Heap Allocations |
常見錯誤排除
| 錯誤碼 | 原因 | 解法 |
|---|---|---|
0xc5585011 | 未以管理員身份執行 | 右鍵 PowerShell → 以系統管理員身份執行,重新執行 |
0x800704c7 | wpr -stop 等待中按了 Ctrl+C | 重新執行 wpr -stop C:\trace.etl 並等待完成 |
wpa: The term 'wpa' is not recognized | WPA 未加入 PATH | 用 Get-ChildItem 找出完整路徑,用 & 執行 |
輔助工具(Sysinternals)
| 工具 | 用途 | 取得方式 |
|---|---|---|
| Process Explorer | 進階工作管理員,即時看 CPU/interrupt/DPC | Sysinternals(免費) |
| Process Monitor | 行程 I/O 行為監控 | Sysinternals(免費) |
| Autoruns | 找出拖慢開機的自啟動項目 | Sysinternals(免費) |
| RAMMap | 記憶體使用細節 | Sysinternals(免費) |
perfmon 快速診斷(無需管理員)
powershell
perfmon /report無需管理員權限,60 秒後自動產生 HTML 報告,是最快速的入門診斷方式。
相關概念
- PowerShell Terminal 美化指南 — PowerShell 環境設定,適合搭配本工具的 CLI 操作
- lnav — 日誌檢視工具 — 另一個用於解析大型文字日誌的 CLI 分析工具