徐彬,楊露,侯慶慶,楊楚瑋,鄧甜甜
(中國(guó)電子科技集團(tuán)公司第58 研究所,江蘇 無(wú)錫 214072)
隨著軍事技術(shù)的發(fā)展,武器裝備國(guó)產(chǎn)化已經(jīng)成為我國(guó)軍事現(xiàn)代化的重要進(jìn)程。處理器是現(xiàn)代各種計(jì)算機(jī)設(shè)備的核心,武器裝備國(guó)產(chǎn)化首先是處理器的國(guó)產(chǎn)化。擁有自主知識(shí)產(chǎn)權(quán)的高性能處理器對(duì)于國(guó)家安全和經(jīng)濟(jì)發(fā)展都具有非常重要的意義[1]。
處理器體系結(jié)構(gòu)復(fù)雜,內(nèi)部涉及總線架構(gòu)、指令集以及時(shí)序等方面對(duì)處理器性能有影響,因此,客觀有效地評(píng)價(jià)處理器的性能,已成為處理器研究領(lǐng)域重要課題。
針對(duì)性能評(píng)價(jià)指標(biāo),目前使用的主要方法為系統(tǒng)上運(yùn)行測(cè)試基準(zhǔn)程序(Benchmark),通過(guò)基準(zhǔn)測(cè)試程序的執(zhí)行時(shí)間等參數(shù)來(lái)評(píng)測(cè)處理器系統(tǒng)的性能,成熟的處理器性能評(píng)測(cè)基準(zhǔn)程序如Dhrystone、Whetstone、Lmbench和Rhealstone等。其中Dhrystone主要評(píng)測(cè)處理器的整數(shù)運(yùn)算性能,是早期進(jìn)行嵌入式系統(tǒng)性能評(píng)測(cè)的主要性能評(píng)測(cè)基準(zhǔn);Whetstone主要用于評(píng)測(cè)處理器的浮點(diǎn)運(yùn)算[2];Lmbench通過(guò)運(yùn)行大量的程序,測(cè)試大多數(shù)公認(rèn)的有可能成為性能瓶頸的重要參數(shù)[3],它主要評(píng)測(cè)處理器、內(nèi)存、網(wǎng)絡(luò)、文件系統(tǒng)與硬盤(pán)之間傳送數(shù)據(jù)的能力;Rhealstone是一組由6個(gè)C語(yǔ)言程序組成的程序集[4],主要用于評(píng)測(cè)上下文切換、搶占時(shí)間、中間延遲、信號(hào)量混洗時(shí)間、死鎖解除時(shí)間等。
針對(duì)不同的指標(biāo),可選擇相關(guān)的測(cè)試基準(zhǔn)程序,但是一些測(cè)試基準(zhǔn)程序?qū)\(yùn)行環(huán)境和平臺(tái)有特殊要求,無(wú)法直接執(zhí)行。本文旨在介紹一套方便移植、執(zhí)行有效的評(píng)價(jià)方法,能夠在科研項(xiàng)目中靈活應(yīng)用。
帶寬是用于衡量處理器的內(nèi)部存儲(chǔ)器的讀寫(xiě)性能,可以使用單位時(shí)間內(nèi)完成數(shù)據(jù)讀寫(xiě)的能力來(lái)評(píng)價(jià)。本文采用MBW測(cè)試方法,將數(shù)據(jù)從一塊內(nèi)存復(fù)制到另一塊內(nèi)存,通過(guò)內(nèi)存拷貝的手段進(jìn)行測(cè)試,由此方法測(cè)出的性能值又稱為“拷貝”內(nèi)存帶寬。
MBW方法根據(jù)每次拷貝的數(shù)據(jù)大小又將測(cè)試項(xiàng)分為三種類(lèi)型:
1)D U M B 模式,該模式通過(guò)循環(huán)進(jìn)行4 字節(jié)(sizeof(long))賦值的方式測(cè)試內(nèi)存帶寬。
2)MEMCPY模式,該模式通過(guò)memcpy接口一次性拷貝的方式測(cè)試內(nèi)存帶寬。
3)MCBLOCK模式,該模式通過(guò)memcpy接口分小塊拷貝的方式測(cè)試內(nèi)存帶寬。
這種方法在評(píng)價(jià)過(guò)程中,評(píng)價(jià)結(jié)果除了與內(nèi)存本身有關(guān),還與評(píng)價(jià)時(shí)使用的工具鏈以及memcpy函數(shù)等外界因素相關(guān)。若是評(píng)價(jià)同一系列的處理器,外界因素基本相同的情況下,該方法是極其方便有效的。
循環(huán)執(zhí)行空指令方法用于衡量指定軟件環(huán)境中的處理器性能。使用匯編語(yǔ)言編寫(xiě)接口實(shí)現(xiàn)循環(huán)執(zhí)行nop指令,來(lái)保證處理器執(zhí)行測(cè)試函數(shù)時(shí)執(zhí)行的指令數(shù)是固定的,該測(cè)試函數(shù)代碼短小精悍,能夠保證測(cè)試函數(shù)中的全部指令能夠裝載至Cache中,保證處理器每次執(zhí)行測(cè)試函數(shù)指令時(shí)是從Cache中取指,而非內(nèi)存。這樣可有效排除內(nèi)存性能對(duì)處理器性能評(píng)價(jià)結(jié)果造成影響。
實(shí)時(shí)響應(yīng)時(shí)間是衡量系統(tǒng)性能的重要指標(biāo),響應(yīng)時(shí)間越短,系統(tǒng)資源利用率越高。實(shí)時(shí)響應(yīng)性能的評(píng)價(jià)中,重點(diǎn)關(guān)注中斷響應(yīng)時(shí)間以及上下文切換時(shí)間。
1.3.1 中斷響應(yīng)時(shí)間評(píng)價(jià)
中斷響應(yīng)時(shí)間為處理器實(shí)時(shí)性的一個(gè)重要體現(xiàn)方面,當(dāng)中斷發(fā)生時(shí),處理器保存現(xiàn)場(chǎng),然后響應(yīng)中斷,執(zhí)行中斷處理任務(wù),處理完畢后,恢復(fù)現(xiàn)場(chǎng),任務(wù)恢復(fù)執(zhí)行,中斷響應(yīng)過(guò)程如圖1所示。在評(píng)價(jià)過(guò)程中重點(diǎn)關(guān)注中斷響應(yīng)時(shí)間T2-T1,此段時(shí)間最短越好,說(shuō)明系統(tǒng)的響應(yīng)中斷能力較強(qiáng)。
1.3.2 上下文切換時(shí)間評(píng)價(jià)
上下文切換時(shí)間是帶有操作系統(tǒng)的處理器的重要評(píng)價(jià)方面,處理器正在運(yùn)行任務(wù)時(shí),由于其它原因切換到另一個(gè)任務(wù),需要保存當(dāng)前任務(wù)的狀態(tài)并恢復(fù)另一個(gè)任務(wù)的狀態(tài),當(dāng)前運(yùn)行任務(wù)轉(zhuǎn)為掛起狀態(tài),另一個(gè)被選定的就緒任務(wù)成為當(dāng)前任務(wù)。從前一個(gè)任務(wù)掛起計(jì)時(shí),到另一個(gè)任務(wù)變?yōu)楫?dāng)前任務(wù)時(shí)結(jié)束,這段時(shí)間即為上下文切換時(shí)間。具體實(shí)施的方法如下:
圖1 中斷響應(yīng)過(guò)程
1)創(chuàng)建兩個(gè)任務(wù),一個(gè)優(yōu)先級(jí)較高,一個(gè)優(yōu)先級(jí)較彽;
2)高優(yōu)先級(jí)的任務(wù)獲取時(shí)間戳,掛起,這樣就運(yùn)行低優(yōu)先級(jí)的任務(wù);
3)低優(yōu)先級(jí)的任務(wù)開(kāi)始時(shí)調(diào)用獲取時(shí)間戳的接口,然后恢復(fù)高優(yōu)先級(jí)任務(wù)的運(yùn)行。
兩個(gè)時(shí)間戳的差值就是上下文切換時(shí)間。
以自研帶有MRCloud操作系統(tǒng)的處理器為例,該處理器有兩個(gè)系列產(chǎn)品,下文簡(jiǎn)稱為“1號(hào)”和“2號(hào)”,在設(shè)計(jì)上,2號(hào)與1號(hào)相比,增加了二級(jí)緩存,即L2 Cache,所以2號(hào)性能理論上應(yīng)比1號(hào)要好,利用上述三種評(píng)價(jià)方法分別對(duì)1號(hào)和2號(hào)進(jìn)行性能評(píng)價(jià),以驗(yàn)證實(shí)際情況與理論推測(cè)相符。
分別對(duì)1號(hào)和2號(hào)SRAM的32KB進(jìn)行測(cè)試,測(cè)試中使用的內(nèi)存均使用 __attribute__ ((aligned(32)))得到對(duì)齊的內(nèi)存,這樣可以保證測(cè)試數(shù)據(jù)的穩(wěn)定性。其中MCBLOCK模式采用16B、32B、64B、128B、256B、512B、1KB、4KB、8KB、32KB 10種情況進(jìn)行測(cè)試。當(dāng)數(shù)據(jù)塊較小時(shí),2號(hào)與1號(hào)測(cè)試結(jié)果相差不大,但隨著數(shù)據(jù)塊大小增加,2號(hào)訪存性能是1號(hào)的2倍,明顯優(yōu)于1號(hào)。
分別在1號(hào)和2號(hào)循環(huán)運(yùn)行空指令,運(yùn)行次數(shù)分別為100000次、1000000次、10000000次,得到執(zhí)行指令時(shí)間如表1所示。可看出執(zhí)行相同代碼和相同的循環(huán)次數(shù),2號(hào)運(yùn)行時(shí)間明顯少于1號(hào),CPU指令執(zhí)行能力2號(hào)優(yōu)于1號(hào)。
表1 CPU 指令執(zhí)行性能結(jié)果
評(píng)價(jià)中斷響應(yīng)時(shí)間采用串口作為外部中斷源進(jìn)行觸發(fā),當(dāng)一個(gè)任務(wù)正常運(yùn)行時(shí),串口觸發(fā)中斷,任務(wù)掛起,中斷開(kāi)啟之前記錄兩次時(shí)間a、b,開(kāi)啟中斷,在中斷處理函數(shù)中記錄剛進(jìn)入中斷的時(shí)間c,中斷處理完成后出中斷前的時(shí)間d,中斷返回后主程序時(shí)間e。中斷響應(yīng)時(shí)間為(c-b)-(b-a),其中b-a為獲取系統(tǒng)時(shí)間產(chǎn)生的誤差時(shí)間。具體評(píng)價(jià)結(jié)果如表2所示,可看出中斷響應(yīng)性能2號(hào)與1號(hào)幾乎相同。
評(píng)價(jià)上下文切換時(shí)間采用三個(gè)不同優(yōu)先級(jí)的任務(wù),優(yōu)先級(jí)分別任務(wù)1<任務(wù)2<任務(wù)3,任務(wù)1中執(zhí)行任務(wù)3(此時(shí)記錄系統(tǒng)時(shí)間為A),任務(wù)3中對(duì)任務(wù)2執(zhí)行——吊銷(xiāo)20次,然后執(zhí)行任務(wù)1(此時(shí)記錄系統(tǒng)時(shí)間為B),上下文切換時(shí)間為(B-A)/20。具體評(píng)價(jià)結(jié)果如表2所示,可看出實(shí)時(shí)響應(yīng)性能2號(hào)比1號(hào)稍微差一點(diǎn),因?yàn)?號(hào)處理器是兩級(jí)總線結(jié)構(gòu),在切換任務(wù)時(shí)時(shí)間比1號(hào)稍長(zhǎng)。
表2 實(shí)時(shí)響應(yīng)性能評(píng)價(jià)結(jié)果
從上述應(yīng)用實(shí)例來(lái)看,該套評(píng)價(jià)方法簡(jiǎn)單易實(shí)現(xiàn),適用于不同的處理器,特別對(duì)于同一系列的新型號(hào)產(chǎn)品對(duì)比老型號(hào)產(chǎn)品性能評(píng)價(jià)客觀清晰,在科研項(xiàng)目緊、任務(wù)重的情況下能可以快速地給出一個(gè)可靠的結(jié)論,有助于項(xiàng)目的積極推進(jìn)。