本文来自:码农黄师傅,作者:黄师傅,题图来自:AI生成我打算从存储系统架构师的角度谈谈如何用好SSD。本文中的“存储系统”,指的是全闪阵列,或者全闪分布式块。以前我做zStorage的时候,遇到一个问题:性能测试时间长了,写入SSD的数据量大了,写性能就下降。当时我猜测,多半是SSD后台启动了GC(垃圾收集),导致了写性能下降。没有证据,也就只能是猜测。从去年开始,我花了很多时间学习SSD,现在我可以肯定地说,就是SSD的后台GC影响了写性能。本文不打算详细讲解“为什么SSD需要做GC”,也不讲“SSD怎么做GC”,这些内容网上有很多,不了解的读者自行百度或Deepseek,推荐Deepseek。本文重点讲那些以前我不了解的、但对存储系统有影响的SSD特性。SSD的写比读性能差,随机写比顺序写差很多。现在采用PCIe Gen5 x4的NVMe SSD,主机接口带宽可以达到15.7GB/s,顺序读可以达到14.5GB/s,要去掉一些命令开销。详见下表:上表可以看出,4KB随机写的PCIe带宽利用率只能跑到15%。很明显,PCIe接口不是瓶颈,那瓶颈在什么地方?实际上,SSD的写性能瓶颈在NAND Flash上。现在企业SSD中最常用的TLC Nand Flash,一般要求一次性写入同一个WL的3个页,如果每个页8KB,那么3个页就是24KB。写入这3个8KB页需要花大约700us。也就是说,一个Flash芯片的写性能只能达到24KB / 700us = 35MB /s,如果要达到10GB/s性能,一个SSD需要配置大约300个Nand Flash芯片。看网上的SSD照片,似乎没有那么多Flash芯片?实际上,一般单个Flash芯片内部会封装很多个独立的Die(切割好的硅片),每个Die内部还有多个Plane,多个Plane可以一起执行写命令。也就是说,实际上不是300个芯片,而是300个Plane。按照每个die容量1Tb计算,15.36TB的SSD大约需要配置140个die,每个Die里面有2个Plane,顺序写性能大约就是10GB/s。为什么读性能那么高?因为读一个Flash页只需要40us。那么,又为什么随机写性能(带宽利用率14%)比顺序写性能(70%)低那么多?随机写性能低的主要原因是GC导致的写放大(WAF)很高。如果是顺序写,那么Nand Flash上数据也是被顺序覆盖掉的,一个GC回收单元里面所有Flash数据都被一起覆盖掉了,虽然还有GC流程,但是一个GC回收单元里面的所有页面都被覆盖掉了,没有有效数据页了,也就不需要拷贝数据了,所以没有写放大(WAF = nand_write_bytes / host_write_bytes = 1.0)。如果是4KB随机写,一个GC回收单元内部还有很多有效数据页,这些数据需要被复制到Nand Flash的新位置,才能删除GC回收单元。这个复制过程,会引入写放大。如果用fio做4kb随机写测试,有些型号的SSD在极限情况下写放大(WAF)可以达到4.5甚至5.0,也就是nand flash里面写入5TB数据,只有1TB是主机写入SSD盘的,另外写入的4TB数据是GC复制流程产生的。例如,上表中SSD顺序写性能10GB/s,4KB随机写性能52万IOPS,那么这个型号的SSD在4KB随机写极限情况下写放大就是WAF = 10*1E9 / (52 * 1E4 * 4096) = 4.7。GC导致的写放大不仅仅造成随机写性能低,还会影响SSD的寿命。因为导致Nand Flash芯片磨损的主要因素是擦写循环的次数,也就是往Nand Flash写入的数据量。存储系统是否有办法降低写放大?一种容易想到的办法是:把对SSD的随机写,全部改成顺序写。对这个想法,我的观点是:没必要为了减小SSD写放大这么做。如果你的系统本来就是追加写(Append-Only)的设计,那么对SSD自然就是顺序写,例如:RocksDB或者ZFS这种追加写的系统,不需要专门去做什么设计。如果存储系统是原地写(Update-In-place)的设计,改成追加写确实可以减小SSD内部的写放大,但是不能减小整个系统端到端的写放大,也就是写入Nand Flash数据量并没有减少。因为改成对SSD追加写,存储系统就要增加GC流程,也就是把写放大从SSD内部搬到了存储系统软件中。从更上层应用角度看,整体写放大并没有减少。上面做法也有另外一个好处,就是存储系统可以决定什么时候启动GC流程。如果你知道什么时候业务压力低,就在业务压力低的时候启动GC流程,这样可以把GC对性能的负面影响降低到最小。SSD内部GC流程,总是倾向于尽量晚一点启动,因为晚一点启动GC流程,就会有更多的数据页被覆盖,这样需要复制的有效页就少一点,写放大也就会小一点。在我看来,这个好处并不够大,不值得为了这个把存储系统改为追加写。另一个需要注意的问题是:如果你决定改为追加写模式,那么一定要做彻底一点,追加写数据块的长度要尽量大。一般来说,现在企业SSD内部都会在Flash芯片之间做RAID,这样一旦发生LDPC无法纠正的错误(例如die失效),就可以通过RAID来恢复数据。企业SSD的GC回收单元是Super Block,构成一个RAID组所有die上对应的Block共同构成一个Super Block,这个Super Block中有一个Block是用来存放parity的,其他Block用来存放用户数据。一个Super Block会被GC流程整体回收擦除。RAID导致了GC回收单元的尺寸相当大,例如物理Flash芯片的Block大小是64MB,如果构成一个RAID的Super Block中有300个Block,Super Block的大小64MB * 300 = 19 GB。如果存储系统改为追加写之后,存储系统使用8MB的回收单元做GC,对于19GB大小GC回收单元的SSD来说,这个上层存储系统依然是随机写,不是顺序写。SSD做GC的时候,一个19GB大小的回收单元中,会有很多8MB的空洞,也会有很多8MB的有效数据。SSD的GC依然需要做数据复制,无法起到减小SSD写放大的作用。除了顺序写可以降低WAF之外,TRIM也能起到显著降低WAF的作用。当GC选中一个Super Block进行回收的时候,如果这个Super Block中有很多数据页实际上是无效的,但是还没有被新数据覆盖,也没有TRIM命令把它删除掉,那么GC流程就必须把它当作有效数据页进行复制。如果有TRIM命令把这个页面标记为无效,GC流程就不需要复制它了,就减小了写放大。Linux的ext4文件系统的mount命令有一个参数-o discard,mount的时候加了这个参数就会给SSD下发TRIM命令。除了顺序写和TRIM之外,增加OP空间(Over Provisioning)页能减小WAF。因为OP空间大了,GC流程就可以晚一些启动,SSD就可以先处理更多的写和TRIM命令,被GC选中回收的super block中的有效页面就更少,需要复制的页面更少,WAF就会更小。还有一个能降低写放大的方法是FDP。存储系统先预测哪些数据寿命短,哪些数据寿命长,然后通过FDP把预测的数据寿命告诉SSD。SSD在写入数据的时候,把寿命相同的数据放到一个Super Block中,这样当某个Super Block被选中回收的时候,里面需要复制的有效数据页就非常少,WAF就会比较小。很多企业级SSD内部的FTL粒度是4KB的,也就是一个FTL表项指向一个4KB的Nand Flash物理地址。如果存储系统下发的写操作里面有很多小于4KB的写请求,例如512Bytes的,那么SSD就需要先把4KB数据读出来,修改512B,然后再把4KB写回去。这也会影响性能,另外也造成了另外一种写放大。但如果是512B的连续写,例如写WAL日志,这是不影响的。因为企业SSD内部有备电电容,主机写到SSD的512B数据,会被暂时放到内存中,凑齐4KB之后再写Flash。也就是说,存储系统应该尽量避免不足4KB的随机写。另外,现在市面上有些超大容量(30TB、60TB、…)QLC SSD的FTL粒度不是4KB,可能是16KB或者更大的,对它们要避免不足16KB的随机写。有些存储系统会在数据写入SSD之后,立刻读出做个校验,以确保数据被正确写入了。对于SSD来说,这个做法很不好。因为如果立刻读出Nand Flash刚写入的数据,此时Nand处于不稳定状态,误码率会比较高,这可能会影响性能,也可能导致SSD内部读电压调整算法的误动作。存储系统应该尽量避免写入数据之后立刻读。SSD是否会产生坏道?是的,不过SSD产生坏道的原因跟HDD不一样。现在的TLC/QLC Nand Flash介质的误码率是非常高的,有些甚至可以达到10E-4,也就是一个4KB数据页写入Nand Flash之后,再读出来的时候,几乎必然有几个bits是错的。这些错误就是靠LDPC算法和RAID算法来恢复的,但是SSD并不能保证数据一定能被恢复。遇到无法恢复的情况,就只能把这个LBA地址的数据标记为坏道。跟HDD的坏道不一样的是,这个坏道LBA地址再重写一遍,状态就恢复了,就不再是坏道了。我搞zStorage的时候,曾经被一个问题困扰:如果读SSD的时候遇到了坏道,是否意味着这个SSD里面还有很多坏道?是否需要对这个SSD做一次全盘扫描?是否需要把这个SSD从系统中踢掉?实际上,NVMe标准提供了一个命令LBA status,这个命令可以把这个SSD的所有坏道都返回给主机,主机只需要对这些坏道数据做恢复并重写就可以了,不需要对整个SSD做全盘扫描。因为全盘扫描相当耗费时间,并且影响性能。SSD自己也会在启动内部任务在后台做扫描,并且把无法恢复的数据块标记出来。当然,存储系统每隔一段时间做一次全盘扫描,也是有必要的,毕竟自己才是最可靠的。如果充分利用LBA status这个命令,这个全盘扫描的时间间隔可以长一点。还有一点是,工作温度对SSD的影响很大,温度升高的时候,Nand Flash的误码率会升高,这会影响SSD的性能,因为需要花更多时间来恢复数据。另外,工作温度对SSD的寿命也有负面影响,高温会加速Flash Cell的隧穿氧化层老化。我能想到的,就这么多了。本文不代表任何组织。文章内容也许有错误,欢迎批评指正。本文来自:码农黄师傅,作者:黄师傅
- 和AI这道正餐相比前几十年的科技总和只是前菜
- 起底全球估值NO1机器人公司创始人被称作下一个马斯克
- 70名员工估值70亿
- 英特尔还不能急着开心
- 英伟达50亿美元战投英特尔芯片双英历史性牵手
- OpenAI想杀入苹果腹地
- 当AI开始闹情绪打工人反向共情
- 微软Windows再次被指暗藏后门区别对待中国用户
- OpenAI首批智能硬件传出新消息
- AI短视频正在打败人类主播
- 对话董本洪企业AI依然存在认知偏差
- Figure向真实世界挤了挤
- 从看图识鸟到生态建模的硬科学
- 英特尔联姻英伟达是自救还是颠覆
- 即将到来的智能战争不可避免的未来
- 黄仁勋50亿美元入股英特尔英伟达一统GPUx86生态
- 芯片圈最离谱的CP即将改写行业规则
- 把上万个AI丢在一个小镇里打工会发生什么
- 官宣特斯拉OptimusAI团队负责人离职
- 2025年2nm芯片为何集体跳票
- 朱啸虎搬离中国假装不是中国AI创业公司是没有用的
- 宝可梦游戏成了AI的最佳训练场
- 让出门问问盈利的一场内部革命裁员降薪取消中层
- AI正在建立自己的经济体人类准备好被降维打击了吗
- 微软广告终于找到了接盘侠
- AI叙事逐渐离谱
- 一颗18纳米芯片成了英特尔最后的救赎
- 泰勒斯威夫特再次陷入AI风波但这次粉丝倒戈了
- 姚顺宇离职背后国产大模型已经上桌了
- 智能体崛起
- 史上最强打工人老板布置的杂活被他干成了诺贝尔奖
- DeepSeek等开源模型更浪费token吗
- 2025年诺贝尔物理学奖发得合理吗
- 番茄小说的AI难题
- 固态电池再受吹捧这次不是狼来了
- 投资马斯克20亿英伟达构建AI资本帝国只用了一个月
- 当AI开始设计芯片
- 别整天喊科学没突破了今年诺奖全是高手
- Arduino被收购天堂还是地狱
- ChatGPT做电商了
- 日入2千的飞手为何集体逃离
- 湿件登场生物混合机器人开辟第二赛道
- 20个30岁以下敢把世界掀翻的疯子正在集结
- 华人AI大神霸气离职一篇博客挑明中美大模型暗战
- 当AI恐慌席卷硅谷这位管理2000人的CEO却说AI不会抢你的工作
- 最后的学术净土也脏了顶尖数学家虚假论文数量正在惊人增长
- 30年前被评审嫌弃无用的材料为何能赢得诺贝尔化学奖
- 智元原力无限双双拿下亿元大单具身智能落地时刻到了
- 把12个AI凑到一起打工它们竟然搞起小团体
- 杨振宁的32项科学贡献
- 海内外众学者发声痛别杨振宁他仍在塑造物理的未来
- 李飞飞世界模型大更新实时生成3D世界只要一块GPU
- 新凯来的高端示波器是什么水平
- 电磁弹射技术如何让航母战力惊人飞跃
- 300多个APP想让我和AI谈感情
- 黄仁勋英伟达在中国的市场份额从95变成了0
- 一枚戒指估值777亿
- 张鹏对谈朱啸虎储瑞松傅盛AgenticAI时代不要什么东西都自己闷头做
- 霸气台积电才是AI时代最强王者
- 哈佛新研究追踪6200万人AI冲击下这些985211反而比二本更难找工作
- 如果我死了请不要用Sora复活我
- 着急上市的智谱和六小龙得证明自己能赚钱
- 被困住的日本数据中心在AI梦电老虎与扰民噩梦中挣扎
- 英伟达Blackwell芯片在美量产下线
- 阿里字节腾讯集体重仓新风口
- 阿布扎比重投AI
- 你骂AI越狠它反而越聪明
- ChatGPT欧洲付费用户增长停滞
- 杨振宁走了物理学的黄金时代落幕了
- 吉利战略收缩李书福的儿子也不能例外
- 仅需一块GPU李飞飞最新世界模型来了
- AI应用概念龙头回来了
- 5位专家用10案例讲清工业大模型落地难点
- 在中国哪家互联网平台真把社会责任当回事
- 这只年底睁开的超级眼睛为何是我国科技自立自强的利器
- 世界进入新瓦特时代
- AI交易大赛结果出炉只有中国AI赚钱跟GPT5反着买别墅靠大海
- 氮化镓GaN要变天了
- 中国AI赢下第一场金融实测
- AI漫剧比短剧更短剧
- 存储系统如何用好SSD
- 小鹏机器人里面是不是真人全球网友吵翻了CEO现场扒开衣服自证
- 中国最活跃AI基金的闭门会上10条关键思考
- 马斯克万亿薪酬包特斯拉股东批准了
- 逆袭的中国铁锂从过剩产能到反制西方的战略核弹
- 我把DeepSeek装进毛绒玩具年入过亿
- 人形机器人逼近产业化关口谁在买
- 一篇文章告诉你国产GPU背后的技术和商业路线异同
- 没人想成为北宇树了
- 4个金融男搞音乐1年赚超1亿美元
- 对话马修科布AI不具备创造性我们为什么会信任机器
- 打破信息茧房可能是个伪命题
- 地球快养不起AI了上太空后又便宜了马斯克
- 从智能客服到数字伙伴小赢科技用户体验全面升级
- 全球半导体产业陷入材料资源困局
- OpenAI和微软的关系没那么糟跟英伟达也没那么好
- 人工智能被频繁写进裁员理由AI真的在大规模取代人类工作吗
- 黄瑜人工智能对脑力劳动的取代已迅速铺开2025年终特辑14
- AI玩具赛道打响发令枪
- 有消息称月之暗面将借壳上市知情人士予以否认
- 罗振宇2026时间的朋友跨年演讲全文稿
- 一年从0到300万美元ARR非典型AI创业者斩获千万融资
- 围裙AI与万元学费2025教育的冰与火I年度盘点
- 不再造硬件的罗永浩办了一场硬件发布会
- 迈向无限企业AI智能体打开创新想象新边界
- 从明天起关心粮食蔬菜算法和老己
- 罗永浩为什么要吃力不讨好的搞这场科技春晚
- 你好2026青年站在这里
- 在滴水湖畔我们把宇宙搬到了路边
- CityReadsin11YearsAnotherBeadontheString
- Kimi账上100亿杨植麟我们不着急上市
- OpenAI人均股权薪酬超千万
- 这个真相有点颠覆为什么假装成功比努力成功更容易
- ClaudeCodeCursor都过时了硅谷顶流大牛炸场暴论AI编程练满2000小时才算会用荒废一年世界级大神也成实习生水平
- 谷歌三年逆袭草蛇灰线伏脉千里
- 2025年最挣钱的副业是养一只机器人
- 华人掌舵MetaAI的格局已经初步形成了
- 中国人的精神状态藏在这10个隐形冠军背后
- 胡翌霖大问题在当下重新变得充满争议2025年终特辑09
- CES2026的科技年会上我们要赌一个怎样的未来