Streamline中基于統(tǒng)計的性能分析功能介紹
2020-04-24
ARM性能分析器(Streamline) 7.0版開始支持基于SPE(統(tǒng)計性能分析擴展)的性能分析。SPE是Armv8.2-A架構中的一個可選擴展特性,它可以以很低的代價對處理器的流水線進行采樣。Streamline可以從Arm Development Studio和Arm Mobile Stuido獲取。
為什么需要SPE?
Streamline前序版本只能通過硬件計數器和軟中斷中采樣PC信息獲取CPU的信息。硬件計數器只記錄觸發(fā)事件加總數,不可能知道具體哪條指令觸發(fā)了事件,它只能大致提供應用程序哪塊代碼觸發(fā)了這個計數器增加,而往往這塊代碼區(qū)域都比較大,這也導致了能通過這個信息來確定問題的開發(fā)者有限。同時因為采樣和解析都是通過中斷中的軟件來完成的,這也導致了程序計數器和棧的采樣率也是有限,太高的頻率會導致增大系統(tǒng)負載。SPE通過利用CPU流水線中的硬件對PC值進行周期性采樣來避免前面提到的問題,因此采樣率可以很高,并且沒有性能負擔。因為SPE是構建在處理器流水線里面,它可以直接采集每條指令相關的附加信息,這方便我們進一步分析執(zhí)行代碼。
工具支持
Streamline支持同時收集系統(tǒng)/應用模式下的SPE數據和其他性能計數器數據。
它支持圖形化顯示下列SPE數據:
l 延遲計數包。它計算指令從觸發(fā)到執(zhí)行完畢的延遲,可以用來鑒別流水線中的執(zhí)行停滯。這個計數包也提供存儲存取延遲信息,這可以用來識別高延遲的存儲訪問和糟糕的緩存用法。
l 事件包。它提供每個被采樣指令的重要信息。包括下面信息:
l 這條指令是否access/hit/miss某級緩存
l 這條指令是否是錯誤預測或者沒有采用的分支
l 這條指令是否導致互斥讀寫失敗
事件包可以用來識別分支預測,糟糕的緩存試用,鎖競爭等問題。
數據源包,顯示數據從哪一級存儲中獲取。
這些數據可以通過時間線顯示這些事件發(fā)生的順序,也可以在函數調用路徑,代碼試圖中看到。這讓用戶可以追蹤到線程,函數,代碼行和指令行。
先決條件
使用SPE需要硬件支持相應的擴展,內核需要使能arm_spe_pmu,設備樹或者UEFI需要支持SPE。此外,SPE目前需要KPTI失效(啟動kernel的時候設置kpti=off),這個要求在Arm后續(xù)處理器上可能不需要??梢酝ㄟ^檢查是否存在/sys/bus/events/devices/arm_spe_0文件驗證內核是否支持SPE。檢查dmesg的輸出是否有
Kernel/User page tables isolation: enabled
或者查看/sys/devices/system/cpu/vulnerabilities/meltdown是否包含Mitigation: PTI if enabled.
為了使用SPE,你需要有一個支持SPE的設備,或者使用arm的虛擬平臺FVP。本文使用Arm Neoverse N1 SDP。如果你想在虛擬平臺上測試,你可以使用FVP_Base_RevC-2xAEMv8A。Arm Mobile Studio支持SPE,但是目前還沒有消費級的Android設備支持SPE,本文重點使用Arm Development Studio中的Streamline進行演示。
Neoverse N1 SDP配置
本文使用Arm Neoverse N1 Software Development Platform運行一個基于Linux 5.4.1內核的環(huán)境。除了需要使能Streamline需要的內核選項和前面的提到的內核選項,不需要其他特殊配置。Neoverse N1 SDP 是一款針對服務器市場的開發(fā)平臺,目前尚未公開,只有早期客戶才能獲取。該平臺內含一顆Neoverse N1處理器,第一個支持SPE的處理器。
FVP配置
如果你希望在arm虛擬平臺上嘗試SPE功能,可以通過下面參數使能SPE :
-C cluster0.has_armv8-2=1 -C cluster0.has_statistical_profiling=1
-C cluster1.has_armv8-2=1 -C cluster1.has_statistical_profiling=1
因為FVP并不包含時序信息,所有的指令周期都只需要一個cycle,所以在FVP上的延遲計數器包中顯示延遲都是0.同時FVP也不模擬分支預測,所以所有的分支預測都顯示正確。
緩存模型可以被使能,使能后,SPE可以顯示緩存模型行為的相關事件。
開工
在設備上Gatord需要用root啟動。Arm Development Studio用戶可以通過下面命令進行全系統(tǒng)分析。
/path/to/gatord
也可以通過下面的命令對某個應用進行分析
/path/to/gatord --system-wide no --app <some-app-to-launch>
啟動Streamline,連上設備,從計數器配置窗口可以看到Arm SPE(Statistical Profiling Extension)配置界面
Figure 1 SPE配置對話框
這個對話框可以讓用戶基于操作類型,事件,最小延遲過濾出感興趣的事件。所有的操作默認都會被采樣,但也可以只采樣某種分支,存取操作的組合。相似的,也可以只采樣一些事件來進一步降低采樣量。過濾設置可以針對某類問題降低采集的數據量。比如低總延遲可以用來提取除緩存外的內存操作。錯誤預測事件可以用來尋找那些觸發(fā)錯誤的程序分支。盡管硬件允許,Streamline目前并不能讓用來設置采樣率。目前采樣率是每100000指令采樣一次。Streamline下一個版本,7.2,會支持配置采樣率。
Note: SPE運行時每隔n個指令進行一次采樣,看其是否滿足filter條件再送給Streamline后臺,而不是過濾所有樣本后每隔n條指令進行采樣。當Streamline采集數據到本地文件時,--spe選項參數可以用來控制SPE采樣配置。
檢查數據
下圖顯示添加了更多SPE計數器的時間圖。SPE事件包內的多種屬性顯示再堆疊圖上。這些圖顯示了某種屬性在樣本中存在和不存在的比例。白色方塊中顯示再所選事件內包含某種屬性樣本的總和。有些屬性和某些特定類型的指令相關,比如分支,存取。
比如Architecturally retired圖顯示了采樣的指令后完成了和沒有完成的數量,總量顯示了冒險執(zhí)行的總指令量。類似地, Level 1 Data Cache Access圖顯示了采樣指令中含有對L1數據緩存存取指令總數,以及hit/miss比例。
Note:這些圖標不會實時顯示,經過離線分析后會顯示。
這些事件圖顯示了被采樣進程的行為概述,可以用來進一步通過分析試圖來分析感興趣區(qū)域的細節(jié)。分析視圖中默認顯示采集過程中每個計數器和事件發(fā)生次數總和。當你發(fā)現(xiàn)感興趣區(qū)域,卡尺工具可以用來再分析視圖中過濾出感興趣區(qū)域的數據。
Figure 2使用cross-section標記選擇感興趣區(qū)域,本圖顯示一個對L2緩存利用率不足的benchmark的SPE計數器,采樣模板使用實驗性N1 SPE模板
進一步分析
Streamline有很多視圖用來進一步分析理解被分析對象的行為。這包括調用路徑欄,函數視圖欄和代碼欄。
調用路徑欄
調用路徑視圖顯示了按照進程和線程顯示的調用棧。因為SPE只是采樣PC而不是調用棧,每個進程中的函數只是平鋪展開。默認情況,本視圖只顯示傳統(tǒng)的周期性采樣數據,為了顯示SPE數據,從下拉菜單中選擇SPE。
Figure 3下拉菜單顯示調用棧
事件包顯示了每個函數中符合條件和不符合條件的采樣比例,以及每個線程和進程中事件的加總數。通過點擊第一列的表,可以將這些比例單獨成列用來排序,這些獨立的列顯示了符合條件的事件量,以及占總量的比例。通過對這些列的排序,可以確定哪些函數導致緩存存取失敗,或哪些函數導致分支預測失敗率高。
Figure 4 可配置顯示列
Figure 5基于L1數據緩存存取失敗排序的函數
延遲計數器以Log2(Latency)為橫軸的直方圖顯示,列按照0延遲,1 cycle延遲,2-3 cycles延遲,4-7 cycles延遲,8-15 cycles延遲等等,直至采集到的大延遲。
Figure 6 可能的延遲例子,深色的部分顯示所有延遲中的高延遲部分,一行中的高一些的柱圖顯示一行中的高延遲
調用路徑視圖的下半部分顯示子視圖。對于周期性的調用棧采樣,它會用來顯示某個選擇的函數下的所有函數調用占所有采樣中的比例。但是SPE數據只會將進程/線程中的函數平鋪展開,這里只會顯示進程/線程中函數占用父進程/線程中調用比例(A函數在子線程/進程中被調用次數除以A函數在父子進程中調用次數)。
Figure 7調用路徑子視圖,顯示一個線程的所有函數
函數欄
函數視圖欄顯示了所有進程的中函數列表。和調用路徑欄一樣,函數欄也有一個下拉菜單選擇顯示數據。類似地,每個列也可以通過點擊頭部添加刪除。
Figure 8函數欄,顯示L1數據緩存存取失敗的SPE數據
代碼欄
點擊代碼欄或者在調用路徑視圖,函數欄中右鍵選擇一個函數即刻看到相關代碼欄。和前面二種視圖有所不同,本視圖一次只顯示一列。你可以從下拉菜單中進行相應選擇配置視圖。
Figure 9使用下拉菜單選擇代碼視圖配置
反匯編顯示基于每條指令的計數器變化,比如可以顯示每條指令的延遲。
Figure 10反匯編視圖
如果分析的程序包含調試信息,視圖還會顯示代碼行信息,如果運行Streamline的機器上關聯(lián)了被調試程序的源碼,代碼欄的上半部分會顯示被選擇函數的源碼,同時每行代碼運行帶來的計數器變化也會顯示。這可以用來識別函數中需要特別處理代碼塊。
關于億道電子
億道電子是國內全面的開發(fā)工具提供商,致力于將全球先進的軟件產品引薦給國內研發(fā)型企業(yè)使用,為企業(yè)提供研發(fā)、設計、管理過程中使用的各種軟件工具,并致力于和客戶一同提高研發(fā)、設計效率,縮短設計周期。億道電子先后與arm、Altium、Ansys、QT、TestPlant、CollabNet、Parasoft以及TouchGFX等多家全球知名公司建立戰(zhàn)略合作伙伴關系,并成為他們在中國區(qū)的重要分銷合作伙伴。億道電子專注開發(fā)、設計、管理工具數十年,客戶超過6000家,具有豐富的工具使用及客戶支持經驗積累,可以為客戶提供從arm開發(fā)、EDA板級設計、軟件編譯及測試工具、結構設計工具、多物理場仿真工具以及嵌入式GUI工具等產品與服務。億道電子在北京、上海、深圳設有分公司,業(yè)務遍布全國。
摘自arm中文論壇網
查看更多→