项目需要使用的主板有很多性能需要经过测试之后才能用于开发使用,因此将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
放进一个循环里即可。