Bean Nuts Hazelnut Sauron Legion
基于真实100TB数据的SSD组与评测

原文

改节直接来自在作者在知乎发布的文章,为社交性口语描述,仅供参考。
原文:
https://zhuanlan.zhihu.com/p/634851956

摘要:

在研究生快毕业前夕,听同学建议后,准备一步步逐步把这个耗资巨大的“Sauron”项目开源,并介绍一下一些技术细节,本文为底层存储结构的介绍和评测。

首先我这个人非常讲究”真实感(白盒感)”,喜欢什么东西都自底向上系统性,工业链完整的体验一遍,东西不一定要最好但是一定要步骤尽可能完整,麻雀虽小但必须五脏俱全(没错当年各种生物化学试剂和仪器设备我也是能自己玩都玩了一遍,还尝了许多,哈哈),比如这个“Sauron”项目我直接不用使用第三方云计算厂的云上环境(实际上也不可能,1PB如果用阿里云这种直接破产),那自然必须尽可能完整重新造轮子,从物理机集群搭建,存储架构选择,虚拟机、容器集群搭建,环境选择与部署,代码编写,等到后面模型训练一定要尽可能完完整整走一遍。当然怎么多工作量不可能完全一个人完成,因此完整的团队选择和团队作业我也给体验了一遍,总之就是把大数据存储、分布式查询和检索,甚至大模型等给真实开盒了,目前这100TB,从爬下来到塞进数据库和磁盘到后面用的的NLP模型完完整整开盒一遍。

借某《算法导论》答案作者一句话~

本文为[Sauron]系列开源文章集中的第一道工序之《底层存储介质选择的评测》,重点介绍基于Sauron项目需求下,实际使用SSD做热数据区的一些实际性能表现,如果真的上100TB~1PB这样的千亿级小文件,高并发,高IOPS,较大数据,而且预算有限的情况下,真实的固态会是怎么样的表现。因此这个评测更面向于真实的高压负载业务场景,硬盘的评测结果也是侧重真实业务,而顺便附带的,同时也附带了日常生活中的一些场景。

文章第一必须真实(就TM还是一个词——真实),第二就是写着玩,完全靠情怀,技术选择完全图一乐,不是最近什么技术火我就用什么(我真有一头牛,贵!必须服从于需求),总之无聊就追加一点。

前言,写在最前面
有一说一,必须感谢长江存储,不然我还要多花几倍钱买固态。长江继续给力,4TB、8TB以上固态快快降价,实在不想用阵列卡了~

Sauron 项目是我从大四开始搞得,当时是我本科论文,数据量大约是1TB~2TB,觉得没意思,研究生我给指数扩展到100TB了,因此评测和体验根据实际使用和体验情况,时间有1 ~ 2年左右。提到的硬盘有国外旗舰、国产、二手的,我的业务需求基本上是面向数据库、海量4K小文件、并行读写这种高QPS和IOPS场景的实际体验来的,普通用户基本上不可能有这么高强度、长时间的IOPS场景,但理论上也可以带来一定参考,此外值得注意的是因为使用场景不一样,需要根据实践中具体需求合理考虑。

不打广告、不打广告、不打广告,除了知名大厂,其他杂牌我是不会说的,全文没任何商品连接~

另外虽然我有CMR企业氦盘和各种SMR大容量叠瓦盘,但是这玩意无论叠瓦不叠瓦在海量小文件下都就一现代版冷数据磁带机,4K性能在这么多小文件小可以忽略不计了,无论什么牌子希捷(吐槽一下,这家伙可以清零,差评)、西数、东芝,4K下人人平等,读写永远只能单队列,一旦两个队列以上,欢迎吃炒豆子,这玩意就一吃灰的冷备设备,实在没评测和体验的必要,体验就重来没好过。。。

Sauron 基本背景和存储架构简介

Sauron 由于是私人项目,完全私人资金,所以目前是一个设计容量1PB的分布式存储、爬虫、关系查询和智能查询的NLP项目,所有存储介质只存储文本、JSON、XML/HTML等可结构化数据以及神经网络数据,不存储任何图片、音频、视频等流媒体数据,由于成本问题,目前物理容量只有100TB左右,采用SATA HDD + SATA SSD + NVMe + 内存的存储架构,这里重点介绍的:目前可怜巴巴的30TB固态存储介质的体验和评测。

