KR20180137418A - 메모리 회수 모니터링 - Google Patents
메모리 회수 모니터링 Download PDFInfo
- Publication number
- KR20180137418A KR20180137418A KR1020180068293A KR20180068293A KR20180137418A KR 20180137418 A KR20180137418 A KR 20180137418A KR 1020180068293 A KR1020180068293 A KR 1020180068293A KR 20180068293 A KR20180068293 A KR 20180068293A KR 20180137418 A KR20180137418 A KR 20180137418A
- Authority
- KR
- South Korea
- Prior art keywords
- block
- data
- stripe
- failed
- controller
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/08—Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
- G11C29/10—Test algorithms, e.g. memory scan [MScan] algorithms; Test patterns, e.g. checkerboard patterns
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0706—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
- G06F11/073—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1012—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1076—Parity data used in redundant arrays of independent storages, e.g. in RAID systems
- G06F11/108—Parity data distribution in semiconductor storages, e.g. in SSD
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0616—Improving the reliability of storage systems in relation to life time, e.g. increasing Mean Time Between Failures [MTBF]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/062—Securing storage systems
- G06F3/0622—Securing storage systems in relation to access
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0653—Monitoring storage devices or systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0685—Hybrid storage combining heterogeneous device types, e.g. hierarchical storage, hybrid arrays
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/08—Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
- G11C29/12—Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
- G11C29/18—Address generation devices; Devices for accessing memories, e.g. details of addressing circuits
- G11C29/30—Accessing single arrays
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/08—Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
- G11C29/12—Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
- G11C29/38—Response verification devices
- G11C29/42—Response verification devices using error correcting codes [ECC] or parity check
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/08—Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
- G11C29/12—Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
- G11C29/44—Indication or identification of errors, e.g. for repair
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/52—Protection of memory contents; Detection of errors in memory contents
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1032—Reliability improvement, data loss prevention, degraded operation etc
- G06F2212/1036—Life time enhancement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/70—Details relating to dynamic memory management
- G06F2212/702—Conservative garbage collection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7203—Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7205—Cleaning, compaction, garbage collection, erase control
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/08—Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
- G11C29/12—Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
- G11C29/18—Address generation devices; Devices for accessing memories, e.g. details of addressing circuits
- G11C29/30—Accessing single arrays
- G11C29/32—Serial access; Scan testing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Quality & Reliability (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Detection And Correction Of Errors (AREA)
- Debugging And Monitoring (AREA)
Abstract
본 명세서에 제시된 시스템 및 방법은 블록, 페이지, 및/또는 스트라이프 열화(degradation)를 모니터링하는 것을 제공한다. 일 실시예에서, 제어기는 메모리의 제1 블록을 스캔하여 제1 블록의 일부분 내의 고장(failure)을 식별하도록 동작가능하다. 제어기는 제1 블록의 고장난 부분에 대한 입출력(I/O) 동작들을 일시정지하고, 제1 블록의 고장난 부분을 검사하여 고장이 일시적인 고장인 것인지 여부를 판정한다. 검사는 제1 블록의 부분을 데이터로 로딩하는 것, 및 제1 블록의 로딩된 부분으로부터 데이터를 판독하는 것을 포함한다. 검사 후 고장이 진정되는(subside) 경우, 제어기는 고장이 일시적인 고장인 것으로 판정하고, 제1 블록의 부분에 대한 I/O 동작들을 재개하도록 추가로 동작가능하다.
Description
솔리드 스테이트 드라이브(Solid State Drive, SSD)와 같은 일부 데이터 저장 디바이스들은, 하드 디스크 드라이브(Hard Disk Drive, HDD)처럼 움직이는 기계적 컴포넌트들을 이용하지 않는다. 예를 들어, 일부 저장 디바이스들은 데이터를 지속적으로 저장하기 위한 메모리 셀들로서 집적회로를 사용한다. 메모리 셀들은 "페이지들"로 배열되며, 이는 "블록들"로 배열된다. 그리고, 블록들은 다이의 "플레인" 상에 배열된다. 전형적으로, 블록이 프로그램, 소거, 또는 판독 동작 동안 지속적으로 고장나는(fail) 경우, 전체 블록은 이용가능한 메모리 풀로(memory pool)부터 회수(retire) 및 제거된다. 예를 들어, 메모리 셀들은 더 많이 사용될수록 고장나기 쉽다. 셀들은 전형적으로, 고장이 발생하기 전에 수천의 판독/기록들을 다루도록 설계된다. 그러나, 시간이 지남에 따라, 판독들/기록들은 셀들의 플로팅 게이트들의 산화물 층을 마모시켜, 데이터를 저장하는 셀의 능력을 파괴한다. 일단 블록의 메모리 셀들이 고장나면, 블록은, 블록의 부분들이 여전히 사용가능하더라도, 저장 디바이스의 이용가능한 메모리 풀로부터 제거된다.
본 명세서에 제시된 시스템 및 방법은 블록, 페이지, 및/또는 스트라이프 열화(degradation)를 모니터링하는 것을 제공한다. 일 실시예에서, 제어기는 메모리의 제1 블록을 스캔하여 제1 블록의 일부분 내의 고장을 식별하도록 동작가능하다. 제어기는 또한, 제1 블록의 고장난 부분에 대한 입출력(I/O) 동작들을 일시정지하고, 제1 블록의 고장난 부분을 검사하여 고장이 일시적인 고장인 것인지 여부를 판정하도록 동작가능하다. 검사는 제1 블록의 부분을 데이터로 로딩하는 것, 및 (예를 들어, 에러 정정 코드(error correction code, ECC)로) 제1 블록의 로딩된 부분으로부터의 데이터를 판독하는 것을 수반한다. 검사 후 고장이 진정되는(subside) 경우, 제어기는 고장이 일시적인 고장인 것으로 판정하고, 제1 블록의 부분에 대한 I/O 동작들을 재개한다.
본 명세서에 개시된 다양한 실시예들은 설계 선택의 문제로서 다양한 방식들로 구현될 수 있다. 예를 들어, 그것의 시스템 및 방법 실시예들은 컴퓨터 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합들의 형태를 취할 수 있다. 다른 예시적인 실시예들이 하기에 기술된다.
이제 일부 실시예들이 단지 예시로서, 그리고 첨부 도면을 참조하여 기술된다. 동일한 참조 번호는 모든 도면들 상에서 동일한 요소 또는 동일한 유형의 요소를 나타낸다.
도 1은 블록들이 개방될 때 기록을 다루는 예시적인 저장 시스템의 블록도이다.
도 2는 도 1의 저장 시스템의 예시적인 프로세스의 흐름도이다.
도 3은 도 1의 저장 시스템의 다른 예시적인 프로세스의 흐름도이다.
도 4는 저장 시스템의 예시적인 블록 레이아웃의 도면이다.
도 5 내지 도 8은 도 1의 저장 시스템의 다른 예시적인 프로세스의 흐름도들이다.
도 9는 예시적인 저장 제어기 및 그것의 연관된 저장 디바이스의 블록도이다.
도 10은 저장 디바이스들, 및 호스트 시스템과 인터페이싱하는 그들의 연관된 제어기들을 포함하는 I/O 모듈의 블록도이다.
도 1은 블록들이 개방될 때 기록을 다루는 예시적인 저장 시스템의 블록도이다.
도 2는 도 1의 저장 시스템의 예시적인 프로세스의 흐름도이다.
도 3은 도 1의 저장 시스템의 다른 예시적인 프로세스의 흐름도이다.
도 4는 저장 시스템의 예시적인 블록 레이아웃의 도면이다.
도 5 내지 도 8은 도 1의 저장 시스템의 다른 예시적인 프로세스의 흐름도들이다.
도 9는 예시적인 저장 제어기 및 그것의 연관된 저장 디바이스의 블록도이다.
도 10은 저장 디바이스들, 및 호스트 시스템과 인터페이싱하는 그들의 연관된 제어기들을 포함하는 I/O 모듈의 블록도이다.
도면들 및 하기의 설명은 구체적인 예시적 실시예들을 예시한다. 따라서, 당업자는, 본 명세서에 명시적으로 기술되거나 도시되지는 않더라도, 실시예들의 범주 내에 포함되는 특정 원리들을 구현하는 다양한 배열들을 고안할 수 있을 것이라는 것이 이해될 것이다. 또한, 본 명세서에 기술된 임의의 예들은 실시예들의 원리들을 이해하는 것을 돕는 것으로 의도되고, 이러한 구체적으로 언급된 예들 및 조건들에 대해 제한하지 않는 것으로 해석되어야 한다. 결과적으로, 실시예들은 하기에 기술된 임의의 특정 예들에 제한되지 않는다.
도 1은 호스트 시스템(하기에 도시됨)으로부터의 I/O 요청들로부터 기인하는 데이터를 저장하도록 동작가능한 예시적인 저장 시스템(10)의 블록도이다. 저장 시스템(10)은 저장 요소(14)(예를 들어, 비휘발성 NAND 플래시 디바이스 또는 다른 지속적 저장소 저장소) 및 선택적 버퍼(13)(예를 들어, 캐싱, 스테이징 등을 위한, 동적 랜덤 액세스 메모리, 또는 "DRAM")를 추가로 포함하는 저장 디바이스(15)를 포함한다. 예를 들어, 저장 요소(14)는 단일 레벨 셀(Single Level Cell, SLC) 아키텍처 및 멀티-레벨 셀(Multi-Level Cell, MLC) 아키텍처와 같은, 하나 이상의 SSD 아키텍처를 사용하여 구성될 수 있다. SLC 아키텍처는 메모리 셀이 1 비트의 데이터를 저장할 수 있게 한다. 전통적으로, MLC 아키텍처는 메모리 셀이 2 비트의 데이터를 저장할 수 있음을 의미하였다. 그러나, 아키텍처들은 진화하였고 이제는 훨씬 더 높은 레벨의 밀도를, 예컨대 메모리 셀 당 3 비트를 저장하는 트리플 레벨 셀(Triple Level Cell, TLC) 아키텍처, 및 메모리 셀 당 4 비트를 저장하는 쿼드 레벨 셀(Quad Level Cell, QLC) 아키텍처를 제공한다. 그러나, 일반적으로, 셀당 1 비트 초과의 데이터를 저장하는 임의의 아키텍처는 또한 MLC 아키텍처로 지칭될 수 있다.
저장 요소(14)의 각각의 메모리 셀은 제어 게이트를 갖는 금속 산화물 반도체 전계 효과 트랜지스터(MOSFET)처럼 구성될 수 있다. 그러나, 각각의 메모리 셀은 또한 MOSFET의 제어 게이트와 채널 사이에 구성된 절연 산화물 층에 의해 둘러싸인 플로팅 게이트를 갖는다. 플로팅 게이트는 그것의 절연 층에 의해 전기적으로 절연되므로, 그 위에 배치된 전자들은 그들이 전기장의 인가(예를 들어, 인가된 전압)에 의해 제거될 때까지 트랩된다. 전자들을 플로팅 게이트 상에 배치하는 것은 트랜지스터를 논리 "0" 상태로 설정한다. 일단 플로팅 게이트가 충전되면, 그 내의 전자들은 제어 게이트로부터 전기장을 차단함으로써, 메모리 셀의 임계 전압을 증가시킨다. 이는 더 높은 전압이 제어 게이트에 인가되어 트랜지스터의 채널을 전도성으로 만드는 것을 의미한다.
트랜지스터로부터 값을 기록하기 위하여, 임계 전압들 사이의 중간 전압이 제어 게이트에 인가된다. 채널이 이 중간 전압에서 전도되는 경우, 플로팅 게이트는 충전되지 않고 논리 "1"이 메모리 셀에 저장되게 한다. 채널이 중간 전압에서 전도되지 않는 경우, 그것은, 플로팅 게이트가 충전되어 논리 "0"이 메모리 셀에 저장되게 하는 것을 나타낸다. 논리 "0" 또는 논리 "1"의 존재는, 중간 전압이 제어 게이트 상에서 어써팅(asserting)될 때 트랜지스터를 통해 흐르는 전류가 있는지 여부를 판정함으로써, 감지 또는 "판독"된다.
아키텍처(예를 들어, SLC, MLC, 자기저항, 또는 이들의 조합)과 상관없이, 메모리 셀들은 일반적으로, 단일 페이지 내에 수천 개의 셀들을 전형적으로 포함하는 페이지들로 배열된다. 예를 들어, SLC 플래시 디바이스의 단일 페이지는 16,384 비트의 데이터 또는 16 킬로바이트(kB)를 저장할 수 있는 16,384개의 메모리 셀들을 포함할 수 있다. 2-비트 MLC 플래시 디바이스의 단일 페이지는 동일한 양의 데이터를 저장할 수 있는 8,192개의 메모리 셀들을 포함할 수 있다. 전형적인 페이지 크기들은 2kB, 4kB, 8kB, 및 16kB를 포함한다. 플래시 디바이스의 페이지들은 블록들로 배열되며, 이때 각각의 블록은 통상적으로 128 또는 256개 페이지들을 포함한다. 따라서, 플래시 디바이스 내의 각각의 블록은 256 kB와 4 메가바이트(MB) 사이에서 달라질 수 있다. 데이터가 플래시 디바이스에 기록되어야 할 때, 제어기(11)는 블록이 찰 때까지 페이지 단위로 디바이스를 프로그래밍한다. 플래시 디바이스의 블록이 가득 차면, 블록은 제어기(11)가 블록에 대한 소거 프로세스를 수행할 때까지 폐쇄된다. 그러나, 기술이 진보함에 따라 이러한 특징들은 끊임없이 변화하므로, 실시예는 임의의 페이지 크기 또는 블록 크기로 제한되도록 의도되지 않음을 주의하여야 한다.
전술한 사항에 기초하여, 제어기(11)는 저장 디바이스(15)로부터 데이터를 판독하고 그에 데이터를 기록하라는 I/O 요청들을 서비스하도록 동작가능한 임의의 디바이스, 시스템, 소프트웨어, 펌웨어, 또는 이들의 조합이다. 저장 요소(14)는 하나 이상의 비트의 데이터를 지속적으로 저장하도록 동작가능한 메모리를 포함하는 임의의 디바이스이다.
도 2는 도 1의 저장 시스템(10)의 예시적인 프로세스(20)의 흐름도이다. 이 실시예에서, 제어기(11)는, 프로세스 요소(21)에서, 저장 요소(14) 내의 메모리의 블록을 스캔하여, 프로세스 요소(22)에서, 블록의 일부 부분(예를 들어, 하나 이상의 셀, 블록의 하나 이상의 페이지, 전체 블록 자체 등) 내에 에러가 있는지 여부를 판정하도록 동작가능하다. 예를 들어, 제어기(11)는 백그라운드 스캔 프로세스 동안 표준 ECC를 사용하여 블록의 메모리로부터 데이터를 판독하여, ECC로 정정될 수 없는 임의의 에러가 존재하는지 여부를 판정할 수 있다.
에러가 존재하는 경우, 제어기(11)는, 프로세스 요소(23)에서, 블록의 고장난 부분에 대한 I/O 동작들을 일시정지한다. 블록의 부분이 일시정지되는 동안, 제어기(11)는, 프로세스 요소(24)에서, 먼저 블록에 대한 가비지 수집(garbage collection)을 수행함으로써 블록의 그 부분을 검사하는 것을 시작할 수 있다. 예를 들어, 제어기(11)는 더 이상 사용되지 않는 블록들의 소거되지 않은 부분을 이동시킬 수 있다. 이어서 제어기(11)에 의한 백그라운드 태스크는 블록의 부분을 소거한다.
나중에, 제어기(11)는, 프로세스 요소(25)에서, 블록의 고장난 부분을 데이터로 로딩하고, 프로세스 요소(26)에서, 블록의 새롭게 로딩된 부분을 ECC로 판독한다. 예를 들어, 제어기(11)는 검사 데이터를 블록의 부분들 내에 로딩할 수 있다. 프로세스 요소(27)에서, 알려져 있는 이 검사 데이터는, ECC로 판독되고 이어서 블록의 부분들 내에 원래 로딩되었던 데이터와 비교되어, 임의의 에러가 여전히 존재하는지 여부를 판정할 수 있다.
대안적으로, 제어기(11) 데이터는 실제 I/O의 것으로부터 온다. 예를 들어, 제어기(11)는 데이터가 저장 시스템(10) 내의 어딘가에 저장될 수 있을 때까지 I/O 요청을 프로세싱하고 I/O 요청의 데이터를 버퍼(13) 내에 캐싱할 수 있다. 제어기(11)는 이 데이터를 사용하여 그것을 블록의 일시정지된 부분 내에 로딩할 수 있다. 이어서 제어기(11)는, 프로세스 요소(27)에서, ECC를 사용하여 그 데이터를 다시 판독하고 그것을 버퍼(13) 내의 데이터와 비교하여 임의의 에러가 여전히 존재하는지 여부를 판정할 수 있다.
에러가 여전히 존재하는 경우, 제어기(11)는 이어서, 프로세스 요소(28)에서, ECC를 증가시키고(예를 들어, 코드 레이트를 증가시키고), 프로세스 요소(29)에서, 블록의 그 부분의 고장 카운트를 증분시킬 수 있다. 예를 들어, 이러한 검사 프로세스는 사실상 반복적일 수 있다. 그리고, 제어기(11)는 데이터를 정확하게 판독하기 위해 블록의 그 부분이 고장나는 횟수를 카운트하도록 동작가능하다. 이와 관련하여, 제어기(11)는, 프로세스 요소(30)에서, 고장 카운트가 고장들의 임계 수를 초과(breach)하였는지 여부를 판정할 수 있다. 블록의 부분이 임계치를 초과하지 않은 경우, 제어기(11)는, 프로세스 요소(24)에서, 블록에 대한 다른 가비지 수집을 수행하고, 프로세스는 이전과 같이 계속된다. 그러나, 프로세스 요소(30)에서, 블록의 그 부분이 임계 고장 카운트에 도달하는 경우, 제어기(11)는, 프로세스 요소(31)에서, 블록의 그 부분을 회수하여, 어떠한 다른 I/O들도 블록의 그 부분에 지시되지 않을 수 있도록 한다.
프로세스 요소(27)로 되돌아가서, 프로세스 요소(26)에서, 블록의 로딩된 부분을 판독한 후 에러가 존재하지 않는 경우, 제어기(11)는, 프로세스 요소(32)에서, 전술된 고장 카운트가 0보다 큰지 여부를 판정한다. 블록의 부분은 성공적으로 판독을 통과했으므로, 제어기(11)는, 프로세스 요소(33)에서, 고장 카운트를 감분시킨다(decrement). 고장 카운트가 여전히 0보다 큰 경우, 제어기(11)는 블록의 그 부분을 검사하는 것(예를 들어, 가비지를 수집하는 것, 및 블록의 그 부분을 로딩 및 판독하는 것)을 계속한다. 그렇지 않으면, 고장 카운트가 0(또는 일부 다른 허용가능한 임계치)과 동일한 경우, 제어기(11)는 블록의 그 부분을 저장 시스템(10)의 메모리 풀로 반환한다. 즉, 제어기(11)는 블록의 그 부분을 일시정지로부터 반환하여, 프로세스 요소(34)에서, 블록의 그 부분에 대한 I/O 동작들이 계속될 수 있도록 한다. 이어서 제어기(11)는 블록의 이전에 고장난 그 부분 뿐만 아니라, 저장 요소(14) 내의 다른 블록들을 주기적으로 스캔하는 것을 계속한다.
I/O 요청들은 호스트 시스템으로부터 직접 올 수 있고 그리고 종종 그렇다는 것을 또한 주의하여야 한다. 그러나, I/O 요청들은 저장 시스템(10)에 도달하기 전에 다른 디바이스 내에 캐싱될 수 있다. 예를 들어, I/O 요청들은 실행되기 전에 버퍼(13) 내에 캐싱될 수 있거나, 또는 심지어 다른 저장 디바이스들 자체에 의해 발행될 수도 있다. 따라서, 실시예는 임의의 특정 유형의 I/O 요청에 제한되도록 의도되지 않는다.
도 3은 저장 시스템(10)의 다른 예시적인 프로세스(40)의 흐름도이다. 실시예에서, 저장 시스템(10)은 RAID(Redundant Array of Independent Disk) 시스템의 것과 유사한 스트라이프 구성을 갖는다. 이와 관련하여, 데이터의 페이지는 저장 요소(14)의 다수의 블록들 내에 프로그래밍/복제될 수 있다. 예를 들어, 도 4는 저장 요소(14) 내에 상주할 수 있는 블록들 "0" 내지 "N"을 예시한다(여기서 "N"은 단지, "1"보다 크고 본 명세서에서 지정된 임의의 다른 "N" 기준과 반드시 동일하지는 않은 정수를 나타내도록 의도된다). 블록들은 페이지들 0 내지 M을 포함한다(여기서 "M"은 단지, "1"보다 크고 본 명세서에서 지정된 임의의 다른 "N" 기준과 반드시 동일하지는 않은 정수를 나타내도록 의도된다). 그러나, 이 경우에서, 페이지들은 블록들 "0" 내지 "N"에 걸쳐 스트라이핑된다. 예시하기 위하여, 블록들(0, 1, 3, 및 N)은 각각 페이지 "1"을 포함한다. 각각의 페이지 "1"은 블록들 내의 다른 페이지 "1"의 데이터의 복제이다. 즉, 블록 "0"의 페이지 "1"은 블록 "1"의 페이지 "1"의 동일한 데이터를 포함하며, 이는 블록 "3"의 페이지 "1"의 동일한 데이터를 포함하는 등이다.
이것을 유념하여, 제어기(11)는, 프로세스 요소(41)에서, 스트라이프를 스캔한다. 이어서 제어기(11)는, 프로세스 요소(42)에서, 에러가 판독 스트라이프 내에 존재하는지 여부를 판정한다. 에러가 스트라이프 내에 존재하는 경우, 제어기(11)는 이어서, 프로세스 요소(43)에서, 그 스트라이프에 대한 I/O 동작들을 일시정지하고, 제어기(11)는, 프로세스 요소(44)에서, 스트라이프의 페이지들을 XOR 처리하여 스트라이프의 고장난 페이지(들)를 판정할 수 있다. 예를 들어, 블록 "0"의 페이지 "1"이 에러를 갖고 블록들(1, 3, 및 N)의 나머지 페이지 "1"들은 양호한 데이터를 갖는다고 가정한다. 제어기(11)는 블록들을 서로 XOR 처리하여, 블록 "0"의 페이지 "1"에서 에러를 위치파악할 수 있다. 대안적으로 또는 추가적으로, 제어기(11)는 데이터를 복구하기 위해 일부 다른 기술(예를 들어, 리드 솔로몬(Reed Solomon), ECC 등)을 사용할 수 있다.
일단 고장난 페이지(들)가 위치파악되었으면, 제어기(11)는, 프로세스 요소(45)에서, 스트라이프의 블록들에 대한 가비지 수집을 수행한다. 예를 들어, 제어기(11)는 고장난 페이지들을 소거할 수 있다. 이어서, 제어기(11)는, 프로세스 요소(46)에서, 페이지들을 데이터(예를 들어, 전술한 바와 유사한 검사 데이터 또는 실제 데이터)로 로딩할 수 있다. 제어기(11)는 이어서, 프로세스 요소(47)에서, ECC를 사용하여 페이지들로부터 데이터를 판독하고, 이어서 프로세스 요소(48)에서, 에러가 페이지(들) 내에 여전히 존재하는지 여부를 판정한다. 에러가 여전히 존재하는 경우, 제어기(11)는, 프로세스 요소들(49, 50)에서, ECC를 증가시키고 고장 카운트를 증분시키며, 이는 전술한 바와 유사하다.
프로세스 요소(51)에서, 고장 카운트가 고장들의 소정 임계 수보다 큰 경우, 제어기(11)는 고장난 페이지(들)를 회수한다. 모든 페이지들이 임계치보다 큰 횟수로 고장난 것으로 판정되는 경우, 제어기(11)는 전체 스트라이프를 회수할 수 있다. 그러나, 고장 카운트가 고장들의 임계 수보다 작은 경우, 제어기(11)는 고장난 페이지(들)를 검사하는 것(예를 들어, 스트라이프의 블록(들)에 대한 가비지 수집을 수행하고, 페이지들을 데이터로 로딩하고, 페이지들을 ECC로 판독하는 것)을 계속한다.
프로세스 요소(48)로 되돌아가서, 고장난 페이지를 검사한 후 에러가 발생하지 않은 경우, 제어기(11)는, 프로세스 요소(53)에서, 고장 카운트가 0(또는 일부 다른 허용가능한 임계치 수)보다 큰지 여부를 판정한다. 고장 카운트가 0보다 큰 경우, 제어기(11)는, 프로세스 요소(54)에서, 고장 카운트를 감분시키고, 이어서 스트라이프의 고장난 페이지(들)의 검사(예를 들어, 블록(들)을 가비지 수집하고, 스트라이프의 페이지들을 로딩 및 판독하는 것)를 계속한다. 그렇지 않으면, 제어기(11)는, 프로세스 요소(55)에서, 스트라이프를 일시정지로부터 제거하여, I/O 동작들이 스트라이프에 대해 계속될 수 있도록 한다. 그리고, 제어기(11)는 그 스트라이프 뿐만 아니라, (예를 들어, 백그라운드 스캔 프로세스의 일부로서) 저장 요소(14) 내의 다른 스트라이프들을 스캔하는 것을 계속한다.
본 명세서에서의 프로세스 실시예들은 예시적인 것이며 제한하고자 하는 것이 아님을 주의해야 한다. 그 프로세스 요소들은, 본 명세서에 개시된 메모리 일시정지 및/또는 회수의 원리들을 여전히 구현하면서, 재배열 또는 변경될 수 있다.
도 5 내지 도 8은 도 1의 저장 시스템(10)의 다른 예시적인 프로세스(60)의 흐름도들이다. 예를 들어, 도 5 내지 도 8의 각각의 도면은 제어기(11)가 페이지, 스트라이프, 및/또는 블록 일시정지 및/또는 회수를 수행하는 프로세스(60)의 일부를 나타낸다. 도 5에서 프로세스(60)는, 제어기(11)가 블록의 페이지를 모니터링하고 페이지 내에서 에러를 검출하는 프로세스 요소(61)로 시작된다. 제어기(11)는, 프로세스 요소(62)에서, 페이지를 판독하고, 프로세스 요소(63)에서, 페이지가 복수의 블록에 걸쳐 스트라이핑되는 경우, 제어기(11)는, 페이지에 대한 OCR을 수행할 수 있다. 예를 들어, 제어기(11)는 페이지를 스트라이프 내의 다른 페이지들(또는 리드 솔로몬, ECC 등과 같은, 데이터 복구의 일부 다른 형태)과 XOR 처리하여, 스트라이프 내의 페이지들 중 하나 이상이 고장났는지 여부를 판정할 수 있다.
OCR이 수행된 후, 제어기(11)는, 프로세스 요소(64)에서, 블록에 대한 가비지 수집을 수행하고, 이어서 프로세스 요소(65)에서, 페이지가 열화 리스트 내에 있는지 여부를 판정한다. 예를 들어, 제어기(11)가 이전에 페이지 내에서 에러를 검출했었다면, 제어기(11)는 그 페이지를 일시정지 상태에 배치했을 수 있다. 따라서, 페이지가 현재 일시정지 상태에 있지 않은 경우, 제어기(11)는, 프로세스 요소(66)에서, 페이지를 열화 리스트 내에 입력한다. 이러한 열화 리스트 내에서, 페이지는 여전히 I/O 동작들로부터 데이터를 취할 수 있다. 제어기(11)는 이어서, 프로세스 요소(67)에서, 페이지 에러 카운트를 증분시키고, 프로세스 요소 "B"를 통해, 도 6에서 예시된 바와 같이, 페이지의 분석으로 이동한다. 그러나, 페이지가 현재 열화 리스트 내에 있는 경우, 제어기(11)는, 프로세스 요소 "C"를 통해, 도 7에 예시된 바와 같이, 고장난 페이지를 검사하는 것으로 곧바로 이동한다.
도 6으로 되돌아가서, 제어기(11)는, 프로세스 요소(68)에서, 데이터를 페이지 내에 로딩하고 데이터를 ECC로 판독함으로써 페이지에 대한 검사를 개시한다. 제어기(11)는 이어서 프로세스 요소(69)에서, 방금 판독된 열화된 페이지가 통과했는지 아닌지를 판정한다. 열화된 페이지가 ECC를 이용한 판독 동안 에러를 포함했다면, 제어기(11)는, 프로세스 요소 "D"를 통해, 도 7에 예시된 바와 같이, 고장난 페이지를 검사하는 것으로 곧바로 이동한다. 그렇지 않으면, 열화된 페이지는 ECC를 이용한 판독을 통과하였고, 제어기(11)는, 프로세스 요소(70)에서, 그것의 페이지 에러 카운트를 감분시킨다. 이어서, 프로세스 요소(71)에서, 페이지 에러 카운트가 소정 임계치보다 작은 경우, 제어기(11)는, 프로세스 요소(72)에서, 페이지 내의 에러는 사실상 일시적인 것으로 간주되었으므로, 페이지를 열화 리스트로부터 제거하고 I/O 동작들을 계속한다. 제어기(11)는 이어서 그 페이지 뿐만 아니라, 백그라운드 스캔 동작들 동안 블록 내의 다른 페이지들을 모니터링하는 것을 계속한다. 그러나, 페이지 에러 카운트가 임계치보다 큰 경우, 페이지는 다수의 일시적인 에러들을 받기 쉬웠을 수 있다. 그리고, 제어기(11)는, 프로세스 요소 "A"를 통해, 프로세스 요소(68)의 로딩/판독 동작을 수행하는 것을 계속하여, 에러 카운트가 감소하는지 알아보기 위한 페이지에 대한 체크를 계속할 수 있다.
다시, 열화된 페이지가 판독 동작을 통과하지 않은 경우(예를 들어, 프로세스 요소(69)에서 페이지를 판독하는 데 있어서 고장이 있는 경우), 제어기(11)는, 프로세스 요소 "D"를 통해, 도 7에 예시된 바와 같이, 고장난 페이지를 검사하는 것으로 곧바로 이동한다. 이 실시예에서, 제어기(11)는, 프로세스 요소(73)에서, 블록에 대한 가비지 수집을 수행하고, 이어서 프로세스 요소(74)에서, 페이지 에러 카운트를 증분시킨다. 제어기(11)는, 프로세스 요소(75)에서, 페이지 에러 카운트가 소정 임계치보다 큰지 여부를 판정한다. 그렇지 않은 경우, 제어기(11)는, 프로세스 요소 "A"를 통해, 도 6에 예시된 바와 같이, 그것을 로딩/판독함으로써 페이지를 재시도하려고 시도한다. 그러나, 페이지 에러 카운트가 임계치보다 큰 경우, 제어기(11)는, 프로세스 요소(76)에서, 페이지 카운트를 0과 동일하게 설정하고, 및 프로세스 요소(76)에서, 페이지를 후속 I/O 동작들로부터 일시정지함으로써, 저장 요소(14)의 메모리 풀로부터 페이지를 제거한다.
일단 페이지가 일시정지 상태에 있으면, 제어기(11)는, 프로세스 요소(78)에서, ECC/코드 레이트를 증가시킨다. 이어서 제어기(11)는, 프로세스 요소(79)에서, 에러에 대하여 페이지를 스캔한다. 이는 페이지를 데이터로 로딩하는 것 및 데이터를 증가된 ECC로 판독하는 것을 포함할 수 있다. 거기서부터, 프로세스 요소 "E"를 통해, 도 8에 예시된 바와 같이, 회수 평가가 제어기(11)에 의해 수행된다.
이러한 회수 평가에서, 제어기(11)는 일시정지된 페이지가 증가된 ECC로 통과했는지 여부를 판정한다. 만약 그렇다면, 제어기(11)는 페이지를 열화된 상태에서 유지하지만, 프로세스 요소 "A"를 통해, 도 6에 예시된 바와 같이, I/O 동작들이 증가된 ECC로 페이지를 로딩 및 판독하는 것을 계속할 수 있게 한다. 그러나, 페이지가 여전히 증가된 ECC로 에러를 생성했다면, 제어기(11)는, 프로세스 요소(81)에서, 페이지를 회수하기로 결정한다. 여기서부터, 스트라이프 내의 회수된 페이지들의 수가 임계치를 초과했는지 여부를 판정하기 위해 스트라이프 분석이 수행된다. 예를 들어, 스트라이프 내의 페이지들이 XOR 동작들을 통해 복구될 수 없는 경우, 제어기(11)는, 프로세스 요소(84)에서, 전체 스트라이프를 회수함으로써, I/O 동작들이 스트라이프 상에서 수행될 수 없게 한다.
스트라이프 내의 회수된 페이지들의 수가 임계 수보다 작은 경우, 제어기(11)는, 프로세스 요소(83)에서, 블록 당 회수된 페이지들의 퍼센티지가 임계치보다 큰지 여부를 판정한다. 예를 들어, 대다수의 페이지들이 고장났고 그러한 페이지들이 증가된 ECC로도 동작 불가능한 것으로 간주되는 경우, 제어기(11)는, 프로세스 요소(85)에서, 전체 블록을 회수한다. 블록 당 회수된 페이지들의 퍼센티지가 임계치보다 작은 경우, 제어기(11)는, 프로세스 요소 "A"를 통해, 도 6에 예시된 바와 같이, 페이지들을 열화된 리스트 내에서 유지하고 이들을 증가된 ECC로 판독하려고 시도한다.
전형적으로, 블록의 페이지들이 고장나고 있었을 때, 전체 블록은 회수되었다. 저장 요소(14)가 플래시 디바이스인 실시예에서, 열화 및/또는 일시정지되는 페이지들에 대한 이러한 새로운 접근법은 블록들이 살아남도록 함으로써, 저장 요소(14)의 수명을 증가시킬 뿐만 아니라, 저장 요소(14)의 이용가능한 메모리의 양을 증가시킨다. 게다가, 전체 블록을 회수하는 것은 일반적으로 전체 가비지 수집의 재건을 요구하며, 이는 저장 시스템(10)의 성능에 영향을 미칠 수 있다. 회수되거나, 또는 적어도 열화되는 개개의 페이지들은 성능에 영향을 미치지 않는데, 이는 프로세스가 전형적인 스캔 프로세스의 일부로서 백그라운드에서 수행되기 때문이다. 그리고, 열화되는 페이지를 검출함으로써, 페이지는 그 페이지가 복구 불가능한 판독 에러를 갖기 전에 회수될 수 있다.
본 명세서에서 개시된 실시예들은 ECC 및 외부 코드 복구(outer code recovery, OCR) 기술들, 예컨대 XOR 및 리드 솔로몬 OCR 기술들에 제한되지 않도록 의도된다. 예를 들어, 플래시 디바이스에서, 다른 복구 기술은 보다 신뢰성 있는 결과를 생성하기 위해 전압 기준 임계치(Vref)를 디더링(예를 들어, 변경)하는 것을 포함할 수 있다.
본 명세서의 실시예들은 하드웨어, 펌웨어, 소프트웨어, 또는 이들의 조합의 형태를 취할 수 있다. 도 9 및 도 10은 본 명세서에 기술된 시스템들 및 방법들을 채용하도록 동작가능할 수 있는 그러한 조합을 예시한다. 보다 구체적으로, 도 9는 예시적인 저장 시스템(10) 및 그것의 연관된 디바이스 제어기(예를 들어, 제어기(11)) 및 저장 디바이스(15)(예를 들어, 도 1의 저장 요소(14) 및 버퍼(13))의 블록도이다. 도 10은 저장 시스템들(10), 및 호스트 시스템(502)과 인터페이싱하는 그들의 연관된 제어기들(11)/저장 디바이스들(15)을 포함하는 저장 모듈(216)의 블록도이다.
도 9에서, 제어기(11)는 호스트 시스템의 I/O 동작들을 통신하기 위해 호스트 시스템과 인터페이싱하도록 동작가능한 호스트 인터페이스(111)를 포함한다. 호스트 인터페이스(111)는 개개의 I/O 커맨드들(예를 들어, 저장 디바이스(15) 내의 특정 어드레스들에 대한 판독 및 기록 커맨드들)의 진행을 추적하도록 동작가능한 태그 추적 모듈(113)로 구성될 수 있다. 태그 추적 모듈(113)은 호스트 시스템으로부터 수신된 커맨드의 외부 플래그를, 제어기(11)가 커맨드의 프로세싱 동안 액세스하여 프로세싱의 상태를 식별할 수 있는 내부 플래그와 연관시킬 수 있다.
제어기(11)는 또한, 호스트 인터페이스(111)로부터 수신되거나 버퍼(131) 내에 상주하고 있는 데이터에 대한 특정 태스크들, 예컨대 데이터를 포맷화하는 것, 데이터를 트랜스코딩하는 것, 데이터를 압축하는 것, 데이터를 압축해제하는 것, 데이터를 암호화하는 것, 데이터를 복호화하는 것, 데이터 인코딩/포맷화, 또는 이들의 임의의 조합 중 하나 이상과 같은 것을 수행하도록 일반적으로 동작가능한 프로세싱 엔진(123)을 포함하는 데이터 프로세싱 모듈(121)을 포함한다. 예를 들어, 데이터 프로세싱 모듈(121)의 프로세싱 엔진(123)은 동작을 생성하는 호스트 시스템의 I/O 모듈로부터의 I/O 동작을 프로세싱하여, I/O 동작의 데이터가 저장 디바이스(15)의 논리 어드레스에 기록될 수 있도록 동작가능할 수 있다. 프로세싱 엔진(123)은 기록 I/O 커맨드의 데이터를 추출하고 그것을 저장 디바이스(15) 내의 저장을 위해 준비할 수 있다. 그렇게 하는 데 있어서, 프로세싱 엔진(123)은 다양한 데이터 압축 알고리즘들 중 임의의 것을 이용하여 데이터를 압축할 수 있다. 저장 디바이스(15)로부터 데이터를 검색할 때, 프로세싱 엔진(123)은 저장을 위해 데이터를 압축하는 데 사용된 알고리즘에 따라 데이터를 압축해제할 수 있다.
버퍼(131)는 호스트 시스템으로 그리고 그로부터 전달되는 데이터를 저장하도록 동작가능하다. 버퍼(131)는 또한, 저장 요소(14), 버퍼(13), 및 메모리(137) 내의 임의의 가능한 더 높은 레벨의 RAID 기능을 관리하기 위해 제어기(11)에 의해 사용된 메모리 테이블들과 같은, 시스템 데이터를 저장할 수 있다. 다른 모듈들은 더 높은 레벨의 에러 정정 및 리던던시 기능을 제공하기 위한 에러 정정 코드(ECC-X) 모듈(135), 및 버퍼(131)로의 그리고 그로부터의 데이터의 이동을 제어하는 다이렉트 메모리 액세스(DMA) 모듈(133)을 포함할 수 있다.
제어기(11)는 또한, 다양한 에러 정정 코드 기술들(예를 들어, 순환 리던던시 체크, 해밍 코드, 저밀도 패리티 체크 코더 등) 중 임의의 것을 사용하여 버퍼(131) 내의 데이터의, 더 낮은 레벨의 에러 정정 및 리던던시 프로세싱을 제공하도록 동작가능한 에러 정정 코드 모듈(161)을 포함한다.
디바이스 인터페이스 로직 모듈(191)은 내부에 있는 디바이스들의 프로토콜에 따라 저장 디바이스(15)로 그리고 그로부터 데이터를 전달하도록 동작가능하다. 디바이스 인터페이스 로직 모듈(191)은 I/O 동작들을 저장 디바이스(15)에 큐잉(queue)시키도록 동작가능한 스케줄링 모듈(193)을 포함한다.
본 명세서의 제어기(11)는 또한 룩업 테이블(12)에 따라 저장 디바이스(15) 내의 위치들에의 데이터 어드레싱을 수행하도록 동작가능한 맵 모듈(141)을 포함한다. 예를 들어, 맵 모듈(141)은 룩업 테이블(12)을 사용하여, 호스트 시스템으로부터의 논리 블록 어드레스(LBA)들로부터, 버퍼(13), 저장 요소(14), 또는 둘 모두에 지시된 블록/페이지 어드레스들로 변환할 수 있다. 룩업 테이블(12)은 제어기(11) 및/또는 저장 디바이스(15) 내에 전체적으로 또는 부분적으로 저장될 수 있다. 예를 들어, 일부 실시예들에서 룩업 테이블(12)의 일부분은 제어기(11) 내에 캐싱될 수 있으며, 이때 룩업 테이블(12)의 대체로 전부는 저장 디바이스(15) 내에 비휘발성으로 저장된다.
리사이클러(151)는 제어기(11)를 대신하여 가비지 수집을 수행한다. 예를 들어, 리사이클러(151)는 맵 모듈(141)의 룩업 테이블(12)을 스캔함으로써 활성적으로 사용 중인 저장 디바이스(15)의 부분들을 판정할 수 있다. 이와 관련하여, 리사이클러(151)는 저장 디바이스(15)의 미사용된, 또는 "비할당된" 부분들을, 미사용된 부분들을 소거함으로써 기록에 이용가능하게 만들 수 있다. 리사이클러(151)는 또한 저장 디바이스(15) 내의 데이터를 이동시켜, 저장 디바이스(15)의 더 큰 연속적인 부분들을 기록에 이용가능하게 만들 수 있다.
제어기(11)는 또한 제어기(11)의 다양한 양태들을 제어하는 CPU(171)를 포함한다. 예를 들어, CPU(171)는 호스트 시스템으로부터 수신된 커맨드들을 추적 및 제어하는 커맨드 관리(173)를 구현하기 위해 명령어들 또는 펌웨어를 프로세싱할 수 있다. 이 펌웨어는 또한 버퍼(131)의 할당 및 사용을 제어하는 버퍼 관리(175), 및 맵 모듈(141)을 제어하는 변환 관리(177)를 구현할 수 있다. 펌웨어는 또한 외부 데이터 액세스들과 재순환된 데이터 액세스들 사이에서 발생할 수 있는 충돌들과 같은 충돌들을 피하기 위해 데이터 어드레싱의 일관성을 제어하는 일관성 관리(179)를 채용할 수 있다. 펌웨어는 또한, 디바이스 인터페이스 로직 모듈(191)을 제어하는 디바이스 관리(181), 및 제어기(11) 내의 컴포넌트들의 아이덴티티 정보의 수정 및 통신을 제어하는 아이엔티티 관리(182)를 제공할 수 있다.
도 10에서, 호스트 시스템(202)은 소프트웨어 명령어들을 프로세싱하고, 하나 이상의 저장 시스템(10)으로부터 판독하고 그에 기록하기 위해 저장 모듈(216)과 I/O 동작들을 수행하도록 동작가능하다. 이와 관련하여, 호스트 시스템(202)은 호스트 시스템(202)을 위한 컴퓨팅 환경을 제공하는 운영 체제(205)를 포함할 수 있다. 드라이버(207)는 함께 구성된 다양한 저장 시스템들(10)과 I/O 동작들을 수행하기 위해 링크(206)를 통해 저장 모듈(216)과 통신하도록 동작가능하다.
다른 컴퓨팅 시스템들과 같이, 운영 체제(205)는 관리 소프트웨어(214)(예를 들어, 바이오스(Bios) 소프트웨어)를 통해 개시될 수 있다. 호스트 시스템(202)은 또한 호스트 시스템(202)을 대신하여 다양한 컴퓨팅 프로세스들을 수행하는 애플리케이션 소프트웨어(209)(예를 들어, 워드 프로세싱 애플리케이션, 이미지 프로세싱 애플리케이션 등)를 포함할 수 있다. 호스트 시스템(202)은 또한 통신 네트워크(219)(예를 들어, 인터넷, 근거리 네트워크, 광역 네트워크 등)를 통해 하나 이상의 서버(218)와 I/O 동작들을 수행하도록 동작가능한 I/O 및 저장 기능(217)을 포함할 수 있다. 이와 관련하여, 저장 모듈(216)은 호스트 시스템(202)을 위한 I/O 동작들의 캐시 메모리로서의 역할을 할 수 있다.
저장 모듈(216)은 호스트 시스템(202)의 다양한 I/O 동작들을 저장 시스템들(10)의 LBA들로 전환하도록 동작가능한 중간 제어기(203)로 구성될 수 있다. 이와 관련하여, 저장 모듈(216)은 LBA들에 대한 I/O 동작들을 수행하기 위해 중간 제어기(203)에 대한 맵핑 정보를 저장하는 메모리(212)를 포함할 수 있다. 제어기(11)의 맵 모듈(141)은 또한 가변 크기의 맵핑 유닛들을 이용해 룩업 테이블(12)에 따라 저장 디바이스(15) 내의 위치들로 데이터 어드레싱을 수행하고, 호스트 시스템(202)으로부터의 LBA들을 저장 디바이스(15)에 지시된 블록/페이지 어드레스들로 변환하도록 동작가능할 수 있다.
본 명세서에서 개시된 실시예들은 HDD, SSD, 자기저항 저장 디바이스 등을 포함하는 다른 지속적 저장 디바이스들에서 구현될 수 있는 것과 같은 임의의 유형의 저장 디바이스(15)로 제한되지 않는다는 것을 주의해야 한다.
Claims (20)
- 방법으로서,
저장 디바이스의 블록을 스캔하여 상기 블록의 일부분 내의 고장(failure)을 식별하는 단계;
상기 블록의 상기 고장난 부분에 대한 입출력(I/O) 동작들을 일시정지하는(suspend) 단계;
상기 블록의 상기 고장난 부분을 검사하여 상기 고장이 일시적인 고장인지 여부를 판정하는 단계 - 상기 검사는,
상기 블록의 상기 부분을 데이터로 로딩하는 것;
상기 블록의 상기 로딩된 부분으로부터 상기 데이터를 판독하는 것; 및
상기 판독에 기초하여 상기 고장이 유지되는지 여부를 판정하는 것을 포함함 -; 및
검사 후 상기 고장이 진정되는(subside) 경우, 상기 고장은 일시적인 고장인 것으로 판정하는 단계; 및
상기 블록의 상기 부분에 대한 I/O 동작들을 재개하는 단계를 포함하는, 방법. - 제1항에 있어서,
상기 블록의 상기 고장난 부분에 대한 상기 I/O 동작들을 일시정지하는 것에 응답하여 상기 블록에 대한 가비지 수집(garbage collection)을 수행하는 단계를 추가로 포함하는, 방법. - 제1항에 있어서,
상기 고장이 계속되는 경우 상기 블록의 상기 부분을 회수하는(retire) 단계를 추가로 포함하는, 방법. - 제1항에 있어서,
상기 데이터는 검사 데이터, I/O 데이터, 또는 이들의 조합인, 방법. - 제1항에 있어서,
상기 데이터의 에러 정정 코드(error correction code, ECC)를 증가시키는 단계; 및
상기 블록의 상기 고장난 부분 내의 상기 데이터를 재검사하는 단계를 추가로 포함하는, 방법. - 제1항에 있어서,
상기 블록의 상기 고장난 부분은 고장난 페이지인 것으로 판정하는 단계를 추가로 포함하며, 상기 고장난 페이지는 상기 저장 디바이스의 복수의 블록에 걸쳐 펼쳐진 스트라이프의 일부인, 방법. - 제1항에 있어서,
스트라이프는 고장난 것으로 판정하는 단계; 및
상기 스트라이프가 고장났다는 판정에 응답하여 상기 스트라이프를 회수하는 단계를 추가로 포함하는, 방법. - 저장 시스템으로서,
메모리의 복수의 블록을 포함하는 저장 디바이스; 및
상기 메모리의 제1 블록을 스캔하여 상기 제1 블록의 일부분 내의 고장을 식별하고, 상기 제1 블록의 상기 고장난 부분에 대한 입출력(I/O) 동작들을 일시정지하고, 상기 제1 블록의 상기 고장난 부분을 검사하여 상기 고장이 일시적인 고장인지 여부를 판정하도록 동작가능한 제어기를 포함하며,
상기 검사는 상기 제1 블록의 상기 부분을 데이터로 로딩하는 것, 상기 제1 블록의 상기 로딩된 부분으로부터 상기 데이터를 판독하는 것, 및 상기 판독에 기초하여 상기 고장이 유지되는지 여부를 판정하는 것을 포함하고,
검사 후 상기 고장이 진정되는 경우, 상기 제어기는 상기 고장이 일시적인 고장인 것으로 판정하고, 상기 제1 블록의 상기 부분에 대한 I/O 동작들을 재개하도록 추가로 동작가능한, 저장 시스템. - 제8항에 있어서, 상기 제어기는,
상기 제1 블록의 상기 고장난 부분에 대한 상기 입출력(I/O) 동작들을 일시정지하는 것에 응답하여 상기 제1 블록에 대한 가비지 수집을 수행하도록 추가로 동작가능한, 저장 시스템. - 제8항에 있어서, 상기 제어기는,
상기 고장이 계속되는 경우 상기 제1 블록의 상기 부분을 회수하도록 추가로 동작가능한, 저장 시스템. - 제8항에 있어서,
상기 데이터는 검사 데이터, I/O 데이터, 또는 이들의 조합인, 저장 시스템. - 제8항에 있어서, 상기 제어기는,
상기 데이터의 ECC를 증가시키고, 상기 제1 블록의 상기 고장난 부분 내의 상기 데이터를 재검사하도록 추가로 동작가능한, 저장 시스템. - 제8항에 있어서, 상기 제어기는,
상기 제1 블록의 상기 고장난 부분은 고장난 페이지인 것으로 판정하도록 추가로 동작가능하며, 상기 고장난 페이지는 상기 저장 디바이스의 복수의 블록에 걸쳐 펼쳐진 스트라이프의 일부인, 저장 시스템. - 제8항에 있어서, 상기 제어기는,
스트라이프가 고장난 것으로 판정하고;
상기 스트라이프가 고장났다는 판정에 응답하여 상기 스트라이프를 회수하도록 추가로 동작가능한, 저장 시스템. - 방법으로서,
스트라이프를 스캔하여 상기 스트라이프 내의 고장을 식별하는 단계 - 상기 스트라이프는 데이터의 복수의 블록에 걸쳐 펼쳐진 데이터의 복수의 페이지를 포함함 -;
상기 스트라이프에 대한 입출력(I/O) 동작들을 일시정지하는 단계;
상기 고장난 스트라이프를 검사하여 상기 고장이 상기 스트라이프의 하나 이상의 페이지 내에 있는지 여부를 판정하는 단계 - 상기 검사는,
상기 스트라이프의 상기 페이지들을 XOR 처리하여 상기 스트라이프의 상기 페이지들 중 어느 것이 고장났는지 여부를 판정하는 것;
상기 스트라이프의 적어도 상기 고장난 하나 이상의 페이지에 대한 가비지 수집을 수행하는 것;
상기 고장난 하나 이상의 페이지 내에 데이터를 로딩하는 것; 및
상기 스트라이프의 상기 고장난 하나 이상의 페이지로부터 상기 데이터를 판독하는 것을 포함함 -; 및
검사 후 상기 고장이 진정되는 경우, 상기 스트라이프에 대한 I/O 동작들을 재개하는 단계를 포함하는, 방법. - 제15항에 있어서,
상기 고장이 계속되는 경우 상기 스트라이프를 회수하는 단계를 추가로 포함하는, 방법. - 제15항에 있어서,
상기 데이터는 검사 데이터, I/O 데이터, 또는 이들의 조합인, 방법. - 제15항에 있어서,
상기 하나 이상의 고장난 페이지의 상기 데이터의 ECC로 증가시키는 단계; 및
상기 하나 이상의 고장난 페이지 내의 상기 데이터를 재검사하는 단계를 추가로 포함하는, 방법. - 제15항에 있어서,
상기 스트라이프는 하나 이상의 저장 디바이스에 걸쳐 구성되는, 방법. - 제19항에 있어서,
상기 하나 이상의 저장 디바이스는 솔리드 스테이트 드라이브들, 하드 디스크 드라이브들, 또는 이들의 조합인, 방법.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/625,313 US10453547B2 (en) | 2017-06-16 | 2017-06-16 | Monitoring a memory for retirement |
US15/625,313 | 2017-06-16 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20180137418A true KR20180137418A (ko) | 2018-12-27 |
KR102076056B1 KR102076056B1 (ko) | 2020-02-12 |
Family
ID=64657158
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020180068293A KR102076056B1 (ko) | 2017-06-16 | 2018-06-14 | 메모리 회수 모니터링 |
Country Status (5)
Country | Link |
---|---|
US (1) | US10453547B2 (ko) |
JP (1) | JP2019003649A (ko) |
KR (1) | KR102076056B1 (ko) |
CN (1) | CN109144407B (ko) |
TW (1) | TWI694328B (ko) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11042661B2 (en) * | 2018-06-08 | 2021-06-22 | Weka.IO Ltd. | Encryption for a distributed filesystem |
US11869586B2 (en) * | 2018-07-11 | 2024-01-09 | Pure Storage, Inc. | Increased data protection by recovering data from partially-failed solid-state devices |
US11340979B2 (en) * | 2019-12-27 | 2022-05-24 | Seagate Technology Llc | Mitigation of solid state memory read failures with a testing procedure |
US11188432B2 (en) * | 2020-02-28 | 2021-11-30 | Pure Storage, Inc. | Data resiliency by partially deallocating data blocks of a storage device |
US11579772B2 (en) * | 2020-11-25 | 2023-02-14 | Micron Technology, Inc. | Managing page retirement for non-volatile memory |
US12040025B2 (en) * | 2022-02-18 | 2024-07-16 | Micron Technology, Inc. | Two-sided page scans with calibration feedback |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR19990057809A (ko) * | 1997-12-30 | 1999-07-15 | 김영환 | 오류 방지 시스템 |
KR100694300B1 (ko) * | 2005-12-08 | 2007-03-14 | 한국전자통신연구원 | 블록 분할 분산 패리티 디스크 어레이에서의 데이터 배치및 제어 방법 |
US20150309872A1 (en) * | 2014-04-29 | 2015-10-29 | Lsi Corporation | Data recovery once ecc fails to correct the data |
US20170116070A1 (en) * | 2015-10-22 | 2017-04-27 | Sandisk Technologies Inc. | Systems and methods of detecting errors during read operations and skipping word line portions |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS55163678A (en) * | 1979-06-04 | 1980-12-19 | Hitachi Ltd | Information processor |
KR100526186B1 (ko) * | 2003-04-04 | 2005-11-03 | 삼성전자주식회사 | 플래시 메모리의 오류블록 관리방법 및 장치 |
JP4842563B2 (ja) * | 2005-05-16 | 2011-12-21 | パナソニック株式会社 | メモリコントローラ、不揮発性記憶装置、不揮発性記憶システム、及びデータ書き込み方法 |
WO2009072101A2 (en) | 2007-12-05 | 2009-06-11 | Densbits Technologies Ltd. | Apparatus and methods for generating row-specific reading thresholds in flash memory |
JP5181795B2 (ja) * | 2008-04-08 | 2013-04-10 | 日本電気株式会社 | Raidシステム、及びエラーセクタの修復方法 |
CN102124527A (zh) * | 2008-05-16 | 2011-07-13 | 弗森-艾奥公司 | 用于检测和替代失效的数据存储器的装置、***和方法 |
US8489966B2 (en) * | 2010-01-08 | 2013-07-16 | Ocz Technology Group Inc. | Solid-state mass storage device and method for failure anticipation |
US8402217B2 (en) * | 2009-09-15 | 2013-03-19 | Marvell International Ltd. | Implementing RAID in solid state memory |
US8266501B2 (en) * | 2009-09-29 | 2012-09-11 | Micron Technology, Inc. | Stripe based memory operation |
US8751903B2 (en) * | 2010-07-26 | 2014-06-10 | Apple Inc. | Methods and systems for monitoring write operations of non-volatile memory |
US8626989B2 (en) | 2011-02-02 | 2014-01-07 | Micron Technology, Inc. | Control arrangements and methods for accessing block oriented nonvolatile memory |
US9086983B2 (en) | 2011-05-31 | 2015-07-21 | Micron Technology, Inc. | Apparatus and methods for providing data integrity |
US8711619B2 (en) | 2011-10-18 | 2014-04-29 | Seagate Technology Llc | Categorizing bit errors of solid-state, non-volatile memory |
US9047187B2 (en) | 2012-06-28 | 2015-06-02 | Intel Corporation | Defect management in memory systems |
TWI492051B (zh) * | 2012-09-05 | 2015-07-11 | Silicon Motion Inc | 資料儲存裝置與快閃記憶體控制方法 |
KR102025263B1 (ko) * | 2012-10-05 | 2019-09-25 | 삼성전자주식회사 | 메모리 시스템 및 그것의 읽기 교정 방법 |
CN103218274B (zh) * | 2013-03-15 | 2016-12-28 | 华为技术有限公司 | 一种预防故障累加的方法和固态硬盘 |
US9734919B2 (en) | 2013-05-23 | 2017-08-15 | Seagate Technology Llc | Recovery of interfacial defects in memory cells |
US9236132B2 (en) | 2013-06-04 | 2016-01-12 | Apple Inc. | Mitigating reliability degradation of analog memory cells during long static and erased state retention |
US9535777B2 (en) | 2013-11-22 | 2017-01-03 | Intel Corporation | Defect management policies for NAND flash memory |
GB201322290D0 (en) | 2013-12-17 | 2014-01-29 | Ibm | Method and device for managing a memory |
CN103745751B (zh) * | 2013-12-23 | 2017-01-18 | 华为技术有限公司 | 一种故障告警方法与装置 |
TWI527037B (zh) * | 2014-04-10 | 2016-03-21 | 群聯電子股份有限公司 | 資料儲存方法、記憶體控制電路單元與記憶體儲存裝置 |
CN104156174A (zh) * | 2014-07-31 | 2014-11-19 | 记忆科技(深圳)有限公司 | 基于条带的固态硬盘raid实现方法及装置 |
US9817764B2 (en) * | 2014-12-14 | 2017-11-14 | Via Alliance Semiconductor Co., Ltd | Multiple data prefetchers that defer to one another based on prefetch effectiveness by memory access type |
US20160283111A1 (en) | 2015-03-26 | 2016-09-29 | Intel Corporation | Read operations in memory devices |
TWI613665B (zh) * | 2015-11-27 | 2018-02-01 | 群聯電子股份有限公司 | 資料程式化方法與記憶體儲存裝置 |
CN106527971B (zh) * | 2016-10-08 | 2019-11-26 | 华中科技大学 | 一种提升ssd在垃圾回收期间读性能的方法 |
-
2017
- 2017-06-16 US US15/625,313 patent/US10453547B2/en active Active
-
2018
- 2018-06-07 TW TW107119629A patent/TWI694328B/zh not_active IP Right Cessation
- 2018-06-14 KR KR1020180068293A patent/KR102076056B1/ko active IP Right Grant
- 2018-06-14 CN CN201810611569.XA patent/CN109144407B/zh active Active
- 2018-06-15 JP JP2018114534A patent/JP2019003649A/ja active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR19990057809A (ko) * | 1997-12-30 | 1999-07-15 | 김영환 | 오류 방지 시스템 |
KR100694300B1 (ko) * | 2005-12-08 | 2007-03-14 | 한국전자통신연구원 | 블록 분할 분산 패리티 디스크 어레이에서의 데이터 배치및 제어 방법 |
US20150309872A1 (en) * | 2014-04-29 | 2015-10-29 | Lsi Corporation | Data recovery once ecc fails to correct the data |
US20170116070A1 (en) * | 2015-10-22 | 2017-04-27 | Sandisk Technologies Inc. | Systems and methods of detecting errors during read operations and skipping word line portions |
Also Published As
Publication number | Publication date |
---|---|
JP2019003649A (ja) | 2019-01-10 |
CN109144407B (zh) | 2021-12-21 |
TW201905696A (zh) | 2019-02-01 |
US10453547B2 (en) | 2019-10-22 |
KR102076056B1 (ko) | 2020-02-12 |
TWI694328B (zh) | 2020-05-21 |
CN109144407A (zh) | 2019-01-04 |
US20180366209A1 (en) | 2018-12-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102076056B1 (ko) | 메모리 회수 모니터링 | |
US10496293B2 (en) | Techniques for selecting storage blocks for garbage collection based on longevity information | |
US10268404B2 (en) | Open block handling to reduce write errors | |
US10884914B2 (en) | Regrouping data during relocation to facilitate write amplification reduction | |
US8516343B2 (en) | Apparatus, system, and method for retiring storage regions | |
US10310938B2 (en) | Data deduplication with reduced hash computations | |
US9569306B1 (en) | Recovery of multi-page failures in non-volatile memory system | |
US8621328B2 (en) | Wear-focusing of non-volatile memories for improved endurance | |
US9727244B2 (en) | Expanding effective storage capacity of a data storage system while providing support for address mapping recovery | |
US9740609B1 (en) | Garbage collection techniques for a data storage system | |
US10719439B2 (en) | Garbage collection of a storage device | |
US9966147B1 (en) | Determining read voltages for a storage device | |
US20170115900A1 (en) | Dummy page insertion for flexible page retirement in flash memory storing multiple bits per memory cell | |
US10979077B2 (en) | Generating hamming weights for data | |
US10901866B2 (en) | Failure detection and data recovery in a storage system | |
US11443826B2 (en) | Storage area retirement in a storage device |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |