欢迎光临散文网 会员登陆 & 注册

【知乎】从技术角度如何看待小米发布会上提出的“256GB+8GB”存储创新技术?

2023-10-28 21:22 作者:ACFUN-AK  | 我要投稿

 从技术角度如何看待小米发布会上提出的“256GB+8GB”存储创新技术?

Luv Letter

Life can be much broader.

有人拿个专利说 SSD 可以把一部分空间开成 QLC NAND 用. 理论上可行, 但问题是如果这个 NAND/主控能当 QLC 用, 那容量增加 20% 都不难, 而不是 8/256=3%.

所以在有更明确的证据之前, 小米微博这条说法基本上等于缩 OP, 无非「一起做了大量实验和验证,确实对质量和性能没有影响」这句话有多靠谱, 一方面得看这玩意落地到底如何, 另外一方面也看不通人群对小米这个品牌的感受如何.

但这么做大概率会产生一定比例的风险/负面影响, 毕竟 7% 的 OP 算是行业对入门 SSD 的经验比例, op 缩过这个比例基本上就是拆东墙补西墙, 牺牲性能和寿命去换 3% 的容量.

另外一方面问题就是, OP 这个东西难道只能优化笼统的读写性能?

年中的时候读到一篇文章(原文链接找不到了), 提到 Apple SSD 的 SLC 缓内 Q1T1 read 的性能高达 230K.

这什么概念呢: 这就这是微秒级别的延迟, 比一般 SSD 在这个指标上高了一个数量级, 跟 optane 在一个水平上.

很多人不知道: App 启动, 它的二进制指令不是启动的时候整个加载到内存里的.

而是先整个映射到虚拟内存里(懒加载), 哪里被执行到, 就通过缺页中断机制加载到物理内存里.


所以 iOS 上基于二进制的 Native App 都会去做二进制重排, 增加启动过程中二进制符号的命中率, 这样减少缺页中断的次数, 提升启动的速度.

而这些代码页面, 从系统的视角来看, 叫做「已缓存文件」, 曾经是「已用内存」的一部分, 现在通常单独列出, 并当作「可用内存」.

所以缓存文件这个东西就很神奇, 一方面他有一部分(比如当前运行 App 的代码/已打开但未修改的文件)在被频繁读取, 另外一方面, 如果你当前的 App 进入后台, 这部分代码/文件的访问频率就会迅速降低, 当你的前台 App 需要内存的时候, 这部分后台 App 的代码/已打开但未修改的文件就会被先清出去(因为这些数据都在持久存储上, 而程序运行中的堆栈要回收/压缩/放到外存, 那代价就大很多).

另外一方面问题就是: 如果缓存被越挤越小, 可能会进入一个「目前的缓存刚好够前台 App 的命中」, 如果要切 App 的时候, 那重新加载回来就看 SSD 的随机单线程 4K 性能了. 因为内存页面大小就是 4K(x86)/16K(aarch64|Apple SIlicon).

所以 Apple 这边借助 SoC 自研主控+PCIe NVMe NAND 实现如此夸张的 Q1T1 性能, 就可以缓解高内存压力下的加载性能缺口.

因此这就形成了软件和硬件设计的闭环.

顺带 PCIe NAND 有着更好的电气性能, 能让 NAND 分布主板两侧都可以稳定地和 SoC 通信, 这样 NAND 就不必聚集在一起堆积热量, 还能利用两侧进风口的 AirFlow 降低温度, 提升稳定性和性能.

包括实现基于插槽的可替换设计(虽然价格还是贵的一批).

但安卓这边能做到吗? 虽然安卓这里也有类重排提升加载速度的做法, 但问题是安卓的类 JVM 的方法区基本不是来自文件映射, 而是加载器加载, 虽然能动态加载/unload, 但本身有一定开销.

同时就算有足够大的 op SLC Cache, 安卓 SoC 基本就没有实现内置主控的, 全部是 UFS 协议(UFS 主控和 NAND 封装在一起, 甚至还有封装 LPDDR DRAM 的 eMCP).

这些实现方案自然没法把 SLC Cache 的潜力发挥出来, 结果就是 op cahce 被当作了「加量不加价」的筹码, 还被被包装成了「我们这个世界确实需要这样优秀的工程师,敢于创新,敢于打破常规,让我们的世界变得更美好」.

说到底还是价格战的一部分, 只不过现实中拆承重墙的会给自己和别人带来惨痛的代价, 而手机上缩 op 无非是让消费者觉得好像「赚到」了一点, 但不过是一时的爽快, 只要实际使用中的占用没满, 多出来的这 3% 容量其实一点影响都没, 反倒是固定 op 变少带来的问题就会多很多.

以及想想看 iOS 这边多少 App 支持 iCloud 备份(或者说是主要存储, 当然微信是出了名的占本地空间), 海外倒是很多 App 能适配 Google One(Drive), 但国内呢?





发布于 2023-10-28 19:25

 

Eidosper

冰消雪融,花为汝开~

更新:存储毕竟是个非常卷的行业,FTL算法基本上把所有能想到的东西都用上了,这样凭空出8GB来,我个人不是很相信研究人员想不到这个方法。

有些朋友提到了一个混合存储的专利,按照那个专利的描述,256GB的TLC存储仅需要拿出20%的容量转换为QLC就能有大约17GB的额外空间,所以可以推测并非混合存储。而且假如用了TLC/QLC混合存储策略,按照现在厂商发布会的节奏,理论上会提到并给这个算法取一个霸气的名字。

