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

基于ARM的藍牙實時數據采集系統的設計

評論