任务:在Linux下用fio测试工具(Google搜索fio benchmark)测试一个U盘的性能,U盘上不要放任何数据。
通过这个任务,了解fio的具体使用,各个参数的具体含义,并且了解U盘的随机和顺序读写。
笔记:
首先安装fio工具:
$ wget http://brick.kernel.dk/snaps/fio-2.0.7.tar.gz
$ tar -zxvf fio-2.0.7.tar.gz
$ cd fio-2.0.7
$ make
$ make install
命令参数:
#filename:目标盘符/测试设备:filename=/dev/sdb4(可用lsblk命令查询usb对应dev下的节点)
#direct: 测试过程绕过机器自带的buffer,使测试结果更真实。
#I/O type:rw=Read(顺序读)/write(顺序写)/randread(随机读)/randwrite(随机写)/randrw(随机写和读)
#Block Size:单次IO的块文件大小,bs=4k,4k是主流,8k是Mysql和Oracle,16K是MysqlInnodb
#I/O size:总共要读写的数据大小,size=10G
#Num threads:创建多少进程/线程来并发执行,numjobs=64
#Runtime:测试运行时间,runtime=10,单位为s
#group_reporting:关于显示结果的,汇总每个进程的信息。
#ioengine:io引擎,处理io的方式,包括sync,pync,vsync,libaio 等,目前使用最广泛的是 libaio。
具体区别见http://www.cnblogs.com/cloudphoenix/p/6542909.html
#iodepth:测试的队列深度,队列深度表示控制器可同时发送给被测设备的指令数目。默认为1。
#Num files: 表示负载将分发到几个文件中。例如:nrfiles=8
#数据填充方式: 当进行数据写入时,可选择写入数据的形式。此选项可选三种模式,分别为重复填充(填全0)、伪随机填充(填伪随机数)、随机填充(先生成随机数,再填充)。
#percentage_random:随机和顺序比率;例如:percentage_random=80,80%的随机
# time_based :决定脚本的运行时间,即使 file 已被完全读写或写完,也要执行完runtime 规定的时间。它是通过循环执行相同的负载来实现的。例如:time_based
结果分析:
#io:总的输入输出量 bw:带宽 KB/s iops:每秒钟的IO数 runt:总运行时间
#slat:submission latency提交延迟。io提交到内核需要的时间
#clat:completion latency完成延迟。io提交到内核后一直到io完成的间隔时间,不包括slat
# clat percentiles:描述IO整体延迟latency distribution,为不同百分比IO的clat。
可以根据这些百分比数来绘制图形,从整体上分析IO系统的IO延时。这是非常有用的一个用来描述IO系统延时情况的指标
#lat (msec):延迟(毫秒) msec: 毫秒 usec: 微秒
# IO depths:这个iodepth设置是用来控制在任意给定时刻,有多少个IO被提交给OS。这个参数完全是应用端来设置
submit:表明fio一次提交多少个IO
complete:一次完成多少个IO
例子:
结果:
mytes: (g=0): rw=read, bs=16K-16K/16K-16K
通过这个任务,了解fio的具体使用,各个参数的具体含义,并且了解U盘的随机和顺序读写。
笔记:
首先安装fio工具:
$ wget http://brick.kernel.dk/snaps/fio-2.0.7.tar.gz
$ tar -zxvf fio-2.0.7.tar.gz
$ cd fio-2.0.7
$ make
$ make install
命令参数:
#filename:目标盘符/测试设备:filename=/dev/sdb4(可用lsblk命令查询usb对应dev下的节点)
#direct: 测试过程绕过机器自带的buffer,使测试结果更真实。
#I/O type:rw=Read(顺序读)/write(顺序写)/randread(随机读)/randwrite(随机写)/randrw(随机写和读)
#Block Size:单次IO的块文件大小,bs=4k,4k是主流,8k是Mysql和Oracle,16K是MysqlInnodb
#I/O size:总共要读写的数据大小,size=10G
#Num threads:创建多少进程/线程来并发执行,numjobs=64
#Runtime:测试运行时间,runtime=10,单位为s
#group_reporting:关于显示结果的,汇总每个进程的信息。
#ioengine:io引擎,处理io的方式,包括sync,pync,vsync,libaio 等,目前使用最广泛的是 libaio。
具体区别见http://www.cnblogs.com/cloudphoenix/p/6542909.html
#iodepth:测试的队列深度,队列深度表示控制器可同时发送给被测设备的指令数目。默认为1。
#Num files: 表示负载将分发到几个文件中。例如:nrfiles=8
#数据填充方式: 当进行数据写入时,可选择写入数据的形式。此选项可选三种模式,分别为重复填充(填全0)、伪随机填充(填伪随机数)、随机填充(先生成随机数,再填充)。
#percentage_random:随机和顺序比率;例如:percentage_random=80,80%的随机
# time_based :决定脚本的运行时间,即使 file 已被完全读写或写完,也要执行完runtime 规定的时间。它是通过循环执行相同的负载来实现的。例如:time_based
结果分析:
#io:总的输入输出量 bw:带宽 KB/s iops:每秒钟的IO数 runt:总运行时间
#slat:submission latency提交延迟。io提交到内核需要的时间
#clat:completion latency完成延迟。io提交到内核后一直到io完成的间隔时间,不包括slat
# clat percentiles:描述IO整体延迟latency distribution,为不同百分比IO的clat。
可以根据这些百分比数来绘制图形,从整体上分析IO系统的IO延时。这是非常有用的一个用来描述IO系统延时情况的指标
#lat (msec):延迟(毫秒) msec: 毫秒 usec: 微秒
# IO depths:这个iodepth设置是用来控制在任意给定时刻,有多少个IO被提交给OS。这个参数完全是应用端来设置
submit:表明fio一次提交多少个IO
complete:一次完成多少个IO
例子:
1、顺序读
$ sudo fio -filename=/dev/sdb4 -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=100 -group_reporting -name=mytes结果:
mytes: (g=0): rw=read, bs=16K-16K/16K-16K