如何成為一個(gè)具有領(lǐng)導(dǎo)力的SSD主控? 之前的文章中,已經(jīng)偷偷的分享了SSD主控的成功秘訣: 1. 針對(duì)Host和NAND閃存采用不同的安撫策略(Interface/protocol); 2. 高效的處理Host和NAND閃存之間的數(shù)據(jù)傳輸,并保證數(shù)據(jù)的完整性。 此時(shí)還是很有必要再一次把SSD主控架構(gòu)圖請(qǐng)出來(最近出鏡率有點(diǎn)高哈,這一次應(yīng)該是最后一次麻煩TA老人家咯): SSD主控的夢(mèng)想就是實(shí)現(xiàn)以下功能: 1. 磨損平衡(Wear-leveling) 2. 垃圾數(shù)據(jù)回收(Garbage Collection) 3. 壞塊管理(Bad Block Management) 4. 數(shù)據(jù)糾錯(cuò)處理(ECC, Error Correction Code) SSD主控的想法是好,但是理想和現(xiàn)實(shí)總是有或多或少的差距,現(xiàn)實(shí)是Host的愿景跟NAND閃存的本性有了沖突。 在逆境境中才能檢驗(yàn)SSD主控的真實(shí)領(lǐng)導(dǎo)力,SSD主控大膽的啟用了邏輯與物理轉(zhuǎn)換層(logical to physical)的概念,也稱為閃存轉(zhuǎn)換層 (FTL,F(xiàn)lash Translation Layer)。 有了閃存轉(zhuǎn)換層FTL這一秘密武器,SSD主控可以輕松實(shí)現(xiàn)自己的夢(mèng)想。 1. 磨損平衡(Wear-leveling,WL) 在現(xiàn)實(shí)應(yīng)用過程中,SSD主控在NAND閃存寫入數(shù)據(jù)時(shí),并非均勻等機(jī)會(huì)的寫入NAND閃存的每一個(gè)區(qū)塊(Block)。 為了最大化的延長(zhǎng)SSD的存儲(chǔ)壽命,閃存轉(zhuǎn)換層FTL引入磨損平衡(Wear-leveling)技術(shù),盡量使NAND閃存的每一個(gè)Block/Page壽命均衡化。 在Host對(duì)同一邏輯區(qū)塊更新數(shù)據(jù)時(shí),SSD主控會(huì)動(dòng)態(tài)的指向不同的物理區(qū)塊,之前的物理區(qū)塊標(biāo)記為“無效”,進(jìn)入等待保養(yǎng)狀態(tài),這樣就可以確保每一個(gè)物理區(qū)塊都被使用。 用更通俗的話來講就是,每次寫入的時(shí)候挑年輕力壯的區(qū)塊, 年老的區(qū)塊則頤養(yǎng)天年。 2. 垃圾數(shù)據(jù)回收(Garbage Collection, GC) 垃圾數(shù)據(jù)回收GC技術(shù), 類似于平時(shí)我們電腦、手機(jī)內(nèi)存整理優(yōu)化的概念。 3. 壞塊管理(Bad Block Management,BBM) 在終端客戶使用的過程也會(huì)不斷產(chǎn)生壞塊,SSD主控會(huì)及時(shí)更新壞塊表單。 4. 數(shù)據(jù)糾錯(cuò)處理(ECC, Error Correction Code) NAND閃存不能保證數(shù)據(jù)在整個(gè)生命周期里都不出錯(cuò),NAND閃存一般不會(huì)整個(gè)Block或Page全部出錯(cuò),只是其中的一個(gè)或者幾個(gè)bit出錯(cuò),如果直接將整個(gè)Block標(biāo)記為壞塊,那實(shí)在是太浪費(fèi)了(罪過,罪過~~~)。 數(shù)據(jù)糾錯(cuò)處理(ECC, Error Correction Code)技術(shù)可以糾正一定數(shù)量的錯(cuò)誤bit。目前SSD主控基本通過硬件的方式實(shí)現(xiàn),主流的SSD ECC糾錯(cuò)技術(shù)主要有BCH編碼和LDPC編碼。 1. S.-W. Lee, D.-J. Park, T.-S. Chung, D.-H. Lee, S.-W. Park, H.-J. Songe, FAST: A log-buffer based FTL scheme with fully associative sector translation, in 2005 US-Korea Conference on Science, Technology, & Entrepreneurship, Seoul, Aug 2005 2. R. Micheloni, A. Marelli, R. Ravasio, Error Correction Codes for Non-Volatile Memories (Springer, Dordrecht, 2008) |
|