项目基本架构都是分布式架构和微服务(包括爬虫和查询分析),与财大气粗的大厂相比,由于钱都是私人的,肉疼的很,导致很多情况都要考虑,比如为了节约成本很多设备都是二手,数据完整性保障和冗余那自然要阉割或另辟蹊径了,这样我直接放弃了大部分的普通阵列卡RAID,使用软件调度存储策略和软件RAID10。

由于特殊背景,具体的集群架构设计那自然是进程、VM、容器以及边缘设备混用,怎么方便怎么来。技术的选择杂七杂八完全看心情,尤其是这玩意只能灵活设计完全增量模型,集群技术选择一开始用了Hadoop集群、后面试了下K8S集群用的不爽,追加NACOS集群、到后面发现容器也不太方便又追加了进程和虚拟机集群从而手撸C++版本的集群管理器等(为什么要手撸,因为有海量分布式爬虫这种需求导致和传统信息系统很多不一样,服务设计和调度策略很多要定制,而且架构不仅仅是容器还有VM、进程和边缘设备,还不如手撸个简单版,随便给我白盒感踩个点~)。

由于任务线太长,那是一路各种踩点、反正想到什么用什么( 雇人来蒙特卡洛,路径覆盖,哈哈~ )、如数据库也是各种试,Redis发现没嵌套对象试了试MongoDB发现MongoDB太麻烦了又改回Redis+MySQL。存储架构也是随着数据量增长,换了又换,非常灵活~

SSD评测

通过这个项目,好不容易从硬件选择、硬件评估、硬件压测、环境搭建、框架设计、到各种模型、存储、技术点全手撸自底向上给过了一遍,由于我”真有一头牛”,目前这100TB小文件给我彻彻底底体验了一遍后,那叫一个真的酸爽和恶心啊,一开始想着节约成本觉得固态昂贵,觉得稍微优化一下代码,伟大的CMR企业氦盘应该能稍微给力点吧,然后实践中无论怎么优化(算法Suck,性能算力和钱才是爸爸,牺牲能量换时间搁着),那几亿小文件存进去那叫一个有去无回,好几晚伴着炒豆子入睡,行吧那就只能用钞能力上SSD了,正好赶上这几年固态减价狂潮竟然发现好像几十TB的杂牌+二手SSD存储成本没比机械贵多少(所以希捷赶紧减价呀!),美滋滋~ 固态除了浪费盘位和阵列卡、略贵没什么特别大缺点了~

基本结论

首先我的环境非常恶劣,没错为了高度省成本,那自然“不养闲人”机箱这种没产出的东西,那自然是纸盒机箱伺候,散热完全靠纸盒几个洞和开天窗。。。硬盘大部分都是二手或杂牌,相对便宜,而且杂牌也有京东3 ~ 5年保修,并且都走了软件RAID1镜像压缩备份,那自然是不可惜的( 这种情况下用坏都怪我用火电~ ),自然是每天都要几TB甚至几十TB不等的大量数据读写,这样恶劣的环境下所有硬盘工作温度就没低于55度,夏天60 ~ 70度那是常态,可以说我的实际硬盘工作环境简直可怜,就这样的环境下大约1~2年,所有硬盘硬是没出什么大问题。。。

高负载:每个物理机集群节点的流量每月都是几十TB的吞吐量


纸盒机箱1,兼USB供电电源,兼第一NAS入口,兼软路由器,兼最卑微的Master节点


纸盒机箱2,超级节点1

数据安全性:这玩意完全玄学,贵不能保平安,便宜也不一定出问题,我一堆杂牌和二手固态如此恶劣的环境下,那也经久不衰,一颗永流传。好家伙我自己主力机,散热最好最娇贵的,最贵的三星980Pro竟然是我第一个坏的,还两根都有问题,不是炸0E就是SLC缓存失效,简直离谱,其他2年内几十根固态,除了太便宜以至于掉速严重,唯独三星的有数据安全性问题~ 至于机械硬盘,目前是一个都没问题,除了烫手。。。所以说存储这玩意唯有备份和冗余保平安~

