【知乎】從技術(shù)角度如何看待小米發(fā)布會上提出的“256GB+8GB”存儲創(chuàng)新技術(shù)?
?從技術(shù)角度如何看待小米發(fā)布會上提出的“256GB+8GB”存儲創(chuàng)新技術(shù)?

Luv Letter
Life can be much broader.
有人拿個專利說 SSD 可以把一部分空間開成 QLC NAND 用. 理論上可行, 但問題是如果這個 NAND/主控能當(dāng) QLC 用, 那容量增加 20% 都不難, 而不是 8/256=3%.
所以在有更明確的證據(jù)之前, 小米微博這條說法基本上等于縮 OP, 無非「一起做了大量實驗和驗證,確實對質(zhì)量和性能沒有影響」這句話有多靠譜, 一方面得看這玩意落地到底如何, 另外一方面也看不通人群對小米這個品牌的感受如何.
但這么做大概率會產(chǎn)生一定比例的風(fēng)險/負(fù)面影響, 畢竟 7% 的 OP 算是行業(yè)對入門 SSD 的經(jīng)驗比例, op 縮過這個比例基本上就是拆東墻補西墻, 犧牲性能和壽命去換 3% 的容量.
另外一方面問題就是, OP 這個東西難道只能優(yōu)化籠統(tǒng)的讀寫性能?
年中的時候讀到一篇文章(原文鏈接找不到了), 提到 Apple SSD 的 SLC 緩內(nèi) Q1T1 read 的性能高達(dá) 230K.

這什么概念呢: 這就這是微秒級別的延遲, 比一般 SSD 在這個指標(biāo)上高了一個數(shù)量級, 跟 optane 在一個水平上.
很多人不知道:?App 啟動, 它的二進(jìn)制指令不是啟動的時候整個加載到內(nèi)存里的.
而是先整個映射到虛擬內(nèi)存里(懶加載), 哪里被執(zhí)行到, 就通過缺頁中斷機制加載到物理內(nèi)存里.


所以 iOS 上基于二進(jìn)制的 Native App 都會去做二進(jìn)制重排, 增加啟動過程中二進(jìn)制符號的命中率, 這樣減少缺頁中斷的次數(shù), 提升啟動的速度.

而這些代碼頁面, 從系統(tǒng)的視角來看, 叫做「已緩存文件」, 曾經(jīng)是「已用內(nèi)存」的一部分, 現(xiàn)在通常單獨列出, 并當(dāng)作「可用內(nèi)存」.


所以緩存文件這個東西就很神奇, 一方面他有一部分(比如當(dāng)前運行 App 的代碼/已打開但未修改的文件)在被頻繁讀取, 另外一方面, 如果你當(dāng)前的 App 進(jìn)入后臺, 這部分代碼/文件的訪問頻率就會迅速降低, 當(dāng)你的前臺 App 需要內(nèi)存的時候, 這部分后臺 App 的代碼/已打開但未修改的文件就會被先清出去(因為這些數(shù)據(jù)都在持久存儲上, 而程序運行中的堆棧要回收/壓縮/放到外存, 那代價就大很多).
另外一方面問題就是: 如果緩存被越擠越小, 可能會進(jìn)入一個「目前的緩存剛好夠前臺 App 的命中」, 如果要切 App 的時候, 那重新加載回來就看 SSD 的隨機單線程 4K 性能了. 因為內(nèi)存頁面大小就是 4K(x86)/16K(aarch64|Apple SIlicon).
所以 Apple 這邊借助 SoC 自研主控+PCIe NVMe NAND 實現(xiàn)如此夸張的 Q1T1 性能, 就可以緩解高內(nèi)存壓力下的加載性能缺口.
因此這就形成了軟件和硬件設(shè)計的閉環(huán).
順帶 PCIe NAND 有著更好的電氣性能, 能讓 NAND 分布主板兩側(cè)都可以穩(wěn)定地和 SoC 通信, 這樣 NAND 就不必聚集在一起堆積熱量, 還能利用兩側(cè)進(jìn)風(fēng)口的 AirFlow 降低溫度, 提升穩(wěn)定性和性能.
包括實現(xiàn)基于插槽的可替換設(shè)計(雖然價格還是貴的一批).

