0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SSD性能测试应该使用什么工具啊?SSD性能测试第一神器FIO

SSDFans 来源:未知 作者:易水寒 2018-07-07 10:29 次阅读

SSD性能测试第一神器——FIO

对于SSD性能测试来说,最好的工具莫过于FIO了。

FIO作者Jens大神

图中这个可爱的小伙子名字叫Jens Axboe,他是丹麦哥本哈根大学计算机系没毕业的学生,他还有一个有名的同乡叫Linus,没想到老乡后来也成了他的领导。Jens今年(2017年)40岁,16岁开始就接触Linux,后来也成了Linux开发者,现在是Linux Kernel大拿了,负责块设备层的维护。这个块设备层就是跟我们SSD关系最紧密的层级,联系了上层文件系统和下层设备驱动程序。他开发了不少有用的程序,比如Linux IO Scheduler里面的Deadline, CFQ Scheduler,还有著名的王牌测试工具FIO。Jens曾经在Fusion-IO、Oracle等公司工作,现在在Facebook,阿呆听说在硅谷Facebook给码农的薪水是最高的。

FIO是Jens开发的一个开源测试工具,功能非常强大,本文就只介绍其中一些基本功能。

线程,队列深度,Offset,同步异步,DirectIO,BIO

使用FIO之前,首先要有一些SSD性能测试的基础知识。

线程指的是同时有多少个读或写任务在并行执行,一般来说,CPU里面的一个核心同一时间只能运行一个线程。如果只有一个核心,要想运行多线程,只能使用时间切片,每个线程跑一段时间片,所有线程轮流使用这个核心。Linux使用Jiffies来代表一秒钟被划分成了多少个时间片,一般来说Jiffies是1000或100,所以时间片就是1毫秒或10毫秒。

一般电脑发送一个读写命令到SSD只需要几微秒,但是SSD要花几百微秒甚至几毫秒才能执行完这个命令。如果发一个读写命令,然后线程一直休眠,等待结果回来才唤醒处理结果,这种叫做同步模式。可以想象,同步模式是很浪费SSD性能的,因为SSD里面有很多并行单元,比如一般企业级SSD内部有8-16个数据通道,每个通道内部有4-16个并行逻辑单元(LUN,Plane),所以同一时间可以执行32-256个读写命令。同步模式就意味着,只有其中一个并行单元在工作,暴殄天物。

为了提高并行性,大部分情况下SSD读写采用的是异步模式。就是用几微秒发送命令,发完线程不会傻傻的在那里等,而是继续发后面的命令。如果前面的命令执行完了,SSD通知会通过中断或者轮询等方式告诉CPU,CPU来调用该命令的回调函数来处理结果。这样的好处是,SSD里面几十上百个并行单元大家都能分到活干,效率暴增。

不过,在异步模式下,CPU不能一直无限的发命令到SSD。比如SSD执行读写如果发生了卡顿,那有可能系统会一直不停的发命令,几千个,甚至几万个,这样一方面SSD扛不住,另一方面这么多命令会很占内存,系统也要挂掉了。这样,就带来一个参数叫做队列深度。举个例子,队列深度64就是说,系统发的命令都发到一个大小为64的队列,如果填满了就不能再发。等前面的读写命令执行完了,队列里面空出位置来,才能继续填命令。

一个SSD或者文件有大小,测试读写的时候设置Offset就可以从某个偏移地址开始测试。比如从offset=4G的偏移地址开始。

Linux读写的时候,内核维护了缓存,数据先写到缓存,后面再后台写到SSD。读的时候也优先读缓存里的数据。这样速度可以加快,但是一旦掉电缓存里的数据就没了。所以有一种模式叫做DirectIO,跳过缓存,直接读写SSD。

Linux读写SSD等块设备使用的是BIO,Block-IO,这是个数据结构,包含了数据块的逻辑地址LBA,数据大小和内存地址等。

FIO初体验

一般Linux系统是自带FIO的,如果没有或者版本太老,要自己从https://github.com/axboe/fio下载最新版本源代码编译安装。进入代码主目录,输入下列命令就编译安装好了。

./configure;make && make install

帮助文档用下面命令查看:

man fio

先来看一个简单的例子:

fio -rw=randwrite -ioengine=libaio -direct=1 –thread –numjobs=1 -iodepth=64 -filename=/dev/sdb4 -size=10G -name=job1 -offset=0MB -bs=4k -name=job2 -offset=10G -bs=512 –output TestResult.log