然后白片、正片、黑片:黑片的硬盘我不确定有没有,理论上是有的,因为我有一批次硬盘是淘宝和京东买的那种非常杂牌的慧荣/螃蟹/群联,国内贴片贴牌固态,有些还是UFS颗粒。。。基本上都是三星、海力士、东芝的颗粒,这一批我觉得是黑片,因为这些颗粒有点来历不明,资料实在不全,而且我很懒,懒得找量产工具看,也不想找其他资料,因此不能完全求证是黑是白,反正就当黑片用(这个价格坏了怪我用火电)。实践中,除了京东三星(淘宝OME版三星一直给我当我移动硬盘反而屁事没有,真的是温室的花朵。。。)让我失望了,其他较贵的白片和正片就没出过事情,但是值的注意的是这一批可能是黑片的固态确实有点不行,虽然丢数据、掉盘到是没有,但是一旦进入脏盘阶段,那掉速和异常响应时间和QLC有的一拼了。。。而且有个盘也出现了较长时间SLC失效的现象,但是也不排斥这破主控性能吃翔,总之这玩意看运气,千万不能寄希望于大厂、旗舰硬盘,唯有多备份(再好的高端硬盘也是个薛定谔的RNA,多备胎才保险),牺牲空间换安全!

使用时间和TBW:我所有固态都是MLC或TLC的,QLC没用过不知道(因为前期爬虫需求下,大部分场景都是4K队列读写,而且受限于网络IO,单位时间读写压力不大,本来我是想上一部分QLC方案,但上海鲜市场一看,好家伙有些慧荣、螃蟹主控这种最低端QLC比一些最低端二手MLC还贵,骗鬼啊,就离谱,那得了吧),对于MLC和TLC其结论就是哪怕你强度已经很大也很难用完,我两颗2015 ~ 2017高中、本科用的第一、二根128TB和256TB固态,硬是当系统盘用的了今天,TLC都快一颗永流传了。。。也就说说即使是中高等强度(平均每日GB级别左右写入用户),其实3 ~ 5年左右也就50 ~ 150TBW。当然再多读写的情况我不好说,因为视频等其他非小文件场景这种我基本都用机械阵列的,用固态简直暴殄天物。如果觉得TBW还不够,再高读写量直接钞能力吧,如果是高端固态,这几年一般都是新的比老的好用,尤其是PCIe4固态,无论是高负载、4K性能,除了贵,其他对我这种用户简直爽到不行。。。其他非主力固态,目前使用时间都只有1 ~ 2年左右,后面再更新。。。总之,这么多年固态我手上除了三星英年早逝过,其他就没挂过~,机械到是给我折磨死了好几个(RIP)。。。

实际综合体验:固态这玩意一般我们看别人评测,一般就顺序读写、缓外读写、4K性能、TBW以及主控等常见指标和评测,实践中,如果日常用的玩,就普通用户那种,参数相似其实区别就那样,但是如果负载稍微上去点,固态之间区别比人和狗都大,即使参数指标接近,有可能实际使用中差的巨大。但是话又说回来,实践中如果参数接近散热理想,其实读性能差不多,写性能才是真的比人和狗都大。

总结来说就是一般新主控、好主控,散热理想,无论国内外硬盘(国产晶圆主控和国产比、国外和国外比),基本上综合体验会收敛于钱的量,有一说一,国产固态也不错的!值得注意的是,主控性能其实很重要,尤其是如果你大面积删除小文件,垃圾主控让你想死,尤其是一些老的的MLC硬盘和一些垃圾主控(点名批评螃蟹和群联破主控),那TRIM指令执行一下要命。。。

其他一些值得注意的细节:

1).散热对性能影响很大,比如我的西数SN850X插笔记本上,17寸这种大笔记本,虽然散热鳞片我贴了,但是还是压不住这火龙…实践中夏天超过连续30G读写,温度就开始飙到70,然后给我掉速到PCIe3;