但安卓這邊能做到嗎? 雖然安卓這里也有類重排提升加載速度的做法, 但問題是安卓的類 JVM 的方法區(qū)基本不是來自文件映射, 而是加載器加載, 雖然能動態(tài)加載/unload, 但本身有一定開銷.
同時就算有足夠大的 op SLC Cache, 安卓 SoC 基本就沒有實現(xiàn)內(nèi)置主控的, 全部是 UFS 協(xié)議(UFS 主控和 NAND 封裝在一起, 甚至還有封裝 LPDDR DRAM 的 eMCP).
這些實現(xiàn)方案自然沒法把 SLC Cache 的潛力發(fā)揮出來, 結(jié)果就是 op cahce 被當(dāng)作了「加量不加價」的籌碼, 還被被包裝成了「我們這個世界確實需要這樣優(yōu)秀的工程師,敢于創(chuàng)新,敢于打破常規(guī),讓我們的世界變得更美好」.
說到底還是價格戰(zhàn)的一部分, 只不過現(xiàn)實中拆承重墻的會給自己和別人帶來慘痛的代價, 而手機上縮 op 無非是讓消費者覺得好像「賺到」了一點, 但不過是一時的爽快, 只要實際使用中的占用沒滿, 多出來的這 3% 容量其實一點影響都沒, 反倒是固定 op 變少帶來的問題就會多很多.
以及想想看 iOS 這邊多少 App 支持 iCloud 備份(或者說是主要存儲, 當(dāng)然微信是出了名的占本地空間), 海外倒是很多 App 能適配 Google One(Drive), 但國內(nèi)呢?
發(fā)布于 2023-10-28 19:25
?

Eidosper
冰消雪融,花為汝開~
更新:存儲畢竟是個非常卷的行業(yè),F(xiàn)TL算法基本上把所有能想到的東西都用上了,這樣憑空出8GB來,我個人不是很相信研究人員想不到這個方法。
有些朋友提到了一個混合存儲的專利,按照那個專利的描述,256GB的TLC存儲僅需要拿出20%的容量轉(zhuǎn)換為QLC就能有大約17GB的額外空間,所以可以推測并非混合存儲。而且假如用了TLC/QLC混合存儲策略,按照現(xiàn)在廠商發(fā)布會的節(jié)奏,理論上會提到并給這個算法取一個霸氣的名字。
尤其是像三星的原廠SSD都沒有類似的技術(shù),以三星的存儲實力都沒做到+SSD主控強大的算力都沒做,那么手機的UFS主控算力更低、cache更小。為了更大的空間和更久的壽命,十幾年前有一家叫SandForce的SSD主控廠甚至給自己的主控上了壓縮算法,但后來也沒聽說有什么跟進(jìn)。
NAND能壓榨空間的地方有三個:壞塊、OOB、OP。其中壞塊好理解,生產(chǎn)時候因為工藝缺陷導(dǎo)致少量壞塊;OOB是用于糾錯正常數(shù)據(jù)的,現(xiàn)在TLC的幾千次擦除壽命可以說有一半的功勞是糾錯算法;OP是預(yù)留的區(qū)域,也是正常區(qū)域。根據(jù)評論區(qū)描述,firmware也會預(yù)留一部分區(qū)域自用,這部分也可以歸類到OP區(qū)域中。

所以小米用的哪一塊區(qū)域暫且不清楚,不過可能會從壞塊區(qū)整出來一些空間。但如果試圖從OOB或者壞塊區(qū)域壓榨空間,勢必要修改FTL算法。如果有這種算法的改變,應(yīng)該會提到。

如果從OOB壓榨空間,那么相當(dāng)于調(diào)節(jié)了Page的大小。OOB用于存放LPN、糾錯編碼數(shù)據(jù)等。越強大的糾錯碼,其需要的OOB空間越大,現(xiàn)代TLC的長壽命有很大一部分是糾錯編碼貢獻(xiàn)的。所以從OOB摳空間,有可能會影響糾錯碼,而且摳出來的空間需要對FTL算法進(jìn)行大的改動,對性能影響也很難說,是否能在UFS主控上部署也很難說,概率較低。
如果是從壞塊壓榨空間,那么理論上這種技術(shù)應(yīng)該會在主控更加強大的消費級SSD上見到,但是似乎目前沒有見到這種技術(shù)。
即使小米調(diào)整OP區(qū)域尺寸,由于安卓現(xiàn)在用的是三星創(chuàng)立、摩托改進(jìn)、華為最終實現(xiàn)部署到消費市場的f2fs,這個fs本身具備flash friendly特性,一定程度上能夠降低對flash的損耗。所以最終小米用f2fs特性來縮小op區(qū)域也未必一定會縮短壽命——畢竟f2fs自帶冷熱數(shù)據(jù)分離等特性,也能一定程度上減小這些問題。
但…f2fs是安卓目前標(biāo)準(zhǔn)的fs格式…
論文提到的一種“壓榨空間”的方法
更新,看了一個學(xué)妹的論文感覺不一定是拿OP空間做的。但是這種方案需要修改FTL算法,現(xiàn)在的UFS閃存來說FTL算法是否可定制暫且不是很清楚,即使可實現(xiàn)難度也較大。
接下來看論文:

