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