2).千万级、亿级以上连续4K写入(含数据库写入),垃圾主控会经常抗议我这种行为,应该是进行垃圾回收这种太频繁了,虽然写入速度可能就10~20MB/s(没满),但是会经常触发各种骚操作,直接响应时间100%,京东上国产主控和高端硬盘这种现象非常少,老的MLC也还好,但是对于杂牌破主控的硬盘,长时间小文件写入体验不是特别好,虽然也能介绍但是相好硬盘,数据量一上来有时候可以差至少1小时的写入时间,对于数据库表现就是经常IO挂起,小文件写入会把集群全挂起几秒。。。

3). NVMe和SATA区别:

走显卡的应用大部分没什么破区别,对于训练,也可能是我数据量不大(目前只在集群和单机上最大上过GB~1TB的数据),如果用显卡训练,无论什么固态(SATA和NVMe),目前不是瓶颈( 后面更新 ~ );玩游戏场景,我主力笔记本可以插三块固态(PCIe4x2,SATAx1),一开始我是使用的冷热存储架构,就是3块盘我按L1,L2,L3分级了,最近经常玩的游戏我会往L1,L2上挪,实践中,后面发现根本没必要,因为PCIe4和SATA3如果只是玩游戏,100 ~ 200GB那种3A都没什么非常肉眼可见的区别。。。

冷热存储架构

但是如果是密集型CPU任务,尤其是长时间大容量对读写,尤其是那种一次性文件分页,每页1GB以上内存优化的读写,NVMe是真的美滋滋,我之前为了找一个网站的图片(Pinterest,他推荐算法反正没推荐到我喜欢的),我直接把他sitemap,500多G全爬下来了,因为太多了插数据库实在太久,为了找几个链接,我直接遍历,一开始SATA那就一个恶心,然后NVMe, 配和内存(我一次性读按每页,3 ~ 7GB读到内存然后多线程(28/16线程)找,至强和较新的i7CPU(8核以上)基本上都不卡瓶颈,PCIe4可以大约稳定到2 ~ 5GB/s的遍历速度, PCIe3稳定到2GB/s左右),啊,舒适且温馨!

Pinterest 500GB Sitemap

具体硬盘实验和评测

我目前集群和设备也不是特别多,有固态的x86节点大约8个,我目前需求是倾向于超级节点,因为IOPS实在高到离谱,单NVMe 4K性能都压不住,局域网下即使是万兆NAS,SMB/NFS这种都不行,其他方案更离谱,之前试了下Hadoop集群,但是还是放弃了,Hadoop频繁小文件读写就一破局域网版的对象存储。。。而超级节点下就比较舒服,单机内部速度肯定为王,这样情况下也体验到了性能差距悬殊的CPU和设备的体验结果的差距和实际瓶颈所在。

这里随便说一下我为什么不用更多的内存的来挂Redis这种来实现更高的IOPS,这个方案当然可以,二手DDR4 ECC服务器内存条现在也不是很贵,为什么不呢?1.一台物理机最大也就512GB内存(x99主板),虽然DELL Edge这类大型服务器可以稍微大点,但是实在太吵了,晚上开机扰民;2.此外为了进一步压榨物理机性能,虚拟机、进程、容器都是几倍超分的,里面都是挂好几个服务的,乱七八糟的,内存读写就是魔幻的,512GB都不一定够,比如你搞维基百科数据集,人家是好几TB级别的,此外设备上还可能跑着其他好几个网站的服务,即使是512GB内存都会下很快撑爆,此外频繁的和磁盘交换,实践中发现用小内存的方案(<512GB),实际性能和NVMe差不多;3.更重要的是ECC这破内存条就耗电的离谱,几百GB内存直接好几百W(CPU、GPU加一起都不服气,吓得我赶紧拔掉多余的内存条,非必要不乱插内存条),而固态才几十W,这玩意开久了电费都可以买固态了;


32GB * 3 下离谱的内存功耗
目前节点主要CPU配置:核心网络:i7-11800H(末班车,5年内拒绝大小核),E5-2680 v4(华南主板),E5-2680 v2(DELL-Edge),i7-4710MQ,i7-6700HQ 等, 边缘设备: Celeron N4100, Celeron J1800等。(为什么这么多笔记本CPU,还是真实感,您知道物理机多耗电吗!!!服务器那种随随便便上百瓦呢亲~如果8个,电费到破产,而且大家一起直接房间高通火龙,ITX这种就温馨多了(实践中ITX+服务器一多还是火龙,夏天热死)!)

