想攒一台电竞主机、家用主机、酷炫主机无从下手?想省钱又怕性能不达标?值得买帮你打造定制化DIY装机工具,自助全网比价装机,提供最适合的搭配方案,解决各种攒机场景下难题。>快快使用戳这里<
购买理由
SSD如今已经相当普及,从个人用户看,大家喜欢根据跑分来评价SSD性能,但为何跑分很高的消费级SSD在某些应用上却性能奇差,而企业级即使SATA盘也能比消费旗舰SSD快几十倍?高分低能的原因是啥,跑分软件的背后原理将详细解释如下。外观展示
跑分软件原理
Diskmark是一款常用的跑分软件,广泛被厂家和用户来测试SSD性能。那么它是如何测试的呢?Diskmark只是一个空壳GUI,它并没有实现任何磁盘性能测试算法,而是直接调用了diskspd,一个微软开发的小工具来调用获取磁盘测试结果。
Diskspd是微软写的小程序,部分替代了之前的sqlio测试。下载:https://github.com/microsoft/diskspd
Diskmark直接调用diskspd
为什么说Crystal Diskmark的4k写分数是毫无意义的,是因为它压根就是开着缓存在写DRAM
Diskmark调用diskspd的参数
-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:
raft
只测缓存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 SSDSM863
企业级NVME M2
PM953是三星出的一款TLC的企业级SSD,用于读取多的场景PM953
消费级NVME M2
铠侠RC10是一款KIOXIA出的带缓存的消费级SSD凯侠RC10
企业级???SATA
海康的E200P是有PLP掉电保护技术的,宣传上说属于入门企业级,可惜落盘性能并没有体现出PLP的用处。海康E200P
测试结果说明
测试结果显示了企业级SSD突出的落盘性能,甚至连SATA SSD都能比最新消费级NVME速度快15倍。凯侠RC10的fync只有每秒900次,意味着你如果是数据库/存储的开发/使用者,你的QPS完全被这个数字限制死了,很多数据库一次更新/写入都要2次以上fsync那么性能更糟糕。如果你是分布式系统开发人员/虚拟机用户这类需要大量fsync落盘的,那么消费级SSD带来的瓶颈不可忽视。海康那个E200P比较有意思,它说是企业级,有带电保护,理论上有带电保护的SSD,fsync只要打到DRAM里就能返回,不应该这么差,不知道海康怎么想的。它起码和消费级SSD在性能上没区别。
落盘性能
落盘差距的原因
NAND的写延迟都比较大,企业级SSD具有掉电保护,因此只要写入缓存就能返回fync操作,而消费级由于没有PLP需要真正写入NAND,这造成了落盘延迟大,IOPS惨不忍睹。
哪些人不需要关心落盘性能:
游戏用户office文档用户
视频创作者
上网用户
股民
对于大多数人,因为使用的软件没有fsync之类落盘的要求,因此无需考虑使用企业级SSD,消费级SSD在这类用户中和企业级没有区别。
总结
跑分软件的4k写,测得数字反映了DRAM写入性能,而非数据落盘持久化性能。对于数据库,分布式共识算法,虚拟机,各种键值存储系统等一些应用,消费级SSD会严重影响性能
对于存储开发测试人员,或者需要玩分布式系统算法的码农,或者有很多虚拟机/数据库应用的用户,企业级SSD可以提供高性能
对于没有PLP的SSD而言,DRAM缓存放在盘上还是放在计算机内存上,并没有什么区别
消费级和企业级SSD的区别,不仅仅是数据安全性方面,性能差异也是重要方面
网友评论