硬盘性能基准测试与测试陷阱

在测试存储系统性能的时候,主要关注两个指标:IOPS和持续数据传输率。IOPS (Input/Output Per Second)指每秒处理的I/O请求数量,I...


在测试存储系统性能的时候,主要关注两个指标:IOPS和持续数据传输率。IOPS (Input/Output Per Second)指每秒处理的I/O请求数量,I/O请求通常为读或写数据操作请求。随机读写频繁的应用,如小文件存储(图片)、OLTP数据库、邮件服务器,关注随机读写性能,IOPS是短板,是关键衡量指标。持续数据传输率(Sustained Transfer Rate)指单位时间内可以成功传输的数据数量。顺序读写频繁的应用,传输大量连续数据,如电视台的视频编辑,视频点播VOD,关注连续读写性能,持续数据传输率是关键衡量指标。

IOPS和持续数据传输率适用于不同的场合:读取10000个1KB文件,用时10秒 持续数据传输率=1MB/s,IOPS=1000 追求IOPS读取1个10MB文件,用时0.2秒 持续数据传输率=50MB/s,IOPS=5 追求吞吐量

IOPS与持续数据传输率的关系:持续数据传输率 = IOPS * 平均I/O数据块SIZE从公式可以看出:I/O数据块SIZE越大,IOPS越高,那么每秒I/O的持续数据传输率就越高。事实上,这两个值均有其最大限制,从实际测试结果看,无论HDD还是SSD,随着SIZE增大,顺序读写时持续数据传输率的值会先达到最大值,之后SIZE继续增大,受到最大持续数据传输率限制,IOPS会减小。

所谓硬盘性能的基准测试,即是将这两个值作为应变量(测试结果),设计各种自变量(测试条件),选择合适的测试工具,进行科学的、可定量的和可对比的测试。

HDD其本质是一种机械装置,影响磁盘性能的关键因素是磁盘服务。磁盘完成一个I/O请求所花费的时间,它由寻道时间、旋转延迟和数据传输时间这三部分构成。

寻道时间(Tseek)是指将读写磁头移动至正确的磁道上所需要的时间。寻道时间越短,I/O操作越快,磁盘的平均寻道时间(Average Seek Time)一般在3-15ms。常见磁盘平均物理寻道时间为(下面数据仅供参考,实际以厂商标注的实际数据为准):7200转/分的STAT硬盘平均物理寻道时间是9ms;10000转/分的STAT硬盘平均物理寻道时间是6ms;15000转/分的SAS硬盘平均物理寻道时间是4ms

旋转延迟(Trotation)是指盘片旋转将请求数据所在扇区移至读写磁头下方所需要的时间。平均旋转延迟(Average Latency)取决于磁盘转速,通常使用磁盘旋转一周所需时间的1/2表示。常见硬盘的旋转延迟时间(下面数据仅供参考,实际以厂商标注的实际数据为准):7200 rpm的磁盘平均旋转延迟大约为60*1000/7200/2 = 4.17ms;10000 rpm的磁盘平均旋转延迟大约为60*1000/10000/2 = 3ms;15000 rpm的磁盘其平均旋转延迟约为60*1000/15000/2 = 2ms;

数据传输时间(Ttransfer)是指完成传输所请求的数据所需要的时间,它取决于数据传输率,其值等于数据大小除以数据传输率。SATA II已经达到300MB/s的接口数据传输率,SATA III可达到600MB/S(SATA III最大标称是6Gb/s,最新的SAS最大标称已经有12Gb/s),然而机械硬盘的瓶颈在于硬盘内部而不在于接口,数据传输时间通常远小于前两部分消耗时间。简单计算时这部分可忽略。

理论上平均Ttransfer和Trotation下IOPS的公式零字节文件传输下的IOPS = 1000ms / (磁盘旋转延迟时间(ms) + 磁头寻道时间(ms))下表是SATA和SAS接口类型的磁盘IOPS参数对比:

显而易见,对于HDD自身而言,转速对于性能有决定性的影响。不同转速的HDD,不应当作为同一层次的产品简单的通过性能结果来评价和比较。

陷阱一:所有HDD在不区分转速的前提下统一比较。