每一项的意思都可以从fio帮助文档查到,这里的参数解释如下:

fio:软件名称。

-rw=randwrite:读写模式,randwrite是随机写测试,还有顺序读read,顺序写write,随机读randread,混合读写等。

-ioengine=libaio:libaio指的是异步模式,如果是同步就要用sync。

-direct=1:是否使用directIO。

-thread:使用pthread_create创建线程,另一种是fork创建进程。进程的开销比线程要大,一般都采用thread测试。

–numjobs=1:每个job是1个线程,这里用了几,后面每个用-name指定的任务就开几个线程测试。所以最终线程数=任务数* numjobs。

-iodepth=64:队列深度64.

-filename=/dev/sdb4:数据写到/dev/sdb4这个盘(块设备)。这里可以是一个文件名,也可以是分区或者SSD。

-size=10G:每个线程写入数据量是10GB。

-name=job1:一个任务的名字,名字随便起,重复了也没关系。这个例子指定了job1和job2,建立了两个任务,共享-name=job1之前的参数。-name之后的就是这个任务独有的参数。

-offset=0MB:从偏移地址0MB开始写。

-bs=4k:每一个BIO命令包含的数据大小是4KB。一般4KB IOPS测试,就是在这里设置。

–output TestResult.log:日志输出到TestResult.log。

FIO结果解析

我们来看一个FIO测试随机读的结果。命令如下,2个任务并行测试,队列深度64,异步模式,每个任务测试数据1GB,每个数据块4KB。所以,这个命令是在测试两个线程、队列深度64下的4KB随机读IOPS。

# fio -rw=randread -ioengine=libaio -direct=1 -iodepth=64 -filename=/dev/sdc -size=1G -bs=4k -name=job1 -offset=0G -name=job2 -offset=10G

job1: (g=0): rw=randread, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=64

job2: (g=0): rw=randread, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=64

fio-2.13

Starting 2 processes

Jobs: 2 (f=2)

job1: (groupid=0, jobs=1): err= 0: pid=27752: Fri Jul 28 14:16:50 2017

read : io=1024.0MB, bw=392284KB/s, iops=98071, runt= 2673msec

slat (usec): min=6, max=79, avg= 9.05, stdev= 2.04

clat (usec): min=148, max=1371, avg=642.89, stdev=95.08

lat (usec): min=157, max=1380, avg=651.94, stdev=95.16

clat percentiles (usec):

| 1.00th=[ 438], 5.00th=[ 486], 10.00th=[ 516], 20.00th=[ 564],

| 30.00th=[ 596], 40.00th=[ 620], 50.00th=[ 644], 60.00th=[ 668],

| 70.00th=[ 692], 80.00th=[ 724], 90.00th=[ 756], 95.00th=[ 796],

| 99.00th=[ 884], 99.50th=[ 924], 99.90th=[ 1004], 99.95th=[ 1048],

| 99.99th=[ 1144]

lat (usec) : 250=0.01%, 500=6.82%, 750=81.14%, 1000=11.93%

lat (msec) : 2=0.11%

cpu : usr=9.09%, sys=90.08%, ctx=304, majf=0, minf=98

IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%

submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%

complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%

issued : total=r=262144/w=0/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0

latency : target=0, window=0, percentile=100.00%, depth=64

job2: (groupid=0, jobs=1): err= 0: pid=27753: Fri Jul 28 14:16:50 2017

read : io=1024.0MB, bw=447918KB/s, iops=111979, runt= 2341msec

slat (usec): min=5, max=41, avg= 6.30, stdev= 0.79

clat (usec): min=153, max=1324, avg=564.61, stdev=100.40

lat (usec): min=159, max=1331, avg=570.90, stdev=100.41

clat percentiles (usec):

| 1.00th=[ 354], 5.00th=[ 398], 10.00th=[ 430], 20.00th=[ 474],

| 30.00th=[ 510], 40.00th=[ 540], 50.00th=[ 572], 60.00th=[ 596],

| 70.00th=[ 620], 80.00th=[ 644], 90.00th=[ 684], 95.00th=[ 724],

| 99.00th=[ 804], 99.50th=[ 844], 99.90th=[ 932], 99.95th=[ 972],

| 99.99th=[ 1096]

lat (usec) : 250=0.03%, 500=27.57%, 750=69.57%, 1000=2.79%

