Arm Statistical Profiling Extension (SPE, 統(tǒng)計分析擴(kuò)展) 是一種架構(gòu)級功能,旨在增強(qiáng) Arm CPU 的指令執(zhí)行分析。自 2019 年 Arm Neoverse N1 CPU 平臺問世以來,該功能便與 Arm CPU 中普遍配備的 Performance Monitor Unit (PMU, 性能監(jiān)控單元) 并存。
為了能從 SPE 和 PMU 等功能中獲益,一個重要的步驟就是提供工具、文檔和示例以便形成一種自頂向下 (Top-Down) 的系統(tǒng)級芯片 (SoC) 性能分析解決方案。近期,Arm 的六名工程師發(fā)布了一份關(guān)于使用 SPE 進(jìn)行性能分析的詳細(xì)白皮書。
本文針對軟件開發(fā)者、性能分析師和芯片工程師介紹了使用 SPE 進(jìn)行性能分析和根源問題分析的概念和方法。
Arm SPE 是一種硬件輔助 CPU 分析機(jī)制,可提供詳細(xì)的分析功能。它會記錄關(guān)鍵執(zhí)行數(shù)據(jù),包括程序計數(shù)器、數(shù)據(jù)地址和 PMU 事件。SPE 可增強(qiáng)對分支、內(nèi)存訪問等的性能分析,從而助力軟件優(yōu)化的實現(xiàn)。SPE 數(shù)據(jù)可用于使用 Linux perf 等工具進(jìn)行源代碼熱點檢測、內(nèi)存訪問分析,以及數(shù)據(jù)共享分析的精確采樣。
SPE 采樣包括四個階段:運(yùn)算采樣、記錄關(guān)鍵執(zhí)行信息、樣本記錄后篩選,以及將記錄存儲在內(nèi)存中。它可以使用監(jiān)控工具進(jìn)行高效的分析和數(shù)據(jù)提取。SPE 使用減法計數(shù)器定期選擇微運(yùn)算進(jìn)行分析。SPE 樣本還會記錄指令從 CPU 后端開始運(yùn)算的執(zhí)行周期。
使用 Linux perf 工具收集數(shù)據(jù)時,可啟用 SPE 分析功能。Arm 還發(fā)布了 SPE-Parser 輔助工具,以支持 SPE 追蹤的數(shù)據(jù)收集和分析。該工具可以將數(shù)據(jù)導(dǎo)出為 CSV 和 Parquet 格式,提高了分析的靈活性。
已發(fā)布的 SPE 白皮書中提供了四個案例,用來說明該功能的價值。
1
Apache Arrow CSV 寫入器:性能優(yōu)化
第一個案例是利用 SPE 功能來優(yōu)化 Apache Arrow CSV 寫入器代碼。結(jié)果表明,在 Neoverse N1 平臺上,性能提高了 40%。該案例研究包括檢測單位周期指令數(shù) (IPC) 和帶寬 (GB/s),然后進(jìn)一步檢查 MPKI 和未命中率。其次,運(yùn)算組合指標(biāo)揭示了 CSV 寫入器工作負(fù)載對整數(shù)指令和分支的高度依賴,這表明可能存在矢量化優(yōu)化的機(jī)會。
通過對 L1D 緩存事件和分支預(yù)測錯誤進(jìn)行分析,揭示了與 memcpy 函數(shù)相關(guān)的問題,其中該函數(shù)頻繁出現(xiàn)緩存缺失和分支預(yù)測錯誤的情況。該案例研究還對 memcpy 中的分支進(jìn)行了分析,結(jié)果認(rèn)為分支預(yù)測錯誤的根源在于緩沖區(qū)大小預(yù)測偏差導(dǎo)致的效率不足。該案例研究強(qiáng)調(diào)了在 Arrow CSV 寫入器中結(jié)合 memcpy 運(yùn)算對于數(shù)據(jù)字段和分隔符的復(fù)雜性,導(dǎo)致 CPU 分支預(yù)測未達(dá)到最佳狀態(tài)。
使用 SPE 進(jìn)行分析后,便進(jìn)入了真正有趣的部分,即優(yōu)化 CSV 寫入器代碼。第一階段是引入 copy_separator 輔助函數(shù),以改進(jìn)熱循環(huán)中分隔符和行結(jié)束符的復(fù)制。對經(jīng)優(yōu)化的代碼進(jìn)行了基準(zhǔn)測試。結(jié)果表明,吞吐量從 1.5~1.8 GB/s 提高到 2.1 GB/s,指令總數(shù)減少,IPC 從 2.22 提高到 2.58。與分支相關(guān)的指標(biāo)大幅降低,促進(jìn)了整體性能的提升。在 Neoverse 核心上優(yōu)化代碼時,我們建議使用 SPE 進(jìn)行熱點分析和根源檢測。
2
利用 SPE 進(jìn)行內(nèi)存訪問分析
基于 SPE 進(jìn)行分析可以獲取有關(guān)內(nèi)存運(yùn)算的寶貴信息,包括內(nèi)存地址、執(zhí)行延遲和數(shù)據(jù)源信息。該分析有助于確定與內(nèi)存訪問相關(guān)的瓶頸和性能問題,并且可以采集通常需要運(yùn)行 LMBench 才能獲取的部分?jǐn)?shù)據(jù)。
SPE 可記錄內(nèi)存負(fù)載的分層數(shù)據(jù)源命中情況,其中數(shù)據(jù)源編碼取決于系統(tǒng)的緩存層次,如 L1 數(shù)據(jù)緩存、L2 緩存、LLC 或 RAM。
使用 SPE 性能分析數(shù)據(jù)對內(nèi)存訪問進(jìn)行分析需要篩選記錄,以便著重針對特定代碼部分,從中提取延遲值,并檢查由內(nèi)存運(yùn)算觸發(fā)的 PMU 事件。內(nèi)存測試用例顯示,SPE 衍生的延遲接近 LMBench 報告的延遲。SPE 數(shù)據(jù)還有助于分析性能問題,如 TLB 未命中。SPE 衍生的數(shù)據(jù)源信息與分層內(nèi)存訪問層級結(jié)構(gòu)相匹配,這有助于確定內(nèi)存訪問在緩存層次結(jié)構(gòu)中的命中位置。
3
內(nèi)存帶寬測試
SPE 分析還可用于預(yù)估內(nèi)存帶寬。不過需要注意的是,SPE 是一種基于采樣運(yùn)算的統(tǒng)計測量工具,對于內(nèi)存帶寬測量不一定百分百精確。SPE 可用于優(yōu)化和精細(xì)研究時的比較分析,特別是對于具有可預(yù)測和熟知的內(nèi)存訪問模式的代碼,如微內(nèi)核。SPE 監(jiān)測工具中推出的 SPE-Parser 工具可用于處理通過 Linux perf 工具收集的原始 SPE 分析數(shù)據(jù)。輸出結(jié)果可提供有關(guān)分析結(jié)果的寶貴信息。內(nèi)存讀取帶寬是通過經(jīng)篩選的 SPE 樣本以統(tǒng)計方式預(yù)估出來的。要計算這一估計值,需要將基準(zhǔn)讀取的總內(nèi)存大小除以總執(zhí)行時間。
4
數(shù)據(jù)共享分析
最后一個用例強(qiáng)調(diào)了 SPE 用于多線程工作負(fù)載中數(shù)據(jù)共享分析。數(shù)據(jù)共享問題可能會導(dǎo)致性能問題,特別是當(dāng)多個線程在同一數(shù)據(jù)集上工作時,這會造成緩存一致性開銷。緩存?zhèn)喂蚕肀闶且粋€常見的性能問題。當(dāng)一個處理器修改了緩存行上的數(shù)據(jù)項,而另一個處理器在該緩存行的不同部分工作時,就會出現(xiàn)這種情況。偽共享會導(dǎo)致緩存失效,并降低性能。
Linux perf c2c 工具會分析從 SPE 獲取的內(nèi)存訪問數(shù)據(jù),包括數(shù)據(jù)源信息、數(shù)據(jù)地址和指令 PC 地址。Perf c2c 可通過提供存在潛在問題的緩存行地址信息,為偽共享問題檢測帶來幫助。其中包括不同進(jìn)程訪問的緩存行中的數(shù)據(jù)偏移、指令地址、本地或遠(yuǎn)程(跨 CPU)訪問信息,以及所涉及的 NUMA 節(jié)點。該工具會報告可能存在偽共享的緩存行的詳細(xì)信息,以及不同線程訪問的數(shù)據(jù)偏移,從而幫助開發(fā)者發(fā)現(xiàn)并解決偽共享問題。SPE 分析與 perf c2c 工具相結(jié)合,可用于識別和解決多線程應(yīng)用中的偽共享問題,最終提高性能。
總結(jié)
Arm SPE 可提供詳細(xì)的 CPU 分析功能,包括常規(guī)代碼優(yōu)化、內(nèi)存訪問分析、內(nèi)存延遲預(yù)估和數(shù)據(jù)共享分析。
SPE 可用于對源代碼熱點檢測、內(nèi)存訪問分析和數(shù)據(jù)共享問題進(jìn)行精確采樣。它可通過記錄關(guān)鍵執(zhí)行數(shù)據(jù)來增強(qiáng)性能分析,并且能夠與 Linux perf 等工具集成,幫助用戶有效地進(jìn)行分析并優(yōu)化代碼。該工具集功能全面,能夠讓用戶識別瓶頸,加深對 CPU 行為的理解,并提高軟件性能。
審核編輯:劉清
-
ARM
+關(guān)注
關(guān)注
134文章
9346瀏覽量
376881 -
計數(shù)器
+關(guān)注
關(guān)注
32文章
2291瀏覽量
96318 -
SoC芯片
+關(guān)注
關(guān)注
1文章
643瀏覽量
35780 -
SPE
+關(guān)注
關(guān)注
0文章
28瀏覽量
13950 -
csv
+關(guān)注
關(guān)注
0文章
39瀏覽量
6026
原文標(biāo)題:使用 Arm SPE 進(jìn)行芯片數(shù)據(jù)采集和性能分析
文章出處:【微信號:Arm社區(qū),微信公眾號:Arm社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
ARM+FPGA的高速同步數(shù)據(jù)采集
labview進(jìn)行的數(shù)據(jù)采集
基于ARM+FPGA的高速同步數(shù)據(jù)采集
LabVIEW的光譜數(shù)據(jù)采集系統(tǒng)的設(shè)計與分析
圖像采集實例分析——基于LabVIEW的光譜數(shù)據(jù)采集
基于ARM和GPS的數(shù)據(jù)采集模塊的設(shè)計
如何更好地進(jìn)行數(shù)據(jù)采集

基于ARM的藍(lán)牙實時數(shù)據(jù)采集系統(tǒng)的設(shè)計

基于ARM的數(shù)據(jù)采集與控制系統(tǒng)設(shè)計
基于ARM的遠(yuǎn)程數(shù)據(jù)采集系統(tǒng)設(shè)計_齊亞萍
基于ARM與DSP的聲頻數(shù)據(jù)采集系統(tǒng)設(shè)計

評論