重点看4K性能和主控响应,连续没意思,此外驱动因为一台设备上一堆各种牌子的固态,驱动和磁盘配置就是Windows或Ubuntu默认,没针对任何硬盘优化,如果优化可能性能更好。

国外大厂测试:

这一小节的所有硬盘都是我的主力硬盘,亲儿子,CPU都是基于I7 11800H,心疼读写数,懒得测连续读写~

三星980Pro TLC

这玩意想着就气,没用多久就英年早逝,离谱,不过也感谢三星,之前我也是非三星、西数不买的,经过三星这又贵又坑的祖宗后,我买硬盘直接分布式去买,一个牌子试一下了,然后发现国产的也还可以。。。


炸OE


SLC缓存失效

西数SN850X TLC


SN850X

西数蓝碟WDS100 (SATA) TLC

SAMSUNG MZVLB OME版 TLC

这个挺好的,给我当移动硬盘,各种折腾,乱断电,反正坚挺生命力顽强,一颗永流传,这个4K性能是戴套(绿联NVMe硬盘盒)版本的,硬盘盒后就不掉速,缓外还有1G多,刚刚好,哈哈哈~

Micron 3400 TLC

较新的国产、杂牌和二手固态测试:

这个测试环境是E5-2680 v4 和 E5-2680 v2,直通PCH或走PCIe3阵列卡直通模式,基本上阵列卡和sSata、Sata总线都挂满了,因此性能表现可能不满或有差异,因此结果仅供参考!

此外文中提到的的二手硬盘,我为了省钱都买的写入量几百TB甚至PB的N手盘,不过目前陆陆续续使用几个月到1年左右,8块目前都没有任何翻车!

闪迪云盘SDLF1CRR-019T 2TB SATA MLC

这玩意是真的物美价廉,我目前有4块,3个月~1年左右使用,每日不休息的高4K读写量,目前都没有翻车,优点:MLC老传家宝了,一颗永流传,二手便宜物美价廉、不掉速、供电充足情况下24小时高负载下随便折腾、稳的很,颗粒没锁可以支持DIY;

缺点:这玩意电流有亿点大,实际使用最高可以飙到5V 1A多(和氦盘有的一拼了),itx主板硬盘一多直接带不动(可以魔改电源,如12V降5V模块即可或飞线),做移动硬盘不行,电流太大,冷启动太久,作为SATA连续和4K速度都挺一般,还有个非常隐秘的大缺点就这东西非常Ancient了,上古马牌主控,主控算差的,一个TRIM指令可以执行非常久,如果频繁删东西等频繁调GC和TRIM的场景和杂牌主控有的一比。。。

总的来说这价格、MLC,不好都是我的错!MLC能有什么坏心思!


至强服务器下AMI BIOS 直通PCH的表现


I7 4710MQ ITX主板 AMI BIOS 直通PCH的表现

经典的Micron 1100 TLC

这玩意我记得我当时大一2017买的256GB,500多,现在2TB版本海鲜市场才200300多,时代变迁啊这玩意也是坚挺,一颗永流传,256版本那个从大一、大二我当系统盘,然后大三、大四当移动硬盘又到如今给我当系统盘,真的是见证了一颗永流传,十分坚挺,在我各种暴力使用下,我当移动硬盘基本上看心情乱拔,或者当缓存盘,如今7年依然十分坚挺,神盘一个。

优点:目前二手便宜的要命,200~300多和当年2TB机械价格差不多了,虽然TLC,但是我7年持续的使用体验下来也是一颗永流传,想用坏都用不坏那种,同样供电充足情况下24小时高负载下随便折腾,值得注意的是也不排除我抽卡运气极好,抽到极品体质,哈哈哈。GC和TRIM等指令和操作执行时间比闪迪快多了,带TRIM的删除场景还可以。