lat (msec) : 2=0.04%

cpu : usr=11.62%, sys=75.60%, ctx=35363, majf=0, minf=99

IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%

submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%

complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%

issued : total=r=262144/w=0/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0

latency : target=0, window=0, percentile=100.00%, depth=64

Run status group 0 (all jobs):

READ: io=2048.0MB,aggrb=784568KB/s, minb=392284KB/s, maxb=447917KB/s, mint=2341msec, maxt=2673msec

Disk stats (read/write):

sdc: ios=521225/0, merge=0/0, ticks=277357/0, in_queue=18446744073705613924, util=100.00%

FIO会为每个Job打印统计信息。最后面是合计的数值。我们一般看重的总的性能和延迟。

首先看的是最后总的带宽,aggrb=784568KB/s,算成4KB就是196KIOPS。

再来看看延迟Latency。Slat是发命令时间,slat (usec): min=6, max=79, avg= 9.05, stdev= 2.04说明最短时间6微秒,最长79微秒,平均9微秒,标准差2.04。clat是命令执行时间,lat就是总的延迟。看得出来,读的平均延迟在571微秒左右。

clat percentiles (usec)给出了延迟的统计分布。比如90.00th=[684]说明90%的读命令延迟都在684微秒以内。

用FIO做数据校验

用FIO可以检验写入数据是否出错。用-verify=str来选择校验算法,有md5 crc16 crc32 crc32c crc32c-intel crc64 crc7 sha256 sha512 sha1等。为了校验,需要用do_verify参数。如果是写,那么do_verify=1就意味着写完再读校验,这种会很占内存,因为FIO会把每个数据块的校验数据保存在内存里。do_verify=0时只写校验数据,不做读校验。

读的时候do_verify=1,那么读出来的数据都会做校验值检查,do_verify=0的话,只读数据,不做检查。

另外,verify=meta时,fio会在数据块内写入时间戳、逻辑地址等,此时还能verify_pattern指定写入数据pattern。

FIO其他功能

FIO功能非常强大,可以通过man来查看每一个功能,也有网页版帮助文档https://linux.die.net/man/1/fio。

FIO配置文件

前面的例子都是用命令行来测试,其实也可以用配置文件把这些参数写进去。比如新建FIO配置文件test.log内容如下:

[global]

filename=/dev/sdc

direct=1

iodepth=64

thread

rw=randread

ioengine=libaio

bs=4k

numjobs=1

size=10G

[job1]

name=job1

offset=0

[job2]

name=job2

offset=10G

;–end job file

保存后,只需要fio test.log就能执行测试任务了。是不是很方便?

AS SSD Benchmark

AS SSD Benchmark测试指标

AS SSD Benchmark是一款来自德国的SSD专用测试软件,可以测试连续读写、4K对齐、4KB随机读写和响应时间的表现,并给出一个综合评分。另外有两种模式可选,即MB/s与IOPS!

AS SSD Benchmark在测试时一共会生成和写入5GB的测试数据文件,所有3个测试传输率项目都是去读写这些数据文件来换算速度的。其4KB QD64主要是用来测NCQ(NativeCommand Queuing,原生命令队列)差距的。IDE模式下就和普通4KB随机没有任何区别。由于每个测试都需要进行一定大小的数据读写,硬盘性能越低,测试需要花费的时间就越久,拿机械硬盘来跑这个测试并不适宜,跑完全程大约需要1个小时左右。寻址时间测试,读取是测试寻址随机的4KB文件(全盘LBA区域),写入是测试寻址随机的512B文件(指定的1GB地址范围)。注意,运行AS SSD基准测试至少需要2GB的空闲空间。

AS SSD Benchmark除了可以测试SSD的性能外,还可以检测出SSD的固件算法,是否打开AHCI模式,是否进行4K对齐等(如图7-3所示),是目前应用十分广泛的SSD测试软件。

AS SSD Benchmark使用的测试数据是随机的。

ATTO Disk Benchmark

ATTO Disk Benchmark是一款简单易用的磁盘传输速率检测软件,可以用来检测硬盘、U盘、存储卡及其它可移动磁盘的读取及写入速率。该软件使用了不同大小的数据测试包,数据包按512B、1K、 2K直到到8K进行读写测试,测试完成后数据用柱状图的形式表达出来,体现文件大小比例不同对磁盘速度的影响。

ATTO测试是极限情况下的磁盘持续读写性能,采用的测试模型具有很高的可压缩性,ATTO默认测试全0数据。

