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