[運營期間開發]卡頓處理--GPUView


這里寫圖片描述
開發期間的卡頓處理的方法比較多,可以打log等方法。

GPUView
在運營期間就是GPUView就是逆天的給力存在。
GPUView早先是一個微軟實習生開發的東東(好逆天的實習生),以單獨的方式來發布,后來集成到windows sdk中來,本blog上面這里有一些記錄。
而且在后續GPUView依舊保持着發展,功能也越發好用了,連intel的gpa也在底層使用這個機制。

GPUView可以做的事情很多,其原理就是能夠抓取一段時間的windows底層的消息(幾乎所有你需要的消息),gpu driver,lock,context switch。。。應有盡有。這部分的抓取的applicaiton叫xperf.exe,看的時候是GPUView.exe,當然整個過程我們就簡稱GPUView了。
而且很棒的一點就是,windows自己會把這些消息緩存一段時間,然后在你抓取的時候,會把之前一段時間的信息拿過來,這對於抓取卡頓太妙了(其余的辦法,你發現卡頓,但是這一幀已經過去了,你只能望卡興嘆)。

ps;我老婆認為這個軟件太難看,我個人倒是挺喜歡這個hardcore的感覺,和windbg一樣,解決問題簡潔犀利。

GPUView使用
實際命令行什么的還是有點麻煩,抓取時候可以使用寫好的一些GUI工具,在win10上面是這里
自己隨便運行一個程序什么的,然后點擊抓取,可以獲得一個etl文件。

這里就舉一個例子來說明過程:
1,有玩家反映在開封主城附件的豪宅區會有卡頓,於是qq上聯系玩家,遠程一下,收集到卡頓的etl文件。
2,然后使用GPUView.exe打開這個文件,遍歷整個時間段里會發現有一個地方系統處於停滯:有近700ms都沒有提交任何GPU命令
這里寫圖片描述
3,進一步zoom in,會看見主線程這里在忙,其他都在等,點擊其中一個事件(這個是系統以一定間隔來采集執行的信息,點開可以看到進一步的callstack信息)
這里寫圖片描述
4,選擇主線程,只選擇Stack Walk,就可以看到這里的callstack了:
這里寫圖片描述
5,這個callstack,在自己有pdb的情況下就可以resolve出來,在gpuview的symbol path那里進行設置,就能看到具體的callstack了:
這里寫圖片描述
這時候就知道問題是出在什么地方了。

symbol解析問題處理
GPUView解析不出symbol的問題是經常出現的。
第一步可以做一些診斷:可以參見stackoverflow上面這個帖子
DBGHELP_DBGOUT = 1
DBGHELP_LOG = C:\dbghelp.log
通過這兩個環境變量(就是系統環境變量的設置方法)可以把load symbol的過程log出來,實際windbg等一些系統工具都可以用這個辦法診斷symbol不能resolve的問題。
通過log可以定位問題,比如我之前的問題就是改了symbol path,但是沒有生效,還是到老的地方去找。
可能是gpuview在symbol path改變的生效方面的bug,於是就亂試好了,比如把這幾個選項開開關關
這里寫圖片描述
然后就好了。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com