CrystalDiskMark

CrystalDiskMark测试指标

CrystalDiskMark软件是一个测试硬盘或者存储设备的小巧工具,测试存储设备大小和测试次数都可以选择。测试项目里分为,持续传输率测试(块单位1024KB),随机512KB传输率测试,随机4KB测试,随机4KB QD32(队列深度32)测试。CrystalDiskMark默认运行5次,每次1000MB的数据量,取最好成绩。CrystalDiskMark软件测试前,同样会生成一个测试文件(大小取决于用户设置)。一般来说,设置得越大,数据缓存起到的干扰越少,成绩就更能反映SSD的真实性能,不过缺点是会严重影响SSD的耐久度(写入太多数据影响P/E)。所以一般测试时都采纳软件默认值。

CrystalDiskMark设置不同填充Pattern

软件默认测试数据为不可压缩数据。如果设置选项中选择了,测试成绩大不一样。其实就是把数据模型改为全部是可压缩连续数据,这跟ATTO测试原理一样,测试出来成绩相当不错,但实际参考意义并不大。修改数据模型后有一个明显的特征,CDM的标题栏上会直接标注出来(如图所示)。

PCMark Vantage

PCMark Vantage可以衡量各种类型PC的综合性能。从多媒体家庭娱乐系统到笔记本,从专业工作站到高端游戏平台,无论是在专业人士手中,还是属于普通用户,都能在PCMark Vantage里了解透彻,从而发挥最大性能。测试内容可以分为以下三个部分:

1、处理器测试:基于数据加密、解密、压缩、解压缩、图形处理、音频视频转码、文本编辑、网页渲染、邮件功能、处理器人工智能游戏测试、联系人创建与搜索。

2、图形测试:基于高清视频播放、显卡图形处理、游戏测试。

3、硬盘测试:使用Windows Defender、《Alan Wake》游戏、图像导入、Windows Vista启动、视频编辑、媒体中心使用、Windows Media Player搜索和归类,以及以下程序的启动:Office Word 2007、Adobe Photoshop CS2、Internet Explorer、Outlook 2007。

IOMeter

IOMeter应用截图

IOMeter是一个单机或者集群的I/O子系统测量和描述工具。与前面介绍的测试软件相比较,IOMeter在测试软件中是属于比较自由的,用户可以按照测试需求去配置测试磁盘数据范围,队列深度,数据模式(可压缩或者不可压缩,有些版本支持,有些老版本不支持),测试模式(随机或者顺序访问),读写测试比例,随机和顺序访问比例,以及测试时间等等。

本地IO性能测试

启动程序,在windows上单击IOMeter图标;

在“Disk Targets”页中选择一个驱动器

在“AccessSpecifications”页中选择一个需要的测试项目;

在“ResultsDisplay”页中设置“Update Frequency (Seconds)”设置多长时间统计一次测试结果,如果不设置不但在测试期间不显示测试结果而且在测试结束后在测试结果文件中也没有数据;

·Total I/Os per Second:数据存取速度,该值越大越好。

·Total MBs per Second:数据传输速度,该值越大越好。

·Average I/O Response Time:平均响应时间,该值越小越好。

·CPU Utilization:CPU占用率,越低越好。

单击工具栏中的“StartTests”按钮,选择一个测试结果输出文件后开始一个测试(一般一次测试运行10分钟即可);

测试完成后单击按钮停止所有测试。

查看测试结果,由于IOMeter没有提供一个GUI的查看测试报告的工具。可以使用Excel打开测试结果文件“csv”,然后利用Excel的图标工具整理测试结果。或者使用IOMeter提供的“Import Wizard for MS Access”将测试结果导入一个Access文件。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10338

    浏览量

    206235
  • SSD
    SSD
    +关注

    关注

    20

    文章

    2658

    浏览量

    115295
  • 性能测试
    +关注

    关注

    0

    文章

    187

    浏览量

    21206

原文标题:招标和选购固态硬盘主流测试软件详解

