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