命:頁隔離技術(shù)如何讓“壞塊”重獲新生)
1. 引言NAND 的壽命焦慮與壞塊現(xiàn)實(shí)NAND Flash 是今天幾乎所有電子設(shè)備存儲(chǔ)的基礎(chǔ)。從手機(jī)里的 UFS、電腦里的 SSD到數(shù)據(jù)中心中的企業(yè)級(jí)盤再到工業(yè)設(shè)備中的 eMMCNAND 憑借高密度、低功耗和非易失性成為主流選擇。然而NAND 有一個(gè)無法回避的問題它會(huì)壞。更準(zhǔn)確地說NAND 從出廠那一刻起就帶著壞塊在后續(xù)使用中還會(huì)不斷產(chǎn)生新的壞塊。壞塊不僅意味著容量損失還可能帶來數(shù)據(jù)錯(cuò)誤、讀寫性能抖動(dòng)甚至整盤失效。因此如何管理壞塊一直是 NAND 存儲(chǔ)系統(tǒng)的核心課題。傳統(tǒng)思路是“塊級(jí)跳過”一旦一個(gè)物理塊被判定為壞塊就把整個(gè)塊從可用資源池中剔除用備用塊替換。這種策略簡單可靠但它有一個(gè)明顯的浪費(fèi)NAND 的擦除單位是塊而讀寫單位是頁。一個(gè)塊通常包含幾十到幾百個(gè)頁。很多時(shí)候真正出問題的只是塊內(nèi)少數(shù)幾個(gè)頁其余頁仍然保持良好的擦寫特性和數(shù)據(jù)保持能力。把整個(gè)塊直接丟棄等于因?yàn)閹醉摰娜毕莘艞壛藬?shù)百頁仍然可用的容量。頁隔離技術(shù)正是在這個(gè)背景下被提出和逐步推廣的。它的核心思想是把壞資源管理的粒度從“塊”下沉到“頁”。當(dāng)一個(gè)塊中的部分頁出現(xiàn)不可糾正錯(cuò)誤、寫入失敗或讀干擾敏感時(shí)不再簡單地把整個(gè)塊標(biāo)記為壞塊而是只隔離這些問題頁把同一塊內(nèi)仍然健康的頁繼續(xù)納入地址映射和磨損均衡系統(tǒng)。這樣一來原本會(huì)被整塊淘汰的 NAND 容量得以保留設(shè)備的總可寫數(shù)據(jù)量和使用壽命也能得到提升。本文將以約兩萬字的篇幅系統(tǒng)性地拆解頁隔離技術(shù)。內(nèi)容覆蓋 NAND 基礎(chǔ)、壞塊產(chǎn)生機(jī)理、傳統(tǒng)壞塊管理、頁隔離原理、FTL 實(shí)現(xiàn)、代碼級(jí)示例、工程挑戰(zhàn)、工業(yè)實(shí)踐與未來發(fā)展趨勢。讀完本文你將理解頁隔離為什么能夠?yàn)?NAND“續(xù)命”它如何與 ECC、垃圾回收、磨損均衡協(xié)同工作以及在實(shí)際產(chǎn)品中落地頁隔離需要注意哪些關(guān)鍵問題。2. NAND Flash 基礎(chǔ)為什么壞塊不可避免2.1 存儲(chǔ)單元、頁與塊的結(jié)構(gòu)NAND Flash 的內(nèi)部是一個(gè)層次化結(jié)構(gòu)一個(gè)芯片包含多個(gè)晶圓平面一個(gè)平面包含多個(gè)塊一個(gè)塊包含多個(gè)頁一個(gè)頁又包含數(shù)據(jù)區(qū)和備用區(qū)。以常見的浮柵晶體管為基礎(chǔ)每個(gè)存儲(chǔ)單元通過捕獲不同數(shù)量的電子來表示不同電平。SLC 每個(gè)單元存 1 bitMLC 存 2 bitTLC 存 3 bitQLC 存 4 bit。電平數(shù)量越多單元對(duì)外部條件越敏感出錯(cuò)的概率也越高。頁是 NAND 的最小讀寫單位。早期的 SLC NAND 頁大小可能是 2 KB而今天的 TLC 和 QLC NAND 頁大小常常是 16 KB。塊是最小擦除單位一個(gè)塊通常包含 64、128、256 或更多頁。例如一個(gè) 16 KB 頁、256 頁的塊其容量約為 4 MB。由于擦除只能以塊為單位進(jìn)行而寫入和讀取以頁為單位這種“寫入單位小、擦除單位大”的特性深刻影響了壞塊管理和頁隔離策略。2.2 寫入與擦除機(jī)制NAND 寫入操作通常被稱為編程。編程只能把存儲(chǔ)單元的電位從一個(gè)默認(rèn)狀態(tài)改變到目標(biāo)狀態(tài)。對(duì)于已經(jīng)寫入的單元不能直接覆蓋寫入新數(shù)據(jù)必須先擦除整個(gè)塊讓塊內(nèi)所有單元回到默認(rèn)狀態(tài)才能重新編程。這個(gè)特性帶來了寫放大和垃圾回收問題也直接影響了壞塊判斷一次失敗的寫入或一次失敗的擦除都會(huì)成為壞塊或壞頁檢測的重要信號(hào)。在寫入時(shí)控制器通過字線和位線對(duì)目標(biāo)頁施加電壓把電荷注入浮柵。在讀取時(shí)控制器施加參考電壓根據(jù)導(dǎo)通狀態(tài)判斷單元里的數(shù)據(jù)。隨著擦寫次數(shù)增加浮柵氧化層會(huì)逐漸退化電荷逃逸或捕獲更加明顯導(dǎo)致單元的電平分布偏移最終出現(xiàn)讀出錯(cuò)誤。頁隔離需要理解這些物理退化過程因?yàn)椴煌摰耐嘶俣炔⒉幌嗤@正是“一個(gè)塊內(nèi)只有部分頁損壞”現(xiàn)象的物理基礎(chǔ)。2.3 壞塊的產(chǎn)生機(jī)理NAND 壞塊一般分為兩類出廠壞塊和新增壞塊。出廠壞塊是芯片制造過程中由于工藝缺陷產(chǎn)生的壞塊廠商會(huì)在出廠時(shí)標(biāo)記。新增壞塊則是在使用過程中由于擦寫磨損、氧化層擊穿、電荷泄漏、讀干擾、寫干擾等原因逐漸產(chǎn)生的。即使是同一個(gè)塊內(nèi)不同頁也可能因?yàn)槲锢砦恢?、制造偏差和操作歷史不同表現(xiàn)出不同的可靠性。塊級(jí)壞塊的產(chǎn)生往往是一個(gè)漸進(jìn)過程。最初可能只是某個(gè)頁出現(xiàn)少量比特錯(cuò)誤ECC 還能糾正隨著錯(cuò)誤數(shù)增加超過 ECC 能力后該頁讀取失敗。如果此時(shí)直接判定整塊為壞塊就會(huì)造成不必要的容量損失。而頁隔離技術(shù)正是希望在這種“局部損傷”階段介入只隔離已經(jīng)不可靠的頁保留其余頁繼續(xù)服務(wù)。3. 傳統(tǒng)壞塊管理壞塊表與跳過策略3.1 出廠壞塊與新增壞塊在傳統(tǒng) NAND 存儲(chǔ)系統(tǒng)中壞塊管理是 FTL 或控制器固件的基本功能。廠商會(huì)在 NAND 出廠時(shí)對(duì)每個(gè)塊進(jìn)行測試把壞塊信息寫入塊內(nèi)備用區(qū)的特定字節(jié)??刂破魃想姾髵呙杷袎K讀取這些標(biāo)記建立出廠壞塊表。對(duì)于新增壞塊則在讀寫或擦除過程中檢測到失敗后把該塊加入壞塊表。出廠壞塊意味著這些塊從一開始就不能保證滿足規(guī)格書要求通常只能被永久剔除。新增壞塊則是動(dòng)態(tài)發(fā)生的一般發(fā)生在擦除操作之后或?qū)懭氩僮髦?。傳統(tǒng)方法會(huì)把這些新增壞塊同樣移入壞塊表使用備用塊替換。對(duì)于消費(fèi)級(jí)存儲(chǔ)廠商會(huì)預(yù)留一定比例的備用塊例如 2% 到 5%以保證壞塊出現(xiàn)時(shí)仍有容量可以替換。3.2 壞塊表維護(hù)壞塊表的存儲(chǔ)位置通常有兩級(jí)一部分存儲(chǔ)在 NAND 的保留區(qū)或系統(tǒng)區(qū)另一部分加載在控制器內(nèi)存中。每次上電時(shí)控制器會(huì)掃描 NAND 中的壞塊標(biāo)記重建內(nèi)存中的壞塊表。由于 NAND 本身存在不可靠性壞塊表通常需要多次備份并配合 CRC 或其他校驗(yàn)機(jī)制防止壞塊表自身損壞導(dǎo)致系統(tǒng)無法啟動(dòng)。塊級(jí)壞塊表的優(yōu)點(diǎn)是實(shí)現(xiàn)簡單、查詢速度快。它通常以塊號(hào)索引每一位或每一字節(jié)表示一個(gè)塊的狀態(tài)。在地址分配和垃圾回收時(shí)控制器只需查詢這個(gè)表跳過被標(biāo)記為壞的塊。但它的缺點(diǎn)是粒度太粗一個(gè)塊中只要有一個(gè)頁被判定為不可用整個(gè)塊都會(huì)被跳過哪怕其余頁完全健康。3.3 跳過壞塊策略的局限塊級(jí)跳過策略在早期 NAND 中已經(jīng)足夠使用因?yàn)楫?dāng)時(shí) SLC 可靠性較高壞塊產(chǎn)生相對(duì)緩慢整塊損壞的概率較高局部頁損壞的情況較少。但隨著 NAND 制程不斷縮小單元存儲(chǔ)比特?cái)?shù)增加局部頁損傷變得越來越普遍。很多塊的損壞不是整體突然失效而是某些頁由于制造偏差、讀干擾或編程干擾提前退化。如果繼續(xù)使用塊級(jí)跳過策略容量損失會(huì)隨著局部損傷比例的升高而放大。例如一個(gè) 256 頁的塊即使只有 1 頁不可糾正塊級(jí)策略也會(huì)丟掉全部 256 頁。對(duì)于容量敏感的應(yīng)用這種浪費(fèi)不可接受。此外塊級(jí)跳過還會(huì)加快備用塊消耗縮短整盤壽命因?yàn)閭溆脡K并不參與地址映射它只是在壞塊出現(xiàn)時(shí)被激活塊級(jí)隔離會(huì)更快耗盡這些資源。4. 頁隔離技術(shù)從“跳過塊”到“拯救頁”4.1 什么是頁隔離頁隔離技術(shù)的定義可以概括為在 NAND 存儲(chǔ)系統(tǒng)中將資源最小管理單元從物理塊進(jìn)一步細(xì)化為物理頁當(dāng)某個(gè)物理頁被檢測為不可靠時(shí)只將該頁或相關(guān)頁組從可用資源池中隔離而該頁所在的物理塊中其余健康頁仍然參與正常的數(shù)據(jù)存儲(chǔ)、垃圾回收和磨損均衡。這里的“隔離”并不意味著物理上切斷這些頁而是指邏輯上不再將用戶數(shù)據(jù)映射到這些頁上。隔離信息需要記錄在 FTL 的元數(shù)據(jù)中通常以頁級(jí)位圖、頁狀態(tài)表或壞頁鏈表的形式存在。控制器在分配物理地址、進(jìn)行垃圾回收和磨損均衡時(shí)會(huì)查詢這些頁級(jí)信息避免使用被隔離的頁。4.2 核心思想粒度下沉頁隔離的核心思想是提高管理粒度讓系統(tǒng)能夠更精細(xì)地響應(yīng) NAND 的局部退化。傳統(tǒng)塊級(jí)管理把塊作為最小健康單元而頁隔離把頁作為最小健康單元。這個(gè)變化看似簡單但它對(duì) FTL 的地址映射、元數(shù)據(jù)組織、垃圾回收和磨損均衡都提出了新的要求。從資源利用角度看頁隔離相當(dāng)于把“壞塊”拆解為“壞頁集合”把壞塊中的好頁重新納入系統(tǒng)。例如一個(gè)含有 3 個(gè)壞頁的 256 頁塊頁隔離后仍可貢獻(xiàn) 253 個(gè)可用頁。相比整塊丟棄容量保留率提高了約 98.8%。這種改善在壞塊比例越高的設(shè)備上越明顯。4.3 頁隔離與壞塊管理的根本差異判斷粒度不同壞塊管理以塊為單位頁隔離以頁為單位。容量損失不同壞塊管理可能因?yàn)樯贁?shù)壞頁丟棄整塊頁隔離只丟棄壞頁本身。元數(shù)據(jù)復(fù)雜度不同壞塊管理維護(hù)塊級(jí)表頁隔離需要維護(hù)頁級(jí)表或等效結(jié)構(gòu)。對(duì)磨損均衡的影響不同壞塊管理直接跳過整塊頁隔離要求磨損均衡算法考慮塊內(nèi)可用頁的差異。適用階段不同壞塊管理仍然是基礎(chǔ)防線頁隔離是在壞塊管理的框架下進(jìn)一步細(xì)化的補(bǔ)償機(jī)制。需要強(qiáng)調(diào)的是頁隔離并不能完全替代塊級(jí)壞塊管理。如果一個(gè)塊的大部分頁已經(jīng)失效或者擦除操作本身已經(jīng)無法完成那么這樣的塊仍然應(yīng)該被整體隔離。頁隔離主要應(yīng)對(duì)的是“塊內(nèi)局部頁損傷”場景屬于對(duì)傳統(tǒng)壞塊管理的增強(qiáng)而不是替換。5. 頁隔離技術(shù)原理拆解5.1 壞頁檢測與確認(rèn)頁隔離的第一步是準(zhǔn)確判斷哪些頁出現(xiàn)問題。常見檢測信號(hào)包括寫入失敗、讀取失敗、ECC 錯(cuò)誤數(shù)超過閾值、寫后讀校驗(yàn)失敗、擦寫循環(huán)次數(shù)超過安全上限、讀干擾導(dǎo)致的錯(cuò)誤率升高等。控制器不能僅憑一次偶發(fā)錯(cuò)誤就立即隔離頁因?yàn)樗矔r(shí)環(huán)境因素、電壓波動(dòng)或隨機(jī)錯(cuò)誤都可能造成偶發(fā)失敗。一般會(huì)采用“確認(rèn)機(jī)制”來降低誤判。例如某頁第一次讀取出現(xiàn)不可糾正錯(cuò)誤可以先保存該頁數(shù)據(jù)到其他位置然后對(duì)該頁進(jìn)行一次擦除和寫入測試。如果測試通過說明該頁可能只是暫時(shí)性錯(cuò)誤可以繼續(xù)觀察如果測試再次失敗或在后續(xù)操作中連續(xù)出現(xiàn)錯(cuò)誤則將其標(biāo)記為壞頁并加入隔離表。這種多次確認(rèn)策略可以在可靠性和容量保留率之間取得平衡。5.2 頁級(jí)映射與重映射頁隔離需要記錄哪些物理頁已經(jīng)不能使用。最直接的方法是維護(hù)一張頁級(jí)狀態(tài)表。對(duì)于大容量 NAND一個(gè)設(shè)備可能有數(shù)十億個(gè)頁如果為每個(gè)頁都保存一個(gè)字節(jié)狀態(tài)元數(shù)據(jù)開銷會(huì)非常大。因此實(shí)際系統(tǒng)通常采用壓縮結(jié)構(gòu)例如位圖、范圍表、稀疏樹或差分記錄。只有被隔離的頁才需要特殊記錄健康頁默認(rèn)可用。當(dāng)?shù)刂酚成湫枰峙湮锢眄摃r(shí)它會(huì)查詢這個(gè)頁級(jí)狀態(tài)表跳過被隔離的頁。如果某個(gè)邏輯頁原本映射到某個(gè)物理頁而該物理頁后來被判定為壞頁控制器需要把該邏輯頁重新映射到另一個(gè)健康物理頁并更新映射表。這個(gè)過程與傳統(tǒng)的壞塊替換類似但粒度更小。5.3 有效頁分類與隔離策略并不是所有壞頁都適合立即隔離。有些頁的錯(cuò)誤是暫時(shí)的比如由讀干擾引起的錯(cuò)誤有些頁則是永久損傷。為了更靈活地利用容量頁隔離策略通常會(huì)把壞頁分成不同等級(jí)。例如只讀壞頁可以繼續(xù)作為只讀存儲(chǔ)使用寫入壞頁則禁止再次編程但仍可讀取已有數(shù)據(jù)完全壞頁則既不能讀也不能寫。對(duì)于只讀壞頁控制器可以保留其中的數(shù)據(jù)但不允許后續(xù)寫入。在一些場景下這些頁仍然可以被讀取直到不需要這些數(shù)據(jù)為止。對(duì)于寫入壞頁控制器需要盡快把數(shù)據(jù)遷移到健康頁然后標(biāo)記為不可用。對(duì)于完全壞頁則立即隔離。分類管理進(jìn)一步提高了資源利用率但也增加了策略復(fù)雜度。5.4 與 ECC、RAID 的協(xié)同頁隔離不是孤立存在的它必須與 ECC 糾錯(cuò)、RAID 校驗(yàn)等可靠性機(jī)制協(xié)同。ECC 負(fù)責(zé)在頁內(nèi)糾正比特錯(cuò)誤當(dāng)錯(cuò)誤數(shù)低于閾值時(shí)頁仍然可以正常使用。只有當(dāng)錯(cuò)誤數(shù)接近或超過 ECC 能力時(shí)才考慮隔離。RAID 層面則可以把壞頁數(shù)據(jù)從冗余條帶中恢復(fù)出來減輕單頁失效對(duì)數(shù)據(jù)可用性的影響。一個(gè)典型的協(xié)同流程是讀取數(shù)據(jù)時(shí)先由 ECC 糾錯(cuò)如果 ECC 失敗嘗試 RAID 恢復(fù)如果 RAID 恢復(fù)成功將恢復(fù)后的數(shù)據(jù)寫入新的物理頁并把原壞頁標(biāo)記為隔離。這樣既能保護(hù)數(shù)據(jù)又能及時(shí)去除不可靠頁。頁隔離的閾值設(shè)置通常會(huì)考慮 ECC 余量確保在使用過程中不會(huì)因?yàn)檩p微錯(cuò)誤就頻繁隔離導(dǎo)致寫放大上升。6. FTL 中的頁隔離實(shí)現(xiàn)6.1 邏輯地址到物理地址映射FTL 的核心任務(wù)是維護(hù)邏輯地址和物理地址之間的映射關(guān)系。早期 FTL 使用塊級(jí)映射或頁級(jí)映射現(xiàn)代 SSD 普遍采用頁級(jí)映射因?yàn)轫摷?jí)映射能更好地支持隨機(jī)寫和垃圾回收。頁隔離與頁級(jí)映射天然契合頁級(jí)映射已經(jīng)以頁為粒度管理地址只需要在頁狀態(tài)中添加“壞頁”標(biāo)記即可。在頁級(jí)映射表之外FTL 還需要維護(hù)一個(gè)“反查表”或“有效頁計(jì)數(shù)表”用于垃圾回收時(shí)快速判斷某個(gè)物理頁上是否還有有效數(shù)據(jù)。頁隔離會(huì)改變物理塊中可用頁的數(shù)量因此反查表和有效頁計(jì)數(shù)也必須正確反映被隔離頁的狀態(tài)。否則垃圾回收可能錯(cuò)誤地搬移已經(jīng)隔離的壞頁導(dǎo)致數(shù)據(jù)丟失或重復(fù)失效。6.2 壞頁位圖與元數(shù)據(jù)頁隔離的元數(shù)據(jù)主要包括壞頁位圖和壞頁狀態(tài)表。壞頁位圖記錄每個(gè)物理頁是否被隔離通??梢园磯K組織每個(gè)塊附帶一個(gè)位圖。例如一個(gè) 256 頁的塊使用 32 字節(jié)即可表示所有頁的狀態(tài)。這種按塊附帶的壞頁位圖可以存儲(chǔ)在塊的備用區(qū)或?qū)iT的元數(shù)據(jù)區(qū)。由于元數(shù)據(jù)本身也會(huì)損壞壞頁位圖需要有校驗(yàn)和備份。控制器可以在 NAND 中為每個(gè)塊保存壞頁位圖并在系統(tǒng)區(qū)維護(hù)一份匯總。上電時(shí)控制器先加載匯總信息再逐個(gè)塊校驗(yàn)位圖。如果某個(gè)塊的位圖損壞可以從冗余備份中恢復(fù)或者重新掃描該塊盡量恢復(fù)準(zhǔn)確狀態(tài)。元數(shù)據(jù)一致性是頁隔離工程化中的關(guān)鍵難點(diǎn)。6.3 垃圾回收與磨損均衡聯(lián)動(dòng)垃圾回收的目標(biāo)是搬移有效頁、擦除舊塊以回收空間。頁隔離改變了塊的頁級(jí)健康狀態(tài)因此垃圾回收在選擇源塊時(shí)需要考慮塊內(nèi)壞頁數(shù)量。一個(gè)壞頁較多的塊即使有效頁較少也不一定適合立即回收因?yàn)椴脸竽塬@得的可用頁數(shù)量有限。如果繼續(xù)保留該塊反而可能浪費(fèi)擦除循環(huán)。磨損均衡算法也需要識(shí)別塊內(nèi)可用頁的差異。傳統(tǒng)磨損均衡以塊為單位平衡擦寫次數(shù)頁隔離后同一設(shè)備中不同塊的實(shí)際可用容量可能不同。磨損均衡策略需要綜合考慮塊的擦寫次數(shù)、壞頁比例和可用頁數(shù)量避免過度使用壞頁較少的健康塊同時(shí)也不能頻繁擦除壞頁較多的低效塊。常見的做法是給壞頁較多的塊設(shè)置更高的回收優(yōu)先級(jí)或者限制其參與冷熱數(shù)據(jù)分配。7. 典型頁隔離算法流程7.1 讀取失敗判定流程當(dāng)主機(jī)讀取一個(gè)邏輯頁時(shí)FTL 找到對(duì)應(yīng)物理頁并發(fā)起讀取。NAND 控制器先進(jìn)行 ECC 校驗(yàn)。如果錯(cuò)誤數(shù)在可糾正范圍內(nèi)則正常返回?cái)?shù)據(jù)并記錄錯(cuò)誤統(tǒng)計(jì)信息。如果錯(cuò)誤數(shù)接近閾值但尚未失敗可以標(biāo)記該頁為“觀察頁”后續(xù)讀取繼續(xù)監(jiān)控。如果 ECC 無法糾正則進(jìn)入壞頁判定流程先嘗試 RAID 恢復(fù)或讀重試機(jī)制若仍失敗則把該物理頁標(biāo)記為壞頁候選并觸發(fā)數(shù)據(jù)遷移和隔離流程。讀重試機(jī)制在判定壞頁之前非常重要。NAND 讀操作可能受溫度、讀干擾、參考電壓漂移等因素影響單次讀取失敗不代表該頁永久損壞。常見做法包括調(diào)整讀參考電壓、多次采樣和軟判決讀取。只有在多種恢復(fù)手段都失效后才應(yīng)認(rèn)定該頁已不可靠。這樣可以避免因?yàn)榄h(huán)境抖動(dòng)而錯(cuò)誤隔離大量頁。7.2 寫入失敗后的頁隔離動(dòng)作寫入失敗是另一種典型觸發(fā)條件。當(dāng)控制器對(duì)某個(gè)物理頁編程后狀態(tài)寄存器返回失敗或者寫后讀校驗(yàn)發(fā)現(xiàn)錯(cuò)誤超過閾值就需要處理該寫失敗頁。首先控制器不能把尚未確認(rèn)寫入的數(shù)據(jù)丟棄它需要檢查該物理頁是否部分寫入。如果數(shù)據(jù)部分寫入且可恢復(fù)應(yīng)先把數(shù)據(jù)讀出并保存然后重新分配一個(gè)健康物理頁寫入相同數(shù)據(jù)。寫入失敗的物理頁通常需要被隔離因?yàn)楹罄m(xù)再次寫入失敗的概率較高。但對(duì)于剛剛發(fā)生過一次寫失敗的頁有時(shí)也可以通過擦除后重試來確認(rèn)。若擦除重試后寫入成功且錯(cuò)誤率正常可以短期觀察若連續(xù)兩次寫入失敗則直接隔離。不同產(chǎn)品會(huì)根據(jù)對(duì)容量和可靠性的權(quán)衡設(shè)置不同策略。7.3 上電恢復(fù)與崩潰一致性頁隔離元數(shù)據(jù)必須在掉電或異常斷電后仍然可靠。通常做法是在每次壞頁隔離操作后同步更新 NAND 中保存的壞頁位圖和內(nèi)存中的映射表并使用日志或事務(wù)機(jī)制保證一致性。如果斷電發(fā)生在元數(shù)據(jù)更新過程中可能會(huì)出現(xiàn)內(nèi)存與 NAND 不一致的情況。解決崩潰一致性問題的方法包括使用兩階段提交先記錄壞頁日志再更新壞頁位圖上電時(shí)先回放日志恢復(fù)未完成的隔離操作或者在掃描時(shí)重新執(zhí)行壞頁檢測用檢測結(jié)果覆蓋可能的元數(shù)據(jù)不一致。由于壞頁隔離通常較為稀疏日志量不大因此事務(wù)化處理的開銷可控。8. 代碼級(jí)實(shí)現(xiàn)示例8.1 壞頁管理數(shù)據(jù)結(jié)構(gòu)下面給出一個(gè) C 風(fēng)格的頁級(jí)壞頁管理數(shù)據(jù)結(jié)構(gòu)示例。代碼中省略了具體硬件操作細(xì)節(jié)只說明 FTL 層如何組織壞頁信息。為了避免實(shí)際代碼演示過于冗長這里采用偽代碼與真實(shí) C 語法相結(jié)合的寫法重點(diǎn)展示數(shù)據(jù)結(jié)構(gòu)和隔離邏輯。#include stdint.h #include stdbool.h #define PAGE_PER_BLOCK 256 #define BLOCK_COUNT 4096 typedef struct { uint32_t block_id; uint32_t page_id; uint8_t status; /* 0: health, 1: suspect, 2: isolated */ uint32_t program_count; uint32_t read_error_count; } bad_page_entry; typedef struct { uint8_t page_status[PAGE_PER_BLOCK]; /* one byte per page */ } block_page_status; block_page_status g_page_status[BLOCK_COUNT]; bool is_page_isolated(uint32_t block_id, uint32_t page_id) { if (block_id BLOCK_COUNT || page_id PAGE_PER_BLOCK) { return true; /* out-of-range pages are treated as unusable */ } return g_page_status[block_id].page_status[page_id] 2; }這個(gè)示例使用一個(gè)二維數(shù)組保存每個(gè)塊的頁狀態(tài)。每個(gè)頁用 1 字節(jié)狀態(tài) 0 表示健康1 表示待觀察2 表示已隔離。實(shí)際產(chǎn)品中為了節(jié)省內(nèi)存通常會(huì)使用位圖而不是字節(jié)數(shù)組但在教學(xué)示例中字節(jié)數(shù)組更清晰。8.2 頁隔離核心函數(shù)void isolate_bad_page(uint32_t block_id, uint32_t page_id) { if (block_id BLOCK_COUNT || page_id PAGE_PER_BLOCK) { return; } g_page_status[block_id].page_status[page_id] 2; /* Persist page status to NAND metadata or journal */ persist_page_status(block_id, page_id, 2); /* If data on this page is still needed, migrate it to a spare page */ if (page_has_valid_data(block_id, page_id)) { uint32_t new_block; uint32_t new_page; if (allocate_healthy_page(new_block, new_page)) { migrate_page_data(block_id, page_id, new_block, new_page); update_logical_to_physical_map(block_id, page_id, new_block, new_page); } } }這段代碼演示了隔離壞頁的基本流程先更新內(nèi)存狀態(tài)再持久化到 NAND 元數(shù)據(jù)然后檢查并遷移有效數(shù)據(jù)最后更新映射表。函數(shù)中的new_block和new_page使用了地址運(yùn)算符在 HTML 中已經(jīng)轉(zhuǎn)義為amp;。8.3 重映射與地址轉(zhuǎn)換示例地址重映射時(shí)分配器必須跳過已經(jīng)隔離的頁。下面的函數(shù)在指定塊內(nèi)尋找一個(gè)可用頁它遍歷塊內(nèi)所有頁跳過狀態(tài)為隔離的頁。真實(shí)產(chǎn)品還會(huì)考慮頁的類型和寫入順序限制。bool find_healthy_page_in_block(uint32_t block_id, uint32_t *out_page) { for (uint32_t page 0; page PAGE_PER_BLOCK; page) { if (g_page_status[block_id].page_status[page] ! 2) { *out_page page; return true; } } return false; }上面的循環(huán)中page PAGE_PER_BLOCK的尖括號(hào)在 HTML 中寫成了lt;。這是代碼塊中必須遵守的轉(zhuǎn)義規(guī)則最終渲染時(shí)會(huì)顯示為正常的 C 代碼。9. 實(shí)測效果與數(shù)據(jù)對(duì)比9.1 容量保留率對(duì)比為了直觀展示頁隔離的價(jià)值我們可以做一個(gè)簡化估算。假設(shè)一個(gè)設(shè)備有 4096 個(gè)塊每塊 256 頁。如果其中 5% 的塊由于局部頁損傷被傳統(tǒng)塊級(jí)策略整體剔除那么可用塊數(shù)減少到 3891 塊容量保留率約為 95%。如果這些被剔除的塊平均每塊只有 8 個(gè)壞頁其余 248 頁仍然健康那么頁隔離后可用頁數(shù)約為3891×256 205×248 996096 50840 1046936 頁而原本總頁數(shù)為 1048576 頁。容量保留率僅損失約 0.16%。這個(gè)簡化計(jì)算說明在塊損傷局部化比較明顯的情況下頁隔離可以顯著提高容量保留率。尤其是對(duì)于已經(jīng)進(jìn)入壽命后期的設(shè)備局部頁損傷比例更高頁隔離對(duì)延長設(shè)備有效壽命的貢獻(xiàn)更大。當(dāng)然真實(shí)產(chǎn)品還需要扣除元數(shù)據(jù)空間和多級(jí)備用頁但總體趨勢不會(huì)改變。9.2 壽命提升評(píng)估壽命提升的評(píng)估通常使用總可寫數(shù)據(jù)量或按寫入量計(jì)算的耐久度指標(biāo)。頁隔離通過保留更多可用頁讓設(shè)備在相同磨損條件下可以寫入更多用戶數(shù)據(jù)。例如一個(gè)原本 1 TB 的 SSD如果塊級(jí)策略因局部壞頁損失了 3% 的可用容量而頁隔離只損失 0.3%那么在容量耗盡前用戶可寫入的數(shù)據(jù)量會(huì)相應(yīng)增加。實(shí)際壽命提升還取決于壞頁產(chǎn)生速率和隔離觸發(fā)閾值。如果頁隔離閾值設(shè)置過松很多只是輕微錯(cuò)誤的頁被隔離短期容量損失增加如果閾值過嚴(yán)部分壞頁繼續(xù)使用可能引發(fā)更頻繁的數(shù)據(jù)遷移和讀重試反而縮短壽命。因此頁隔離策略需要在真實(shí)工作負(fù)載下通過大量測試調(diào)優(yōu)不能只看靜態(tài)容量。9.3 讀寫性能影響頁隔離對(duì)讀寫性能的影響可以分為幾個(gè)方面。首先壞頁檢查會(huì)增加地址分配和垃圾回收的元數(shù)據(jù)訪問開銷。如果元數(shù)據(jù)設(shè)計(jì)合理這部分開銷通常在微秒級(jí)對(duì)整體性能影響很小。其次壞頁遷移會(huì)造成額外的寫放大。每次隔離一個(gè)寫有有效數(shù)據(jù)的壞頁都需要一次讀舊頁和一次寫新頁增加了設(shè)備的總寫量。讀路徑上的影響主要來自讀重試和 RAID 恢復(fù)。只有在真正遇到壞頁觸發(fā)錯(cuò)誤時(shí)讀延遲才會(huì)明顯升高。對(duì)于大多數(shù)健康頁讀路徑不增加額外負(fù)擔(dān)??傮w來看頁隔離帶來的性能代價(jià)遠(yuǎn)小于它換來的容量和壽命收益尤其在企業(yè)級(jí)場景中數(shù)據(jù)可用性比峰值性能更受重視。10. 頁隔離技術(shù)的工程挑戰(zhàn)10.1 映射表膨脹頁級(jí)狀態(tài)管理最大的挑戰(zhàn)是元數(shù)據(jù)規(guī)模。一個(gè) 1 TB SSD 可能擁有數(shù)億個(gè)物理頁。如果每個(gè)頁用 1 字節(jié)狀態(tài)就會(huì)消耗數(shù)百 MB 內(nèi)存這在嵌入式控制器中難以接受。即便使用位圖也需要數(shù)十 MB 內(nèi)存。因此實(shí)際產(chǎn)品需要對(duì)壞頁表進(jìn)行壓縮。常用方法包括只記錄壞頁而不是全量狀態(tài)、使用范圍表、使用按塊局部位圖、使用稀疏樹結(jié)構(gòu)以及把部分元數(shù)據(jù)放在 NAND 中按需加載。壓縮帶來的問題是查詢復(fù)雜度增加。地址分配器需要快速判斷一個(gè)頁是否可用如果壞頁表被壓縮為樹結(jié)構(gòu)查詢時(shí)間復(fù)雜度可能變成對(duì)數(shù)級(jí)對(duì)隨機(jī)寫性能產(chǎn)生影響。工程上需要權(quán)衡內(nèi)存占用和查詢延遲通常會(huì)把最常訪問的熱點(diǎn)壞頁表緩存到 SRAM 或 DRAM 中。10.2 垃圾回收復(fù)雜度頁隔離使垃圾回收變得更復(fù)雜。傳統(tǒng)垃圾回收以塊為單位統(tǒng)計(jì)有效頁數(shù)量塊內(nèi)總頁數(shù)是固定的。頁隔離后塊內(nèi)可用頁數(shù)量因壞頁而減少有效頁占比的計(jì)算需要同時(shí)考慮有效頁和壞頁。垃圾回收的目標(biāo)是選擇“收益/成本比”最高的塊壞頁比例高的塊回收后得到的可用空間少因此應(yīng)該相應(yīng)降低回收優(yōu)先級(jí)。另一個(gè)復(fù)雜點(diǎn)在于垃圾回收搬移數(shù)據(jù)時(shí)不能把數(shù)據(jù)搬到已經(jīng)被隔離的壞頁上。分配器需要與壞頁表聯(lián)動(dòng)確保搬移目標(biāo)頁健康。如果源塊中存在壞頁搬移時(shí)直接跳過這些壞頁即可但需要保證目標(biāo)塊中的頁順序滿足 NAND 的編程約束。對(duì)于多平面 NAND還要考慮跨平面操作的壞頁影響這會(huì)進(jìn)一步增加調(diào)度難度。10.3 磨損均衡干擾磨損均衡與頁隔離存在相互影響。頁隔離會(huì)改變某個(gè)塊的實(shí)際可用頁數(shù)量而磨損均衡又傾向于讓所有塊保持相近的擦寫次數(shù)。一個(gè)壞頁較多的塊如果擦寫次數(shù)較低磨損均衡可能仍然傾向使用它以平衡磨損但它的可用容量較少頻繁使用會(huì)導(dǎo)致更高的擦除開銷。反之過度保護(hù)壞頁較多的塊又會(huì)導(dǎo)致健康塊磨損過快。常見的解決方案是在磨損均衡算法中引入“有效磨損”概念將壞頁比例作為權(quán)重。例如把壞頁比例高的塊視為已經(jīng)消耗了部分壽命在擦寫次數(shù)比較時(shí)進(jìn)行折算。這樣既不會(huì)過度使用壞塊也不會(huì)讓健康塊提前磨損。具體折算系數(shù)需要根據(jù) NAND 制程和廠商測試數(shù)據(jù)確定。10.4 跨頁干擾與讀干擾NAND 單元之間存在編程干擾和讀干擾。一個(gè)頁被反復(fù)讀取可能影響相鄰頁的電平分布一個(gè)頁被編程時(shí)也可能干擾同塊內(nèi)其他頁。頁隔離如果只隔離直接壞頁而不考慮這些干擾傳播可能會(huì)低估風(fēng)險(xiǎn)。例如某個(gè)頁的相鄰頁發(fā)生嚴(yán)重讀干擾即使該頁當(dāng)前健康未來也可能快速退化。因此先進(jìn)的頁隔離方案會(huì)引入“鄰域隔離”策略當(dāng)一個(gè)頁被判定為壞頁時(shí)把它的直接相鄰頁標(biāo)記為高風(fēng)險(xiǎn)頁提前進(jìn)行監(jiān)測或遷移。這種策略可以降低錯(cuò)誤擴(kuò)散風(fēng)險(xiǎn)但也會(huì)增加隔離頁數(shù)量。是否需要鄰域隔離取決于 NAND 的工藝特性和應(yīng)用對(duì)可靠性的要求。3D NAND 的層疊結(jié)構(gòu)使相鄰頁關(guān)系更加復(fù)雜需要更精細(xì)的鄰域模型。11. 與相關(guān)技術(shù)的關(guān)系11.1 ECC 糾錯(cuò)ECC 是 NAND 存儲(chǔ)系統(tǒng)的基礎(chǔ)糾錯(cuò)技術(shù)。常見的 ECC 包括 BCH 碼和 LDPC 碼。現(xiàn)代 TLC 和 QLC NAND 普遍采用 LDPC 碼它通過軟判決讀取獲得更高的糾錯(cuò)能力。頁隔離的觸發(fā)條件通常與 ECC 能力直接相關(guān)當(dāng) LDPC 無法糾正某個(gè)頁時(shí)該頁才被認(rèn)為是壞頁候選。在設(shè)置頁隔離閾值時(shí)需要了解 ECC 的余量。如果某頁的錯(cuò)誤數(shù)已經(jīng)接近 LDPC 的極限即使尚未失敗也應(yīng)該提前隔離因?yàn)楹罄m(xù)錯(cuò)誤增長可能導(dǎo)致不可糾正。為此控制器可以記錄每次讀取的錯(cuò)誤數(shù)使用滑動(dòng)窗口判斷錯(cuò)誤增長趨勢提前遷移高風(fēng)險(xiǎn)頁。這種預(yù)測性隔離比單純等待 ECC 失敗更加主動(dòng)。11.2 壞塊跳過頁隔離與壞塊跳過不是競爭關(guān)系而是互補(bǔ)關(guān)系。壞塊跳過仍然是處理整塊失效的第一層機(jī)制當(dāng)擦除失敗或整塊嚴(yán)重退化時(shí)必須整塊剔除。頁隔離則是在塊級(jí)機(jī)制保持塊可用但塊內(nèi)出現(xiàn)局部壞頁時(shí)進(jìn)行更細(xì)粒度的補(bǔ)救。一個(gè)合理的存儲(chǔ)系統(tǒng)通常先做塊級(jí)壞塊判定再做頁級(jí)精細(xì)管理。如果某塊內(nèi)壞頁數(shù)量超過閾值例如超過 20%那么即使頁隔離保留了一部分頁這個(gè)塊的效率也已經(jīng)很低繼續(xù)使用可能不劃算此時(shí)應(yīng)把整塊升級(jí)為塊級(jí)壞塊。這個(gè)“升級(jí)閾值”需要結(jié)合備用塊數(shù)量和容量目標(biāo)來配置。11.3 子頁/部分頁編程一些 NAND 支持子頁編程或多平面操作這些特性與頁隔離存在潛在沖突。例如頁隔離后某個(gè)塊中可能只剩下不連續(xù)的可用頁而子頁編程要求連續(xù)寫入。此時(shí)需要檢查 NAND 的編程順序限制避免因?yàn)樘搶?dǎo)致某些物理單元沒有被正確編程產(chǎn)生新的錯(cuò)誤。多平面操作也類似它允許同時(shí)操作多個(gè)平面的同一頁號(hào)。如果其中一個(gè)平面的對(duì)應(yīng)頁是壞頁多平面命令可能失敗或者需要退化為單平面操作??刂破餍枰陧摳綦x信息的基礎(chǔ)上調(diào)整多平面調(diào)度策略避免因個(gè)別壞頁拖累整條多平面流水線。11.4 3D NAND 與多平面特性3D NAND 通過垂直堆疊存儲(chǔ)單元提高了密度但同時(shí)也帶來了更復(fù)雜的頁間關(guān)系。在 3D NAND 中同一個(gè)塊內(nèi)的頁可能分布在不同的層和串上層間工藝差異和電場分布差異會(huì)導(dǎo)致某些層更容易出錯(cuò)。例如靠近選擇管的層可能受編程干擾更明顯而中間層可能因?yàn)殡姾杀3痔匦圆煌霈F(xiàn)更多讀干擾。頁隔離在 3D NAND 中需要結(jié)合具體工藝知識(shí)識(shí)別高風(fēng)險(xiǎn)層和頁組。一些廠商會(huì)針對(duì) 3D NAND 的層間差異建立模型在頁隔離策略中給不同層設(shè)置不同閾值。對(duì)于可靠性較差的層即使錯(cuò)誤數(shù)尚未達(dá)到全局閾值也可能提前隔離。這種基于規(guī)則或機(jī)器學(xué)習(xí)的預(yù)測方法正在成為 3D NAND 時(shí)代頁隔離的重要方向。12. 工業(yè)實(shí)踐與產(chǎn)品落地12.1 消費(fèi)級(jí) SSD在消費(fèi)級(jí) SSD 中成本控制是第一優(yōu)先級(jí)。頁隔離雖然能夠提高容量保留率但會(huì)增加元數(shù)據(jù)硬件成本和固件開發(fā)復(fù)雜度。因此消費(fèi)級(jí)控制器往往采用簡化的頁隔離方案重點(diǎn)處理寫入失敗和明顯的讀失敗而較少使用復(fù)雜的預(yù)測模型。對(duì)于消費(fèi)級(jí)使用場景設(shè)備壽命通常不是限制因素容量和成本更受關(guān)注。即便如此消費(fèi)級(jí) SSD 也在逐步引入頁級(jí)精細(xì)管理。隨著 QLC 普及單元可靠性下降局部頁損傷更常見。如果仍然只做塊級(jí)管理QLC SSD 的可用容量和壽命會(huì)受明顯影響。因此新一代消費(fèi)級(jí) FTL 開始把壞頁位圖納入常規(guī)元數(shù)據(jù)并在后臺(tái)巡檢中檢測和隔離壞頁。12.2 企業(yè)級(jí)存儲(chǔ)企業(yè)級(jí) SSD 對(duì)可靠性和壽命要求極高愿意為更復(fù)雜的頁隔離投入更多資源。企業(yè)級(jí)控制器通常配備更大的 DRAM可以維護(hù)更精細(xì)的頁級(jí)狀態(tài)表。它們還會(huì)使用機(jī)器學(xué)習(xí)模型評(píng)估頁的錯(cuò)誤增長趨勢在頁真正不可用之前主動(dòng)進(jìn)行數(shù)據(jù)遷移。這種預(yù)測性遷移降低了設(shè)備運(yùn)行后期出現(xiàn)不可糾正錯(cuò)誤的概率。此外企業(yè)級(jí)存儲(chǔ)往往與 RAID、NVMe 多隊(duì)列和高可用架構(gòu)結(jié)合。頁隔離信息需要在控制器內(nèi)部一致維護(hù)并在熱插拔、固件升級(jí)和掉電恢復(fù)等場景下保持可靠。企業(yè)級(jí)產(chǎn)品還會(huì)在固件中記錄頁隔離統(tǒng)計(jì)信息供數(shù)據(jù)中心運(yùn)維人員分析設(shè)備健康狀態(tài)和預(yù)測剩余壽命。12.3 嵌入式 eMMC/UFS嵌入式存儲(chǔ)的挑戰(zhàn)是資源受限。eMMC 和 UFS 控制器通常集成在芯片內(nèi)部DRAM 容量有限無法像企業(yè)級(jí) SSD 那樣維護(hù)大規(guī)模頁級(jí)表。因此嵌入式設(shè)備多采用輕量級(jí)壞頁表使用位圖或局部范圍表并配合 NAND 廠商提供的壞塊信息。頁隔離在嵌入式場景中更多表現(xiàn)為對(duì)壞頁的簡單跳過而不是復(fù)雜的預(yù)測式管理。但隨著手機(jī)存儲(chǔ)容量增大和應(yīng)用對(duì)壽命要求提高UFS 也開始引入更細(xì)粒度的壞頁管理。一些廠商在 UFS 控制器中使用壓縮頁級(jí)狀態(tài)表并結(jié)合主機(jī)側(cè)的壽命統(tǒng)計(jì)接口讓系統(tǒng)能夠主動(dòng)觸發(fā)數(shù)據(jù)遷移。這些做法幫助手機(jī)在長時(shí)間使用后仍能保持較高的存儲(chǔ)可靠性。12.4 開源 FTL 項(xiàng)目開源 FTL 項(xiàng)目為研究者和開發(fā)者提供了觀察頁隔離實(shí)現(xiàn)的機(jī)會(huì)。一些學(xué)術(shù)項(xiàng)目實(shí)現(xiàn)了頁級(jí)映射和壞頁跳過可以作為理解頁隔離的參考。雖然開源項(xiàng)目通常沒有商業(yè)固件那樣完整的工程優(yōu)化但它們展示了壞頁表維護(hù)、地址重映射和垃圾回收聯(lián)動(dòng)的基本思路。在閱讀開源 FTL 時(shí)可以重點(diǎn)關(guān)注它的壞頁檢測邏輯、頁狀態(tài)更新時(shí)機(jī)和崩潰恢復(fù)策略。這些代碼往往比商業(yè)實(shí)現(xiàn)更易讀能夠幫助理解頁隔離技術(shù)從論文到工程落地之間的差距。需要注意的是開源項(xiàng)目中的數(shù)據(jù)結(jié)構(gòu)和算法不一定適用于所有 NAND 制程使用前要結(jié)合目標(biāo)閃存的實(shí)際特性進(jìn)行評(píng)估。13. 性能與可靠性權(quán)衡13.1 寫放大變化寫放大是指控制器實(shí)際寫入 NAND 的數(shù)據(jù)量大于主機(jī)寫入數(shù)據(jù)量的比例。頁隔離會(huì)增加寫放大的來源壞頁數(shù)據(jù)遷移。每當(dāng)一個(gè)寫有數(shù)據(jù)的頁被隔離控制器需要把其中的有效數(shù)據(jù)搬到新的物理頁這既增加了一次讀也增加了一次寫。如果壞頁產(chǎn)生速率較高頻繁遷移會(huì)使寫放大明顯上升。為了減少寫放大控制器可以延遲隔離已經(jīng)寫入數(shù)據(jù)的壞頁尤其是在該頁數(shù)據(jù)已經(jīng)被標(biāo)記為無效時(shí)。垃圾回收本來就會(huì)搬移有效頁如果壞頁上的數(shù)據(jù)已經(jīng)是無效數(shù)據(jù)就沒有必要在隔離時(shí)專門遷移。通過把壞頁隔離與垃圾回收合并處理可以減少不必要的遷移從而控制寫放大。13.2 讀延遲分布頁隔離對(duì)讀延遲的影響不是均勻的。對(duì)于大多數(shù)健康頁數(shù)據(jù)讀寫路徑?jīng)]有變化。只有訪問到壞頁或高風(fēng)險(xiǎn)頁時(shí)才可能觸發(fā)讀重試、ECC 軟判決、RAID 恢復(fù)或數(shù)據(jù)遷移這些操作的延遲遠(yuǎn)高于普通讀取。因此設(shè)備整體的讀延遲分布會(huì)出現(xiàn)“長尾”絕大多數(shù)請(qǐng)求很快少量請(qǐng)求明顯變慢。在 QoS 敏感的場景中這種長尾延遲會(huì)帶來很大影響。企業(yè)級(jí)控制器通常提供可配置的重試策略和超時(shí)閾值避免單個(gè)壞頁拖累整條命令隊(duì)列。還可以通過后臺(tái)巡檢提前隔離壞頁減少前臺(tái)請(qǐng)求遇到壞頁的概率。預(yù)測式隔離是改善讀延遲分布的重要手段。13.3 壽命與成本頁隔離技術(shù)本質(zhì)上是用元數(shù)據(jù)復(fù)雜度和少量性能代價(jià)換取容量和壽命。對(duì)于廠商來說額外的固件開發(fā)、更大的內(nèi)存和更復(fù)雜的測試驗(yàn)證都會(huì)增加成本。對(duì)于用戶來說容量保留和壽命提升帶來了更長的設(shè)備使用周期和更低的單位容量成本。在產(chǎn)品定位上高端企業(yè)級(jí)產(chǎn)品可以承受更復(fù)雜的頁隔離機(jī)制而低成本消費(fèi)級(jí)產(chǎn)品則需要選擇簡化版本。但無論何種定位頁隔離都不是免費(fèi)午餐它需要與 ECC 余量、備用塊數(shù)量和產(chǎn)品使用壽命目標(biāo)綜合設(shè)計(jì)。孤立地追求“最多隔離”或“最少元數(shù)據(jù)”都難以得到最優(yōu)結(jié)果。14. 頁隔離的局限與誤用風(fēng)險(xiǎn)14.1 隔離閾值選擇頁隔離閾值直接決定多少頁會(huì)被隔離。閾值過嚴(yán)會(huì)導(dǎo)致好頁被誤隔離浪費(fèi)容量閾值過松會(huì)讓壞頁繼續(xù)運(yùn)行增加數(shù)據(jù)錯(cuò)誤風(fēng)險(xiǎn)。閾值的選擇需要基于大量 NAND 可靠性數(shù)據(jù)并考慮溫度和擦寫次數(shù)等環(huán)境因素。同樣的錯(cuò)誤數(shù)在高溫下可能比在低溫下更值得警惕。一個(gè)常見的誤區(qū)是只依賴單次失敗就立即隔離。由于 NAND 讀取具有隨機(jī)性單次失敗可能只是偶然。如果系統(tǒng)頻繁觸發(fā)隔離不僅會(huì)損失容量還會(huì)造成不必要的遷移和寫放大。因此確認(rèn)機(jī)制和重試策略應(yīng)該先于隔離動(dòng)作執(zhí)行。只有經(jīng)過多次失敗或趨勢分析確認(rèn)后才應(yīng)把頁標(biāo)記為壞頁。14.2 錯(cuò)誤擴(kuò)散風(fēng)險(xiǎn)頁隔離只處理已知的問題頁但如果壞頁的產(chǎn)生具有空間相關(guān)性未來相鄰頁也可能失效。例如一個(gè)頁可能因?yàn)槟硹l字線上的缺陷而損壞而同一條字線上的其他頁也有潛在風(fēng)險(xiǎn)。如果只隔離當(dāng)前壞頁后續(xù)其他頁失效時(shí)只能被動(dòng)處理可能增加數(shù)據(jù)暴露時(shí)間。為了降低錯(cuò)誤擴(kuò)散風(fēng)險(xiǎn)可以引入鄰域檢測或關(guān)聯(lián)頁組隔離。按照 NAND 的內(nèi)部結(jié)構(gòu)將同一字線、同一串或同一層的頁視為關(guān)聯(lián)組當(dāng)一個(gè)頁出現(xiàn)嚴(yán)重錯(cuò)誤時(shí)同時(shí)提升關(guān)聯(lián)頁的風(fēng)險(xiǎn)等級(jí)。這種策略雖然會(huì)多隔離一些頁但能減少后續(xù)突發(fā)性錯(cuò)誤尤其適用于可靠性較差的 3D NAND 層。14.3 元數(shù)據(jù)一致性問題頁隔離信息分布在內(nèi)存和 NAND 中一旦兩者不一致可能引發(fā)嚴(yán)重問題。例如內(nèi)存中把某頁標(biāo)記為健康而 NAND 元數(shù)據(jù)中顯示該頁已經(jīng)隔離那么系統(tǒng)可能把數(shù)據(jù)寫入一個(gè)實(shí)際不可用的頁反之也可能錯(cuò)誤地放棄一個(gè)健康頁。一致性問題是頁隔離工程實(shí)踐中必須優(yōu)先解決的問題。解決思路包括壞頁表更新采用事務(wù)日志更新前先寫日志再更新數(shù)據(jù)上電時(shí)回放日志恢復(fù)狀態(tài)定期將內(nèi)存中的壞頁表與 NAND 中的備份進(jìn)行校驗(yàn)如果發(fā)現(xiàn)不一致以更保守的狀態(tài)為準(zhǔn)即“寧可多隔離不可誤使用”。對(duì)于無法確認(rèn)的頁先標(biāo)記為高風(fēng)險(xiǎn)頁待后續(xù)巡檢確認(rèn)后再恢復(fù)或正式隔離。15. 展望未來從頁隔離到單元級(jí)管理頁隔離技術(shù)已經(jīng)從概念驗(yàn)證走向了實(shí)際產(chǎn)品但它仍有很大的發(fā)展空間。隨著 NAND 存儲(chǔ)密度繼續(xù)提高頁內(nèi)部各個(gè)存儲(chǔ)單元也會(huì)表現(xiàn)出越來越強(qiáng)的差異性。未來的趨勢可能是把管理粒度進(jìn)一步下沉到單元級(jí)或子頁級(jí)通過更精細(xì)的分組和預(yù)測模型讓每一份存儲(chǔ)單元都能發(fā)揮最大價(jià)值。機(jī)器學(xué)習(xí)和先進(jìn)的過程控制正在改變頁隔離的策略生成方式。傳統(tǒng)頁隔離依賴固定規(guī)則和經(jīng)驗(yàn)閾值而機(jī)器學(xué)習(xí)可以根據(jù)每個(gè)單元的歷史錯(cuò)誤模式、溫度和操作記錄預(yù)測其未來失效概率并動(dòng)態(tài)調(diào)整隔離策略。這種閉環(huán)優(yōu)化可以更準(zhǔn)確地識(shí)別真正的高風(fēng)險(xiǎn)單元避免資源浪費(fèi)。另一方面存儲(chǔ)接口和文件系統(tǒng)的協(xié)同也在深化。例如主機(jī)可以通過標(biāo)準(zhǔn)接口獲取存儲(chǔ)設(shè)備的剩余壽命和壞頁統(tǒng)計(jì)從而主動(dòng)調(diào)整數(shù)據(jù)放置策略把關(guān)鍵數(shù)據(jù)優(yōu)先寫入更可靠的位置。這種系統(tǒng)級(jí)協(xié)同將進(jìn)一步放大頁隔離帶來的壽命和可靠性收益。當(dāng)然單元級(jí)管理也面臨巨大挑戰(zhàn)。首先是元數(shù)據(jù)規(guī)模會(huì)進(jìn)一步膨脹需要新的壓縮和索引技術(shù)其次是策略執(zhí)行復(fù)雜度提升對(duì)控制器算力和內(nèi)存提出更高要求最后是驗(yàn)證和認(rèn)證難度增加需要更完善的故障注入和長期可靠性測試。這些問題需要在學(xué)術(shù)界和工業(yè)界的共同努力下逐步解決。16. 總結(jié)頁隔離技術(shù)為 NAND 存儲(chǔ)系統(tǒng)提供了一種更細(xì)粒度的壞資源管理方式。它不再是“一壞就丟整塊”而是“只隔離壞頁、保留好頁”從而在局部頁損傷日益普遍的今天幫助 NAND 器件保留更多有效容量、延長使用壽命并改善數(shù)據(jù)可靠性。頁隔離與 ECC、RAID、垃圾回收、磨損均衡等機(jī)制緊密結(jié)合是下一代高密度 NAND 管理的重要方向。本文從 NAND 基礎(chǔ)、壞塊產(chǎn)生原因、傳統(tǒng)壞塊管理、頁隔離原理、FTL 實(shí)現(xiàn)、代碼示例、實(shí)測效果、工程挑戰(zhàn)、工業(yè)實(shí)踐和未來趨勢等方面系統(tǒng)梳理了頁隔離技術(shù)的全貌。需要再次強(qiáng)調(diào)頁隔離不是萬能藥真正的整塊失效仍然需要塊級(jí)壞塊管理兜底頁隔離的核心價(jià)值在于處理那些只有少數(shù)頁損壞的“準(zhǔn)壞塊”讓 NAND 在壽命末期仍然保持更高的利用率。對(duì)于存儲(chǔ)產(chǎn)品設(shè)計(jì)者來說落地頁隔離需要重點(diǎn)解決壞頁檢測確認(rèn)、元數(shù)據(jù)一致性、垃圾回收聯(lián)動(dòng)和磨損均衡干擾等問題。對(duì)于普通讀者來說理解頁隔離也有助于認(rèn)識(shí)現(xiàn)代 SSD 和移動(dòng)存儲(chǔ)如何在不可靠的物理介質(zhì)上提供可靠的長期服務(wù)。隨著 NAND 制程繼續(xù)演進(jìn)頁隔離及其更細(xì)粒度的擴(kuò)展形態(tài)會(huì)在存儲(chǔ)系統(tǒng)中發(fā)揮越來越重要的作用。