文章出处:【微信号:SSDFans,微信公众号:SSDFans】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    企业级与消费级SSD的区别

    此前我们测试过各种消费级SSD,而测试企业级SSD还是第一次,也让我们对SSD有了更多的认知。
    发表于 07-25 11:12 6689次阅读

    致态Ti600 QLC SSD性能测试

    近日长江存储旗下的致态家族再添新成员Ti600.Ti600是致态推出的首款QLC SSD。SSDFans第一时间体验这款产品性能,并对Ti600(2T)做了相关测试
    发表于 09-28 09:50 926次阅读
    致态Ti600 QLC <b class='flag-5'>SSD</b><b class='flag-5'>性能</b><b class='flag-5'>测试</b>

    NVMe SSD性能影响因素分析

    NVMe SSD 厂商Spec给出的性能非常完美,前面也给出了NVMe SSD和磁盘之间的性能对比,NVMe SSD
    的头像 发表于 11-13 11:39 559次阅读
    NVMe <b class='flag-5'>SSD</b><b class='flag-5'>性能</b>影响因素分析

    Xilinx FPGA高性能NVMe SSD主机控制器,NVMe Host Controller IP

    SSDØ易于集成的同步、可综合Verilog设计Ø通过完全验证的NVMe Host Controller IP2概述NVMe Host Controller IP作为个对PCIe SSD的高
    发表于 03-27 17:23

    SSD是什么意思,什么是SSD

    、SONY等大批国外实力厂家的不断开发研究,SSD市场已经全面开花了。不过不要担心,中国第一SSD已经由深圳亿正存储科技公司于2007年1月1日宣布研发完成,并可以大批量进行生产,
    发表于 03-25 16:20

    再入SSD,480G做仓库盘真爽快

    游戏盘来说,使用这款大容量SSD个不错的选择,毕竟不需要大量的擦写,所以并不用担心寿命问题和我之前入手的SP920合照张下面就是我新入手的SP550的测试因为是TLC+480G这
    发表于 08-08 14:38

    关于AS SSD Benchmark软件和4K读写性能浅析

    我们在测试SSD时经常用到AS SSD Benchmark这个软件。通过这个软件大致了解到一些SSD的读写情况。但是一些高逼格的朋友,竟然可以通过这个软件
    发表于 07-25 17:20 3w次阅读
    关于AS <b class='flag-5'>SSD</b> Benchmark软件和4K读写<b class='flag-5'>性能</b>浅析

    NVMe SSD与SATA SSD性能对比

    老说NVMe SSD性能是SATA SSD的四倍,那到底实际体验是怎样的呢?
    的头像 发表于 07-27 09:43 3.5w次阅读

    8款使用不同性能SSD固态硬盘性能测试大揭秘

    虽然各存储厂商对SSD的读写参数都有说明,但通常是不太准确的。唯一值得相信的就是自己测试,用自己的真实环境得到真正的数据。
    发表于 08-20 17:30 1w次阅读

    影响SSD性能的因素有哪些 NVMe SSD性能解析

    NVMe SSD性能时常捉摸不定,为此我们需要打开SSD的神秘盒子,从各个视角分析SSD性能影响因素,并思考从存储软件的角度如何最优化使用
    的头像 发表于 11-05 09:47 8574次阅读

    AS SSD Benchmark固态硬盘性能测试工具应用程序免费下载

    本文档的主要内容详细介绍的是AS SSD Benchmark固态硬盘性能测试工具应用程序免费下载。
    发表于 03-06 08:00 4次下载

    浪潮NVMe SSD性能

    本次测试采用浪潮服务器 SA5112M6,磁盘采用三个节点每个节点八块浪潮 INSPUR-NS8610G1U320 NVMe进行测试,此次采用的NVMe SSD具有极高的性能,产品4K
    发表于 08-03 10:25 1594次阅读

    凯智通SSD固态硬盘测试解决方案

    关于SSD固态硬盘测试座,顾名思义SSD固态硬盘测试座是用于测试固态硬盘。 那么测试座的主要功能
    的头像 发表于 05-22 17:19 466次阅读

    WD Blue SN580 PCIe 4.0 SSD测试解析

    等基准软件测试WD Blue SN580 1TB在这些软件默认设置下的性能,同时我们还会使用软件所能设置的最大测试容量,以测试SSD在大容量
    发表于 08-31 10:05 436次阅读
    WD Blue SN580 PCIe 4.0 <b class='flag-5'>SSD</b><b class='flag-5'>测试</b>解析

    如何才能同时测试更多SSD硬盘?

    我国企业级SSD市场规模持续扩大,对于SSD生产企业来说是机遇,也是挑战,传统的SSD生产厂家在做出厂测试时,通常仅能测试4个盘
    的头像 发表于 03-15 17:39 139次阅读