1.fio
安装:
tar zxvf fio-2.2.5.tar.gz
cd fio-2.2.5
./configure
make
make install
用法:
随机读
fio -filename=/tmp/test_randread -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=mytest
随机写:
sudo fio --name=randwrite --ioengine=libaio --iodepth=1 --rw=randwrite --bs=4k --direct=0 --size=512M --numjobs=2 --runtime=240 --group_reporting
读写性能测试:
sudo fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=random_read_write.fio --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75
说明:
filename=/dev/sdb1 测试文件名称,通常选择需要测试的盘的data目录。
direct=1 测试过程绕过机器自带的buffer。使测试结果更真实。
rw=randwrite 测试随机写的I/O
rw=randrw 测试随机写和读的I/O
bs=16k 单次io的块文件大小为16k
bsrange=512-2048 同上,提定数据块的大小范围
size=5g 本次的测试文件大小为5g,以每次4k的io进行测试。
numjobs=30 本次的测试线程为30.
runtime=1000 测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止。
ioengine=psync io引擎使用pync方式
rwmixwrite=30 在混合读写的模式下,写占30%
group_reporting 关于显示结果的,汇总每个进程的信息。
此外
lockmem=1g 只使用1g内存进行测试。
zero_buffers 用0初始化系统buffer。
nrfiles=8 每个进程生成文件的数量。
结果分析:
io总的输入输出量
bw:带宽 KB/s
iops:每秒钟的IO数
runt:总运行时间
lat (msec):延迟(毫秒)
msec: 毫秒
usec: 微秒
2.iozone
安装:
tar xvf iozone3_430.tar #解压(注意不要有中文名目录)
cd iozone3_430/src/current/ #进入安装目录
make linux #安装
使用:
cd /home/iozone3_430/src/current
./iozone -a -i 0 -i 1 -i 2 -f /home/hdd/testfile -r 16m -s 8G | tee -a iozone1.log
#设置大小为物理内存的一半;存放到iozone1.log下查看
备注:各参数的含义
-a #全面测试
-i #指定运行于哪种模式测试。可以使用-i # -i # -i #进行多个测试
0=write/rewrite
1=read/re-read
2=random read/random write
-f #指定用来测试的临时文件,测试完后会自动删除
-r #设置测试文件的块大小
-s #设置测试文件的大小,要求为物理内存的1/2,1倍,2倍
-I #直接IO,可排除掉缓存的影响,直接对硬盘读写
结果查看:
/iozone3_430/src/current目录下的iozone1.log
3.stream
----------解压到目录:
----------编译
单线程编译:
# gcc -mtune=native -march=native -O3 -mcmodel=medium -DSTREAM_ARRAY_SIZE=200000000 -DNTIMES=30 stream.c -o stream.o
多线程编译:
# gcc -mtune=native -march=native -O3 -mcmodel=medium -fopenmp -DSTREAM_ARRAY_SIZE=8000000 -DNTIMES=30 stream.c -o stream.o
上述多线程编译参数含义如下
-mtune=native -march=native:针对CPU指令的优化,此处由于编译机即运行机器。故采用native的优化方法。使用-mtune =native将在所选指令集的约束下生成针对本地计算机优化的代码。使用-march =native将启用本地计算机支持的所有指令子集(因此结果可能无法在其他计算机上运行)
-O3:编译器编译优化级别
-mcmodel=medium:当单个Memory Array Size 大于2GB时需要设置此参数(小于2GB时也可保留这个参数,此时这个参数不生效)
-fopenmp:适应多处理器环境;开启后,程序默认线程为CPU线程数
-DSTREAM_ARRAY_SIZE=8000000:这个参数是对测试结果影响最大,也是最需要关注的一个参数,它用来指定计算中a[],b[],c[]数组的大小,它的值不能太大,也不能太小,太大的话,会延长测试时长并影响测试准确性甚至执行测试失败,太小的话,CPU Cache会干扰测试结果,不能测试出真实的内存带宽。要确定合适的size值,首先要使用cat /sys/devices/system/cpu/cpu0/cache/index3/size命令查看测试机的三级缓存,假如测试机配置为4C8G,cpu拓扑为socket=1,core=2,thread=2,查到的三级缓存为16384K也就是16MB,那么size应该设置为(1socket * 16MB/socket * 1000 * 1000) * 4 / 8B = 8000000,乘以4是因为官方建议size是三级缓存的四倍,除以8是因为STREAM_ARRAY_SIZE为double类型,每个double类型占用8Byte。
-DNTIMES=30:执行的次数,并且从这些结果中选最优值
----------编译后执行测试
# ./stream.o
注:如果重复进行测试,则再次测试前需执行以下命令,用以删除所有类型的IPC对象,包括共享内存段、消息队列和信号量,它会移除系统中的所有IPC对象,并释放相应资源
# ipcrm --all
4.glmark2
1、搭建编译环境
sudo apt-get install g++ build-essential pkg-config
sudo apt-get install libx11-dev libgl1-mesa-dev
sudo apt-get install libjpeg-dev libpng-dev
2、目录下执行命令安装:
./waf configure --with-flavors=x11-gl
./waf build -j 8(CPU核数)
sudo ./waf install
3、输入glmark2
5.netperf
1、拷贝netperf到两台电脑(1台做服务端,1台做客户端,两台机器通过网线直连),并解压,输入命令:tar -zxvf netperf-2.7.0.tar.gz;
2、在两台电脑上安装netperf,输入命令:
#./configure --build=alpha64
#make && make install
3、server端关闭防火墙
#systemctl stop firewalld
4、服务端启动netserver服务,输入命令:
#netserver
5、在client端执行测试,输入命令:(server和client端需要处于同一网段)
(1)netperf -t TCP_STREAM -H 192.168.1.1 -l 60
(2)netperf -t TCP_RR -H 192.168.1.1 -l 60
(3)netperf -t UDP_STREAM -H 192.168.1.1 -l 60
(4)netperf -t UDP_RR -H 192.168.1.1 -l 60
6.unixbench
解压
Run文件目录下 输入make执行
./Run运行
7.lmbench
lmbench3.0目录下
#make results 执行
#make see 查看测试结果
#cd results
#make ps 将测试结果生成为图片
#cd ./PS
#evinces PS 查看测试结果图像