尤其是像三星的原厂SSD都没有类似的技术,以三星的存储实力都没做到+SSD主控强大的算力都没做,那么手机的UFS主控算力更低、cache更小。为了更大的空间和更久的寿命,十几年前有一家叫SandForce的SSD主控厂甚至给自己的主控上了压缩算法,但后来也没听说有什么跟进


NAND能压榨空间的地方有三个:坏块、OOB、OP。其中坏块好理解,生产时候因为工艺缺陷导致少量坏块;OOB是用于纠错正常数据的,现在TLC的几千次擦除寿命可以说有一半的功劳是纠错算法;OP是预留的区域,也是正常区域。根据评论区描述,firmware也会预留一部分区域自用,这部分也可以归类到OP区域中。

所以小米用的哪一块区域暂且不清楚,不过可能会从坏块区整出来一些空间。但如果试图从OOB或者坏块区域压榨空间,势必要修改FTL算法。如果有这种算法的改变,应该会提到。

如果从OOB压榨空间,那么相当于调节了Page的大小。OOB用于存放LPN、纠错编码数据等。越强大的纠错码,其需要的OOB空间越大,现代TLC的长寿命有很大一部分是纠错编码贡献的。所以从OOB抠空间,有可能会影响纠错码,而且抠出来的空间需要对FTL算法进行大的改动,对性能影响也很难说,是否能在UFS主控上部署也很难说,概率较低。

如果是从坏块压榨空间,那么理论上这种技术应该会在主控更加强大的消费级SSD上见到,但是似乎目前没有见到这种技术。


即使小米调整OP区域尺寸,由于安卓现在用的是三星创立、摩托改进、华为最终实现部署到消费市场的f2fs,这个fs本身具备flash friendly特性,一定程度上能够降低对flash的损耗。所以最终小米用f2fs特性来缩小op区域也未必一定会缩短寿命——毕竟f2fs自带冷热数据分离等特性,也能一定程度上减小这些问题。

但…f2fs是安卓目前标准的fs格式…

论文提到的一种“压榨空间”的方法

更新,看了一个学妹的论文感觉不一定是拿OP空间做的。但是这种方案需要修改FTL算法,现在的UFS闪存来说FTL算法是否可定制暂且不是很清楚,即使可实现难度也较大。

接下来看论文:

字线就是垂直那条线。

可以知道每die约为310Gb(含OOB)=277.31Gb(仅数据区域)+33.04Gb(OOB区域),应该是按照256Gb die销售的。277-256=21Gb

假如一个8die封装的颗粒,那么总容量应该是277GB左右。

传统算法:坏一页屏蔽整块。

不过我不确定这个“传统算法”有多传统,尤其是现在的纠错方式如此强大,应该普遍会有高强度的纠错编码。论文的“传统算法”很有可能是上世纪才会用的老算法,不一定能代表当前UFS主控的算法。

其中一个字线有三个page,坏一个,三个都不能用:

所以设计了一个增加了1bit状态信息的算法:

如果是按照这个论文的方法,是有可能从出厂自带的“坏块”中搞出来一些额外容量的。

至于使用中的坏块,因为WL算法的存在,当一块坏了整条线也基本上都消耗的差不多了,即使用了这个算法收益也不大,所以只有出厂坏块用这个算法收益比较大。

如果是这样的话,那确实算是一种有用的新技术。如果只是调整OP的大小,那其实没什么意义。

OP空间的情况

所有的的ssd都有op空间,没有op空间连垃圾回收都可能没法做,正常写入可能都办不到。

更大的op空间有助于降低gc带来的写放大,带来更长的使用寿命,所以往往越高端的ssd有越大的op空间。


3d nand一片的容量也是固定的,谁买都是这个容量。只要是同款颗粒,大家的容量+op容量+初始坏块屏蔽容量加起来就是一样的。

如果不考虑初始坏块屏蔽带来的少量误差,同颗粒情况下可以认为各家的总可写入容量是一致的,区别就是给op空间留大点少点。

为什么需要有OP空间

Nand有一个特点:写了不能直接擦除。写入的单位是16KB大小的page,擦除的单位是block(不同厂商block尺寸不一样,多数是几百个page)。一个page写过之后,必须是整个block擦了,这个page才能重写。

我们图示一下过程,我们有个空白的nand:

然后写入了一些数据:

然后删除了一些数据:

然后又写入、删除了一部分数据:

这个时候如果想继续使用,怎么办呢?把下面的那个“全部都是删除”的block擦掉:

好的,那我们继续写入:

这时候如果还想写一个page怎么办呢?很简单,把有效页迁移到op区:

然后擦除之前的block:

然后把OP区的block交换回来:

交换之后就可以继续写入了,这就是为什么需要有OP空间。但是这样OP空间是不是有一个Block就行了?非也。

上图我们有5个空闲page,假如我们需要写入12个page:

很显然,需要写入12,只剩下5,那么必须得回收两个:

擦除掉无效块:

交换block:

更大的OP区能一定程度上提高速度,同时能一定程度上增加寿命,当然如何增加寿命这个说来话长了就先不赘述了。所以越是高端SSD通常OP区域越大。


其实可以把op区显示展示,但ssd一开始设计是要适应机械硬盘的接口,所以把这部分操作用ftl隐藏起来了。

但是无论显示与否,盘上所有的可用block都参与活动(除非主控安排了一些不参与活动的block留作自用,例如应对突然断电之类的情况),不存在说OP区就是“白白浪费”的情况。

编辑于 2023-10-28 03:24


【知乎】从技术角度如何看待小米发布会上提出的“256GB+8GB”存储创新技术?的评论 (共 条)

分享到微博请遵守国家法律