KR20210034676A - 에러 정정 패리티 계산 추적 - Google Patents
에러 정정 패리티 계산 추적 Download PDFInfo
- Publication number
- KR20210034676A KR20210034676A KR1020217007985A KR20217007985A KR20210034676A KR 20210034676 A KR20210034676 A KR 20210034676A KR 1020217007985 A KR1020217007985 A KR 1020217007985A KR 20217007985 A KR20217007985 A KR 20217007985A KR 20210034676 A KR20210034676 A KR 20210034676A
- Authority
- KR
- South Korea
- Prior art keywords
- memory
- data
- parity calculation
- specific
- buffer
- Prior art date
Links
Images
Classifications
-
- 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/1048—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 arrangements adapted for a specific error detection or correction feature
-
- 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/1048—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 arrangements adapted for a specific error detection or correction feature
- G06F11/1056—Updating check bits on partial write, i.e. read/modify/write
-
- 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/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/1072—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 in multilevel memories
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
-
- 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
-
- 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/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Databases & Information Systems (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Detection And Correction Of Errors (AREA)
Abstract
본 발명의 양태는 메모리 서브시스템에서 에러 정정 패리티 계산을 추적하도록 메모리 서브시스템을 구성한다. 예를 들어, 상기 메모리 서브시스템의 메모리 서브시스템 제어기는 개방된 데이터 블록의 하나 이상의 데이터 청크를 상기 하나 이상의 데이터 청크에 대한 부분 패리티 계산 결과를 임시 저장하기 위한 버퍼 세트의 하나 이상의 버퍼에 매핑하도록 제1 데이터 구조를 생성하고 사용하고, 개방된 데이터 블록의 하나 이상의 데이터 청크를 상기 하나 이상의 데이터 청크에 대한 부분 패리티 계산 결과를 영구 저장하기 위해 (메모리 구성 요소 세트에 의해 구현된) 비휘발성 메모리 공간 상의 하나 이상의 메모리 위치에 매핑하도록 제2 데이터 구조를 생성하고 사용할 수 있다.
Description
우선권의 주장
본 출원은 전체 내용이 본 명세서에 병합된, 2018년 8월 21일에 출원된, 미국 출원 번호 16/107,187의 우선권의 이익을 주장한다.
기술 분야
본 발명의 실시형태는 일반적으로 메모리 서브시스템에 관한 것으로, 보다 상세하게는 메모리 서브시스템에서 에러 정정 패리티(error-correction parity)를 계산하는 것에 관한 것이다.
메모리 서브시스템은 솔리드 스테이트 드라이브(solid-state drive: SSD)와 같은 저장 시스템일 수 있으며, 데이터를 저장하는 하나 이상의 메모리 구성 요소를 포함할 수 있다. 메모리 구성 요소는 예를 들어 비휘발성 메모리 구성 요소 및 휘발성 메모리 구성 요소일 수 있다. 일반적으로 호스트 시스템은 메모리 서브시스템을 이용하여 메모리 구성 요소에 데이터를 저장하고 메모리 구성 요소로부터 데이터를 검색할 수 있다.
본 발명은 이하에 주어진 상세한 설명 및 본 발명의 다양한 실시형태의 첨부 도면으로부터 보다 완전히 이해될 수 있을 것이다.
도 1은 본 발명의 일부 실시형태에 따라 메모리 서브시스템을 포함하는 예시적인 컴퓨팅 환경을 예시하는 블록도이다.
도 2는 본 발명의 일부 구현예에 따라 부분 계산 추적 기능을 갖는 예시적인 패리티 계산기의 블록도이다.
도 3은 본 발명의 일부 구현예에 따라 부분 계산 추적 기능을 사용하여 패리티 계산을 수행하는 예시적인 방법의 흐름도이다.
도 4a 및 도 4b는 부분 계산 추적 기능을 사용하여 패리티 계산을 수행하는 방법을 사용하는 예시적인 실시형태의 맥락에서 컴퓨팅 환경의 구성 요소들 간의 상호 작용을 예시하는 상호 작용 다이어그램을 제공한다.
도 5는 본 발명의 일부 실시형태에 따라 기계로 하여금 본 명세서에서 논의된 방법들 중 임의의 하나 이상의 방법을 수행하게 하는 명령어 세트를 실행할 수 있는 컴퓨터 시스템 형태의 기계의 도식적 표현을 예시하는 블록도이다.
도 1은 본 발명의 일부 실시형태에 따라 메모리 서브시스템을 포함하는 예시적인 컴퓨팅 환경을 예시하는 블록도이다.
도 2는 본 발명의 일부 구현예에 따라 부분 계산 추적 기능을 갖는 예시적인 패리티 계산기의 블록도이다.
도 3은 본 발명의 일부 구현예에 따라 부분 계산 추적 기능을 사용하여 패리티 계산을 수행하는 예시적인 방법의 흐름도이다.
도 4a 및 도 4b는 부분 계산 추적 기능을 사용하여 패리티 계산을 수행하는 방법을 사용하는 예시적인 실시형태의 맥락에서 컴퓨팅 환경의 구성 요소들 간의 상호 작용을 예시하는 상호 작용 다이어그램을 제공한다.
도 5는 본 발명의 일부 실시형태에 따라 기계로 하여금 본 명세서에서 논의된 방법들 중 임의의 하나 이상의 방법을 수행하게 하는 명령어 세트를 실행할 수 있는 컴퓨터 시스템 형태의 기계의 도식적 표현을 예시하는 블록도이다.
본 발명의 양태는 메모리 서브시스템에서 에러 정정 패리티 계산을 추적하는 것에 관한 것이다. 메모리 서브시스템은 이하 "메모리 디바이스"라고도 지칭된다. 메모리 서브시스템의 일례는 SSD와 같은 저장 시스템이다. 일부 실시형태에서, 메모리 서브시스템은 하이브리드 메모리/저장 서브시스템이다. 일반적으로 호스트 시스템은 하나 이상의 메모리 구성 요소를 포함하는 메모리 서브시스템을 이용할 수 있다. 호스트 시스템은 (예를 들어, 기입 요청을 통해) 메모리 서브시스템에 저장될 데이터를 제공할 수 있고, (예를 들어, 판독 요청을 통해) 메모리 서브시스템으로부터 검색될 데이터를 요청할 수 있다.
메모리 서브시스템은 호스트 시스템으로부터 데이터를 저장할 수 있는 다수의 메모리 구성 요소를 포함할 수 있다. 메모리 서브시스템은, 호스트 시스템으로부터 수신된 요청에 응답하여 각각의 메모리 구성 요소와 통신하며 메모리 구성 요소의 데이터를 판독하거나, 메모리 구성 요소에 데이터를 기입하거나 또는 메모리 구성 요소에서 데이터를 소거하는 것과 같은 동작을 수행할 수 있는 메모리 서브시스템 제어기를 더 포함할 수 있다. 메모리 서브시스템의 메모리 구성 요소 중 임의의 하나 이상의 메모리 구성 요소는, 메모리 구성 요소의 메모리 셀을 관리하고, 메모리 서브시스템 제어기와 통신하며, 메모리 서브시스템 제어기로부터 수신된 메모리 요청(예를 들어, 판독 또는 기입)을 실행하기 위해 매체 제어기를 포함할 수 있다.
일부 응용에서, 메모리 서브시스템 제어기는 메모리 서브시스템의 데이터 저장 매체를 형성하는, NAND형 플래시 메모리 디바이스(이하, NAND 디바이스) 세트와 같은, 메모리 구성 요소 세트의 패리티 값을 계산할 때 패리티 계산 결과를 유지하기 위한 버퍼 자원을 포함할 수 있다. 메모리 구성 요소 세트가 삼중 레벨 셀(Triple-Level Cell: TLC) NAND 디바이스와 같은 다중 평면 NAND 디바이스를 포함하는 경우 다수의 (예를 들어, 수십 개의) 패리티 계산(실행 패리티 값, 이는 본 명세서에서 부분 패리티 계산 결과라고도 지칭됨)은 메모리 서브시스템에 저장된 (예를 들어, 사용자 데이터에 대한) 데이터 보호를 구현하기 위해 병렬로 유지될 필요가 있다. 안타깝게도, 기존 메모리 서브시스템 제어기는, 다수의 병렬 부분 패리티 계산 결과를 유지하고 이러한 병렬 부분 패리티 계산 결과에 기초하여 패리티 계산을 수행하기 위한 유한 버퍼 자원(예를 들어, 정적 랜덤 액세스 메모리(SRAM)를 포함함)을 갖는다. 그 결과, 동작 동안 기존 메모리 서브시스템 제어기는 메모리 서브시스템의 메모리 구성 요소 세트에 적어도 하나 이상의 부분 패리티 계산 결과를 임시로 캐싱하고, 필요한 경우 이를 다시 버퍼 자원으로 스왑(swap)할 필요가 있다. 본 명세서에 사용된 바와 같이, 개방된 데이터 블록의 모든 데이터 청크(data chunk)가 패리티 계산에 참여한 경우, 개방된 데이터 블록에 대해 생성된 패리티 계산 결과는 전체 패리티 계산 결과로 간주되고, 개방된 데이터 블록과 관련하여 매체에 영구적으로 저장될 준비가 된다.
본 발명의 양태는, 메모리 구성 요소 세트의 데이터 블록에 대해 생성된 (계산된) 하나 이상의 부분 패리티 계산 결과를 메모리 서브시스템 제어기의 하나 이상의 버퍼 자원(예를 들어, 패리티 계산을 위한 버퍼 자원, 이는 본 명세서에서 패리티 버퍼라고도 지칭됨) 및 메모리 서브시스템의 하나 이상의 영구 저장 자원(예를 들어, 비휘발성 패리티 스왑 공간)에 저장하는 것을 추적하고 관리하기 위한 메모리 서브시스템의 메모리 서브시스템 제어기와 같은 시스템 구성 요소에 의한 상기 결함 및 다른 결함을 해결한다. 특히, 본 명세서에 설명된 일부 실시형태의 메모리 서브시스템 제어기는 하나 이상의 개방된 데이터 블록(예를 들어, 하나 이상의 TLC NAND 디바이스에 걸쳐 개방된 데이터 블록)을 추적하고 이를 버퍼(예를 들어, 패리티 버퍼) 세트에서 이용 가능한 버퍼에 링크하는 제1 데이터 구조(예를 들어, 어레이) 세트를 생성(예를 들어, 형성)하고 사용한다. 이러한 제1 추적 데이터 구조는 메모리 서브시스템 제어기가 버퍼(예를 들어, 패리티 버퍼) 세트에서 사용 중인 버퍼를 식별하고 이 버퍼가 저장하고 있는 부분 패리티 계산 결과를 식별할 수 있게 한다. 본 명세서에 사용된 데이터 구조는 본 명세서에서 설명된 다양한 실시형태에서 조회 테이블로서 사용될 수 있는 하나 이상의 차원의 어레이를 포함할 수 있다.
추가적으로, 본 명세서에 설명된 일부 실시형태의 메모리 서브시스템 제어기는 (예를 들어, 하나 이상의 NAND 디바이스에 걸쳐) 하나 이상의 개방된 데이터 블록을 추적하고 이를 메모리 서브시스템의 메모리 구성 요소 세트 상의 비휘발성 메모리 공간, 예를 들어, 사용자 데이터를 저장하는 데 사용되는 메모리 구성 요소 세트 상의 메모리 공간과 분리된 메모리 구성 요소 세트 상의 예비된 메모리 공간(예를 들어, 스왑 메모리 공간)에 링크하는 제2 데이터 구조(예를 들어, 어레이) 세트를 생성(예를 들어, 형성)하고 사용한다. 예를 들어, 예비된 메모리 공간은 메모리 구성 요소 세트에 포함된 하나 이상의 단일 층 셀(SLC) NAND 디바이스에 의해 구현될 수 있는 반면, 메모리 구성 요소 세트에 포함된 하나 이상의 TLC NAND 디바이스는 사용자 데이터를 저장하는 데 사용된다. TLC NAND 디바이스에 비해, SLC NAND 디바이스는 더 높은 사이클링과 더 빠른 프로그래밍 성능을 제공하여, SLC NAND 디바이스를 스왑 메모리 공간으로서 사용자에 더 적합하게 만들 수 있다. 비휘발성 메모리 공간(예를 들어, 예비된 메모리 공간)은 패리티 계산(예를 들어, 배타적 OR(XOR) 패리티 계산)을 위해 부분 패리티 계산 결과를 저장하는 데 이용 가능한 버퍼가 없을 때 메모리 서브시스템 제어기에 의해 버퍼(예를 들어, 패리티 버퍼) 세트로부터의 부분 패리티 계산 결과를 비휘발성 메모리 공간에 임시로 저장(예를 들어, 캐싱)하는 데 사용될 수 있다. 이후, 비휘발성 메모리 공간에 임시로 저장된 (예를 들어, 캐싱된) 부분 패리티 계산 결과는 이용 가능성과 필요에 기초하여 버퍼 세트 내 버퍼로 다시 스왑되어, 다수의 부분 패리티 계산 결과를 능동적으로 유지하는 데 필요한 버퍼 자원의 양을 제한할 수 있다. 제2 추적 데이터 구조는 메모리 서브시스템 제어기가 부분 패리티 계산 결과를 유지하는 데 사용되는 비휘발성 스왑 메모리 공간을 개방된 데이터 블록(예를 들어, 하나 이상의 TLC NAND 디바이스에 걸쳐 개방된 데이터 블록)과 연관시킬 수 있게 한다.
또한, 본 명세서에 설명된 일부 실시형태의 메모리 서브시스템 제어기는 (메모리 서브시스템의 메모리 구성 요소 세트 상의) 비휘발성 메모리 공간에 저장된 부분 패리티 계산 결과가 유효한지 여부의 손쉬운 식별; 메모리 서브시스템에 예상치 못한 전력 손실이 발생한 경우 누락된 부분 패리티 계산 결과의 빠른 재생(이에 메모리 서브시스템의 빠른 부팅 시간이 가능함); 또는 이 둘 다를 가능하게 하는 메타데이터를 (예를 들어, 메타데이터 방식에 따라) 생성하고 저장한다. 특히, 메타데이터는 비휘발성 메모리 공간에 (예를 들어, 이에 저장된 부분 패리티 계산 결과와 관련하여) 저장될 수 있고, 메모리 서브시스템 제어기가 예상치 못한 전력 손실 후에 제1 데이터 구조 세트(예를 들어, 추적 어레이), 제2 데이터 구조 세트(예를 들어, 추적 어레이) 또는 이 두 세트 모두를 복구할 수 있게 할 수 있다. 이는 메모리 서브시스템의 빠른 전력 투입 복구를 가능하게 하고, 매우 적은 메모리 서브시스템 자원을 사용하여 메모리 서브시스템의 전력 투입 복구를 가능하게 한다.
일부 실시형태에 따르면, 메모리 서브시스템은, 메모리 구성 요소 세트의 데이터 블록에 대한 패리티를 계산하는 데 부분 패리티 계산 결과를 사용하기 때문에 비휘발성 메모리 공간(예를 들어, 스왑 메모리 공간) 및 버퍼 세트 상에 하나 이상의 부분 패리티 계산 결과의 저장 및 그 위치의 추적을 사용하는 데이터 및 메모리 서브시스템 제어기를 저장하기 위해, NAND 디바이스(예를 들어, TLC NAND 디바이스) 세트와 같은 메모리 구성 요소 세트를 포함한다. 각각의 메모리 구성 요소는 다른 유형의 매체를 포함할 수 있다. 매체의 예로는, SLC NAND 디바이스, TLC NAND 디바이스 및 사중 레벨 셀(Quad-Level Cell: QLC) NAND 디바이스와 같은, 비휘발성 메모리와 플래시 기반 메모리의 교차점 어레이(cross-point array)를 포함하지만 이들로 제한되지는 않는다. 메모리 서브시스템 제어기는 어레이와 같은 데이터 구조를 사용하여 비휘발성 메모리 공간 및 버퍼 세트에 대해 유효한 부분 패리티 계산 결과의 저장 위치를 추적하고 조회할 수 있다. 데이터 구조는 버퍼 세트와 분리된 메모리 서브시스템 제어기의 로컬 메모리와 같은 메모리 서브시스템 제어기의 휘발성 메모리 상의 메모리 서브시스템 제어기에 의해 생성되고 저장될 수 있다. 추가적으로, 메모리 서브시스템 제어기는 (예를 들어, 부분 패리티 계산 결과와 관련하여 비휘발성 메모리 공간에 저장된) 부분 패리티 계산 결과와 연관된 메타데이터를 사용하여 메모리 서브시스템이 예상치 못한 전력 손실을 겪은 경우 데이터 구조의 복구(예를 들어, 재구성)가 가능할 수 있다.
실시형태에 따라, 패리티 계산은 배타적 OR(XOR) 패리티 계산을 포함할 수 있으며, 여기서 XOR 연산자는 데이터 블록의 데이터 청크의 새로운 버전을 동일한 데이터 청크의 이전 버전에 수행된 이전 패리티 계산에 의해 생성된 런닝 패리티 값(running parity value)(본 명세서에서 부분 패리티 값 또는 부분 패리티 계산 결과라고도 지칭됨)과 결합시키는 데 사용된다.
본 명세서에 설명된 일부 실시형태에서, 메모리 구성 요소의 세트는 사용자 데이터를 저장하기 위한 복수의 NAND 디바이스를 포함하고, 메모리 서브시스템 제어기는 복수의 NAND 디바이스에 저장된 사용자 데이터를 보호할 수 있는 복수의 NAND 디바이스에 대해 독립적인 NAND 디바이스의 중복 어레이(redundant array of independent NAND device: RAIN) 보호 방식을 구현한다. 예를 들어, 사용된 RAIN 보호 방식은 단일 패리티 요소(예를 들어, 단일 패리티 비트)에 의해 연관되고 보호되는 (복수의 NAND 디바이스에 저장된) 사용자 데이터의 단일 스트라이프(single stripe)를 형성하는 사용자 데이터 요소(예를 들어, 사용자 데이터 비트)의 수를 나타내는 스트라이프 길이(예를 들어, 7 데이터 비트)를 갖는 패리티 방식을 포함할 수 있다. 사용자 데이터의 주어진 스트라이프와 연관되고 주어진 스트라이프를 보호하는 주어진 단일 패리티 요소는 XOR 패리티 계산을 사용하여 계산될 수 있다. 복수의 NAND 디바이스가 TLC NAND 디바이스와 같은 다중 평면 NAND 디바이스를 포함하는 경우, 각각의 평면은 별도의 XOR 패리티 계산에 참여할 수 있고, 이에 의해 다중 평면 실패 검출을 제공하여, 메모리 서브시스템 제어기가 패리티 데이터를 사용하여 각각의 평면을 독립적으로 재구축하게 할 수 있게 한다.
부분 패리티 계산 결과를 추적하는 것과 관련된 동작을 수행하는 메모리 서브시스템의 일부 예가 본 명세서에 개시된다.
도 1은 본 발명의 일부 예에 따라 메모리 서브시스템(110)을 포함하는 예시적인 컴퓨팅 환경(100)을 도시한다. 메모리 서브시스템(110)은 메모리 구성 요소(112A 내지 112N)와 같은 매체를 포함할 수 있다. 메모리 구성 요소(112A 내지 112N)는 휘발성 메모리 디바이스, 비휘발성 메모리 디바이스, 또는 이들의 조합일 수 있다. 일부 실시형태에서, 메모리 서브시스템(110)은 저장 시스템이다. 저장 시스템의 일례는 SSD이다. 일부 실시형태에서, 메모리 서브시스템(110)은 하이브리드 메모리/저장 시스템이다. 일반적으로, 컴퓨팅 환경(100)은 메모리 서브시스템(110)을 사용하는 호스트 시스템(120)을 포함할 수 있다. 예를 들어, 호스트 시스템(120)은 메모리 서브시스템(110)에 데이터를 기입하고, 메모리 서브시스템(110)으로부터 데이터를 판독할 수 있다.
호스트 시스템(120)은 데스크탑 컴퓨터, 랩톱 컴퓨터, 네트워크 서버, 모바일 디바이스와 같은 컴퓨팅 디바이스이거나, 또는 메모리 및 처리 디바이스를 포함하는 이러한 컴퓨팅 디바이스일 수 있다. 호스트 시스템(120)은 호스트 시스템(120)이 메모리 서브시스템(110)으로부터 데이터를 판독하거나 메모리 서브시스템에 데이터를 기입할 수 있도록 메모리 서브시스템(110)을 포함하거나 메모리 서브시스템에 결합될 수 있다. 호스트 시스템(120)은 물리적 호스트 인터페이스를 통해 메모리 서브시스템(110)에 결합될 수 있다. 본 명세서에서 사용된 "결합된"이란 일반적으로 전기, 광학, 자기 등과 같은 연결을 포함하여 유선이든 무선이든 간접 통신 연결 또는 직접 통신 연결(예를 들어, 중간 구성 요소 없는 연결)일 수 있는 구성 요소 간의 연결을 의미한다. 물리적 호스트 인터페이스의 예로는 직렬 고급 기술 부착(Serial Advanced Technology Attachment: SATA) 인터페이스, 주변 구성 요소 상호 연결 익스프레스(Peripheral Component Interconnect Express: PCIe) 인터페이스, 범용 직렬 버스(Universal Serial Bus: USB) 인터페이스, 파이버 채널(Fibre Channel) 인터페이스, 직렬 부착 SCSI(Serial Attached SCSI: SAS) 인터페이스 등을 포함하지만 이들로 제한되지는 않는다. 물리적 호스트 인터페이스는 호스트 시스템(120)과 메모리 서브시스템(110) 사이에서 데이터를 전송하는 데 사용될 수 있다. 나아가 호스트 시스템(120)은 메모리 서브시스템(110)이 PCIe 인터페이스에 의해 호스트 시스템(120)과 결합될 때 메모리 구성 요소(112A 내지 112N)에 액세스하기 위해 NVM 익스프레스(NVMe) 인터페이스를 이용할 수 있다. 물리적 호스트 인터페이스는 메모리 서브시스템(110)과 호스트 시스템(120) 사이에 제어, 어드레스, 데이터 및 기타 신호를 전달하기 위한 인터페이스를 제공할 수 있다.
메모리 구성 요소(112A 내지 112N)는 상이한 유형의 비휘발성 메모리 구성 요소 및/또는 휘발성 메모리 구성 요소의 임의의 조합을 포함할 수 있다. 비휘발성 메모리 구성 요소의 일례는 네거티브 AND(NAND)형 플래시 메모리를 포함한다. 메모리 구성 요소(112A 내지 112N) 각각은 단일 레벨 셀(SLC) 또는 다중 레벨 셀(MLC)(예를 들어, TLC 또는 QLC)과 같은 하나 이상의 메모리 셀 어레이를 포함할 수 있다. 일부 실시형태에서, 특정 메모리 구성 요소는 메모리 셀의 SLC 부분 및 MLC 부분을 모두 포함할 수 있다. 각각의 메모리 셀은 호스트 시스템(120)에 의해 사용되는 하나 이상의 데이터 비트(예를 들어, 데이터 블록)를 저장할 수 있다. NAND형 플래시 메모리와 같은 비휘발성 메모리 구성 요소가 설명되었지만, 메모리 구성 요소(112A 내지 112N)는 휘발성 메모리와 같은 임의의 다른 유형의 메모리에 기초할 수 있다. 일부 실시형태에서, 메모리 구성 요소(112A 내지 112N)는 랜덤 액세스 메모리(RAM), 판독 전용 메모리(ROM), 동적 랜덤 액세스 메모리(DRAM), 동기식 동적 랜덤 액세스 메모리(SDRAM), 위상 변화 메모리(PCM), 자기 저항 랜덤 액세스 메모리(MRAM), 네거티브 OR(NOR) 플래시 메모리, 전기적으로 소거 가능한 프로그래밍 가능 판독 전용 메모리(EEPROM), 및 비휘발성 메모리 셀의 교차점 어레이일 수 있지만 이들로 제한되지는 않는다. 비휘발성 메모리 셀의 교차점 어레이는 적층 가능한 교차 그리드(cross-gridded) 데이터 액세스 어레이와 함께 벌크 저항(bulk resistance)의 변화에 기초하여 비트 저장을 수행할 수 있다. 추가적으로, 많은 플래시 기반 메모리와는 달리, 교차점 비휘발성 메모리는 비휘발성 메모리 셀을 미리 소거하지 않고 비휘발성 메모리 셀을 프로그래밍할 수 있는 그 자리 기입(write-in-place) 동작을 수행할 수 있다. 또한, 메모리 구성 요소(112A 내지 112N)의 메모리 셀은 데이터를 저장하는 데 사용되는 메모리 구성 요소의 단위를 나타낼 수 있는 메모리 페이지 또는 데이터 블록으로서 그룹화될 수 있다.
메모리 서브시스템 제어기(115)는 메모리 구성 요소(112A 내지 112N)와 통신하며 메모리 구성 요소(112A 내지 112N)의 데이터를 판독하거나, 메모리 구성 요소에 데이터를 기입하거나 또는 메모리 구성 요소에서 데이터를 소거하는 것과 같은 동작 및 다른 이러한 동작을 수행할 수 있다. 메모리 서브시스템 제어기(115)는 하나 이상의 집적 회로 및/또는 개별 구성 요소, 버퍼 메모리 또는 이들의 조합과 같은 하드웨어를 포함할 수 있다. 메모리 서브시스템 제어기(115)는 마이크로제어기, 특수 목적 논리 회로부(예를 들어, 전계 프로그래밍 가능 게이트 어레이(FPGA), 주문형 집적 회로(ASIC) 등) 또는 다른 적절한 프로세서일 수 있다. 메모리 서브시스템 제어기(115)는 로컬 메모리(119)에 저장된 명령어를 실행하도록 구성된 프로세서(처리 디바이스)(117)를 포함할 수 있다. 예시된 예에서, 메모리 서브시스템 제어기(115)의 로컬 메모리(119)는 메모리 서브시스템(110)과 호스트 시스템(120) 간의 통신 처리를 포함하는, 메모리 서브시스템(110)의 동작을 제어하는 다양한 프로세스, 동작, 논리 흐름 및 루틴을 수행하기 위한 명령어를 저장하도록 구성된 내장형 메모리를 포함한다. 일부 실시형태에서, 로컬 메모리(119)는 메모리 포인터, 페치된 데이터 등을 저장하는 메모리 레지스터를 포함할 수 있다. 로컬 메모리(119)는 마이크로코드를 저장하기 위한 판독 전용 메모리(ROM)를 더 포함할 수 있다. 도 1의 예시적인 메모리 서브시스템(110)은 메모리 서브시스템 제어기(115)를 포함하는 것으로 예시되었지만, 본 발명의 다른 실시형태에서, 메모리 서브시스템(110)은 메모리 서브시스템 제어기(115)를 포함하지 않을 수 있고, 대신에 (예를 들어, 외부 호스트에 의해 또는 메모리 서브시스템과 분리된 프로세서 또는 제어기에 의해 제공된) 외부 제어에 의존할 수 있다.
일반적으로, 메모리 서브시스템 제어기(115)는 호스트 시스템(120)으로부터 커맨드 또는 동작을 수신할 수 있고, 이 커맨드 또는 동작을 메모리 구성 요소(112A 내지 112N)에 원하는 액세스를 달성하기 위한 명령어 또는 적절한 커맨드로 변환할 수 있다. 메모리 서브시스템 제어기(115)는 마모 평준화 동작, 가비지 수집 동작, 에러 검출 및 에러 정정 코드(ECC) 동작, 암호화 동작, 캐싱 동작, 및 메모리 구성 요소(112A 내지 112N)와 연관된 논리적 블록 어드레스와 물리적 블록 어드레스 사이의 어드레스 변환과 같은 다른 동작을 담당할 수 있다. 메모리 서브시스템 제어기(115)는 물리적 호스트 인터페이스를 통해 호스트 시스템(120)과 통신하기 위한 호스트 인터페이스 회로부를 더 포함할 수 있다. 호스트 인터페이스 회로부는 호스트 시스템(120)으로부터 수신된 커맨드를 메모리 구성 요소(112A 내지 112N)에 액세스하기 위한 커맨드 명령어로 변환할 뿐만 아니라 메모리 구성 요소(112A 내지 112N)와 연관된 응답을 호스트 시스템(120)에 대한 정보로 변환할 수 있다.
메모리 서브시스템(110)은 도시되지 않은 추가 회로부 또는 구성 요소를 더 포함할 수 있다. 일부 실시형태에서, 메모리 서브시스템(110)은, 캐시 또는 버퍼(예를 들어, DRAM), 및 메모리 서브시스템 제어기(115)로부터 어드레스를 수신하고, 메모리 구성 요소(112A 내지 112N)에 액세스하기 위해 어드레스를 디코딩할 수 있는 어드레스 회로부(예를 들어, 행 디코더 및 열 디코더)를 포함할 수 있다.
메모리 구성 요소(112A 내지 112N) 중 임의의 메모리 구성 요소는, 메모리 구성 요소의 메모리 셀을 관리하고, 메모리 서브시스템 제어기(115)와 통신하며, 메모리 서브시스템 제어기(115)로부터 수신된 메모리 요청(예를 들어, 판독 또는 기입)을 실행하기 위해 매체 제어기(예를 들어, 매체 제어기(113A) 및 매체 제어기(113N))를 포함할 수 있다.
메모리 서브시스템(110)은 하나 이상의 메모리 구성 요소(112A 내지 112N) 상의 버퍼 및 비휘발성 메모리 공간(예를 들어, 스왑 메모리 공간)의 세트에 대해 부분 패리티 계산 결과의 저장을 추적하고 관리하는 데 사용될 수 있는 부분 계산 추적 기능을 갖는 패리티 계산기(122)를 포함한다. 일부 실시형태에서, 제어기(115)는 부분 계산 추적 기능을 갖는 패리티 계산기(122)의 적어도 일부를 포함한다. 예를 들어, 제어기(115)는 본 명세서에 설명된 동작을 수행하기 위해 로컬 메모리(119)에 저장된 명령어를 실행하도록 구성된 프로세서(117)(처리 디바이스)를 포함할 수 있다. 일부 실시형태에서, 부분 계산 추적 기능을 갖는 패리티 계산기(122)는 호스트 시스템(120), 애플리케이션, 또는 운영 체제의 일부이다.
일부 실시형태에서, 부분 계산 추적 기능을 갖는 패리티 계산기(122)에 의해 추적되고 하나 이상의 부분 패리티 계산 결과를 저장하는 버퍼 세트는 로컬 메모리(119)와 같은 메모리 서브시스템 제어기(115)의 일부일 수 있다. 실시형태에 따라, 버퍼 세트는, 특정 데이터 청크 크기에 따라 (예를 들어, RAIN 방식과 같은 저장 방식에 기초하여) 버퍼 세트로 분할되고, 버퍼 식별자(ID)(예를 들어, 1 내지 255의 ID 범위로 식별되는 최대 255개의 버퍼를 허용하는 단일 바이트 ID, 제1 데이터 구조에서 식별자/매핑이 없음을 나타내는 0의 ID)가 할당된 SRAM과 같은 RAM을 포함할 수 있다.
부분 계산 추적 기능을 갖는 패리티 계산기(122)는 제1 데이터 구조(예를 들어, 제1 어레이)를 조회 테이블로 사용하여 버퍼 세트(예를 들어, 패리티 버퍼)에 저장된 하나 이상의 부분 패리티 계산 결과의 메모리 위치를 추적하고, 제2 데이터 구조(예를 들어, 제2 어레이)를 다른 조회 테이블로 사용하여 (예를 들어, 메모리 구성 요소(112A 내지 112N) 중 하나 이상에 대응하는) 비휘발성 메모리 공간에 저장된 하나 이상의 부분 패리티 계산 결과의 메모리 위치를 추적할 수 있다. 일부 실시형태의 경우, 부분 계산 추적 기능을 갖는 패리티 계산기(122)는 저장을 위해 데이터를 수용하는 메모리 구성 요소(122A 내지 122N) 상의 (매체 저장의) 각각의 개방된 데이터 블록(예를 들어, 데이터를 기입하기 위해 메모리 서브시스템 제어기(115)에 대해 개방된 블록)에 대한 제1 데이터 구조 및 제2 데이터 구조를 생성한다. 일단 생성되면, 제1 데이터 구조 또는 제2 데이터 구조 중 적어도 하나 또는 이 둘 다는 로컬 메모리(119)에 (저장하도록 구성된 내장형 메모리에) 저장될 수 있다.
주어진 개방된 데이터 블록의 제1 데이터 구조는 (주어진 개방된 데이터 블록의 데이터 청크 위치에서) 주어진 개방된 데이터 블록의 각 사용자 데이터 청크가 버퍼 세트에서 적어도 하나의 버퍼에 저장된 부분 패리티 계산 결과에 매핑되는 방식을 식별할 수 있다. 특히, 제1 데이터 구조는 주어진 개방된 데이터 블록에서 각 데이터 청크 위치를 데이터 청크 위치에 대응하는 데이터 청크와 연관된 부분 패리티 계산 결과를 보유하는 버퍼 세트의 버퍼 식별자(예를 들어, 1 내지 255의 ID 값)에 매핑할 수 있다. 개방된 데이터 블록의 주어진 데이터 청크 위치가 버퍼 세트의 임의의 버퍼에 저장된 연관된 부분 패리티 계산 결과를 갖지 않는 경우, 주어진 데이터 청크 위치는 버퍼 식별자(예를 들어, 0의 ID)의 없음을 나타내는 매핑을 가질 수 있다.
주어진 개방된 데이터 블록의 제2 데이터 구조는 주어진 개방된 데이터 블록의 각 사용자 데이터 청크가 메모리 구성 요소(112A 내지 112N) 상의 비휘발성 메모리 공간(예를 들어, 스왑 메모리 공간)에 저장된 부분 패리티 계산 결과에 매핑되는 방식을 식별할 수 있다. 특히, 제2 데이터 구조는 주어진 개방된 데이터 블록에서 각 데이터 청크 위치를 데이터 청크 위치에 대응하는 데이터 청크와 연관된 부분 패리티 계산 결과가 저장된 메모리 구성 요소(112A 내지 112N) 상의 비휘발성 메모리 공간의 물리적 페이지 어드레스로 매핑할 수 있다. 주어진 데이터 청크에 대해 비휘발성 메모리 공간에 저장된 부분 패리티 계산 결과는 부분 패리티 계산 결과가 비휘발성 메모리 공간에 기입된 마지막 시점으로부터 주어진 데이터 청크가 참여한 부분 패리티 계산 결과를 나타낼 수 있다.
메모리 서브시스템 제어기(115)에 의해 기입이 수행되고 있을 때, 메모리 구성 요소(112A 내지 112N) 중 적어도 하나의 메모리 구성 요소의 특정 개방된 데이터 블록에 기입될 각 특정 데이터 청크마다, 부분 계산 추적 기능을 갖는 패리티 계산기(122)는 특정 개방된 데이터 블록과 연관된 제1 데이터 구조를 점검하여, 특정 데이터 청크와 연관된 부분 특정 계산 결과가 버퍼 세트의 버퍼 중 하나의 버퍼에 저장되어 있는지 여부를 결정하고, 만약 저장되어 있다면 버퍼의 식별자를 결정할 수 있다. 제1 데이터 구조에 기초하여, 특정 데이터 청크와 연관된 부분 특정 계산 결과가 식별된 버퍼에 저장되어 있는 것으로 결정되면, 부분 계산 추적 기능을 갖는 패리티 계산기(122)는 식별된 버퍼에 저장된 부분 패리티 계산 결과를 사용하여, 특정 데이터 청크에 대한 패리티 계산(예를 들어, XOR 계산)을 수행하고, 특정 개방된 데이터 블록에 기입될 특정 데이터 청크를 전송할 수 있다. 결과 패리티 계산이 부분 결과인 경우(예를 들어, 해당 데이터 블록이 여전히 개방되어 있는 경우), 새로운 부분 패리티 계산이 식별된 버퍼에 저장되어, 버퍼에 저장된 오래된 부분 패리티 계산을 덮어쓸 수 있다.
제1 데이터 구조에 기초하여, 특정 데이터 청크와 연관된 부분 특정 계산 결과가 버퍼 세트의 버퍼 중 하나의 버퍼에 저장되어 있지 않은 것으로 결정된 경우, 부분 계산 추적 기능을 갖는 패리티 계산기(122)는 특정 개방된 데이터 블록과 연관된 제2 데이터 구조를 사용하여, 특정 데이터 청크와 연관된 부분 패리티 계산 결과가 저장된 메모리 구성 요소(112A 내지 112N) 상의 비휘발성 메모리 공간(예를 들어, 스왑 메모리 공간)의 메모리 어드레스(예를 들어, 페이지 어드레스와 같은 매체 어드레스)를 결정할 수 있다. 부분 계산 추적 기능을 갖는 패리티 계산기(122)는 부분 패리티 계산 결과를 저장하기 위해 버퍼 세트에서 이용 가능한 버퍼가 있는지 여부를 점검할 수 있다. 만약 이용 가능한 버퍼가 있다면, 부분 패리티 계산 결과는 선택된 이용 가능한 버퍼에 저장될 수 있고, 이에 따라 제1 데이터 구조는 (예를 들어, 선택된 이용 가능한 버퍼에 부분 패리티 계산 결과의 저장을 반영하기 위해) 업데이트되고, (위에 설명된 바와 같이) 선택된 이용 가능한 버퍼에 로딩된 부분 패리티 계산 결과를 사용하여 패리티 계산(예를 들어, XOR 계산)이 수행될 수 있다. 추가적으로, 특정 데이터 청크는 특정 개방된 데이터 블록에 기입하기 위해 전송될 수 있다.
이용 가능한 버퍼가 없는 경우, 부분 계산 추적 기능을 갖는 패리티 계산기(122)는 사용에 이용할 수 없는 버퍼(예를 들어, 적어도 사용된 것, 라운드 로빈 등) 중 하나의 버퍼를 선택할 수 있고, 선택된 이용할 수 없는 버퍼에 저장된 주어진 부분 패리티 계산 결과는 비휘발성 메모리 공간으로 플러싱(flush)될 수 있고, 이에 따라 제2 데이터 구조가 업데이트될 수 있다(예를 들어, 주어진 부분 패리티 계산 결과가 비휘발성 메모리 공간에 저장된 위치의 메모리 어드레스로 업데이트될 수 있다). 이후, 부분 패리티 계산 결과가 선택된 이용할 수 없는 버퍼에 로딩될 수 있고, 이에 따라 제1 데이터 구조가 (예를 들어, 선택된 이용할 수 없는 버퍼에 부분 패리티 계산 결과의 저장을 반영하기 위해) 업데이트되고, (위에 설명된 바와 같이) 선택된 이용 가능한 버퍼에 로딩된 부분 패리티 계산 결과를 사용하여 패리티 계산(예를 들어, XOR 계산)이 수행될 수 있다. 추가적으로, 특정 데이터 청크는 특정 개방된 데이터 블록에 기입하기 위해 전송될 수 있다.
추가적으로, 부분 계산 추적 기능을 갖는 패리티 계산기(122)는 메모리 구성 요소(112A 내지 112N)의 비휘발성 메모리 공간에 저장된 부분 패리티 계산 결과에 관한 메타데이터를 포함할 수 있고, 이에 의해 메모리 서브시스템(110) 또는 메모리 서브시스템 제어기(115)에 대해 예상치 못한 전력 손실(또는 일부 다른 동작 문제)이 발생한 경우, 부분 계산 추적 기능을 갖는 패리티 계산기(122)는 메모리 서브시스템 제어기(115)가 버퍼 세트에 저장된 하나 이상의 부분 패리티 계산 결과의 메모리 위치, 및 비휘발성 메모리 공간에 저장된 하나 이상의 부분 패리티 계산 결과의 메모리 위치의 추적 기능을 복구하고 재개하게 할 수 있다. 실시형태에 따라, (비휘발성 메모리 공간에 저장된) 특정 부분 패리티 계산 결과에 대한 메타데이터는 특정 부분 패리티 계산 결과와 연관된 개방된 데이터 블록을 식별하는 정보; 개방된 데이터 블록 내의 정보 패리티 계산; 또는 부분 패리티 계산 결과에 참여한 마지막 데이터 청크가 저장된 비휘발성 메모리 공간 상의 위치의 메모리 어드레스(예를 들어, 페이지 어드레스) 중 적어도 하나를 포함할 수 있다.
일부 실시형태에서, 로컬 메모리(119)에 저장된 제1 및 제2 데이터 구조는 메모리 서브시스템(110)에 예상치 못한 전력 손실 시 손실된다. 메모리 서브시스템(110)이 이후 전력 투입되면, 부분 계산 추적 기능을 갖는 패리티 계산기(122)는 부분 패리티 계산 결과와 함께 비휘발성 메모리 공간에 저장된 메타데이터를 사용하여 메모리 구성 요소(112A 내지 112N) 상의 각각의 개방된 데이터 블록에 대한 적어도 제2 데이터 구조를 재생성(예를 들어, 복원)할 수 있다. 특히, 각각의 주어진 개방된 데이터 블록에 대해, 부분 계산 추적 기능을 갖는 패리티 계산기(122)는 주어진 개방된 데이터 블록에 대한 제1 데이터 구조를 재초기화하고(예를 들어, 모두 0으로 어레이를 초기화하고), 주어진 개방된 데이터 블록에 대해 제2 데이터 구조(예를 들어, 비어 있는 초기 다른 어레이)를 재초기화할 수 있다. 각각의 제2 데이터 구조와 관련하여, 부분 계산 추적 기능을 갖는 패리티 계산기(122)는 비휘발성 메모리 공간(예를 들어, 스왑 메모리 공간)에 마지막으로 유효한 기입된 데이터 청크(예를 들어, 페이지)를 식별할 수 있다. 마지막으로 유효한 기입된 데이터 청크에서 시작하여 부분 계산 추적 기능을 갖는 패리티 계산기(122)는 비휘발성 메모리 공간을 통해 역방향으로 판독하고, 저장된 메타데이터를 점검하여 특정 개방된 데이터 블록, 특정 개방된 데이터 블록 내의 데이터 청크 위치, 및 부분 패리티 계산 결과의 마지막 메모리 어드레스(예를 들어, 페이지 어드레스)를 식별할 수 있다. 특정 개방된 데이터 블록에 대한 제2 데이터 구조의 데이터 청크 위치에 대한 항목이 비어 있는 경우, 부분 계산 추적 기능을 갖는 패리티 계산기(122)는 마지막 메모리 어드레스를 항목에 로딩할 수 있다. 이후, 부분 계산 추적 기능을 갖는 패리티 계산기(122)는, 모든 개방된 데이터 블록에 대해, 개방된 데이터 블록의 데이터 청크 위치에 대한 (비휘발성 메모리 공간 상의) 마지막 유효 부분 패리티 계산 결과가 발견되고 나서, 발견된 마지막 유효 부분 패리티 계산 결과의 메모리 어드레스가 각각의 개방된 데이터 블록의 제2 데이터 구조에 로딩될 때까지, 비휘발성 메모리 공간에서 역방향으로 판독하는 이 프로세스를 계속한다.
하나 이상의 메모리 구성 요소(112A 내지 112N) 상에 기입된 데이터(예를 들어, 사용자 데이터)를 갖는 각각의 주어진 데이터 블록에 대해, 부분 계산 추적 기능을 갖는 패리티 계산기(122)는 주어진 데이터 블록의 데이터 청크(예를 들어, 페이지)에 대해 마지막으로 기입된 메모리 어드레스(예를 들어, 페이지 어드레스)로부터 판독을 시작할 수 있고, (이 메모리 어드레스로부터 시작하여) 메모리 구성 요소(112A 내지 112N) 상의 데이터 블록에 기입되었을 수 있지만 예상치 못한 전력 손실로 인해 연관된 부분 패리티 계산 결과가 손실된 데이터 청크(예를 들어, 페이지)를 결정할 수 있다. 예상치 못한 전력 손실로 손실된 부분 패리티 계산 결과와 연관된 것으로 결정된 데이터 청크(예를 들어, 페이지)는 판독될 수 있으며, 손실된 패리티 계산 동작은 데이터 청크가 주어진 데이터 블록에 기입되는 것과 부분 패리티 계산이 완전히 동기화되도록 수행될 수 있다.
실시형태에 따라, 부분 계산 추적 기능을 갖는 패리티 계산기(122)는 메모리 서브시스템(110)(예를 들어, 메모리 서브시스템 제어기(115))이 부분 계산 추적 기능을 갖는 패리티 계산기(122)에 대해 본 명세서에 설명된 동작을 수행하게 하는 로직(예를 들어, 펌웨어와 같은 기계 명령어 세트) 또는 하나 이상의 구성 요소를 포함할 수 있다. 부분 계산 추적 기능을 갖는 패리티 계산기(122)는 본 명세서에 설명된 동작을 수행할 수 있는 유형적인 유닛을 포함할 수 있다. 부분 계산 추적 기능을 갖는 패리티 계산기(122)의 동작에 관한 추가 세부 사항이 아래에 설명된다.
도 2는 본 발명의 일부 구현예에 따라 부분 계산 추적 기능을 갖는 예시적인 패리티 계산기(200)의 블록도이다. 예시된 바와 같이, 부분 계산 추적 기능을 갖는 패리티 계산기(200)는 패리티 계산 버퍼 저장 추적기(210), 패리티 계산 비휘발성 저장 추적기(220), 패리티 계산 매체 저장 관리자(230), 패리티 계산기(240), 패리티 계산 메타데이터 생성기(250), 및 패리티 계산 복구 관리자(260)를 포함한다. 일부 실시형태에 대해, 부분 계산 추적 기능을 갖는 패리티 계산기(200)는 도 2에 도시된 것보다 구성 요소 또는 배열(예를 들어, 더 적거나 더 많은 구성 요소)에서 상이할 수 있다.
패리티 계산 버퍼 저장 추적기(210)는 (예를 들어, 하나 이상의 메모리 구성 요소(112A 내지 112N)에 의해 구현된) 매체 상의 각각의 개방된 데이터 블록에 대해 어레이와 같은 제1 데이터 구조를 생성할 수 있다. 본 명세서에 언급된 바와 같이 주어진 개방된 데이터 블록에 대한 제1 데이터 구조는 주어진 개방된 데이터 블록의 데이터 청크(예를 들어, 페이지)에 대응하는 주어진 개방된 데이터 블록 내의 데이터 청크 위치를 데이터 청크와 연관된 부분 패리티 계산 결과를 저장하는 데 사용되는 버퍼 세트의 적어도 하나의 버퍼(예를 들어, 버퍼 식별자)에 매핑할 수 있다.
패리티 계산 비휘발성 저장 추적기(220)는 (예를 들어, 하나 이상의 메모리 구성 요소(112A 내지 112N)에 의해 구현된) 매체 상의 각각의 개방된 데이터 블록에 대해 어레이와 같은 제2 데이터 구조를 생성할 수 있다. 본 명세서에 언급된 바와 같이, 주어진 개방된 데이터 블록에 대한 제2 데이터 구조는 주어진 개방된 데이터 블록의 데이터 청크(예를 들어, 페이지)에 대응하는, 주어진 개방된 데이터 블록 내의 데이터 청크 위치를 데이터 청크와 연관된 부분 패리티 계산 결과를 저장하는 데 사용되는 비휘발성 메모리 공간(예를 들어, SLC NAND 디바이스에 구현될 수 있는 스왑 메모리 공간)의 메모리 위치에 매핑할 수 있다.
패리티 계산 매체 저장 관리자(230)는 비휘발성 메모리 공간(예를 들어, 스왑 메모리 공간)으로부터 버퍼로 부분 패리티 계산 결과를 로딩하거나, 버퍼로부터 비휘발성 메모리 공간으로 부분 패리티 계산 결과를 플러싱하거나, 또는 전체 패리티 계산 결과(예를 들어, 개방된 데이터 블록의 모든 데이터 청크가 처리되어 패리티 계산에 참여한 것)를 (예를 들어, 메모리 구성 요소(112A 내지 112N)에 의해 구현된) 매체 상의 영구 저장소에 기입하는 것을 수행할 수 있다.
패리티 계산기(240)는 개방된 데이터 블록의 데이터 청크에 패리티 계산을 수행하여 개방된 데이터 블록에 대한 패리티 계산 결과(예를 들어, 부분 또는 전체 패리티 계산 결과)를 생성할 수 있다. 본 명세서에 언급된 바와 같이, 개방된 데이터 블록의 데이터 청크에 수행된 패리티 계산은 XOR 계산을 포함할 수 있다.
패리티 계산 메타데이터 생성기(250)는 비휘발성 메모리 공간(예를 들어, 스왑 메모리 공간)에 저장된 부분 패리티 계산 결과와 관련하여 메타데이터를 생성할 수 있다. 본 명세서에 언급된 바와 같이, 특정 부분 패리티 계산 결과에 대한 메타데이터는 특정 부분 패리티 계산 결과와 연관된 개방된 데이터 블록을 식별하는 정보; 개방된 데이터 블록 내의 정보 패리티 계산; 또는 부분 패리티 계산 결과에 참여한 마지막 데이터 청크가 저장된 비휘발성 메모리 공간 상의 위치의 메모리 어드레스(예를 들어, 페이지 어드레스) 중 적어도 하나를 포함할 수 있다.
패리티 계산 복구 관리자(260)는 메모리 서브시스템(예를 들어, 110)이 예상치 못한 전력 손실을 경험한 후에 본 명세서에 설명된 바와 같이 패리티 계산 추적의 전력 투입 복구를 수행할 수 있다. 일부 실시형태에 따르면, 패리티 계산 복구 관리자(260)는 (예를 들어, 메모리 구성 요소(112A 내지 112N)에 의해 구현된) 매체의 각각의 개방된 데이터 블록에 대한 제1 데이터 구조를 재초기화하고, 비휘발성 메모리 공간(예를 들어, 스왑 메모리 공간)에 저장된 메타데이터 및 부분 패리티 계산 결과에 기초하여 매체의 각 개방된 데이터 블록에 대한 제2 데이터 구조를 재초기화하고 복원하고, 개방된 데이터 블록에 이미 기입된 데이터 청크와 동기화될 수 있는 예상치 못한 전력 손실로 손실된 부분 패리티 계산 결과를 결정하고 복구한다.
도 3은 본 발명의 일부 구현예에 따라 부분 계산 추적 기능을 사용하여 패리티 계산을 수행하기 위한 예시적인 방법(300)의 흐름도이다. 방법(300)은 하드웨어(예를 들어, 처리 디바이스, 회로부, 전용 로직, 프로그래밍 가능 로직, 마이크로코드, 디바이스의 하드웨어, 집적 회로 등), 소프트웨어(예를 들어, 처리 디바이스에서 런닝되거나 실행되는 명령어), 또는 이들의 조합을 포함할 수 있는 처리 로직에 의해 수행될 수 있다. 일부 실시형태에서, 방법(300)은 도 1의 메모리 서브시스템 제어기(115)에 의해 수행된다. 이들 실시형태에서, 방법(300)은 부분 계산 추적 기능을 갖는 패리티 계산기(122)에 의해 적어도 부분적으로 수행될 수 있다. 프로세스가 특정 순위 또는 순서로 표시되지만, 달리 명시되지 않는 한, 프로세스의 순서는 수정될 수 있다. 따라서, 예시된 실시형태는 단지 예시로서 이해되어야 하며, 예시된 프로세스는 상이한 순서로 수행될 수 있고, 일부 프로세스는 병렬로 수행될 수 있다. 추가적으로, 하나 이상의 프로세스는 다양한 실시형태에서 생략될 수 있다. 따라서, 모든 실시형태에서 모든 프로세스가 필요한 것은 아니다. 다른 프로세스 흐름도 가능하다. 일부 실시형태에서, 방법(300)의 동작은 기입을 위해 개방된 메모리 구성 요소 세트 상의 2개 이상의 (예를 들어, 모든) 데이터 블록(본 명세서에서 개방된 데이터 블록으로도 지칭됨)에 대해 그리고 이들 2개 이상의 데이터 블록의 2개 이상의 데이터 청크에 대해 수행된다.
동작(305)에서, 메모리 서브시스템의 처리 디바이스(예를 들어, 메모리 서브시스템 제어기(115)의 프로세서)는 메모리 구성 요소 세트 상의 데이터 블록에 대한 제1 데이터 구조를 생성(예를 들어, 초기화)하고, 여기서 데이터 블록은 메모리 구성 요소 세트에 기입하기 위해 개방되어 있고, 여기서 제1 데이터 구조는 데이터 블록 내의 데이터 청크 위치 세트를 하나 이상의 부분 패리티 계산 결과를 저장하기 위한 버퍼 세트에 매핑한다. 본 명세서에 설명된 바와 같이, 메모리 구성 요소 세트는 사용자 데이터의 영구 데이터 저장을 위한 매체를 구현하는 NAND 디바이스 세트(예를 들어, TLC NAND 디바이스)를 포함할 수 있다. 예를 들어, 제1 데이터 구조는 특정 데이터 청크에 대응하는, 데이터 블록의 특정 데이터 청크 위치를 버퍼 세트 내에서 특정 데이터 청크와 연관된 특정 부분 패리티 계산 결과를 저장하는 버퍼를 나타내는 식별자에 매핑할 수 있다. 본 명세서에 언급된 바와 같이, 일단 생성되면, 제1 데이터 구조는 메모리 서브시스템의 메모리 서브시스템 제어기의 로컬 메모리(예를 들어, RAM)에 저장될 수 있다. 추가적으로, 버퍼 세트는 메모리 서브시스템 제어기의 일부일 수 있고, 보다 구체적으로 메모리 서브시스템 제어기의 로컬 메모리의 일부일 수도 있다. 제1 데이터 구조는 데이터 블록의 데이터 청크와 관련하여 부분 패리티 계산 결과를 추적하기 위한 메커니즘을 나타내는 어레이 또는 테이블을 포함할 수 있다.
동작(310)에서, 메모리 서브시스템의 처리 디바이스는 데이터 블록에 대한 제2 데이터 구조를 생성하고, 여기서 제2 데이터 구조는 데이터 청크 위치 세트를 메모리 구성 요소 세트의 메모리 어드레스(예를 들어, 페이지 어드레스) 세트에 매핑하고, 메모리 어드레스 세트는 부분 패리티 계산 결과를 저장하기 위한 메모리 구성 요소 세트 상의 메모리 위치에 대응한다. 본 명세서에 설명된 바와 같이, 메모리 구성 요소 세트는 본 명세서에 설명된 바와 같이 부분 패리티 계산 결과 및 메타데이터의 영구 데이터 저장을 위해 예비된 비휘발성 메모리 공간(예를 들어, 스왑 메모리 공간)을 구현하는 NAND 디바이스(예를 들어, SLC NAND 디바이스) 세트를 포함할 수 있다. 영구 패리티 계산 결과를 저장하기 위한 이 NAND 디바이스 세트는 사용자 데이터를 저장하는 데 사용되는, 메모리 구성 요소 세트에서, NAND 디바이스 세트와 분리될 수 있다.
동작(315)에서, 메모리 서브시스템의 처리 디바이스는 데이터 청크가 메모리 구성 요소 세트에 기입하기 위해 개방된 데이터 블록에 기입되는 시기를 검출한다. 동작(320)에서, 메모리 서브시스템의 처리 디바이스가 데이터 청크가 데이터 블록에 기입되고 있음을 (동작(315)에서) 검출하면, 방법(300)은 동작(325)으로 진행하고, 그렇지 않은 경우 방법은 동작(315)으로 복귀한다.
동작(325)에서, 메모리 서브시스템의 처리 디바이스는 제1 데이터 구조가 버퍼 세트 내 특정 버퍼와, (동작(315)에서 검출된) 데이터 청크가 기입될 데이터 블록 내의 데이터 청크 위치 사이의 매핑을 포함하는지 여부를 결정한다. 그런 다음 방법(300)은 동작(330)으로 진행한다. 일부 실시형태의 경우, 동작(330 내지 345)은, 처리 디바이스가 제1 데이터 구조가 버퍼 세트 내의 특정 버퍼와 데이터 청크 위치 사이의 매핑을 포함하는지 여부를 (동작(325)에서) 결정한 것에 기초하여, 메모리 서브시스템의 처리 디바이스가 새로운 패리티 계산 결과를 생성하는 것을 나타낸다.
동작(330)에서, 메모리 서브시스템의 처리 디바이스가 제1 데이터 구조가 버퍼 세트 내의 특정 버퍼와 데이터 청크 위치 사이의 매핑을 포함한다고 (동작(325)에서) 결정하면, 방법(300)은 동작(335)으로 진행하고, 그렇지 않은 경우, 방법은 동작(340)으로 진행한다.
동작(335)에서, 메모리 서브시스템의 처리 디바이스는 특정 버퍼에 저장된 부분 패리티 계산 결과에 기초하여 데이터 청크에 대한 새로운 패리티 계산 결과를 생성한다. 본 명세서에서 언급된 바와 같이, 새로운 패리티 계산 결과는 XOR 연산에 의해 생성될 수 있으며, 이에 의해 개방된 데이터 블록에 기입될 데이터 청크와 부분 패리티 계산 결과는 XOR 계산에 의해 결합되어, 새로운 패리티 계산 결과를 생성한다. 일부 실시형태에서, 단일 동작은 데이터 청크를 XOR 연산을 사용하여 특정 버퍼의 현재 데이터 콘텐츠(예를 들어, 부분 패리티 계산 결과)와 결합시키고, 현재 데이터 콘텐츠를 결과 데이터(예를 들어, 새로운 패리티 계산 결과)로 대체한다. 결국, 패리티 계산 결과가 (예를 들어, 데이터 블록의 모든 데이터 청크가 패리티 계산에 참여했기 때문에) 완료되고, 영구 저장을 위해 데이터 블록과 관련하여 매체에 기입될 수 있고, 또는 특정 버퍼에 저장된 부분 패리티 계산 결과가 (예를 들어, 메모리 구성 요소 세트에 의해 구현된) 비휘발성 메모리 공간으로 플러싱되어, 특정 버퍼를 다른 데이터 청크에 대한 패리티 계산에 이용 가능하게 만들 수 있다.
동작(340)에서, 메모리 서브시스템의 처리 디바이스는 제2 데이터 구조에 기초하여 데이터 청크 위치와, 메모리 구성 요소 세트의 특정 메모리 어드레스 사이의 매핑을 결정한다.
동작(345)에서, 메모리 서브시스템의 처리 디바이스는 특정 메모리 어드레스에서 메모리 구성 요소 세트에 저장된 부분 패리티 계산 결과에 기초하여 데이터 청크에 대한 새로운 패리티 계산 결과를 생성한다. 이를 수행하기 위해, 처리 디바이스는 특정 메모리 어드레스에서 메모리 구성 요소 세트로부터 버퍼 세트 내 이용 가능한 버퍼로 부분 패리티 계산 결과를 로딩할 수 있고, 메모리 구성 요소 세트로부터 이용 가능한 버퍼에 로딩된 부분 패리티 계산 결과에 기초하여 데이터 청크에 대한 새로운 패리티 계산 결과를 생성할 수 있다. 특정 메모리 어드레스에서 메모리 구성 요소 세트로부터 버퍼 세트 내 이용 가능한 버퍼로 부분 패리티 계산 결과를 로딩하는 것과 관련하여, 처리 디바이스는 버퍼 세트에 이용 가능한 버퍼가 있는지 여부를 결정할 수 있으며, 버퍼 세트에 이용 가능한 버퍼가 있다는 결정에 응답하여, 이용 가능한 버퍼를 사용하여 메모리 구성 요소 세트로부터 부분 패리티 계산 결과를 로딩할 수 있다.
대안적으로, 버퍼 세트에 이용 가능한 버퍼가 없다는 결정에 응답하여, 처리 디바이스는 버퍼 세트에서 이용할 수 없는 버퍼를 이용 가능한 버퍼인 것으로 선택할 수 있고, (아마도 제2 개방된 데이터 블록의) 제2 데이터 청크와 연관되고 이용할 수 없는 버퍼에 저장된 현재 부분 패리티 계산을 주어진 메모리 어드레스의 메모리 구성 요소 세트로 플러싱할 수 있다. 일단 플러싱되면, 이용할 수 없는 버퍼는 이제 다른 부분 패리티 계산 결과를 로딩하는 데 이용할 수 있으며, 따라서 처리 디바이스는 특정 메모리 어드레스에서 메모리 구성 요소 세트로부터 새로 이용 가능한 버퍼로 부분 패리티 계산 결과를 로딩할 수 있다. 추가적으로, 처리 디바이스는 데이터 청크와 새로 이용 가능한 버퍼 사이의 매핑을 나타내기 위해 (데이터 청크의 개방된 데이터 블록과 연관된) 제1 데이터 구조를 업데이트할 수 있다. 제2 데이터 청크와 관련하여, 처리 디바이스는 제2 데이터 청크가 더 이상 이용할 수 없는 버퍼에 매핑되지 않음을 나타내기 위해 제2 데이터 청크의 개방된 데이터 블록과 연관된 제1 데이터 구조를 업데이트할 수 있고, 또한 주어진 메모리 어드레스와 다른 데이터 청크 사이의 매핑을 사용하여 제2 데이터 청크와 연관된 제2 데이터 구조를 업데이트할 수 있다.
부분 패리티 계산 결과가 본 명세서에 설명된 바와 같이 비휘발성 메모리 공간에 저장(예를 들어, 버퍼로부터 플러싱)될 때마다, 특정 패리티 계산 결과와 연관된 메타데이터는 부분 패리티 계산 결과와 관련하여 비휘발성 메모리 공간에 저장(또는 업데이트)될 수 있다. 본 명세서에 언급된 바와 같이, 메타데이터는 메모리 서브시스템이 예상치 못한 전력 손실을 경험한 후에 메모리 서브시스템이 제1 데이터 구조(들), 제2 데이터 구조(들) 또는 이 둘 다를 복구하는 것을 가능하게 할 수 있다. 예시적인 메타데이터는 특정 부분 패리티 계산 결과와 연관된 개방된 데이터 블록을 식별하는 정보; 개방된 데이터 블록 내의 정보 패리티 계산; 또는 부분 패리티 계산 결과에 참여한 마지막 데이터 청크가 저장된 비휘발성 메모리 공간 상의 위치의 메모리 어드레스(예를 들어, 페이지 어드레스) 중 적어도 하나를 포함할 수 있다. 도시되지는 않았지만, 메모리 서브시스템의 처리 디바이스는 메모리 서브시스템이 예상치 못한 전력 손실을 겪었는지 여부를 (예를 들어, 메모리 서브시스템의 전력 투입 동안) 결정할 수 있고, 예상치 못한 전력 손실이 발생했다고 결정한 것에 응답하여, 본 명세서에 설명된 바와 같이, 저장된 메타데이터에 기초하여 복구 동작을 수행할 수 있다.
도 4a 및 도 4b는 부분 계산 추적 기능을 사용하여 패리티 계산을 수행하는 방법을 실행할 수 있는 예시적인 실시형태의 맥락에서 컴퓨팅 환경(100)의 구성 요소들 사이의 상호 작용을 예시하는 상호 작용 다이어그램을 제공한다. 방법의 동작은 하드웨어(예를 들어, 처리 디바이스, 회로부, 전용 로직, 프로그래밍 가능 로직, 마이크로코드, 디바이스의 하드웨어, 집적 회로 등), 소프트웨어(예를 들어, 처리 디바이스에서 런닝되거나 실행되는 명령어) 또는 이들의 조합을 포함할 수 있는 처리 로직에 의해 수행될 수 있다. 일부 실시형태에서, 방법은 메모리 서브시스템 제어기(115)에 의해 수행된다. 동작이 특정 순위 또는 순서로 도시되지만, 달리 명시되지 않는 한, 프로세스의 순서는 수정될 수 있다. 따라서, 예시된 실시형태는 단지 예시로서 이해되어야 하며, 예시된 프로세스는 상이한 순서로 수행될 수 있고, 일부 프로세스는 병렬로 수행될 수 있다. 추가적으로, 하나 이상의 프로세스는 다양한 실시형태에서 생략될 수 있다. 따라서 모든 실시형태에서 모든 프로세스가 필요한 것은 아니다.
도 4a 및 도 4b에 도시된 예의 맥락에서, 프로세서는 메모리 서브시스템(110)의 프로세서(117)를 포함할 수 있고, 하나 이상의 버퍼는 메모리 서브시스템 제어기(115)의 일부(예를 들어, 로컬 메모리(119)의 일부)일 수 있고, 하나 이상의 메모리 구성 요소는 메모리 구성 요소(112A 내지 112N) 중 적어도 하나를 포함할 수 있다.
도시된 바와 같이, 동작(402)에서, 메모리 서브시스템의 프로세서는 메모리 구성 요소 상의 하나 이상의 개방된 데이터 블록에 대한 제1 데이터 구조 세트를 생성하고, 동작(404)에서, 프로세서는 하나 이상의 메모리 구성 요소 상의 하나 이상의 개방된 데이터 블록에 대한 제2 데이터 구조 세트를 생성한다.
동작(406)에서, 프로세서는 특정 개방된 데이터 블록의 특정 데이터 청크가 하나 이상의 메모리 구성 요소에 기입되는 때를 검출한다. 블록(408)에서 특정 데이터 청크가 기입되고 있음을 검출한 것에 응답하여, 프로세서는 제1 데이터 구조 세트에서 특정 개방된 데이터 블록과 연관된 제1 데이터 구조가 하나 이상의 버퍼의 특정 버퍼와, 특정 데이터 청크에 대응하는 특정 개방된 데이터 블록의 데이터 청크 위치 사이의 매핑을 포함하는지 여부를 결정할 수 있다. 제1 데이터 구조가 매핑을 포함하는 경우, 동작(410)에서, 프로세서는 특정 버퍼에 저장된 특정 패리티 계산 결과에 기초하여 새로운 패리티 계산을 (예를 들어, XOR 계산에 의해) 생성하고, 동작(412)에서 특정 버퍼는 생성된 새로운 패리티 계산 결과를 저장한다.
제1 데이터 구조가 매핑을 포함하지 않는 경우, 동작(422)에서, 프로세서는, 제2 데이터 구조 세트 내에 있고 특정 개방된 데이터 블록과 연관된 제2 데이터 구조에 기초하여, 특정 데이터 청크 위치와 하나 이상의 메모리 구성 요소의 메모리 어드레스 사이의 매핑을 결정한다. 동작(424)에서, 프로세서는 매핑에 의해 식별된 메모리 어드레스에 기초하여 하나 이상의 메모리 구성 요소로부터 이용 가능한 버퍼로 부분 패리티 계산 결과를 로딩한다. 특히, 동작(424)에서, 프로세서는 메모리 어드레스에 기초하여 하나 이상의 메모리 구성 요소로부터 부분 패리티 계산 결과를 판독한다. 동작(426)에서, 하나 이상의 메모리 구성 요소는 부분 패리티 계산 결과를 제공하고, 동작(428)에서, 이용 가능한 버퍼는 프로세서에 의해 하나 이상의 메모리 구성 요소로부터 판독된 부분 패리티 계산 결과를 로딩한다. 이후, 동작(430)에서, 프로세서는 이용 가능한 버퍼에 로딩된 특정 패리티 계산 결과에 기초하여 새로운 패리티 계산을 (예를 들어, XOR 계산에 의해) 생성하고, 동작(432)에서 특정 버퍼는 생성된 새로운 패리티 계산 결과를 저장한다.
도 5는 기계로 하여금 본 명세서에서 논의된 방법 중 임의의 하나 이상을 수행하게 하기 위한 명령어 세트를 실행할 수 있는 컴퓨터 시스템(500) 형태의 예시적인 기계를 도시한다. 일부 실시형태에서, 컴퓨터 시스템(500)은 메모리 서브시스템(예를 들어, 도 1의 메모리 서브시스템(110))을 포함하거나, 메모리 서브시스템에 결합되거나, 메모리 서브시스템을 이용하는 호스트 시스템(예를 들어, 도 1의 호스트 시스템(120))에 대응할 수 있고, 또는 제어기의 동작을 수행하는 데(예를 들어, 운영 체제를 실행하여, 도 1의 부분 계산 추적 기능을 갖는 패리티 계산기(122)에 대응하는 동작을 수행하는 데) 사용될 수 있다. 대안적인 실시형태에서, 기계는 근거리 통신망(LAN), 인트라넷, 엑스트라넷 및/또는 인터넷에서 다른 기계에 연결(예를 들어, 네트워크 연결)될 수 있다. 기계는 클라이언트-서버 네트워크 환경에서 서버 또는 클라이언트 기계의 역할로 동작하거나, 피어-투-피어(또는 분산) 네트워크 환경에서 피어 기계로 동작하거나, 또는 클라우드 컴퓨팅 인프라 또는 환경에서 서버 또는 클라이언트 기계로 동작할 수 있다.
기계는 개인용 컴퓨터(PC), 태블릿 PC, 셋톱 박스(STB), 개인 휴대 정보 단말기(PDA), 휴대폰, 웹 기기, 서버, 네트워크 라우터, 네트워크 스위치, 네트워크 브리지, 또는 이 기계에서 취해질 조치를 지정하는 명령어 세트(순차적 또는 기타)를 실행할 수 있는 임의의 기계일 수 있다. 또한, 단일 기계가 예시되어 있지만, "기계"라는 용어는 본 명세서에서 논의된 방법 중 임의의 하나 이상을 수행하기 위해 명령어 세트(또는 다수의 세트)를 개별적으로 또는 공동으로 실행하는 임의의 기계 집합을 포함하는 것으로 간주되어야 한다.
예시적인 컴퓨터 시스템(500)은 버스(530)를 통해 서로 통신하는, 처리 디바이스(502), 주 메모리(504)(예를 들어, 판독 전용 메모리(ROM), 플래시 메모리, 동적 랜덤 액세스 메모리(DRAM), 예를 들어, 동기식 DRAM(SDRAM) 또는 램버스 DRAM(RDRAM) 등), 정적 메모리(506)(예를 들어, 플래시 메모리, 정적 랜덤 액세스 메모리(SRAM) 등) 및 데이터 저장 디바이스(518)를 포함한다.
처리 디바이스(502)는 마이크로프로세서, 중앙 처리 유닛 등과 같은 하나 이상의 범용 처리 디바이스를 나타낸다. 보다 구체적으로, 처리 디바이스(502)는 복잡 명령어 세트 컴퓨팅(CISC) 마이크로프로세서, 축소 명령어 세트 컴퓨팅(RISC) 마이크로프로세서, 매우 긴 명령어(VLIW) 마이크로프로세서, 다른 명령어 세트를 구현하는 프로세서, 또는 명령어 세트의 조합을 구현하는 프로세서일 수 있다. 처리 디바이스(502)는 또한 주문형 집적 회로(ASIC), 전계 프로그래밍 가능 게이트 어레이(FPGA), 디지털 신호 프로세서(DSP), 네트워크 프로세서 등과 같은 하나 이상의 특수 목적 처리 디바이스일 수 있다. 처리 디바이스(502)는 본 명세서에서 논의된 동작 및 단계를 수행하기 위한 명령어(526)를 실행하도록 구성된다. 컴퓨터 시스템(500)은 네트워크(520)를 통해 통신하기 위한 네트워크 인터페이스 디바이스(508)를 더 포함할 수 있다.
데이터 저장 시스템(518)은 본 명세서에 설명된 방법 또는 기능 중 임의의 하나 이상을 구현하는 하나 이상의 명령어 세트(526) 또는 소프트웨어를 저장하는 기계 판독 가능 저장 매체(524)(컴퓨터 판독 가능 매체라고도 지칭됨)를 포함할 수 있다. 명령어(526)는 또한 컴퓨터 시스템(500)에 의해 실행되는 동안 주 메모리(504) 내에 및/또는 처리 디바이스(502) 내에 완전히 또는 적어도 부분적으로 상주할 수 있으며, 주 메모리(504) 및 처리 디바이스(502)는 또한 기계 판독 가능 매체를 구성한다. 기계 판독 가능한 저장 매체(524), 데이터 저장 시스템(518), 및/또는 주 메모리(504)는 도 1의 메모리 서브시스템(110)에 대응할 수 있다.
일 실시형태에서, 명령어(526)는 부분 계산 추적 기능을 갖는 패리티 계산기(예를 들어, 도 1의 부분 계산 추적 기능을 갖는 패리티 계산기(122))에 대응하는 기능을 구현하기 위한 명령어를 포함한다. 기계 판독 가능 저장 매체(524)는 예시적인 실시형태에서 단일 매체인 것으로 도시되어 있지만, "기계 판독 가능 저장 매체"라는 용어는 하나 이상의 명령어 세트를 저장하는 단일 매체 또는 다수의 매체를 포함하는 것으로 간주되어야 한다. "기계 판독 가능 저장 매체"라는 용어는 또한 기계에 의해 실행될 명령어 세트를 저장하거나 인코딩할 수 있고 기계로 하여금 본 발명의 방법 중 하나 이상을 수행하게 하는 임의의 매체를 포함하는 것으로 간주된다. 따라서 "기계 판독 가능 저장 매체"라는 용어는 솔리드 스테이트 메모리, 광학 매체 및 자기 매체를 포함하지만 이들로 제한되지는 않는 것으로 간주된다.
전술한 상세한 설명의 일부 부분은 컴퓨터 메모리 내의 데이터 비트에 대한 연산을 나타내는 알고리즘 및 상징적 표현의 관점에서 제시되었다. 이러한 알고리즘 설명 및 표현은 데이터 처리 기술 분야에 통상의 지식을 가진 자가 자신의 일의 본질을 이 기술 분야에 통상의 지식을 가진 다른 자에게 가장 효과적으로 전달하는 데 사용하는 방식이다. 알고리즘은 여기에서 일반적으로 원하는 결과를 초래하는 일관된 동작 시퀀스로 고려된다. 연산은 물리량의 물리적 조작을 요구하는 것이다. 반드시 그런 것은 아니지만 통상적으로 이러한 양은 저장, 결합, 비교 및 기타 조작이 가능한 전기 또는 자기 신호의 형태를 취한다. 주로 일반적으로 사용된다는 이유로 이러한 신호를 비트, 값, 요소, 기호, 문자, 용어, 숫자 등으로 지칭하는 것이 편리한 것으로 입증되었다.
그러나, 이들 용어 및 유사한 용어는 모두 적절한 물리량과 연관되어야 하며 이러한 양에 적용된 편리한 라벨일 뿐이라는 것을 명심해야 한다. 본 발명은 컴퓨터 시스템의 레지스터 및 메모리 내 물리적 (전자적) 양으로 표현된 데이터를 컴퓨터 시스템의 메모리 또는 레지스터 또는 기타 이러한 정보 저장 시스템 내 물리적 양으로 유사하게 표현된 다른 데이터로 조작하고 변환하는, 컴퓨터 시스템 또는 유사한 전자 컴퓨팅 디바이스의 동작 및 프로세스를 언급할 수 있다.
본 발명은 또한 본 명세서의 동작을 수행하기 위한 장치에 관한 것이다. 이 장치는 의도된 목적을 위해 특별히 구성될 수 있고 또는 이 장치는 컴퓨터에 저장된 컴퓨터 프로그램에 의해 선택적으로 활성화되거나 재구성된 범용 컴퓨터를 포함할 수 있다. 이러한 컴퓨터 프로그램은 컴퓨터 시스템 버스에 각각 연결된, 플로피 디스크, 광학 디스크, CD-ROM, 및 자기 광학 디스크; 판독 전용 메모리(ROM); 랜덤 액세스 메모리(RAM); 소거 가능 프로그래밍 가능 판독 전용 메모리(EPROM); EEPROM; 자기 또는 광학 카드; 또는 전자 명령어를 저장하기에 적합한 임의의 유형의 매체 등을 포함하는 임의의 유형의 디스크를 포함하지만 이로 제한되지 않는 컴퓨터 판독 가능 저장 매체에 저장될 수 있다.
본 명세서에 제시된 알고리즘 및 디스플레이는 본질적으로 임의의 특정 컴퓨터 또는 기타 장치와 관련이 없다. 다양한 범용 시스템이 본 명세서의 내용에 따라 프로그램과 함께 사용될 수 있고, 또는 본 방법을 수행하기 위해 보다 전문화된 장치를 구성하는 것이 편리한 것으로 입증될 수 있다. 이러한 다양한 시스템에 대한 구조는 상기 설명에 제시된 바와 같이 나타날 것이다. 또한, 본 발명은 임의의 특정 프로그래밍 언어를 참조하여 설명되지 않는다. 본 명세서에 설명된 발명의 내용을 구현하기 위해 다양한 프로그래밍 언어가 사용될 수 있는 것으로 이해된다.
본 발명은 본 발명에 따른 프로세스를 수행하도록 컴퓨터 시스템(또는 다른 전자 디바이스)을 프로그래밍하는 데 사용될 수 있는 명령어를 저장한 기계 판독 가능 매체를 포함할 수 있는 컴퓨터 프로그램 제품 또는 소프트웨어로서 제공될 수 있다. 기계 판독 가능 매체는 기계(예를 들어, 컴퓨터)에 의해 판독 가능한 형태로 정보를 저장하기 위한 임의의 메커니즘을 포함한다. 일부 실시형태에서, 기계 판독 가능(예를 들어, 컴퓨터 판독 가능) 매체는 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 자기 디스크 저장 매체, 광학 저장 매체, 플래시 메모리 구성 요소 등과 같은 기계 판독 가능(예를 들어, 컴퓨터 판독 가능) 저장 매체를 포함한다.
전술한 명세서에서, 본 발명의 실시형태는 특정 예시적인 실시형태를 참조하여 설명되었다. 이하의 청구 범위에 제시된 본 발명의 실시형태의 더 넓은 사상 및 범위를 벗어나지 않고 다양한 수정이 이루어질 수 있음이 명백할 것이다. 따라서, 본 명세서 및 도면은 본 발명을 제한하는 의미가 아니라 예시하는 의미로 간주되어야 한다.
실시예
실시예 1은 방법으로서, 데이터 청크 위치 세트를 포함하는 데이터 블록에 대한 제1 데이터 구조를 생성하는 단계로서, 상기 제1 데이터 구조는 상기 데이터 청크 위치 세트를 하나 이상의 부분 패리티 계산 결과를 저장하기 위한 버퍼 세트에 매핑하고, 상기 데이터 블록은 메모리 구성 요소 세트에 기입을 위해 개방되어 있고, 상기 메모리 구성 요소 세트는 상기 버퍼 세트와 다른, 상기 제1 데이터 구조를 생성하는 단계; 데이터 청크가 상기 데이터 블록에 기입되는 시기를 검출하는 단계; 상기 데이터 청크가 상기 데이터 블록에 기입되고 있음을 검출한 것에 응답하여, 상기 제1 데이터 구조가 상기 버퍼 세트의 특정 버퍼와, 상기 데이터 청크가 기입될 상기 데이터 블록의 데이터 청크 위치 사이의 매핑을 포함하는지 여부를 결정하는 단계; 및 처리 디바이스에 의해, 상기 제1 데이터 구조가 상기 특정 버퍼와 상기 데이터 청크 위치 사이의 매핑을 포함하는지 여부를 결정한 것에 기초하여 새로운 패리티 계산 결과를 생성하는 단계를 포함하는 방법이다.
실시예 2에서, 실시예 1의 주제는 선택 사항으로 상기 데이터 블록에 대한 제2 데이터 구조를 생성하는 단계를 포함하고, 상기 제2 데이터 구조는 상기 데이터 청크 위치 세트를 부분 패리티 계산 결과를 저장하기 위한 상기 메모리 구성 요소 세트 상의 메모리 위치에 대응하는 메모리 어드레스 세트에 매핑하며, 상기 제1 데이터 구조가 상기 특정 버퍼와 상기 데이터 청크 위치 사이의 매핑을 포함하는지 여부를 결정한 것에 기초하여 상기 새로운 패리티 계산 결과를 생성하는 단계는, 상기 제1 데이터 구조가 상기 특정 버퍼와 상기 데이터 청크 위치 사이의 매핑을 포함하지 않는다는 결정에 응답하여, 상기 제2 데이터 구조에 기초하여, 상기 데이터 청크 위치와 상기 메모리 구성 요소 세트의 특정 메모리 어드레스 사이의 매핑을 결정하는 단계; 및 상기 특정 메모리 어드레스에서 상기 메모리 구성 요소 세트에 저장된 부분 패리티 계산 결과에 기초하여 상기 데이터 청크에 대한 새로운 패리티 계산 결과를 생성하는 단계를 포함한다.
실시예 3에서, 실시예 1 또는 2의 주제는 선택 사항으로 상기 특정 메모리 어드레스에서 상기 메모리 구성 요소 세트에 저장된 상기 부분 패리티 계산 결과에 기초하여 상기 새로운 패리티 계산 결과를 생성하는 단계는, 상기 특정 메모리 어드레스에서 상기 메모리 구성 요소 세트로부터 상기 버퍼 세트의 이용 가능한 버퍼로 상기 부분 패리티 계산 결과를 로딩하는 단계; 및 상기 메모리 구성 요소 세트로부터 로딩된 상기 부분 패리티 계산 결과에 기초하여 상기 데이터 청크에 대한 상기 새로운 패리티 계산 결과를 생성하는 단계를 포함하는 것을 포함한다.
실시예 4에서, 실시예 1 내지 3 중 어느 하나의 주제는 선택 사항으로 상기 특정 메모리 어드레스에서 상기 메모리 구성 요소 세트로부터 상기 버퍼 세트의 이용 가능한 버퍼로 상기 부분 패리티 계산 결과를 로딩하는 단계는, 상기 버퍼 세트에 이용 가능한 버퍼가 있는지 여부를 결정하는 단계; 상기 버퍼 세트에 이용 가능한 버퍼가 없다는 결정에 응답하여, 상기 버퍼 세트에서 이용할 수 없는 버퍼를 상기 이용 가능한 버퍼인 것으로 선택하는 단계; 상기 이용할 수 없는 버퍼에 저장된 현재 부분 패리티 계산을 주어진 메모리 어드레스에서 상기 메모리 구성 요소 세트로 플러싱하는 단계로서, 상기 현재 부분 패리티 계산은 다른 데이터 청크와 연관된, 상기 플러싱하는 단계; 상기 주어진 메모리 어드레스와 상기 다른 데이터 청크 사이의 매핑으로 상기 다른 데이터 청크와 연관된 제2 데이터 구조를 업데이트하는 단계; 및 상기 특정 메모리 어드레스에서 상기 메모리 구성 요소 세트로부터 상기 이용 가능한 버퍼로 상기 부분 패리티 계산 결과를 로딩하는 단계를 포함하는 것을 포함한다.
실시예 5에서, 실시예 1 내지 4 중 어느 하나의 주제는 선택 사항으로 상기 제1 데이터 구조가 상기 특정 버퍼와 상기 데이터 청크 위치 사이의 매핑을 포함하는지 여부를 결정한 것에 기초하여 상기 새로운 패리티 계산 결과를 생성하는 단계는, 상기 제1 데이터 구조가 상기 특정 버퍼와 상기 데이터 청크 위치 사이의 매핑을 포함한다는 결정에 응답하여, 상기 특정 버퍼에 저장된 부분 패리티 계산 결과에 기초하여 상기 데이터 청크에 대한 새로운 패리티 계산 결과를 생성하는 단계를 포함하는 것을 포함한다.
실시예 6에서, 실시예 1 내지 5 중 어느 하나의 주제는 선택 사항으로 상기 부분 패리티 계산 결과를 저장하기 위한 메모리 위치는 상기 메모리 위치에 저장된 각각의 특정 부분 패리티 계산에 대한 메타데이터를 더 저장하고, 상기 방법은, 메모리 서브시스템이 예상치 못한 전력 손실을 겪었는지 여부를 결정하는 단계; 및 상기 메모리 서브시스템이 예상치 못한 전력 손실을 겪었다는 결정에 응답하여, 저장된 메타데이터에 기초하여 복구 동작을 수행하는 단계를 더 포함하는 것을 포함한다.
실시예 7에서, 실시예 1 내지 6 중 어느 하나의 주제는 선택 사항으로 상기 부분 패리티 계산 결과를 저장하기 위한 메모리 위치는 상기 메모리 위치에 저장된 각각의 특정 부분 패리티 계산에 대한 메타데이터를 더 저장하고, 상기 메타데이터는 상기 특정 부분 패리티 계산에 대한 특정 메타데이터를 포함하고, 상기 특정 메타데이터는, 상기 특정 부분 패리티 계산과 연관된 상기 메모리 구성 요소 세트 상의 특정 데이터 블록에 대한 식별자; 상기 특정 부분 패리티 계산에 대한 식별자; 또는 상기 특정 패리티 계산을 계산할 때 참여한 마지막 데이터 청크에 대한 상기 메모리 구성 요소 세트 상의 특정 메모리 어드레스를 포함하는 것을 선택한다.
실시예 8에서, 실시예 1 내지 7 중 어느 하나의 주제는 선택 사항으로 상기 메모리 어드레스 세트는 상기 메모리 구성 요소 세트 상의 예비된 메모리 공간에 대응하는 것을 포함한다.
실시예 9에서, 실시예 1 내지 8 중 어느 하나의 주제는 선택 사항으로 상기 데이터 청크는 메모리 페이지를 포함하는 것을 포함한다.
실시예 10에서, 실시예 1 내지 9 중 어느 하나의 주제는 선택 사항으로 상기 메모리 구성 요소 세트는 적어도 하나의 NAND형 플래시 메모리 디바이스를 포함하고, 상기 메모리 구성 요소 세트는 회전 패리티 방식을 구현하는 것을 포함한다.
실시예 11에서, 실시예 1 내지 10 중 어느 하나의 주제는 선택 사항으로 상기 데이터 청크에 대한 상기 새로운 패리티 계산 결과를 생성하는 단계는 상기 데이터 청크에 배타적 OR(XOR) 연산을 수행하는 단계, 및 상기 데이터 청크와 연관된 부분 패리티 계산 결과를 수행하는 단계를 포함하는 것을 포함한다.
실시예 12는 시스템으로서, 버퍼 세트; 개방된 데이터 블록 세트를 포함하는 메모리 구성 요소 세트; 및 상기 메모리 구성 요소 세트 및 상기 버퍼 세트에 동작 가능하게 결합된 처리 디바이스를 포함하고, 상기 처리 디바이스는, 상기 개방된 데이터 블록 세트의 각 데이터 블록에 대해 제1 데이터 구조를 생성하여 상기 개방된 데이터 블록 세트에 대응하는 제1 데이터 구조 세트를 생성하는 동작으로서, 상기 제1 데이터 구조 세트의 특정 제1 데이터 구조는 상기 개방된 데이터 블록 세트에서 특정 데이터 블록의 데이터 청크 위치 세트를 하나 이상의 부분 패리티 계산 결과를 저장하기 위한 상기 버퍼 세트로 매핑하고, 상기 개방된 데이터 블록 세트의 각 데이터 블록은 상기 메모리 구성 요소 세트에 기입하기 위해 개방되어 있는, 상기 제1 데이터 구조 세트를 생성하는 동작; 상기 데이터 청크가 상기 특정 데이터 블록에 기입되는 시기를 검출하는 동작; 상기 데이터 청크가 상기 특정 데이터 블록에 기입되고 있음을 검출한 것에 응답하여, 상기 특정 제1 데이터 구조가 상기 버퍼 세트의 특정 버퍼와, 상기 데이터 청크가 기입될 상기 특정 데이터 블록의 데이터 청크 위치 사이의 매핑을 포함하는지 여부를 결정하는 동작; 및 상기 제1 데이터 구조가 상기 특정 버퍼와 상기 데이터 청크 위치 사이의 매핑을 포함하는지 여부를 결정한 것에 기초하여 새로운 패리티 계산 결과를 생성하는 동작을 포함하는 동작을 수행하도록 구성된, 상기 시스템이다.
실시예 13에서, 실시예 12의 주제는 선택 사항으로 상기 제1 데이터 구조가 상기 특정 버퍼와 상기 데이터 청크 위치 사이의 매핑을 포함하는지 여부를 결정한 것에 기초하여 상기 새로운 패리티 계산 결과를 생성하는 동작은, 상기 특정 제1 데이터 구조가 상기 특정 버퍼와 상기 데이터 청크 위치 사이의 매핑을 포함한다는 결정에 응답하여, 상기 특정 버퍼에 저장된 부분 패리티 계산 결과에 기초하여 상기 데이터 청크에 대한 새로운 패리티 계산 결과를 생성하는 동작을 포함하는 것을 포함한다.
실시예 14에서, 실시예 12 또는 13 중 어느 하나의 주제는 선택 사항으로 상기 동작은, 개방된 데이터 블록 세트의 각 데이터 블록에 대해 제2 데이터 구조를 생성하여 상기 개방된 데이터 블록 세트에 대응하는 제2 데이터 구조 세트를 생성하는 동작을 더 포함하고, 상기 제2 데이터 구조 세트 내의 특정 제2 데이터 구조는 상기 데이터 청크 위치의 세트를 상기 메모리 구성 요소 세트의 메모리 어드레스 세트로 매핑하고, 상기 메모리 어드레스 세트는 부분 패리티 계산 결과를 저장하기 위한 상기 메모리 구성 요소 세트 상의 메모리 위치에 대응하는 것을 포함한다.
실시예 15에서, 실시예 12 내지 14 중 어느 하나의 주제는 선택 사항으로 상기 제1 데이터 구조가 상기 특정 버퍼와 상기 데이터 청크 위치 사이의 매핑을 포함하는지 여부를 결정한 것에 기초하여 상기 새로운 패리티 계산 결과를 생성하는 동작은 상기 특정 제1 데이터 구조가 상기 특정 버퍼와 상기 데이터 청크 위치 사이의 매핑을 포함하지 않는다는 결정에 응답하여, 상기 특정 제2 데이터 구조에 기초하여 상기 데이터 청크 위치와 상기 메모리 구성 요소 세트의 특정 메모리 어드레스 사이의 매핑을 결정하는 동작; 및 상기 특정 메모리 어드레스에서 상기 메모리 구성 요소의 세트에 저장된 부분 패리티 계산 결과에 기초하여 상기 데이터 청크에 대한 새로운 패리티 계산 결과를 생성하는 동작을 포함하는 것을 포함한다.
실시예 16에서, 실시예 12 내지 15 중 어느 하나의 주제는 선택 사항으로 상기 특정 메모리 어드레스의 상기 메모리 구성 요소 세트에 저장된 상기 부분 패리티 계산 결과에 기초하여 상기 새로운 패리티 계산 결과를 생성하는 동작은, 상기 특정 메모리 어드레스의 상기 메모리 구성 요소 세트로부터 상기 버퍼 세트의 이용 가능한 버퍼로 상기 부분 패리티 계산 결과를 로딩하는 동작; 및 상기 메모리 구성 요소 세트로부터 로딩된 상기 부분 패리티 계산 결과에 기초하여 상기 데이터 청크에 대한 상기 새로운 패리티 계산 결과를 생성하는 동작을 포함하는 것을 포함한다.
실시예 17에서, 실시예 12 내지 16 중 어느 하나의 주제는 선택 사항으로 상기 특정 메모리 어드레스의 메모리 구성 요소 세트로부터 상기 버퍼 세트의 이용 가능한 버퍼로 상기 부분 패리티 계산 결과를 로딩하는 동작은, 상기 버퍼 세트에 이용 가능한 버퍼가 있는지 여부를 결정하는 동작; 상기 버퍼 세트에 이용 가능한 버퍼가 없다고 결정한 것에 응답하여, 상기 버퍼 세트에서 이용할 수 없는 버퍼를 상기 이용 가능한 버퍼인 것으로 선택하는 동작; 이용할 수 없는 버퍼에 저장된 현재 부분 패리티 계산을 주어진 메모리 어드레스의 메모리 구성 요소 세트로 플러싱하는 동작으로서, 상기 현재 부분 패리티 계산은 다른 데이터 청크와 연관된, 상기 플러싱하는 동작; 상기 주어진 메모리 어드레스와 상기 다른 데이터 청크 사이의 매핑을 사용하여 상기 특정 제2 데이터 구조를 업데이트하는 동작; 및 상기 특정 메모리 어드레스의 메모리 구성 요소 세트로부터 상기 이용 가능한 버퍼로 상기 부분 패리티 계산 결과를 로딩하는 동작을 포함하는 것을 포함한다.
실시예 18에서, 실시예 12 내지 17 중 어느 하나의 주제는 선택 사항으로 상기 부분 패리티 계산 결과를 저장하기 위한 메모리 위치는 상기 메모리 위치에 저장된 각 특정 부분 패리티 계산에 대한 메타데이터를 더 저장하고, 상기 방법은, 메모리 서브시스템이 예상치 못한 전력 손실을 겪었는지 여부를 결정하는 동작으로서, 상기 메모리 서브시스템은 상기 메모리 서브시스템 제어기 및 상기 메모리 구성 요소 세트를 포함하는, 상기 결정하는 동작; 및 상기 메모리 서브시스템이 예상치 못한 전력 손실을 겪었다는 결정에 응답하여 저장된 메타데이터에 기초하여 복구 동작을 수행하는 동작을 더 포함하는 것을 포함한다.
실시예 19에서, 실시예 13 내지 18 중 어느 하나의 주제는 선택 사항으로 상기 부분 패리티 계산 결과를 저장하기 위한 메모리 위치는 상기 메모리 위치에 저장된 각 특정 부분 패리티 계산에 대한 메타데이터를 더 저장하고, 상기 메타데이터는 상기 특정 부분 패리티 계산에 대한 특정 메타데이터를 포함하고, 상기 특정 메타데이터는, 상기 특정 부분 패리티 계산과 연관된 상기 메모리 구성 요소 세트 상의 데이터 블록에 대한 식별자; 상기 특정 부분 패리티 계산에 대한 식별자; 또는 상기 특정 패리티 계산을 계산할 때 참여한 마지막 데이터 청크에 대한 상기 메모리 구성 요소 세트 상의 특정 메모리 어드레스를 포함하는 것을 포함한다.
실시예 20은 명령어를 포함하는 비-일시적인 컴퓨터 판독 가능 저장 매체로서, 상기 명령어는, 처리 디바이스에 의해 실행될 때, 상기 처리 디바이스로 하여금, 내장된 메모리에서 데이터 청크 위치 세트를 포함하는 데이터 블록에 대한 제1 데이터 구조를 생성하는 동작으로서, 상기 제1 데이터 구조는 상기 데이터 청크 위치 세트를 하나 이상의 부분 패리티 계산 결과를 저장하기 위한 버퍼 세트로 매핑하고, 상기 데이터 블록은 상기 메모리 구성 요소 세트에 기입하기 위해 개방되어 있고, 로컬 메모리는 상기 버퍼 세트와 상이한, 상기 제1 데이터 구조를 생성하는 동작; 데이터 청크가 상기 데이터 블록에 기입되는 시기를 검출하는 동작; 상기 데이터 청크가 상기 데이터 블록에 기입되고 있음을 검출한 것에 응답하여, 상기 제1 데이터 구조가 상기 버퍼 세트의 특정 버퍼와, 상기 데이터 청크가 기입될 상기 데이터 블록의 데이터 청크 위치 사이의 매핑을 포함하는지 여부를 결정하는 동작; 및 상기 제1 데이터 구조가 상기 특정 버퍼와 상기 데이터 청크 위치 사이의 매핑을 포함하는지 여부를 결정한 것에 기초하여 새로운 패리티 계산 결과를 생성하는 동작을 수행하게 하는, 비-일시적인 컴퓨터 판독 가능 저장 매체이다.
Claims (15)
- 방법으로서,
데이터 청크 위치(data chunk position) 세트를 포함하는 데이터 블록에 대한 제1 데이터 구조를 생성하는 단계로서, 상기 제1 데이터 구조는 상기 데이터 청크 위치 세트를 하나 이상의 부분 패리티 계산 결과를 저장하기 위한 버퍼 세트에 매핑하고, 상기 데이터 블록은 메모리 구성 요소 세트에 기입을 위해 개방되어 있고, 상기 메모리 구성 요소 세트는 상기 버퍼 세트와 다른, 상기 제1 데이터 구조를 생성하는 단계;
데이터 청크가 상기 데이터 블록에 기입되는 시기를 검출하는 단계;
상기 데이터 청크가 상기 데이터 블록에 기입되고 있음을 검출한 것에 응답하여, 상기 제1 데이터 구조가 상기 버퍼 세트의 특정 버퍼와, 상기 데이터 청크가 기입될 상기 데이터 블록의 데이터 청크 위치 사이의 매핑을 포함하는지 여부를 결정하는 단계; 및
처리 디바이스에 의해, 상기 제1 데이터 구조가 상기 특정 버퍼와 상기 데이터 청크 위치 사이의 매핑을 포함하는지 여부를 결정한 것에 기초하여 새로운 패리티 계산 결과를 생성하는 단계를 포함하는, 방법. - 제1항에 있어서,
상기 데이터 블록에 대한 제2 데이터 구조를 생성하는 단계를 더 포함하고, 상기 제2 데이터 구조는 상기 데이터 청크 위치 세트를 부분 패리티 계산 결과를 저장하기 위한 상기 메모리 구성 요소 세트 상의 메모리 위치에 대응하는 메모리 어드레스 세트에 매핑하며, 상기 제1 데이터 구조가 상기 특정 버퍼와 상기 데이터 청크 위치 사이의 매핑을 포함하는지 여부를 결정한 것에 기초하여 상기 새로운 패리티 계산 결과를 생성하는 단계는,
상기 제1 데이터 구조가 상기 특정 버퍼와 상기 데이터 청크 위치 사이의 매핑을 포함하지 않는다는 결정에 응답하여,
상기 제2 데이터 구조에 기초하여, 상기 데이터 청크 위치와 상기 메모리 구성 요소 세트의 특정 메모리 어드레스 사이의 매핑을 결정하는 단계; 및
상기 특정 메모리 어드레스에서 상기 메모리 구성 요소 세트에 저장된 부분 패리티 계산 결과에 기초하여 상기 데이터 청크에 대한 새로운 패리티 계산 결과를 생성하는 단계를 포함하는, 방법. - 제2항에 있어서, 상기 특정 메모리 어드레스에서 상기 메모리 구성 요소 세트에 저장된 상기 부분 패리티 계산 결과에 기초하여 상기 새로운 패리티 계산 결과를 생성하는 단계는,
상기 특정 메모리 어드레스에서 상기 메모리 구성 요소 세트로부터 상기 버퍼 세트의 이용 가능한 버퍼로 상기 부분 패리티 계산 결과를 로딩하는 단계; 및
상기 메모리 구성 요소 세트로부터 상기 이용 가능한 버퍼로 로딩된 상기 부분 패리티 계산 결과에 기초하여 상기 데이터 청크에 대한 상기 새로운 패리티 계산 결과를 생성하는 단계를 포함하는, 방법. - 제3항에 있어서, 상기 특정 메모리 어드레스에서 상기 메모리 구성 요소 세트로부터 상기 버퍼 세트의 이용 가능한 버퍼로 상기 부분 패리티 계산 결과를 로딩하는 단계는,
상기 버퍼 세트에 이용 가능한 버퍼가 있는지 여부를 결정하는 단계;
상기 버퍼 세트에 이용 가능한 버퍼가 없다는 결정에 응답하여,
상기 버퍼 세트에서 이용할 수 없는 버퍼를 상기 이용 가능한 버퍼인 것으로 선택하는 단계;
상기 이용할 수 없는 버퍼에 저장된 현재 부분 패리티 계산을 주어진 메모리 어드레스에서 상기 메모리 구성 요소 세트로 플러싱(flush)하는 단계로서, 상기 현재 부분 패리티 계산은 다른 데이터 청크와 연관된, 상기 플러싱하는 단계;
상기 주어진 메모리 어드레스와 상기 다른 데이터 청크 사이의 매핑을 사용하여 상기 다른 데이터 청크와 연관된 제2 데이터 구조를 업데이트하는 단계; 및
상기 특정 메모리 어드레스에서 상기 메모리 구성 요소 세트로부터 상기 이용 가능한 버퍼로 상기 부분 패리티 계산 결과를 로딩하는 단계를 포함하는, 방법. - 제1항에 있어서, 상기 제1 데이터 구조가 상기 특정 버퍼와 상기 데이터 청크 위치 사이의 매핑을 포함하는지 여부를 결정한 것에 기초하여 상기 새로운 패리티 계산 결과를 생성하는 단계는,
상기 제1 데이터 구조가 상기 특정 버퍼와 상기 데이터 청크 위치 사이의 매핑을 포함한다는 결정에 응답하여, 상기 특정 버퍼에 저장된 부분 패리티 계산 결과에 기초하여 상기 데이터 청크에 대한 새로운 패리티 계산 결과를 생성하는 단계를 포함하는, 방법. - 제1항에 있어서, 상기 부분 패리티 계산 결과를 저장하기 위한 메모리 위치는 상기 메모리 위치에 저장된 각각의 특정 부분 패리티 계산에 대한 메타데이터를 더 저장하고, 상기 방법은,
메모리 서브시스템이 예상치 못한 전력 손실을 겪었는지 여부를 결정하는 단계; 및
상기 메모리 서브시스템이 예상치 못한 전력 손실을 겪었다는 결정에 응답하여, 저장된 메타데이터에 기초하여 복구 동작을 수행하는 단계를 더 포함하는, 방법. - 제1항에 있어서, 상기 부분 패리티 계산 결과를 저장하기 위한 메모리 위치는 상기 메모리 위치에 저장된 각각의 특정 부분 패리티 계산에 대한 메타데이터를 더 저장하고, 상기 메타데이터는 상기 특정 부분 패리티 계산에 대한 특정 메타데이터를 포함하고, 상기 특정 메타데이터는,
상기 특정 부분 패리티 계산과 연관된 상기 메모리 구성 요소 세트 상의 특정 데이터 블록에 대한 식별자;
상기 특정 부분 패리티 계산에 대한 식별자; 또는
상기 특정 패리티 계산을 계산할 때 참여한 마지막 데이터 청크에 대한 상기 메모리 구성 요소 세트 상의 특정 메모리 어드레스를 포함하는, 방법. - 제1항에 있어서, 상기 메모리 구성 요소 세트는 적어도 하나의 NAND형 플래시 메모리 디바이스를 포함하고, 상기 메모리 구성 요소 세트는 회전 패리티 방식을 구현하는, 방법.
- 제1항에 있어서, 상기 데이터 청크에 대한 상기 새로운 패리티 계산 결과를 생성하는 단계는 상기 데이터 청크에 배타적 OR(XOR) 연산을 수행하고, 상기 데이터 청크와 연관된 부분 패리티 계산 결과를 수행하는 단계를 포함하는, 방법.
- 시스템으로서,
버퍼 세트;
개방된 데이터 블록 세트를 포함하는 메모리 구성 요소 세트; 및
상기 메모리 구성 요소 세트 및 상기 버퍼 세트에 동작 가능하게 결합된 처리 디바이스를 포함하고, 상기 처리 디바이스는,
상기 개방된 데이터 블록 세트의 각 데이터 블록에 대해 제1 데이터 구조를 생성하여 상기 개방된 데이터 블록 세트에 대응하는 제1 데이터 구조 세트를 생성하는 동작으로서, 상기 제1 데이터 구조 세트의 특정 제1 데이터 구조는 상기 개방된 데이터 블록 세트에서 특정 데이터 블록의 데이터 청크 위치 세트를 하나 이상의 부분 패리티 계산 결과를 저장하기 위한 상기 버퍼 세트로 매핑하고, 상기 개방된 데이터 블록 세트의 각 데이터 블록은 상기 메모리 구성 요소 세트에 기입하기 위해 개방되어 있는, 상기 제1 데이터 구조 세트를 생성하는 동작;
상기 데이터 청크가 상기 특정 데이터 블록에 기입되는 시기를 검출하는 동작;
상기 데이터 청크가 상기 특정 데이터 블록에 기입되고 있음을 검출한 것에 응답하여, 상기 특정 제1 데이터 구조가 상기 버퍼 세트의 특정 버퍼와, 상기 데이터 청크가 기입될 상기 특정 데이터 블록의 데이터 청크 위치 사이의 매핑을 포함하는지 여부를 결정하는 동작; 및
상기 제1 데이터 구조가 상기 특정 버퍼와 상기 데이터 청크 위치 사이의 매핑을 포함하는지 여부를 결정한 것에 기초하여 새로운 패리티 계산 결과를 생성하는 동작을 포함하는 동작을 수행하도록 구성된, 시스템. - 제10항에 있어서, 상기 제1 데이터 구조가 상기 특정 버퍼와 상기 데이터 청크 위치 사이의 매핑을 포함하는지 여부를 결정한 것에 기초하여 상기 새로운 패리티 계산 결과를 생성하는 동작은,
상기 특정 제1 데이터 구조가 상기 특정 버퍼와 상기 데이터 청크 위치 사이의 매핑을 포함한다는 결정에 응답하여, 상기 특정 버퍼에 저장된 부분 패리티 계산 결과에 기초하여 상기 데이터 청크에 대한 새로운 패리티 계산 결과를 생성하는 동작을 포함하는, 시스템. - 제10항에 있어서, 상기 동작은,
개방된 데이터 블록 세트의 각 데이터 블록에 대해 제2 데이터 구조를 생성하여 상기 개방된 데이터 블록 세트에 대응하는 제2 데이터 구조 세트를 생성하는 동작을 더 포함하고, 상기 제2 데이터 구조 세트 내의 특정 제2 데이터 구조는 상기 데이터 청크 위치의 세트를 상기 메모리 구성 요소 세트의 메모리 어드레스 세트로 매핑하고, 상기 메모리 어드레스 세트는 부분 패리티 계산 결과를 저장하기 위한 상기 메모리 구성 요소 세트 상의 메모리 위치에 대응하는, 시스템. - 제10항에 있어서, 상기 부분 패리티 계산 결과를 저장하기 위한 메모리 위치는 상기 메모리 위치에 저장된 각 특정 부분 패리티 계산에 대한 메타데이터를 더 저장하고, 상기 방법은,
메모리 서브시스템이 예상치 못한 전력 손실을 겪었는지 여부를 결정하는 동작; 및
상기 메모리 서브시스템이 예상치 못한 전력 손실을 겪었다는 결정에 응답하여 저장된 메타데이터에 기초하여 복구 동작을 수행하는 동작을 더 포함하는, 시스템. - 제10항에 있어서, 상기 부분 패리티 계산 결과를 저장하기 위한 메모리 위치는 상기 메모리 위치에 저장된 각 특정 부분 패리티 계산에 대한 메타데이터를 더 저장하고, 상기 메타데이터는 상기 특정 부분 패리티 계산에 대한 특정 메타데이터를 포함하고, 상기 특정 메타데이터는,
상기 특정 부분 패리티 계산과 연관된 상기 메모리 구성 요소 세트 상의 데이터 블록에 대한 식별자;
상기 특정 부분 패리티 계산에 대한 식별자; 또는
상기 특정 패리티 계산을 계산할 때 참여한 마지막 데이터 청크에 대한 상기 메모리 구성 요소 세트 상의 특정 메모리 어드레스를 포함하는, 시스템. - 명령어를 포함하는 비-일시적인 컴퓨터 판독 가능 저장 매체로서, 상기 명령어는, 처리 디바이스에 의해 실행될 때, 상기 처리 디바이스로 하여금,
내장된 메모리에서 데이터 청크 위치 세트를 포함하는 데이터 블록에 대한 제1 데이터 구조를 생성하는 동작으로서, 상기 제1 데이터 구조는 상기 데이터 청크 위치 세트를 하나 이상의 부분 패리티 계산 결과를 저장하기 위한 버퍼 세트로 매핑하고, 상기 데이터 블록은 상기 메모리 구성 요소 세트에 기입하기 위해 개방되어 있고, 로컬 메모리는 상기 버퍼 세트와 상이한, 상기 제1 데이터 구조를 생성하는 동작;
데이터 청크가 상기 데이터 블록에 기입되는 시기를 검출하는 동작;
상기 데이터 청크가 상기 데이터 블록에 기입되고 있음을 검출한 것에 응답하여, 상기 제1 데이터 구조가 상기 버퍼 세트의 특정 버퍼와, 상기 데이터 청크가 기입될 상기 데이터 블록의 데이터 청크 위치 사이의 매핑을 포함하는지 여부를 결정하는 동작; 및
상기 제1 데이터 구조가 상기 특정 버퍼와 상기 데이터 청크 위치 사이의 매핑을 포함하는지 여부를 결정한 것에 기초하여 새로운 패리티 계산 결과를 생성하는 동작
을 수행하게 하는, 비-일시적인 컴퓨터 판독 가능 저장 매체.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/107,187 | 2018-08-21 | ||
US16/107,187 US10754726B2 (en) | 2018-08-21 | 2018-08-21 | Tracking error-correction parity calculations |
PCT/US2019/047247 WO2020041298A1 (en) | 2018-08-21 | 2019-08-20 | Tracking error-correction parity calculations |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20210034676A true KR20210034676A (ko) | 2021-03-30 |
Family
ID=69586196
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020217007985A KR20210034676A (ko) | 2018-08-21 | 2019-08-20 | 에러 정정 패리티 계산 추적 |
Country Status (5)
Country | Link |
---|---|
US (1) | US10754726B2 (ko) |
EP (1) | EP3841472A4 (ko) |
KR (1) | KR20210034676A (ko) |
CN (1) | CN112753021A (ko) |
WO (1) | WO2020041298A1 (ko) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10754726B2 (en) | 2018-08-21 | 2020-08-25 | Micron Technology, Inc. | Tracking error-correction parity calculations |
US11023388B2 (en) * | 2018-09-21 | 2021-06-01 | SK Hynix Inc. | Data path protection parity determination for data patterns in storage devices |
CN113190384B (zh) * | 2021-05-21 | 2022-07-22 | 重庆紫光华山智安科技有限公司 | 基于纠删码的数据恢复控制方法、装置、设备及介质 |
US20240303159A1 (en) * | 2023-03-08 | 2024-09-12 | Micron Technology, Inc. | Data protection and recovery |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5533190A (en) * | 1994-12-21 | 1996-07-02 | At&T Global Information Solutions Company | Method for maintaining parity-data consistency in a disk array |
US5883909A (en) * | 1996-11-06 | 1999-03-16 | Lsi Logic Corporation | Method and apparatus for reducing data transfers across a memory bus of a disk array controller |
US6151641A (en) | 1997-09-30 | 2000-11-21 | Lsi Logic Corporation | DMA controller of a RAID storage controller with integrated XOR parity computation capability adapted to compute parity in parallel with the transfer of data segments |
US6446237B1 (en) | 1998-08-04 | 2002-09-03 | International Business Machines Corporation | Updating and reading data and parity blocks in a shared disk system |
WO2004046971A1 (en) * | 2002-11-14 | 2004-06-03 | Isilon Systems, Inc. | Systems and methods for restriping files in a distributed file system |
US7587569B2 (en) | 2005-12-19 | 2009-09-08 | Yahoo! Inc. | System and method for removing a storage server in a distributed column chunk data store |
US7831768B2 (en) | 2006-11-03 | 2010-11-09 | Hewlett-Packard Development Company, L.P. | Method and apparatus for writing data to a disk array |
KR20110050404A (ko) * | 2008-05-16 | 2011-05-13 | 퓨전-아이오, 인크. | 결함 있는 데이터 저장소를 검출하고 교체하는 장치, 시스템 및 프로그램 제품 |
US8086913B2 (en) * | 2008-09-11 | 2011-12-27 | Micron Technology, Inc. | Methods, apparatus, and systems to repair memory |
US9361955B2 (en) * | 2010-01-28 | 2016-06-07 | Hewlett Packard Enterprise Development Lp | Memory access methods and apparatus |
WO2013160970A1 (en) * | 2012-04-27 | 2013-10-31 | Hitachi, Ltd. | Storage system and storage control apparatus |
US9671962B2 (en) * | 2012-11-30 | 2017-06-06 | Sandisk Technologies Llc | Storage control system with data management mechanism of parity and method of operation thereof |
US9286002B1 (en) * | 2012-12-28 | 2016-03-15 | Virident Systems Inc. | Dynamic restriping in nonvolatile memory systems |
US20150103593A1 (en) * | 2013-10-14 | 2015-04-16 | Skymedi Corporation | Method of Writing Data in Non-Volatile Memory and Non-Volatile Storage Device Using the Same |
KR20150061258A (ko) | 2013-11-27 | 2015-06-04 | 한국전자통신연구원 | 분산 raid 시스템에서 패리티 청크 운용 방법과 이를 지원하는 데이터 서버 장치 |
US10180875B2 (en) * | 2016-07-08 | 2019-01-15 | Toshiba Memory Corporation | Pool-level solid state drive error correction |
US10372541B2 (en) * | 2016-10-12 | 2019-08-06 | Samsung Electronics Co., Ltd. | Storage device storing data using raid |
US10754726B2 (en) | 2018-08-21 | 2020-08-25 | Micron Technology, Inc. | Tracking error-correction parity calculations |
-
2018
- 2018-08-21 US US16/107,187 patent/US10754726B2/en active Active
-
2019
- 2019-08-20 CN CN201980062618.1A patent/CN112753021A/zh active Pending
- 2019-08-20 EP EP19851461.4A patent/EP3841472A4/en not_active Withdrawn
- 2019-08-20 WO PCT/US2019/047247 patent/WO2020041298A1/en unknown
- 2019-08-20 KR KR1020217007985A patent/KR20210034676A/ko not_active Application Discontinuation
Also Published As
Publication number | Publication date |
---|---|
EP3841472A1 (en) | 2021-06-30 |
CN112753021A (zh) | 2021-05-04 |
US10754726B2 (en) | 2020-08-25 |
EP3841472A4 (en) | 2022-05-25 |
WO2020041298A1 (en) | 2020-02-27 |
US20200065186A1 (en) | 2020-02-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20230003556A (ko) | 순차적으로 프로그래밍하는 메모리 서브시스템에서 비동기식 전력 손실 처리 | |
KR20210034676A (ko) | 에러 정정 패리티 계산 추적 | |
US20130205114A1 (en) | Object-based memory storage | |
US20200202970A1 (en) | Bad block management for memory sub-systems | |
US11775389B2 (en) | Deferred error-correction parity calculations | |
US11080132B2 (en) | Generating error checking data for error detection during modification of data in a memory sub-system | |
US11487609B2 (en) | Separating parity data from host data in a memory sub-system | |
KR20220049027A (ko) | 가비지 수집을 위한 메모리 컴포넌트에 대한 에러 제어 동작 수행 | |
CN111868691A (zh) | 基于数据流的特性产生奇偶校验数据 | |
KR20210030482A (ko) | 기입 동작과 관련된 사전 판독 동작의 조정 | |
KR20210050581A (ko) | 메모리 서브 시스템에 대한 기입 원자성 관리 | |
US20240143511A1 (en) | Dynamically sized redundant write buffer with sector-based tracking | |
US11334433B2 (en) | Storing parity data mid stripe | |
KR20220114078A (ko) | 캐시의 데이터 블록의 기록 모드 변경을 기반으로 한 미디어 관리 동작 수행 | |
US11599466B2 (en) | Sector-based tracking for a page cache | |
US10872039B2 (en) | Managing redundancy contexts in storage devices using eviction and restoration | |
US11966638B2 (en) | Dynamic rain for zoned storage systems | |
KR20240055821A (ko) | 대규모 코드워드의 rain 보호를 위한 리던던시 메타데이터 방식 | |
CN113064548A (zh) | 存储器子系统中的逻辑到物理页转译中的相干性问题解决方案 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E902 | Notification of reason for refusal | ||
E601 | Decision to refuse application |