在這篇文章中,我不打算帶入以往的恩怨,而是直接明了的闡述這個事情是什么、他可能帶來的影響,以及對于小米幾篇公關(guān)通稿的反駁和質(zhì)疑.
這篇文章不是給小白亦或是某些二極管看的,也不是為了讓小米名譽掃地或是為某些東西洗地,如果你想看到我在這篇文章中把小米批得一文不值,那我建議你趕緊離開.
另外,鑒于之前一堆水軍和半桶水對我的攻擊,我不接受任何沒有對閃存業(yè)界有過了解、還在拿著廠商通稿和奇葩文章做出的狗屁言論,換言之,我只接受以IEEE論文、原廠報告和SNIA/FMS展示作為論據(jù)的駁斥和反推.而作為對等,我在這篇文章中的一切論據(jù)都會標注來源,做到公信力.
PART1:你需要了解什么
1.1什么是REW讀改寫?
REW,READ-ERASE-WRITE.這個可以稱之為讀改寫.當然你也可以用copy-modify-write去稱呼他,這是等效的:在NAND層面.
我們在這里簡短的說一下為什么它會產(chǎn)生: 固態(tài)的擦除是以block為單位、讀寫以page為單位,nand的物理特性決定了他不能覆蓋寫入.因此如果我們要對一個已有數(shù)據(jù)的page進行寫入,那么必須先要把這個page所在的block中的數(shù)據(jù)讀出,block清空后再把所有數(shù)據(jù)寫進去.這個過程就是Read-Erase-Write
上面這個圖片是我自己做的,如果你對我表示懷疑,下面這個這是來自WD在FMS 2020的報告: How Zoned Namespaces Improve SSD Lifetime, Throughput, and Latency
這個過程出現(xiàn)在臟盤態(tài)下:在FOB也就是空盤狀態(tài)下,所有的PAGE與BLOCK都是干凈的,自然沒有REW過程.但這種情況在手機上是不可能出現(xiàn)的:即使你剛買回來開機,他也不是FOB態(tài):你的手機預裝了操作系統(tǒng),SLC cache經(jīng)歷了一輪寫入與釋放,已經(jīng)有足夠多的block和page處于臟盤狀態(tài).
而在文件操作與寫入上,不及時的GC回收與相對懶惰的TRIM機制、大量log小粒度文件的寫入,這些都加劇了臟盤狀態(tài):不是你看到256G剩余100G他就沒有臟盤.而這東西的分析絕大多數(shù)人包括我都沒有能力:必須要原廠或者有能力修改FTL的廠商進行適配并測試.
1.2 WAF,寫放大
寫放大的來源有兩種:
第一種是File size文件粒度與Page size的不對齊造成的:由于我們只能向一整個page寫入文件,在沒有數(shù)據(jù)打包和壓縮的前提下,無論這個文件是4KB還是512b,他都會占用這一整個Page,這也造成了所謂的存儲空間大小虛標:你看起來的256G固態(tài)剩余150G,但實際上只有合計50G的block/page是干凈,其他空間要使用,你都要進行實時的GC回收.
這里由于太過低級,我懶得找圖片和論文了
第二種是高負載下經(jīng)常出現(xiàn)的:在高度臟盤狀態(tài)下我們寫入文件,往往會面臨著大量REW改寫,而此時為了刪除它我們不得不去對多個塊進行GC回收,這增加了主控的負擔與NAND的損耗.
這個圖片來自IEEE的A closed-form expression for Write Amplification in NAND Flash
在實際情況中,我們?yōu)榱藢懭胍粋€16KB的文件,可能需要對多個塊進行REW改寫,以騰挪出足夠的空間.還是一樣來自于IEEE的A closed-form expression for Write Amplification in NAND Flash:
下面這個圖片來自于MEMBLAZE的技術(shù)文章:企業(yè)級 SSD 壽命要怎么看?
不同的文件寫入粒度、不同的GC策略、不同的SLC cache算法,都會得到不一樣的WAF曲線,但毫無疑問的:對手機這種低級的UFS閃存系統(tǒng),WAF必然比enterprise要嚴重很多
1.3OP是什么,為什么有OP?
OP,即Over Provisioning.我們一般說的enterprise的7%、28%、33%的OP比,實際上是指二級OP.
由于這個定義太過初級,我就懶得贅述了
圖片來源于Understanding SSD Over Provisioning,于FMS2012
我們來看看二級OP對于性能的影響
這個數(shù)據(jù)來源于Over-Provisioning NAND-Based Intel? SSDs for Better Endurance
這個數(shù)據(jù)來源于Validating Analytic Write Amplification Models,于FMS2016
這個數(shù)據(jù)來源于Understanding SSD Over Provisioning,于FMS2012
這個數(shù)據(jù)來源于IEEE的A closed-form expression for Write Amplification in NAND Flash
但在更加原理的層面,即使所謂的client SSD,他們在事實上也是有OP的,我們把它稱之為一級預留或者是一級OP,這部分數(shù)據(jù)就是操作系統(tǒng)中顯示與實際容量的差值.小米這次引發(fā)爭議的就是在動用一級OP上.
1.4壞塊預留是什么?
任何SSD都有可能損壞,無論是出場的block中被屏蔽的部分,還是在使用中磨損過度與出現(xiàn)異常的部分.這些部分需要被補齊,因此除了一級OP之外,SSD還會有一定的空間預留以應對這種情況.
1.5不就是動一下塊映射嗎?為什么你們反應那么大?
與絕大多數(shù)人想的所謂簡簡單單分個區(qū)不同,由于FTL交替非線性映射的特性,無法和HDD一樣簡單的用戶層級的區(qū)塊的重映射與屏蔽.
例如我們要對某幾個新增加的塊進行映射(我們先不討論這個塊是哪來的),必須要在工程模式下將所有的物理區(qū)塊與文件引索重新標記與映射,這個過程就是重建FTL表.
在這個規(guī)程中,無論是意外斷電或者極小概率的電荷翻轉(zhuǎn),都會導致數(shù)據(jù)丟失甚至整個閃存系統(tǒng)變磚不可用.這也就是為什么WD、INTEL、MICRON、SAMSUNG等原廠在固件升級時都會直接寫上可能存在小概率數(shù)據(jù)丟失風險的原因:即使沒有軟件層面的BUG,各種不可知的意外都會造成嚴重的后果.
PART2:小米做了什么
這里不會涉及任何的解讀,僅僅做出必要的參數(shù)
[我們與存儲器廠商進行了緊密的協(xié)作.首先,我們修改了空間管理策略,將OP區(qū)占用的空間從6.9%壓縮至約3%.這個過程需要深入了解存儲器的工作原理,以確保在壓縮OP區(qū)空間的同時,不會影響到存儲器的性能和壽命.在多次的測試和優(yōu)化后,我們找到了一個理想的平衡點. ]
小米承認了修改一級OP,從7%/6.9%縮減到3%
來源于
https://card.weibo.com/article/m/show/id/2309404962180771742222?id=2309404962180771742222
[我們除了根據(jù)用戶習慣來預留充足的空間外, 還優(yōu)化Cache的管理以減少擦寫及壞塊的產(chǎn)生, 并同時支持在長時間使用后根據(jù)用戶情況來云控調(diào)整壞塊預留區(qū), 保證系統(tǒng)的穩(wěn)定性.]
小米使用了經(jīng)過修改的slc cache策略,并支持通過OTA和云控調(diào)整壞塊預留區(qū),這其中會涉及FTL的重建.
來源于https://m.weibo.cn/status/4962498407302086?jumpfrom=weibocom
是的,根據(jù)小米目前透露的消息,結(jié)合我對于閃存系統(tǒng)的認知,他就有這兩點.
PART3:為什么我對這個東西充滿懷疑和擔憂
我在這里先擺明立場:我對于小米賣得好不好、其他廠商賣得好不好沒有任何興趣,作為一個存儲愛好者和前YMTC臨時工,我沒有任何與小米利益相關(guān)的立場,無論是支持或是反對.
我只是表明了我對這一技術(shù)的懷疑與擔憂,我衷心希望這個技術(shù)不會帶來更多的問題、不會造成大面積的翻車:就如同888之于MI11一樣.
小米這樣做,可能帶來的兩個巨大問題:
1 使用了大量的一級OP與備用塊作為存儲空間,無非就是討好部分容量需求大的用戶.而一旦占用空間過高,以UFS閃存的主控能力與固件優(yōu)化,本來就會存在大量的性能缺陷、延遲飆升和零點.在一級OP被占用的場景下,性能估計是堪憂的.
由于上文已經(jīng)闡述了二級OP與性能、壽命之間的關(guān)系,這里就不再贅述.
數(shù)據(jù)來源于Reliability of 3D NAND Flash for Future Storage Systems (Invited),IEEE
而小米動用的一級OP,其性能與壽命的關(guān)系函數(shù)關(guān)系不能直接用二級OP去推導:我們隨著二級OP的減少,可以看這是一條反比例函數(shù).而更加底層的一級OP,提供了必要的REW讀改寫所需要的備用區(qū)塊,根據(jù)Intel的于8年前的內(nèi)部報告,每減少1%的一級OP,壽命是指數(shù)級下降,而性能是一條相對反常的曲線,到了0%和1%一級OP預留時,閃存系統(tǒng)已經(jīng)實質(zhì)上不可用:使用128K填盤之后的4K穩(wěn)態(tài)性能,在1% 一級OP時已經(jīng)存在極大的延遲波動,到后期直接是一條零點直線:此時已經(jīng)沒有空間進行讀改寫,自然沒有任何性能.
上面這個報告受限于NDA與各種因素我無法發(fā)出,如果不相信我也沒辦法,這也是本文中唯一一個無法提供出處的論據(jù).
2 小米現(xiàn)在特別喜歡開SWAP,在造成SLC cache重復讀寫、write back懲罰的情況下,這一小聰明是否會帶來更多的性能低位與過度磨損?甚至嚴重點說:會不會出現(xiàn)幾年前中端機因為硬盤IO太差,用一下就卡頓的情況?
3 為什么不能用順序?qū)懭霚y試?
答案很簡單,因為128K的讀寫負載在Android上是極少存在的.
現(xiàn)實中的client workload是9R1W的4k/8k塊負載,而在page size=16k的今天,這種負載會帶來嚴重的寫放大.使用128k負載進行測試,無法還原出臟盤狀態(tài)下的真實性能,更與手機存在大量4k為單位的log日記寫入情況不符合.
PART4:對小米通稿的駁斥與疑問
“技術(shù)原理是啥?UFS會不會有壽命風險?完全不會,大家放心使用,要相信小米和芯片廠商的專業(yè)程度,也不要被帶節(jié)奏”
沒有任何數(shù)據(jù)、沒有任何原廠公開站臺,是誰在帶節(jié)奏?至于專業(yè)程度,任何一級OP與備用塊的動用和調(diào)整,之前在事實上都是不可見的:由于他的重要性和底層性,除了原廠內(nèi)部報告之外沒有任何文章討論他的影響.一個小米說他沒問題就沒問題了?MIUI12什么情況、888什么情況、小米金融什么情況?
“我們除了根據(jù)用戶習慣來預留充足的空間外, 還優(yōu)化Cache的管理以減少擦寫及壞塊的產(chǎn)生,并同時支持在長時間使用后根據(jù)用戶情況來云控調(diào)整壞塊預留區(qū), 保證系統(tǒng)的穩(wěn)定性.”
小米知道自己在說什么嗎?云控調(diào)整壞塊預留區(qū)!?這個人是不是不知道他在說什么.
如果小米真的做了,那么只需要一個OTA的BUG,就可以瞬間摧毀所有的數(shù)據(jù)安全!并且毫無后悔藥可言.
FTL對物理區(qū)塊的映射是非線性的,一旦變動就需要進行整體的重新調(diào)整,在任何的FW固件更新之前所有的廠商都會告訴你可能存在的丟失數(shù)據(jù)的風險,并且在沒有BUG的前提下極少進行FW固件的調(diào)整與升級.
所有的壞塊統(tǒng)計和測試,都是一種推測、都是不完全可信的,Samsung和YMTC的0E事件已經(jīng)向我們證明了這點.而小米在調(diào)整壞塊預留區(qū)的過程勢必會進行FTL重建與升級,而之前的標記的壞塊時候還被正確屏蔽、磨損平衡是否還生效?這些全部都是未知數(shù)!
我再說一次,這個事情沒有任何原廠、沒有任何例如金士頓、dapustor和memblaze之類的高級第三方曾經(jīng)做過,據(jù)我所知業(yè)界也完全沒有對這方面的研究.小米這樣做的潛在風險如何解決?甚至激進點說,出了問題誰背鍋?
“按照目前重度用戶的模型來評估, 在每天寫入40GB數(shù)據(jù)的條件下, 256GB的擴容芯片依然可以保證超過10年, 512GB可以超過20年, 請大家放心.”
“重度用戶的模型是什么?”,剩余可用空間多大、已寫入數(shù)據(jù)的隨機度如何?
“每天寫入40G數(shù)據(jù)的條件下”,寫入40G什么數(shù)據(jù),是BS=4K的隨機零碎文件還是BS=1m的大塊順序文件?這兩者造成的WAF以及性能下降完全不一樣!完全沒有可比的價值!
“256GB的擴容芯片依然可以保證超過10年”,用什么模型推測的,依然可以保證超過10年是按照JEDEC218B進行的測試、還是平均速度明顯下滑就算不可用,亦或者是能點亮就算成功?
“要保障最佳的存儲體驗,需要實現(xiàn)主機文件系統(tǒng)和UFS的深度協(xié)同,這在之前FBO煥新存儲功能已經(jīng)體現(xiàn)過,相同的理念,小米在主機端也基于文件管理深度介入了UFS的資源管理,通過軟件實現(xiàn)“數(shù)據(jù)非必要不寫入(UFS)”,通過軟件+固件實現(xiàn)“寫入數(shù)據(jù)非必要不遷移”,減少寫入量的同時也實現(xiàn)了更好的wear-leveling和WAF”
前者是寫到DRAM里面,是一個好事,這點值得表揚!
后者是SLC cache釋放不積極,在手機這個極小容量、實時回收極差的情況下,用戶可能下載幾個視頻就直接面臨slc cache write back懲罰,導致速度的極度下滑.當然,具體的策略是小米來定奪.SLC釋放的積極程度是一個無解的難題:正如同股東SLC cache與全盤模擬的爭論一樣,是一把雙刃劍.
在這段中,沒有什么毛病,盡管他還是一樣沒有展示出任何的數(shù)據(jù),但最起碼沒有那么吹牛了.
“為了供應鏈安全,我們采購了多家存儲芯片,雖然小米向供應商share了所有的技術(shù),但有些廠商還沒來得及適配, 其實上市前幾天還有反對意見,最后是雷總拍板:好技術(shù)不要浪費,給大家講清楚就行,多8G/16G就當是享受技術(shù)帶來的快樂,沒有也是正常的,希望大家理解.
在小米的推動下, 國內(nèi)外主流存儲芯片廠商會陸續(xù)適配.”
畫大餅環(huán)節(jié)來了:有些廠商沒有來得及適配、會陸續(xù)適配,這不就是領(lǐng)導畫大病時候的經(jīng)典再現(xiàn)嗎?原廠們誰打算適配、誰打算支持、誰打算跟進,把名字寫出來,一起發(fā)論文、發(fā)展示,不要把這些東西停留在通稿的吹牛上!
“這個技術(shù)別的廠商可以用嗎?小米已經(jīng)把標準貢獻給了UFS協(xié)會組織,為了尊重原創(chuàng),我們要求芯片廠商做了一點時間保護期, 不久的將來,各大手機廠商應該都會適配這個功能.”
繼續(xù)畫大餅,應該都會適配,說話留余地的藝術(shù)來了:我努力一下應該可以上清華,我在未來可能拿到諾貝爾獎,我們組明年不出意外的話應該可以發(fā)114514篇SCI.語言的藝術(shù)就是如此,他的確沒有欺騙你,但和你想的也不一樣.
當然,我不認識做UFS那邊的朋友,我會通過我的消息來源與關(guān)系詢問YMTC、Samsung、KIOXIA、solidigm的朋友,看看這個所謂的新技術(shù),是否能在JEDEC上通過.
這些騙騙小白的東西,別把自己騙進去了,沒有任何明確的數(shù)據(jù)、沒有任何明確的指向,是不是小米在手機圈這種水平的洼地混久只會發(fā)通稿,忘記了到底什么叫做科技公司、半導體廠商應該做些什么?
通稿好發(fā),當然可以請KOL一頓亂吹,畢竟所有的手機廠商都是那么做的:IQOO的獨顯、華為的GPU tubro、小米的攝影、Sony的拍攝電影感、一加的游戲針對優(yōu)化.但那些技術(shù)、事實不會因為通稿而改變,科學只看論文、只看有公信力的報告和展示,不會相信那些無意義的、充斥著營銷和欺騙的通稿.
https:///SUPERNAND (二維碼自動識別)