字線就是垂直那條線。

可以知道每die約為310Gb(含OOB)=277.31Gb(僅數(shù)據(jù)區(qū)域)+33.04Gb(OOB區(qū)域),應(yīng)該是按照256Gb die銷售的。277-256=21Gb
假如一個8die封裝的顆粒,那么總?cè)萘繎?yīng)該是277GB左右。

傳統(tǒng)算法:壞一頁屏蔽整塊。
不過我不確定這個“傳統(tǒng)算法”有多傳統(tǒng),尤其是現(xiàn)在的糾錯方式如此強大,應(yīng)該普遍會有高強度的糾錯編碼。論文的“傳統(tǒng)算法”很有可能是上世紀(jì)才會用的老算法,不一定能代表當(dāng)前UFS主控的算法。


其中一個字線有三個page,壞一個,三個都不能用:

所以設(shè)計了一個增加了1bit狀態(tài)信息的算法:


如果是按照這個論文的方法,是有可能從出廠自帶的“壞塊”中搞出來一些額外容量的。
至于使用中的壞塊,因為WL算法的存在,當(dāng)一塊壞了整條線也基本上都消耗的差不多了,即使用了這個算法收益也不大,所以只有出廠壞塊用這個算法收益比較大。
如果是這樣的話,那確實算是一種有用的新技術(shù)。如果只是調(diào)整OP的大小,那其實沒什么意義。
OP空間的情況
所有的的ssd都有op空間,沒有op空間連垃圾回收都可能沒法做,正常寫入可能都辦不到。
更大的op空間有助于降低gc帶來的寫放大,帶來更長的使用壽命,所以往往越高端的ssd有越大的op空間。

3d nand一片的容量也是固定的,誰買都是這個容量。只要是同款顆粒,大家的容量+op容量+初始壞塊屏蔽容量加起來就是一樣的。
如果不考慮初始壞塊屏蔽帶來的少量誤差,同顆粒情況下可以認(rèn)為各家的總可寫入容量是一致的,區(qū)別就是給op空間留大點少點。
為什么需要有OP空間
Nand有一個特點:寫了不能直接擦除。寫入的單位是16KB大小的page,擦除的單位是block(不同廠商block尺寸不一樣,多數(shù)是幾百個page)。一個page寫過之后,必須是整個block擦了,這個page才能重寫。
我們圖示一下過程,我們有個空白的nand:
然后寫入了一些數(shù)據(jù):
然后刪除了一些數(shù)據(jù):
然后又寫入、刪除了一部分?jǐn)?shù)據(jù):
這個時候如果想繼續(xù)使用,怎么辦呢?把下面的那個“全部都是刪除”的block擦掉:
好的,那我們繼續(xù)寫入:
這時候如果還想寫一個page怎么辦呢?很簡單,把有效頁遷移到op區(qū):
然后擦除之前的block:
然后把OP區(qū)的block交換回來:
交換之后就可以繼續(xù)寫入了,這就是為什么需要有OP空間。但是這樣OP空間是不是有一個Block就行了?非也。
上圖我們有5個空閑page,假如我們需要寫入12個page:

很顯然,需要寫入12,只剩下5,那么必須得回收兩個:

擦除掉無效塊:

交換block:


更大的OP區(qū)能一定程度上提高速度,同時能一定程度上增加壽命,當(dāng)然如何增加壽命這個說來話長了就先不贅述了。所以越是高端SSD通常OP區(qū)域越大。
其實可以把op區(qū)顯示展示,但ssd一開始設(shè)計是要適應(yīng)機械硬盤的接口,所以把這部分操作用ftl隱藏起來了。
但是無論顯示與否,盤上所有的可用block都參與活動(除非主控安排了一些不參與活動的block留作自用,例如應(yīng)對突然斷電之類的情況),不存在說OP區(qū)就是“白白浪費”的情況。
編輯于 2023-10-28 03:24
【知乎】從技術(shù)角度如何看待小米發(fā)布會上提出的“256GB+8GB”存儲創(chuàng)新技術(shù)?的評論 (共 條)
