https://www.spec.org/download.html
http://blog.lazzzy.xyz/2017/09/15/SPEC_CPU2006/
BenchMark SPEC CPU2006
0x00 背景
最近在幫師兄做靜態插樁,然后插樁的工作做得差不多了,需要用到benchmark做性能測試,簡單記錄一下SPEC CPU2006
的安裝和使用過程。中間也遇到了許多坑,謹記。
0x01 安裝
機器版本:Ubuntu 16.04.3 LTS
首先下載CPU2006到本地,一般會下載到鏡像文件,解壓之后可以找到install.sh
BenchMark SPEC CPU2006
發表於 2017-09-15 | 分類於 技術分析 | 閱讀次數
0x00 背景
最近在幫師兄做靜態插樁,然后插樁的工作做得差不多了,需要用到benchmark做性能測試,簡單記錄一下SPEC CPU2006的安裝和使用過程。中間也遇到了許多坑,謹記。
0x01 安裝
機器版本:Ubuntu 16.04.3 LTS
首先下載CPU2006到本地,一般會下載到鏡像文件,解壓之后可以找到install.sh
~$ ./install.sh
SPEC CPU2006 Installation
Top of the CPU2006 tree is '/media/*/SPEC_CPU2006v1.1'
Enter the directory you wish to install to (e.g. /usr/cpu2006)
/home/myname/cpu2006
Installing FROM /media/*/SPEC_CPU2006v1.1
Installing TO /home/myname/cpu2006
Is this correct? (Please enter 'yes' or 'no')
yes
...
之后等待安裝完成,到此安裝過程結束。
0x02 編譯工具包
根據文檔,在使用之前需要先配置環境。令人欣慰的是在CPU2006中已經集成了配置環境的方法,只需要執行一條命令就可以完成配置操作
source ./shrc
每次重新打開terminal的時候,都需要先運行該命令,之后才可以正常使用。
在編譯工具之前,我們首先需要進入config文件夾,根據自己的需要,復制一份已有的配置文件模板作為自己使用的文件,例如
cp Example-linux64-amd64-gcc43.cfg my.cfg
例如我們只需要測試int型的CPU性能,我們可以執行以下操作:
runspec --config=my.config -T base --action=build int
在編譯生成gcc的過程中遇到一些問題,查閱資料發現是因為編譯CPU2006需要gcc-4.9及以下的版本才可以編譯,因此需要安裝低版本的gcc。可以通過apt-get來安裝。
sudo apt-get install 4.9
安裝完成之后,可以通過下面的命令實現gcc版本切換
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 40
接着,輸入以下命令可以切換版本
sudo update-alternatives --config gcc
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/bin/gcc-5 100 auto mode
* 1 /usr/bin/gcc-4.9 50 manual mode
2 /usr/bin/gcc-5 100 manual mode
Press <enter> to keep the current choice[*], or type selection number:
如果有遇到g++也需要不同版本的問題,同樣使用該辦法來實現g++的切換。
安裝完成之后,如果沒有問題,重新執行編譯命令,便可以編譯完成。
0x03 運行
如果一切沒有問題,接下來可以進行運行測試
runspec --config=my.cfg -T base --reportable int
如果需要生成報告,一定要寫--reportable參數,運行該命令時,程序會自動檢測編譯生成的二進制文件有沒有修改過,如果原來生成的二進制文件被修改了,則運行時會自動重新編譯生成二進制文件,確保運行的程序是原始的程序。
0x04 運行插樁過后的程序
因為運行時會檢測程序是否是編譯結束的程序,因此,就存在一個問題,插樁過的程序一定被修改了,如何運行,查閱了一些資料發現:
程序運行之前做的檢測只是對比可執行程序的 MD5
可執行程序的 MD5 值在 my.config 文件中保存
因此,只需要在插樁后將可執行程序新的 MD5 寫入 my.config 文件中,就不會出現重新編譯的情況,這也算是一種投機取巧的辦法。可以寫一個小腳本自動來填寫MD5值。
當然,如果不需要生成報告,也可以在運行時加入參數--nobuild
配置文件中需要加的參數,程序的運行環境LD_PRELOAD
preENV_LD_PRELOAD=lib/libredundantguard.so
0x05 總結
搞了有幾天的spec CPU2006,也只是知道了一點點的東西,記錄下來,以免以后會忘記。