http://tonyho.github.io/ARM%20Linux%20BenchMark.html
1.背景說明
許多公司有很多不同的ARM SoC的研發產品,ARM核心可能有Cortex-A8/A9/A15,核心數可能有單核雙核和四核.現在,幾乎每出一款手機,網絡上馬上就有人對其評測.對比和評測不同ARM SoC 芯片以及嵌入式系統是非常有必要的;通過不同的SoC和其運行的OS對比,可以幫助我們了解我們產品的性能,並根據測試得知系統的瓶頸、找出需要改善的方面。
嵌入式產品的硬件一般都是由處理器、主存、存儲器、顯示設備、以及其他外設組成。嵌入式產品的軟件方面,一般都選用嵌入式系統,如小的RTOS,如VxWorks、μC/OS-III、RTT、DJYOS、FreeRTOSLinux,或者是更復雜的Linux、Android、WinCE。評測和對比的內容一般也主要由軟件和硬件這兩個方面組成。
2.預備基礎知識
如果只是對Andorid系統或者是WinCE相關系統評測,那么我們完全可以下載一些應用(安裝)運行即可評測。而如果要評測的嵌入式系統是基於Linux自己定制的甚至沒有GUI的,則很可能需要我們下載源代碼編譯。因此對基礎的編譯知識的了解必不可少①。編譯配置又與ARM SoC構架相關,所以需要了解一下與ARM構架以及有關的交叉編譯的選項,比較ARM SoC種類較少,所以這類問題變得很簡單了,一般我們需要根據需要配置-mfpu
和-march
以及-mfloat-abi
,以及編譯優化選項。
3.評測工具介紹
評測工具有很多,在這個網頁列出了幾十個工具。單單系統性評測工具就有7個。那什么是系統性的BenchMark(引用自unixbench):
Do be aware that this is a system benchmark, not a CPU, RAM or disk benchmark. The results will depend not only on your hardware, but on your operating system, libraries, and even compiler.
系統測試
用得比較廣的系統性測試工具:
- lmbench④
- UnixBench
這兩個BenchMark軟件,本身是給PC上的Linux上用的,為了給嵌入式開發板子使用,需要交叉編譯。和其他嵌入式程序編譯一樣,一般Makefile要改的只有兩個地方:
- CC:指定為嵌入式交叉編譯器
- CFLAGS:需要根據目標板ARM芯片配置②
一些單項測試工具:
將系統測試里面的每個測試項拆開就成了單項測試,一般分為計算性能③,內存性能,圖形顯示。
有一點需要說明的是:在linux啟動過程中會打印BogoMIPS不一定准確。這方面可以參考ARM官方的說明,使用Dhrystone,當然現在在計算能力測試方面,現在大家可能更認可CoreMark和CPU2006,而不是Dhrystone。
一些外設的測試:
SD/eMMC可以使用dd命令來測試,例如一個讀寫的測試命令示例:
Read: sync && date && dd if=/dev/block/mmcblk0 of=/dev/null bs=4094 count=40960 && sync && date Write:sync && date && dd of=/dev/block/mmcblk0 if=/dev/zero bs=4094 count=40960 && sync && date
使用date只能精確到秒,但是使用time命令可以精確到0.01S,所以用time更好,但是time只接受一個process作為參數。因此,需要將dd與sync整條命令放入到腳本中,再用time來運行這個腳本。
4.測試結果分析
如果就拿單單一個光禿禿的數據來看,會顯得有些空白,所以一般用不同的板子數據進行對比來看。在lmbench
中,就可以將測試結果拷貝到result中的對應OS目錄中,再用make see
,產生summary.out文件。其他的測試軟件也有類似的功能,對於測試結果,我們需要做的是通過分析測試結果找到系統中性能與理論相差太大的不正常項目,然后去分析可能的原因並尋求解決之道。
①可以看AnTuTu and Intel這篇文章,里面提到了安兔兔對ICC編譯器對Intel處理器的優化,ARM這邊卻連neon也沒有使用。同時另一篇文章說到了安兔兔在版本變高后,評分下降的issue。
②關於編譯選項,可以man gcc,搜索對應的選項來查看詳細內容。給出一個CLFAGS示例: 其中這些參數可以在kernel啟動后使用
cat /proc/cpuinfo
查看Arch架構。
③關於計算方面的測試,有一個不錯的文檔ARM Cortex-A8 vs. Intel Atom:,里面介紹了4中測試Integer和Float的工具,並用這些工具對Atom和Beagle Bone板子進行的測試比較和說明。另外Keil的這個網頁上對這些測試程序和Item也有一些介紹。
④編譯與運行可以參考這個網頁的文章,需要根據直接的板子SoC更改CFLAGS。
http://bbs.51testing.com/thread-1163336-1-1.html
在新項目需要選擇一個全新的基於ARM嵌入式處理器平台的時候,難免會需要對新平台的性能進行評估,這時候有
幾種思路可以進行參考,
一是ARM芯片廠家發布的性能指標,不過大多數是基於理論情況;
二是購買同樣平台的開
發板移植應用進行實測,效果最直接但是可能需要花費較大精力和時間;
那么這個時候也可以考慮使用針對性的benchmark軟件在目標平台上面進行性能測試,算是一個折衷的方法,其結果有一定參考意義但由於影響benchm
ark軟件結果的因素不僅僅是硬件本身,還有不同的BSP以及軟件設定等,因此在這些設定一致性越大的前提下其結果的參考意義才越大,否則很可能結果不是預期想要的甚至南轅北轍.
基於上面思路,本文統一采用Toradex工業產品等級 ARM計算機模塊以及其官方發布的最新版Linux BSPV2.5Beta
3最為測試基准平台,同時將對結果影響比較大的CPU主頻和顯示輸出分辨率盡可能保持一致來進行測試,測試樣
本分別是基於NVIDIA Tegra2的Colibri T20 512M, 基於NXP i.MX6DL 的Colibri i.MX6DL 512M以及基於NXP Vybrid
的Colibri VF61 256M;其中前兩個均為雙核Cortex-A9 ARM核心,第三個為Cortex-A5和M4異構雙核核心,不過這里
只測試A5.
1). 本文涉及的硬件平台測試項目及工具如下
a). 硬件平台
上述三種接口兼容的Colibri ARM 計算機模塊以及一塊Colibri Eva Board
b). 測試項目及對應工具
- CPU測試: nbench
- Memory測試: stream
- Storage測試: dd, hdparm
- Ethernet測試: iperf
- CPU壓力測試: stress
- GPU壓力測試: glmark2