缺点:上古TLC,也是马牌主控,这玩意掉速非常严重,缓外至少2阶段,150 ~ 200MB/s, 60MB/s(一般是最后容量10%左右),掉速可以掉成机械不如,256GB版本的 SLC缓存看脏盘和实际情况,有时候50GB还没掉速,但平均SLC大约就10~20GB左右。


256GB版本的,6~7年左右,TBW接近100TB

2TB版本,今年海鲜市场收来的

aigo NVMe SSD P3500 TLC (爱国者,长江颗粒)

现在京东应该差不多400~480块钱左右,PCIe3的NVMe,还可以,不过这4K性能其实感觉不怎么样,一股SATA味,不过实际使用4K这种高IOPS情况下还是比SATA快一点。

GeIL P3P 2TB NVMe TLC (在保,而且这个胶不好撕开,所以不知道什么具体颗粒)

现在京东应该也是差不多400~480块钱左右,PCIe3的NVMe,这个比爱国者的4K强一点,缺点是3年质保,爱国者和移速、梵想是5年。。。

某宝国产贴牌杂牌,东莞贴牌,螃蟹主控,UFS海力士颗粒 TLC:

便宜,2年左右未翻车,但是有时候长时间(>24H)高负载有时候会出现SLC没了,直接长时间缓外直接60MB/s左右,短时间一般用不完缓内,这个盘用了很久了,非常脏,所以性能没空盘好!


京东某国产贴牌杂牌,群联主控,UFS东芝颗粒 TLC:

这个不怎么样,在杂牌里面偏贵,具体牌子不明说,因为当时可以京东快递,又非常急要就没这么看,机械硬盘速度级别的固态,目前使用2年左右,同样非常脏,虽然没掉盘掉数据,但是速度严重翻车,速度一股机械感,SLC非常Tiny就5G~10G左右,十分怀疑是QLC,但是查颗粒是TLC的,主控也不怎么样,写久了高响应,删东西高响应,不是在执行TRIM和GC就在执行TRIM和GC的路上,总之离谱!!

本小节总结:

总的来说最求经济(400元以上/2TB)还是最优买京东上国产(长江颗粒、联芸主控)的固态,有保修,速度还可以,如果要更经济(200~300元)买上古的企业固态,便宜而且难用坏。

而贴牌的这类固态其实不怎么好,首先慧荣、群联、螃蟹这类主控很多都是公版的(尤其是慧荣),基本上固件和量产工具就没锁,想怎么开卡怎么开卡,想清零就清零,你DIY都可以,可以说我有颗粒、PCB版加个热风枪,我自己都可以做固态了,你甚至可以自定义和修改硬盘的序列化、牌子等。其次实际使用就那样,主控不怎么样,4K性能拉跨,而且比长江系列国产硬盘没便宜多少,一般就便宜几十块钱,总之不怎么样。

实际业务下的性能体验

这一章,要慢慢来,我不想那种用Random或东拼西凑凑一堆数据集来玩,这种还不如脑补,真男人不戴Tao只用真实的东西,所有的测试必须真实存在、逻辑链完备、都是实际上用到的!因此增量模型,最近用到了就慢慢更新~

SATA固态下各种IO表现


7千万条数据,MYSQL SATA 两个B树索引,插入时间

真实的简单关系数据库,亿级单表,不分区,仅两B树索引优化,其实没想象中那么大,就10GB的小表,如果业务不是特别复杂,IOPS不高的情况下都不用上分布式,单物理机级别的东西!


表结构


亿级简单索引单表

跨NVMe,SATA下,高压负载(10进程/10次压缩任务,1亿小文件,1百万/进程,网页10~100KB)



C++下,SATA SSD 5线程(CPU 14核),带内存池和线程池优化下遍历5百万小文件耗时
未完待续,后面有空再加~

结论

Money is all you need! 未完待续,后面有空再加~

Acknowledgment

This work is supported by MySelf (NO.666), My Own Foundation of China (No. 777),这项工作由本人私人基金赞助。感谢长江存储,感谢京东和某宝折扣~

Author:undefined  Create time:2023-07-29 00:28
Last editor:undefined  Update time:2023-08-25 01:51