目前(2018)市面上服务器常用的机械硬盘,已经以7200转~15000转SATA 6 Gb/s与SAS 12Gb/s等配置为主流。我们以西数、希捷和日立三家为代表,具体硬盘参数指标链接如下:

希捷 15000RPM SAS 12Gb/s

(https://www.seagate.com/www-content/datasheets/pdfs/enterprise-performance-15k-hddDS1897-1-1608CN--zh_CN.pdf)

西数 7200RPM SATA 6 Gb/s

(http://products.wdc.com/library/SpecSheet/ENG/2879-800074.pdf)

日立 10,520RPM SAS 12Gb/s

(https://www.hgst.com/products/hard-drives/ultrastar-c10k1800)

可以看见几个特点:

性能参数中,没有一家厂家标注了IOPS的情况。原因不明,个人猜测有两点原因,其一是受转速影响大,通过2.1中提到的公式即可计算出随机读写下最大IOPS的理论值;其二,相对于SDD数万的IOPS而言,HDD的IOPS数值仍保持在百这个数量级上,性能相差过大,为了不暴露弱点而不对外标注。

数据传输率分为两种,一种是最大瞬间数据传输率(Interface Transfer Rate),这个与接口有关;一种是持续数据传输率(Sustained Transfer Rate),这个才是测试关注的参考值。

平均旋转延时与平均寻道时间的标注情况,不同厂商之间有所不同——日立全部标注,西数均不标注,希捷只标注了延时。

除此之外所有厂家均标注了多段缓存的大小,目前大部分是256MB,对于缓存对HDD的性能影响究竟几何,手头没有很好的参考资料和实验数据,不妄加评论。根据知乎里面相关问题的解答,缓存仅仅是对少量数据频繁访问的性能有所提高,且受缓存命中率影响。

结合章节2.1和2.2,在基准测试报告的对象栏目中,除了品牌型号外,转速是务必要标注的内容,除此之外,建议标注接口类型和速率,以及缓存大小。在有所区分的前提下,进行测试与评价。

而对于同一块硬盘或者自身条件相类的硬盘而言,影响性能指标的测试条件是I/O负载(读写比例、顺序还是随机、队列深度、寻址空间、I/O数据块大小)与客观环境(系统配置、操作系统、磁盘驱动)。基准测试的过程,在于保持客观环境的前提下,设计几组典型I/O负载来进行测试。

首先看IOPS,只考虑读写与顺序随机比例,IOPS可以有如下几个指标:

需要注意的是,在章节2.1中关于HDD相关IOPS与自身转速相关的理论均是基于一个前提,即“实际使用中存在大量的随机读写导致不断地需要进行旋转与寻道”,如果是单纯顺序读写小数据块,HDD的IOPS一样可以高得惊人。此外,零字节文件传输下的IOPS也是平均条件下理论值,现实测试4K随机读写下的值可能是理论值的两倍。以日立硬盘HGST HUC101812CSS200为例,官方标注Latency Average为2.85ms,Seek Time最小值为3.3,计算出来的IOPS的理论值只有162而已,而实际拿iometer测试数据如下:

这些数据是否真的测试记录和参照的价值?从可对比性考虑,前面提到了,因为厂商均未给出标注值,无法比较不同环境相同条件下与厂商基准的差距,只能在自己测试结果之间横向比较。再从实际意义考虑,顺序读写与大size条件下的IOPS数据其实不具备什么价值。

陷阱二:为IOPS设置了过多的测试条件,失去了参照意义,而没有考虑实际情况与大众评价标准。

所以,关于HDD的IOPS性能测试,分成三种不同情况考虑:

收集数据做分析与理论验证的情况下,可以考虑如上表一样设置多样化条件下采集IOPS数值。

如果是一般的性能基准测试,只用考虑4K随机下的IOPS,读写比例对HDD的性能影响较小,建议取上表中四组值即可。

如果是与厂商的性能基准比较,或者单纯HDD之间性能比较,也可以不考虑IOPS而只比对持续数据传输率。

这里为什么随机性能的数据块最小以4K标准?(以下是个人见解)一方面,SSD最小单元page是4K,HDD的最小的管理存储单元蔟的大小也是4K;另一方面,通过硬盘基准测试工具PCMark 8模拟现实使用环境的数据,影响性能最大的依次是随机64K读取、随机4K读取、持续128K写入这三个方面的性能,4K下的随机性能比较符合实际使用。

和IOPS一样,持续数据传输率的基准测试也是考虑获取特定条件下的瓶颈值,不过与IOPS不同,持续数据传输率的瓶颈值是最佳条件下产生的,意味着这个值也是硬盘吞吐量性能能够达到的最大值。同样拿日立硬盘HGST HUC101812CSS200在iomter下测试结果如下:

根据多组不同品牌型号HDD的测试数据分析,HDD的持续数据传输率在64K~1024K顺序读写的条件下,非常的稳定。所以大众比较简化的测试条件是只测试一组128K下的顺序读写结果,这是可以接受的。而像上表一样多取几组不同size的数据,计算最大值或者平均值自然也没问题。

上面的测试条件已经考虑了读写比例(对HDD影响不大)、随机顺序、数据块大小,还剩的条件是队列深度与寻址空间。

寻址空间比较简单,一般默认为全盘,在测试工具中选择整盘进行测试即可,如果是fio工具测试,命令中size参数设置为硬盘的大小。当寻址空间设置较小时,IOPS性能会有所提高,可以理解为磁头需要移动的距离变小了,每次IO请求的服务时间就降低了,这就是空间局部性原理。

队列深度(queue depth)在不同的基准测试工具中存在不同叫法(具体见章节4.2测试工具的影响),有时候称为工作线程数,但实际是一个概念。应用程序使用I/O通常有二种方式:同步和异步。 同步的I/O一次只能发出一个请求,等待内核完成才返回,虽然响应时间较短,但系统的吞吐量很小。队列深度是一种命令排序技术,透过多个线程并发执行,同时给设备更多的I/O请求。相比较而言,一次提交多个I/O既缩短了磁头移动距离(通过电梯算法),同时也能够提升IOPS。

增加队列深度时,会提升IOPS,同时也会增加响应时间,直至磁盘利用率已经达到一个稳定状态时,IOPS不再增加。下面是对一块SSD磁盘的4K随机写性能统计:

队列深度32后的IOPS峰值是队列深度1的IOPS的3倍。

陷阱三:测试不考虑队列深度的变化,拿默认1的队列深度下的结果去和厂家64队列深度下的数据做比较

所以在设置了2.3.1和2.3.2提到条件的基础上,需要再加入队列深度条件。一般简单的做法是将队列深度固定为32或64,这样能够获得最佳性能值与厂家的标注性能比较。而日常使用中队列深度一般也就3~4,要获得更全面的数据,可以和上表一样,分别去测试1、2、4…下的不同队列深度的性能值。

测试HDD性能基准的测试条件,能不能直接搬过来往SSD性能测试上套用呢?答案是不能。虽然两者都叫硬盘,但是内部构成、工作原理完全不同,SSD的复杂度远高于HDD,虽然测试工具可以复用,但是测试条件要做变化,魔鬼在细节,简单套用测出的结果只是镜花水月,去做数据分析与对比,只会徒生迷茫。

陷阱四:测试SSD直接套用HDD的测试条件。

首先,在SSD中,闪存颗粒则替代了机械磁盘成为了存储单元,NAND颗粒类型一般有SLC、MLC和TLC三种。

SLC=Single-LevelCell,即1bit/cell,速度快寿命长,价格超贵(约MLC3倍以上的价格),约10万次擦写寿命 ;

MLC=Multi-LevelCell,即2bit/cell,速度一般寿命一般,价格一般,约3000---10000次擦写寿命 ;

TLC=Trinary-LevelCell,即3bit/cell,也有Flash厂家叫8LC,速度相对慢寿命相对短,价格便宜,约1000~2000次擦写寿命;简单地说SLC的性能最优,价格超高。一般用作企业级或高端发烧友。MLC性能够用,价格适中为消费级SSD应用主流,TLC综合性能最低,价格最便宜。但可以通过高性能主控、主控算法来弥补、提高TLC闪存的性能。

陷阱五:测试SSD忽略颗粒,类似于HDD不标注转速。

不同颗粒对性能有较大影响,测试前需要了解并标注出来。

不同颗粒影响更密切的是PE次数,进而限制了存储器的寿命。一般在容量较小(小于64Gb),上层应用写入频繁的情况下,需要增加一个对寿命逐减条件下的性能测试项目,测试需要花费几周甚至几个月时间跟踪,这里不展开讨论。

工作原理上,按intel的说法,HDD的读写过程类似于跨栏,动作相对单一。

而SSD的读写过程,则像是在打篮球,复杂巧妙。

HDD和SSD之间写入方式的区别源于磁性介质和NAND闪存之间物理性质的差异。磁介质可以被直接覆盖写入新的数据。

而闪存在同样的位置写入数据就需要先对原有的数据进行擦除。

SSD在数据写入时是以一个4KB大小的page为单元,但在数据擦除时却是以block为单位。一般来说,一个block相当于128个页面单元,即512KB。

可以想象到的最坏情况是,所有block都有数据记录,但目标block中有失效的数据可以擦除。为了写入4K数据,主控会把整个block的数据从NAND读出并写入缓存,随后擦除NAND中的block。然后擦除缓存中失效的page数据,将新数据写入,最后将缓存中包含新数据的block重新写入NAND。这个过程包括:读出数据(512K)→擦除SSD(512K)→在缓存中修改(4K)→写入SSD(512K)。本来是写4K的数据,却造成了整个块512K的写入操作,这被称为写入放大(Write Amplification)。而SSD实际写入的数据量和本机写入的数据之间比值叫做写入放大率(Write Amplification Factor,简称WAF),上例中的WAF是非常大的128倍。基于SSD寿命考虑,写入放大越接近1越好。随着技术发展和算法更新,现在甚至有通过缓存暂存数据而使写入放大小于1的应用。

可以这么认为,正是写入放大导致了SSD性能基准测试的复杂化,因为它引申出了下面几种情况。

首次使用SSD时,所有块内都没有数据,我们把这个状态称为FOB(Fresh Out of the Box)状态。此时新数据均往空白空间写入,不需要进行复制与擦除,也就不存在写放大。这种状态下的初始性能测量是通常很高,但随着空白空间原来越少,GC过程(详见章节3.2.4)的加入,性能逐渐下降,这个阶段叫做转换阶段(Transition State),通常需要持续写入几个小时后性能会固定下来,这个阶段叫做稳定阶段(Steady State)。这也是为何SSD有越用越慢这种说法的原因。(仅针对写操作,读操作性能不受此影响。)

陷阱六:只测试开箱状态下的最优性能,忽视进入稳态的性能数据

上图中,绿色部分表示开箱后写入数据达到容量的1~2倍时的情况,橙色表示2~3倍之间,红色大于3倍。4K随机写入在一块256GB的SSD上做的测试,大约需要3个小时才进入了稳定状态。FOB时的持续数据传输率是275MB/s,稳定状态下下降到了25MB/s,性能相差10倍。基准测试需要测试SSD进入稳定阶段后的性能,这些值才真正反应出SSD稳定的性能。这需要花费几小时的时间反复擦写SSD,确保每个page都至少发生一次PE后,才算是进入了稳态。

3.2.2 写入历史

不同的写入方式会对达到稳态时的性能产生影响。写入过程中,顺序写入通常会留下一些大的空白LBA(Logical Block Address),这个过程中GC处理速度更快,性能表现更好;随机写入通常会留下许多小块的空白LBA,GC处理速度更慢,性能表现更差。

顺序写与随机写到达稳定状态时,持续数据传输率存在一定的差距,顺序写的持续数据传输率更高,并且会更快地进入稳定状态,如下图所示:

这里还需要考虑的情况是,上图中的性能值顺序与随机之间两者并不是连续交叉测试的。如果顺序写入后再随机写入性能会显得更高(较之于一直随机写),而随机写入后顺序写入性能会显得较低(较之于一直顺序写)。

陷阱七:没有区分随机写与顺序写,或者两者连续测试,中间没有进行预处理

SSD的稳定状态需要区分随机写还是顺序写,使用随机写进入稳态后测试随机读写性能,使用顺序写进入稳态后测试顺序读写性能。两者必须执行独立的测试,需要有单独的预处理过程。

预处理第一步,对于非FOB状态下的SSD,需要擦除现有数据。第一种方法是安全擦除(Secure Erase),可以使用TxBENCH工具,在Data Erasing标签页下,选择测试的SSD进行enhanced Secure Erase,点击start进行擦除。如果硬盘选择后Security Frozen如果亮起,表示硬盘被锁定,需要先解锁。

另一种方法是在支持Trim的情况下快速格式化,同样可以清除已经写入的数据。不过安全擦除可以使硬盘性能完全恢复到FOB的最优状态下,Trim+格式化的操作性能恢复效果会比安全擦除差一些。如果要测试最优性能还是建议安全擦除。第二步,就是设计写入条件直到硬盘进入稳定状态后测试性能,这里可以是4k随机写入,也可以是128k顺序写入。如果是SF主控,可以再加入熵值条件,具体参见章节3.3。到达稳态后,性能测试执行条件(随机还是顺序)必须与之前写入方式一致。之后重新进行数据擦除,切换写入方式,再次测试。

由于读数据不存在写入时复杂的过程,因此读与写性能会相差很大。下图是Intel S3510 480G进行实际测试4K随机读写不同比例下的IOPS。

可以发现从100%读到95%读,哪怕写IOPS只占了5%,性能就下降了45%,等到了真实情况(写占据30%~50%),性能与标注的最佳值下降了近80%。

陷阱八:读写比例改变对性能影响极大,单纯只考虑100%读或者100%写不符合真实情况

硬盘不是CD/DVD ROM驱动器 ,单独考虑100%读的性能无意义,100%写也同理。一个有效的基准测试应该在典型性能范围内进行,所以测试时,应该考虑将读写比例设置在70/30~60/40之间最为合理。

为了解决WAF过大的问题,SSD演绎出了很多具体的功能,最有代表性的是Trim命令和GC垃圾回收机制。

操作系统删除和修改写入数据的过程,事实上并没有真正删除NAND上原来的数据,只是切断了指向它们的映射关系,使得用户无法再访问到这些地址,但里面的数据还在。SSD本身并没有能力获知哪些数据变成了垃圾数据,一直到等到系统通知它要在这些地址上写入新的数据。另一方面,这些垃圾数据会在GC的过程中被当成有用数据对待,这对于SSD的寿命是非常不利的,同时会导致工作效率和性能的降低。

Trim是基于SATA控制器的一个指令,一旦有文件删除或者分区格式化,操作系统就会发Trim指令给SSD主控告诉它某处的数据已经删除了,SSD因而知道哪些数据是能动哪些不能动的,之后就可以进行清空操作了。不过什么时候开始清空数据或者是开始GC,这些已经与Trim无关,是主控算法的事。清空的时候,SSD一样会复制整个包含删除数据的块到缓存,清空块并写入有效数据的页回去,区别是这样等于把这个延迟时间从覆写数据的那个时间提前到了删除数据的时候,因为在写入的时候有可用的空块,自然就显得写入速度提升了。总结一下,Trim保证速度不下跌的真正秘密是:把将来要做的事提前做掉了。但是这件事迟早要做,所以基本不会影响SSD原有的写入次数(寿命)。

Trim的完成需要几点:1.SSD的主控制器必须认识Trim指令,也就是固件要支持。2.操作系统必须会发送Trim指令,也就是删除时候会发送。(Win7、Windows 2008 R2、Linux 2.6.33、MAC OS 10.6.6、Free BSD 8.2及之后的系统都支持TRIM或者类似指令)3.操作系统下的控制器驱动必须要支持Trim指令的传输,也就是能够Pass Trim指令到SSD主控制器。

垃圾回收(garbage collection,简称GC)就是把一个闪存块里的有效页数据复制到一个空白块里,然后把这个块完全擦除。它其实就相当于SSD的碎片整理,但它是SSD自身的一种机制,不依赖于操作系统。这样做的好处一方面减少寻址负担,另一方面留出更多的空闲Block。所以垃圾回收对固态硬盘的性能和寿命都起到至关重要的作用。

由于GC会对SSD产生大量负载,因此GC可分闲置GC及被动GC。闲置GC就是让SSD主控在系统闲置时提前进行GC操作,产生一定数量的空白块,让GC操作不至于明显影响用户使用感受,但缺点是会因此造成额外的写入放大,因为刚GC的有效数据可能会因为用户更新而变无效。被动GC则是所有SSD一定具备的,SSD主控性能对被动GC效率有决定性影响,因为此时SSD需要同时进行GC及用户要求的数据操作,SSD的性能会有所下降,也就是3.2.1中的转换阶段。

Trim和GC相辅相成,Trim大量减少"有效"页数据的数量,减轻GC的压力,提升GC效率。这两项技术由SSD本身决定,测试过程中无法干涉,一般不会纳入测试条件中,只需要理解其过程即可。

此外,耗损均衡(wear leveling)技术保证了SSD中所有NAND Flash的P/E次数保持基本一致,避免造成某个Flash擦写次数太多而容易损坏。该技术虽然不直接减少写放大,但是延长了SSD的使用寿命,也需要了解。

OP(Over-provisioning)空间是指用户不可操作的容量,大小为实际容量减去用户可用容量。一般被用于优化操作如:WL损耗均衡,GC垃圾回收和坏块映射等,具体如何应用要取决于SSD主控算法。OP空间一共被分为三层。

第一层由于标称容量采用千进制为单位,而NAND颗粒容量单位为1024进制,两者正好相差约7.37%,使得SSD必定要预留下7.37%。如果这款SSD标称128G,那会预留9.4G,那剩下约119G。第二层OP是否存在及容量大小取决于厂商设置,SSD厂商会根据自己的闪存颗粒品质,主控性能,质保年限,或是针对市场定位进行设置。这就看到了有一些标称128G的SSD实际只有112G。第三层OP是用户在日常使用可以分配,用户可以在自己初次分区时不把所有的SSD容量全部分满,可以留一些未分区的空间做OP。固态存储设备的OP空间越多,写入放大系数就会越小,性能越高。三星840PRO 256G测试成绩:

在预留25%,也就是256G空出64G时,不管稳定性还是随机写入性能都比12%或7%更具优势,超过25%的预留空间更好,但是一块SSD不可能预留50%的空间,那样太浪费。

陷阱九:未关注SSD的OP空间大小

手动增加第三层OP空间作为性能优化手段,可以一试。然而对于性能基准测试而言,没有必要搞得太复杂,因为一般测试对象是未分区的原始盘,只需要在厂家默认的OP空间配置下测试即可,只不过作为测试对象的属性需要标注出来。

典型的SSD结构如下图所示:

主控占据了大部分比例,实际上主控在SSD中只是一颗芯片,用于连接闪存芯片与内存,接收系统发出的指令以读取或者写入数据。GC、损耗均衡、读写缓存等工作均由主控芯片指挥完成。不同的主控以及其对应的firmware固件, 对性能的优化效果还是存在明显的区别。测试对象需要标注所使用的主控方案。

陷阱十:未关注SSD所采用的主控方案

市面上主要主控方案有Marvell主控和SandForce主控(使用最多的),其他也有少量SSD使用intel、三星、东芝的主控。需要特别关注的是,SandForce主控提供了一种DuraWrite数据压缩技术。在测试这一类SSD的性能时,受数据熵的影响极大。具有低熵的数据可以以无损耗方式进行重复数据删除,压缩和其他处理,提升了写入的性能

数据熵(Data Entropy),数据越随机,熵越高,数据越规律,熵越低。

下图为写入熵值为100%、70%、20%的数据时,性能的表现情况:

可以看到,100%熵值时,使用该技术SSD的性能与未使用该技术SSD的性能并无差异,但随着熵值得减小,写入性能发生了极大的提升。

陷阱十一:忽略了主控数据缩减技术对不同熵值数据的性能改善

采用了主控数据缩减技术的SSD建议测试写入高中低熵值数据下的性能,其中在70/30~60/40读写比例下加上70%的熵值的性能最与实际相符。不过目前能够简单设置写入数据熵值的测试工具只有iometer2010,具体参见章节4.2。

SSD选择intel与希捷两家厂商的产品进行数据参考。

seagate XF1230系列

(https://www.seagate.com/www-content/datasheets/pdfs/nytro-xf1230-ssdDS1951-1-1709CN-zh_CN.pdf)

intel S3510系列

(https://www.intel.cn/content/www/cn/zh/products/memory-storage/solid-state-drives/data-center-ssds/dc-s3510-series/dc-s3510-480gb-2-5inch-6gbps-16nm.html)

可以看见的特点是:

与HDD不同,SSD厂家标注了IOPS,一般都是在4k随机32QD或者64QD下的测试结果;持续传输率一般是在128K顺序下的测试结果。

持续传输率与IOPS都区分了100%读取与100%写入不同情况下的值。不过均未考虑实际应用比例下的情况(70/30~60/40读写比)。

虽然没有明确标注,但厂商的性能值均是拿低熵值数据在主控优化后进行测试的结果。

若是需要与厂家的性能数据对比,可以去测试对应条件下的最优性能;但是,想要获得更“真实”性能,则要兼顾稳定状态(区分顺序与与随机)、合理的读写比、合理的熵值这几个条件。

如果实际应用中硬盘组建了RAID使用,而性能测试只测试单盘性能,就脱离了实际应用场景。那么,组建了RAID要考虑的因素有哪些呢?

硬RAID还是软RAID硬RAID还是软RAID有两处不同:一处来自接口带宽,硬RAID一般使用的是PCIE接口连接主板;软RAID使用硬盘本身的接口(大部分是SATA或者SAS)。另外,RAID卡本身也有缓存、芯片,做了一些IO优化,不同RAID卡也应区分对待。

RAID类型不同RAID类型对读写性能有一定影响,可能更快,也可能更差,具体参考下表。JBOD模式下各个硬盘还是各自为战,性能等同于单盘性能。

陷阱十二:只测试单盘性能,忽视组RAID后的实际场景下性能

目前市面上硬盘性能基准测试的工具有很多,这些工具软件的测试结果也不能一概而论。

首先,关键条件参数在不同软件的表述不同,默认值不同,是否可配置也不一定。例如队列深度(QD):在iometer中,这个可配参数是of Outstanding I/Os,默认为1。在FIO命令中,参数iodepth表示队列深度,只有使用ioengine=libaio时才有意义。在AS SSD Benchmark中,项目“4K-64Thrd”就是固定64QD下的4K随机读写。在CrystalDiskMark中,4K随机读写的则固定在32QD下进行。

第二,不同的测试软件测试数据的熵值不一样,即使是统一软件不同版本都会产生差异。最典型例子就是IOmeter 2006和IOmeter 2008,前者是高熵值的,后者是低熵值的,因此同样的SSD上,用IOmeter 2008测试会显得性能更高一些。

IOmeter 1.1.0数据熵变成了可配置项目,其中第一项类似2008默认。后两项类似2006默认。只能模拟100%熵值或者0%熵值的情况。

真正能够自定义不同程度熵值的工具是IOmeter 2010。

第三,相同条件测试的结果有一定偏差。下面是14款SSD在AS SSD Benchmark和CrystalDiskMark测试顺序读的不同结果。

第四,工具性能测量方法不同。大部分工具采用的是综合型测试法,即采用规律性的IO操作去衡量性能。也有不少工具采用的是应用型测试法,采用了实际应用的脚本并用时间来衡量性能,类似手机跑分,比较典型的工具是PCMark 8。综合测试法工具对于SSD来说过于简单,需要设置复杂的条件;而应用型测试更接近于实际情况,但易受系统环境(CPU、内存)限制。

陷阱十三:忽视基准测试工具之间的差异性,将不同工具的测试结果混合比较

可以选用多种基准工具测试,建议综合型测试法外追加应用型测试法。结果不能混为一谈,只能在同一种工具产生的结果间进行比较。

别让测试软件骗了你,真·专家谈SSD真实性能测试

https://blog.hackroad.com/it-news/7504.html

测试固态硬盘(SSD) 性能的正确方法

https://wenku.baidu.com/view/d46eaf22dd36a32d737581d1.html?from=search

Lies, Damn Lies And SSD Benchmark Test Result

https://www.seagate.com/cn/zh/tech-insights/lies-damn-lies-and-ssd-benchmark-master-ti/

Benchmarking SSDs:The Devil is in the Preconditioning Details

https://www.flashmemorysummit.com/English/Collaterals/Proceedings/2009/20090811_F2A_Smith.pdf

维基百科—IOPS

https://en.wikipedia.org/wiki/IOPS

SSD空间/性能关系探寻