企业级和消费级SSD,码农该如何选择?SSD高分低能的原因详解
是返乡过年?还是就地过年?最新一届#双面过节指南#开始啦!本次征稿活动分为A面返乡和B面就地,大家可以根据自己的情况,分享自己的春节攻略,优秀的投稿文章还有可能能获得优厚的大奖哦,快点击查看活动详情<<<
购买理由
SSD如今已经相当普及,从个人用户看,大家喜欢根据跑分来评价SSD性能,但为何跑分很高的消费级SSD在某些应用上却性能奇差,而企业级即使SATA盘也能比消费旗舰SSD快几十倍?高分低能的原因是啥,跑分软件的背后原理将详细解释如下。
外观展示
跑分软件原理
Diskmark是一款常用的跑分软件,广泛被厂家和用户来测试SSD性能。那么它是如何测试的呢?
Diskmark只是一个空壳GUI,它并没有实现任何磁盘性能测试算法,而是直接调用了diskspd,一个微软开发的小工具来调用获取磁盘测试结果。
Diskspd是微软写的小程序,部分替代了之前的sqlio测试。下载:https://github.com/microsoft/diskspd
为什么说Crystal Diskmark的4k写分数是毫无意义的,是因为它压根就是开着缓存在写DRAM
-S表示FILE_FLAG_NOBUFFERING,这是Windows中禁用了系统文件缓存,但设备缓存依然有效,所以你测试的结果并非落盘持久化性能,而是写DRAM的性能。Windows中你需要关闭设备上的缓存,才能得到持久化。
既然你写入的数据都没落盘,那么SSD上带缓存和把内存作为SSD的写入缓存没啥区别(反正都没持久化)。
在Linux中,持久化需要调用fsync(相当于Windows中的FlushFileBuffers)做了落盘的操作,然后就是SSD的事情。
内核缓存中的数据,会被排序和合并,然后再写入磁盘。排序是为了配合机械硬盘中磁头旋转的顺序,合并为了提高性能。
为什么需要持久化数据
有很多应用需要fsync来实现落盘持久化数据,特别是那些具有WAL的应用。WAL在存储系统中被广泛应用,是因为它保证了即使崩溃也能从日志中重做或者撤销以保证数据一致性。
例如,假设你是一个网盘用户,你上传了1kB的数据,告诉你成功了,如果不做落盘那么完全可能发生你后来发现你1k丢失了,这是致命的问题。数据库也一样,当你commit了一条写入/更新的SQL,你后来发现这条数据并没有写入,那么ACID就得不到保证了。
假设你是一个软件开发人员,需要开发一款使用WAL的存储或者分布式软件,那么如果SSD落盘性能低,那么你根本无法正确测试你程序的性能。例如raft算法就需要依赖落盘数据持久化WAL:
只测缓存DRAM的写入性能,毫无意义。这类应用都要求fsync落盘持久化数据。
使用感受
测试平台:ASUS X99,256G DDR4 2400,E5-2680V3
系统:Centos 8 Stream最新
文件系统:ext4
SSD: 三星SM863 480G,三星PM953 960G,铠侠RC10 500G,海康E200P 1T
pg_test_fsync是postgres自带的一个性能评估工具。其用来测试落盘fsync性能。
企业级SATA
三星SM963是一款企业级SATA SSD,其跑分弱于几乎所有的nvme SSD
企业级NVME M2
PM953是三星出的一款TLC的企业级SSD,用于读取多的场景
消费级NVME M2
铠侠RC10是一款KIOXIA出的带缓存的消费级SSD
企业级???SATA
海康的E200P是有PLP掉电保护技术的,宣传上说属于入门企业级,可惜落盘性能并没有体现出PLP的用处。
测试结果说明
测试结果显示了企业级SSD突出的落盘性能,甚至连SATA SSD都能比最新消费级NVME速度快15倍。凯侠RC10的fync只有每秒900次,意味着你如果是数据库/存储的开发/使用者,你的QPS完全被这个数字限制死了,很多数据库一次更新/写入都要2次以上fsync那么性能更糟糕。如果你是分布式系统开发人员/虚拟机用户这类需要大量fsync落盘的,那么消费级SSD带来的瓶颈不可忽视。
海康那个E200P比较有意思,它说是企业级,有带电保护,理论上有带电保护的SSD,fsync只要打到DRAM里就能返回,不应该这么差,不知道海康怎么想的。它起码和消费级SSD在性能上没区别。
落盘差距的原因
NAND的写延迟都比较大,企业级SSD具有掉电保护,因此只要写入缓存就能返回fync操作,而消费级由于没有PLP需要真正写入NAND,这造成了落盘延迟大,IOPS惨不忍睹。
哪些人不需要关心落盘性能:
对于大多数人,因为使用的软件没有fsync之类落盘的要求,因此无需考虑使用企业级SSD,消费级SSD在这类用户中和企业级没有区别。
总结
跑分软件的4k写,测得数字反映了DRAM写入性能,而非数据落盘持久化性能。
对于数据库,分布式共识算法,虚拟机,各种键值存储系统等一些应用,消费级SSD会严重影响性能
对于存储开发测试人员,或者需要玩分布式系统算法的码农,或者有很多虚拟机/数据库应用的用户,企业级SSD可以提供高性能
对于没有PLP的SSD而言,DRAM缓存放在盘上还是放在计算机内存上,并没有什么区别
消费级和企业级SSD的区别,不仅仅是数据安全性方面,性能差异也是重要方面

还有开发在本机装数据库?
SSD的掉电保护和传统RAID卡,存储设备的还不太一样,入门级掉电保护可能只保护FTL。所以他不敢给缓存数据算落盘
码农其实随便搞个ssd就好了,然后最主要的是内存,然后cpu,最后公司反正肯定有svn,git,无所谓,然后私活的话自己在家用nas搭个gitlab,不久完了。。
额,全篇有点扯淡啊。不要老拿码农说事儿。就算是用fio跑,还分io类型呢。wal日志写用fsync基本都是可配,开了性能
到爆炸。4k的随机读取是有价值的,一般评测软件都会标记测试file大小,自己看看,还要设计ssd多channel并发io的问题。服务器上硬盘转速高,ssd颗粒用slc,比消息级高不是很正常吗