王嘎?李路野?韓文俊



摘要:嵌入式系統軟件對實時性指標要求較高,為了盡可能提高軟件的運行效率,嵌入式開發人員迫切需要能夠有效輔助嵌入式軟件開發的工具和性能分析的方法。本文提出了一種針對嵌入式系統軟件的性能量化分析框架,該框架通過系統采樣的方法采集硬件資源并利用信息,建立性能評價指標表征應用性能,通過對性能指標進行量化分析評估軟件性能,定位問題并提出優化建議。為了驗證該框架的有效性,在Intel服務器Linux操作系統,對通用矩陣乘法進行了性能分析和優化,計算資源利用率平均提升10%左右,軟件代碼性能提升65%。
關鍵字:嵌入式系統;量化分析;評價指標
自微處理器X86架構出現的30年里,最初階段的性能提升主要來源于提升處理器的時鐘周期。時鐘周期的提升不可避免地帶來了功耗的增加和散熱問題,后期的處理器主要通過增加處理器的核心數量來提升性能。單個處理器的應用程序和多核處理器的應用程序在軟件設計過程區別較大。嵌入式平臺主要以多核處理器作為計算,由于嵌入式系統對軟件性能和穩定性要求較高,同時又與硬件平臺緊密耦合,因此必須充分發揮硬件資源。尤其是并行程序設計,必須對應用軟件進行性能分析和調試優化,要以分析工具為輔助,對應用軟件的CPU、內存、網絡等資源的使用率以及高速緩存的利用率進行采樣并跟蹤定位,找到軟件的性能瓶頸,優化關鍵算法,從而在資源有限的情況下,提高軟件性能和可靠性。
一、相關工作
Gprof[1-3]是Linux操作系統的開源性能分析工具,可以統計函數的調用次數和耗時分析,主要采用插樁的方式,而采樣會帶來額外的開銷且不夠精確,對網絡等資源沒有統計在內,不是理想的性能分析工具。
Perf[4]和Oprofile[5]也是開源性能分析工具,與Gprof不同的是,Perf和Oprofile還可以獲取底層的信息,并且不是插樁方式,而是非侵入式的,因此不會帶來額外的開銷,尤其是對高速緩存的分析能幫助快速定位熱點。
CodeTEST[6]是AMC公司開發的性能分析工具,基于自動插樁的方式,與Gprof不同的是,CodeTEST的插樁是在匯編級語言,信息更準確,但是靈活性較差。
PAPI[7]是由美國田納西大學創新計算實驗室開發的,以硬件性能計數器為基礎的性能分析工具,基于事件的采樣從而對Cache命中率、分支預測的事件獲取,能精準分析硬件利用信息,更好地定位問題。
TAU[8](Tune and Analysis Utilities)是一個針對C、C++、Java等并行程序的性能分析工具,將性能信息可視化展示,更好地實現人機交互。
Likwid[2]也是Linux的性能分析工具,包含多個工具包,主要用來分析計算機拓撲結構,獲取硬件信息,性能基準測試可用性強。
2018年,國防科技大學在飛騰1500A處理器中開發了一款性能分析工具[2],主要實現了拓撲信息獲取硬件性能監測等。
2019年,Intel發布了針對X86架構的并行程序性能優化分析工具Intel Parallel Studio,其中Vtune[9]能夠訪問處理器的硬件計數器收集、分析性能信息和定位熱點。
二、性能量化分析技術
針對嵌入式軟件難以充分發揮硬件資源的問題,本文主要建立了一種軟件性能量化分析技術,通過全系統采樣技術進行硬件信息采集,建立性能評價指標,并對性能指標針進行優化,提升嵌入式軟件的性能,以支持高性能高可靠度的軟件開發。主要的功能包括:
(一)軟件性能量化分析框架
對于嵌入式軟件硬件資源利用不高,實時性低下的問題,設計一個框架:通過硬件信息采集、獲取、計算資源利用率,同時建立性能評價指標,將性能信息數據可視化,分析量化的指標,同時快速定位到軟件的問題。
(二)硬件信息采集
通過插樁、時間采樣和事件采樣,獲取軟件運行過程和硬件微體系性能事件的特征,通過中斷測量和函數測量的方式獲取底層信息;
(三)性能評價指標
影響程序性能的因素主要包括算法、指令執行流水、高速緩存、內存讀寫等,依據這些因素定義關鍵性能評價指標,而這些關鍵性能指標能夠確定軟件是否充分發揮硬件性能。
(四)性能量化分析
根據性能信息采集獲取的關鍵性能數據,以及最優化的指標值的區間范圍完成性能量化評估。
三、軟件性能量化分析框架
軟件性能量化分析框架主要包括:硬件信息采集、性能評價指標、性能量化分析。如圖1所示,硬件信息采集軟件包含采樣數據驅動程序技術、中斷和采樣技術,采集CPU、Cache、內存、高速緩存等硬件資源利用率;性能評價指標將關鍵性能指標數據可視化,包括CPU利用率、Cache命中率、CPU流水線等指標;性能量化分析對最優化的指標進行置信區間量化分析,評估是否最大限度利用計算資源并定位問題,快速進行代碼優化。
(一) 硬件信息采集
硬件信息采集主要由性能分析工具完成,采集過程主要通過基于時間和事件的采樣等技術途徑,收集CPU、內存、高速緩存、網絡、磁盤等使用信息。
大多數多核處理器集成了性能計數器,對于沒有集成性能計數器,則使用基于時間的采樣。這種采樣方式是基于中斷機制的,每次時鐘中斷系統就會采樣一次。
(二)性能評價指標
影響程序性能的因素主要包括算法、指令執行流水、高速緩存、內存讀寫等,在眾多性能指標中,選擇關鍵指標:算法復雜度、CPU流水線效率、高速緩存命中率、CPI(指令周期數)、向量化效率。定義關鍵性能評價指標,并能夠依據這些關鍵性能指標確定軟件是否充分發揮硬件性能。
(三)性能量化分析
對關鍵性能評價指標的實際測試值和理想最優化值在一個區間上進行比較,確定程序的熱點和瓶頸。如果在某個區間上,則可以認為該項指標不是軟件性能的瓶頸;如果不在某個區間上,則說明該項指標肯定是性能的瓶頸,隨后具體分析該指標所對應的硬件或者程序是否需要優化;如果只有一部分在區間上,則說明該項指標也會影響性能,但不是最最終因素,此時需要對最關鍵指標的影響進行排序,從影響最大的入手分析。
(四)實驗測試
通用矩陣的矩陣乘法在嵌入式系統的應用軟件開發領域應用最為廣泛,本文就以1024×1024的方陣矩陣乘法為實驗測試對象,驗證軟件性能量化分析技術的有效性,計算平臺是Intel E5,操作系統是Centos,編譯器采用gcc。
如表2所示,對性能評價指標進行分析:
①CPU流水線效率。該指標分析CPU在執行過程中的指令流水效率、指令并行能力,優化前完全流水執行的是35.4%,優化后是51.2%,提升了15.8%。
②高速緩存命中率。該指標表示程序中的數據和指令是否都在硬件的Cache中,命中率高的程序,緩存優化更好,構件性能更優,優化前命中率是92%,優化后命中率是98%,提升了6%。
③向量化效率。處理器的向量處理單元利用率影響程序的向量化效率,將可以矢量處理的計算轉換為向量化,性能會更優;優化前是25%,優化后是30%,提升了5%。
④CPI。該指標表示指令并行度,優化前完全流水執行的是0.830,優化后是0.547,指令并行度提升了0.283。
⑤處理時間優化前是46ms,優化后是16ms,性能提升了65%。
四、結束語
本文在嵌入式系統軟件開發領域提出了一種軟件性能量化分析方法,通過建立時間采集、時間采集等硬件信息采集,將影響軟件性能的因素提煉抽象,定義了CPU流水線效率、高速緩存命中率、向量化效率等性能評價指標,并對指標進行了量化分析,依據分析結果定位問題和優化代碼,最終達到充分發揮計算資源,提升嵌入式軟件性能的目的,實驗結果顯示,利用本文提出的軟件性能量化分析框架,通用矩陣乘算法性能提升了65%。
作者單位:王嘎 李路野 韓文俊
南京電子技術研究所
參? 考? 文? 獻
[1] http://sourceware.org/binutils/docs/gprof
[2] 彭林,方建濱,杜其琦,等.飛騰1500A處理器性能分析工具Likwid研究,計算機工程與科學,2018,40(7),.
[3] Gprof sites[EB/OL].[2018-01-15].https://en.wikipedia.org/wiki/Gprof.
[4] Perf sites[EB/OL].[2018-01-15].https://www.brendangregg.com/perf.html
[5] Oprofile sites[EB/OL].[2018-01-15].https://oprofile.sourceforge.net.
[6] Metrowerks.CodeTEST software analysis tools introduction[M].Metrowerks Press, 2003.
[7] PAPI sites[EB/OL].[2018-01-15].https://icl.cs.utk.edu/.
[8] Tau sites[EB/OL].[2018-01-15].https://www.cs.uoregon.
[9] Intel VTune sites[EB/OL].[2018-01-15].https://software.intel.com/en-us/intel-Vtune-amplifier-xe.
[10] 徐恒陽.龍芯多核平臺上性能分析工具的設計與實現[D].中國科學技術大學. 2011
[11] 張惠臻,王超,陳雁.嵌入式軟件性能分析方法研究與工具設計.計算機應用與軟件.