服务器选型 ?
该如何选 ?
担心硬件无法匹配业务需求 ?
接上个专题,本文给大家介绍如何使用Fio进行磁盘性能测试,Fio是linux平台下常用的测试工具,工具作者是Jens Axboe,功能强大;
开发者wiki简介
硬盘读写基础知识
到目前为止,计算机基本都是采用冯•诺依曼体系结构所设计的,参考如下图:
具体工作原理:CPU负责指令发送,内存缓存动态数据,硬盘为数据存储;
运行速度:CPU>内存>硬盘,一般情况下CPU计算能力会过剩,内存用以缓存,硬盘做数据存储,SSD的出现,逐步降低了硬盘对整体速度的拖累。
下面用一张形象图,帮助理解(图片来源于网络):
综上:我们要测试磁盘的性能,必须要大概了解计算机的工作原理;
目前为止,CPU的计算能力越来越快,时钟频率睿频后能达到4.5GHz甚至更高,发送指令为几微秒,但硬盘的处理速度几百微秒甚至是几毫秒,CPU的工作模式,当一个指令未完成,该线程会一直等待,直到处理完成;
当我们的硬盘为普通HDD时,处理能力有限,同步模式测试可能就能达到该磁盘的性能极限,但若我们使用SSD硬盘,其并行处理能力远超HDD,同一时间可以执行32-256个读写命令,在这种情况下,我们建议使用异步模式进行测试,但我们也不能无限制的增加硬盘的负载,所以在fio测试命令中有一个参数:队列深度,用以控制CPU指令队列的数量,防止CPU指令无限发送,等待时间过长,导致无法测试出硬盘的最大性能;
Iodepth介绍:
上图来源于维基百科
AHCI与NVMe两种接口之间的对比表明:
AHCI接口只拥有一个队列,每个队列深度最大为32;
NVMe接口最高拥有64K个队列,每个队列深度最大为64K;
所以使用SATA接口的硬盘,测试硬盘性能时,队列深度建议最大设为32,再高,只会降低测试的性能值;
若使用NVMe硬盘,深度可以适当的增加,这取决于硬盘本身的性能;
安装Fio(Centos7.4)
Fio下载地址:
http://freshmeat.sourceforge.net/projects/fio/
下载好后,直接解压后编译安装:
若机器已经联网,也可通过yum的方式进行安装:
yum install -y fio libaio-devel#安装fio及libaio引擎;
Fio测试示例
我们现在通过一个简单的例子来对FIO做个初步了解:
-rw=randread:读写模式,randread是随机读测试,read/write/randread/randrw分别为顺序读/顺序写/随机读/随机读写;
-ioengine=libaio:libaio指的是异步模式,同步为sync;
-direct=1:是否使用directIO,使用异步模式时需设置该选项为1;
-thread:使用pthread_create的方式创建任务,默认是使用fork的方式创建;
-numjobs=1:每个job是一个线程;
-iodepth=64:队列深度64;
-filename=/dev/sdb:数据写入到/dev/sdb这个磁盘;
-size=10G:每线程写入数据量为10GB;
-name=mytest:任务名称;
-offset=0MB:从偏移量地址0MB开始写入;
-bs=4k:每个BIO命令包含的数据大小为4KB,一般来说,bs=4KB,会用来测试IOPS Performance;
-output TestResult.log:日志输出到TestResult.log;
-runtime=300:测试时间为300s;
-group_reporting:测试结果显示模式,该值表示汇总每个进程的统计信息;
命令解析,我们使用异步测试的时候,建议打开 -direct=1,因我们此次测试的硬盘为SSD硬盘,所以我们iodepth设置为32,建议就是根据您的机器,调整这些参数,可以测试出最优值;
测试结果解析
图中结果可以看到关键参数:
Run status group 0 (all jobs):
bw=aggrb=236864KB/s;
read iops=aggrb/4=59216(换算成4KB);
io=10240MB为总共10GB的IO数据;
Latency:
Slat(usec)发命令时间:min=3 max=642 avg=13.51 stdev(标准差)=9.59
Clat(usec)执行命令时间,lat(usec)总延时时间,一般情况下我们参考lat就OK;
clat percentiles (usec):延时的统计分布,比如99.00th=[ 1656],表示99%的读命令延时都在1656usec以内;
若您对IOPS的值比较在意,那就建议bs=4k进行测试,业内测均以4k为测试基准判定IOPS性能;
若您对带宽要求比较高,建议bs=1M甚至更高,以达到带宽更优化;
对于IO性能测试,小编建议您通过调整不同的参数,测试一个最合适您应用场景的值,并不用一味的追求高IO,不同的业务场景IO需求不一样;
参考测试命令(根据实际场景进行调整):
4K异步随机写:
4K异步顺序读:
常用调整参数为:iodepth,numjobs,bs,rw,ioengine,size等,详细信息可参考fio官网给出的说明;
使用方法介绍到此,若大家有疑问可以在公众号里留言,我们可以一起探讨;
参考资料:
百度百科,维基百科,Fio官网
链接:
https://fio.readthedocs.io/en/latest/fio_doc.html#i-o-depth
https://en.wikipedia.org/wiki/NVM_Express
若有疑问可直接在公众号中留言,我们接到反馈,会及时回复,感谢您的阅读,如果您喜欢我们的文章,还请关注并帮忙宣传;
领取专属 10元无门槛券
私享最新 技术干货