TWI728618B - 管理壞塊的方法 - Google Patents
管理壞塊的方法 Download PDFInfo
- Publication number
- TWI728618B TWI728618B TW108147385A TW108147385A TWI728618B TW I728618 B TWI728618 B TW I728618B TW 108147385 A TW108147385 A TW 108147385A TW 108147385 A TW108147385 A TW 108147385A TW I728618 B TWI728618 B TW I728618B
- Authority
- TW
- Taiwan
- Prior art keywords
- sub
- data
- bad
- unit
- surface unit
- Prior art date
Links
Images
Landscapes
- Read Only Memory (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本發明係揭露一種管理壞塊的方法包括讀一個壞塊表並依該壞塊表決定一個多子面單元有無壞子面。若該多子面單元無壞子面,則把能填滿一個多子面單元的資料做成一個NFC請求。若該多子面單元有壞子面,則把一子面的資料成一個NFC請求。然後,NFC依此NFC請求一次寫滿一個多子面單元或只寫一個多子面單元的一個子面。
Description
本發明涉及NAND快閃記憶體,特別有關於一種管理NAND快閃記憶體中壞塊的方法。
參考第3圖,一典型的固態硬碟(solid state disc:SSD)包括核心0、核心1及一NAND快閃記憶體。核心0執行NFC、FTL、Sys Meta、BE。核心1執行DC及FE。
參考第4圖,該NAND快閃記憶體有四個晶片(die),每一個晶片有若干塊(block)排成一個M×4矩陣。該矩陣有四欄(column)及M列(row),每一列有四個子面(子面0、子面1、子面2、子面3)組成一個多子面單元。目前,寫資料到一個多子面單元時,幾乎同時把該資料寫入該多子面單元的四個子面,因容易開發SSD韌體程式,且寫入效能好。然而,若該多子面單元有一壞子面(defective sub-plane),則執行這類程式去寫資料會出錯。為解決這問題,有兩種習知方法:跳過(skipping)及補丁(patching)。
在跳過法中,當發現一個多子面單元有一子面是壞的,就跳過這個多子面單元,亦即放棄其他子面,把資料寫到一個有四個好子面的多子面單元。缺點是浪費寶貴的記憶容量。
在補丁法中,保留若干多子面單元,並視其他多子
面單元為普通多子面單元。另外,用一個隨機存取記憶體(random access memory:RAM)貯存一個表格(table)。發現一個普通多子面單元有一壞子面(例如子面3)時,就把資料同時寫到該普通多子面單元的子面0、子面1、子面2及一被保留的多子面單元的子面3。該普通多子面單元子面0、子面1、子面2及該被保留的多子面單元的子面3的關係被寫入該表格。該被保留的多子面單元的子面0、子面1或子面2仍能貯存原應被寫入另一個多子面單元的子面0、子面1或子面2的資料。補丁法比跳過法省記憶容量。然而,保留多子面單元仍是浪費寶貴的記憶容量,且用RAM來貯存補丁關係,也是浪費記憶容量。
有鑑於上述習知技藝之問題,本發明之主要目的是提供一種節省記憶容量的管理壞塊的方法。
為達上述目的,該管理壞塊的方法包括讀一個壞塊表。然後,依該壞塊表判斷一寫入點所在子面是否壞的。若該寫入點所在子面是壞的,則把該寫入點加1子面,跳到下一個子面。若該寫入點所在子面不是壞的,則判斷該寫入點是否一個多子面單元的第一子面(子面0)且該多子面單元的所有子面都是好的。若該寫入點是一個多子面單元的第一子面(子面0)且該多子面單元的所有子面都是好的,則判斷剩餘資料是否大於或等於一個多子面單元。若該剩餘資料大於或等於一個多子面單元,則從該剩餘資料取一個多子面單元的資料,並把該寫入點加一個多子面單元。若剩餘資料小於一個多子面單元,則檢查有無下個任務的資料足以與該剩餘資料湊成一個多子面單元。若有下個任務的資料足以與該剩餘資料湊成一個多子面單
元,則把下個任務的資料加到該剩餘資料而湊足一個多子面單元,並把該寫入點加一個多子面單元。若無下個任務的資料足以與該剩餘資料湊成一個多子面單元,且檢查有無下個任務的資料足以與該剩餘資料湊成一個多子面單元超過3次,則從該剩餘資料取1子面資料,並把該寫入點加1子面,跳到下一子面。然後,把該所取資料做成一個NFC請求。若該寫入點不是一個多子面單元的第一子面(子面0)或該多子面單元有壞子面,則從該剩餘資料取1子面資料,並把該寫入點加1子面,且把資料做成一個NFC請求。然後,判斷有無剩餘資料。若有剩餘資料,則回到依該壞塊表判斷一寫入點所在子面是否壞的。若無剩餘資料,則結束。
BE:後端
Core 0:核心0
Core 1:核心1
DC:資料緩存器
FE:前端
FTL:快閃記憶體轉換層
NAND:NAND快閃記憶體
NFC:NAND快閃記憶體控制器
RPC:RPC通訊
Sys Meta:系統元資料
MP:多子面單元
host:主機
S10~S46:步驟
第1圖是本發明的較佳實施例的管理壞塊的方法的一部分的流程圖;第2圖是本發明的較佳實施例的管理壞塊的方法的另一部分的流程圖;第3圖是一個SSD的方塊圖;且第4圖是第3圖的SSD的一個NAND快閃記憶體的方塊圖。
以下參考相關圖式進一步說明本發明的較佳實施例。為便於理解本發明,以下用相同符號標示相同元件。
參考第1圖及第2圖,本發明的較佳實施例的管
理壞塊的方法可被用於第3圖及第4圖所示的典型的SSD。該SSD包括核心0、核心1及一NAND快閃記憶體。核心0執行NFC、FTL、Sys Meta、BE。核心1執行DC及FE。該SSD的控制器(核0及核1)可執行該管理壞塊的方法而管理該SSD的NAND快閃記憶體的壞塊。
在S10,該主機(host)提供一寫資料的請求(WRITE request)。
在S12,該前端(front end:FE)接收該寫資料的請求,並準備一個資料緩存器(data cache:DC)請求,並把該DC請求送到該DC。
在S14,該DC接收該DC請求,準備一快閃記憶體轉換層(flash translation layer:FTL)請求,並把該FTL請求送到該FTL。
在S16,該FTL接收該FTL請求,準備一個後端(back end:BE)請求,並把該BE請求送到該BE。
在S18,該BE接收該BE請求,準備相關的資源。若該FTL要寫的資料量小於1子面,則該BE把該資料補到1子面的量。因此,該BE送到該NFC的資料至少可填滿1子面。每一個任務(task)包括若干批(batch)。舉例而言,一個包括7子面的任務可能分成兩批(4子面+3子面),或三批(4子面+2子面+1子面或3子面+3子面+1子面),或四批(4子面+1子面+1子面+1子面)。
在S20,該BE讀一個壞塊表(bad-block table),並依該壞塊表判斷一寫入點(write point)所在子面是否壞的。若是,則到S22,否則到S24。該寫入點標示目前所在的子面。
在S22,把該寫入點加1子面,亦即跳過一壞子面
而到下一子面。然後,程序回到S20。
在S24,判斷該寫入點是否一個多子面單元的第一子面且該多子面單元的所有子面都是好的。若是,則到S26,否則到S27。
在S26,判斷剩餘資料是否大於或等於一個多子面單元,例如4面子面。若是,則到S28,否則到S30。
在S28,從該剩餘資料取一個多子面單元,亦即4面子面。這4面子面可能來自一個任務的一批或一個任務的數批。然後,到S36。
在S30,檢查有無下個任務的資料可湊成一個多子面單元。若有,則到S34,否則到S32。
在S32,判斷檢查有無下個任務的次數是否大於或等於一個閥值,例如3。若是,則到S27,否則回到S30。
在S27,從該剩餘資料取1面子面資料。然後,到S29。
在S29,把該寫入點加1子面,亦即跳到下一子面。然後,到S38。
在S34,用這個任務的剩餘資料及下個任務的資料湊成一個多子面單元。
在S36,把該寫入點加一個多子面單元,亦即4面子面。然後,到S38。
在S38,把資料(4面子面或1面子面)做成一個NFC請求,並把該NFC請求送到該NFC。然後,到S40。
在S40,判斷是否完成該FTL請求。若是,則到S42,否則回到S20。
在S42,判斷是否完成所有NFC請求。若是,則
到S44,否則回到S42。
在S44,向與這些NFC請求有關的FTL報告完成這些NFC請求。然後,到S46。
在S46,結束程序。
在較佳實施例中,該多子面單元有4面子面(子面0、子面1、子面2及子面3)。以下舉二例說明上述程序。
在第一例中,該FTL要該BE處理的資料量是7面子面,第一多子面單元的4面子面都是好的,且第二多子面單元的4子面也都是好。
在S20,該BE讀一個壞塊表,並依該壞塊表判斷該寫入點是好子面,然後到S24。
在S24,判斷該寫入點是第一多子面單元的第一子面且第一多子面單元的所有子面都是好的。然後,到S26。
在S26,判斷剩餘資料(7子面)大於4面子面。然後,到S28。
在S28,從該剩餘資料取4子面。然後,到S36。
在S36,把該寫入點加一個多子面單元,亦即4面子面。然後,到S38。
在S38,把該4子面資料做成一個NFC請求,並把該NFC請求送到該NFC。然後,到S40。
在S40,判斷未完成該FTL請求,並回到S20。
在S20,依該壞塊表判斷該寫入點是好子面,然後到S24。
在S24,判斷該寫入點是第二多子面單元的第一子面且第二多子面單元的所有子面都是好的。然後,到S26。
在S26,判斷剩餘資料(3子面)小於4面子面。然
後,到S30。
在S30,判斷無下個任務,並到S32。
在S32,判斷檢查有無下個任務的次數(1)小於該閥值(例如3),並回到S30。
在S30,判斷無下個任務,並到S32。
在S32,判斷檢查有無下個任務的次數(2)小於該閥值(例如3),並回到S30。
在S30,判斷無下個任務,並到S32。
在S32,判斷檢查有無下個任務的次數(3)等於該閥值(例如3),並到S27。
在S27,從剩餘資料取1子面資料。然後,到S29。
在S29,把該寫入點加1子面,亦即跳到下一子面。然後,到S38。
在S38,把1子面資料做成一個NFC請求,並把該NFC請求送到該NFC。
在S40,判斷未完成該FTL請求,並回到S20。
在S20,依該壞塊表判斷該寫入點是好子面,然後到S24。
在S24,判斷該寫入點是第二多子面單元的第二子面,不是第一子面。然後,到S27。
在S27,從剩餘資料取1子面資料。然後,到S29。
在S29,把該寫入點加1子面,亦即跳到下一子面。然後,到S38。
在S38,把1子面資料做成一個NFC請求,並把該NFC請求送到該NFC。
在S40,判斷未完成該FTL請求,並回到S20。
在S20,依該壞塊表判斷該寫入點是好子面,然後到S24。
在S24,判斷該寫入點是第二多子面單元的第三子面,不是第一子面。然後,到S27。
在S27,從剩餘資料取1子面資料。然後,到S29。
在S29,把該寫入點加1子面,亦即跳到下一子面。然後,到S38。
在S38,把1子面資料做成一個NFC請求,並把該NFC請求送到該NFC。
在S40,判斷完成該FTL請求,並到S42。
在S42,判斷是否完成所有NFC請求。若是,則到S44,否則回到S42。
在S44,向與這些NFC請求有關的FTL報告完成這些NFC請求。然後,到S46。
在S46,結束程序。
在第二例中,該FTL要該BE處理的資料量是7子面,第一多子面單元的第四子面是壞的,且第二多子面單元的4子面都是好。
在S20,該BE讀一個壞塊表,並依該壞塊表判斷該寫入點是好子面,然後到S24。
在S24,判斷該寫入點是第一多子面單元的第一子面且第一多子面單元的第四子面是壞的,並到S27。
在S27,從該剩餘資料取1子面。然後,到S29。
在S29,把該寫入點加1子面,亦即跳到下一子面。然後,到S38。
在S38,把該1子面資料做成一個NFC請求,並
把該NFC請求送到該NFC。然後,到S40。
在S40,判斷未完成該FTL請求,並回到S20。
在S20,依該壞塊表判斷該寫入點是好子面,然後到S24。
在S24,判斷該寫入點是第一多子面單元的第二子面且第一多子面單元的第四子面是壞的,並到S27。
在S27,從該剩餘資料取1子面。然後,到S29。
在S29,把該寫入點加1子面,亦即跳到下一子面。然後,到S38。
在S38,把該1子面資料做成一個NFC請求,並把該NFC請求送到該NFC。然後,到S40。
在S40,判斷未完成該FTL請求,並回到S20。
在S20,依該壞塊表判斷該寫入點是好子面,然後到S24。
在S24,判斷該寫入點是第一多子面單元的第三子面且該多子面單元的第四子面是壞的,並到S27。
在S27,從該剩餘資料取1子面。然後,到S29。
在S29,把該寫入點加1子面,亦即跳到下一子面。然後,到S38。
在S38,把該1子面資料做成一個NFC請求,並把該NFC請求送到該NFC。然後,到S40。
在S40,判斷未完成該FTL請求,並回到S20。
在S20,依該壞塊表判斷該寫入點是壞子面,然後到S22。
在S22,把該寫入點加1子面,亦即跳過一壞子面而到下一子面。然後,回到S20。
在S20,依該壞塊表判斷該寫入點是好子面,然後到S24。
在S24,判斷該寫入點是第二多子面單元的第一子面且第二多子面單元的所有子面都是好的,並到S26。
在S26,判斷剩餘資料(4子面)等於4子面,並到S28。
在S28,從該剩餘資料取4子面。然後,到S36。
在S36,把該寫入點加一個多子面單元,亦即4子面。然後,到S38。
在S38,把該4子面資料(4子面有用資料)做成一個NFC請求,並把該NFC請求送到該NFC。然後,到S40。
在S40,判斷完成該FTL請求,並到S42。
在S42,判斷是否完成所有NFC請求。若是,則到S44,否則回到S42。
在S44,向與這些NFC請求有關的FTL報告完成這些NFC請求。然後,到S46。
在S46,結束程序。
以上僅為描述本發明的較佳實施方式,非用以限定本發明的範圍。本技術領域內的一般技術人員根據上述實施例所作的均等變化,以及本領域內技術人員熟知的改變,仍在本發明的範圍內。
BE‧‧‧後端
Core 0‧‧‧核心0
Core 1‧‧‧核心1
DC‧‧‧資料緩存器
FE‧‧‧前端
FTL‧‧‧快閃記憶體轉換層
NAND‧‧‧NAND快閃記憶體
NFC‧‧‧NAND快閃記憶體控制器
RPC‧‧‧RPC通訊
Sys Meta‧‧‧系統元資料
host‧‧‧主機
Claims (3)
- 一種管理壞塊的方法,包括:任務開始;讀取一壞塊表並判斷一寫入點是否一壞子面(S20);若該寫入點是一壞子面,則把該寫入點加一子面(S22),然後回到判斷一寫入點是否一壞子面的步驟;若該寫入點不是一壞子面,則判斷該寫入點是否一個多子面單元的第一子面且該多子面單元的子面都是好的(S24);若該寫入點是一個多子面單元的第一子面且該多子面單元的所有子面都是好的,則判斷一個目前任務的剩餘資料是否大於或等於一個多子面單元(S26);若該剩餘資料大於或等於一個多子面單元,則從該剩餘資料取一個多子面單元的資料(S28);把該寫入點加一個多子面單元(S36);把所取的資料做成一個NFC請求(S38);判斷是否完成目前任務(S40);及若未完成目前任務,則回到判斷一寫入點是否一壞子面(S20)的步驟。
- 如請求項1所述之管理壞塊的方法,還包括:若剩餘資料小於一個多子面單元,則檢查有無下個任務的資料可湊成一個多子面單元(S30);若有下個任務的資料可湊成一個多子面單元,則用下個任務的資料湊成一個多子面單元(S34),並到把該寫入點加一 個多子面單元的步驟(S36);若無下個任務的資料可湊成一個多子面單元,則判斷檢查有無下個任務的資料可湊成一個多子面單元的次數是否大於或等於一個閥值(S32);若檢查有無下個任務的資料可湊成一個多子面單元的次數小於該閥值,則回到檢查有無下個任務的資料可湊成一個多子面單元的步驟(S30);若檢查有無下個任務的資料可湊成一個多子面單元的次數大於或等於該閥值,則從目前任務的剩餘資料取1子面資料(S27);及把該寫入點加一子面,亦即跳到下一子面(S29),並到把所取的資料做成一個NFC請求的步驟(S38)。
- 如請求項1所述之管理壞塊的方法,還包括讀一壞塊表,其中判斷一寫入點是否一壞子面(S20)的步驟包括依該壞塊表判斷一寫入點是否一壞子面(S20)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW108147385A TWI728618B (zh) | 2019-12-24 | 2019-12-24 | 管理壞塊的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW108147385A TWI728618B (zh) | 2019-12-24 | 2019-12-24 | 管理壞塊的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
TWI728618B true TWI728618B (zh) | 2021-05-21 |
TW202125220A TW202125220A (zh) | 2021-07-01 |
Family
ID=77036752
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW108147385A TWI728618B (zh) | 2019-12-24 | 2019-12-24 | 管理壞塊的方法 |
Country Status (1)
Country | Link |
---|---|
TW (1) | TWI728618B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW200915331A (en) * | 2007-09-28 | 2009-04-01 | Super Talent Electronics Inc | Managing bad blocks in various flash memory cells for electronic data flash card |
TW201419296A (zh) * | 2012-09-21 | 2014-05-16 | Toshiba Kk | 半導體記憶裝置 |
TW201732532A (zh) * | 2016-03-04 | 2017-09-16 | 愛思開海力士有限公司 | 資料處理系統及其操作方法 |
TW201828069A (zh) * | 2017-01-23 | 2018-08-01 | 韓商愛思開海力士有限公司 | 記憶體裝置、記憶體系統及其操作方法 |
TW201837724A (zh) * | 2017-03-29 | 2018-10-16 | 南韓商愛思開海力士有限公司 | 記憶體系統及其操作方法 |
CN109783017A (zh) * | 2015-01-27 | 2019-05-21 | 华为技术有限公司 | 一种存储设备坏块的处理方法、装置及存储设备 |
-
2019
- 2019-12-24 TW TW108147385A patent/TWI728618B/zh active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW200915331A (en) * | 2007-09-28 | 2009-04-01 | Super Talent Electronics Inc | Managing bad blocks in various flash memory cells for electronic data flash card |
TW201419296A (zh) * | 2012-09-21 | 2014-05-16 | Toshiba Kk | 半導體記憶裝置 |
CN109783017A (zh) * | 2015-01-27 | 2019-05-21 | 华为技术有限公司 | 一种存储设备坏块的处理方法、装置及存储设备 |
TW201732532A (zh) * | 2016-03-04 | 2017-09-16 | 愛思開海力士有限公司 | 資料處理系統及其操作方法 |
TW201828069A (zh) * | 2017-01-23 | 2018-08-01 | 韓商愛思開海力士有限公司 | 記憶體裝置、記憶體系統及其操作方法 |
TW201837724A (zh) * | 2017-03-29 | 2018-10-16 | 南韓商愛思開海力士有限公司 | 記憶體系統及其操作方法 |
Also Published As
Publication number | Publication date |
---|---|
TW202125220A (zh) | 2021-07-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10303596B2 (en) | Read-write control method for memory, and corresponding memory and server | |
DE102015014851B4 (de) | Ressourcenzuteilung und -freigabe für die Energieverwaltung in Vorrichtungen | |
TWI489373B (zh) | 資料儲存裝置和快閃記憶體之區塊管理方法 | |
JP4688584B2 (ja) | ストレージ装置 | |
DE102019116520A1 (de) | Datenspeichersysteme und -verfahren für eine verbesserte datenumlagerung basierend auf lesepegelspannungen, die mit einer fehlerwiederherstellung verbunden sind | |
DE102020107659A1 (de) | Zonenbildung für gezonte namensräume | |
US20080195833A1 (en) | Systems, methods and computer program products for operating a data processing system in which a file system's unit of memory allocation is coordinated with a storage system's read/write operation unit | |
CN111324303B (zh) | Ssd垃圾回收方法、装置、计算机设备及存储介质 | |
TW200905685A (en) | Memory apparatus, and method of averagely using blocks of a flash memory | |
EP4012547B1 (en) | Storage method and apparatus for key value (kv) and storage device | |
US20180300250A1 (en) | Method and apparatus for storing data | |
CN110347613B (zh) | 多租户固态盘中实现raid的方法、控制器及多租户固态盘 | |
US20200133810A1 (en) | Method for managing multiple disks, electronic device and computer program product | |
JP6139711B2 (ja) | 情報処理装置 | |
CN104268099A (zh) | 一种管理数据读写的方法及装置 | |
KR100643287B1 (ko) | 플래시 메모리의 데이터 처리 장치 및 방법 | |
CN108628760B (zh) | 原子写命令的方法与装置 | |
JP4762323B2 (ja) | アクセス制御装置、情報処理装置、アクセス制御プログラム及びアクセス制御方法 | |
CN108563586B (zh) | 一种分离固态盘中垃圾回收数据与用户数据的方法 | |
CN110347338A (zh) | 混合内存数据交换处理方法、系统及可读存储介质 | |
CN101908007B (zh) | 存储系统和计算机系统 | |
TWI728618B (zh) | 管理壞塊的方法 | |
CN116540950B (zh) | 一种存储器件及其写入数据的控制方法 | |
WO2016206070A1 (zh) | 一种文件更新方法及存储设备 | |
CN108897618B (zh) | 一种异构内存架构下基于任务感知的资源分配方法 |