項目需要使用的主板有很多性能需要經過測試之后才能用於開發使用,因此將Linux上一些常用的tools移植進板子進行測試。
主要有 : CPU、DDR、NAND FLASH、SATA、網絡。
最后順便記錄一下寫bash shell腳本遇到的小問題。
01. CPU
查看CPU用如下命令(多少個核,頻率,特性等):
cat /proc/cpuinfo
查看內存用如下命令:(只有當前內存大小,已用空間等等,不能看到內存頻率)
cat /proc/meminfo
1.1 memtester 可以捕獲內存錯誤和一直處於很高或很低的壞位。
1.1.1 安裝
下載http://www.linuxidc.com/Linux/2012-09/71014.htm
#tar...
修改: vi conf-cc : cc改為交叉編譯工具(arm-none-linux-gnueabi-gcc)
vi conf-ld 同上
#make
#make install
1.1.2 測試
./memtester [-p physaddrbase] <mem>[B|K|M|G] [loops]
其中:
Physaddrbase: 需要測試的物理地址;
<mem>[B|K|M|G]:測試內存的大小;
[loops]:測試次數
1.1.3 實例
測試10M內存1次:
1.2 stress
stress 可以進行系統壓力測試
1.2.1 安裝
下載http://down1.chinaunix.net/distfiles/stress-0.18.1.tar.gz
#tar...
# CC=arm-none-linux-gnueabi-gcc ./configure --host=arm-linux (需要交叉編譯)
#make
#sudo make install
1.2.2 測試
-c 產生n個進程 每個進程都反復不停的計算隨機數的平方根
-i 產生n個進程 每個進程反復調用sync(),sync()用於將內存上的內容寫到硬盤上
-v
--verbose 顯示詳細運行信息
-q
--quiet 不顯示運行信息
1.2.3 實例
產生13個cpu進程4個io進程1分鍾后停止運行
./stress -c 13 -i 4 --verbose --timeout 1m
產生1024個進程,僅顯示出錯信息
./stress --quiet --cpu 1k --timeout 10m
02. NAND FLASH
2.1 dd 從磁盤讀:time if=/dev/mmcblk0 of=/dev/null bs=8k count=131072(總1G)
通過 bs 選項 設置不同的讀寫塊大小測試(bs=1M),dd 的測出的速度與讀寫塊的大小有一定關系,也可能受到系統中有IO讀寫的進程的影響。
2.2 hdparm 測試硬盤性能,同dd一樣采用順序讀寫。
2.2.1 下載:https://sourceforge.net/projects/hdparm/
改Makefile 中CC為arm-none-linux-gnueabi-gcc。編譯移植。
2.2.2 測試
顯示硬盤的相關設置:hdparm /dev/sda
/dev/sda:
IO_support = 0 (default 16-bit)
readonly = 0 (off)
readahead = 256 (on)
geometry = 19929[柱面數]/255[磁頭數]/63[扇區數], sectors = 320173056[總扇區數], start = 0[起始扇區數]
評估硬盤的讀取效率:hdparm -t /dev/sda
2.2.3 實例
fdisk –l 查看磁盤驅動號
./hdparm -t /dev/mmcblk0 可以得到磁盤讀取速率。
2.3 fio FIO是測試IOPS的非常好的工具,用來對硬件進行壓力測試和驗證。
2.3.1 安裝
下載:https://github.com/axboe/fio/
#tar
# CC=arm-none-linux-gnueabi-gcc ./configure --host=arm-linux (需要交叉編譯)(具體看--help)
#make
#sudo make install
2.3.2 測試
FIO分順序讀,隨機讀,順序寫,隨機寫,混合隨機讀寫模式。
2.3.3 實例
順序讀:200M
./fio -filename=/dev/mmcblk0 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=200M -numjobs=30 -runtime=100 -group_reporting -name=mytest
隨機讀:200M
./fio -filename=/dev/mmcblk0 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=16k -size=200M -numjobs=30 -runtime=100 -group_reporting -name=mytest
隨機寫:10G
./fio -filename=/dev/mmcblk0 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=10G -numjobs=20 -runtime=1000 -group_reporting -name=mytes
混合隨機讀寫:200G
./fio -filename=/dev/mmcblk0 -iodepth 1 -thread -rw=randrw –rwmixread=70 -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=500 -group_reporting -name=mytest
我只用了
./fio -filename=$dev -direct=1 -iodepth 1
-thread -rw=randwrite -ioengine=psync -bs=64k -size=40M -numjobs=20 -runtime=20
-group_reporting -name=mytest1
來測寫速度。
-direct=1 去除緩存影響。
上述dd和hdparm 也是避開緩存影響的結果。
結果分析:
IOPS (Input/Output Per Second)即每秒的輸入輸出量(或讀寫次數),是衡量磁盤性能的主要指標之一。決定IOPS的主要取決與陣列的算法,cache命中率,以及磁盤個數。
IOPS和數據吞吐量適用於不同的場合:
讀取10000個1KB文件,用時10秒 Throught(吞吐量)=1MB/s ,IOPS=1000 追求IOPS。
讀取1個10MB文件,用時0.2秒 Throught(吞吐量)=50MB/s, IOPS=5 追求吞吐量。
03. 網絡測試
主要用iperf工具,有些板子可能需要移植, configure的時候除了設置CC外還需要CXX,以及--host=arm-linux,出了undefined reference to `rpl_malloc' 之類的錯誤的話在config.h中找到
#define malloc rpl_malloc
注釋掉就行了。
./iperf -u -c $ip -i 1 -w 1M -t 15 -b 50M -d
用於測試50M帶寬上下行(需要虛擬機iperf -su 開啟一個服務器端。)
04. shell 小結
4.1 \ 轉義
"" 軟轉義 中間含有$時
'' 硬轉義 需要重定向時
4.2 break n 表示退出n層循環
4.3 有些板子會在判斷時出現不識別情況,可以采用這種形式避免
"$goon" = "N"
4.4 檢測輸入的ip地址是否合法
echo $ip|grep "^[0-9]\{1,3\}\.\([0-9]\{1,3\}\.\)\{2\}[0-9]\{1,3\}$" > /dev/null; #^ $:從開始到結束是數字才滿足條件 if [ $? -ne 0 ] #上一條指令正常則返回0,否則返回1 then echo "IP format error,Please enter the IP again." # exit 1; continue; fi ipaddr=$ip a=`echo $ipaddr|awk -F . '{print $1}'` #以"."分隔,取出每個列的值 b=`echo $ipaddr|awk -F . '{print $2}'` c=`echo $ipaddr|awk -F . '{print $3}'` d=`echo $ipaddr|awk -F . '{print $4}'` if [ $a -gt 255 ] || [ $a -lt 0 ] then echo "IP format error,Please enter the IP again." # exit 1; continue; elif [ $b -gt 255 ] || [ $b -lt 0 ] then echo "IP format error,Please enter the IP again." # exit 1; continue; elif [ $c -gt 255 ] || [ $c -lt 0 ] then echo "IP format error,Please enter the IP again." # exit 1; continue; elif [ $d -gt 255 ] || [ $d -lt 0 ] then echo "IP format error,Please enter the IP again." # exit 1; continue; else break ; fi
放進一個循環里即可。