在昨天发表的文章下面,有粉丝朋友要求“评价下小米256GB多8GB的技术”。小编也是好奇,本文就让我们一起来看看这个“高科技”背后的秘密。(提前声明:本文内容仅代表个人观点,如果不当之处,小米公司不要投诉我哈,我支持雷总!)
首先,让我们看看雷总在小米14发布会上对这个“小创新”的阐述:
发布会内容中,提到的256GB内存,其实就是一个UFS4.0设备(基于NAND存储颗粒的移动存储产品)。这里还有一个名词“FBO焕新存储”。小编认为这个就是可以多8GB的关键。
根据公开信息查到,针对UFS文件系统功能优化FBO特性是由小米与西部数据联合研发,并得到了其他厂商(比如美光、三星、海力士、铠侠等)支持,合入了UFS 4.0规范,在2022年8月正式发布在JEDEC组织。基于这一点,也得给小米点这个赞,创新不易!
小米工程师向linux社区提交的UFS FBO功能优化patch记录:
基于文件优化特性(FBO)是一种帮助移动设备在其使用寿命内保持性能优势的新技术,主要目的是为了解决手机的碎片化。
碎片化的本质:碎片化会导致数据存储效率低下。随着时间的推移,当一个存储设备被填满并且无法再按顺序写入数据时,或者当一个数据更新过程发生时,碎片化就会产生。在更新过程中,新的NAND块被使用,而未更新的数据仍然保留在原始的NAND块中。即使数据在逻辑上是顺序更新的,它也可能不是物理NAND块中的顺序存储。当这种情况发生时,数据会分散(随机)存储在存储设备的不同位置上。这反过来会导致较慢的性能,因为设备需要从各个物理位置收集数据时进行多次读取。
小米14中的UFS 4.0,跟SSD一样,底层存储颗粒都是NAND。那你知道NAND闪存是怎么工作的吗?其实,它就是由很多个晶体管组成的。这些晶体管里面存储着电荷,代表着我们的二进制数据,要么是“0”,要么是“1”。NAND闪存原理上是一个CMOS管,有两个栅极,一个是控制栅极(Control Gate), 一个是浮栅(Floating Gate). 浮栅的作用就是存储电荷,而浮栅与沟道之间的氧化层(Oxide Layer)的好坏决定着浮栅存储电荷的可靠性,也就是NAND闪存的寿命。
但是呢,这些晶体管的电荷可不是永久存在的。它们就像一群顽皮的孩子,喜欢跑来跑去。如果你经常让它们进行“擦除”和“写入”的操作(NAND闪存中,P/E Cycle,也称为擦除次数),它们就会觉得累,电荷的存储能力也会逐渐下降(浮栅与沟道之间的氧化层被磨损的越来越严重,导致浮栅中电子的控制越来越艰难)。直到有一天,它们再也不想存储电荷了,那这个时候,你的SSD的寿命也就差不多了。
所以呢,SSD寿命评估的底层机理,其实就是计算NAND闪存的擦除和写入次数(P/E Cycle)。每个晶体管都有一个固定的擦除和写入次数,就像我们的腿一样,跑多了会累,会磨损。当这些晶体管达到一定的磨损程度时,它们就再也存储不了电荷了,这时候你的SSD可就要退休了哦!
目前市面上主要流通的就是4种NAND类型:SLC、MLC、TLC、QLC。随着每个寿命从高到低依次是SLC>MLC>TLC>QLC.
随着单个cell含有的bit数越多,NAND的可靠性也会有所降低。同时写延迟也在不断的增加。SLC写延迟在0.5ms级别,到QLC写延迟达到10-20ms,40倍的差距。
NAND存储产品的寿命,最怕垃圾数据太多,也就是碎片化严重,会导致NAND颗粒的写放大增加,降低NAND的寿命。
举个例子,最坏情况下的,假如我要写入一个4KB的数据Z覆盖A,并恰好目标块没有空余的页区,需要进行GC回收。这个时候就需要把B、C、D、E、F五分数据都搬走,然后擦除整个数据块,擦除完成后再整体写入6个数据页。这个整个过程,Host虽然只写了4KB的数据,但实际过程中,由于GC的问题,NAND最终写入了24KB。那么写放大WAF=24KB/4KB=6.
SSD产品中影响WAF的因素有很多,其中“OP预留空间”是跟本次雷总说的魔改8GB的空间有关。
-
SSD FTL算法的设计会影响写入放大的大小
-
Wear Leveling,WL磨损均衡:这一机制主要是通过均衡所有的闪存颗粒,从而延长整体的使用寿命,然而依旧是增加整体的写放大
-
Over-Provisioning,OP预留空间:也会影响NAND写入的比例,最终影响写放大
-
Garbage Collection,GC垃圾回收:比如上面的例子,就是GC垃圾回收搬迁数据,擦除数据块后写入带来了整体写放大提升。
-
业务读写的数据模型:随机写和顺序写对NAND的写入比例有非常大的影响,直接影响写放大的系数
-
系统层的TRIM操作:会影响invalid无效数据是否在GC过程中搬迁,对写放大影响也有重要的作用。
预留空间OP是什么呢?
当一块SSD的数据写满时,需要额外的空间在启动垃圾回收之前接受新写入的数据,这块额外的空间,我们就称为预留空间。当然,这块预留空间是对用户不可见的。
预留空间主要分为两个部分:
(1)由于标称容量与NAND闪存计算差异造成的本征预留空间OP1。
市场上SSD标称的容量是按照千进制(1000)来计算的,但是NAND闪存的容量是按照1024计算的。
我们简单列个式子计算一下:
市场SSD标称 1GB(GigaByte)= 1000MB= 1000*1000KB= 1000*1000*1000Byte= 10^9Byte (1,000,000,000Byte).
NAND闪存 1GB(GibiByte)= 1024MB= 1024*1024KB =1024*1024*1024Byte =2^30Byte (1,073,741,824Byte).
这两个计算方式之间正好相差7.37%。所以说SSD本征的预留空间就有7.37%。
(2)SSD由于性能要求而预留空间OP2,这部分也是标称OP。
这个部分预留空间主要用于垃圾回收GC,存储SSD主控的固件(Firmware),备用数据块(Spare Blocks)等。
标称预留空间OP=(SSD物理总容量-用户数据空间)/用户数据空间
从上面这个表格中我们看到标称预留空间(Marketed OP)为0%的时候,其实这时的内部仍然有7%的本征预留空间。
预留空间OP有什么好处?预留空间牺牲了用户数据空间,那TA要是再没有什么好处,用户就真的要崩溃咯。其实预留空间OP的好处有很多:提高写入性能、降低写放大、提升NAND闪存使用寿命等。
所以,结合上面几个关键信息点,这个事情的逻辑应该是这样:
-
小米研发了基于文件优化的特性FBO,减小碎片化,增加NAND的顺序写入,降低了写放大,提升了UFS使用寿命。
-
原本UFS 4.0 256GB预留了10GB空间,用于坏块管理和FW垃圾回收等功能,现在由于有FBO的出现,只需要2GB就可以完成原本10GB的工作,这样就省出来了8GB给用户。
小编理解大概是这个逻辑,不知道各位是否有其他的看法,欢迎评论区留言交流!
小编每日撰文不易,如果您看完有所受益,欢迎点击文章底部左下角“关注”并点击“分享”、“在看”,非常感谢!
精彩推荐:
-
SSD IO性能优化是一项复杂但很有趣的工程
-
双11即将来临,挑选SSD硬盘最全避坑指南
-
性能领域:你知道的越多,不知道的也就越多
-
NVMe SSD:ZNS与FDP对决,你选谁?
-
如何通过优化Read-Retry机制降低SSD读延迟?
-
关于硬盘质量大数据分析的思考
-
存储系统性能优化中IOMMU的作用是什么?
-
全景解析SSD IO QoS性能优化
-
NVMe IO数据传输如何选择PRP or SGL?
-
浅析nvme原子写的应用场景
-
多维度深入剖析QLC SSD硬件延迟的来源
-
浅析PCIe链路LTSSM状态机
-
浅析Relaxed Ordering对PCIe系统稳定性的影响
-
实战篇|浅析MPS对PCIe系统稳定性的影响
-
浅析PCI配置空间
-
浅析PCIe系统性能
-
存储随笔《NVMe专题》大合集及PDF版正式发布!