KR101522848B1 - 비휘발성 스토리지에 대한 셀프-저널링 및 계층적 일치성 - Google Patents

비휘발성 스토리지에 대한 셀프-저널링 및 계층적 일치성 Download PDF

Info

Publication number
KR101522848B1
KR101522848B1 KR1020137029137A KR20137029137A KR101522848B1 KR 101522848 B1 KR101522848 B1 KR 101522848B1 KR 1020137029137 A KR1020137029137 A KR 1020137029137A KR 20137029137 A KR20137029137 A KR 20137029137A KR 101522848 B1 KR101522848 B1 KR 101522848B1
Authority
KR
South Korea
Prior art keywords
data
map
units
nvm
unit
Prior art date
Application number
KR1020137029137A
Other languages
English (en)
Other versions
KR20130132662A (ko
Inventor
얼 티 코헨
티모시 엘 카네파
Original Assignee
엘에스아이 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 엘에스아이 코포레이션 filed Critical 엘에스아이 코포레이션
Publication of KR20130132662A publication Critical patent/KR20130132662A/ko
Application granted granted Critical
Publication of KR101522848B1 publication Critical patent/KR101522848B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0643Management of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/62Details of cache specific to multiprocessor cache arrangements
    • G06F2212/621Coherency control relating to peripheral accessing, e.g. from DMA or I/O device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7207Details relating to flash memory management management of metadata or control data

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)
  • Computer Security & Cryptography (AREA)
  • Quality & Reliability (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

비휘발성 메모리(NVM)를 갖는 비휘발성 스토리지 시스템은 셀프-저널링 및 계층적 일치성을 제공하여, 낮은 레이턴시 복원 및 포스 유닛 액세스 핸드셰이크를 가능하게 한다. 호스트 어드레스들과 NVM에서의 어드레스들 사이의 매핑은 하나 또는 그 초과의 맵 엔트리들을 통해 유지되어, NVM에 기록된 호스트 데이터를 위치시키는 것을 가능하게 한다. NVM에 저장된 오브젝트들은 오브젝트 자체내에서만 오브젝트를 복구하기 위한 충분한 정보를 포함한다. NVM은 하나 또는 그 초과의 데이터 스트림들, 맵 스트림, 및 체크포인트 스트림으로서 관리된다. 호스트 데이터는 데이터 스트림에 기록되고, 맵 엔트리들은 맵 스트림에 기록되며, 맵 엔트리들의 체크포인트들 및 다른 데이터 구조들은 체크포인트 스트림에 기록된다. 스트림들에 내장된 시간 마커들은 복구 동안, 스트림들의 선택된 부분들이 서로 일치하지 않아 폐기된다는 결정을 가능하게 한다.

Description

비휘발성 스토리지에 대한 셀프-저널링 및 계층적 일치성{SELF-JOURNALING AND HIERARCHICAL CONSISTENCY FOR NON-VOLATILE STORAGE}
관련 출원들에 대한 상호 참조
본 출원에 대한 우선권 이익 주장은 (임의의 경우, 적절한 것으로서) 첨부하는 출원 데이터 시트(Data Sheet), 리퀘스트(Request) 또는 트랜스미탈(Transmittal)에서 이루어진다. 본 출원(instant application)의 타입에 의해 허용되는 범위로, 본 출원은 모든 목적들을 위해 하기 출원들을 인용에 의해 통합하며, 이들 모두는 발명이 구성된 시점에 본 출원으로 공동으로 소유되었다:
2011년 10월 5일 출원되고, 제 1 발명자 이름이 Earl T. COHEN이고, 명칭이 SELF-JOURNALING AND HIERARCHICAL CONSISTENCY FOR NON-VOLATILE STORAGE인, 미국 가출원 (대리인 사건 번호 SF-10-06 및 일련 번호 61/543,707).
분야: 비용, 수익성, 성능, 효율성 및 사용 활용성에서의 개선들을 제공하기 위해 비휘발성 스토리지 기술 및 제조에서의 진보들이 요구된다.
관련된 기술: 공개적으로 또는 잘 알려진 것으로 명시적으로 식별되지 않는 한, 맥락, 정의들 또는 비교 목적들에 대한 것을 비롯하여, 기술들 및 개념들에 대한 본원에서의 언급은, 그와 같은 기술들 및 개념들이 이전에 공개적으로 알려지거나 그렇지 않으면 종래 기술의 일부라는 것에 대한 승인으로서 해석되어서는 안 된다. 이로써, 특허들, 특허 출원들 및 공개공보들을 비롯하여 (만약 있다면) 본원에 인용된 모든 참조들은 구체적으로 통합되든지 아니든지 간에, 모든 목적들을 위해, 그 전체들이 인용에 의해 통합된다.
개요
본 발명은 수많은 방식들, 예를 들어, 프로세스, 제조 물건, 장치, 시스템, 물질의 조성 및 컴퓨터 판독가능한 스토리지 매체(예를 들어, 플래시 스토리지와 같은 비휘발성 스토리지를 갖는 집적 회로, 또는 디스크와 같은 광학 및/또는 자기 대용량 스토리지 디바이스에서의 매체)와 같은 컴퓨터 판독가능한 매체, 또는 프로그램 명령들이 광학 또는 전자 통신 링크들을 통해 송신되는 컴퓨터 네트워크로서 구현될 수 있다. 상세한 설명은, 위에서 식별된 분야에서의 비용, 수익성, 성능, 효율성 및 이용 활용성에서의 개선들을 가능하게 하는 본 발명의 하나 또는 그 초과의 실시예들의 설명을 제공한다. 상세한 설명은 상세한 설명의 나머지 부분의 이해를 용이하게 하기 위한 도입부를 포함한다. 도입부는 본원에 설명된 개념들에 따른 시스템들, 방법들, 제조 물건들 및 컴퓨터 판독가능한 매체 중 하나 또는 그 초과의 것의 예시적인 실시예들을 포함한다. 결론들에서 더 상세하게 논의되는 바와 같이, 본 발명은 발행된 청구항들의 범위 내에서 모든 가능한 수정들 및 변형들을 포괄한다.
도 1a는 플래시 메모리들과 같은 비휘발성 스토리지를 관리하기 위해 셀프-저널링(self-journaling) 및 계층적 일치성을 사용하는 고체 상태 디스크(SSD) 제어기를 포함하는 SSD의 실시예의 선택된 상세사항들을 예시한다.
도 1b는 도 1a의 SSD의 하나 또는 그 초과의 인스턴스들을 포함하는 시스템들의 다양한 실시예들의 선택된 상세사항들을 예시한다.
도 2는 논리 블록 어드레스(LBA)의 논리 페이지 번호(LPN) 부분을 매핑하는 실시예의 선택된 상세사항들을 예시한다.
도 3은 양자들의(in quanta of) 판독 유닛들에서 측정된 길이를 집합적으로 갖는 다양한 판독 유닛들로서 구조화된(organized) 판독 데이터를 생성하기 위해 판독 유닛 어드레스에서 비휘발성 메모리(NVM)에 액세스하는 실시예의 선택된 상세를 예시한다.
도 4a는 판독 유닛의 실시예의 선택된 상세사항들을 예시한다.
도 4b는 판독 유닛의 다른 실시예의 선택된 상세사항들을 예시한다.
도 5는 다수의 필드들을 갖는 헤더의 실시예의 선택된 상세사항들을 예시한다.
도 6은 다수의 NVM 디바이스들의 블록들, 페이지들, 및 판독 유닛들의 실시예의 선택된 상세사항들을 예시한다.
도 7은 R-블록들의 실시예의 선택된 상세사항들을 예시한다.
도 8은 제 1 레벨 맵(FLM) 및 하나 또는 그 초과의 제 2 레벨 맵(SLM) 페이지들을 갖는 2-레벨 맵을 통해 NVM에 저장된 논리 블록(LB)들에 LBA들을 매핑하는 실시예의 선택된 상세사항들을 예시한다.
도 9는 SLM 및 FLM 정보의 기록을 비롯하여, 호스트로부터 NVM으로의 데이터의 수신 및 기록의 다양한 실시예들, 및 셀프-저널링 및 타임스탬프 리코딩의 다양한 형태들의 선택된 상세사항들을 예시한다.
도 10은 NVM에 대한 스트리밍 호스트 및/또는 리사이클링된 데이터, 맵 정보, 및 체크포인트 선입선출(FIFO) 부분들의 다양한 실시예들의 선택된 상세사항들을 예시한다.
도 11은 예를 들어, 오작동 이후에 FLM 및 SLM 정보 및 다른 NVM 관리 데이터 구조들을 복원(restoring) 및/또는 재구축(rebuilding)하는 선택된 상세사항들을 예시한다.
도면들에서 참조 부호들의 리스트
Figure 112013107780113-pct00019

Figure 112013107780113-pct00002

Figure 112013107780113-pct00020

Figure 112013107780113-pct00021
본 발명의 하나 또는 그 초과의 실시예들의 상세한 설명이 본 발명의 선택된 상세사항들을 예시하는 첨부한 도면들과 함께 아래에 제공된다. 본 발명은 실시예들과 관련하여 설명된다. 여기에서의 실시예들은 단지 예시적인 것으로 이해되고, 본 발명은 명백하게, 여기에서의 실시예들 중 임의의 실시예들 또는 이들 모두로 또는 이들에 의해 제한되지 않으며, 본 발명은 다수의 대안들, 변경, 및 등가물들을 포괄한다. 설명의 단조로움을 회피하기 위해, 다양한 단어 라벨(word label)들(예컨대, 제 1, 최종, 특정한, 다양한, 추가의, 다른, 특히, 선택, 일부, 및 주목할만한)이 실시예들의 개별 세트들에 적용될 수도 있고; 여기에서 사용되는 바와 같이, 이러한 라벨들은 명백하게 품질, 또는 임의의 형태의 우선순위 또는 편견을 전달하는 것으로 뜻하는 것이 아니라, 단지 개별 세트들 사이를 편리하게 구별하기 위한 것이다. 개시된 프로세스들의 일부 동작들의 순서는 본 발명의 범위내에서 변경가능하다. 다수의 실시예들이 프로세스, 방법 및/또는 프로그램 명령 특징들에서 변동들을 설명하는 역할을 하는 경우에, 다른 실시예들은, 사전결정되거나 동적으로 결정된 기준에 따라 복수의 다수의 실시예들에 각각 대응하는 복수의 동작의 모드들 중 하나의 정적 및/또는 동적 선택을 수행한다는 것이 고려된다. 다수의 특정한 상세사항들은 본 발명의 완전한 이해를 제공하기 위해 아래의 설명에 설명된다. 상세사항들은 예시를 목적으로 제공되고 본 발명은 상세사항들 중 일부 또는 모두 없이 청구항들에 따라 실시될 수도 있다. 명확성을 목적으로, 본 발명에 관련된 기술 분야에 공지된 기술적 자료는 본 발명이 필요없이 모호해지지 않도록 상세히 설명하지 않는다.
도입부
이러한 도입부는 단지 상세한 설명의 더욱 빠른 이해를 용이하게 하기 위해 포함되고; 임의의 도입부의 단락들이 반드시 전체 주제에 대한 축약된 관점이고 철저한 또는 제한적인 설명인 것을 뜻하지 않기 때문에, 본 발명은 (만약 있다면, 명백한 예들을 포함하는) 도입부에 제공되는 개념들로 제한되지 않는다. 예를 들어, 다음의 도입부는 특정한 실시예들에 대해서만 공간 및 구조화에 의해 제한된 개요 정보를 제공한다. 청구항들이 명세서의 나머지 부분 전반에 걸쳐 궁극적으로 도시되고 논의되는 것들을 비롯하여, 다수의 다른 실시예들이 제공된다.
약어들
여기에 정의된 다양한 축약된 약어들(예를 들어, 두문자어들)의 적어도 일부가 여기에 사용된 특정한 엘리먼트들을 지칭한다.
Figure 112013107780113-pct00022
Figure 112013107780113-pct00023
NVM과 같은 플래시 메모리를 사용하여 구현된 일부 SSD들과 같은 일부 비휘발성 스토리지 시스템들에서의 제 1 도전과제는, 비휘발성 스토리지 시스템의 NVM에 저장된 데이터에 대한 데이터 무결성을 효율적으로 그리고 신뢰가능하게 제공하는 방법에 있다. 제 1 도전과제의 일례는, 기록이 호스트(예를 들어, 컴퓨팅 호스트 또는 인터페이싱 호스트)로부터 SSD에 전송될 때 그리고 기록에 관한 모든 효과들이 비휘발성 스토리지 시스템의 NVM(예를 들어, 플래시 메모리)에 세이빙될 때 사이에 (예를 들어, SSD의 제어기에 포함되는) 비휘발성 스토리지 시스템의 제어에 관한 데이터 구조들을 일관된 방식으로 유지하는 것이다. 예를 들어, 기록과 세이빙 사이에서 발생하는 오작동(예를 들어, 크래시(crash), 정전(power failure), 또는, SSD 또는 그 내부의 회로의 다양한 타입들의 고장들)은 비휘발성 스토리지 시스템이 데이터 무결성을 보장하기 위해 (예를 들어, 하나 또는 그 초과의 복구(recovery) 기술들을 통해) 프로세싱하는 것이 인에이블되는 이벤트를 나타낸다.제 1 도전과제의 다른 예는, 높은 가용성 애플리케이션들에 대한 기록들(예를 들어, FUA 비트 세트로 SATA 기록)의 효율적인 프로세싱에 있고, 여기서, 높은 가용성 기록들(때때로, 본 명세서의 다른 곳에서는 "FUA" 기록들로서 칭함)은 에러들이 없는 완료 이후에만 스토리지 시스템에 의해 완료될 때 확인응답되도록 호스트에 의해 요청된다. 높은 가용성 기록들의 레이턴시(latency)가 최소화되는 경우에 더 높은 성능이 발생한다. FUA 기록들 이외의 모두(때때로, 본 명세서의 다른 곳에서는 "넌(non)-FUA" 기록들로서 칭함)는 일부 실시예들 및/또는 사용 시나리오들에서, 넌-FUA 기록들의 일부 데이터가 오작동의 이벤트시에 NVM에 세이빙되는 것이 보장되지 않더라도, 완료된 것처럼 확인응답된다는 것에 주의한다. SAA, SATA, 파이버 채널(fibre Channel), PCIe, 그리고 호스트와 스토리지 시스템 사이의 스토리지 통신을 가능하게 하는 임의의 프로토콜과 같은 다양한 프로토콜들에서 높은 가용성 기록들 및 다른 타입들의 기록들을 지원하는 실시예들이 고려된다.
삭제
(NAND 플래시 메모리의 일부 타입들과 같은) 일부 NVM 기술들에서의 제 2 도전과제는, 플래시 메모리에서 데이터의 위치들의 신뢰가능한 동적 매핑을 통해 일부 비휘발성 스토리지 시스템들(예를 들어, 일부 SSD 구현들)에 대해 적절한 성능을 신뢰가능하게 획득하는 방법에 있다. 플래시 메모리는 소거된 이후에만 기록가능하기 때문에 동적 매핑이 수행된다. 예를 들어, SSD가 호스트로부터 특정한 LBA의 기록을 수신할 때, 새로운 페이지(또는 일부 실시예들에서는, 하나 또는 그 초과의 판독 유닛들과 같은 하나 또는 그 초과의 페이지들의 하나 또는 그 초과의 부분들)가 기록의 기록 데이터를 저장하기 위해 할당된다. 판독 유닛의 일례는 독립 하위 레벨 ECC 프로세싱과 호환가능한 플래시 메모리의 가장 작은 부분이다(예를 들어, 단일 판독 유닛이 단일 판독 유닛내의 에러들을 정정하기 위해 하위 레벨 ECC를 사용하는데 충분하다). 특정한 LBA를 새로운 페이지(또는 하나 또는 그 초과의 판독 유닛들과 같은 하나 또는 그 초과의 페이지들의 부분들)와 연관시키는 맵은, 호스트로부터 특정한 LBA로의 장래의 판독 동작들이 기록 데이터를 리턴하도록 업데이트된다.
일부 실시예들에서, 동적 매핑은 1-레벨 맵을 통해 이루어진다. 예를 들어, 동적 매핑은 LBA를 단일 테이블에 적용하는 것 및 LBA에 대응하는 데이터가 저장되는 NVM에서 위치를 획득하는 것을 포함한다. 일부 실시예들에서, 매핑은 2-레벨 맵을 통해 이루어진다. 예를 들어, 동적 매핑은, LBA를 제 1 테이블(예를 들어, FLM)에 적용하는 것, 제 2 테이블의 부분(예를 들어, SLM의 부분)에 대한 포인터를 획득하는 것, 및 그 후, LBA를 그 부분에 적용하여 LBA에 대응하는 데이터가 저장되는 NVM에서 위치를 획득하는 것을 개념적으로 포함한다.
제 2 도전과제의 일례는 예를 들어, 기록에 대한 데이터의 기록과 맵의 업데이트 사이에서 발생하는 오작동의 경우에서도 맵을 유지하고 관리하는 것이다. 예를 들어, 기록 데이터가 플래시 메모리에 세이빙되지만 맵(예를 들어, 세이빙된 기록 데이터에 대응하는 맵에 대한 하나 또는 그 초과의 업데이트들)이 오작동 이전에 플래시 메모리에 세이빙되지 않으면, 적어도 일부 환경들에서, 플래시 메모리로부터 세이빙된 기록 데이터의 적어도 일부의 복구(recovering)를 가능하게 하기 위한 기술들이 (예컨대, 전원의 리셋 및/또는 재인가 이후에) 수행된다. 일부 실시예들 및/또는 사용 시나리오들에서, FUA 기록들은, 임의의 대응하는 맵 업데이트들이 또한 비휘발성으로(non-volatilely) 세이빙되는지 여부에 관계없이, 기록 데이터가 비휘발성으로 세이빙되자 마자 확인응답되어, 일부 환경들에서는, 성능 개선을 가능하게 한다. 다른 경우에 있어서, 맵(또는 맵에 대한 하나 또는 그 초과의 업데이트들)이 플래시 메모리에 세이빙되지만 대응하는 기록 데이터의 적어도 일부가 (예를 들어, 오작동으로 인해) 플래시 메모리에 세이빙되지 않으면, 맵(또는 그것의 하나 또는 그 초과의 업데이트들)이 플래시 메모리에 세이빙된 데이터와 일치하지 않는다는 것을 인식하기 위한 기술들이 (예컨대, 전력의 리셋 및/또는 재인가 이후에) 수행된다. 예를 들어, 맵의 일부가 소거 이후에 기록되지 않거나 대응하는 기록 데이터로 기록되지 않은 플래시 메모리의 부분을 포인팅하는 것에 대한 결정이 이루어진다. 또 다른 경우에 있어서, FUA 기록이 연관된 기록 데이터 이후에 확인응답되고 대응하는 맵 정보(또는 그에 대한 임의의 업데이트들)가 플래시 메모리에 세이빙된 경우에, 일부 실시예들 및/또는 사용 시나리오들에서, 비교적 큰 성능 페널티(penality)가 발생한다(accrue). 비교적 큰 성능 페널티는, 일부 프로토콜들(예를 들어, SATA)의 제한된 큐잉(queuing), 기록 데이터 및 맵 정보를 플래시 메모리에 기록하는 프로그래밍 시간들, 및 맵 기록들을 모아 기록 증폭을 감소시키는 능력의 감소 중 하나 또는 그 초과의 것으로 인해 발생한다.
일부 실시예들 및/또는 사용 시나리오들에서, 상술한 도전과제들 중 하나 또는 그 초과의 것은, 예컨대 SSD들에서 사용되는 비휘발성 스토리지에 적용될 때, 또는 SSD 제어기들 또는 NVM(예를 들어, 플래시 메모리) 제어기들에 의해 관리될 때, 셀프-저널링 및/또는 계층적 일치성에 의해 처리된다. 예를 들어, 셀프-저널링과 계층적 일치성의 조합은 오작동일 존재할 때 맵 정보를 전체적으로 또는 부분적으로 재구축하는 것을 가능하게 한다. 일부 환경들에서, 셀프-저널링 및 계층적 일치성 기술들을 사용한 맵 정보의 재구축은 이 기술들을 사용하지 않고 재구축하는 것보다 더 효율적이다. 다른 예에 있어서, 셀프-저널링과 계층적 일치성의 조합은 비교적 낮은 레이턴시 FUA 핸드셰이크(handshake)를 가능하게 한다.
일부 실시예들 및/또는 사용 시나리오들에서, 셀프-저널링 및/또는 계층적 일치성은 NVM이 관리되는 유닛들(예를 들어, 본 명세서의 다른 곳에서 설명되는 R-블록들), NVM 관리 유닛들(예를 들어, 대역들)이 기록되는 방법, 및 관리 유닛들의 기록이 (예를 들어, 스트림으로서) 관리되는 방법과 개념적으로 관련된다. R-블록의 일례로는 NVM 블록들의 집합이 있다(예를 들어, SSD에서 각 NVM 다이로부터의 하나의 블록, 블록들 내의 NVM 위치들은 스트라이프 방식으로 기록된다). 대역의 일례로는, 정보가 (예를 들어, 특정한 시간 순서로) 순차적으로(serially) 기록되고, 옵션으로는, 유사한 특성들 및/또는 특징들을 갖는 정보로 파퓰레이팅(populate)되는 R-블록들의 집합이 있다. 스트림의 일례는, 대역내에서, 정보가 NVM에 기록을 위해 제공되는 것과 동일한 순서로, 정보가 NVM에 기록되도록 관리되는 대역이다(예를 들어, 조기의(earlier) 시간에 제공된 정보는 나중(later) 시간에 제공된 정보에 앞서 기록된다). 개념적으로, 스트림으로서 관리되는 대역에 기록되는 정보는 시간 순서로 구조화되는 FIFO형 방식으로 NVM에 스트리밍된다. 특정한 NVM 다이에 대한 기록의 성공이 정전과 같은 특정한 이벤트들의 경우에 예측불가능하기 때문에, 일부 환경들에서, 스트림의 종단에 기록된 데이터는 "홀(hole)"들을 갖는다. 예를 들어, (정전 이전에) 스트림에서의 최종 기록 다이는 기록하는데 성공하지만, 스트림의 조기의 데이터 부분을 갖는 이전의 다이는, 이전의 다이의 위치에서 홀(예를 들어, 무효, 정정불가능, 및/또는 데이터 미싱)을 생성하여 기록하는데 성공하지 못한다.
일부 실시예들은 복수의 스트림들로 동작한다. 예를 들어, 스트림들은 호스트 데이터(예를 들어, 호스트로부터의 기록 커맨드와 연관된 기록 데이터) 및 리사이클링된 데이터(예를 들어, NVM의 더 큰 인접 부분들을 이용가능하게 하기 위해 NVM의 일 부분으로부터 다른 부분으로 이동된 데이터)에 대한 하나 또는 그 초과의 데이터 스트림들을 포함한다. 예를 들어, 스트림들은 (예컨대, 특정한 호스트 기록 데이터가 NVM에서 어디에 저장되는지를 결정하기 위해 사용되는) 정보를 매핑하기 위한 하나 또는 그 초과의 맵 스트림들을 포함한다. 예를 들어, 스트림들은 (매핑 정보 및 사용 통계와 같은) NVM 데이터 스토리지를 관리하기 위해 사용된 데이터 구조들의 전체 또는 부분 이미지들을 저장하기 위한 하나 또는 그 초과의 체크포인트 스트림들을 포함한다.
셀프-저널링은 특정한 오브젝트에서 이용가능한 정보만을 사용하여 특정한 오브젝트와 일치하는 정보의 복구를 가능하게 한다. 예를 들어, 호스트 데이터는 호스트 데이터가 어느 LBA들에 대응하는지를 식별하는 정보와 함께 NVM에 저장된다. 다른 예에 있어서, 리사이클링된 데이터는 리사이클링된 데이터가 어느 LBA들에 대응하는지를 식별하는 정보와 함께 NVM에 저장된다. 일부 실시예들 및/또는 사용 시나리오들에서, 모든 데이터가 기록되는 순서를 아는 것과 조합하여, 셀프-저널링은 맵 정보 및 다른 데이터 구조들의 복구를, 느리기는 하지만 완료하는 것을 가능하게 한다. 예를 들어, SSD의 모든 (셀프-저널링된) 데이터를 판독하는 것은 LBA들을 NVM에서 물리적 위치들과 연관시키는 맵을 재구축하는 것을 가능하게 한다.
계층적 일치성은 데이터 구조의 어느 버전이 다른 데이터 구조의 어느 버전에 의해 관리되는지 결정할 수 있게 하고, 버전들은 예를 들어, 개별적으로 기록되고 그리고/또는 체크포인팅된 정보로 인한 것이다. 예를 들어, 데이터 스트림은 맵 스트림에 대해 우선권을 갖고, 결국, 맵 스트림은 체크포인트 스트림에 대해 우선권(precedence)을 갖는다. 오작동은, 서로에 대하여 순서없이(out of order) NVM에 저장된 스트림들로부터의 정보를 발생시킨다. 스트림들에 정보와 함께 저장된 시간 마커(예를 들어, 에폭 헤더들 및/또는 타임스탬프들)는, NVM에 저장된 스트림 정보의 상대적 순서화의 결정을 가능하게 한다. 일부 실시예들 및/또는 사용 시나리오들에서, 계층적 일치성과 조합된 셀프-저널링은 맵 정보 및 다른 데이터 구조들의 완료 및 빠른 복구를 가능하게 한다. 예를 들어, LBA들을 NVM에서의 물리적 위치들과 연관시키는 맵의 복구는, 맵 스트림으로부터 맵의 버전을 판독하고, 맵의 버전에 대해 우선권을 갖는 데이터 스트림의 부분으로부터 단독으로 획득된 업데이트들로 맵을 업데이트함으로써, 빠르게 이루어진다.
일부 실시예들에서, 계층적 일치성은 롤링(rolling) 체크포인트들의 사용을 가능하게 한다. 맵과 같은 데이터 구조의 롤링 체크포인트들은 개별의 각각의 시간들에서 데이터 구조의 부분들의 상태를 세이빙하여, 전체 데이터 구조는 데이터 구조에 대한 하나 보다 많은 수의 롤링 체크포인트들이 세이빙된 이후에 세이빙된다. 롤링 체크포인트들의 세이빙 사이에 동작이 계속되기 때문에, 롤링 체크포인트들 각각은, 데이터 구조의 각각의 부분이 롤링 체크포인트에 의해 세이빙되는 각각의 시간에 데이터 구조의 각각의 부분의 스냅샷(snapshot)이 된다. 그러나, 반드시, 세이빙된 전체 데이터 구조의 단일 시간 일치 카피가 있는 것은 아니다. 일부 실시예들 및/또는 사용 시나리오들에서, 타임스탬프들과 조합된 계층적 일치성은 롤링 체크포인트들로부터의 전체 데이터 구조의 단일 시간 일치 카피 및 데이터 구조를 포함하는 스트림에 대해 계층적 우선권을 갖는 다른 스트림들에서의 정보의 복구를 가능하게 한다. 추가의 실시예들 및/또는 사용 시나리오들에서, 롤링 체크포인트들의 사용은 예를 들어, 레이턴시에 영향을 미치고, 체크포인팅으로 인한 정상 프로세싱의 중단 및/또는 지연의 지속기간을 최소화함으로써 체크포인팅이 시스템 거동에 대해 덜 파괴적이게 할 수 있다.
셀프-저널링 및 계층적 일치성을 포함하는 맥락에서의 복구 기술들은 NVM에 (롤링) 체크포인트들을 저장하는 것, 및 오작동에 응답하여, LBA 대 NVM 위치 대응성을 트랙킹하는 매핑 정보를 재구축하기 위해 저장된 (롤링) 체크포인트들을 프로세싱하는 것을 포함한다.
다양한 실시예들에서, (예를 들어, 호스트 기록 데이터 및 리사이클링된 데이터를 갖는) 데이터 스트림들의 데이터 페이지들, (예를 들어, SLM 엔트리들 또는 그에 대한 업데이트들을 갖는) 맵 스트림들의 맵 페이지들 및 NVM에 저장된 (예를 들어, FLM 엔트리들 또는 그에 대한 업데이트들을 갖는) 체크포인트 스트림들의 체크포인트 페이지들 중 하나 또는 그 초과가 셀프-저널링된다. 예를 들어, 만약 존재하면, 페이지들은 개별 데이터 구조들의 코히어런시를 보장하는데 필요한 정보를 포함한다. 그러나, 이것은 예를 들어, 시간 마커들에 의해 공급되는 시간 개념을 요구하는 데이터 구조들 사이의 일치성을 암시하지 않는다. (예를 들어, 데이터 페이지들을 포함하는) 데이터 대역들 및 (예를 들어, 맵 엔트리들 및/또는 업데이트들을 포함하는) 맵 대역은 스트림들로서 관리되고, 시간 순서로 (적어도 스트림내에서) 구조화된다.
일부 실시예들 및/또는 사용 시나리오들에서, NVM에 저장될 때 (LB와 같은) 각 호스트 페이지는 호스트 페이지의 (LBA와 같은) 호스트 페이지 어드레스를 포함하는 헤더와 연관된다. 따라서, 호스트 페이지가 NVM에 기록되면, (대응하는 헤더로부터의) 연관된 호스트 페이지 어드레스는 기록된 호스트 페이지가 어느 호스트 페이지인지 나타낸다. 호스트 페이지의 기록에 대응하는 SLM 엔트리가 (예를 들어, 오작동 이전에) NVM에 리코딩되지 않으면, 호스트 페이지 자체는 SLM 엔트리를 재구성하는데 충분한 정보(호스트 페이지 어드레스)를 포함한다. 일부 컨텍스트들에서, 데이터의 컨테이너로부터 데이터를 재구성하는 능력을 참조 무결성(referential integrity)이라 칭한다.
일부 실시예들에서, 계층적 일치성은 개별적으로 기록되고 그리고/또는 체크포인팅되는 다수의 데이터 구조들 중에서, 데이터 구조들 중 가장 높은 우선순위 데이터 구조(또는 그의 부분)가 식별가능하도록 데이터 구조들의 순서화를 정의한다. 예를 들어, 데이터 대역, 맵 대역, 및 체크포인트 FIFO가 (예를 들어, 모두 시간 순서에서) 모두 일치할 때, 데이터 대역은 맵 대역에 대해 우선권을 취하고 맵 대역은 체크포인트 FIFO에 대해 우선권을 취한다.
다양한 실시예들에 따르면, 맵은 1-레벨 맵; 2-레벨 맵; 멀티-레벨 맵; 직접 맵; 연관 맵; 및 호스트 프로토콜의 LBA들을 NVM에서의 물리적 스토리지 어드레스들과 연관시키는 임의의 다른 수단 중 하나 또는 그 초과의 것이다. 예를 들어, 일부 실시예들에서, 2-레벨 맵은 복수의 제 2 레벨 맵 페이지들 중 하나의 NVM에서의 각각의 어드레스와 LBA의 제 1 함수를 연관시키는 제 1 레벨 맵을 포함하고, 제 2 레벨 맵 페이지들 각각은 LBA에 대응하는 데이터의 NVM에서의 각각의 어드레스와 LBA의 제 2 함수를 연관시킨다. 추가의 실시예들에서, LBA의 제 1 함수 및 LBA의 제 2 함수의 예로는, 제 2 레벨 맵 페이지들 각각에 포함된 고정된 수의 엔트리들로 나눌 때 획득된 몫과 나머지이다. 복수의 제 2 레벨 맵 페이지들을 총체적으로 제 2 레벨 맵으로 칭한다. 여기서, 맵의 하나 또는 그 초과의 엔트리들에 대한 참조들은 1-레벨 맵, 2-레벨 맵의 제 1 레벨, 2-레벨 맵의 제 2 레벨, 멀티-레벨 맵의 임의의 레벨, 또는 엔트리들을 갖는 임의의 다른 타입의 맵을 포함하는 임의의 타입의 맵의 하나 또는 그 초과의 엔트리들을 지칭한다.
삭제
다양한 실시예들에 따르면, 제 2 레벨 맵(또는 멀티-레벨 맵의 하위 레벨)의 맵 페이지들 각각은, 맵 페이지들 중 다른 맵 페이지들과 동일한 수의 엔트리들; 맵 페이지들의 적어도 일부 다른 맵 페이지들과 상이한 수의 엔트리들; 맵 페이지들 중 다른 맵 페이지들과 동일한 입도(granularity)의 엔트리들; 맵 페이지들 중 다른 맵 페이지들과 상이한 입도의 엔트리들; 모두 동일한 입도의 엔트리들;, 다수의 입도들인 엔트리들; 맵 페이지의 콘텐츠들의 포맷 및/또는 레이아웃을 특정하는 각각의 헤더, 중 하나 또는 그 초과의 것을 포함하며, 그리고 맵 페이지의 엔트리들을 표현하기 위해 임의의 다른 포맷, 레이아웃, 또는 구조(organization)를 갖는다. 예를 들어, 제 1의 제 2 레벨 맵 페이지는 엔트리 당 4KB의 입도의 사양을 갖고, 제 2의 제 2 레벨 맵 페이지는 엔트리 당 8KB의 입도의 사양을 갖고 제 1의 제 2 레벨 맵 페이지의 1/2만큼만 많은 엔트리들을 갖는다.
추가의 실시예들에서, 상위(higher) 레벨 맵의 엔트리들은 대응하는 하위(lower) 레벨 맵 페이지들의 포맷 및/또는 레이아웃 정보를 포함한다. 예를 들어, 제 1 레벨 맵에서 엔트리들 각각은 연관된 제 2 레벨 맵 페이지에서의 엔트리들에 대한 입도 사양을 포함한다.
일부 실시예들에서, 맵은 복수의 엔트리들을 포함하고, 엔트리들 각각은 하나 또는 그 초과의 LBA들을 LBA들의 데이터가 저장되는 NVM에서의 각각의 위치를 선택적으로 포함하는 정보와 연관된다. 예를 들어, LBA들은 512B 섹터들을 특정하고, 맵에서의 각 엔트리는 LBA들의 정렬된 8-섹터(4KB) 영역과 연관된다.
다양한 실시예들에 따르면, 맵의 엔트리들의 정보는, NVM에서의 위치; NVM에서의 판독 유닛의 어드레스; NVM에 저장된 연관 LBA들의 데이터를 획득하기 위해 판독할 판독 유닛들의 수; NVM에 저장된 연관 LBA들의 데이터의 사이즈 ―상기 사이즈는 옵션으로 및/또는 선택적으로 1 바이트 보다 더 큰 입도를 가짐―; 예를 들어, 트리밍된 연관 LBA들의 데이터로 인해 연관 LBS들의 데이터가 NVM에 존재하지 않는다는 표시; 연관 LBA들의 데이터에 적용된 임의의 비표준 변경자(modifier)들을 비롯하여, 연관 LBA들의 데이터의 특성; 및 연관 LBA들의 데이터의 임의의 다른 메타-데이터, 특성, 또는 본질 중 하나 또는 그 초과의 것을 포함한다.
일부 실시예들에서, NVM에서의 어드레스들은 어드레스들 중 하나를 표현하는데 요구되는 비트들을 수를 감소시키기 위해 영역들로 그룹화된다. 예를 들어, I/O 디바이스의 LBA들이 64개 영역들로 분할되고, NVM이 LBA 영역들 각각에 대해 하나씩 64개 영역들로 분할되면, 특정한 LBA와 연관된 맵 엔트리는 NVM에서의 영역들 중 하나가 특정한 LBA의 영역에 의해 결정될 수 있기 때문에 6개 적은 어드레스 비트들을 요구한다. 다양한 실시예들에 따르면, LBA들의 영역들과 NVM의 영역들 사이의 연관은, 균등성(equality); 1 대 1 수치 함수(numeric function)와 같은 직접 연관; 테이블 검색; 동적 매핑; 및 2개의 세트들의 수들을 연관시키는 임의의 다른 방법 중 하나 또는 그 초과의 것에 의해 이루어진다.
다양한 실시예들에서, NVM에서의 위치는 복수의 판독 유닛들 중 하나의 어드레스, 및 판독 유닛들에서의 길이 및/또는 스팬(span)을 포함한다. 길이는 NVM에 저장된 복수의 데이터 아이템들 중 특정한 데이터 아이템의 사이즈이고, 특정한 데이터 아이템이 길이를 포함하는 맵의 엔트리와 연관된다. 다양한 실시예들에 따르면, 길이는, 1 바이트; 1 보다 큰 바이트; 1 판독 유닛; 판독 유닛의 특정한 프랙션(fraction); 데이터 아이템들 중 하나의 최대 허용된 압축률에 따른 입도; 및 스토리지 사용을 트랙킹하기 위해 사용된 임의의 다른 입도 중 하나 또는 그 초과의 입도를 갖는다. 스팬은 특정한 데이터 아이템의 각각의 부분을 저장하는, 판독 유닛들의 수, 예컨대 정수의 판독 유닛들이다. 추가의 실시예들 및/또는 사용 시나리오들에서, 판독 유닛들의 스팬에서의 제 1 판독 유닛 및/또는 판독 유닛들의 스팬에서의 최종 판독 유닛들은 옵션으로 및/또는 선택적으로, 데이터 아이템들 중 다수의 데이터 아이템들 모두 또는 일부를 저장한다. 일부 실시예들 및/또는 사용 시나리오들에서, 길이 및/또는 스팬은, 예컨대 스팬으로부터의 오프셋으로서(때때로, 인코딩되는 스팬 및/또는 길이의 맥락에서 사이즈로 칭하는) 길이를 저장함으로써, 저장되고 인코딩된다. 일부 실시예들 및/또는 사용 시나리오들에서, 길이 및/또는 스팬의 미사용 인코딩들은 비표준 변경자의 표시, 또는 연관된 데이터 아이템이 NVM에 존재하는지에 관한 표시와 같은 추가 정보를 인코딩한다.
어드레스 및 길이로서 NVM에서의 위치의 인코딩은 NVM에 저장된 데이터가 사이즈면에서 변하는 것을 가능하게 한다. 예를 들어, 제 1 4KB 영역이 400B 사이즈로 압축되고, 단일 판독 유닛에 전체적으로 저장되고, 1 판독 유닛의 길이를 갖는 반면에, 제 2 4KB 영역은 압축불가이고, 1 보다 큰 판독 유닛을 스팬하며, 1 보다 큰 판독 유닛의 길이를 갖는다. 추가의 실시예들에서, LBA들의 영역과 연관된 스토리지의 판독 유닛들에서 길이 및/또는 스팬을 갖는 것은, LBA들의 영역의 데이터를 검색하기 위해 NVM의 요구된 부분을 단독으로 판독하는 것을 가능하게 한다.
일부 실시예들에서, 맵의 엔트리들 각각은 엔트리와 연관된 LBA들의 영역의 특성들을 특정하는, 때때로 메타-데이터로 칭하는 정보를 포함한다. 추가의 실시예들에서, 메타-데이터의 적어도 일부는 예를 들어, 영역의 복수의 LBA들 각각에 대해 별개의 메타-데이터 사양들을 가짐으로써, 영역의 입도 보다 더 미세한 입도로 이루어진다. 다양한 실시예들에 따르면, 메타-데이터는 영역과 연관된 NVM에서의 데이터의 기록, 데이터에 대한 액세스, 데이터의 판독, 및/또는 데이터의 리사이클링을 변경 그리고/또는 제어하기 위해 적용가능하고 그리고/또는 사용될 하나 또는 그 초과의 비표준 변경자들을 포함한다.
예시적인 실시예들
상세한 설명에 대한 도입부를 끝내며, 후속하는 것은 본원에 설명된 개념들에 따른 다양한 실시예 타입들의 추가적인 설명을 제공하면서 "EC들"(예시적인 조합들)로서 명시적으로 열거된 적어도 일부를 포함하는 예시적인 실시예들의 집합이다; 이들 예들은 상호 배타적이거나, 완벽한 것(exhaustive)이거나 제한적인 것을 뜻하지 않는다; 그리고 본 발명은 이들 예시적인 실시예들로 제한되는 것이 아니라, 오히려 발행된 청구항들의 범위 내의 모든 가능한 수정들 및 변형들 그리고 이들의 등가물들을 포괄한다.
EC1) 방법으로서,
비휘발성 메모리(NVM)에 일련의 데이터 유닛들을 제 1 순서로 배열하는 단계 ―데이터 유닛들 각각은 복수의 타임스탬프들 중 각각의 하나와 연관됨―; 및
NVM에 일련의 데이터 맵 유닛들을 제 2 순서로 배열하는 단계―데이터 맵 유닛들 각각은 타임스탬프들 중 각각의 하나와 연관됨―를 포함하고,
데이터 맵 유닛들 각각은 데이터 유닛들 중 대응하는 데이터 유닛의 NVM에서의 위치를 포함하고,
데이터 유닛들 각각과 연관된 각각의 타임스탬프는 대응하는 데이터 맵 유닛과 연관된 각각의 타임스탬프에 있거나 그 이전에 있다.
EC2) EC1의 방법에 있어서,
데이터 유닛들 각각은 호스트로부터 각각의 논리 블록 어드레스(LBA)로의 각각의 데이터 기록에 대응하고,
데이터 유닛들 중 이전 데이터 유닛 및 후속 데이터 유닛이 각각의 LBA들 중 동일한 LBA에 대한 데이터 기록들의 기록들에 대응하고,
이전의 데이터 유닛은 데이터 맵 유닛들 중 연관된 데이터 맵 유닛을 갖지 않는다.
EC3) EC1의 방법에 있어서, 정전에 후속하여,
데이터 유닛들 중 최근의(latest) 유효하고 인접한 데이터 유닛을 결정하는 단계;
데이터 맵 유닛들 중 최근의 유효하고 인접한 데이터 맵 유닛을 결정하는 단계 ―데이터 맵 유닛들 중 최근의 유효하고 인접한 데이터 맵 유닛과 연관된 각각의 타임스탬프는 데이터 유닛들 중 최근의 유효하고 인접한 데이터 유닛과 연관된 각각의 타임스탬프에 있거나 그 이전에 있음―; 및
데이터 맵 유닛들 중 최근의 유효하고 인접한 데이터 맵 유닛까지의 데이터 맵 유닛들의 데이터 맵 유닛들만을 복원하는 단계를 더 포함하고,
이에 의해, 데이터 유닛들 중 최근의 유효하고 인접한 데이터 유닛과 연관된 각각의 타임스탬프 이후의 임의의 각각의 타임스탬프들과 연관된 임의의 데이터 맵 유닛들은 복구에서 무시된다.
EC4) EC1의 방법에 있어서, 데이터 유닛들은 데이터 스토리지 유닛들이다.
EC5) 방법으로서,
비휘발성 메모리(NVM)에 일련의 데이터 스토리지 유닛들을 기록하는 단계 ―데이터 스토리지 유닛들 각각은 복수의 타임스탬프들 중 각각의 하나와 연관됨―; 및
NVM에 일련의 데이터 맵 유닛들을 기록하는 단계 ― 데이터 맵 유닛들 각각은 타임스탬프들 중 각각의 하나와 연관됨―를 포함하며,
데이터 맵 유닛들 각각은 데이터 스토리지 유닛들 중 대응하는 데이터 스토리지 유닛의 NVM에서의 위치를 포함하고,
데이터 스토리지 유닛들 각각과 연관된 각각의 타임스탬프는 대응하는 데이터 맵 유닛과 연관된 각각의 타임스탬프가 나타내는 상대적 에이지(relative age)와 동일하거나 그보다 오래된 상대적 에이지를 나타낸다.
EC6) EC5의 방법에 있어서, 데이터 스토리지 유닛들의 기록은 제 1 순서에 따르고 데이터 맵 유닛들의 기록은 제 2 순서에 따른다.
EC7) EC5의 방법에 있어서, 데이터 스토리지 유닛들은 NVM에서 제 1 순서에 따라 배열되고 데이터 맵 유닛들은 NVM에서 제 2 순서에 따라 배열된다.
EC8) EC1, EC6, 또는 EC7의 방법에 있어서, 제 1 순서는 제 2 순서와 상이하다.
EC9) EC5의 방법에 있어서,
데이터 스토리지 유닛들 중 제 1 데이터 스토리지 유닛은 호스트로부터 특정한 논리 블록 어드레스(LBA)로의 제 1 데이터 기록에 대응하고,
데이터 스토리지 유닛들 중 제 2 데이터 스토리지 유닛은 호스트로부터 특정한 LBA로의 제 2 데이터 기록에 대응하고,
제 1 데이터 기록은, 시간 순서에 있어, 제 2 데이터 기록에 선행하며,
데이터 맵 유닛들은 제 1 데이터 스토리지 유닛들에 대응하지 않는다.
EC10) EC6의 방법에 있어서, 이벤트에 후속하여,
데이터 스토리지 유닛들 중 최근의 유효하고 인접한 데이터 스토리지 유닛을 제 1 순서에 따라 결정하는 단계;
데이터 스토리지 유닛들 중 최근의 유효하고 인접한 데이터 스토리지 유닛과 연관된 각각의 타임스탬프가 표시하는 상대적 에이지와 동일하거나 그보다 오래된 상대적 에이지를 나타내는 각각의 타임스탬프들 중 하나와 연관된 데이터 맵 유닛들 중 최근의 유효하고 인접한 데이터 맵 유닛을 제 2 순서에 따라 결정하는 단계; 및
데이터 맵 유닛들 중 최근의 유효하고 인접한 데이터 맵 유닛까지의 데이터 맵 유닛들의 데이터 맵 유닛들만을, 제 1 순서 및 제 2 순서에 따라, 복구하는 단계를 더 포함한다.
EC11) EC6의 방법에 있어서,
데이터 스토리지 유닛들 중 최근의 유효하고 인접한 데이터 스토리지 유닛인 데이터 스토리지 유닛들 중 제 1 데이터 스토리지 유닛을 제 1 순서에 따라 결정하는 단계;
데이터 스토리지 유닛들 중 최근의 유효하고 인접한 데이터 스토리지 유닛과 연관된 각각의 타임스탬프가 표시하는 상대적 에이지와 동일하거나 그보다 오래된 상대적 에이지를 나타내는 각각의 타임스탬프들 중 하나와 연관된 데이터 맵 유닛들 중 최근의 유효하고 인접한 데이터 맵 유닛을 제 2 순서에 따라 결정하는 단계;
데이터 맵 유닛들 중 최근의 유효하고 인접한 데이터 맵 유닛과 연관된 각각의 타임스탬프가 표시하는 상대적 에이지와 동일하거나 그에 선행하는 결정된 양 이전인 상대적 에이지를 나타내는 각각의 타임스탬프들 중 하나와 연관된 데이터 스토리지 유닛들 중 최근의 데이터 스토리지 유닛인 데이터 스토리지 유닛들 중 제 2 데이터 스토리지 유닛을 제 1 순서에 따라 결정하는 단계; 및
데이터 스토리지 유닛들 중 제 1 데이터 스토리지 유닛을 통해 데이터 스토리지 유닛들 중 제 2 데이터 스토리지 유닛으로부터의 데이터 유닛들의 데이터 유닛들을 단독으로 사용하여 데이터 맵 유닛들 중 최근의 유효하고 인접한 데이터 맵 유닛까지의 데이터 맵 유닛들의 데이터 맵 유닛들을, 제 1 순서 및 제 2 순서에 따라, 복구하는 단계를 더 포함한다.
EC12) EC11의 방법에 있어서,
NVM에 이전에 기록되지 않은 데이터 맵 유닛들 중 각 변경된 데이터 맵 유닛에 대해, 데이터 스토리지 유닛들 중 특정한 데이터 스토리지 유닛과 연관된 각각의 타임스탬프와 동일한 가장 오래된 업데이트와 연관된 타임스탬프들 중 각각의 타임스탬프를 식별하는 단계 ―변경된 데이터 맵 유닛은 특정한 데이터 스토리지 유닛의 NVM에서의 위치를 포함함―; 및
변경된 데이터 맵 유닛의 가장 오래된 업데이트와 연관된 각각의 타임스탬프에 후속하여 결정된 양 보다 많은 각각의 타임스탬프들 중 하나와 연관된 데이터 스토리지 유닛들의 하나의 기록시에 또는 그 이전에, NVM에 이전에 기록되지 않은 변경된 데이터 맵 유닛들 각각을 NVM에 기록하는 단계를 더 포함한다.
EC13) EC10의 방법에 있어서, 복구하는 것에 관하여, 데이터 스토리지 유닛들 중 최근의 유효하고 인접한 데이터 스토리지 유닛의 각각의 타임스탬프가 나타내는 상대적 에이지보다 덜 오래된(younger) 상대적 에이지를 나타내는 각각의 타임스탬프를 갖는 임의의 데이터 맵 유닛들을 무시하는 단계를 더 포함한다.
EC14) EC10의 방법에 있어서, 이벤트는 오작동을 포함한다.
EC15) EC14의 방법에 있어서, 오작동은,
정전,
크래시, 및
회로 고장 중 하나 또는 그 초과의 것을 포함한다.
EC16) EC4 또는 EC5의 방법에 있어서, 데이터 맵 유닛들 중 적어도 2개는 동일한 위치를 포함하고, 동일한 위치는 데이터 유닛들 중 적어도 2개의 각각의 데이터 유닛들의 위치이다.
EC17) EC4 또는 EC5의 방법에 있어서, 데이터 스토리지 유닛과 연관된 각각의 타임스탬프를 데이터 스토리지 유닛들 중 적어도 일부로 저장하는 단계, 및 데이터 맵 유닛과 연관된 각각의 타임스탬프를 데이터 맵 유닛들 중 적어도 일부에 저장하는 단계를 더 포함한다.
EC18) EC4 또는 EC5의 방법에 있어서, 데이터 스토리지 유닛들의 각각의 타임스탬프들의 충분한 타임스탬프들이 데이터 스토리지 유닛들로 저장되어서, 데이터 스토리지 유닛들 각각과 각각의 데이터 스토리지 유닛의 각각의 타임스탬프 사이의 연관이 NVM을 판독함으로써 결정가능하다.
EC19) EC4 또는 EC5에 있어서, 데이터 스토리지 유닛들의 각각의 타임스탬프들의 적어도 일부 각각은 연관된 데이터 스토리지 유닛으로 NVM에 저장된다.
EC20) EC4 또는 EC5의 방법에 있어서, 데이터 맵 유닛들의 각각의 타임스탬프들의 충분한 타임스탬프들이 데이터 맵 유닛들로 저장되어서, 데이터 맵 유닛들 각각과 각각의 데이터 맵 유닛의 각각의 타임스탬프 사이의 연관이 NVM을 판독함으로써 결정가능하다.
EC21) EC4 또는 EC5의 방법에 있어서, 데이터 맵 유닛들의 각각의 타임스탬프들의 적어도 일부 각각은 연관된 데이터 맵 유닛으로 NVM에 저장된다.
EC22) EC4 또는 EC5의 방법에 있어서, 데이터 스토리지 유닛들 중 특정한 데이터 스토리지 유닛은 특정한 데이터 스토리지 유닛과 연관된 각각의 타임스탬프로 NVM에 저장되고, 데이터 맵 유닛들 중 특정한 데이터 맵 유닛은 특정한 데이터 맵 유닛과 연관된 각각의 타임스탬프로 NVM에 저장된다.
EC23) 방법으로서,
스토리지 스트림에 따라 비휘발성 메모리(NVM)에 복수의 스토리지 유닛들을 기록하는 단계 ―스토리지 유닛들 각각은 데이터 부분 및 대응하는 타임스탬프 부분을 포함함―; 및
맵 스트림에 따라 NVM에 복수의 맵 유닛들을 기록하는 단계 ―맵 유닛들 각각은 엔트리 부분 및 대응하는 타임스탬프 부분을 포함함―를 포함하고,
엔트리 부분들 중 적어도 일부 각각은 데이터 부분들 중 적어도 대응하는 데이터 부분을 특정함으로써 각각의 논리 블록(LB)들이 NVM에서 어디에 기록되는지 결정할 수 있게 하고,
타임스탬프 부분들에 의해 시간적 순서가 표시되고, 스토리지 유닛 타임스탬프 부분들은 서로에 관하여 타임스탬프 순서에 따라 단조적으로 증가하며, 맵 유닛 타임스탬프 부분들은 서로에 관하여 타임스탬프 순서에 따라 단조적으로 증가하고,
NVM에 기록된 맵 유닛들 중 적어도 하나가, 시간적 순서에 따라, 특정한 시점에서 NVM에 기록된 최근의 스토리지 유닛 타임스탬프 부분들보다, 시간적 순서에 따라 나중인 타임스탬프 부분을 가질 때 적어도 하나의 특정한 시점이 존재한다.
EC24) EC23의 방법에 있어서, 스토리지 유닛들의 기록은 스토리지 유닛 타임스탬프 부분들에 의해 표시될 때의 시간적 순서에 대응하는 시간 순서로 스토리지 유닛들을 기록하고, 맵 유닛들의 기록은 맵 유닛 타임스탬프 부분들에 의해 표시될 때의 시간적 순서에 대응하는 시간 순서로 맵 유닛들을 기록한다.
EC25) EC23의 방법에 있어서, 체크포인트 스트림에 따라 NVM에 하나 또는 그 초과의 체크포인트 유닛들을 기록하는 단계를 더 포함하고, 체크포인트 유닛들 각각은 맵 부분 및 대응하는 타임스탬프 부분을 포함하고, 체크포인트 타임스탬프 부분들은 서로에 관하여 타임스탬프 순서에 따라 단조적으로 증가한다.
EC26) EC25의 방법에 있어서, 체크포인트 유닛들의 기록은 체크포인트 타임스탬프 부분들에 의해 표시될 때의 시간적 순서에 대응하는 시간 순서로 체크포인트 유닛들을 기록한다.
EC27) EC25에 있어서, 미리결정된 수의 체크포인트 유닛들의 인접한 그룹은 엔트리 부분들이 따르는 적어도 맵의 전체 체크포인트를 포함한다.
EC28) EC27의 방법에 있어서, 맵 부분들 및/또는 체크포인트 유닛 타임스탬프 부분들 중 하나 또는 그 초과의 것의 하나 또는 그 초과의 부분들에 적어도 부분적으로 기초하여 맵을 복원하는 단계를 더 포함한다.
EC29) EC28의 방법에 있어서, 복원하는 단계는 엔트리 부분들 및/또는 맵 유닛 타임스탬프 부분들 중 하나 또는 그 초과의 것의 하나 또는 그 초과의 부분들에 적어도 부분적으로 더 기초한다.
EC30) EC29의 방법에 있어서, 복원하는 단계는 데이터 부분들 및/또는 스토리지 유닛 타임스탬프 부분들 중 하나 또는 그 초과의 것의 하나 또는 그 초과의 부분들에 적어도 부분적으로 더 기초한다.
EC31) EC30의 방법에 있어서, 데이터 부분들 각각은 각각의 하나 또는 그 초과의 데이터 유닛들 및 각각의 대응하는 하나 또는 그 초과의 헤더들을 포함하고, 헤더들 각각은 데이터 유닛들 중 각각의 대응하는 데이터 유닛과 LB들 중 하나 사이의 각각의 매핑을 식별하고, 매핑들은 LB들의 각각의 LB들이 데이터 유닛들의 각각의 데이터 유닛들로서 NVM에 기록되는 위치를 결정할 수 있게 하고; 그리고 복원하는 단계는 NVM에 기록된 스토리지 유닛들에 포함되는 각각의 헤더들 중 하나 또는 그 초과의 것에 적어도 부분적으로 더 기초한다.
EC32) EC31의 방법에 있어서, 엔트리 부분들 중 특정한 엔트리 부분이 각각의 LB의 각각의 데이터 부분을 결정하고, 각각의 데이터 부분은 헤더들 중 특정한 헤더를 포함하고, 특정한 헤더는 데이터 유닛들 중 특정한 데이터 유닛과 특정한 엔트리 부분의 각각의 LB 사이의 각각의 매핑을 식별한다.
EC33) EC27의 방법에 있어서, 맵은 1-레벨 맵이다.
EC34) EC33의 방법에 있어서, 맵의 적어도 일부를 캐싱(caching) 및/또는 버퍼링하는 단계를 더 포함하고, 맵 부분들 중 적어도 하나의 적어도 일부는 캐싱 및/또는 버퍼링에 따른다.
EC35) EC27의 방법에 있어서, 맵은 제 1 레벨 맵 및 제 2 레벨 맵을 포함하는 2-레벨 맵이고, 맵 부분들은 제 1 레벨 맵의 부분들에 대응하고, 엔트리 부분들은 제 2 레벨 맵의 엔트리들에 대응한다.
EC36) EC35의 방법에 있어서, 제 1 레벨 맵 및/또는 제 2 레벨 맵의 적어도 일부를 캐싱 및/또는 버퍼링하는 단계를 더 포함하고, 맵 부분들 및 엔트리 부분들 중 적어도 하나의 적어도 일부는 캐싱 및/또는 버퍼링에 따른다.
EC37) EC27의 방법에 있어서, 맵 부분들 각각은 시간적 순서에 따라, 각각의 맵 부분의 대응하는 타임스탬프 부분보다 조기인(earlier), 대응하는 타임스탬프 부분들을 갖는 모든 엔트리 부분들에 따른다.
EC38) EC25의 방법에 있어서, 하나의 특정한 시점은 제 1 특정한 시점이고, NVM에 기록된 체크포인트 유닛들 중 적어도 하나가, 시간적 순서에 따라, 제 2 특정한 시점에서 NVM에 기록된 최근의 맵 유닛 타임스탬프 부분들 보다 시간적 순서에 따라 나중인 타임스탬프 부분을 가질 때 적어도 제 2 특정한 시점이 존재한다.
EC39) EC25의 방법에 있어서, 하나의 특정한 시점은 제 1 특정한 시점이고, NVM에 기록된 체크포인트 유닛들 중 적어도 하나가, 시간적 순서에 따라, 제 2 특정한 시점에서 NVM에 기록된 최근의 스토리지 유닛 타임스탬프 부분들 보다 시간적 순서에 따라 나중인 타임스탬프 부분을 가질 때 적어도 제 2 특정한 시점이 존재한다.
EC40) EC23의 방법에 있어서, 복수의 스토리지 유닛들은 제 1 복수의 스토리지 유닛들이고, 스토리지 스트림은 제 1 스토리지 스트림이며, 방법은, 제 2 스토리지 스트림에 따라 NVM에 제 2 복수의 스토리지 유닛들을 기록하는 단계를 더 포함하고, 제 2 스토리지 유닛들 각각은 데이터 부분 및 대응하는 타임스탬프 부분을 포함하고, 제 2 스토리지 유닛 타임스탬프 부분들은 서로에 관하여 타임스탬프 순서에 따라 단조적으로 증가한다.
EC41) EC40의 방법에 있어서, 제 2 스토리지 유닛들의 기록은 제 2 스토리지 유닛 타임스탬프 부분들에 의해 표시될 때의 시간적 순서에 대응하는 시간 순서로 제 2 스토리지 유닛들을 기록한다.
EC42) EC40의 방법에 있어서, 제 2 스토리지 유닛들 중 적어도 하나는 제 1 스토리지 유닛들 중 2개 사이에 시간 순서로 기록되고, 적어도 하나의 제 2 스토리지 유닛의 타임스탬프 부분은 시간적 순서에 따라, 2개의 제 1 스토리지 유닛들의 타임스탬프 부분들 사이에 있다.
EC43) EC40의 방법에 있어서, 제 1 복수의 스토리지 유닛들의 데이터 부분들 중 적어도 하나는 호스트 데이터 기록 커맨드와 연관하여 호스트로부터의 호스트 데이터를 포함하고, 제 2 복수의 스토리지 유닛들의 데이터 부분들 중 적어도 하나는 리사이클링 동작에 응답하여 NVM으로부터 판독된 리사이클링된 데이터를 포함한다.
EC44) EC23의 방법에 있어서, 타임스탬프 부분들은 비교되는 타임스탬프 부분들의 수치 비교를 통해 시간적 순서에 따라 타임스탬프 부분들을 비교하는 것을 가능하게 하도록 인코딩된다.
EC45) EC44의 방법에 있어서, 수치 비교는 비교되는 타임스탬프 부분들의 하나 또는 그 초과의 인접한 최상위 비트들을 무시한다.
EC46) EC44의 방법에 있어서, 비교되는 스토리지 유닛 타임스탬프 부분들 중 특정한 하나가 비교되는 맵 유닛 타임스탬프 부분들 중 특정한 하나와 수치적으로 동일하면, 비교는 타임스탬프 부분들이 동일할 때, 비교되는 스토리지 유닛 타임스탬프 부분이 비교되는 맵 유닛 타임스탬프 부분 보다 조기인 것으로 사전결정에 의해 결정한다.
EC47) EC46의 방법에 있어서, 수치적 동일성은 비교되는 타임스탬프 부분들의 하나 또는 그 초과의 인접한 최상위 비트들을 무시한다.
EC48) EC23의 방법에 있어서, 엔트리 부분들 각각은 시간적 순서에 따라, 각각의 엔트리 부분의 대응하는 타임스탬프 부분 보다 조기인 대응하는 타임스탬프 부분들을 갖는 모든 데이터 부분들에 따른다.
EC49) EC23의 방법에 있어서, 스토리지 유닛들 각각은 원자적으로(atomically) 기록된다.
EC50) EC23의 방법에 있어서, 맵 유닛들 각각은 원자적으로 기록된다.
EC51) EC23의 방법에 있어서, 데이터 부분들 중 적어도 하나가 호스트 데이터 기록 커맨드와 연관하여 호스트로부터의 호스트 데이터를 포함한다.
EC52) EC23의 방법에 있어서, 데이터 부분들 중 적어도 하나가 리사이클링 동작에 응답하여 NVM으로부터 판독된 리사이클링된 데이터를 포함한다.
EC53) EC23의 방법에 있어서, 데이터 부분들 각각은 각각의 하나 또는 그 초과의 데이터 유닛들 및 각각의 대응하는 하나 또는 그 초과의 헤더들을 포함하고, 헤더들 각각은 데이터 유닛들 중 각각의 대응하는 데이터 유닛과 LB들 중 하나 사이의 각각의 매핑을 식별하고, 매핑들은 LB들의 각각의 LB들이 데이터 유닛들의 각각의 데이터 유닛들로서 NVM에 기록되는 위치를 결정할 수 있게 한다.
EC54) EC53의 방법에 있어서, 헤더들 각각은 각각의 헤더에 의해 식별된 각각의 데이터 유닛과 NVM에 인접하게 기록된다.
EC55) EC2, EC9, EC43, 또는 EC51의 방법에 있어서, 데이터 기록들에 따라 호스트와 인터페이싱하는 단계를 더 포함한다.
EC56) EC55의 방법에 있어서, 인터페이싱은 스토리지 인터페이스 표준과 호환가능하다.
EC57) EC2, EC9, EC43, 또는 EC51의 방법에 있어서, 호스트는 컴퓨팅 호스트이고, 방법은 데이터 기록들에 따라 컴퓨팅 호스트를 동작시키는 단계를 더 포함한다.
EC58) EC1, EC5, 또는 EC23의 방법에 있어서, NVM은 하나 또는 그 초과의 플래시 메모리들을 포함한다.
EC59) EC58의 방법에 있어서, 플래시 메모리 인터페이스를 통해 플래시 메모리들과 인터페이싱하는 단계를 더 포함한다.
EC60) 프로세싱 엘리먼트에 의해 실행될 때, 프로세싱 엘리먼트로 하여금, 하기의 동작들을 수행 및/또는 제어하게 하는 명령들의 세트가 저장된 유형의 컴퓨터 판독가능 매체로서, 상기 동작들은,
비휘발성 메모리(NVM)에 일련의 데이터 유닛들을 제 1 순서로 배열하는 것 ―데이터 유닛들 각각은 복수의 타임스탬프들 중 각각의 하나와 연관됨―; 및
NVM에 일련의 데이터 맵 유닛들을 제 2 순서로 배열하는 것―데이터 맵 유닛들 각각은 타임스탬프들 중 각각의 하나와 연관됨―을 포함하고,
데이터 맵 유닛들 각각은 데이터 유닛들 중 대응하는 데이터 유닛의 NVM에서의 위치를 포함하고,
데이터 유닛들 각각과 연관된 각각의 타임스탬프는 대응하는 데이터 맵 유닛과 연관된 각각의 타임스탬프에 있거나 그 이전에 있다.
EC61) EC60의 유형의 컴퓨터 판독가능 매체에 있어서,
데이터 유닛들 각각은 호스트로부터 각각의 논리 블록 어드레스(LBA)로의 각각의 데이터 기록에 대응하고,
데이터 유닛들 중 이전 데이터 유닛 및 후속 데이터 유닛이 각각의 LBA들 중 동일한 LBA에 대한 데이터 기록들의 데이터 기록들에 대응하고,
이전의 데이터 유닛은 데이터 맵 유닛들 중 연관된 데이터 맵 유닛을 갖지 않는다.
EC62) EC60의 유형의 컴퓨터 판독가능 매체에 있어서, 상기 동작들은,
정전에 후속하여, 데이터 유닛들 중 최근의 유효하고 인접한 데이터 유닛을 결정하는 것;
정전에 후속하여, 데이터 맵 유닛들 중 최근의 유효하고 인접한 데이터 맵 유닛을 결정하는 것 ―데이터 맵 유닛들 중 최근의 유효하고 인접한 데이터 맵 유닛과 연관된 각각의 타임스탬프는 데이터 유닛들 중 최근의 유효하고 인접한 데이터 유닛과 연관된 각각의 타임스탬프에 있거나 그 이전에 있음―; 및
데이터 맵 유닛들 중 최근의 유효하고 인접한 데이터 맵 유닛까지의 데이터 맵 유닛들의 데이터 맵 유닛들만을 복구하는 것을 더 포함하고,
이에 의해, 데이터 유닛들 중 최근의 유효하고 인접한 데이터 유닛과 연관된 각각의 타임스탬프 이후의 임의의 각각의 타임스탬프들과 연관된 임의의 데이터 맵 유닛들은 복구에서 무시된다.
EC63) EC60의 유형의 컴퓨터 판독가능 매체에 있어서, 데이터 유닛들은 데이터 스토리지 유닛들이다.
EC64) 프로세싱 엘리먼트에 의해 실행될 때, 프로세싱 엘리먼트로 하여금, 하기의 동작들을 수행 및/또는 제어하게 하는 명령들의 세트가 저장된 유형의 컴퓨터 판독가능 매체로서, 상기 동작들은,
비휘발성 메모리(NVM)에 일련의 데이터 스토리지 유닛들을 기록하는 것 ―데이터 스토리지 유닛들 각각은 복수의 타임스탬프들 중 각각의 하나와 연관됨―; 및
NVM에 일련의 데이터 맵 유닛들을 기록하는 것 ―데이터 맵 유닛들 각각은 타임스탬프들 중 각각의 하나와 연관됨―을 포함하고,
데이터 맵 유닛들 각각은 데이터 스토리지 유닛들 중 대응하는 데이터 스토리지 유닛의 NVM에서의 위치를 포함하고,
데이터 스토리지 유닛들 각각과 연관된 각각의 타임스탬프는 대응하는 데이터 맵 유닛과 연관된 각각의 타임스탬프가 나타내는 상대적 에이지(relative age)와 동일하거나 그보다 오래된 상대적 에이지를 나타낸다.
EC65) EC64의 유형의 컴퓨터 판독가능 매체에 있어서, 데이터 스토리지 유닛들의 기록은 제 1 순서에 따르고 데이터 맵 유닛들의 기록은 제 2 순서에 따른다.
EC66) EC64의 유형의 컴퓨터 판독가능 매체에 있어서, 데이터 스토리지 유닛들은 NVM에서 제 1 순서에 따라 배열되고 데이터 맵 유닛들은 NVM에서 제 2 순서에 따라 배열된다.
EC67) EC60, EC65, 또는 EC66의 유형의 컴퓨터 판독가능 매체에 있어서, 제 1 순서는 제 2 순서와 상이하다.
EC68) EC64의 유형의 컴퓨터 판독가능 매체에 있어서,
데이터 스토리지 유닛들 중 제 1 데이터 스토리지 유닛은 호스트로부터 특정한 논리 블록 어드레스(LBA)로의 제 1 데이터 기록에 대응하고,
데이터 스토리지 유닛들 중 제 2 데이터 스토리지 유닛은 호스트로부터 특정한 LBA로의 제 2 데이터 기록에 대응하고,
제 1 데이터 기록은, 시간 순서에 있어, 제 2 데이터 기록에 선행하며,
데이터 맵 유닛들은 제 1 데이터 스토리지 유닛들에 대응하지 않는다.
EC69) EC65의 유형의 컴퓨터 판독가능 매체에 있어서, 상기 동작들은,
이벤트에 후속하고 제 1 순서에 따라, 데이터 스토리지 유닛들 중 최근의 유효하고 인접한 데이터 스토리지 유닛을 결정하는 것;
이벤트에 후속하고 제 2 순서에 따라, 데이터 스토리지 유닛들 중 최근의 유효하고 인접한 데이터 스토리지 유닛과 연관된 각각의 타임스탬프가 표시하는 상대적 에이지와 동일하거나 그보다 오래된 상대적 에이지를 나타내는 각각의 타임스탬프들 중 하나와 연관된 데이터 맵 유닛들 중 최근의 유효하고 인접한 데이터 맵 유닛을 결정하는 것; 및
데이터 맵 유닛들 중 최근의 유효하고 인접한 데이터 맵 유닛까지의 데이터 맵 유닛들의 데이터 맵 유닛들만을, 제 1 순서 및 제 2 순서에 따라, 복구하는 것을 더 포함한다.
EC70) EC65의 유형의 컴퓨터 판독가능 매체에 있어서, 상기 동작들은,
데이터 스토리지 유닛들 중 최근의 유효하고 인접한 데이터 스토리지 유닛인 데이터 스토리지 유닛들 중 제 1 데이터 스토리지 유닛을 제 1 순서에 따라 결정하는 것;
데이터 스토리지 유닛들 중 최근의 유효하고 인접한 데이터 스토리지 유닛과 연관된 각각의 타임스탬프가 표시하는 상대적 에이지와 동일하거나 그보다 오래된 상대적 에이지를 나타내는 각각의 타임스탬프들 중 하나와 연관된 데이터 맵 유닛들 중 최근의 유효하고 인접한 데이터 맵 유닛을 제 2 순서에 따라 결정하는 것;
데이터 맵 유닛들 중 최근의 유효하고 인접한 데이터 맵 유닛과 연관된 각각의 타임스탬프가 표시하는 상대적 에이지와 동일하거나 그에 선행하는 결정된 양 이전인 상대적 에이지를 나타내는 각각의 타임스탬프들 중 하나와 연관된 데이터 스토리지 유닛들 중 최근의 데이터 스토리지 유닛인 데이터 스토리지 유닛들 중 제 2 데이터 스토리지 유닛을 제 1 순서에 따라 결정하는 것; 및
데이터 스토리지 유닛들 중 제 1 데이터 스토리지 유닛을 통해 데이터 스토리지 유닛들 중 제 2 데이터 스토리지 유닛으로부터의 데이터 유닛들의 데이터 유닛들을 단독으로 사용하여 데이터 맵 유닛들 중 최근의 유효하고 인접한 데이터 맵 유닛까지의 데이터 맵 유닛들의 데이터 맵 유닛들을, 제 1 순서 및 제 2 순서에 따라, 복구하는 것을 더 포함한다.
EC71) EC70의 유형의 컴퓨터 판독가능 매체에 있어서, 상기 동작들은,
NVM에 이전에 기록되지 않은 데이터 맵 유닛들 중 각 변경된 데이터 맵 유닛에 대해, 데이터 스토리지 유닛들 중 특정한 데이터 스토리지 유닛과 연관된 각각의 타임스탬프와 동일한 가장 오래된 업데이트와 연관된 타임스탬프들 중 각각의 타임스탬프를 식별하는 것 ―변경된 데이터 맵 유닛은 특정한 데이터 스토리지 유닛의 NVM에서의 위치를 포함함―; 및
변경된 데이터 맵 유닛의 가장 오래된 업데이트와 연관된 각각의 타임스탬프에 후속하여 결정된 양 보다 많은 각각의 타임스탬프들 중 하나와 연관된 데이터 스토리지 유닛들 중 하나의 기록시에 또는 그 이전에, NVM에 이전에 기록되지 않은 변경된 데이터 맵 유닛들 각각을 NVM에 기록하는 것을 더 포함한다.
EC72) EC69의 유형의 컴퓨터 판독가능 매체에 있어서, 동작들은, 복구하는 것과 관하여, 데이터 스토리지 유닛들 중 최근의 유효하고 인접한 데이터 스토리지 유닛의 각각의 타임스탬프가 나타내는 상대적 에이지 보다 덜 오래된(younger) 상대적 에이지를 나타내는 각각의 타임스탬프를 갖는 임의의 데이터 맵 유닛들을 무시하는 것을 더 포함한다.
EC73) EC69의 유형의 컴퓨터 판독가능 매체에 있어서, 이벤트는 오작동을 포함한다.
EC74) EC73의 유형의 컴퓨터 판독가능 매체에 있어서, 오작동은,
정전,
크래시, 및
회로 고장 중 하나 또는 그 초과의 것을 포함한다.
EC75) EC63 또는 EC64의 유형의 컴퓨터 판독가능 매체에 있어서, 데이터 맵 유닛들 중 적어도 2개는 동일한 위치를 포함하고, 동일한 위치는 데이터 유닛들 중 적어도 2개의 각각의 데이터 유닛들의 위치이다.
EC76) EC63 또는 EC64의 유형의 컴퓨터 판독가능 매체에 있어서, 동작들은, 데이터 스토리지 유닛과 연관된 각각의 타임스탬프를 데이터 스토리지 유닛들 중 적어도 일부로 저장하는 것, 및 데이터 맵 유닛과 연관된 각각의 타임스탬프를 데이터 맵 유닛들 중 적어도 일부로 저장하는 것을 더 포함한다.
EC77) EC63 또는 EC64의 유형의 컴퓨터 판독가능 매체에 있어서, 데이터 스토리지 유닛들의 각각의 타임스탬프들의 충분한 타임스탬프들이 데이터 스토리지 유닛들로 저장되어서, 데이터 스토리지 유닛들 각각과 각각의 데이터 스토리지 유닛의 각각의 타임스탬프 사이의 연관이 NVM을 판독함으로써 결정가능하다.
EC78) EC63 또는 EC64의 유형의 컴퓨터 판독가능 매체에 있어서, 데이터 스토리지 유닛들의 각각의 타임스탬프들의 적어도 일부 각각은 연관된 데이터 스토리지 유닛으로 NVM에 저장된다.
EC79) EC63 또는 EC64의 유형의 컴퓨터 판독가능 매체에 있어서, 데이터 맵 유닛들의 각각의 타임스탬프들의 충분한 타임스탬프들이 데이터 맵 유닛들로 저장되어서, 데이터 맵 유닛들 각각과 각각의 데이터 맵 유닛의 각각의 타임스탬프 사이의 연관이 NVM을 판독함으로써 결정가능하다.
EC80) EC63 또는 EC64의 유형의 컴퓨터 판독가능 매체에 있어서, 데이터 맵 유닛들의 각각의 타임스탬프들의 적어도 일부 각각은 연관된 데이터 맵 유닛으로 NVM에 저장된다.
EC81) EC63 또는 EC64의 유형의 컴퓨터 판독가능 매체에 있어서, 데이터 스토리지 유닛들 중 특정한 데이터 스토리지 유닛은 특정한 데이터 스토리지 유닛과 연관된 각각의 타임스탬프로 NVM에 저장되고, 데이터 맵 유닛들 중 특정한 데이터 맵 유닛은 특정한 데이터 맵 유닛과 연관된 각각의 타임스탬프로 NVM에 저장된다.
EC82) 프로세싱 엘리먼트에 의해 실행될 때, 프로세싱 엘리먼트로 하여금, 하기의 동작들을 수행 및/또는 제어하게 하는 명령들의 세트가 저장된 유형의 컴퓨터 판독가능 매체로서, 상기 동작들은,
스토리지 스트림에 따라 비휘발성 메모리(NVM)에 복수의 스토리지 유닛들을 기록하는 것―스토리지 유닛들 각각은 데이터 부분 및 대응하는 타임스탬프 부분을 포함함―; 및
맵 스트림에 따라 NVM에 복수의 맵 유닛들을 기록하는 것 ―맵 유닛들 각각은 엔트리 부분 및 대응하는 타임스탬프 부분을 포함함―을 포함하고,
엔트리 부분들 중 적어도 일부 각각은 데이터 부분들 중 적어도 대응하는 데이터 부분을 특정함으로써 각각의 논리 블록(LB)들이 NVM에서 어디에 기록되는지 결정할 수 있게 하고,
타임스탬프 부분들에 의해 시간적 순서가 표시되고, 스토리지 유닛 타임스탬프 부분들은 서로에 관하여 타임스탬프 순서에 따라 단조적으로 증가하며, 맵 유닛 타임스탬프 부분들은 서로에 관하여 타임스탬프 순서에 따라 단조적으로 증가하고,
NVM에 기록된 맵 유닛들 중 적어도 하나가, 시간적 순서에 따라, 특정한 시점에서 NVM에 기록된 최근의 스토리지 유닛 타임스탬프 부분들 보다 시간적 순서에 따라 나중인 타임스탬프 부분을 가질 때 적어도 하나의 특정한 시점이 존재한다.
EC83) EC82의 유형의 컴퓨터 판독가능 매체에 있어서, 스토리지 유닛들의 기록은 스토리지 유닛 타임스탬프 부분들에 의해 표시될 때의 시간적 순서에 대응하는 시간 순서로 스토리지 유닛들을 기록하고, 맵 유닛들의 기록은 맵 유닛 타임스탬프 부분들에 의해 표시될 때의 시간적 순서에 대응하는 시간 순서로 맵 유닛들을 기록한다.
EC84) EC82의 유형의 컴퓨터 판독가능 매체에 있어서, 동작들은 체크포인트 스트림에 따라 NVM에 하나 또는 그 초과의 체크포인트 유닛들을 기록하는 것을 더 포함하고, 체크포인트 유닛들 각각은 맵 부분 및 대응하는 타임스탬프 부분을 포함하고, 체크포인트 타임스탬프 부분들은 서로에 관하여 타임스탬프 순서에 따라 단조적으로 증가한다.
EC85) EC84의 유형의 컴퓨터 판독가능 매체에 있어서, 체크포인트 유닛들의 기록은 체크포인트 타임스탬프 부분들에 의해 표시될 때의 시간적 순서에 대응하는 시간 순서로 체크포인트 유닛들을 기록한다.
EC86) EC84의 유형의 컴퓨터 판독가능 매체에 있어서, 미리결정된 수의 체크포인트 유닛들의 인접한 그룹은 엔트리 부분들이 따르는 적어도 맵의 전체 체크포인트를 포함한다.
EC87) EC86의 유형의 컴퓨터 판독가능 매체에 있어서, 동작들은 맵 부분들 및/또는 체크포인트 유닛 타임스탬프 부분들 중 하나 또는 그 초과의 것의 하나 또는 그 초과의 부분들에 적어도 부분적으로 기초하여 맵을 복원하는 것을 더 포함한다.
EC88) EC87의 유형의 컴퓨터 판독가능 매체에 있어서, 복원하는 것은 엔트리 부분들 및/또는 맵 유닛 타임스탬프 부분들 중 하나 또는 그 초과의 것의 하나 또는 그 초과의 부분들에 적어도 부분적으로 더 기초한다.
EC89) EC88의 유형의 컴퓨터 판독가능 매체에 있어서, 복원하는 것은 데이터 부분들 및/또는 스토리지 유닛 타임스탬프 부분들 중 하나 또는 그 초과의 것의 하나 또는 그 초과의 부분들에 적어도 부분적으로 더 기초한다.
EC90) EC89의 유형의 컴퓨터 판독가능 매체에 있어서, 데이터 부분들 각각은 각각의 하나 또는 그 초과의 데이터 유닛들 및 각각의 대응하는 하나 또는 그 초과의 헤더들을 포함하고, 헤더들 각각은 데이터 유닛들 중 각각의 대응하는 데이터 유닛과 LB들 중 하나 사이의 각각의 매핑을 식별하고, 매핑들은 LB들의 각각의 LB들이 데이터 유닛들의 각각의 데이터 유닛들로서 NVM에 기록되는 위치를 결정할 수 있게 하고, 복원하는 것은 NVM에 기록된 스토리지 유닛들에 포함되는 각각의 헤더들 중 하나 또는 그 초과에 적어도 부분적으로 더 기초한다.
EC91) EC90의 유형의 컴퓨터 판독가능 매체에 있어서, 엔트리 부분들 중 특정한 엔트리 부분이 각각의 LB의 각각의 데이터 부분을 결정하고, 각각의 데이터 부분은 헤더들 중 특정한 헤더를 포함하고, 특정한 헤더는 데이터 유닛들 중 특정한 데이터 유닛과 특정한 엔트리 부분의 각각의 LB 사이의 각각의 매핑을 식별한다.
EC92) EC86의 유형의 컴퓨터 판독가능 매체에 있어서, 맵은 1-레벨 맵이다.
EC93) EC92의 유형의 컴퓨터 판독가능 매체에 있어서, 동작들은 맵의 적어도 일부를 캐싱 및/또는 버퍼링하는 것을 더 포함하고, 맵 부분들 중 적어도 하나의 적어도 일부는 캐싱 및/또는 버퍼링에 따른다.
EC94) EC86의 유형의 컴퓨터 판독가능 매체에 있어서, 맵은 제 1 레벨 맵 및 제 2 레벨 맵을 포함하는 2-레벨 맵이고, 맵 부분들은 제 1 레벨 맵의 부분들에 대응하고, 엔트리 부분들은 제 2 레벨 맵의 엔트리들에 대응한다.
EC95) EC94의 유형의 컴퓨터 판독가능 매체에 있어서, 동작들은 제 1 레벨 맵 및/또는 제 2 레벨 맵의 적어도 일부를 캐싱 및/또는 버퍼링하는 것을 더 포함하고, 맵 부분들 및 엔트리 부분들 중 적어도 하나의 적어도 일부는 캐싱 및/또는 버퍼링에 따른다.
EC96) EC86의 유형의 컴퓨터 판독가능 매체에 있어서, 맵 부분들 각각은, 시간적 순서에 따라, 각각의 맵 부분의 대응하는 타임스탬프 부분 보다 조기(earlier)인 대응하는 타임스탬프 부분들을 갖는 모든 엔트리 부분들에 따른다.
EC97) EC84의 유형의 컴퓨터 판독가능 매체에 있어서, 하나의 특정한 시점은 제 1 특정한 시점이고, NVM에 기록된 체크포인트 유닛들 중 적어도 하나가, 시간적 순서에 따라, 제 2 특정한 시점에서 NVM에 기록된 최근의 맵 유닛 타임스탬프 부분들 보다 시간적 순서에 따라 나중인 타임스탬프 부분을 가질 때 적어도 제 2 특정한 시점이 존재한다.
EC98) EC84의 유형의 컴퓨터 판독가능 매체에 있어서, 하나의 특정한 시점은 제 1 특정한 시점이고, NVM에 기록된 체크포인트 유닛들 중 적어도 하나가, 시간적 순서에 따라, 제 2 특정한 시점에서 NVM에 기록된 최근의 스토리지 유닛 타임스탬프 부분들 보다 시간적 순서에 따라 나중인 타임스탬프 부분을 가질 때 적어도 제 2 특정한 시점이 존재한다.
EC99) EC82의 유형의 컴퓨터 판독가능 매체에 있어서, 복수의 스토리지 유닛들은 제 1 복수의 스토리지 유닛들이고, 스토리지 스트림은 제 1 스토리지 스트림이며, 동작은, 제 2 스토리지 스트림에 따라 NVM에 제 2 복수의 스토리지 유닛들을 기록하는 것을 더 포함하고, 제 2 스토리지 유닛들 각각은 데이터 부분 및 대응하는 타임스탬프 부분을 포함하고, 제 2 스토리지 유닛 타임스탬프 부분들은 서로에 관하여 타임스탬프 순서에 따라 단조적으로 증가한다.
EC100) EC99의 유형의 컴퓨터 판독가능 매체에 있어서, 제 2 스토리지 유닛들의 기록은 제 2 스토리지 유닛 타임스탬프 부분들에 의해 표시될 때의 시간적 순서에 대응하는 시간 순서로 제 2 스토리지 유닛들을 기록한다.
EC101) EC99의 유형의 컴퓨터 판독가능 매체에 있어서, 제 2 스토리지 유닛들 중 적어도 하나는 제 1 스토리지 유닛들 중 2개 사이에 시간 순서로 기록되고, 적어도 하나의 제 2 스토리지 유닛의 타임스탬프 부분은 시간적 순서에 따라, 2개의 제 1 스토리지 유닛들의 타임스탬프 부분들 사이에 있다.
EC102) EC99의 유형의 컴퓨터 판독가능 매체에 있어서, 제 1 복수의 스토리지 유닛들의 데이터 부분들 중 적어도 하나는 호스트 데이터 기록 커맨드와 연관하여 호스트로부터의 호스트 데이터를 포함하고, 제 2 복수의 스토리지 유닛들의 데이터 부분들 중 적어도 하나는 리사이클링 동작에 응답하여 NVM으로부터 판독된 리사이클링된 데이터를 포함한다.
EC103) EC82의 유형의 컴퓨터 판독가능 매체에 있어서, 타임스탬프 부분들은 비교되는 타임스탬프 부분들의 수치 비교를 통해 시간적 순서에 따라 타임스탬프 부분들을 비교하는 것을 가능하게 하도록 인코딩된다.
EC104) EC103의 유형의 컴퓨터 판독가능 매체에 있어서, 수치 비교는 비교되는 타임스탬프 부분들의 하나 또는 그 초과의 인접한 최상위 비트들을 무시한다.
EC105) EC103의 유형의 컴퓨터 판독가능 매체에 있어서, 비교되는 스토리지 유닛 타임스탬프 부분들 중 특정한 하나가 비교되는 맵 유닛 타임스탬프 부분들 중 특정한 하나와 수치적으로 동일하면, 비교는 타임스탬프 부분들이 동일할 때, 비교되는 스토리지 유닛 타임스탬프 부분이 비교되는 맵 유닛 타임스탬프 부분 보다 조기라는 것을 사전결정에 의해 결정한다.
EC106) EC105의 유형의 컴퓨터 판독가능 매체에 있어서, 수치 동일성은 비교되는 타임스탬프 부분들의 하나 또는 그 초과의 인접한 최상위 비트들을 무시한다.
EC107) EC82의 유형의 컴퓨터 판독가능 매체에 있어서, 엔트리 부분들 각각은 시간적 순서에 따라, 각각의 엔트리 부분의 대응하는 타임스탬프 부분 보다 조기인 대응하는 타임스탬프 부분들을 갖는 모든 데이터 부분들에 따른다.
EC108) EC82의 유형의 컴퓨터 판독가능 매체에 있어서, 스토리지 유닛들 각각은 원자적으로 기록된다.
EC109) EC82의 유형의 컴퓨터 판독가능 매체에 있어서, 맵 유닛들 각각은 원자적으로 기록된다.
EC110) EC82의 유형의 컴퓨터 판독가능 매체에 있어서, 데이터 부분들 중 적어도 하나는 호스트 데이터 기록 커맨드와 연관하여 호스트로부터의 호스트 데이터를 포함한다.
EC111) EC82의 유형의 컴퓨터 판독가능 매체에 있어서, 데이터 부분들 중 적어도 하나는 리사이클링 동작에 응답하여 NVM으로부터 판독된 리사이클링된 데이터를 포함한다.
EC112) EC82의 유형의 컴퓨터 판독가능 매체에 있어서, 데이터 부분들 각각은 각각의 하나 또는 그 초과의 데이터 유닛들 및 각각의 대응하는 하나 또는 그 초과의 헤더들을 포함하고, 헤더들 각각은 데이터 유닛들 중 각각의 대응하는 데이터 유닛과 LB들 중 하나 사이의 각각의 매핑을 식별하고, 매핑들은 LB들의 각각의 LB들이 데이터 유닛들의 각각의 데이터 유닛들로서 NVM에 기록되는 위치를 결정할 수 있게 한다.
EC113) EC112의 유형의 컴퓨터 판독가능 매체에 있어서, 헤더들 각각은 각각의 헤더에 의해 식별된 각각의 데이터 유닛과 NVM에 인접하게 기록된다.
EC114) EC61, EC68, EC102, 또는 EC110의 유형의 컴퓨터 판독가능 매체에 있어서, 동작들은 데이터 기록들에 따라 호스트와 인터페이싱하는 것을 더 포함한다.
EC115) EC114의 유형의 컴퓨터 판독가능 매체에 있어서, 인터페이싱은 스토리지 인터페이스 표준과 호환가능하다.
EC116) EC61, EC68, EC102, 또는 EC110의 유형의 컴퓨터 판독가능 매체에 있어서, 호스트는 컴퓨팅 호스트이고, 컴퓨팅 호스트는 데이터 기록들에 따라 동작된다.
EC117) EC60, EC64, 또는 EC82의 유형의 컴퓨터 판독가능 매체에 있어서, NVM은 하나 또는 그 초과의 플래시 메모리들을 포함한다.
EC118) EC117의 유형의 컴퓨터 판독가능 매체에 있어서, 동작들은 플래시 메모리 인터페이스를 통해 플래시 메모리들과 인터페이싱하는 것을 더 포함한다.
EC119) 장치로서,
비휘발성 메모리(NVM)에 일련의 데이터 유닛들을 제 1 순서로 배열하도록 인에이블된 제 1 하드웨어 로직 회로 ―데이터 유닛들 각각은 복수의 타임스탬프들 중 각각의 하나와 연관됨―; 및
NVM에 일련의 데이터 맵 유닛들을 제 2 순서로 배열하도록 인에이블된 제 2 하드웨어 로직 회로 ―데이터 맵 유닛들 각각은 타임스탬프들 중 각각의 하나와 연관됨―를 포함하고,
데이터 맵 유닛들 각각은 데이터 유닛들 중 대응하는 데이터 유닛의 NVM에서의 위치를 포함하고,
데이터 유닛들 각각과 연관된 각각의 타임스탬프는 대응하는 데이터 맵 유닛과 연관된 각각의 타임스탬프에 있거나 그 이전에 있다.
EC120) EC119의 장치에 있어서, 제 1 하드웨어 로직 회로의 적어도 일부는, 또한 제 2 하드웨어 로직 회로의 적어도 일부인 공유된 하드웨어 로직 회로이다.
EC121) EC119의 장치에 있어서,
데이터 유닛들 각각은 호스트로부터 각각의 논리 블록 어드레스(LBA)로의 각각의 데이터 기록에 대응하고,
데이터 유닛들 중 이전 데이터 유닛 및 후속 데이터 유닛이 각각의 LBA들 중 동일한 LBA에 대한 데이터 기록들의 데이터 기록들에 대응하고,
이전의 데이터 유닛은 데이터 맵 유닛들 중 연관된 데이터 맵 유닛을 갖지 않는다.
EC122) EC119의 장치에 있어서,
정전에 후속하여, 데이터 유닛들 중 최근의 유효하고 인접한 데이터 유닛을 결정하도록 인에이블된 제 3 하드웨어 로직 회로;
정전에 후속하여, 데이터 맵 유닛들 중 최근의 유효하고 인접한 데이터 맵 유닛을 결정하도록 인에이블된 제 4 하드웨어 로직 회로 ―데이터 맵 유닛들 중 최근의 유효하고 인접한 데이터 맵 유닛과 연관된 각각의 타임스탬프는 데이터 유닛들 중 최근의 유효하고 인접한 데이터 유닛과 연관된 각각의 타임스탬프에 있거나 그 이전에 있음―; 및
데이터 맵 유닛들 중 최근의 유효하고 인접한 데이터 맵 유닛까지의 데이터 맵 유닛들의 데이터 맵 유닛들만을 복구하도록 인에이블된 제 5 하드웨어 로직 회로를 더 포함하고,
이에 의해, 데이터 유닛들 중 최근의 유효하고 인접한 데이터 유닛과 연관된 각각의 타임스탬프 이후의 임의의 각각의 타임스탬프들과 연관된 임의의 데이터 맵 유닛들은 복구에서 무시된다.
EC123) EC119의 장치에 있어서, 데이터 유닛들은 데이터 스토리지 유닛들이다.
EC124) 장치로서,
비휘발성 메모리(NVM)에 일련의 데이터 스토리지 유닛들을 기록하도록 인에이블된 제 1 하드웨어 로직 회로 ―데이터 스토리지 유닛들 각각은 복수의 타임스탬프들 중 각각의 하나와 연관됨―; 및
NVM에 일련의 데이터 맵 유닛들을 기록하도록 인에이블된 제 2 하드웨어 로직 회로 ―데이터 맵 유닛들 각각은 타임스탬프들 중 각각의 하나와 연관됨―를 포함하고,
데이터 맵 유닛들 각각은 데이터 스토리지 유닛들 중 대응하는 데이터 스토리지 유닛의 NVM에서의 위치를 포함하고,
데이터 스토리지 유닛들 각각과 연관된 각각의 타임스탬프는 대응하는 데이터 맵 유닛과 연관된 각각의 타임스탬프가 나타내는 상대적 에이지(relative age)와 동일하거나 그보다 오래된 상대적 에이지를 나타낸다.
EC125) EC124의 장치에 있어서, 제 1 하드웨어 로직 회로의 적어도 일부는, 또한 제 2 하드웨어 로직 회로의 적어도 일부인 공유된 하드웨어 로직 회로이다.
EC126) EC124의 장치에 있어서, 데이터 스토리지 유닛들의 기록은 제 1 순서에 따르고 데이터 맵 유닛들의 기록은 제 2 순서에 따른다.
EC127) EC124의 장치에 있어서, 데이터 스토리지 유닛들은 NVM에서 제 1 순서에 따라 배열되고 데이터 맵 유닛들은 NVM에서 제 2 순서에 따라 배열된다.
EC128) EC124의 장치에 있어서,
데이터 스토리지 유닛들 중 제 1 데이터 스토리지 유닛은 호스트로부터 특정한 논리 블록 어드레스(LBA)로의 제 1 데이터 기록에 대응하고,
데이터 스토리지 유닛들 중 제 2 데이터 스토리지 유닛은 호스트로부터 특정한 LBA로의 제 2 데이터 기록에 대응하고,
제 1 데이터 기록은, 시간 순서에 있어, 제 2 데이터 기록에 선행하며,
데이터 맵 유닛들은 제 1 데이터 스토리지 유닛에 대응하지 않는다.
EC129) EC126의 장치에 있어서,
삭제
삭제
삭제
삭제
삭제
이벤트에 후속하고 제 1 순서에 따라, 데이터 스토리지 유닛들 중 최근의 유효하고 인접한 데이터 스토리지 유닛을 결정하도록 인에이블된 제 3 하드웨어 로직 회로;
이벤트에 후속하고 제 2 순서에 따라, 데이터 스토리지 유닛들 중 최근의 유효하고 인접한 데이터 스토리지 유닛과 연관된 각각의 타임스탬프가 표시하는 상대적 에이지와 동일하거나 그보다 오래된 상대적 에이지를 나타내는 각각의 타임스탬프들 중 하나와 연관된 데이터 맵 유닛들 중 최근의 유효하고 인접한 데이터 맵 유닛을 결정하도록 인에이블된 제 4 하드웨어 로직 회로; 및
데이터 맵 유닛들 중 최근의 유효하고 인접한 데이터 맵 유닛까지의 데이터 맵 유닛들의 데이터 맵 유닛들만을, 제 1 순서 및 제 2 순서에 따라, 복구하도록 인에이블된 제 5 하드웨어 로직 회로를 더 포함한다.
EC130) 장치로서,
스토리지 스트림에 따라 비휘발성 메모리(NVM)에 복수의 스토리지 유닛들을 기록하도록 인에이블된 제 1 하드웨어 로직 회로 ―스토리지 유닛들 각각은 데이터 부분 및 대응하는 타임스탬프 부분을 포함함―;
맵 스트림에 따라 NVM에 복수의 맵 유닛들을 기록하도록 인에이블된 제 2 하드웨어 로직 회로 ―맵 유닛들 각각은 엔트리 부분 및 대응하는 타임스탬프 부분을 포함함―를 포함하고,
엔트리 부분들 중 적어도 일부 각각은, 데이터 부분들 중 적어도 대응하는 데이터 부분을 특정함으로써 각각의 논리 블록(LB)들이 NVM에서 어디에 기록되는지 결정할 수 있게 하고,
타임스탬프 부분들에 의해 시간적 순서가 표시되고, 스토리지 유닛 타임스탬프 부분들은 서로에 관하여 타임스탬프 순서에 따라 단조적으로 증가하며, 맵 유닛 타임스탬프 부분들은 서로에 관하여 타임스탬프 순서에 따라 단조적으로 증가하고,
NVM에 기록된 맵 유닛들 중 적어도 하나가, 시간적 순서에 따라, 특정한 시점에서 NVM에 기록된 최근의 스토리지 유닛 타임스탬프 부분들 보다 시간적 순서에 따라 나중인 타임스탬프 부분을 가질 때 적어도 하나의 특정한 시점이 존재한다.
EC131) EC130의 장치에 있어서, 제 1 하드웨어 로직 회로의 적어도 일부는, 또한 제 2 하드웨어 로직 회로의 적어도 일부인 공유된 하드웨어 로직 회로이다.
EC132) EC130의 장치에 있어서, 제 1 하드웨어 로직 회로는 스토리지 유닛 타임스탬프 부분들에 의해 표시될 때의 시간적 순서에 대응하는 시간 순서로 스토리지 유닛들을 기록하고, 제 2 하드웨어 로직 회로는 맵 유닛 타임스탬프 부분들에 의해 표시될 때의 시간적 순서에 대응하는 시간 순서로 맵 유닛들을 기록한다.
EC133) EC130의 장치에 있어서, 체크포인트 스트림에 따라 NVM에 하나 또는 그 초과의 체크포인트 유닛들을 기록하도록 인에이블된 제 3 하드웨어 로직 회로를 더 포함하고, 체크포인트 유닛들 각각은 맵 부분 및 대응하는 타임스탬프 부분을 포함하고, 체크포인트 타임스탬프 부분들은 서로에 관하여 타임스탬프 순서에 따라 단조적으로 증가한다.
EC134) EC133의 장치에 있어서, 제 3 하드웨어 로직 회로는 체크포인트 타임스탬프 부분들에 의해 표시될 때의 시간적 순서에 대응하는 시간 순서로 체크포인트 유닛들을 기록한다.
EC135) EC133의 장치에 있어서, 미리결정된 수의 체크포인트 유닛들의 인접한 그룹은 엔트리 부분들이 따르는 적어도 맵의 전체 체크포인트를 포함한다.
EC136) 스토리지 인터페이스 표준을 갖거나 이를 참조하는 임의의 상술한 EC들로서, 스토리지 인터페이스 표준은,
USB(Universal Serial Bus) 인터페이스 표준,
CF(Compact Flash) 인터페이스 표준,
MMC(MultiMediaCard) 인터페이스 표준,
eMMC(an embedded MMC) 인터페이스 표준,
썬더볼트 인터페이스 표준,
UFS 인터페이스 표준,
SD(Secure Digital) 인터페이스 표준,
메모리 스틱 인터페이스 표준,
xD-픽처 카드 인터페이스 표준,
IDE(Integrated Drive Electronics) 인터페이스 표준,
SATA(Serial Advanced Technology Attachment) 인터페이스 표준,
eSATA(external SATA) 인터페이스 표준,
SCSI(Small Computer System Interface) 인터페이스 표준,
SAS(Serial Attached Small Computer System Interface) 인터페이스 표준,
파이버 채널 인터페이스 표준,
이더넷 인터페이스 표준, 및
PCIe(Peripheral Component Interconnect express) 인터페이스 표준 중 하나 또는 그 초과의 것을 포함한다.
EC137) 플래시 메모리 인터페이스를 갖거나 이를 참조하는 임의의 상술한 EC들로서, 플래시 메모리 인터페이스는,
오픈 NAND 플래시 인터페이스(ONFI),
토글 모드 인터페이스,
DDR(Double-Data-Rate) 동기 인터페이스,
DDR2 동기 인터페이스,
동기 인터페이스, 및
비동기 인터페이스 중 하나 또는 그 초과의 것과 호환가능하다.
EC138) 컴퓨팅 호스트를 갖거나 이를 참조하는 임의의 상술한 EC들로서, 컴퓨팅 호스트는,
컴퓨터,
워크스테이션 컴퓨터,
서버 컴퓨터,
스토리지 서버,
SAN(Storage Attached Network ),
NAS(Network Attached Storage) 디바이스,
DAS(Direct Attached Storage) 디바이스,
스토리지 어플라이언스(storage appliance),
개인 컴퓨터(PC),
랩탑 컴퓨터,
노트북 컴퓨터,
넷북 컴퓨터,
태블릿 디바이스 또는 컴퓨터,
울트라북 컴퓨터,
전자 판독 디바이스(e-리더),
휴대 보조 단말기(PDA),
네비게이션 시스템,
(핸드헬드) GPS(Global Positioning System) 디바이스,
오토모티브 제어 시스템,
오토모티브 매체 제어 시스템 또는 컴퓨터,
프린터, 복사기 또는 팩스 머신 또는 일체형(all-in-one) 디바이스,
POS(Point Of Sale) 디바이스,
캐시-레지스터,
매체 플레이어,
텔레비전,
매체 리코더,
DVR(Digital Video Recorder),
디지털 카메라,
셀룰러 핸드셋,
코드리스 전화 핸드셋, 및
전자 게임 중 하나 또는 그 초과의 것을 포함한다.
EC139) 적어도 하나의 플래시 메모리를 갖거나 이를 참조하는 임의의 상술한 EC들로서, 적어도 하나의 플래시 메모리의 적어도 일부는,
NAND 플래시 기술 스토리지 셀들, 및
NOR 플래시 기술 스토리지 셀들 중 하나 또는 그 초과의 것을 포함한다.
EC140) 적어도 하나의 플래시 메모리를 갖거나 이를 참조하는 임의의 상술한 EC들로서, 적어도 하나의 플래시 메모리의 적어도 일부는,
단일 레벨 셀(SLC) 플래시 스토리지 저장 셀들, 및
멀티 레벨 셀(MLC) 플래시 기술 스토리지 셀들 중 하나 또는 그 초과의 것을 포함한다.
EC141) 적어도 하나의 플래시 메모리를 갖거나 이를 참조하는 임의의 상술한 EC들로서, 적어도 하나의 플래시 메모리의 적어도 일부는,
폴리실리콘 기술 기반 전하 스토리지 셀들, 및
실리콘 질화물 기술 기반 전하 스토리지 셀들 중 하나 또는 그 초과의 것을 포함한다.
EC142) 적어도 하나의 플래시 메모리를 갖거나 이를 참조하는 임의의 상술한 EC들로서, 적어도 하나의 플래시 메모리의 적어도 일부는,
2차원 기술 기반 플래시 메모리 기술, 및
3차원 기술 기반 플래시 메모리 기술 중 하나 또는 그 초과의 것을 포함한다.
시스템
일부 실시예들에서, SSD와 같은 I/O 디바이스들은 SSD 제어기를 포함한다. SSD 제어기는 SSD의 호스트 인터페이스와 NVM 사이의 브리지로서 작용하고, SSD의 호스트 인터페이스를 통해 컴퓨팅 호스트로부터 전송된 호스트 프로토콜의 커맨드들을 실행한다. 커맨드들 중 적어도 일부는 SSD에게 컴퓨팅 호스트로부터 그리고 컴퓨팅 호스트로 각각 전송된 데이터로 NVM을 기록 및 판독하도록 지시한다. 추가의 실시예들에서, SSD 제어기는 호스트 프로토콜의 LBA들과 NVM에서의 물리적 스토리지 어드레스들 사이를 변환(translate)하는데 맵을 사용하도록 인에이블된다. 추가의 실시예들에서, 맵의 적어도 일부는 I/O 디바이스의 사설 스토리지(컴퓨팅 호스트에는 보이지 않음)를 위해 사용된다. 예를 들어, 컴퓨팅 호스트에 의해 액세스불가능한 LBA들의 부분이 로그들, 통계들, 또는 다른 사설 데이터에 대한 액세스를 관리하기 위해 I/O 다바이스에 의해 사용된다.
일부 실시예들에서, NVM에서의 가변 사이즈 양자들의 압축된 데이터에 액세스하는 것은 일부 사용 시나리오들에서 개선된 스토리지 효율을 제공한다. 예를 들어, SSD 제어기는 (예를 들어, 디스크 기록 커맨드에 관하여) 컴퓨팅 호스트로부터 (압축해제된) 데이터를 수신하고, 데이터를 압축하며, 압축된 데이터를 플래시 메모리에 저장한다. (예를 들어, 디스크 판독 커맨드에 관한) 컴퓨팅 호스트로부터의 후속 요청에 응답하여, SSD 제어기는 플래시 메모리로부터의 압축된 데이터를 판독하고, 압축된 데이터를 압축해제하여, 압축해제된 데이터를 컴퓨팅 호스트에 제공한다. 압축된 데이터는 가변 사이즈 양자들에 따라 플래시 메모리에 저장되고, 양자들 사이즈는 예를 들어, 압축 알고리즘, 동작 모드, 및 다양한 데이터에 대한 압축 효율성으로 인해 변한다. SSD 제어기는 헤더(들)가 플래시 메모리에서 어디에 저장되는지를 결정하기 위해 포함된 맵 테이블을 컨설팅함으로써 부분적으로 데이터를 압축해제한다. SSD 제어기는 적절한 (압축된) 데이터가 플래시 메모리에서 어디에 저장되는지를 결정하기 위해 플래시 메모리로부터 획득된 헤더(들)를 분석한다. SSD 제어기는 압축해제된 데이터를 생성하여 컴퓨팅 호스트에 제공하기 위해 플래시 메모리로부터의 적절한 데이터를 압축해제한다. 본 출원에서, 압축해제(uncompress)(및 그것의 변형들)는 비압축(decompress)(및 그것의 변형들)과 동의어이다.
다양한 실시예들에서, SSD 제어기는 컴퓨팅 호스트와 인터페이싱하기 위한 호스트 인터페이스, 플래시 메모리와 같은 NVM과 인터페이싱하기 위한 인터페이스, 및 인터페이스들을 제어하고 압축 및 압축해제뿐 아니라, 하위-레벨 리던던시 및/또는 에러 정정, 상위-레벨 리던던시 및/또는 에러 정정 및 독립적 실리콘 엘리먼트들을 통한 동적 상위-레벨 리던던시 모드 관리를 수행하기 위한 (그리고/또는 수행의 다양한 양상들을 제어하기 위한) 회로를 포함한다.
다양한 실시예들에 따르면, 일부 호스트 인터페이스들은 USB 인터페이스 표준, CF 인터페이스 표준, MMC 인터페이스 표준, eMMC 인터페이스 표준, 썬더볼트(Thunderbolt) 인터페이스 표준, UFS 인터페이스 표준, SD 인터페이스 표준, 메모리 스틱 인터페이스 표준, xD-화상 카드 인터페이스 표준, IDE 인터페이스 표준, SATA 인터페이스 표준, SCSI 인터페이스 표준, SAS 인터페이스 표준 및 PCIe 인터페이스 표준 중 하나 또는 그 초과의 것과 호환가능하다. 다양한 실시예들에 따르면, 컴퓨팅 호스트는 컴퓨터, 워크스테이션 컴퓨터, 서버 컴퓨터, 스토리지 서버, SAN, NAS 디바이스, DAS 디바이스, 스토리지 어플라이언스(storage appliance), PC, 랩톱 컴퓨터, 노트북 컴퓨터, 넷북 컴퓨터, 태블릿 디바이스 또는 컴퓨터, 울트라북 컴퓨터, (e-리더와 같은) 전자 판독 디바이스, PDA, 네비게이션 시스템, (핸드헬드) GPS 디바이스, 오토모티브 제어 시스템, 오토모티브 매체 제어 시스템 또는 컴퓨터, 프린터, 복사기 또는 팩스 머신 또는 일체형 디바이스, POS 디바이스, 캐시-레지스터, 매체 플레이어, 텔레비전, 매체 리코더, DVR, 디지털 카메라, 셀룰러 핸드셋, 코드리스 전화 핸드셋 및 전자 게임의 전부 또는 임의의 부분들이다. 일부 실시예들에서, (SAS/SATA 브리지와 같은) 인터페이싱 호스트는 컴퓨팅 호스트 및/또는 컴퓨팅 호스트에 대한 브리지로서 동작한다.
다양한 실시예들에서, SSD 제어기는 하나 또는 그 초과의 프로세서들을 포함한다. 프로세서들은 SSD 제어기의 동작을 제어 및/또는 수행하도록 펌웨어를 실행한다. SSD 제어기는 커맨드들 및/또는 상태뿐 아니라 데이터를 송신하고 수신하기 위해 컴퓨팅 호스트와 통신한다. 컴퓨팅 호스트는 운영 시스템, 드라이버 및 애플리케이션 중 하나 또는 그 초과의 것을 실행한다. 컴퓨팅 호스트에 의한 SSD 제어기와의 통신은 옵션으로 그리고/또는 선택적으로 드라이버 및/또는 애플리케이션을 통해 이루어진다. 제 1 예에서, SSD 제어기에 대한 모든 통신은 드라이버를 통해 이루어지며, 애플리케이션은 드라이버가 SSD 제어기에 대한 특정 커맨드들로 변환하는 상위-레벨 커맨드들을 드라이버에 제공한다. 제 2 예에서, 드라이버는 바이패스 모드를 구현하며 애플리케이션은 드라이버를 통해 SSD 제어기에 특정 커맨드들을 송신하는 것이 가능하다. 제 3 예에서, PCIe SSD 제어기는 하나 또는 그 초과의 가상 함수들(VFs)을 지원하며, 일단 구성되면, 애플리케이션은 드라이버를 바이패싱하여, SSD 제어기와 직접 통신할 수 있게 된다.
다양한 실시예들에 따르면, 일부 SSD들은 HDD들, CD 드라이브들 및 DVD 드라이브들과 같은 자기 및/또는 광학 비휘발성 스토리지에 의해 이용되는 폼-팩터들, 전기적 인터페이스들 및/또는 프로토콜들과 호환가능하다. 다양한 실시예들에서, SSD들은 제로 또는 그 초과의 패리티 코드들, 제로 또는 그 초과의 RS 코드들, 제로 또는 그 초과의 BCH 코드들, 제로 또는 그 초과의 비터비(Viterbi) 또는 다른 트렐리스(trellis) 코드들 및 제로 또는 그 초과의 LDPC 코드들의 다양한 조합들을 이용한다.
도 1a는 플래시 메모리들과 같은 비휘발성 스토리지를 관리하기 위해 셀프-저널링(self-journaling) 및 계층적 일치성을 사용하는 SSD 제어기를 포함하는 SSD(101)의 실시예의 선택된 상세사항들을 예시한다. SSD 제어기는 예컨대 NVM 엘리먼트들(예를 들어, 플래시 메모리들)을 통해 구현되는, 비휘발성 스토리지를 관리하기 위한 것이다. SSD 제어기(100)는 호스트(도시되지 않음)에 하나 또는 그 초과의 외부 인터페이스들(110)을 통해 통신가능하게 커플링된다. 다양한 실시예들에 따르면, 외부 인터페이스들(110)은: SATA 인터페이스; SAS 인터페이스; PCIe 인터페이스; 파이버 채널 인터페이스; (10 기가비트 이더넷과 같은) 이더넷 인터페이스; 선행하는 인터페이스들 중 임의의 것의 비-표준 버전; 커스텀(custom) 인터페이스; 또는 스토리지 및/또는 통신들 및/또는 컴퓨팅 디바이스들을 상호접속하기 위해 이용된 임의의 다른 타입의 인터페이스 중 하나 또는 그 초과의 것이다. 예를 들어, 일부 실시예들에서, SSD 제어기(100)는 SATA 인터페이스 및 PCIe 인터페이스를 포함한다.
SSD 제어기(100)는, 하나 또는 그 초과의 디바이스 인터페이스들(190)을 통해, 하나 또는 그 초과의 인스턴스들(instances)의 플래시 디바이스(192)와 같은 하나 또는 그 초과의 스토리지 디바이스들을 포함하는 NVM(199)에 추가로 통신가능하게 커플링된다. 다양한 실시예들에 따르면, 디바이스 인터페이스들(190)은: 비동기 인터페이스; 동기 인터페이스; 단일-데이터-레이트(SDR) 인터페이스; 더블-데이터-레이트(DDR) 인터페이스; DRAM-호환성 DDR 또는 DDR2 동기 인터페이스; ONFI 2.2 또는 ONFI 3.0 호환가능한 인터페이스와 같은 ONFI 호환가능한 인터페이스; 토글-모드 호환가능한 플래시 인터페이스; 선행하는 인터페이스들 중 임의의 것의 비-표준 버전; 커스텀 인터페이스; 또는 스토리지 디바이스들에 접속하기 위해 이용된 임의의 다른 타입의 인터페이스 중 하나 또는 그 초과의 것이다.
플래시 디바이스(192) 각각은 일부 실시예들에서, 하나 또는 그 초과의 개별 플래시 다이(194)를 갖는다. 플래시 디바이스(192) 중 특정한 하나의 타입에 따르면, 특정 플래시 디바이스(192)에서의 복수의 플래시 다이(194)가 옵션으로 그리고/또는 선택적으로 병렬로 액세스가능하다. 플래시 디바이스(192)는 단지 SSD 제어기(100)에 통신가능하게 커플링하는 것이 가능한 일 타입의 스토리지 디바이스를 나타낸다. 다양한 실시예들에서, SLC NAND 플래시 메모리, MLC NAND 플래시 메모리, NOR 플래시 메모리, 폴리실리콘 또는 실리콘 질화물 기술-기반 전하 스토리지 셀들을 이용하는 플래시 메모리, 2- 또는 3-차원 기술-기반 플래시 메모리, 판독-전용 메모리, 정적 랜덤 액세스 메모리, 동적 랜덤 액세스 메모리, 강자성체 메모리, 위상-변경 메모리, 레이스트랙(racetrack) 메모리, ReRAM 또는 임의의 다른 타입의 메모리 디바이스 또는 스토리지 매체와 같은 임의의 타입의 스토리지 디바이스가 이용가능하다.
다양한 실시예들에 따르면, 디바이스 인터페이스들(190)은 버스 당 하나 또는 그 초과의, 플래시 디바이스(192)의 인스턴스들을 갖는 하나 또는 그 초과의 버스들; 버스 당 하나 또는 그 초과의, 플래시 디바이스(192)의 인스턴스들을 갖는 버스들의 하나 또는 그 초과의 그룹들 ―그룹에서의 버스들은 일반적으로 병렬로 액세스됨―; 또는 디바이스 인터페이스들(190)상에 하나 또는 그 초과의, 플래시 디바이스(192)의 인스턴스들의 임의의 다른 구조(organization)로서 구조화된다.
도 1a에 계속하여, SSD 제어기(100)는 호스트 인터페이스들(111), 데이터 프로세싱(data processing)(121), 버퍼(131), 맵(141), 리사이클러(151), ECC(161), 디바이스 인터페이스 로직(191) 및 CPU(171)와 같은 하나 또는 그 초과의 모듈들을 갖는다. 도 1a에 도시된 특정 모듈들 및 상호접속들은 단지 일 실시예를 나타내며, 예시되지 않은 추가의 모듈들뿐만 아니라 상기 모듈들의 일부 또는 전부의 다수의 배열들(arrangements) 및 상호접속들이 구상된다. 제 1 예에서, 일부 실시예들에서, 듀얼-포팅(dual-porting)을 제공하기 위해 2개 또는 그 초과의 호스트 인터페이스들(111)이 존재한다. 제 2 예에서, 일부 실시예들에서, 데이터 프로세싱(121) 및/또는 ECC(161)가 버퍼(131)와 조합된다. 제 3 예에서, 일부 실시예들에서, 호스트 인터페이스들(111)이 직접 버퍼(131)에 커플링되며, 데이터 프로세싱(121)은 옵션으로 그리고/또는 선택적으로, 버퍼(131)에 저장된 데이터에 대해 동작한다. 제 4 예에서, 일부 실시예들에서, 디바이스 인터페이스 로직(191)은 버퍼(131)에 직접 커플링되며, ECC(161)는 옵션으로 그리고/또는 선택적으로, 버퍼(131)에 저장된 데이터에 대해 동작한다.
호스트 인터페이스들(111)은 외부 인터페이스들(110)을 통해 커맨드들 및/또는 데이터를 송신하고 수신하며, 일부 실시예들에서, 태그 트래킹(113)을 통해 개별 커맨드들의 진행을 트래킹한다. 예를 들어, 커맨드들은 판독할 (다수의 LBA 양자들, 예를 들어, 섹터들과 같은) 데이터의 양 및 (LBA와 같은) 어드레스를 특정하는 판독 커맨드를 포함한다; 이에 응답하여, SSD는 판독 상태 및/또는 판독 데이터를 제공한다. 다른 예에서, 커맨드들은 기록할 (다수의 LBA 양자들, 예를 들어, 섹터들과 같은) 데이터의 양 및 (LBA와 같은) 어드레스를 특정하는 기록 커맨드를 포함한다; 이에 응답하여, SSD는 기록 상태를 제공하고 그리고/또는 기록 데이터를 요청하며 옵션으로 후속하여 기록 상태를 제공한다. 또 다른 예에서, 커맨드들은 더 이상 할당될 필요가 없는 (하나 또는 그 초과의 LBA들과 같은) 하나 또는 그 초과의 어드레스들을 특정하는 할당해제(de-allocation) 커맨드(예를 들어, 트림(trim) 커맨드)를 포함한다; 이에 응답하여, SSD는 그에 맞춰(accordingly) 맵을 수정하며 옵션으로 할당-해제 상태를 제공한다. 일부 컨텍스트들에서, ATA 호환가능한 TRIM 커맨드는 예시적인 할당-해제 커맨드이다. 또 다른 예에서, 커맨드들은 수퍼 커패시터 테스트 커맨드 또는 데이터 경화 성공 질문(data hardening success query)을 포함한다; 이에 응답하여, SSD는 적절한 상태를 제공한다. 일부 실시예들에서, 호스트 인터페이스들(111)은 SATA 프로토콜과 호환가능하며, NCQ 커맨드들을 이용하여, 각각이 0 내지 31의 숫자로 표현된 고유한 태그를 갖는 최대 32개의 계류중인 커맨드들을 갖는 것이 가능해진다. 일부 실시예들에서, 태그 트래킹(113)은 SSD 제어기(100)에 의한 프로세싱 동안 커맨드를 트래킹하기 위해 이용된 내부 태그와, 외부 인터페이스들(110)을 통해 수신된 커맨드에 대한 외부 태그를 연관시키는 것이 가능하다.
다양한 실시예들에 따르면, 하나 또는 그 초과의 것은 다음과 같다 : 데이터 프로세싱(121)은 옵션으로 그리고/또는 선택적으로 버퍼(131)와 외부 인터페이스들(110) 사이에 송신된 일부 또는 모든 데이터를 프로세싱한다; 그리고 데이터 프로세싱(121)은 옵션으로 그리고/또는 선택적으로, 버퍼(131)에 저장된 데이터를 프로세싱한다. 일부 실시예들에서, 데이터 프로세싱(121)은: 포맷팅; 리포맷팅; 트랜스코딩; 및 임의의 다른 데이터 프로세싱 및/또는 조작 태스크 중 하나 또는 그 초과의 것을 수행하기 위해 하나 또는 그 초과의 엔진들(123)을 이용한다.
버퍼(131)는 디바이스 인터페이스들(190)로부터 외부 인터페이스들(110)로 및/또는 외부 인터페이스들(110)로부터 디바이스 인터페이스들(190)로 전송된 데이터를 저장한다. 일부 실시예들에서, 버퍼(131)는 하나 또는 그 초과의, 플래시 디바이스(192)의 인스턴스들을 관리하기 위해 SSD 제어기(100)에 의해 사용된 맵 테이블들 중 일부 또는 모두와 같은 시스템 데이터를 추가로 저장한다. 다양한 실시예들에서, 버퍼(131)는 데이터의 임시 스토리지를 위해 사용된 메모리(137), 버퍼(131)로 및/또는 버퍼(131)로부터의 데이터의 이동을 제어하기 위해 사용된 DMA(133), 상위 레벨 에러 정정 및/또는 리던던시 기능들을 제공하기 위해 사용된 ECC-X(135), 및 다른 데이터 이동 및/또는 조작 기능들 중 하나 또는 그 초과를 갖는다. 상위 레벨 리던던시 기능의 일례가 디스크 레벨 대신 플래시 디바이스 레벨(예를 들어, 플래시 디바이스(192)의 다수의 플래시 디바이스들) 및/또는 플래시 다이 레벨(예를 들어, 플래시 다이(194))에서의 리던던시를 갖는, RAID형 능력(예를 들어, RASIE)이다.
다양한 실시예들에 따르면, 하나 또는 그 초과의 것은 다음과 같다: ECC(161)는 옵션으로 그리고/또는 선택적으로, 버퍼(131)와 디바이스 인터페이스들(190) 사이에 송신된 일부 또는 모든 데이터를 프로세싱하며; 그리고 ECC(161)는 옵션으로 그리고/또는 선택적으로, 버퍼(131)에 저장된 데이터를 프로세싱한다. 일부 실시예들에서, ECC(161)는, 예컨대 하나 또는 그 초과의 ECC 기술들에 따라, 하위-레벨 에러 정정 및/또는 리던던시 기능들을 제공하기 위해 이용된다. 일부 실시예들에서, ECC(161)는: CRC 코드; 해밍 코드; RS 코드; BCH 코드; LDPC 코드; 비터비 코드; 트렐리스 코드; 하드-결정(hard-decision) 코드; 소프트-결정(soft-decision) 코드; 소거-기반 코드; 임의의 에러 검출 및/또는 정정 코드; 및 전술한 것의 임의의 조합 중 하나 또는 그 초과의 것을 구현한다. 일부 실시예들에서, ECC(161)는 (LDPC 디코더들과 같은) 하나 또는 그 초과의 디코더들을 포함한다.
디바이스 인터페이스 로직(191)은 디바이스 인터페이스들(190)을 통해 플래시 디바이스(192)의 인스턴스들(instances)을 제어한다. 디바이스 인터페이스 로직(191)은 플래시 디바이스(192)의 프로토콜에 따라 플래시 디바이스(192)의 인스턴스들에/인스턴스들로부터 데이터를 송신하는 것이 가능해진다. 디바이스 인터페이스 로직(191)은 디바이스 인터페이스들(190)을 통해 플래시 디바이스(192)의 인스턴스들의 제어를 선택적으로 시퀀싱하기 위한 스케줄링(193)을 포함한다. 예를 들어, 일부 실시예들에서, 스케줄링(193)은 플래시 디바이스(192)의 인스턴스들에 대한 동작들을 큐잉하고, 그리고 플래시 디바이스(192)(또는 플래시 다이(194))의 인스턴스들의 각각의 것들이 이용가능함에 따라 플래시 디바이스(192)(또는 플래시 다이(194))의 인스턴스들의 각각의 것들에 동작들을 선택적으로 송신하는 것이 가능해진다.
맵(141)은, NVM(199)에서의 위치들로 외부 데이터 어드레스들을 매핑하기 위해 테이블(143)을 이용하여, 디바이스 인터페이스들(190) 상에 이용된 데이터 어드레싱과 외부 인터페이스들(110) 상에 이용된 데이터 어드레싱 사이에서 변환한다. 예를 들어, 일부 실시예들에서, 맵(141)은 외부 인터페이스들(110) 상에 이용된 LBA들을 테이블(143)에 의해 제공된 매핑을 통해, 하나 또는 그 초과의 플래시 다이(194)를 목표로 하는 블록 및/또는 페이지 어드레스들로 변환한다. 드라이브 제조 또는 할당해제 이후로는 전혀 기록되지 않은 LBA들에 대해, 맵은 LBA들이 판독되는 경우에 리턴하기 위한 디폴트 값을 지시한다(point to). 예를 들어, 할당 해제 커맨드를 프로세싱할 때, 할당 해제된 LBA들에 대응하는 엔트리들(entries)이 디폴트 값들 중 하나를 지시하도록 맵이 수정된다. 다양한 실시예들에서, 다양한 디폴트 값들이 존재하며, 이 각각은 대응하는 포인터를 갖는다. 복수의 디폴트 값들은 하나의 디폴트 값으로서 (예컨대 제 1 범위에서) 일부 할당해제된 LBA들을 판독하는 것을 가능하게 하는 한편, 다른 디폴트 값으로서 (예컨대 제 2 범위에서) 다른 할당해제된 LBA들을 판독하는 것을 가능하게 한다. 다양한 실시예들에서, 디폴트 값들은 플래시 메모리, 하드웨어, 펌웨어, 커맨드 및/또는 원시 인수들(primitive arguments) 및/또는 파라미터들, 프로그램가능한 레지스터들 또는 이들의 다양한 조합들에 의해 정의된다.
일부 실시예들에서, 맵(141)은 외부 인터페이스들(110) 상에 이용된 어드레스들과 디바이스 인터페이스들(190) 상에 이용된 데이터 어드레싱 간의 변환들을 수행하고 그리고/또는 검색(look up)하기 위해 테이블(143)을 이용한다. 다양한 실시예들에 따르면, 테이블(143)은: 1-레벨 맵; 2-레벨 맵; 멀티-레벨 맵; 맵 캐시(cache); 압축된 맵; 하나의 어드레스 공간으로부터 다른 공간으로의 임의의 타입의 매핑; 및 전술한 것의 임의의 조합 중 하나 또는 그 초과의 것이다. 다양한 실시예들에 따르면, 테이블(143)은: 정적 랜덤 액세스 메모리; 동적 랜덤 액세스 메모리; (플래시 메모리와 같은) NVM; 캐시 메모리; 온-칩 메모리; 오프-칩 메모리; 및 전술한 것의 임의의 조합 중 하나 또는 그 초과의 것을 포함한다.
일부 실시예들에서, 리사이클러(151)는 가비지(garbage) 수집을 수행한다. 예를 들어, 일부 실시예들에서, 플래시 디바이스(192)의 인스턴스들은 블록들이 재-기록가능하기 전에 소거되어야 하는 블록들을 포함한다. 리사이클러(151)는, 예컨대 맵(141)에 의해 유지된 맵을 스캐닝함으로써, 플래시 디바이스(192)의 인스턴스들의 어느 부분들이 활성으로 사용중인지(예를 들어, 할당-해제되는 대신 할당되는지)를 결정하고, 그리고 비사용 부분들을 소거함으로써 플래시 디바이스(192)의 인스턴스들의 비사용(예를 들어, 할당해제되는) 부분들을 기록을 위해 이용가능하게 하는 것이 가능하다. 추가적인 실시예들에서, 리사이클러(151)는 플래시 디바이스(192)의 인스턴스들 내에 저장된 데이터를 이동시켜, 플래시 디바이스(192)의 인스턴스들의 더 큰 인접한 부분들이 기록을 위해 이용가능하게 하는 것이 가능하다.
일부 실시예들에서, 플래시 디바이스(192)의 인스턴스들은 서로 다른 타입들 및/또는 특성들의 데이터를 저장하기 위한 하나 또는 그 초과의 대역들을 갖기 위해 선택적으로 그리고/또는 동적으로 구성되고, 관리되며 그리고/또는 이용된다. 대역들의 수, 배열, 크기 및 타입은 동적으로 변경가능하다. 예를 들어, 컴퓨팅 호스트로부터의 데이터가 핫(활성) 대역으로 기록되는 한편, 리사이클러(151)로부터의 데이터는 콜드(덜 활성인) 대역에 기록된다. 일부 사용 시나리오들에서, 컴퓨팅 호스트가 긴 시퀀셜 스트림(sequential stream)을 기록하는 경우, 핫 밴드의 크기가 성장하는 반면, 컴퓨팅 호스트가 랜덤한 기록을 하거나 또는 소수의(few) 기록들을 행하는 경우에는, 콜드 대역의 크기가 성장한다.
CPU(171)는 SSD 제어기(100)의 다양한 부분들을 제어한다. CPU(171)는 CPU 코어(172)를 포함한다. 다양한 실시예들에 따라, CPU 코어(172)는 하나 또는 그 초과의 단일-코어 또는 멀티-코어 프로세서들이다. 일부 실시예들에서, CPU 코어(172)에서의 개별 프로세서 코어들은 멀티-쓰레드된다(multi-threaded). CPU 코어(172)는 명령 및/또는 데이터 캐시들 및/또는 메모리들을 포함한다. 예를 들어, 명령 메모리는 CPU 코어(172)로 하여금 SSD 제어기(100)를 제어하기 위해 프로그램들(예를 들어, 때때로 펌웨어로 칭하는 소프트웨어)을 실행할 수 있게 하기 위한 명령들을 포함한다. 일부 실시예들에서, CPU 코어(172)에 의해 실행된 펌웨어 중 일부 또는 모두는 (예를 들어, 도 1b에서 NVM(199)의 펌웨어(106)로서 예시된 바와 같이) 플래시 디바이스(192)의 인스턴스들상에 저장된다.
다양한 실시예들에서, CPU(171)는: 커맨드들이 진행중인 동안 외부 인터페이스들(110)을 통해 수신된 커맨드들을 트래킹하고 제어하기 위한 커맨드 관리(173); 버퍼(131)의 할당 및 이용을 제어하기 위한 버퍼 관리(175); 맵(141)을 제어하기 위한 변환 관리(177); 데이터 어드레싱의 일치성을 제어하고, 예컨대 외부 데이터 액세스들과 리사이클 데이터 액세스들 사이의 충돌들을 회피하기 위한 코히런시 관리(179); 디바이스 인터페이스 로직(191)을 제어하기 위한 디바이스 관리(181); 식별 정보의 수정 및 통신을 제어하기 위한 아이덴티티 관리(182), 및 옵션으로 다른 관리 유닛들을 더 포함한다. 다양한 실시예들에 따르면, CPU(171)에 의해 수행된 관리 기능들 중 그 어느 것도 하드웨어에 의해, (외부 인터페이스들(110)을 통해 접속된 호스트 상에 또는 CPU 코어(172) 상에 실행하는 펌웨어와 같은) 소프트웨어에 의해, 또는 이들의 임의의 조합에 의해 제어 및/또는 관리되지 않거나; 또는 CPU(171)에 의해 수행된 관리 기능들 중 임의의 것 또는 그 전부가, 하드웨어에 의해, (외부 인터페이스들(110)을 통해 접속된 호스트 상에 또는 CPU 코어(172) 상에 실행하는 펌웨어와 같은) 소프트웨어에 의해, 또는 이들의 임의의 조합에 의해 제어 및/또는 관리된다.
일부 실시예들에서, CPU(171)는 다른 관리 태스크들, 예컨대, 성능 통계들을 수집하고 그리고/또는 보고하는 것; SMART를 구현하는 것; 전력 시퀀싱을 제어하는 것, 전력 소모를 제어하는 것 및/또는 모니터링하는 것 및/또는 조정하는 것; 전력 실패들에 응답하는 것; 클록 레이트들을 제어하는 것 및/또는 모니터링하는 것 및/또는 조정하는 것; 및 다른 관리 태스크들 중 하나 또는 그 초과의 것을 수행하는 것이 가능하다.
다양한 실시예들은, SSD 제어기(100)와 유사하며, 예컨대 호스트 인터페이스들(111) 및/또는 외부 인터페이스들(110)의 적응을 통해 다양한 컴퓨팅 호스트들과의 동작과 호환가능한 컴퓨팅-호스트 플래시 메모리 제어기를 포함한다. 다양한 컴퓨팅 호스트들은 컴퓨터, 워크스테이션 컴퓨터, 서버 컴퓨터, 스토리지 서버, SAN, NAS 디바이스, DAS 디바이스, 스토리지 어플라이언스, PC, 랩톱 컴퓨터, 노트북 컴퓨터, 넷북 컴퓨터, 태블릿 디바이스 또는 컴퓨터, 울트라북 컴퓨터, (e-리더와 같은) 전자 판독 디바이스, PDA, 네비게이션 시스템, (핸드헬드) GPS 디바이스, 오토모티브 제어 시스템, 오토모티브 매체 제어 시스템 또는 컴퓨터, 프린터, 복사기 또는 팩스 머신 또는 일체형 디바이스, POS 디바이스, 캐시-레지스터, 매체 플레이어, 텔레비전, 매체 리코더, DVR, 디지털 카메라, 셀룰러 핸드셋, 코드리스 전화 핸드셋 및 전자 게임 중 하나 또는 이들의 임의의 조합을 포함한다.
다양한 실시예들에서, SSD 제어기(또는 컴퓨팅-호스트 플래시 메모리 제어기)의 전부 또는 임의의 부분들은 단일 IC, 멀티-다이 IC의 단일 다이, 멀티-다이 IC의 복수의 다이들, 또는 복수의 IC들 상에 구현된다. 예를 들어, 버퍼(131)는 SSD 제어기(100)의 다른 엘리먼트들과 동일한 다이 상에 구현된다. 다른 예에서, 버퍼(131)는 SSD 제어기(100)의 다른 엘리먼트들과 서로 다른 다이 상에 구현된다.
도 1b는 도 1a의 SSD의 하나 또는 그 초과의 인스턴스들을 포함하는 시스템들의 다양한 실시예들의 선택된 상세사항들을 예시한다. SSD(101)는 디바이스 인터페이스들(190)을 통해 NVM(199)에 커플링된 SSD 제어기(100)를 포함한다. 도면은 실시예들의 다양한 클래스들을 도시한다: 호스트에 직접 커플링되는 단일 SSD, 각각의 외부 인터페이스들을 통해 호스트에 직접 각각 개별적으로 커플링되는 복수의 SSD들, 및 다양한 상호접속 엘리먼트들을 통해 호스트에 간접적으로 커플링되는 하나 또는 그 초과의 SSD들.
호스트에 직접 커플링된 단일 SSD의 예시적인 실시예로서, SSD(101)의 하나의 인스턴스가 외부 인터페이스들(110)을 통해 호스트(102)에 직접 커플링된다(예를 들어, 스위치/패브릭/중간 제어기(103)가 생략되거나, 스위치/패브릭/중간 제어기(103)가 바이패스되거나, 또는 스위치/패브릭/중간 제어기(103)가 패스-쓰루된다). 각각의 외부 인터페이스들을 통해 각각이 호스트에 직접 커플링되는 복수의 SSD들의 예시적인 실시예로서, SSD(101)의 복수의 인스턴스들 각각은 외부 인터페이스들(110)의 각각의 인스턴스를 통해 호스트(102)에 직접 각각 커플링된다(예를 들어, 스위치/패브릭/중간 제어기(103)가 생략되거나, 스위치/패브릭/중간 제어기(103)가 바이패스되거나, 또는 스위치/패브릭/중간 제어기(103)가 패스-쓰루된다). 다양한 상호접속 엘리먼트들을 통해 호스트에 간접적으로 커플링되는 하나 또는 그 초과의 SSD들의 예시적인 실시예로서, SSD(101)의 하나 또는 그 초과의 인스턴스들의 각각은 호스트(102)에 간접적으로 각각 커플링된다. 각각의 간접 커플링은 스위치/패브릭/중간 제어기(103)에 커플링된 외부 인터페이스들(110), 및 호스트(102)에 커플링하는 중간 인터페이스들(104)의 각각의 인스턴스를 통해 이루어진다.
스위치/패브릭/중간 제어기(103)를 포함하는 실시예들 중 일부는 또한 메모리 인터페이스(180)를 통해 커플링되고 SSD들에 의해 액세스가능한 카드 메모리(112C)를 포함한다. 다양한 실시예들에서, SSD들, 스위치/패브릭/중간 제어기, 및/또는 카드 메모리 중 하나 또는 그 초과의 것이 물리적으로 식별가능한 모듈, 카드 또는 플러그가능한 엘리먼트(예를 들어, I/O 카드(116)) 상에 포함된다. 일부 실시예들에서, SSD(101)(또는 그의 변형들)는 호스트(102)로서 동작하는 이니시에이터(initiator)에 커플링되는 SAS 드라이브 또는 SATA 드라이브에 대응한다.
호스트(102)는 OS(105), 드라이버(107), 애플리케이션(109) 및 멀티-디바이스 관리 소프트웨어(114)의 다양한 조합들과 같은, 호스트 소프트웨어(115)의 다양한 엘리먼트들을 실행하는 것이 가능하다. 점선-화살표(107D)는 호스트 소프트웨어 ←→ I/O 디바이스 통신을 나타내며, 예를 들어, SSD(101)의 인스턴스들 중 하나 또는 그 초과의 것에/SSD(101)의 인스턴스들 중 하나 또는 그 초과의 것으로부터 그리고 드라이버(107)를 통한 OS(105), 드라이버(107) 및 애플리케이션(109) 중 임의의 하나 또는 그 초과의 것으로부터/드라이버(107)를 통한 OS(105), 드라이버(107) 및 애플리케이션(109) 중 임의의 하나 또는 그 초과의 것에, 드라이버(107)를 통하거나 VF로서 직접 데이터가 송신/수신된다.
OS(105)는 SSD와 인터페이싱하기 위한 (개념적으로 드라이버(107)에 의해 도시되는) 드라이버들을 포함하고 그리고/또는 이 드라이버들과 동작하는 것이 가능하다. 윈도우즈의 다양한 버전들(예를 들어, 95, 98, ME, NT, XP, 2000, 서버, 비스타 및 7), 리눅스의 다양한 버전들(예를 들어, 레드 햇(Red Hat), 데비앙(Debian) 및 우분투(Ubuntu)), 및 MacOS의 다양한 버전들(예를 들어, 8, 9 및 X)이 OS(105)의 예들이다. 다양한 실시예들에서, 드라이버들은 SATA, AHCI 또는 NVM 익스프레스와 같은 표준 인터페이스 및/또는 프로토콜로 동작가능한 (때때로 "압축된(shrink-wrapped)" 또는 "사전 설치된"이라 칭해지는) 표준 및/또는 일반 드라이버들이거나, 옵션으로 커스토마이징되고 그리고/또는 SSD(101)에 특정한 커맨드들의 이용을 가능하게 하는 특정 벤더(vendor specific)이다. 일부 드라이브들 및/또는 드라이버들은 커스토마이징된 애플리케이션이 심지어 일반 드라이버로 SSD(101)에 특정한 커맨드들을 이용하게 할 수 있는, SSD(101)에 직접 커맨드들을 통신하기 위해, 최적화된 NAND 액세스(때때로 ONA라 칭해짐) 또는 다이렉트 NAND 액세스(때때로 DNA로 칭해짐) 기술들을 통해 애플리케이션(109)과 같은 애플리케이션-레벨 프로그램들을 인에이블하게하는 패스-쓰루(pass-through) 모드를 갖는다. ONA 기술들은: 비-표준 수정자들(힌트들)의 이용; 특정 벤더(vendor-specific) 커맨드들의 이용; 압축성에 따른 실제 NVM 사용과 같은 비-표준 통계들의 통신; 및 다른 기술들 중 하나 또는 그 초과의 것을 포함한다. DNA 기술들은: NVM에 대한 비매핑된 판독, 기록 및/또는 소거 액세스를 제공하는 특정 벤더 또는 비-표준 커맨드들의 이용; 예컨대 데이터의 포맷팅을 바이패싱함으로써(이를 하지 않는다면 I/O 디바이스가 데이터의 포맷팅을 행할 것임), NVM에 대한 더욱 직접적인 액세스를 제공하는 비-표준 또는 특정 벤더 커맨드들의 이용; 및 다른 기술들 중 하나 또는 그 초과의 것을 포함한다. 드라이버의 예들은 ONA 또는 DNA 지원이 없는 드라이버, ONA-가능한 드라이버, DNA-가능한 드라이버 및 ONA/DNA-가능한 드라이버이다. 드라이버의 추가적인 예들은 벤더-제공형(vendor-provided), 벤더-발전형(vendor-developed), 및/또는 벤더-강화형(vendor-enhanced) 드라이버, 및 클라이언트-제공형(client-provided), 클라이언트-발전형(client-developed) 및/또는 클라이언트-강화형(client-enhanced) 드라이버이다.
애플리케이션-레벨 프로그램들의 예들은 ONA 또는 DNA 지원이 없는 애플리케이션, ONA-가능한 애플리케이션, DNA-가능한 애플리케이션 및 ONA/DNA-가능한 애플리케이션이다. 점선 화살표(109D)는 애플리케이션 ←→ I/O 디바이스 통신(예를 들어, 애플리케이션에 대해 VF를 통한 바이패스 또는 드라이버를 통한 바이패스)을 나타내며, 예를 들어, ONA-가능한 애플리케이션 및 ONA-가능한 드라이버는 예컨대 중재자(intermediary)로서 OS를 이용하는 애플리케이션이 없이, SSD와 통신한다. 점선-화살표(109V)는 애플리케이션 ←→ I/O 디바이스 통신(예를 들어, 애플리케이션에 대해 VF를 통한 바이패스)을 나타내며, 예를 들어, DNA-가능한 애플리케이션 및 DNA-가능한 드라이버는 예컨대 중재자로서 OS 또는 드라이버를 이용하는 애플리케이션이 없이, SSD와 통신한다.
일부 실시예들에서, NVM(199)의 하나 또는 그 초과의 부분들은 펌웨어 스토리지 예를 들어, 펌웨어(106)에 이용된다. 펌웨어 스토리지는 하나 또는 그 초과의 펌웨어 이미지들(또는 그의 일부들)을 포함한다. 펌웨어 이미지는 예를 들어, SSD 제어기(100)의 CPU 코어(172)에 의해 실행되는, 펌웨어의 하나 또는 그 초과의 이미지들을 갖는다. 다른 예의 경우, 펌웨어 이미지는 예를 들어, 펌웨어 실행 동안 CPU 코어에 의해 참조되는, 상수들, 파라미터 값들 및 NVM 디바이스 정보의 하나 또는 그 초과의 이미지들을 갖는다. 펌웨어의 이미지들은 예를 들어, 현재의 펌웨어 이미지 및 제로 또는 그 초과의 (펌웨어 업데이트들에 관하여) 이전의 펌웨어 이미지들에 대응한다. 다양한 실시예들에서, 펌웨어는 일반, 표준, ONA 및/또는 DNA 동작 모드들을 제공한다. 일부 실시예들에서, 펌웨어 동작 모드들 중 하나 또는 그 초과의 것은, 옵션으로 드라이버에 의해 통신되고 그리고/또는 제공되는 키들 또는 다양한 소프트웨어 기술들을 통해 인에이블된다(예를 들어, 하나 또는 그 초과의 API들이 "록킹해제"된다).
스위치/패브릭/중간 제어기가 없는(lacking) 일부 실시예들에서, SSD는 외부 인터페이스들(110)을 통해 직접 호스트에 커플링된다. 다양한 실시예들에서, SSD 제어기(100)는 RAID 제어기와 같은, 다른 제어기들의 하나 또는 그 초과의 중간 레벨들을 통해 호스트에 커플링된다. 일부 실시예들에서, SSD(101)(또는 그의 변형들)는 SAS 드라이브 또는 SATA 드라이브에 대응하며, 스위치/패브릭/중간 제어기(103)는 결과적으로(in turn) 이니시에이터에 커플링되는 확장자에 대응하거나, 대안적으로 스위치/패브릭/중간 제어기(103)는 확장자를 통해 이니시에이터에 간접적으로 커플링되는 브리지에 대응한다. 일부 실시예들에서, 스위치/패브릭/중간 제어기(103)는 하나 또는 그 초과의 PCIe 스위치들 및/또는 패브릭들을 포함한다.
컴퓨팅 호스트(예를 들어, 컴퓨터, 워크스테이션 컴퓨터, 서버 컴퓨터, 스토리지 서버, SAN, NAS 디바이스, DAS 디바이스, 스토리지 어플라이언스, PC, 랩톱 컴퓨터, 노트북 컴퓨터 및/또는 넷북 컴퓨터)로서의 호스트(102)를 갖는 실시예들 중 일부와 같은 다양한 실시예들에서, 컴퓨팅 호스트는 옵션으로 하나 또는 그 초과의 로컬 및/또는 원격 서버들(예를 들어, 옵션의 서버들(118))과 (예를 들어, 옵션의 I/O & 스토리지 디바이스들/자원들(117) 및 옵션의 LAN/WAN(119)을 통해) 통신하는 것이 가능하다. 통신은 예를 들어, SSD(101) 엘리먼트들 중 임의의 하나 또는 그 초과의 것의 로컬 및/또는 원격 액세스, 관리 및/또는 사용이 가능하다. 일부 실시예들에서, 통신은 전적으로 또는 부분적으로 이더넷을 통해 이루어진다. 일부 실시예들에서, 통신은 전적으로 또는 부분적으로 파이버 채널을 통해 이루어진다. 다양한 실시예들에서, LAN/WAN(119)은 서버 팜(farm)에서의 네트워크, 서버 팜들을 커플링하는 네트워크, 메트로-영역 네트워크 및 인터넷 중 임의의 하나 또는 그 초과의 것과 같이, 하나 또는 그 초과의 근거리 및/또는 광역 네트워크들의 것을 나타낸다.
다양한 실시예들에서, SSD 제어기 및/또는 하나 또는 그 초과의 NVM들과 결합하는 컴퓨팅-호스트 플래시 메모리 제어기는, 비휘발성 스토리지 컴포넌트, 예컨대 USB 스토리지 컴포넌트, CF 스토리지 컴포넌트, MMC 스토리지 컴포넌트, eMMC 스토리지 컴포넌트, 썬더볼트 스토리지 컴포넌트, UFS 스토리지 컴포넌트, SD 스토리지 컴포넌트, 메모리 스틱 스토리지 컴포넌트 및 xD-화상 카드 스토리지 컴포넌트로서 구현된다.
다양한 실시예들에서, SSD 제어기(또는 컴퓨팅-호스트 플래시 메모리 제어기)의 전부 또는 임의의 부분들, 또는 그의 기능들은 제어기가 커플링되는 호스트(예를 들어, 도 1b의 호스트(102))에 구현된다. 다양한 실시예들에서, SSD 제어기(또는 컴퓨팅-호스트 플래시 메모리 제어기)의 전부 또는 임의의 부분들, 또는 그의 기능들이 하드웨어(예를 들어, 로직 회로), 소프트웨어 및/또는 펌웨어(예를 들어, 드라이버 소프트웨어 및/또는 SSD 제어 펌웨어), 또는 이들의 임의의 조합을 통해 구현된다. 예를 들어, (예컨대 도 1a의 ECC(161) 및/또는 ECC-X(135)와 유사한) ECC 유닛의 기능 또는 상기 ECC 유닛과 연관된 기능은 호스트 상의 소프트웨어를 통해 부분적으로 그리고 SSD 제어기에서의 펌웨어와 하드웨어의 결합을 통해 부분적으로 구현된다. 다른 예에서, (예컨대 도 1a의 리사이클러(151)와 유사한) 리사이클러 유닛의 기능 또는 상기 리사이클러 유닛과 연관된 기능은 호스트 상의 소프트웨어를 통해 부분적으로 그리고 컴퓨팅-호스트 플래시 메모리 제어기에서의 하드웨어를 통해 부분적으로 구현된다.
매핑 동작
도 2는 LBA의 LPN 부분을 매핑하는 실시예에 대해 선택된 상세사항들을 도시한다. 일부 실시예들에서, 판독 유닛은 NVM의 페이지의 일부와 같이, 독립적으로 판독가능한 미세 입도(finest granularity)의 NVM이다. 추가적인 실시예들에서, 판독 유닛은 검사 비트들에 의해 보호된 모든 데이터와 함께 (하위-레벨) 에러-정정 코드의 검사 비트들(때때로, 리던던시라 칭함)에 대응한다. 예를 들어, 도 1a의 ECC(161)는 검사 비트들을 통해, 예컨대 LDPC 코드를 통해 에러 정정을 구현하며, 판독 유닛은 LDPC 코딩 비트들에 의해 보호되는 데이터 비트들에 더하여 LDPC 코드를 구현하는 코딩 비트들에 대응한다.
일부 실시예들에서, 맵(141)은 예컨대 (도 1a에 도시된 바와 같은) 테이블(143)을 통해, LBA(211)의 LPN(213) 부분을 LPN(221)에 대한 맵 정보로 매핑한다. (LPN(221)에 대한 맵 정보와 같은) LPN에 대한 맵 정보는 때때로 맵 엔트리라 칭해진다. 맵(141)은 LPN을 대응하는 맵 엔트리와 연관시키는 것을 말한다. 다양한 실시예들에서, 매핑은 하나 또는 그 초과의 연상 검색(associative look-up)들을 통해, 하나 또는 그 초과의 비-연상 검색(non-associative look-up)들을 통해, 그리고/또는 하나 또는 그 초과의 다른 기술들을 통해 이루어진다.
일부 실시예들에서, SSD 제어기(100)는 잠재적으로 그리고/또는 활성적으로 사용중인 각 LPN에 대한 하나의 맵 엔트리를 유지한다.
일부 실시예들에서, LPN(221)에 대한 맵 정보는 각각의 판독 유닛 어드레스(223) 및 판독 유닛들에서의 길이(225)를 포함한다. 일부 실시예들에서, 길이 및/또는 스팬(span)은, 예를 들어 판독 유닛들에서의 길이(225)의 전부 또는 임의의 부분들에서, 예컨대 상기 스팬으로부터의 오프셋으로서 길이를 저장함으로써, 인코딩되어 저장된다. 추가적인 실시예들에서, 제 1 LPN은 제 1 맵 엔트리와 연관되고, (제 1 LPN과 서로 다르지만, 제 1 LPN에 의해 지칭된 논리적 페이지와 동일한 크기의 논리적 페이지를 지칭하는) 제 2 LPN은 제 2 맵 엔트리와 연관되며, 제 1 맵 엔트리의 판독 유닛들에서의 각각의 길이는 제 2 맵 엔트리의 판독 유닛들에서의 각각의 길이와 서로 다르다.
다양한 실시예들에서, 동일한 시점에서, 제 1 LPN은 제 1 맵 엔트리와 연관되고, (제 1 LPN과 서로 다른) 제 2 LPN은 제 2 맵 엔트리와 연관되며, 제 1 맵 엔트리의 각각의 판독 유닛 어드레스는 제 2 맵 엔트리의 각각의 판독 유닛 어드레스와 동일하다. 추가적인 실시예들에서, 제 1 LPN과 연관된 데이터 및 제 2 LPN과 연관된 데이터는 양자 모두가 NVM(199)에서의 동일한 디바이스의 동일한 물리적 페이지에 저장된다.
다양한 실시예들에 따르면, 판독 유닛 어드레스(223)는: NVM에서의 시작 어드레스; NVM에서의 종료 어드레스; 선행하는 것들 중 임의의 것의 오프셋; 및 LPN(213)과 연관된 NVM의 부분을 식별하기 위한 임의의 다른 기술들 중 하나 또는 그 초과의 것과 연관된다.
도 3은, 집합적으로 판독 유닛들의 양자들로 측정된 길이를 갖는, 다양한 판독 유닛들로서 구조화된 판독 데이터를 생성하기 위해 판독 유닛 어드레스에서 NVM을 액세스하는 실시예에 대해 선택된 상세사항들을 예시한다. 다양한 실시예들에 따르면, 제 1 판독 유닛(313)은: NVM의 어드레스 공간에서의 최저 어드레스를 갖는 판독 데이터(311)에서의 판독 유닛들 중 하나; 판독 유닛들 중 고정된 하나; 판독 유닛들 중 임의의 하나; 판독 유닛들 중 가변적인 하나; 및 임의의 다른 기술에 의해 선택된 판독 유닛들 중 하나 중, 하나 또는 그 초과의 것이다. 다양한 실시예들에서, SSD 제어기(100)는 판독 유닛들의 길이(225)에 의해 특정된 다수의 판독 유닛들을 단지(no more than) 판독함으로써 판독 데이터(311)를 생성하고 NVM(199)을 액세스하는 것이 가능하다.
도 4a는 판독 유닛(401A)으로서 (도 3의 판독 유닛(313) 또는 판독 유닛(315)과 같은) 판독 유닛의 실시예에 대해 선택된 상세사항들을 예시한다. 다양한 실시예들 및/또는 사용 시나리오들에서, 헤더 1(411A) 내지 헤더 N(419A)은 인접하며, 헤더들의 각각에 의해 (예컨대 각각의 오프셋들을 통해) 식별된 각각의 데이터 구역들은 헤더들 중 최종 헤더에 후속하여 인접하다. 데이터 구역들은 집합적으로 데이터 바이트들(421A)을 형성한다. 데이터 구역들은 헤더들이 저장되는 위치 순서에 매칭하는 위치 순서로 저장된다. 예를 들어, 판독 유닛의 맨 처음 부분에서(at the beginning), 제 1 헤더가 고려되며, 제 2 헤더 및 제 3 헤더는 제 1 헤더에 인접하게 후속한다. (제 1 헤더에서의 제 1 오프셋에 의해 식별되는) 제 1 데이터 구역이 제 3 헤더에 인접하게 후속한다. (제 2 헤더에서의 제 2 오프셋에 의해 식별되는) 제 2 데이터 구역이 제 1 데이터 구역에 인접하게 후속한다. 유사하게, (제 3 헤더에 의해 식별되는) 제 3 데이터 구역이 제 2 데이터 구역에 인접하게 후속한다.
도 4b는 판독 유닛(401B)으로서 (도 3의 판독 유닛(313) 또는 판독 유닛(315)과 같은) 판독 유닛의 다른 실시예에 대해 선택된 상세사항들을 예시한다. 다양한 실시예들 및/또는 사용 시나리오들에서, 헤더 마커(HM)(410B)는 다수의 후속하는 인접 헤더들(헤더 1(411B), 헤더 2(412B)..., 헤더 N(419B))을 표시하는 (1-바이트 필드와 같은) 옵션의 초기 필드이다. 데이터 구역들(데이터 바이트들(421B), 데이터 바이트들(422B)... 데이터 바이트들(429B))은 헤더들(헤더 1(411B), 헤더 2(412B)..., 헤더 N(419B))에 의해 각각 식별되며 헤더들이 저장되는 위치 순서에 반대인 위치 순서로 저장된다. 헤더들은 판독 유닛의 맨 처음 부분에서 시작하는 한편, 대응하는 데이터 구역들은 판독 유닛의 맨 마지막 부분(at the end)에서 시작한다. 일부 실시예들에서, 데이터 구역 내의 데이터 바이트들(예를 들어, 데이터 바이트들(421B), 데이터 바이트들(422B), ..., 데이터 바이트들(429B))은 순방향 순서(위치 순서에 매칭하는 바이트 순서)로 배열되는 한편, 다른 실시예들에서, 데이터 바이트들은 역방향 순서(위치 순서에 관하여 반전된 바이트 순서)로 배열된다. 일부 실시예들에서, 헤더 마커는 헤더들 및 데이터 바이트들이 (예를 들어, 도 4a에 도시된 바와 같은) 동일한 위치 순서로 저장되는 판독 유닛들에 이용된다.
일부 실시예들에서, 옵션의 패딩 바이트들(431A)(또는 431B)은 특정 LPN과 연관된 데이터의 입도에 따른다. 예를 들어, 일부 실시예들에서, 데이터 바이트들(421A)(또는 집합적으로 데이터 바이트들(421B), 데이터 바이트들(422B), ..., 데이터 바이트들(429B))이 헤더 1(411A) 내지 헤더 N(419A)(또는 헤더 1(411B), 헤더 2(412B), ..., 헤더 N(419B)) 중 최종 하나를 제외한 전부와 연관된 데이터를 저장한 후에, 8 바이트들과 같이, 고정된 나머지 공간의 양보다 작은 경우에, 최종 헤더와 연관된 LPN에 대한 데이터가 후속 판독 유닛에서 시작된다. 추가적인 실시예들에서, 최종 헤더에서의 특정 오프셋 값(예를 들어, 모두 1들)은 최종 헤더와 연관된 LPN에 대한 데이터가 후속 판독 유닛에서 시작하는 것을 표시한다.
도 5는 다수의 필드들을 갖는 (도 4a의 임의의 헤더 1(411A) 내지 헤더 N(419A) 또는 도 4b의 헤더 1(411B) 내지 헤더 N(419B)와 같은) 헤더의 실시예의 선택된 상세사항들을 예시한다. 일부 실시예들에서, 헤더들은 고정 길이이다(예를 들어, 각 헤더는 동일한 수의 바이트 길이이다). 헤더(501)는 필드 타입(511), 최종 표시자(513), 플래그들(515), LPN(517), 길이(519), 및 오프셋(521)을 포함한다. 다양한 실시예들에 따르면, 헤더(501)는 에폭(523)을 포함하고 그리고/또는 에폭(523)과 연관되고 그리고/또는 에폭(523)이 옵션으로 및/또는 선택적으로 첨부되거나 프리펜드(prepend)된다. 타입 필드는 데이터 바이트들의 카테고리를 식별한다. 예를 들어, 타입 필드는 데이터 바이트들의 카테고리가 호스트 데이터(예를 들어, 논리 페이지 데이터) 또는 시스템 데이터(예를 들어, 맵 정보 또는 체크포인트 정보) 중 하나이라는 것을 나타낸다. 최종 필드는 헤더가 데이터 바이트들 이전의 최종 헤더라는 것을 나타낸다. 헤더 마커를 갖는 일부 실시예들에서, 최종 필드는 옵션으로 생략된다. LPN 필드는 헤더가 연관되는 LPN이다. LPN 필드는 예를 들어, 특정한 LPN에 매칭하는 LPN 필드를 갖는 것에 대한 헤더들을 탐색함으로써 특정한 LPN과 연관되는 헤더들 중 특정한 하나를 결정하기 위해 헤더들의 분석을 인에이블한다. 길이 필드는 데이터 바이트들의, 바이트 단위의 길이(예를 들어, 헤더(501)와 연관된 데이터 바이트들(421A)에 얼마나 많은 데이터의 바이트들이 존재하는지)이다. 일부 실시예에서, 오프셋 필드에서의 오프셋은 특정한 단위(예를 들어, 8 바이트 단위)에 따라 반올림(round)된다. 에폭 필드는 헤더가 동일하거나 상이한 스트림들의 다른 오브젝트들에 관련되는 부분인 오브젝트의 기록 순서를 식별하는 시간 마커이다.
다양한 실시예들에서, 특정 LPN과 연관된 일부 또는 모든 정보는 특정 LPN과 연관된 맵 엔트리, 특정 LPN과 연관된 헤더 또는 이 둘 양자 모두에 저장된다. 예를 들어, 일부 실시예들에서, 길이(519)의 일부 또는 전부가 헤더에서보다는 오히려 맵 엔트리에 저장된다.
도 6은 다수의 NVM 디바이스들(예를 들어, 하나 또는 그 초과의 플래시 다이 및/또는 플래시 칩들)의 블록들, 페이지들, 및 판독 유닛들의 실시예의 선택된 상세사항들을 예시한다.
(디바이스들(601, 603 .. 및 609) 중 어느 하나와 같은) 각 디바이스는 (디바이스(601)의 블록들(631, 633 .. 및 639), 디바이스(603)의 블록들(661, 663 .. 및 669) 등과 같은) 블록들로서 구조화된 스토리지를 제공한다. 일부 실시예들에서, 각 디바이스는 정수의 블록들을 포함하고 블록은 소거의 가장 작은 양자(quantum)이다. 결국, 블록들은 (블록(631)의 페이지들(621, 623 .. 및 629); 블록(661)의 페이지들(651, 653 .. 및 659) 등과 같은) 페이지들을 포함한다. 일부 실시예들에서, 각 블록은 정수의 페이지들을 포함하고 페이지는 기록의 가장 작은 양자이다. 결국, 페이지들은 (페이지(621)의 판독 유닛들(611, 613 .. 및 619); 페이지(651)의 판독 유닛들(641, 643 .. 및 649) 등과 같은) 판독 유닛들을 포함한다. 다양한 실시예들에 따라, 하나 또는 그 초과의 것은 다음과 같다: 판독 유닛은 판독 및 에러 정정의 가장 작은 양자이다; 각 페이지는 정수의 판독 유닛들을 포함한다; 2개 또는 그 초과의 페이지들의 연관된 그룹은 정수의 판독 유닛들을 포함한다; 그리고 판독 유닛들은 옵션으로 및/또는 선택적으로 페이지 경계들을 스팬한다. 디바이스들에서의 정보의 판독들 및/또는 기록들은 '판독 유닛 먼저(read unit first)' 순서 또는 '페이지 먼저(page first)' 순서와 같은 순서에 따라 수행된다. 도면에 예시된 판독 유닛들에 대한 판독 유닛 먼저 순서의 일례는 판독 유닛(611)으로 시작하여, 641, .., 671, 613, 643, .., 673 등이 후속하고, 679로 종료한다. 도면에 예시된 판독 유닛들에 대한 페이지 먼저 순서의 일례는 판독 유닛(611)으로 시작하여, 613, .., 619, 641, 643, .., 649, 671, 673 등이 후속하고, 679로 종료한다.
다양한 실시예들에서, 플래시 다이(601, 603 .. 및 609)는 도 1a의 하나 또는 그 초과의 개별 플래시 다이(194)의 각각의 다이들에 대응한다. 일부 실시예들에서, 디바이스들(601, 603 .. 및 609)은 NVM(199) 전체보다는 작은 부분이다. 예를 들어, 다양한 실시예들에서, 데이터는 플래시 다이의 다수의 그룹들에 걸쳐 독립적으로 스트라이프되고, 플래시 다이의 그룹들 각각은 독립적으로 액세스가능하다.
일부 실시예들에서, 다양한 NVM 관리 기능들(예를 들어, 판독, 리사이클링, 소거, 프로그래밍/기록, 및/또는 NVM의 사용에 관한 기능들 중 임의의 하나 또는 그 초과의 것)은 때때로 R-블록들로 칭하는 논리적 슬라이스들 및/또는 섹션들에서 수행된다. 다양한 실시예들에서, R-블록은 예를 들어, 플래시 메모리의 다양한 다이(예를 들어, 모든 다이, 전체적으로 또는 부분적으로 고장난 것들을 제외한 모든 다이, 및/또는 다이의 하나 또는 그 초과의 선택된 서브세트들)에 걸쳐 논리적 슬라이스 또는 섹션으로서 예시된다. 예를 들어, R 플래시 다이를 갖는 플래시 메모리에서(각 플래시 다이는 N개의 블록들을 가짐), 각 R-블록은, 총 N개의 R-블록들에 대해, 함께 취해진 플래시 다이 각각으로부터의 i번째 블록이다. 다른 예에 있어서, 각각이 N개의 블록들을 갖는 R 플래시 다이를 갖는 플래시 메모리에서, 각 R-블록은 총 N/2개 R-블록들에 대해 플래시 다이 각각으로부터의 i번째 및 (i+1)번째 블록이다. 또 다른 예에 있어서, 복수의 듀얼 평면 디바이스들을 갖는 플래시 메모리에서, 각 R-블록은 듀얼 평면 디바이스들 각각으로부터의 i번째 짝수 블록 및 i번째 홀수 블록이다.
일부 블록들이 동작불능인 경우에도, R-블록들이 각 다이로부터 하나의 블록을 갖는 것을 보장하기 위한 가상 및 물리적 블록 어드레스들 사이의 매핑을 비롯하여, R-블록들로서 관리를 위한 플래시 다이 블록들의 다른 배열들이 예상된다. 다양한 실시예들에서, 각 플래시 다이에서의 N개의 블록들 중 일부는, 가상 및 물리적 블록 어드레스들 사이의 매핑이 R-블록들에서의 블록들 중 결함이 있는 블록들을 대체하기 위해 스페어(그렇지 않으면 미사용된) 블록들을 갖도록 스페어들로서 사용된다.
도 7은 R-블록들의 실시예의 선택된 상세사항들을 예시한다. 도면은 66개의 플래시 다이(플래시 다이(710.65 .. 710.0))를 갖는 실시예를 예시한다. R-블록들로서 블록들, 페이지들, 및 블록들의 관리가 예시되어 있다. 각 플래시 다이는 N개의 블록들(예를 들어, 플래시 다이(710.65)의 블록(710.65B0), 블록(710.65B1) .. 블록(710.65BB))을 갖는 것으로 예시되어 있다. 각 R-블록의 특정한 예는 플래시 다이(710.65)로부터의 블록(710.65B0), (명시적으로 예시되지 않지만) 플래시 다이(710.64)로부터의 블록(0) 등 내지 플래시 다이(710.0)의 블록(710.0B0)인 R-블록(760.0)과 같은 함께 취해진 플래시 다이 각각으로부터의 i번째 블록인 R-블록이다. 따라서, 총 N개의 R-블록들(R-블록(760.0), R-블록(760.1) .. R-블록(760.R))이 존재한다. 다른 특정한 예의 R-블록들은 각각, 함께 취해진 플래시 다이 각각으로부터의 i-번째 및 (i+1)번째 블록인 R-블록이다(예를 들어, 플래시 다이(710.65)로부터의 블록(710.65B0) 및 블록(710.65B1), 플래시 다이(710.64)로부터의 블록들(0 및 1) 등 내지 플래시 다이(710.0)로부터의 블록(710.0B0) 및 블록(710.0B1)). 따라서, 각 플래시 다이에 N개의 블록들이 존재하면, N/2개의 R-블록들이 존재한다.
블록들이 R-블록을 형성하는 일부로서 쌍들로 또는 다른 연관된 그룹들로 취급되는 다양한 실시예들에서, 블록들의 연관된 그룹의 각 블록으로부터의 각각의 페이지들은, 더 큰 멀티-블록 페이지를 형성하는, 예컨대 기록을 위한 유닛으로서 또한 취급된다. 예를 들어, 짝수 및 홀수 블록들을 갖는 다양한 듀얼 평면 실시예들에서, 짝수 블록들 중 특정한 하나의 제 1 페이지 및 홀수 블록들 중 연관된 하나의 제 1 페이지가 기록을 위한 유닛으로서 취급되고, 옵션으로 및/또는 선택적으로 판독을 위한 유닛으로서 취급된다. 유사하게는, 특정한 짝수 블록의 제 2 페이지 및 연관된 홀수 블록의 제 2 페이지가 유닛으로서 취급된다. 다양한 실시예들에 따르면, 여기에서 사용되는 바와 같은 NVM의 페이지는, NVM의 단일 페이지, NVM의 멀티-블록 페이지, 판독을 위한 하나 또는 그 초과의 개별 페이지들로서 옵션으로 및/또는 선택적으로 취급되는 기록을 위한 NVM의 멀티-블록 페이지, 및 NVM의 페이지들의 임의의 다른 그룹화 또는 연관 중 하나 또는 그 초과를 지칭한다.
일부 실시예들에서, 예를 들어, 고장(예를 들어, 불량) 블록들의 스킵핑으로 인해 모든 R-블록들이 동일한 사이즈는 아니다. 예를 들어, 블록(710.0B0)이 결함이 있고 사용불가능하면, R-블록(760.0)은 R-블록(760.1) 보다 하나 더 적은 블록을 갖는다.
일부 실시예들에서, 각 R-블록은 특정한 형태의 헤더(501)와 같은 R-블록 헤더를 포함하고, 타입 필드는 R-블록 타입을 특정한다(그리고, 예를 들어, 데이터 타입을 특정하지는 않는다). 다른 실시예들에서, R-블록 헤더는 R-블록에서의 블록들 각각에서의 제 1 페이지에서와 같이, R-블록에서의 복수의 블록들에서 반복된다. 다양한 실시예들에 따르면, R-블록 헤더는 R-블록 타입, R-블록 대역, R-블록 시퀀스 번호, 이전 R-블록 번호, 및 다른 정보 중 하나 또는 그 초과의 것을 포함한다. R-블록 타입은 호스트 데이터 정보, 맵 정보, 또는 체크포인트 정보와 같은 R-블록에 포함된 정보의 타입을 나타낸다. R-블록 대역은 복수의 대역들 중 어느 것이 R-블록을 포함하는지 특정한다. 예를 들어, R-블록 대역은 핫(hot) 데이터 대역, 콜드(cold) 데이터 대역, 맵 대역, 또는 체크포인트 대역 중 하나를 특정한다. R-블록 시퀀스 번호는 사용된 각 R-블록에 대해 1회 증분되고, R-블록 생성에 대한 순서화를 제공한다. 일부 사용 시나리오들에서, R-블록 시퀀스 번호는 대역 마다(per-band) 있지만, 다른 사용 시나리오들에서는, R-블록 시퀀스 번호는 글로벌하다. 이전의 R-블록 번호는 대역들 중 주어진 하나에서의 R-블록들이 역순(예를 들어, 시간상 역방향)으로 함께 링크될 수 있게 한다.
일부 실시예들에서, 복구는 R-블록들 각각의 R-블록 헤더들을 결정하는 것과, 대역들 각각에서 최종(가장 최근에 기록된) R-블록을 결정하기 위해 R-블록 헤더들의 콘텐츠를 사용하는 것을 포함한다(예를 들어, 그로부터 시작한다).
셀프-저널링 및 계층적 일치성
셀프-저널링의 일례는, 오브젝트가 (예를 들어, LBA가 대응하는 LB를 갖는 LBA를 저장하는) 오브젝트 자체내에서 단독으로 오브젝트를 복구하기 위한 충분한 정보를 포함할 때 이루어진다. 계층적 일치성의 일례는, 구조화된 다른 데이터의 버전의 검사를 통해 어느 버전의 데이터 구조를 사용할지 결정하는 것이다. 예를 들어, 특정한 시간 마커에 의해 식별된 데이터 버전이 특정한 시간 마커에 의해 식별된 맵 버전에 대해 우선권을 갖고, 결국 이 맵 버전은 특정한 시간 마커에 의해 식별된 체크포인트 버전에 대해 우선권을 갖는다. 일부 실시예들 및/또는 사용 시나리오들에서, 계층적 일치성 기술들과 함께 셀프-저널링 기술들을 사용하는 것이 이 기술들을 사용하지 않는 것 보다 맵 재구축 및/또는 하위-레이턴시 FUA 핸드셰이킹을 더욱 효율적이게 할 수 있다.
다양한 실시예들에서, (도 1a의 맵(141) 중 모두 또는 임의의 부분과 같은, LBA들로부터 판독 유닛들까지의) 맵은 1-레벨, 2-레벨, 또는 멀티-레벨 맵이고, 테이블, CAM, 해시 테이블, 탐색 트리, (LBA와 같은) 키를 (판독 유닛 어드레스와 같은) 값과 연관시키는 임의의 구조, 또는 이들의 임의의 조합 중 하나 또는 그 초과로서 구현된다. 일부 실시예들에서, 맵은 빈번하게 액세스되고 그리고/또는 더티한(dirty) 엔트리들을 홀딩하기 위한 캐시를 포함한다. 맵 캐시는 테이블, CAM, 해시 테이블, 탐색 트리, (LBA와 같은) 키를 (판독 유닛 어드레스와 같은) 값과 연관시키는 임의의 구조, 또는 이들의 임의의 조합 중 하나 또는 그 초과의 것으로서 구현된다.
다양한 실시예들에서, 기록 데이터는 각 LBA와 연관된 맵 엔트리에 길이의 저장을 통해 논리 페이지들, NVM의 페이지들, 단일 판독 유닛들, 또는 이들 중 하나 또는 그 초과의 것으로서 저장된다. 호스트는 (LBA에 의해 어드레싱된) LB의 가장 미세한 입도로 기록 데이터를 제공한다. 다양한 실시예들에서, 호스트로부터의 LB는 옵션으로 및/또는 선택적으로 압축되고 1 보다 작은 판독 유닛, 1 판독 유닛, 1 보다 큰 판독 유닛, 비정수의 판독 유닛들, 또는 일부 다른 사이즈를 소비한다.
추가 실시예들에서, 호스트는 섹터 입도와 같은, LB의 입도 보다 미세한 입도로 기록 데이터를 제공한다. 예를 들어, 섹터는 512B이고, 각 LB는 8개의 순차적 섹터들을 포함한다. LB의 사이즈 보다 작은 데이터 사이즈를 갖거나, 특정한 LB의 부분만이 기록되게 하는 정렬을 갖는 호스트로부터의 기록 동작이 판독-변경-기록(read-modify-write) 동작으로서 프로세싱된다.
일부 실시예들에서, 일례로서 판독 유닛들을 사용하여, 맵은 판독 유닛들에서와 같이, 특정한 LBA를 각각의 판독 유닛 어드레스 및 각각의 길이 및/또는 스팬과 연관시킨다(예를 들어, LBA(211)는 도 2에 예시되어 있는 바와 같이, 판독 유닛 어드레스(223) 및 판독 유닛들에서의 길이(225)에 맵(141)에 의해 매핑되고, 판독 유닛들에서의 길이(225)는 특정한 LBA의 데이터의 사이즈로서 길이, 및 판독할 판독 유닛들의 수로서 스팬을 인코딩하여 데이터를 획득한다). 각각의 판독 유닛 어드레스에 의해 어드레싱된 NVM에서의 특정한 판독 유닛에서 시작하여 각각의 스팬에 의해 제공된 판독 유닛들의 수를 스패닝하는, 특정한 LBA에 의해 참조되는 논리 블록(LB)이 저장된다. 예를 들어, 1의 스팬은 LB가 특정한 판독 유닛내에 포함된다는 것을 나타낸다. 다양한 실시예들 및/또는 구현들에서, 특정한 판독 유닛은 하나 또는 그 초과의 다른 LB들을 저장하지 않거나, 하나 또는 그 초과의 다른 LB들의 일부(fraction)을 저장하거나, 하나 또는 그 초과의 다른 LB들을 저장한다.
특정한 판독 유닛은 특정한 판독 유닛에서 시작하는 하나 또는 그 초과의 LB들 각각에 대한 헤더(예를 들어, 도 4a의 헤더 1(411A) 내지 헤더 N(419A) 및 도 4b의 헤더 1(411B), 헤더 2(412B)...헤더 N(419N))를 포함한다. 헤더들 각각은 특정한 판독 유닛(예를 들어, 도 5의 헤더(501)의 오프셋(521) 및/또는 LPN(517))에 저장된 LB들의 각각의 LBA를 포함한다. 예를 들어, 특정한 LBA와 연관된 헤더들 중 특정한 하나가 특정한 LBA를 포함한다. 다양한 실시예들에서, 헤더들은 LB가 발견되는 판독 유닛에서의 오프셋, LB상에서 사용된 압축의 타입의 표시, 바이트로 저장될 때 LB의 길이, 및 다른 정보와 같은 다른 정보를 포함한다.
데이터 구조화 및/또는 순서화에 관하여, LB가 시작하지 않는 판독 유닛에서 헤더의 존재(또는 비존재), 헤더들이 판독 유닛의 시작 또는 종료를 나타내는지 여부, 및 헤더들이 각각 대응하는 데이터의 제 1 또는 최종 판독 유닛에 헤더들이 저장되는지 여부와 같은, 데이터 및 헤더들을 판독 유닛에 저장하는 다양한 기술들 중 하나 또는 그 초과의 것을 사용하는 다양한 실시예들이 예상된다.
셀프-저널링 특성의 일례는, 판독 유닛에 저장되는 하나 또는 그 초과의 각각의 LB들의 (판독 유닛의 하나 또는 그 초과의 헤더들에서와 같은) 하나 또는 그 초과의 각각의 LBA들의 상술한 저장이다. 셀프-저널링 특성은, 판독 유닛들의 프로세싱만이 맵 정보의 복구를 가능하게 하기 때문에, 판독 유닛이 플래시 메모리에 기록되는 것에 후속하는 (예를 들어, 헤더들로부터의) LBA들 및 대응하는 LB 데이터에 대한 맵 정보의 복구를 가능하게 한다.
다양한 실시예들 및/또는 사용 시나리오들에서, (예를 들어, 예기치 않은 전력 손실, 오작동, 또는 NVM에 대한 데이터의 스토리지를 중단 및/또는 방해하는 다른 이벤트에 응답하여) 복구를 위한 다양한 기술들이 사용된다. 예를 들어, 오작동으로부터 복구를 전체적으로 또는 부분적으로 인에이블하기 위해 정보를 주기적으로 기록함으로써 체크포인트가 유지된다. 일부 실시예들에서, 체크포인트는 복수의 엔트리들을 갖고, 각 엔트리는 액티비티의 스트림에서의 특정한 포인트까지의 복구 정보를 비휘발성 스토리지 시스템(예를 들어, SSD의 NVM)에 제공한다. 다양한 실시예들에서, 다양한 체크포인트 엔트리들은 상이한 시간들에 리코딩되는 상이한 체크포인트 정보와 같은 상이한 타입들의 정보를 포함한다.
일부 실시예들에서, 롤링 체크포인트들이 기록되고, 다수의 체크포인트 엔트리들은 (제 1 레벨 맵의 일부 및/또는 모든 R-블록 사용 카운트 테이블과 같은) 하나 또는 그 초과의 데이터 구조들 중 적어도 일부를 각각 포함한다. 롤링 체크포인트들은 시간을 통해 체크포인트 정보를 세이빙하는 (예를 들어, 성능, NVM에 대한 추가 기록들, 및 NVM의 오버헤드 관리에서) 비용을 분배한다. 일부 실시예들에서, 롤링 체크포인트들은 체크포인트의 생성 동안 체크포인팅되는 데이터 구조의 일부만의 록킹(locking)을 가능하게 하고, 나머지 데이터 구조를 록킹해제되게 두어서, 넌-체크포인트 사용에 이용가능하다.
예를 들어, 다양한 실시예들에서, (반드시 모두는 아니지만) 체크포인트 엔트리들 중 적어도 일부는 (프리(free) R-블록들이 사용될 순서로 저장된) 프리 R-블록들의 리스트를 포함한다. 체크포인트는 복구시에, (a) 체크포인트가 NVM에서 위치가능하고, (b) 최근의 체크포인트 엔트리가 결정가능하며, (c) 일부 실시예들에서는, 체크포인트가 순방향 및/또는 역방향 시간 순서로 재생가능하도록 기록된다. 예를 들어, 체크포인트는 NVM에서의 특정한 위치에 그리고 FIFO 순서로 기록된다(따라서, 나중의 엔트리들은 초기의 엔트리들 이후이다). 결국, 체크포인트 FIFO에 대한 기록이 "랩핑(wrap)"하고, 가장 오래된 엔트리들이 소거되고 그리고/또는 덜 오래된(younger) 엔트리들에 의해 중복기록된다. 체크포인트 FIFO에 대한 기록은 체크포인트 엔트리들의 각각의 에이지가 (예를 들어, FIFO에서 가장 덜 오래된 엔트리 및 가장 오래된 엔트리를 구별하기 위해) 결정가능하도록 타임스탬프를 갖는 기록을 옵션으로 포함한다. 다양한 다른 실시예들에서, FIFO 이외의 다른 데이터 구조들(예를 들어, 핑-퐁(ping-pong) 구조, 테이블, 및 체크포인트 엔트리들을 저장하도록 인에이블된 다른 데이터 구조들)이 체크포인트들을 저장하기 위해 사용된다. 일부 실시예들에서, 체크포인트 FIFO는 선입 선출 데이터 구조이지만, 다른 실시예들에서는, 체크포인트 FIFO는 미리결정된 순서로 기록된 큐(queue), 스트림, 또는 랜덤하게 액세스가능한 구조와 같은 다른 구조로 구현된다.
일부 실시예들에서, 데이터는 하나 또는 그 초과의 데이터 스트림들에 기록된다. 호스트가 기록 데이터를 제공할 때, 데이터가 비인접 영역들(예를 들어, LBA들의 연관되지 않은 그룹들)에 대한 것이더라도, 기록 데이터는 R-블록들로 모아진다. 기록 데이터의 데이터 스트림은, (모든 실시예들에서 반드시는 아니지만, 데이터가 호스트로부터 도달하는 동일한 순서로) 데이터 스트림이 호스트 기록들의 데이터를 리코딩하기 때문에, 호스트 기록 액티비티의 로그와 유사하다. 다양한 실시예들에서, 하나 또는 그 초과의 데이터 스트림들이 존재한다. 예를 들어, 일부 실시예들에서, (전체적으로 및/또는 부분적으로 중복기재되는 R-블록들로부터 프리 공간을 회수(reclaim)하는) 리사이클 액티비티는 리사이클링 데이터 스트림에 관한 것이지만, 호스트 기록 액티비티는 리사이클링 데이터 스트림과 별개인 호스트 데이터 스트림에 관한 것이다. 다른 실시예들에서, 호스트 데이터는 제 1 R-블록에 기록되고, 동시 리사이클링된 데이터는 제 2의 상이한 R-블록에 기록된다. 새롭게 기록된 (핫) 데이터로부터 리사이클링된 (콜드) 데이터를 분리하는 것은 일부 사용 시나리오들에서 바람직하다. 또 다른 실시예들에서, 콜드인 것으로 결정된 호스트 데이터의 부분과 같은 호스트 데이터의 일부가 제 2 R-블록에 선택적으로 기록된다.
다양한 실시예들에 따르면, 체크포인트 엔트리들은, 호스트 커맨드들에 응답하여 및/또는 특정한 양의 액티비티(예를 들어, 특정한 양의 호스트 기록 데이터, 특정한 수의 맵 레퍼런스들, 및/또는 특정한 양의 더티 맵 정보)에 응답하는 것과 같이, 시간에서 주기적으로 생성된다. 추가의 실시예들에서, 상이한 구조들이 상이한 시간들에 및/또는 상이한 규칙들에 따라 체크포인팅된다.
다양한 실시예들에서, 체크포인트들은 제 1 레벨 맵, 맵 캐시, R-블록 사용 테이블, 소거 카운트들과 같은 R-블록 통계, R-블록 또는 다른 것에 기초하여 축적된 에러 카운트들 또는 판독 방해 정보와 같은 다른 통계들, 프리 리스트, 및 비휘발성 스토리지 시스템에서 사용의 다른 상태 정보 및/또는 테이블들과 같은, 하나 또는 그 초과의 데이터 구조들 중 일부 또는 모두를 포함한다.
일부 실시예들에서, 체크포인트 엔트리들 중 하나 또는 그 초과의 것에 전체적으로 또는 부분적으로 포함된 데이터 구조들은 복구 프로세스에서 사용된다. 다른 실시예들에서, 예컨대 롤링 체크포인트들로, 다수의 체크포인트 엔트리들은 제 1 레벨 맵과 같은 데이터 구조를 복구하기 위해 사용된다.
일례에서, 복구시에, 체크포인트 FIFO가 체크포인트 FIFO의 체크포인트의 엔트리들에 세이빙된 프리 R-블록들의 하나 또는 그 초과의 리스트들 중 최근의 리스트를 찾기 위해 사용된다. 그 후, 프리 R-블록들의 최근의 리스트에서의 R-블록들은 어느 R-블록들이 이미 사용되었는지를 찾기 위해 판독된다(사용된 R-블록들이 소거된 상태에 있지 않기 때문에 결정가능함). 일부 사용 시나리오들에서, R-블록의 일부가 오작동 이전에 기록되고 기록된 R-블록의 일부는 복구가능하다. 프리 R-블록들의 최근의 리스트에서의 R-블록들의 판독 유닛들은 판독 유닛들에서 임의의 헤더들을 찾기 위해 스캐닝된다. 헤더들은 판독 유닛들에 저장된 LB들을 나타내는 LBA들을 포함한다. (LBA들에 대한 데이터가 NVM 어디에 저장되는지 결정하는 것을 인에이블하는) 맵이 임의의 LBA들이 맵으로부터 미싱되는지를 결정하기 위해 체크된다. 예를 들어, LBA들 중 하나에 대한 맵의 엔트리는 LBA가 발견된 판독 유닛 보다 오래된 판독 유닛을 지칭한다. 맵이 구식(out-of-date)이면, 맵은 업데이트된다. 일부 사용 시나리오들에서, 예를 들어, LBA가 체크포인트 주기 동안 1회 보다 많이 기록될 때, 동일한 LBA가 제 1 판독 유닛에서 발견되고 그 후 후속하여 제 2 판독 유닛에서 발견된다. 따라서, 이러한 예에서, 데이터 판독 유닛들은 복구 동안 개념적으로 차례로 프로세싱되고, 일부 인스턴스들에서, 맵에서의 동일한 엔트리는 동일한 LBA가 판독 유닛들에서의 헤더들에서 1회 보다 많이 발견되면 복구 동안 1회 보다 많이 업데이트된다. 다른 예에서, 데이터 판독 유닛들은 개념적으로 (차례로, 예를 들어, 순방향보다는) 역방향으로 프로세싱되고 동일한 LBA에 대한 반복된 기록들은 폐기된다.
다양한 기술들이 NVM에 기록된 기록 데이터와 맵을 동기화시키기 위해 사용된다. 이 기술들 중 일부는 1-레벨 맵을 갖는 실시예들에 적용가능하지만, 이 기술들 중 다른 것들은 2-레벨 또는 멀티-레벨 맵을 갖는 실시예들에 적용가능하다.
일부 실시예들에서, 맵은 체크포인트 엔트리에 맵의 일부 또는 모두를 기록함으로써 주기적으로 체크포인팅된다. 일부 실시예들에서, 전체 맵은 체크포인트 FIFO에 기록된다. 다른 실시예들에서, 맵은 NVM에서의 특정한 핑-퐁 위치에(그리고 옵션으로 타임스탬프를 가지고) 기록된다. 또 다른 실시예들에서, 맵이 NVM에서 어디에 기록되는지를 나타내는 NVM의 어드레스가 체크포인트 FIFO에 기록된다. 또 다른 실시예들에서, 맵은 전체 맵이 다수의 체크포인트 엔트리들(예를 들어, 롤링 체크포인트)에 걸쳐 체크포인팅되도록 그 부분이 한번에 체크포인팅된다. 일부 사용 시나리오들에서, 맵의 부분을 한번에 체크포인팅하는 것은 호스트 기록 커맨드들과 같은 일부 커맨드들의 레이턴시에 대한 감소된 상한(upper-bound)을 가능하게 한다.
일부 실시예들에서, 임의의 일치성 문제들을 해결하기 위해, 계층적 일치성 기록 순서화가 일치성을 보장하도록 부과되고, 예를 들어, 기록 데이터는 NVM에 기록된 대응하는 업데이트된 맵 엔트리 이전에 NVM에 항상 기록된다. 예를 들어, 일부 실시예들에서, 맵 엔트리는 기록 데이터가 NVM에 남겨진 이후에만 업데이트되고, 기록 데이터는 기록 데이터가 연관되는 LBA를 리코딩하는 헤더들을 포함한다. 그 사이에, 맵에 대한 펜딩 업데이트가 맵 캐시와 같은 다른 구조에서 홀딩된다. 일부 실시예들에서, 맵 캐시는 엔트리가 "펜딩"(예를 들어, NVM에 대한 기록 데이터의 기록의 완료를 대기)인지 여부를 나타내는 맵 캐시에서의 각 엔트리에 대한 정보를 포함한다. 기록 데이터가 NVM에 기록될 때까지 체크포인팅되는 맵의 버전의 업데이트를 지연시킴으로써, 맵의 체크포인트들은 기록 데이터 보다 항상 오래되고, 맵과 기록 데이터 사이의 일치성은 기록 데이터 헤더들로부터의 LBA 매핑 정보가 맵으로부터의 임의의 상반되는(더 오래된) 정보 보다 우선순위화되기 때문에 널리 정의된다.
계층적 일치성 기록 순서화를 사용함으로써, (NVM에 저장되고 복구시에 복원될 때의) 맵은 데이터 판독 유닛들로부터 보다 조기의 정보만을 항상 포함한다. 복구된 맵은 복구된 데이터 판독 유닛들로부터의 임의의 데이터 보다 항상 오래되고, (예를 들어, 체크포인트 FIFO에서의 프리 R-블록들의 리스트로부터 결정될 때의) 복구된 데이터 판독 유닛들에서의 헤더들은 맵을 업데이트하기 위해 사용된다.
일부 2-레벨 맵 실시예들에서, 제 2 레벨 맵 엔트리들이 NVM에 주기적으로 저장된다. (다수의 제 2 레벨 맵 엔트리를 포함하는) 제 2 레벨 맵 페이지는 제 1 레벨 맵 인덱스를 포함하는 맵 헤더를 포함하고, 제 1 레벨 맵 인덱스와 연관된 FLM의 엔트리는 제 2 레벨 맵 페이지를 포인팅한다. 제 1 레벨 맵 인덱스는 제 2 레벨 맵 페이지에 대한 셀프-저널링 특성을 제공한다. 계층적 일치성 기록 순서화는, 기록 데이터가 NVM에 먼저 기록되고, 기록 데이터와 연관된 제 2 레벨 맵 엔트리들 중 특정한 하나를 포함하는 제 2 레벨 맵 페이지가 오직 기록 데이터의 기록이 완료된 이후에 NVM에 기록되며, 제 2 레벨 맵 페이지를 포인팅하는 제 1 레벨 맵 엔트리가 오직 제 2 레벨 맵 페이지 기록이 완료된 이후에 (제 2 레벨 맵 페이지의 업데이트된 위치를 참조하기 위해) 업데이트되도록 확장된다. 프리 R-블록들의 하나의 리스트가 제 2 레벨 맵 엔트리들 뿐만 아니라 기록 데이터를 저장하도록 사용된 R-블록들을 옵션으로 및/또는 선택적으로 포함한다. 일부 실시예들에서, 프리 R-블록들의 하나의 리스트가 제 2 레벨 맵 엔트리들에 대해 사용되고, 프리 R-블록들의 다른 리스트가 데이터에 대해 사용되며, R-블록들은 2개의 리스트들 사이에서 분리된다. 2개의 리스트들은 데이터 판독 유닛들로부터 1-레벨 맵의 복구와 유사하게, 제 2 레벨 맵 페이지들에서의 헤더로부터의 제 1 레벨 맵의 복구를 가능하게 한다. 따라서, 제 1 레벨 맵의 체크포인트들은 복원된 제 2 레벨 맵 페이지들 보다 항상 오래된다(그리고, 제 1 레벨 맵은 복원된 제 2 레벨 맵 페이지들에서의 헤더들을 사용하여 업데이트된다). 유사하게는, 제 2 레벨 맵 페이지들은 기록 데이터 보다 오래되고, 제 2 레벨 맵 페이지들은 복원된 데이터 판독 유닛들에서의 헤더들을 사용하여 업데이트된다.
롤링 체크포인트들을 갖는 일부 실시예들과 같은 일부 실시예들에서, 여분의 저널 헤더들이 체크포인트 이벤트들을 리코딩하기 위해 데이터 판독 유닛들 및/또는 맵 판독 유닛들에 추가된다. 저널 헤더들은 이벤트들을 리코딩하는 정보를 포함하고, 이 정보는 복구를 돕기 위해 사용된다. 예를 들어, 저널 헤더는 맵의 부분이 데이터 스트림에서의 그 포인트까지 일치한다는 것(예를 들어, 체크포인팅되었다는 것)을 나타내기 위해 데이터 판독 유닛에 기록된다.
일부 실시예들에서, 저널 헤더들은 복구 프로세스가 데이터 스트림에서 얼마나 멀리 떨어져(far back) 시작하는지를 나타낸다. 예를 들어, 롤링 체크포인트들로, 그리고 추가의 실시예에서, 하나 또는 그 초과의 데이터 구조들의 체크포인트 정보를 생략한 일부 체크포인트 엔트리들로, 복구는 데이터 구조들 모두가 완전하게 체크포인팅되는 최근 시점에 대응하는 정보를 사용하여 프로세싱을 시작한다. 예를 들어, 맵이 N개의 체크포인트 엔트리들에 걸쳐 N개의 피스들에서 체크포인팅되면, 복구는 맵의 모든 N개의 피스들이 체크포인팅된 이후 최근의 시간에 대응하는 데이터 페이지에서의 위치('가장 멀리 떨어진 포인트(farthest back point)'로 칭함)에서 시작한다.
일부 실시예들에서, 저널 헤더들은, 특정한 포인트에서 일치하는 데이터 구조의 부분을 나타낸다. 상기 맵 복구 예에 계속하여, 가장 멀리 떨어진 포인트에서, 맵의 N개의 피스들 중 제 1 피스가 체크포인팅된다(그리고, 가장 멀리 떨어진 포인트의 정의에 의해, 데이터 스트림에서의 추후 시간에서는 체크포인팅되지 않는다). 맵의 제 1 피스에 후속하고 그에 영향을 미치는 모든 업데이트들이 맵에 적용된다. 그러나, 맵의 다른 피스들은, 데이터 스트림에서의 후속 데이터가 체크포인트에 리코딩되지 않았다는 것을 나타내는 대응하는 저널 헤더에 조우(encounter)한 이후에만 업데이트된다.
일부 실시예들에서, 계층적 일치성 데이터 및/또는 데이터 구조들의 시간-순서화가 타임스탬프 및/또는 시퀀스 번호들에 의해 결정된다. 즉, 기록 데이터가 대응하는 업데이트된 맵 엔트리에 후속하거나 그 이전에 NVM에 기록되는지를 결정하는 것은 타임스탬프들 및/또는 시퀀스 번호들의 비교에 의해 이루어진다. 타임스탬프들 및/또는 시퀀스 번호들은 NVM에 대한 물리적 기록들이 수행되는 순서에 관하여 불변인 스트림들 중에서 업데이트들의 순서의 사양을 제공하기 위해 예를 들어, 기록/리사이클 데이터, 맵 정보, 및/또는 체크포인트 엔트리들을 홀딩하는 각각의 스트림들에서 옵션으로 및/또는 선택적으로 출력된다. 다른 실시예들에서, 타임스탬프들 및/또는 시퀀스 번호들은 에폭 헤더로 칭하는 특수한 타입의 헤더로서 스트림에서 출력된다. 각 에폭 헤더는 에폭(예를 들어, 도 5의 에폭(523))으로 칭하는 현재의 타임스탬프 및/또는 시퀀스 번호를 포함한다.
다양한 실시예들에서, 에폭은 각 데이터 기록으로 향상되고 그리고/또는 증분되고, 데이터 기록들이 이루어지는 순서를 고유하게 결정한다. 추가 실시예들에서, 데이터 기록들 중 특정한 하나로부터 발생하는 데이터 구조 업데이트에는 특정한 데이터 기록의 에폭이 할당된다. 데이터 구조 업데이트가 특정한 데이터 기록의 에폭에 따라 스트림에 기록될 때, 특정한 데이터 기록 및 데이터 구조 업데이트의 순서화는, 특정한 데이터 기록 및 데이터 구조 업데이트가 NVM에 기록되는 순서에 관계없이, 특정한 데이터 기록의 에폭 및 데이터 구조 업데이트의 에폭을 특정하는 각각의 에폭 헤더들로부터 결정된다.
다양한 실시예들에 따르면, 에폭 헤더들은, 데이터 기록 당 1회; 일부 데이터 기록들로만; 데이터 스트림에서 주기적으로; NVM의 페이지 당 적어도 1회; 및 대역 스위치 당 적어도 1회 중 하나 또는 그 초과의 것으로 출력된다. 단일 데이터 대역을 갖는 제 1 예에서, 에폭 헤더는 데이터 스트림의 데이터로 기록되는 NVM의 페이지 당 적어도 1회 출력된다. 데이터 스트림의 각 페이지에서 에폭 헤더의 제공은 다수의 페이지들을 판독하지 않고 페이지에서 데이터의 에폭의 결정을 가능하게 한다. 핫 대역 및 콜드 대역과 같은 복수의 데이터 대역들을 갖는 제 2 예에서, 에폭 헤더는 대역에 관계없이 기록되는 NVM의 페이지 당 적어도 1회, 및 추가로 바로 이전의 데이터 기록이 (대역 스위치로 칭하는) 현재의 데이터 기록과는 상이한 대역들 중 하나일 때마다 출력된다. 대역 스위치 당 적어도 1회의 에폭 헤더의 제공은, 모든 데이터 기록들이 각각의 에폭 헤더를 반드시 갖지 않더라도, 각 데이터 기록의 에폭의 결정을 가능하게 한다. 또한, 대역 스위치 당 적어도 1회 에폭 헤더의 제공은, 대역들 중에서 기록들의 일치된 순서를 제공함으로써 핫 대역 및 콜드 대역과 같은 2개 또는 그 초과의 대역들을 단일 스트림으로서 취급하는 것을 가능하게 한다.
일부 실시예들에서, 복수의 에폭 시퀀스들이 존재한다. 제 1 예에서, 개별 에폭 시퀀스들이 새롭게 기록된 데이터 대(vs) 리사이클링된 데이터에 대해 사용된다. 데이터 구조 업데이트들에는 연관된 데이터 기록들에 의존하여, 에폭 시퀀스들 중 하나 또는 그 초과의 것으로부터의 에폭들이 할당된다. 제 2 예에서, NVM에 대한 데이터 기록들은 (예를 들어, 제 1 에폭 시퀀스로부터의) 제 1 에폭으로 타임스탬프되고, NVM에 대한 제 2 레벨 맵 기록들은 (예를 들어, 제 2 에폭 시퀀스로부터의) 제 2 에폭으로 타임스탬프된다. 제 2 레벨 맵에 대한 업데이트들에는 연관된 데이터 기록에 대응하는 제 1 에폭 값이 할당되고, 제 1 레벨 맵에 대한 업데이트들에는 연관된 제 2 레벨 맵 기록에 대응하는 제 2 에폭 값이 할당된다. 맵 스트림은 2개의 타입의 에폭 헤더들을 옵션으로 및/또는 선택적으로 갖고, 하나는 제 1 에폭 값용이고 하나는 제 2 에폭 값용이다.
맵의 복구를 상술하였지만, 다른 데이터 구조들이 셀프-저널링 및 계층적 일치성을 사용하여 유사하게 복구가능하다. 예를 들어, R-블록 사용 카운트 테이블이 유사하게 체크포인팅가능하고 복구가능하다. 일부 실시예들에서, R-블록 사용 카운트는 각 R-블록에서 활성(중복기재되지 않은) LB들의 수의 카운트를 포함한다.
셀프-저널링 및 계층적 일치성 특성들은 캐싱된 (부분) 데이터 구조들에 또한 적용가능하다. 예를 들어, 맵 캐시가 맵의 더티 엔트리들을 포함한다. 일부 실시예들에서, 맵 캐시 엔트리들 각각은 복수의 제 2 레벨 맵 페이지들 중 하나에 대응하고, 제 2 레벨 맵 페이지들 각각은 복수의 제 2 레벨 맵 엔트리들을 포함하며, 맵 캐시 엔트리들 중 특정한 하나는, 특정한 맵 캐시 엔트리에서의 임의의 제 2 레벨 맵 엔트리들이 더티이면 더티이다. 맵 캐시는 계층적 일치성에 따라, 체크포인트 엔트리에(전체적으로, 롤링 체크포인트 방식으로, 또는 맵 캐시의 더티 엔트리들을 주기적으로 플러싱함으로써) 주기적으로 리코딩된다. 일부 실시예들에서, 계층적 일치성은 맵 엔트리 마다에 기초하여(on a per-map-entry basis) 후속한다. 이 예에 계속하여, 맵 캐시의 일부가 체크포인트 엔트리에 세이빙될 때, 완료된 기록 데이터(예를 들어, 예컨대 NVM에 남겨둠으로써 비휘발성으로 저장된 기록 데이터)에 대응하는 맵 엔트리들만이 체크포인팅된다. 예를 들어, 맵 캐시에서의 엔트리가 업데이트되고 대응하는 데이터가 아직 비휘발성으로 저장되지 않은 경우에, 업데이트된 맵 엔트리의 체크포인팅은 대응하는 데이터가 비휘발성으로 저장될 때까지 연기된다.
일부 실시예들에서, 맵 캐시는 엔트리 마다 2개의 판독 유닛 어드레스들, 예를 들어, 계층적으로 일치하는 판독 유닛 어드레스 및 펜딩 판독 유닛 어드레스를 포함한다. 비휘발성 스토리지 시스템에 대한 판독 액세스는 (예를 들어, NVM에 대한 기록을 펜딩하는 판독 유닛 어드레스에 의해 액세스된 데이터 캐시에 저장되는) 최근의 데이터를 위치시키기 위해 펜딩 판독 유닛 어드레스를 사용하도록 인에이블된다. 그러나, 체크포인트 동작은 계층적으로 일치하는 판독 유닛 어드레스를 사용하도록 인에이블된다. 기록 데이터가 NVM에 기록될 때, 영향을 받은 맵 캐시 엔트리들에서의 대응하는 펜딩 어드레스들이 계층적으로 일치하는 어드레스에 카피된다(그 후, 체크포인팅하는데 이용가능하다).
다양한 실시예들에서, 맵 캐시의 복수의 엔트리들 각각은 복수의 제 2 레벨 맵 페이지들 중 하나에 대응하고, 제 2 레벨 맵 페이지들 각각은 복수의 제 2 레벨 맵 엔트리들을 포함하며, 맵 캐시 엔트리들 중 특정한 하나는, 특정한 맵 캐시 엔트리에서의 임의의 제 2 레벨 맵 엔트리들이 더티이면 더티이다. 다양한 실시예들에 따르면, 맵 캐시의 더티 엔트리들 각각은, 더티 엔트리의 가장 오래된 업데이트의 에폭을 특정하는 타입스탬프와 연관된 것; 더티 엔트리의 가장 새로운 업데이트의 에폭을 특정하는 타임스탬프와 연관된 것; 및 현재의 데이터 기록의 에폭과 연관된 것 중 하나 또는 그 초과의 것이다. 일부 실시예들에서, 더티 엔트리들 각각은 더티 엔트리의 가장 오래된 업데이트의 에폭을 특정하는 연관된 타임스탬프가 현재의 데이터 기록에 대한 에폭을 너머 결정된 양 보다 많아지기 이전에 플러싱된다. 일부 실시예들에서, 더티 엔트리들 중 플러싱된 하나와 NVM에 저장된 타임스탬프는 플러싱된 더티 엔트리와 연관된 타임스탬프들 중 어느 하나 또는 그 초과의 것이다.
엔트리들이 NVM에 기록될 때 펜딩 맵 캐시에서의 엔트리들이 계층적으로 일치하는 맵 캐시에 카피되는 것과 같이, 개별의 계층적으로 일치하고 펜딩하는 맵 캐시들을 사용하는 것과 같은 다른 방식들이 가능하다.
일부 실시예들에서, LBA들을 동적으로 매핑하기 위해(즉, LBA들이 기록될 때) 사용되는 맵 캐시들과 같은 동적 구조들이 체크포인팅된 형태로 NVM에만 존재한다. 예를 들어, 맵 자체와 다르게, 구조들은 영구 스토리지를 갖지 않는다. 예를 들어, 일부 실시예들에서, 맵 캐시에서의 더티 엔트리들만이 체크포인팅되고, 맵 캐시가 확장된 기간 동안 더티 엔트리들을 갖지 않으면(그리고 체크포인트 FIFO가 랩핑되면(wrapped)), 맵 캐시에 대한 체크포인트는 존재하지 않는다. 동적 구조들이 (필요할 때) 체크포인트들에 존재하기 때문에, 동적 구조들은 또한 오작동 이후에 복구 동안 재구조화가능하다.
특정한 실시예들
다양한 특정한 실시예들이 비휘발성 스토리지 시스템들에서 셀프-저널링 및 계층적 일치성에 적용가능하고 그리고/또는 그와 관련된 하나 또는 그 초과의 기술들을 구현한다. 2-레벨 매핑 방식이 하나 또는 그 초과의 데이터 스트림들에 대한 호스트 및 리사이클 데이터 기록들을 갖는 맵 스트림 및 체크포인트 스트림에 대한 기록들을 통해 관리된다. 2-레벨 매핑 방식의 FLM 및 SLM 엘리먼트들의 복원은 체크포인트 스트림으로부터의 정보, 그에 후속하여, 맵 스트림으로부터의 정보 및 데이터 스트림들로부터의 정보를 사용한다. 복원 동안, 데이터 스트림들은 맵 스트림에 대해 우선권을 취하고, 맵 스트림은 체크포인트 스트림에 대해 우선권을 취한다.
도 8은 FLM 및 하나 또는 그 초과의 SLM 페이지들을 갖는 2-레벨 맵을 통해 NVM에 저장된 LB들에 LBA들을 매핑하는 실시예의 선택된 상세사항들을, LBA - NVM 위치 매핑(800)으로서 예시한다. 2-레벨 맵은 하나 또는 그 초과의 제 2 레벨 엘리먼트들(단일 엘리먼트 SLM 페이지(820)로서 개념적으로 예시됨)에 커플링된 제 1 레벨 엘리먼트(FLM(810))를 통해 구현된다. FLM은 복수의 엔트리들(SLM 페이지/길이(810.1) .. SLM 페이지/길이(810.M))을 포함한다. FLM의 엔트리들 각각은 (SLM 페이지(820)와 같은) SLM 페이지들 중 하나를 포인팅한다. SLM 페이지는 복수의 엔트리들(LB 페이지/길이(820.1) .. LB 페이지/길이(820.N))을 포함한다. SLM 페이지들의 엔트리들 각각은 데이터가 시작하는 NVM에서의 위치(예를 들어, 적어도, LBA에 대한 호스트 기록 데이터의 맨 처음 부분을 저장하는 판독 유닛)를 포인팅한다. 분할기(정수 분할기(822))는, 어느 FLM 엔트리를 선택하고 (선택된 FLM 엔트리에 의해 포인팅된 SLM 페이지내의) 어느 SLM 엔트리를 선택할지 결정하기 위해 인커밍 LBA를 분할하도록 예를 들어, 프로그램가능한 하드웨어 레지스터(SLM 엔트리들/SLM 페이지(CSR)(823))로부터 파라미터를 수신한다. 분할기는 FLM 및 SLM 페이지들에 커플링된다.
다양한 실시예들에서, 도면은 도 1a의 맵(141) 및/또는 테이블(143)의 관련된 또는 선택된 상세사항들을 예시한다. 예를 들어, 일부 실시예들에서, 맵(141) 및/또는 테이블(143)은 FLM의 하나 또는 그 초과의 엔트리들 및/또는 SML의 하나 또는 그 초과의 엔트리들과 같은, 매핑 정보의 하나 또는 그 초과의 캐시들을 구현한다. FLM 및/또는 SLM의 전체 이미지는 예를 들어, 캐시들이 이전에 캐싱된 FLM 및/또는 SLM 엔트리를 대체할 때 업데이트된 NVM(예를 들어, 도 1a의 NVM(199))의 부분에 유지된다. 일부 실시예들에서, FLM 및/또는 SLM 전체 이미지들은 롤링 또는 핑-퐁 체크포인트들을 통해 구현되고, 체크포인트들 각각은 각각의 전체 맵 이미지의 일부이다.
동작중에, LBA(821)가 정수 분할기(822)에 제공된다. 분할기는 SLM 엔트리들/SLM 페이지(CSR)(823)에 의해 제공될 때, SLM 페이지 당 SLM 엔트리들의 수로 LBA를 분할하여, 몫(FLM 인덱스(822Q))과 나머지(SLM 페이지 인덱스(822R))를 발생시킨다. 몫은 FLM 엔트리들 중 하나를 선택하기 위해 사용되고, 선택된 FLM 엔트리의 페이지 필드가 판독된다(SLM 포인터(810S)). 페이지 필드는 SLM 페이지들 중 하나(예를 들어, SLM 페이지(820))를 선택하기 위해 사용되고, 나머지는 선택된 SLM 페이지의 엔트리를 선택하기 위해 (예를 들어, 오프셋으로서) 사용된다. 선택된 SLM 페이지 엔트리의 페이지 필드는 특정한 판독 유닛과 같은 NVM에서의 특정한 위치를 선택하기 위해 사용되고, 여기서, 적어도, 제공된 LBA에 대응하는 LB의 맨 처음 부분이 저장된다(LB 포인터(820L)). 다양한 실시예들에서, LB 포인터들은 NVM의 판독 유닛의 어드레스(예를 들어, 도 2의 판독 유닛 어드레스(223))를 포함한다. 일부 실시예들에서, SLM 엔트리들 각각은 LB에 대한 모든 데이터를 획득하기 위해 얼마나 많은 판독 유닛들을 판독할지 그리고/또는 판독 유닛내의 어디에서 LB에 대한 데이터가 시작하는지(예를 들어, 도 2의 판독 유닛들에서의 길이(225))를 나타내는 길이 필드(예를 들어, 인코딩 사이즈 및/또는 스팬)를 포함한다. 일부 실시예들에서, FLM 엔트리들 각각은 FLM 엔트리의 페이지 필드에 의해 특정된 모든 각각의 SLM 페이지를 획득하기 위해 얼마나 많은 판독 유닛들을 판독할지(예를 들어, 도 2의 판독 유닛들에서의 길이(225))를 나타내는 길이 필드(예를 들어, 인코딩 사이즈 및/또는 스팬)를 포함한다.
다양한 실시예들에서, 몫은 SLM 페이지들의 완전하게 연관된 캐시와 같은 캐시에 액세스하는 키(key)로서 사용된다. 특정한 SLM 페이지에 대한 캐시에 히트가 있다면, 특정한 SLM 페이지의 최근의 카피가 NVM에 액세스하지 않고 캐시에서 발견된다. 복수의 SLM 페이지들에 대한 고속 액세스의 제공은, 일부 실시예들 및/또는 사용 시나리오들에서, NVM에 대한 순차적 데이터 액세스들의 복수의 독립적 스트림들의 더욱 효율적인 프로세싱을 가능하게 한다(예를 들어, LBA들의 제 1 영역에 대한 순차적 데이터 액세스들의 제 1 스트림은 LBA들의 제 2 영역에 대한 순차적 데이터 액세스들의 제 2 스트림에 배치된다(interspersed).
도 9는 SLM 및 FLM 정보의 기록을 비롯하여, 호스트로부터 NVM으로의 데이터의 수신 및 기록의 다양한 실시예들, 및 셀프-저널링 및 타임스탬프 리코딩의 다양한 형태들의 선택된 상세사항들을, 데이터, 맵 및 체크포인트 기록 프로세싱(900)으로서 예시한다. 프로세싱은 또한 리사이클링 동작들로부터 소싱된 데이터에 적용가능하다. 프로세싱은 개념적으로 2개의 부분들을 갖고, 제 1 부분은 데이터를 적절하게 호스팅(또는 리사이클링)하는 것(데이터 수신 및 기록(910))에 관련되고, 제 2 부분은 데이터를 매핑하는 것(맵 엔트리들을 생성 및 기록(920))에 관련된다. 또한, 예시된 동작들 중 선택된 것들은 체크포인팅으로 처리된다(엘리먼트들을 체크포인팅(995)).
프로세싱은 호스트 기록 커맨드(또는 리사이클링 동작 데이터 생성)의 수신시에 시작한다(시작(901)). 그 후, 호스트(또는 리사이클링) 데이터가 획득된다(호스트로부터 데이터 수신(911)). 그 후, 데이터는 예를 들어, 압축, 암호화, 패딩, 및/또는 다양한 포맷팅 동작들을 통해 NVM으로의 기록을 위해 변환된다(데이터 포맷팅(912)). 이어서, 셀프-저널링 정보가 예를 들어, 데이터가 어느 LBA에 대응하는지를 나타내는 헤더를 통해 데이터에 삽입된다(데이터 셀프-저널링(913)). 일부 실시예들에서, 헤더는 도 5에 예시되어 있는 바와 같이, 길이 및/또는 오프셋 및/또는 다른 정보를 포함한다. 그 후, 시간 마커가 예를 들어, 헤더에서의 에폭 필드를 통해 데이터에 삽입된다(데이터 타임스탬핑(914)). 다양한 실시예들에서, 시간 마커는 특정한 타입의 헤더로서 삽입된다. 이어서, 데이터, 헤더, 및 시간 마커가 다른 호스트(또는 리사이클링) 데이터 및 헤더 정보로 모아진다(데이터 버퍼링(915)). 충분한 정보가 모아지면, 모아진 정보가 NVM에 기록된다(NVM에 데이터 기록(916)).
데이터의 포맷팅(데이터 포맷팅(912))은 판독 유닛 어드레스 및 판독 유닛들에서의 길이와 같이, 데이터가 기록되는 NVM에서의 위치를 포인팅하는 2-레벨 맵의 제 2 레벨에 대한 정보로 시작하는, 부분적으로, 맵 엔트리를 생성(데이터에 대한 SLM 엔트리를 생성(922))하기 위해 사용되는 정보를 제공한다. 일부 실시예들에서, 맵 엔트리를 생성하기 위한 추가 정보는, 부분적으로, 데이터 버퍼링(915)에 의해 결정될 때, 데이터가 NVM의 어디에 기록되는지를 결정함으로써 제공된다. 그 후, 셀프-저널링 정보가 예를 들어, SLM 엔트리에 대응하는 FLM 인덱스를 제공하는 헤더를 통해 엔트리에 삽입된다(SLM 엔트리 셀프-저널링(923)). 일부 실시예들에서, 헤더는 도 5에 예시되어 있는 바와 같이, 길이, 오프셋, 및/또는 다른 정보를 포함한다. 이어서, 시간 마커가 예를 들어, 헤더에서의 에폭 필드를 통해 엔트리에 삽입된다(SLM 엔트리 타임스탭핑(924)). 다양한 실시예들에서, 시간 마커는 특정한 타입의 헤더로서 삽입된다. 그 후, 엔트리, 헤더, 및 시간 마커가 다른 SLM 엔트리들 및 헤더들과 모아진다(SLM 엔트리 버퍼링(925)). 충분한 정보가 모아지면, 모아진 정보가 NVM에 기록된다(NVM에 SLM 엔트리 기록(926)). 일부 실시예들에서, SLM 정보를 모으는 것은 적어도 부분적으로 하나 또는 그 초과의 캐시들을 통해 이루어진다.
SLM 엔트리의 생성(데이터에 대한 SLM 엔트리 생성(922))은 SLM 엔트리를 포인팅하는 FLM 엔트리를 생성(SLM 엔트리에 대한 FLM 엔트리의 생성(932))함으로써, 부분적으로, 맵 엔트리의 생성을 완료하기 위해 사용되는 정보를 제공한다. SLM 엔트리와 유사하게, 셀프-저널링 및 시간 마커 삽입(FLM 엔트리의 셀프-저널링(933) 및 FLM 엔트리의 타임스탬핑(934)) 이후에, NVM에 대한 버퍼링 및 기록(FLM 엔트리 버퍼링(935) 및 NVM에 FLM 엔트리 기록(936))이 존재한다. NVM에 데이터, SLM 엔트리, 및 FLM 엔트리를 기록(NVM에 데이터 기록(916), NVM에 SLM 엔트리 기록(926), 및 NVM에 FLM 엔트리 기록(936))한 이후에, 프로세싱은 완료된다(종료(999)).
일부 실시예들에서, SLM 엔트리들은 SLM 페이지들로서 구조화되고 SLM 페이지들은 (예를 들어, 캐시에서) 캐싱되어, NVM에 SLM 페이지를 기록하기 이전에(SLM 엔트리를 셀프 저널링(923) 내지 NVM에 SLM 엔트리를 기록(926)) SLM 페이지의 엔트리들에 대한 다수의 업데이트들을 가능하게 한다(데이터에 대한 SLM 엔트리를 생성(922)). SLM 페이지들 중 캐싱된 페이지들 각각은 하나 또는 그 초과의 데이터 기록들로부터의 업데이트들을 축적하도록 인에이블되고, 옵션으로 및/또는 선택적으로 각각의 캐싱된 SLM 페이지가 캐시로부터 플러싱될 때까지 NVM에 기록되지 않는다. 다양한 실시예들에 따르면, 캐싱된 SLM 페이지들 중 플러싱된 하나와 NVM에 기록된 시간 마커는, 플러싱된 SLM 페이지에서의 엔트리에 영향을 미친 최근의 데이터 기록에 대응하는 시간 마커; 캐싱된 이후로 플러싱된 SLM 페이지에서의 엔트리에 영향을 미친 가장 조기의 데이터 기록에 대응하는 시간 마커; 현재의 데이터 기록에 대응하는 시간 마커; 및 맵 스트림에 대응하는 시간 마커 중 하나 또는 그 초과의 것이다.
일부 실시예들에서, FLM 엔트리들은 롤링 체크포인트의 일부로서 부분들에서 NVM에 기록되어, NVM에 FLM의 부분을 기록하기 이전에(FLM 엔트리를 셀프 저널링(933) 내지 NVM에 FLM 엔트리를 기록(936)) FLM의 부분의 엔트리들에 대해 다수의 업데이트들을 가능하게 한다(SLM 엔트리에 대한 FLM 엔트리를 생성(932)). FLM의 부분들 각각은 하나 또는 그 초과의 SLM 엔트리들로부터의 업데이트들을 축적하도록 인에이블되고, 옵션으로 및/또는 선택적으로 FLM의 부분의 체크포인트가 (예를 들어, 롤링 체크포인트의 일부로서) 이루어질 때까지 NVM에 기록되지 않는다. 다양한 실시예들에 따르면, FLM의 부분들 중 하나와 NVM에 기록된 시간 마커는, FLM의 부분에서의 엔트리에 영향을 미친 최근의 데이터 기록에 대응하는 시간 마커; FLM의 부분이 최종 체크포인팅된 이후로 FLM의 부분에서의 엔트리에 영향을 미친 가장 조기의 데이터 기록에 대응하는 시간 마커; 현재의 데이터 기록에 대응하는 시간 마커; 및 FLM의 부분에서 대응하는 업데이트를 갖는 SLM 엔트리의 맵 스트림에서의 시간 마커와 같은 맵 스트림에 대응하는 시간 마커 중 하나 또는 그 초과의 것이다.
다양한 실시예들에서, 예를 들어, 헤더들을 통해 삽입되는 셀프-저널링 정보는 도 4a, 도 4b, 및 도 5에 예시된 바와 같이 헤더들에 포함된다. 일부 실시예들에서, FLM 정보를 모으는 것은, 만약 있다면, SLM 정보의 캐싱과 독립적으로, 또는 대안적으로 SLM 정보의 캐싱과 협력하여, 적어도 부분적으로 하나 또는 그 초과의 캐시들을 통해 이루어진다.
다양한 실시예들 및 사용 시나리오들에서, 수신으로부터 NVM에 대한 기록까지의 데이터 프로세싱(데이터 포맷팅(912) 내지 NVM에 데이터 기록(916))은 생성으로부터 NVM에 대한 기록까지의 맵 프로세싱(데이터에 대한 SLM 엔트리 생성(922) 내지 NVM에 SLM 엔트리 기록(926) 및/또는 SLM 엔트리에 대한 FLM 엔트리 생성(932) 내지 NVM에 FLM 엔트리 기록(936))과 독립적으로 진행된다. 또한, 다양한 실시예들 및 사용 시나리오들에서, 생성으로부터 NVM에 대한 기록까지의 SLM 및 FLM 프로세싱(데이터에 대한 SLM 엔트리 생성(922) 내지 NVM에 대한 SLM 엔트리 기록(926) 및 SLM 엔트리에 대한 FLM 엔트리 생성(932) 내지 NVM에 대한 FLM 엔트리 기록(936) 각각)은 서로 독립적으로 진행된다. 데이터, SLM, 및 FLM 프로세싱은 전체적으로 또는 부분적으로 서로 병렬로 발생하고, SLM 엔트리의 생성(데이터의 포맷팅(912) 내지 데이터에 대한 SLM 엔트리 생성(922)) 및 FLM 엔트리의 생성(데이터에 대한 SLM 엔트리 생성(922) 내지 SLM 엔트리에 대한 FLM 엔트리 생성(932))에 관한 의존성들에 의해서만 제한된다.
다양한 실시예들에서, 독립적인(따라서, 전체적으로 또는 부분적으로 병렬이거나 오버랩하는) 기록 데이터 사이의 프로세싱(데이터 수신 및 기록(910)) 및 맵 엔트리들의 프로세싱(맵 엔트리들의 생성 및 기록(920)의 SLM 및 FLM 관련 부분들)에 부가하여, 910, 및 920의 SLM 및 FLM 관련 부분들 각각 내에서의 프로세싱은 전체적으로 또는 부분적으로 병렬이고, 오버랩하고 그리고/또는 파이프라인된다(pipelined). 예를 들어, 제 1 호스트 데이터가 수신되고(호스트로부터 데이터 수신(911)), 그리고 제 1 호스트 데이터가 포맷팅되는 동안(데이터의 포맷팅(912)), 제 2 호스트 데이터가 병렬로 수신된다(호스트로부터 데이터 수신(911)). 다른 예에 있어서, 제 1 SLM 엔트리가 생성되고(데이터에 대한 SLM 엔트리 생성(922)), 그리고 그 후, 제 1 SLM 엔트리가 셀프-저널링되는 동안(SLM 엔트리 셀프 저널링(923)), 제 2 SLM 엔트리가 병렬로 생성된다(데이터에 대한 SLM 엔트리를 생성(922)). 또한, 제 1 SLM 엔트리에 대한 FLM 엔트리가 제 2 SLM 엔트리의 생성(및 제 1 SLM 엔트리의 셀프-저널링)과 병렬로 생성된다(SLM 엔트리에 대한 FLM 엔트리 생성(932)).
일부 실시예들에서, 추후 동작들은 그 추후 동작들 이전에 시작한 동작들 보다 빨리 완료하도록 인에이블된다. 제 1 예에서, 2개의 상이한 대역들에 대한 데이터 기록들이 NVM에 기록되는 순서는 특정되지 않는다. 제 2 예에서, SLM 페이지들의 캐싱은, 추후 데이터 기록들로부터의 SLM 엔트리들에 대한 업데이트들이 추후 데이터 기록들보다 조기인 데이터 기록들로부터의 SLM 엔트리들에 대한 업데이트들 이전에 NVM에 기록되는 것을 가능하게 한다.
다양한 실시예들에서, 시간 마커들의 삽입은 선택적이고, 옵션이며 그리고/또는 생략된다(예를 들어, 데이터 타임스탬핑(914), SLM 엔트리 타임스탬핑(924), 및 FLM 엔트리 타임스탬핑(934) 중 하나 또는 그 초과가 생략되거나, 단지 선택적으로 삽입된다). 또한, 맵 정보의 기록은 데이터 정보의 기록의 완료까지 지연된다(또는 그 완료에 응답하여 수행된다). 예를 들어, NVM에 대한 SLM 엔트리 정보의 리코딩은 NVM에 대한 데이터의 기록의 완료를 대기한다(예를 들어, NVM에 대한 SLM 엔트리 기록(926)은 완료(916C)에 의해 표시된 바와 같이 NVM에 대한 데이터 기록(916)에 의존한다). 이 예에 계속하여, NVM에서 FLM 엔트리 정보의 리코딩은 NVM에 대한 SLM 정보의 기록의 완료를 대기한다(예를 들어, NVM에 대한 FLM 엔트리 기록(936)은 완료(926C)에 의해 표시된 바와 같이 NVM에 대한 SLM 엔트리 기록(926)에 의존한다). 복원 프로세싱은, FLM 및 SLM 정보가 그 FLM 및 SLM 정보에 의해 포인팅된 데이터 정보가 미리 기록될 때까지 기록되지 않기 때문에, NVM에 기록된 모든 SLM 정보 뿐만 아니라 NVM에 기록된 모든 FLM 정보를 사용한다. 따라서, NVM상의 데이터 및 맵 정보는 서로 일치한다.
일부 실시예들에서, 시간 마커들이 선택적으로 삽입된다. 예를 들어, 동일한 페이지에 저장된 연속 데이터 기록들에 대해 NVM의 동일한 페이지에 연속 시간 마커들을 삽입하는 대신에, 시간 마커들 중 제 1 마커만이 삽입된다. 시간 마커들 중 후속하는 마커의 값이 제 1 시간 마커의 값 및 다수의 개재하는 연속 데이터 기록들로부터 추론된다.
다양한 실시예들에서, 시간 마커들이 삽입되어, 예를 들어, 전체적으로 또는 부분적으로 병렬로 또는 서로에 관하여 순서없이(out-of-order), 서로에 독립적으로 데이터, SLM, 및 FLM 정보의 기록을 가능하게 한다. 일부 실시예들 및/또는 사용 시나리오들에서, 독립적 기록은 (예를 들어, 완료(916C) 및 완료(926C))에 의해 개념적으로 예시된 바와 같이) 의존적 기록 보다 더욱 효율적인 프로세싱(예를 들어, 더 낮은 레이턴시 및/또는 더 높은 대역폭)을 가능하게 한다.
특정한 동작 시나리오에서, 데이터 기록들은 NVM의 데이터 스트림(예를 들어, NVM에 데이터 기록(916)은 데이터 스트림)에 대한 것이고, 맵 기록들은 NVM의 맵 스트림 및/또는 체크포인트 스트림에 대한 것이다(예를 들어, NVM에 SLM 엔트리 기록(926) 및 NVM에 FLM 엔트리 기록(936)은 각각 맵 스트림 및 체크포인트 스트림에 대한 것이다). 데이터 기록들 중 하나 또는 그 초과의 것은 (예를 들어, 데이터 스트림의 기록과 충돌하는 소거 동작의 완료의 대기로 인해) 지연된다. 한편, 맵 스트림 기록들 중 적어도 하나는 소거 동작과 전체적으로 또는 부분적으로 병렬로 발생하여, 지연된 기록 데이터의 적어도 일부에 대응하는 적어도 하나의 맵 엔트리의 기록은 지연된 기록 데이터가 기록되기 이전에 완료된다. 이어서, 소거 동작이 완료된 후, 지연된 데이터 기록들이 완료된다. 지연된 데이터 기록들을 완료하기 이전에 오작동이 있었으면, 후속 복원은 데이터 및 맵 스트림들에서의 시간 마커들의 검사에 기초하여, 지연된 데이터 기록들에 대응하는 임의의 맵 스트림 기록들이 무시될 것이었음을 결정한다. 구체적으로는, 지연된 기록들에 대응하는 맵 스트림 기록들의 시간 마커들이 최근의(예를 들어, 가장 최근 또는 가장 덜 오래된) 데이터 스트림 기록들 보다 앞선다(예를 들어, 더 최근이거나 덜 오래된다).
다양한 실시예들에서, 맵 정보의 셀프-저널링의 삽입은 옵션적이고 그리고/또는 생략된다(예를 들어, SLM 엔트리의 셀프 저널링(923) 및 FLM 엔트리의 셀프 저널링(933) 중 하나 또는 그 초과가 생략된다).
일부 실시예들 및/또는 사용 시나리오들에서, 도면의 엘리먼트들 중 하나 또는 그 초과는 체크포인팅(엘리먼트들이 체크포인팅(995))에 영향을 받는다. 일부 시나리오들에서, 체크 포인트들은 더욱 효율적이며 그리고/또는 강건한 복원 프로세싱을 가능하게 하기 위해 다양한 시점들에서 NVM에 기록된다. 예를 들어, 모아진 데이터, SLM 정보, 및 FLM 정보(데이터 버퍼링(915), SLM 엔트리 버퍼링(925), 및 FLM 엔트리 버퍼링(935)) 중 하나 또는 그 초과가 체크포인트들에 포함된다. 다양한 실시예들에서, 복원 프로세싱은 체크포인트의 특정한 부분들을 무시할지 여부를 결정하기 위해 체크포인트들에 포함된 시간 마커들을 사용한다. 예를 들어, (데이터 버퍼링(915)에 대응하는) 데이터 스트림의 최근의 부분이 (NVM에 SLM 엔트리 기록(926)에 대응하는) 체크포인트의 최근의 SLM 부분 보다 나중의 시간 마커들을 갖지 않으면, 체크포인트의 최근의 SLM 부분이 복원 프로세싱 동안 폐기된다.
도 10은 NVM에 대한 스트리밍 호스트 및/또는 리사이클링된 데이터, 맵 정보, 및 체크포인트 FIFO 부분들의 다양한 실시예들의 선택된 상세사항들을 예시한다. R-블록들의 3개의 스트림이 예시되어 있고, 하나는 데이터 기록들용이고(데이터 R-블록들(1020)), 하나는 업데이트된 SLM 기록들용이고(SLM(맵) R-블록들(1030)), 하나는 FLM의 부분들과 같은 데이터 구조 체크포인트 기록들용이고(체크포인트 FIFO R-블록들(1040)), 이들은 스트림들로서 관리된 각각의 데이터, 맵, 및 체크포인트 대역들에 대응한다. "에폭" 엘리먼트들은 시간 마커들, 예를 들어, (도 5의 에폭(523)에 의해 예시된 바와 같은) 각각의 헤더들에서의 타임스탬프들에 대응한다. 도 10에서, 시간은 각각의 스트림 순서에 따라, 좌로부터 우로 가장 덜 최근(least recent) 내지 가장 최근이다. 또한, 도면은 또한 예를 들어, NVM의 페이지들에 의해 NVM을 기록하는 입도의 제한을 받는, 각 스트림내의 기록 순서를 나타낸다. NVM의 페이지들 중 하나를 갖는 엘리먼트들은 동시에 물리적으로 기록되더라도, 개념적으로는 도시된 순서로 기록된다. 따라서, 데이터 R-블록들의 엘리먼트들은 다음의 순서: 에폭-1(1021E)(가장 덜 최근), 데이터-1(1021), 에폭-2(1022E), 데이터-2(1022), 에폭-3(1023E), 및 데이터-3(1023)(가장 최근)로 기록된다. 맵 R-블록들의 엘리먼트들은 다음의 순서: 에폭-1(1031E)(가장 덜 최근), SLM-1(1031), 에폭-2(1032E), SLM-2(1032), 에폭-3(1033E), 및 SLM-3(1033)(가장 최근)로 기록된다. 체크포인트 맵 R-블록들의 엘리먼트들은 다음의 순서: 에폭-1(1041E)(가장 덜 최근), FLM-1(1041), 에폭-2(1042E), FLM-2(1042), 에폭-3(1043E), 및 FLM-3(1043)(가장 최근)로 기록된다.
데이터 R-블록들에서의 정보는, 데이터 R-블록들에서의 정보가 NVM에 무엇이 유효하게 저장되었는지 결정하기 때문에 정밀한 코히어런시(precise coherency)를 갖는다. 정밀한 코히어런시는 NVM에 기록된 데이터 구조의 최근의 부분으로부터의 데이터 구조의 유효 상태의 완벽한 복원을 가능하게 하는 (NVM에 기록된 데이터를 포함하는) 데이터 구조의 특성을 칭한다. 정밀한 코히어런시는 다수의 데이터 구조들 사이의 일치성과 구별된다. 예를 들어, 2개의 데이터 구조들은 정밀한 코히어런시를 각각 갖지만, 데이터 구조들 중 하나가 다른 데이터 구조에 존재하지 않는 상태 변경들을 반영하기 때문에 서로에 관하여 일치하지 않는다. 일부 실시예들 및/또는 사용 시나리오들에서, 복원의 목적은 최근의 가능한 시간으로서(as of) 서로 또한 일치하는 데이터 구조들의 정밀하게 코히어런트한 버전들을 결정하는 것이다.
맵 R-블록들에서의 정보는 업데이트된 SLM 페이지들의 FIFO-형 스트림이고, 맵 R-블록들에 적어도 부분적으로 저장될 때 SLM의 정밀한 코히어런스를 유지하기 위해 사용된다. 일부 상황들에서, 맵 R-블록들에서의 정보는 예를 들어, 데이터 R-블록들에서의 대응하는 정보 보다 더욱 최근인 SLM 페이지들로 인해, 데이터 R-블록들에서의 정보와 일치하지 않는 SLM 페이지들로 인한 것과 같이, NVM에 기록된 데이터와 일치하지 않는다.
체크포인트 R-블록들에서의 정보는 FLM 및 다른 데이터 구조들 중 부분들 또는 모두의 FIFO(또는 스트림)이고, FLM의 정밀한 코히어런스 및 다른 데이터 구조들의 정밀한 또는 대략의 코히어런스를 유지하기 위해 사용된다. 그러나, 맵 R-블록들과 유사하게, 일부 상황들에서, 체크포인트 R-블록들에서의 정보는 맵 또는 데이터 R-블록들에서의 대응하는 정보 보다 더욱 최근인 FLM 엔트리들과 같은, 다른R-블록들에서의 정보와 일치하지 않는다.
일부 실시예들 및/또는 사용 시나리오들에서, 체크포인트 FIFO에 저장된 일부 데이터 구조들은 단지 대략적으로 코히어런트하거나 다른 데이터 구조들과 일치하지 않는다. 제 1 예에서, 판독 방해 카운트들이 NVM에서의 각 블록에 대해 유지되고, 판독 방해 카운트들은 시간에 걸쳐 균일하게 확산된 복수의 부분들, 예를 들어, 한번에 판독 방해 카운트들의 1/4에서 체크포인트 FIFO에 체크포인팅된다. 판독 방해 카운트들이 복구될 때, 복구된 판독 방해 카운트들은, 4개의 부분들 각각이 상이한 시점들로부터 있기 때문에, 사용중이었던 판독 방해 카운트들의 임의의 버전과 코히어런트하지 않다. 제 2 예에서, R-블록 사용 정보는 체크포인트 FIFO에서 체크포인팅되지만, 대응하는 타임스탬프를 갖지 않는다. 복구시에 복원된 R-블록 사용 정보의 최근의 버전은 코히어런트하지만, 일부 환경들에서는, 다른 데이터 구조들과 일치하지 않는다.
개념적으로, 도면은 복원 동작들 동안 스트림 우선순위를 나타낸다. R-블록들의 데이터 스트림에서의 정보는, 결과적으로 R-블록들의 체크포인트 스트림에서의 정보보다 우선권을 취하는 R-블록들의 맵 스트림에서의 정보보다 우선권을 취한다. 스트림들 중의 기록들이 양호하게 순서화되지 않기 때문에 (일부 실시예들 및/또는 사용 시나리오들에서, 스트림들 각각내의 기록들은 양호하게 순서화되지만), 스트림들 중에서 기록들의 일치하는 순서화를 결정하기 위해 추가의 정보에 대한 필요성이 존재한다. 다양한 실시예들 및/또는 사용 시나리오들에서, 에폭 값들과 같은 타임스탬프들 및/또는 시간 마커들은 복수의 대역들 및/또는 스트림들에 대한 기록의 상대적 순서가 결정되게 할 수 있다.
예시되어 있는 바와 같이, R-블록들의 데이터, 맵, 및 체크포인트 스트림들에 대한 기록들은 다음과 같이 서로에 관하여 일치한다. 데이터 기록들 각각은 각각의 데이터 기록에 대응하는 각각의 SLM 업데이트에 선행하고, 결과적으로, SLM 업데이트들 각각은 각각의 SLM 업데이트에 대한 포인터들(예를 들어, FLM 엔트리들로서)을 포함하는 임의의 각각의 체크포인트 기록들에 선행한다. 구체적으로는, SLM-1(1031)은 데이터-1(1021)에 매핑하고, 데이터-1(1021)의 기록은 에폭-1(1031E) 및 SLM-1(1031)의 기록이 시작하기 이전에 완료된다. 또한, FLM-1(1041)은 SLM-1(1031)에 대한 포인터를 포함하고, SLM-1(1031)의 기록은 에폭-1(1041E) 및 FLM-1(1041)의 기록이 시작하기 이전에 완료된다. 유사한 의존성들 및 기록 순서화들이 데이터-2(1022), 에폭-2(1032E) 및 SLM-2(1032), 및 에폭-2(1042E) 및 FLM-2(1042) 뿐만 아니라 데이터-3(1023), 에폭-3(1033E) 및 SLM-3(1033), 및 에폭-3(1043E) 및 FLM-3(1043)에 적용된다.
일부 실시예들에서, R-블록들의 스트림들 사이의 일치성은 다음과 같이 에폭 값들에 의해 표시된다. 에폭-1(1031E)은 에폭-1(1021E)과 동일하거나, 대안적으로는, 에폭-1(1021E) 이후에 에폭-1(1031E)가 기록된다는 것을 나타낸다. 에폭-1(1041E)은 에폭-1(1031E)과 동일하거나, 대안적으로는, 에폭-1(1031E) 이후에 에폭-1(1041E)가 기록된다는 것을 나타낸다. 유사하게는, 에폭-2(1032E)은 에폭-2(1022E)와 동일하고(또는 그 이후의 기록을 나타내고), 에폭-2(1042E)는 에폭-2(1032E)와 동일하다(또는 그 이후의 기록을 나타낸다). 유사하게는, 에폭-3(1033E)은 에폭-3(1023E)과 동일하고(또는 그 이후의 기록을 나타내고), 에폭-3(1043E)는 에폭-3(1033E)과 동일하다(또는 그 이후의 기록을 나타낸다).
다양한 실시예들 및/또는 사용 시나리오들에서, 각 스트림내의 기록 순서는 예시된 바와 같이 유지된다. 그러나, R-블록들의 스트림들 사이의 기록들의 상대적 타이밍은 예시된 바와 상이하다. 예를 들어, 에폭-2(1032E) 및 SLM-2(1032)의 기록은 데이터-2(1022)의 기록이 시작하기 이전에(데이터-1(1021)의 기록이 완료된 이후)에 완료된다. 따라서, SLM-2(1032)는 에폭-2(1032E)에 의해 표시된 것 보다 더 오래된 에이지를 나타내는 R-블록들의 데이터 스트림(에폭-1(1021E))의 가장 최근에 기록된 시간 마커에 의해 표시된 바와 같이, 데이터-2(1022)에 관하여 일시적으로 일치하지 않는다. 에폭-2(1022E) 및 데이터-2(1022)의 기록이 완료되기 이전에 오작동이 발생하면, SLM-2(1032)의 일시적 불일치성은 영구적이게 된다. 불일치성을 해결하기 위해, 후속 복구 프로세싱은 SLM-2(1032)를 (에폭-1(1021E) 보다 최근인 에폭-2(1032E)에 기초하여) 폐기한다. 다른 예에 대해, R-블록들의 맵 스트림에서 대응하는 SLM 업데이트의 기록 이전에 R-블록들의 체크포인트 스트림에서 FLM 엔트리의 기록 다음에 (대응하는 SLM 업데이트의 기록 이전에) 오작동 및 후속 복구 프로세싱이 후속하는 경우에, 복원 프로세싱은 FLM 엔트리를 폐기한다.
도면은 FLM의 모든 엔트리들에 대응하는 것(FLM 완료(1050))으로서 체크포인트 R-블록들의 스트림의 영역을 예시한다. 영역은 FLM이 부분들(예를 들어, 청크들)에서 체크포인팅되는 일부 실시예들에 대응한다. 예시된 바와 같이, 3개의 옵션으로 및/또는 선택적으로 오버랩하는 부분들(FLM-1(1041), FLM-2(1042), 및 FLM-3(1043))이, 부분들 각각이 상이한 시간으로 인한 것이며 이로인해 그들 자신들이 FLM의 코히어런트 이미지가 아니더라도, FLM의 모든 엔트리들의 체크포인트를 총체적으로 형성한다. 복구 프로세스는 FLM의 체크포인트 및 다른 데이터 구조들로부터 FLM의 코히어런트하고 일치하는 버전을 복원하도록 인에이블된다. 유사하게는, 복구 프로세스는 맵 스트림 및 다른 데이터 구조들에서 맵의 아마도 코히어런트하지 않은 카피로부터 맵의 코히어런트하고 일치하는 버전을 복원하도록 인에이블된다.
일부 실시예들에서, 특정한 데이터 구조의 일치성이, 특정한 데이터 구조에 대한 다수의 관련 업데이트들 및 특정한 데이터 구조의 후속 타임스탬핑이 적어도, 특정한 데이터 구조의 체크포인트들에 관하여 원자 단위로서 수행된다는 것을 보장함으로써 부분적으로 유지된다. 예를 들어, 체크포인트 FIFO에서 체크포인팅되는 R-블록 사용 카운트 데이터 구조를 고려한다. 데이터 스트림에서의 데이터 기록들 중 특정한 하나가 데이터 스트림에서의 대응하는 에폭 값과 연관된다. 특정한 데이터 기록은 데이터 기록을 포함하는 R-블록의 사용을 증가시키고, 특정한 데이터 기록으로서 동일한 LBA와 연관된 이전의 데이터 기록을 포함하는 R-블록의 사용을 감소시킨다. 데이터 기록에 따른 R-블록 사용 카운트 데이터 구조의 업데이팅은 3개의 동작들: 데이터 기록을 포함하는 R-블록에 대한 사용 카운트의 증가; 이전의 데이터 기록을 포함하는 R-블록에 대한 사용 카운트의 감소; 및 특정한 데이터 기록의 대응하는 에폭 값과 R-블록 사용 카운트 데이터 구조의 타임스탬핑을 포함한다. R-블록 사용 카운트 데이터 구조의 체크포인트가 3개의 동작들 중 적어도 하나를 수행한 이후에 및 3개의 동작들 모두를 완료하기 이전에 발생하도록 인에이블되었다면, 체크포인트는 R-블록 사용 카운트 데이터 구조의 일치하지 않은 버전을 리코딩하고, 정전 이후와 같은, R-블록 사용 카운트 데이터 구조의 복원은 복원 이후의 R-블록의 실제 사용을 반영하지 않는 일치하지 않은 값을 발생시킨다. 따라서, 다양한 실시예들에서, 각 데이터 기록에 따른 R-블록 사용 카운트 데이터 구조에 대한 각각의 업데이트들은 체크포인트들에 관하여 원자적으로 수행된다.
도 11은 예를 들어, 오작동 이후에 (도 2 및 도 8 중 하나 또는 그 초과에 예시된 바와 같이) FLM 및 SLM 정보 및 다른 NVM 관리 데이터 구조들을 복원 및/또는 재구축하는 선택된 상세사항들을, FLM 및 SLM 복원 프로세싱(1100)으로서 예시한다. 복원 및 재구축 동작들은 도 9 및 도 10 중 하나 또는 그 초과에 예시된 바와 같은 셀프-저널링 및 계층적 일치성 기술들과 함께 동작과 호환가능하다.
도 11에 예시된 바와 같은 프로세싱은 오작동 이후의 이벤트, 예를 들어, 복구/재구축 요청, 소프트 또는 하드 리셋, 또는 파워-온에 응답하여 시작한다(시작(1101)). 체크포인트 R-블록들의 최종(예를 들어, 가장 최근에 기록된) R-블록이 위치되고, 최종 체크포인트 R-블록내의 최종(예를 들어, 가장 최근에 기록된) 정보가 위치된다(FIFO 종료 위치시킴(1111)). 그 후, 가장 최근에 기록된 것보다 인접하여 조기인 체크포인트 R-블록들의 부분들은 FLM의 전체 이미지가 재구성될 때까지 프로세싱된다. 일부 실시예들에서, FLM 재구성 프로세싱은 최근인 FLM 부분을 위치시키는 것 및 가장 오래된 시간 마커를 위치시키는 것(최근의 FLM 청크 및 가장 오래된 에폭 위치시킴(1112)), 및 그 후, 가장 오래된 시간 마커로서 FLM을 재구성하는 것(가장 오래된 에폭으로서 FLM 복원(1113))을 포함한다. 일부 실시예들 및/또는 사용 시나리오들에서, FLM의 하나 또는 그 초과의 나중 부분들은, 정전일 때 완료를 실패한 기록으로 인한 것과 같은, 홀(hole)로 인해 더 조기의 부분들과 인접하지 않는다. 더 조기의 부분들과 인접하지 않는 부분들은 복구 동안 폐기된다.
체크포인트 R-블록들에 기초하여 FLM을 재구성한 이후에, 재구성된 FLM 보다(업데이트들과 저장된 시간 마커들에 따라) 더욱 최근인 임의의 SLM 업데이트들이 FLM에 적용된다(SLM 업데이트들에 따라 FLM 업데이팅(1114)). 그 후, SLM은 임의의 대응하는 SLM 엔트리들 보다 (기록 데이터와 저장된 시간 마커들에 따라) 더욱 최근인 임의의 데이터 기록들에 대해 업데이트된다(데이터 업데이트들에 따라 SLM 업데이팅(1115)). 그 후, 프로세싱이 완료되고(종료(1199)), FLM, SLM, 및 다른 데이터 구조들은 코히런트하고 일치하며, SSD의 NVM을 동작시키기 위해 사용할 준비를 한다.
일부 실시예들에서, SLM을 업데이트하기 위해 프로세싱된 기록 데이터의 양은, 캐싱되는 임의의 변경된 SLM 엔트리들이 맵 플러시 간격이라 칭하는, 결정된 수의 에폭 값들내에서 NVM에 플러시되는 것을 보장함으로써 제한된다(bounded). 예를 들어, 각 변경된 SLM 엔트리(또는 각 변경된 SLM 페이지)는, 각각의 변경된 SLM 엔트리(또는 SLM 페이지)가 최종 플러싱된 이후 변경에 대한 가장 조기의 에폭 값을 트랙킹하고, 그리고 각각의 변경된 SLM 엔트리(또는 SLM 페이지)가 10,000개의 에폭 값들 만큼 많이 최근의 기록 데이터를 넘기 이전에, 각각의 변경된 SLM 엔트리(또는 SLM 페이지)가 플러싱된다. 더욱 최근인 데이터 기록들로부터 SLM을 재구성할 때, (에폭 값들에 의해 측정될 때) 가장 최근의 대략 10,000개의 데이터 기록들만이, 임의의 더 오래된 데이터 기록들은 NVM에 이미 기록되었기 때문에, SLM 업데이트들로서 고려된다.
일부 실시예들에서, 복원 프로세스는 데이터 스트림, 맵 스트림, 및 체크포인트 FIFO 각각에 대해, 각각의 최근의 유효 에폭 및 각각의 가장 조기의 필요한 에폭을 결정한다. 복원 프로세스는 체크포인트 FIFO의 가장 조기의 필요한 에폭과 체크포인트 FIFO의 최근의 유효 에폭 사이에서 발견된 FLM의 부분들로부터 FLM을 복원한다. 맵 스트림에서의 가장 조기의 필요한 에폭과 맵 스트림에서의 최근의 유효 에폭 사이의 맵 스트림에서 발견된 SLM 업데이트들은 FLM이 맵 스트림과 일치하도록 FLM에 적용된다. 그 후, 데이터 스트림에서의 가장 조기의 필요한 에폭과 데이터 스트림에서의 최근의 유효 에폭 사이의 데이터 스트림에서 발견된 데이터 기록들로부터의 업데이트들은 SLM이 데이터 스트림과 일치하도록 SLM에 적용된다. 다양한 실시예들 및/또는 사용 시나리오들에서, 데이터 스트림에서의 데이터 기록들로부터의 업데이트들을 SLM에 적용하는 것은, 캐시가 복구를 위해 필요한 모든 업데이트들을 홀딩할 수 없을 때와 같이, 캐시로부터 맵 스트림으로 SLM 엔트리들 및/또는 페이지들을 옵션으로 및/또는 선택적으로 플러싱한다. 복구 동안 SLM 엔트리 및/또는 페이지 플러싱은 FLM의 엔트리들을 업데이트하고, 결과적으로, FLM의 하나 또는 그 초과의 부분들은 복구 동안 체크포인트 FIFO에 옵션으로 및/또는 선택적으로 기록된다. 다양한 실시예들에서, 복원 프로세스의 완료는 특정한 타입의 헤더와 같은 "복원 완료" 마커를 스트림들 중 하나 또는 그 초과에 기록한다.
일부 실시예들에서, 데이터 스트림에서의 최근의 유효 에폭은 복구를 위해 필요한 데이터 스트림의 모든 선행 부분들과 인접하는 (데이터 스트림에서의 데이터 기록에 대응하는) 데이터 스트림에서의 최종 기록된 에폭 값이다. 맵 스트림에서의 최근의 유효 에폭은 복구를 위해 필요한 맵 스트림의 모든 선행 부분들과 인접하는 (맵 스트림에서의 SLM 엔트리 및/또는 페이지 기록에 대응하는) 맵 스트림에서의 최종 기록된 에폭 값이고, 데이터 스트림에서의 최근의 유효 에폭에 있거나 그 이전에 있다. 체크포인트 FIFO에서의 최근의 유효 에폭은 복구를 위해 필요한 체크포인트 FIFO의 모든 선행 부분들과 인접하는 (체크포인트 FIFO에서의 FLM의 부분에 대응하는) 체크포인트 FIFO에서의 최종 기록된 에폭 값이고, 맵 스트림에서의 최근의 유효 에폭에 있거나 그 이전에 있다. 다른 실시예들에서, 체크포인트 FIFO에서의 최근의 유효 에폭은 또한 R-블록 사용 스페이스 데이터 구조와 같은, 하나 또는 그 초과의 다른 데이터 구조들의 인접하는 체크포인트들과 연관된다.
일부 실시예들에서, 체크포인트 FIFO에서의 가장 조기에 필요한 에폭은, FLM의 (코히어런트하지 않지만) 하나의 완료 버전이 체크포인트 FIFO에서의 가장 조기에 필요한 에폭 및 체크포인트 FIFO에서의 최근의 유효 에폭내에서 획득되게 하는 FLM의 최근의 부분의 에폭 값이다. 맵 스트림에서의 가장 조기에 필요한 에폭은 체크포인트 FIFO에서의 가장 조기에 필요한 에폭에 있거나 그 이전에 있는 맵 스트림에서의 최근의 SLM 엔트리 및/또는 페이지의 에폭 값이다. 데이터 스트림에서의 가장 조기에 필요한 에폭은 맵 스트림에서의 최근의 유효 에폭 이전에 맵 플러시 간격 보다 늦지 않은 최근의 데이터 기록의 에폭 값이다.
일부 실시예들 및/또는 사용 시나리오들에서, 예컨대, 오작동이 있는 경우, 데이터 스트림에서의 홀이 복구 동안 발견된다. 홀 이전의 정보는 유효하지만, 홀에 후속하는 정보는 그렇지 않다. 로그 리코드가 홀과 복구 표시의 시작 사이의 정보가 유효하지만 복구 표시의 시작 이후의 정보는 새로운 유효한 정보의 시작이라는 것을 표시하기 위해 (예를 들어, 복구 동안) 데이터 스트림에 옵션으로 추가된다. 다양한 실시예들에서, 복구 표시의 시작은 복구 프로세싱의 시작을 나타내는 저널 헤더와 같은 특수한 타입의 헤더이다.
일부 환경들에서, 복원 프로세싱은 상대적으로 낮은 레이턴시이다. 예를 들어, 비교적 긴 시간 동안 기록들 또는 리사이클링이 없을 때 오작동이 전력 손실이면, FLM에 적용하기 위한 SLM 업데이트들이 없을 것이고, SLM에 이미 반영되지 않은 데이터 기록들이 없을 것이다. 대안적으로, 다른 환경들에서, 복원 프로세싱은 상대적으로 높은 레이턴시이다. 예를 들어, 체크포인트 R-블록들 및/또는 맵 R-블록들이 전체적으로 또는 실질적으로 일치하지 않는 오작동이 있으면, 유효 데이터 정보를 저장하는 데이터 R-블록들 모두까지가 FLM을 재구축하기 위해 판독되고, SLM은 또한 전체적으로 재구성된다. 또 다른 환경들에서, 복원 프로세싱은 중간 레이턴시이다. 예를 들어, 체크포인트 R-블록들이 그대로이고(intact), 그리고 비교적 적은 맵 업데이트들이 체크포인트 R-블록들에서 아직 반영되지 않을 뿐만 아니라 비교적 적은 데이터 기록들이 맵 R-블록들에서 아직 반영되지 않은 오작동이 있으면, FLM 및 SLM의 비교적 적은(littel) 재구성이 요구된다.
다양한 실시예들에서, 도 6 내지 도 11의 하나 또는 그 초과의 엘리먼트들은 도 1a의 하나 또는 그 초과의 엘리먼트들에 대응하거나 이와 관련된다. 예를 들어, 도 6의 디바이스들(601 .. 609) 중 하나 또는 그 초과는 NVM(199)의 모두 또는 일부들에 전체적으로 대응한다. 다른 예에 있어서, 도 7의 플래시 다이(710.65 .. 710.0)는 플래시 다이(194)의 인스턴스들에 전체적으로 대응한다. 또 다른 예에 있어서, 도 10에 예시된 R-블록들의 스트림들은 NVM(199)의 모두 또는 일부들에 저장된다. 다양한 실시예들에서, 도 1a의 하나 또는 그 초과의 엘리먼트들은 본 명세서의 다른 곳에서 설명한 바와 같은 셀프-저널링 및/또는 계층적 일치성에 관한 기술들의 모두 또는 임의의 부분들을 관리하고, 제어하고 그리고/또는 구현한다. 예를 들어, CPU(171)의 소프트웨어 실행 능력들 중 일부가 (예를 들어, 도 11에 의해 예시된 바와 같이) 맵 정보의 복구를 관리하기 위해 사용된다. 다른 예에 있어서, 버퍼(131)의 모두 또는 일부들은 도 9에 설명한 바와 같은 버퍼링의 모두 또는 임의의 부분들을 구현한다.
추가의 구현/실시예 정보
다양한 실시예들에서, 도 8 내지 도 11에 의해 설명한 바와 같은 동작들 및/또는 기능들의 모두 또는 임의의 부분들은 예를 들어, 하나 또는 그 초과의 상태 머신들에 의해 구현된다. 상태 머신들의 예시적인 구현들은, 하드웨어(예를 들어, 로직 게이트들 및/또는 회로, 전용 상태 머신 회로, 또는 고정배선(hardwired) 제어 회로), 소프트웨어(예를 들어, 펌웨어 또는 마이크로코드), 또는 하드웨어와 소프트웨어의 조합들을 포함한다. 일부 실시예들에서, 상태 머신들 중 하나 또는 그 초과는 하나 또는 그 초과의 펌웨어 이미지들, 하나 또는 그 초과의 드라이버들, 및/또는 하나 또는 그 초과의 애플리케이션들을 통해 적어도 부분적으로 구현된다. 특정한 예로서, 상태 머신들 중 하나 또는 그 초과는 도 1a의 SSD 제어기(100)를 통해 부분적으로, CPU 코어(172)에 의해 실행된 펌웨어를 통해 부분적으로, 도 1b의 펌웨어(106)를 통해 부분적으로, 드라이버(107)를 통해 부분적으로, 및/또는 애플리케이션(109)에 의해 부분적으로 구현된다.
다양한 실시예들에서, 도 8 내지 도 11에 의해 설명한 동작들 및/또는 기능들의 모두 또는 임의의 부분들은, 하드웨어 및/또는 펌웨어 기술들의 임의의 조합을 통해, 예를 들어, 도 1a의 코히어런시 관리(179), 변환 관리(177), 및/또는 맵(141) 중 임의의 하나 또는 그 초과의 것의 제어하에서 그리고/또는 이에 따라 구현된다.
예시적인 구현 기술들
일부 실시예들에서, 예컨대 독립적 실리콘 엘리먼트들(예를 들어, 플래시 메모리들), 컴퓨팅-호스트 플래시 메모리 제어기, 및/또는 (도 1a의 SSD 제어기(100)와 같은) SSD 제어기, 및 프로세서, 마이크로프로세서, 시스템-온-칩, 응용 주문형 집적 회로, 하드웨어 액셀러레이터(accelerator) 또는 상술한 동작들의 모두 또는 일부들을 제공하는 다른 회로를 통해, 동적 상위-레벨 리던던시 모드 관리를 구현하는 시스템에 의해 수행되는 동작들의 전부 또는 일부들의 다양한 조합들이 컴퓨터 시스템에 의한 프로세싱과 호환가능한 사양에 의해 특정된다. 그 사양은 하드웨어 디스크립션(description) 언어, 회로 디스크립션들, 네트리스트(netlist) 디스크립션들, 마스크 디스크립션들 또는 레이아웃 디스크립션들과 같은 다양한 디스크립션들에 따른다. 예시적인 디스크립션들은: 베릴로그(Verilog), VHDL, SPICE, PSpice와 같은 SPICE 변형들, IBIS, LEF, DEF, GDS-II, OASIS 또는 다른 디스크립션들을 포함한다. 다양한 실시예들에서, 프로세싱은 하나 또는 둘 이상의 집적 회로들 상의 포함을 위해 적합한 로직 및/또는 회로를 생성하고, 검증하거나 특정하기 위해 해석(interpretation), 컴필레이션, 시뮬레이션 및 합성의 임의의 조합을 포함한다. 다양한 실시예들에 따른 각각의 집적 회로는 다양한 기술들에 따라 설계가능 및/또는 제조가능하다. 기술들은 (필드 또는 마스크 프로그램가능한 게이트 어레이 집적 회로와 같은) 프로그램가능 기술, (전적 또는 부분적 셀-기반 집적 회로와 같은) 세미-커스텀(semi-custom) 기술 및 (실질적으로 특화되는 집적 회로와 같은) 풀-커스텀(full-custom) 기술 및 이들의 임의의 조합 또는 집적 회로들의 설계 및/또는 제조와 호환가능한 임의의 다른 기술을 포함한다.
일부 실시예들에서, 한 세트의 명령들이 저장되어 있는 컴퓨터 판독가능한 매체에 의해 설명된 바와 같은 동작들의 전부 또는 일부들의 다양한 조합들은, 하나 또는 둘 이상의 프로그램 명령들의 실행 및/또는 해석에 의해, 하나 또는 둘 이상의 소스 및/또는 스크립트 언어 구문들의 해석 및/또는 컴파일링에 의해, 또는 프로그래밍 및/또는 스크립팅 언어 구문들에 표현된 정보를 컴파일링, 변환, 및/또는 해석함으로써 생성되는 이진 명령들의 실행에 의해 수행된다. 구문들은 (C, C++, 포트란, 파스칼, Ada, Java, VBscript 및 쉘(Shell)과 같은) 임의의 표준 프로그래밍 또는 스크립팅 언어와 호환가능하다. 프로그램 명령들, 언어 구문들 또는 이진 명령들 중 하나 또는 둘 이상은 하나 또는 둘 이상의 컴퓨터 판독가능한 스토리지 매체 엘리먼트들 상에 임의선택적으로 저장된다. 다양한 실시예들에서, 프로그램 명령들 중 일부, 전부 또는 다양한 부분들은 하나 또는 둘 이상의 함수들, 루틴들, 서브-루틴들, 인-라인(in-line) 루틴들, 절차들, 매크로들 또는 이들의 일부들로서 실현된다.
결론
단지 텍스트 및 도면들을 준비하는데 편의를 위해 특정 선택들이 설명에서 구성되었으며 반대의 표시가 존재하지 않는 한 그 선택들은 그 자체가, 설명된 실시예들의 구조 또는 동작에 관한 추가적인 정보를 전달하는 것으로서 해석되어서는 안된다. 선택들의 예들은: 실시예들의 특징들 및 엘리먼트들을 식별하고 참조하기 위해 이용되는 엘리먼트 식별자들(예를 들어, 콜아웃들(callouts) 또는 수치적 지시자들)의 특정 구조 또는 할당 그리고 도면 넘버링을 위해 이용되는 지시들의 특정 구조 또는 할당을 포함한다.
용어들 "포함하다(includes)" 또는 "포함하는(including)"은 구체적으로, 허용범위가 넓은(open-ended) 범위의 논리적 세트들을 설명하는 추상적 개념들(abstractions)로서 해석되도록 의도되며 용어 "~내의(within)"가 명시적으로 후속하지 않는 한 물리적 제한(physical containment)을 전달하는 것을 의미하지 않는다.
전술한 실시예들이 설명 및 이해의 명확화를 목적으로 다소 상세히 설명되었지만, 본 발명은 제공된 상세사항들로 제한되지 않는다. 본 발명의 많은 실시예들이 존재한다. 개시된 실시예들은 예시적이며 제한적이지 않는다.
설명에 일치하는 구성, 배열 및 이용에서의 많은 변형들이 가능하며, 이러한 많은 변형들은 발행 특허의 청구항들의 범위 내에 속함이 이해될 것이다. 예를 들어, 상호접속 및 기능-유닛(function-unit) 비트-폭들, 클록 속도들 및 사용되는 기술의 타입은 각 컴포넌트 블록에서의 다양한 실시예들에 따라 가변적이다. 상호접속 및 로직에 정해지는 명칭들은 단지 예시적이며, 설명된 개념들을 제한하는 것으로 해석되어서는 안 된다. 순서도 및 흐름도 프로세스, 동작 및 기능 엘리먼트들의 순서 및 배열은 다양한 실시예들에 따라 가변적이다. 또한, 구체적으로 반대로 서술되지 않는 한, 특정된 값 범위들, 이용된 최대 및 최소 값들 또는 (플래시 메모리 기술 타입들; 및 레지스터들 및 버퍼들에서의 엔트리들 또는 스테이지들의 수와 같은) 다른 특정 사양들은 단지 설명된 실시예들에 대한 것이며, 구현 기술에서의 개선들 및 변경들을 따를(track)것이 예상되며, 제한들로서 해석되어서는 안 된다.
기술분야에 알려진 기능적으로 동등한 기술들이, 다양한 컴포넌트들, 서브-시스템들, 동작들, 기능들, 루틴들, 서브-루틴들, 인-라인 루틴들, 절차들, 매크로들 또는 이들의 일부들을 구현하도록, 설명된 것들 대신에 사용가능하다. 실시예의 기능이 (하드웨어에서의 이전의 기능들의 소프트웨어로의 이동을 용이하게 하는) 더 빠른 프로세싱 및 (소프트웨어에서의 이전의 기능들의 하드웨어로의 이동을 용이하게 하는) 더 높은 집적 밀도의 설계 제약들 및 기술 트렌드들에 의존하기 때문에, 실시예들의 다수의 기능적 양상들이 하드웨어(예를 들어, 일반적으로 전용 회로) 또는 소프트웨어(예를 들어, 프로그램된 제어기 또는 프로세서의 일부 방식을 통하여)에서 선택적으로 실현가능하다는 것이 또한 이해된다. 다양한 실시예들에서의 특정한 변형들은, 파티셔닝하는데 있어서의 차이들; 상이한 폼 팩터들 및 구성들; 상이한 운영 시스템들 및 다른 시스템 소프트웨어의 사용; 상이한 인터페이스 표준들, 네트워크 프로토콜들, 또는 통신 링크들의 사용; 및 특정한 애플리케이션의 고유 엔지니어링 및 비즈니스 제약들에 따라 본원에 설명된 개념들을 구현할 때 기대되는 다른 변형들을 포함하지만, 이에 제한되지 않는다.
실시예들은 설명된 실시예들의 많은 양상들의 최소 구현을 위해 요구되는 것을 훨씬 넘어선 상세 및 환경적 컨텍스트로 설명되었다. 기술분야의 당업자는 일부 실시예들이 나머지 엘리먼트들 사이의 기본적 협력을 변경하지 않고서 개시된 컴포넌트들 또는 특징들을 생략함을 인식할 것이다. 따라서 개시된 상세사항들 중 다수는 설명된 실시예들의 다양한 양상들을 구현하는데 요구되지 않음이 이해된다. 나머지 엘리먼트들이 종래 기술과 구별가능한 범위까지, 생략되는 컴포넌트들 및 특징들은 본원에 설명된 개념들에 대해 제한하지 않는다.
설계에 있어서 이러한 모든 변형들은 설명된 실시예들에 의해 전달되는 교시들에 대한 비현실적(insubstantial) 변경들이다. 본원에 설명된 실시예들은 다른 컴퓨팅 및 네트워킹 애플리케이션들로의 광범위한 적용가능성을 가지며, 설명된 실시예들의 특정 애플리케이션 또는 산업으로 제한되지 않음이 또한 이해된다. 본 발명은 따라서, 발행 특허의 청구항들의 범위 내에 포괄되는 모든 가능한 수정들 및 변형들을 포함하는 것으로 해석된다.

Claims (21)

  1. 시스템으로서,
    비휘발성 메모리(NVM)에 일련의 데이터 유닛들을 제 1 순서로 배열하기 위한 수단 ― 상기 데이터 유닛들 각각은 복수의 타임스탬프들 중 각각의 하나와 연관됨 ―; 및
    상기 NVM에 일련의 데이터 맵 유닛들을 제 2 순서로 배열하기 위한 수단 ― 상기 데이터 맵 유닛들 각각은 상기 타임스탬프들 중 각각의 하나와 연관됨 ―
    을 포함하고, 상기 데이터 맵 유닛들 각각은 상기 데이터 유닛들 중 대응하는 데이터 유닛의 상기 NVM에서의 위치를 포함하며,
    상기 데이터 유닛들 각각과 연관된 상기 각각의 타임스탬프는 상기 대응하는 데이터 맵 유닛과 연관된 상기 각각의 타임스탬프에 있거나 그 이전에 있는, 시스템.
  2. 제 1 항에 있어서,
    상기 데이터 유닛들 각각은 호스트로부터 각각의 논리 블록 어드레스(LBA)로의 각각의 데이터 기록에 대응하고,
    상기 데이터 유닛들 중 제 1 데이터 유닛 및 제 2 데이터 유닛이 상기 각각의 LBA들 중 동일한 LBA에 대한 상기 데이터 기록들의 제 1 데이터 기록 및 제 2 데이터 기록에 대응하며,
    상기 제 1 데이터 유닛은 상기 데이터 맵 유닛들 중 대응하는 데이터 맵 유닛을 갖지 않는, 시스템.
  3. 제 1 항에 있어서,
    오작동이 발생한 경우에,
    상기 데이터 유닛들 중 상기 오작동 이전의 가장 최근의 유효한 데이터 유닛을 결정하기 위한 수단;
    상기 데이터 맵 유닛들 중 상기 오작동 이전의 가장 최근의 유효한 데이터 맵 유닛을 결정하기 위한 수단 ― 상기 데이터 맵 유닛들 중 상기 가장 최근의 유효한 데이터 맵 유닛과 연관된 상기 각각의 타임스탬프는, 상기 데이터 유닛들 중 상기 가장 최근의 유효한 데이터 유닛과 연관된 각각의 타임스탬프에 있거나 그 이전에 있음 ―; 및
    상기 데이터 맵 유닛들 중 상기 가장 최근의 유효한 데이터 맵 유닛까지의 상기 데이터 맵 유닛들의 데이터 맵 유닛들만을 복구하기 위한 수단
    을 더 포함하고, 이로써 상기 데이터 유닛들 중 상기 가장 최근의 유효한 데이터 유닛과 연관된 상기 각각의 타임스탬프 이후의 임의의 상기 각각의 타임스탬프들과 연관된 임의의 데이터 맵 유닛들은 복구에서 무시되는, 시스템.
  4. 시스템으로서,
    비휘발성 메모리(NVM)에 일련의 데이터 스토리지 유닛들을 기록하기 위한 수단 ― 상기 데이터 스토리지 유닛들 각각은 복수의 타임스탬프들 중 각각의 하나와 연관됨 ―; 및
    상기 NVM에 일련의 데이터 맵 유닛들을 기록하기 위한 수단 ― 상기 데이터 맵 유닛들 각각은 상기 타임스탬프들 중 각각의 하나와 연관됨 ―
    을 포함하고, 상기 데이터 맵 유닛들 각각은 상기 데이터 스토리지 유닛들 중 대응하는 데이터 스토리지 유닛의 상기 NVM에서의 위치를 포함하며,
    상기 데이터 스토리지 유닛들 각각과 연관된 각각의 타임스탬프는 대응하는 데이터 맵 유닛과 연관된 각각의 타임스탬프가 표시하는 상대적 에이지(relative age)와 동일하거나 그보다 오래된 상대적 에이지를 표시하는, 시스템.
  5. 제 4 항에 있어서,
    상기 데이터 스토리지 유닛들 중 제 1 데이터 스토리지 유닛은 호스트로부터 특정한 논리 블록 어드레스(LBA)로의 제 1 데이터 기록에 대응하고,
    상기 데이터 스토리지 유닛들 중 제 2 데이터 스토리지 유닛은 상기 호스트로부터 상기 특정한 LBA로의 제 2 데이터 기록에 대응하고,
    상기 제 1 데이터 기록은, 시간 순서에 있어, 상기 제 2 데이터 기록에 선행하며,
    상기 데이터 맵 유닛들은 상기 제 1 데이터 스토리지 유닛에 대응하지 않는, 시스템.
  6. 제 4 항에 있어서,
    상기 데이터 스토리지 유닛들의 기록은 제 1 순서에 따르고 상기 데이터 맵 유닛들의 기록은 제 2 순서에 따르는, 시스템.
  7. 제 6 항에 있어서,
    오작동이 발생한 경우에,
    상기 데이터 스토리지 유닛들 중 상기 오작동 이전의 가장 최근의 유효한 데이터 스토리지 유닛을 상기 제 1 순서에 따라 결정하기 위한 수단;
    상기 데이터 스토리지 유닛들 중 상기 가장 최근의 유효한 데이터 스토리지 유닛과 연관된 상기 각각의 타임스탬프에 의해 표시되는 상대적 에이지와 동일하거나 그보다 오래된 상대적 에이지를 표시하는 상기 각각의 타임스탬프들 중 하나와 연관된 상기 데이터 맵 유닛들 중 상기 오작동 이전의 가장 최근의 유효한 데이터 맵 유닛을 상기 제 2 순서에 따라 결정하기 위한 수단; 및
    상기 데이터 맵 유닛들 중 상기 가장 최근의 유효한 데이터 맵 유닛까지의 상기 데이터 맵 유닛들의 데이터 맵 유닛들만을 상기 제 1 순서 및 제 2 순서에 따라 복구하기 위한 수단
    을 더 포함하는, 시스템.
  8. 제 6 항에 있어서,
    오작동이 발생한 경우에,
    상기 데이터 스토리지 유닛들 중 상기 오작동 이전의 가장 최근의 유효한 데이터 스토리지 유닛인 상기 데이터 스토리지 유닛들 중 제 1 데이터 스토리지 유닛을 상기 제 1 순서에 따라 결정하기 위한 수단;
    상기 데이터 스토리지 유닛들 중 상기 가장 최근의 유효한 데이터 스토리지 유닛과 연관된 각각의 타임스탬프에 의해 표시되는 상대적 에이지와 동일하거나 그보다 오래된 상대적 에이지를 표시하는 상기 각각의 타임스탬프들 중 하나와 연관된 상기 데이터 맵 유닛들 중 상기 오작동 이전의 가장 최근의 유효한 데이터 맵 유닛을 상기 제 2 순서에 따라 결정하기 위한 수단;
    상기 데이터 맵 유닛들 중 상기 가장 최근의 유효한 데이터 맵 유닛과 연관된 각각의 타임스탬프에 의해 표시되는 상대적 에이지와 동일하거나 그에 선행하는 미리 결정된 에이지 이전인 상대적 에이지를 표시하는 상기 각각의 타임스탬프들 중 하나와 연관된 상기 데이터 스토리지 유닛들 중 가장 최근의 데이터 스토리지 유닛인 상기 데이터 스토리지 유닛들 중 제 2 데이터 스토리지 유닛을 상기 제 1 순서에 따라 결정하기 위한 수단; 및
    상기 데이터 스토리지 유닛들 중 상기 제 1 데이터 스토리지 유닛을 통해 상기 데이터 스토리지 유닛들 중 제 2 데이터 스토리지 유닛으로부터만의 데이터 유닛들 중의 데이터 유닛들을 사용하여 상기 데이터 맵 유닛들 중 상기 가장 최근의 유효한 데이터 맵 유닛까지의 상기 데이터 맵 유닛들 중의 데이터 맵 유닛들을 상기 제 1 순서 및 상기 제 2 순서에 따라 복원하기 위한 수단
    을 더 포함하는, 시스템.
  9. 제 8 항에 있어서,
    상기 오작동 이전에 상기 NVM에 기록되지 않은 상기 데이터 맵 유닛들 중 각각의 변경된 데이터 맵 유닛에 대해, 상기 데이터 스토리지 유닛들 중 특정한 데이터 스토리지 유닛과 연관된 상기 각각의 타임스탬프와 동일한 가장 오래된 업데이트와 연관된 상기 타임스탬프들 중 각각의 타임스탬프를 식별하기 위한 수단 ― 상기 변경된 데이터 맵 유닛은 상기 특정한 데이터 스토리지 유닛의 상기 NVM에서의 위치를 포함함 ―; 및
    상기 변경된 데이터 맵 유닛의 상기 가장 오래된 업데이트와 연관된 상기 각각의 타임스탬프에 후속하여 상기 결정된 양보다 많은 각각의 타임스탬프들 중 하나와 연관된 상기 데이터 스토리지 유닛들 중 하나의 기록시에 또는 그 이전에, 상기 오작동 이전에 상기 NVM에 기록되지 않은 상기 변경된 데이터 맵 유닛들 각각을 상기 NVM에 기록하기 위한 수단
    을 더 포함하는, 시스템.
  10. 시스템으로서,
    비휘발성 메모리(NVM)에 복수의 스토리지 유닛들을 스토리지 스트림에 따라 기록하기 위한 수단 ― 상기 스토리지 유닛들 각각은 데이터 부분 및 대응하는 타임스탬프 부분을 포함함 ―; 및
    맵 스트림에 따라 상기 NVM에 복수의 맵 유닛들을 기록하기 위한 수단 ― 상기 맵 유닛들 각각은 엔트리 부분 및 대응하는 타임스탬프 부분을 포함함 ―
    을 포함하고, 상기 엔트리 부분들 중 적어도 일부 각각은, 상기 데이터 부분들 중 적어도 대응하는 데이터 부분을 특정함으로써 각각의 논리 블록(LB)들이 상기 NVM에서 어디에 기록되는지 결정할 수 있게 하고,
    상기 타임스탬프 부분들에 의해 시간적 순서가 표시되고, 상기 스토리지 유닛 타임스탬프 부분들은 서로에 관하여 타임스탬프 순서에 따라 단조적으로 증가하며, 상기 맵 유닛 타임스탬프 부분들은 서로에 관하여 상기 타임스탬프 순서에 따라 단조적으로 증가하며,
    상기 NVM에 기록된 상기 맵 유닛들 중 적어도 하나가, 특정한 시점에서 상기 NVM에 기록된 상기 스토리지 유닛 타임 스탬프 부분들 중, 시간적 순서에 따라, 가장 최근의 상기 스토리지 유닛 타임스탬프 부분 보다 시간적 순서에 따라 나중인 타임스탬프 부분을 가지는 경우의 적어도 하나의 특정한 시점이 존재하는, 시스템.
  11. 제 10 항에 있어서,
    상기 스토리지 유닛들을 기록하기 위한 수단은 상기 스토리지 유닛 타임스탬프 부분들에 의해 표시되는 시간적 순서에 대응하는 시간 순서로 상기 스토리지 유닛들을 기록하고, 상기 맵 유닛들을 기록하기 위한 수단은 상기 맵 유닛 타임스탬프 부분들에 의해 표시되는 시간적 순서에 대응하는 시간 순서로 상기 맵 유닛들을 기록하는, 시스템.
  12. 제 10 항에 있어서,
    체크포인트 스트림에 따라 상기 NVM에 하나 또는 그 초과의 체크포인트 유닛들을 기록하기 위한 수단을 더 포함하고, 상기 체크포인트 유닛들 각각은 맵 부분 및 대응하는 타임스탬프 부분을 포함하고, 상기 체크포인트 타임스탬프 부분들은 서로에 관하여 타임스탬프 순서에 따라 단조적으로 증가하는, 시스템.
  13. 제 1 항, 제 4 항 또는 제 10 항에 있어서,
    상기 NVM으로부터 판독되고 그리고/또는 상기 NVM에 기록된 정보를 통신하기 위해 호스트와 인터페이싱하기 위한 수단을 더 포함하는, 시스템.
  14. 제 13 항에 있어서,
    상기 인터페이싱하기 위한 수단은,
    USB(Universal Serial Bus) 인터페이스 표준,
    CF(Compact Flash) 인터페이스 표준,
    MMC(MultiMediaCard) 인터페이스 표준,
    eMMC(an embedded MMC) 인터페이스 표준,
    썬더볼트 인터페이스 표준,
    UFS 인터페이스 표준,
    SD(Secure Digital) 인터페이스 표준,
    메모리 스틱 인터페이스 표준,
    xD-픽처 카드 인터페이스 표준,
    IDE(Integrated Drive Electronics) 인터페이스 표준,
    SATA(Serial Advanced Technology Attachment) 인터페이스 표준,
    eSATA(external SATA) 인터페이스 표준,
    SCSI(Small Computer System Interface) 인터페이스 표준,
    SAS(Serial Attached Small Computer System Interface) 인터페이스 표준,
    파이버 채널 인터페이스 표준,
    이더넷 인터페이스 표준, 및
    PCIe(Peripheral Component Interconnect express) 인터페이스 표준
    중 하나 또는 그 초과의 것과 호환가능한, 시스템.
  15. 제 13 항에 있어서,
    상기 호스트는,
    컴퓨터,
    워크스테이션 컴퓨터,
    서버 컴퓨터,
    스토리지 서버,
    SAN(Storage Attached Network),
    NAS(Network Attached Storage) 디바이스,
    DAS(Direct Attached Storage) 디바이스,
    스토리지 어플라이언스(storage appliance),
    개인 컴퓨터(PC),
    랩탑 컴퓨터,
    노트북 컴퓨터,
    넷북 컴퓨터,
    태블릿 디바이스 또는 컴퓨터,
    울트라북 컴퓨터,
    전자 판독 디바이스(e-리더),
    휴대 보조 단말기(PDA),
    네비게이션 시스템,
    GPS(Global Positioning System) 디바이스,
    오토모티브 제어 시스템,
    오토모티브 매체 제어 시스템 또는 컴퓨터,
    프린터, 복사기 또는 팩스 머신 또는 일체형(all-in-one) 디바이스,
    POS(Point Of Sale) 디바이스,
    캐시-레지스터,
    매체 플레이어,
    텔레비전,
    매체 리코더,
    DVR(Digital Video Recorder),
    디지털 카메라,
    셀룰러 핸드셋,
    코드리스 전화 핸드셋, 및
    전자 게임
    중 하나 또는 그 초과의 것을 포함하는, 시스템.
  16. 제 15 항에 있어서,
    상기 호스트의 모두 또는 임의의 부분들을 더 포함하는, 시스템.
  17. 제 1 항, 제 4 항 또는 제 10 항에 있어서,
    상기 NVM을 포함하는 하나 또는 그 초과의 플래시 메모리들과 인터페이싱하기 위한 수단을 더 포함하는, 시스템.
  18. 제 17 항에 있어서,
    상기 인터페이싱하기 위한 수단은,
    오픈 NAND 플래시 인터페이스(ONFI),
    토글 모드 인터페이스,
    DDR(Double-Data-Rate) 동기 인터페이스,
    DDR2 동기 인터페이스,
    동기 인터페이스, 및
    비동기 인터페이스
    중 하나 또는 그 초과의 것과 호환가능한, 시스템.
  19. 제 17 항에 있어서,
    상기 플래시 메모리들 중 적어도 하나는,
    NAND 플래시 기술 스토리지 셀들, 및
    NOR 플래시 기술 스토리지 셀들
    중 하나 또는 그 초과의 것을 포함하는, 시스템.
  20. 제 17 항에 있어서,
    상기 플래시 메모리들 중 적어도 하나는,
    단일 레벨 셀(SLC) 플래시 기술 스토리지 셀들, 및
    멀티 레벨 셀(MLC) 플래시 기술 스토리지 셀들
    중 하나 또는 그 초과의 것을 포함하는, 시스템.
  21. 제 17 항에 있어서,
    상기 플래시 메모리들의 모두 또는 임의의 하나 또는 그 초과의 것을 더 포함하는, 시스템.
KR1020137029137A 2011-10-05 2012-10-04 비휘발성 스토리지에 대한 셀프-저널링 및 계층적 일치성 KR101522848B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201161543707P 2011-10-05 2011-10-05
US61/543,707 2011-10-05
PCT/US2012/058583 WO2013052562A1 (en) 2011-10-05 2012-10-04 Self-journaling and hierarchical consistency for non-volatile storage

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020147015582A Division KR101562781B1 (ko) 2011-10-05 2012-10-04 비휘발성 스토리지에 대한 셀프-저널링 및 계층적 일치성

Publications (2)

Publication Number Publication Date
KR20130132662A KR20130132662A (ko) 2013-12-04
KR101522848B1 true KR101522848B1 (ko) 2015-05-26

Family

ID=48044124

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020147015582A KR101562781B1 (ko) 2011-10-05 2012-10-04 비휘발성 스토리지에 대한 셀프-저널링 및 계층적 일치성
KR1020137029137A KR101522848B1 (ko) 2011-10-05 2012-10-04 비휘발성 스토리지에 대한 셀프-저널링 및 계층적 일치성

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020147015582A KR101562781B1 (ko) 2011-10-05 2012-10-04 비휘발성 스토리지에 대한 셀프-저널링 및 계층적 일치성

Country Status (7)

Country Link
US (2) US8949517B2 (ko)
EP (1) EP2764516A4 (ko)
JP (1) JP2014534503A (ko)
KR (2) KR101562781B1 (ko)
CN (1) CN103392207B (ko)
TW (1) TWI516931B (ko)
WO (1) WO2013052562A1 (ko)

Families Citing this family (140)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7934052B2 (en) 2007-12-27 2011-04-26 Pliant Technology, Inc. System and method for performing host initiated mass storage commands using a hierarchy of data structures
WO2013022915A1 (en) 2011-08-09 2013-02-14 Lsi Corporation I/o device and computing host interoperation
EP2764516A4 (en) * 2011-10-05 2015-07-08 Lsi Corp SELF-HISTORIZATION AND HIERARCHICAL CONSISTENCY FOR NON-VOLATILE STORES
US9699263B1 (en) 2012-08-17 2017-07-04 Sandisk Technologies Llc. Automatic read and write acceleration of data accessed by virtual machines
US9396110B2 (en) * 2012-12-21 2016-07-19 Advanced Micro Devices, Inc. Non-volatile hybrid memory
US9501398B2 (en) 2012-12-26 2016-11-22 Sandisk Technologies Llc Persistent storage device with NVRAM for staging writes
US9612948B2 (en) 2012-12-27 2017-04-04 Sandisk Technologies Llc Reads and writes between a contiguous data block and noncontiguous sets of logical address blocks in a persistent storage device
US9239751B1 (en) 2012-12-27 2016-01-19 Sandisk Enterprise Ip Llc Compressing data from multiple reads for error control management in memory systems
US9454420B1 (en) 2012-12-31 2016-09-27 Sandisk Technologies Llc Method and system of reading threshold voltage equalization
US9395924B2 (en) 2013-01-22 2016-07-19 Seagate Technology Llc Management of and region selection for writes to non-volatile memory
US10642505B1 (en) 2013-01-28 2020-05-05 Radian Memory Systems, Inc. Techniques for data migration based on per-data metrics and memory degradation
US9652376B2 (en) 2013-01-28 2017-05-16 Radian Memory Systems, Inc. Cooperative flash memory control
US10445229B1 (en) 2013-01-28 2019-10-15 Radian Memory Systems, Inc. Memory controller with at least one address segment defined for which data is striped across flash memory dies, with a common address offset being used to obtain physical addresses for the data in each of the dies
US9454474B2 (en) * 2013-03-05 2016-09-27 Western Digital Technologies, Inc. Methods, devices and systems for two stage power-on map rebuild with free space accounting in a solid state drive
US9870830B1 (en) 2013-03-14 2018-01-16 Sandisk Technologies Llc Optimal multilevel sensing for reading data from a storage medium
US9367246B2 (en) 2013-03-15 2016-06-14 Sandisk Technologies Inc. Performance optimization of data transfer for soft information generation
US9236886B1 (en) 2013-03-15 2016-01-12 Sandisk Enterprise Ip Llc Universal and reconfigurable QC-LDPC encoder
US9244763B1 (en) 2013-03-15 2016-01-26 Sandisk Enterprise Ip Llc System and method for updating a reading threshold voltage based on symbol transition information
US9159437B2 (en) 2013-06-11 2015-10-13 Sandisk Enterprise IP LLC. Device and method for resolving an LM flag issue
US9524235B1 (en) 2013-07-25 2016-12-20 Sandisk Technologies Llc Local hash value generation in non-volatile data storage systems
US9384126B1 (en) 2013-07-25 2016-07-05 Sandisk Technologies Inc. Methods and systems to avoid false negative results in bloom filters implemented in non-volatile data storage systems
US9235509B1 (en) 2013-08-26 2016-01-12 Sandisk Enterprise Ip Llc Write amplification reduction by delaying read access to data written during garbage collection
US9298608B2 (en) 2013-10-18 2016-03-29 Sandisk Enterprise Ip Llc Biasing for wear leveling in storage systems
US9442662B2 (en) 2013-10-18 2016-09-13 Sandisk Technologies Llc Device and method for managing die groups
KR102179669B1 (ko) * 2013-10-21 2020-11-17 아브 이니티오 테크놀로지 엘엘시 데이터 유닛들의 컬렉션 체크포인팅
US9436831B2 (en) 2013-10-30 2016-09-06 Sandisk Technologies Llc Secure erase in a memory device
US9263156B2 (en) 2013-11-07 2016-02-16 Sandisk Enterprise Ip Llc System and method for adjusting trip points within a storage device
CN103546579B (zh) * 2013-11-07 2017-01-04 陈靓 一种用数据日志提高分布式存储系统可用性的方法
US9244785B2 (en) * 2013-11-13 2016-01-26 Sandisk Enterprise Ip Llc Simulated power failure and data hardening
US9703816B2 (en) 2013-11-19 2017-07-11 Sandisk Technologies Llc Method and system for forward reference logging in a persistent datastore
US9520197B2 (en) 2013-11-22 2016-12-13 Sandisk Technologies Llc Adaptive erase of a storage device
US9520162B2 (en) 2013-11-27 2016-12-13 Sandisk Technologies Llc DIMM device controller supervisor
US9582058B2 (en) 2013-11-29 2017-02-28 Sandisk Technologies Llc Power inrush management of storage devices
US9235245B2 (en) 2013-12-04 2016-01-12 Sandisk Enterprise Ip Llc Startup performance and power isolation
US9703636B2 (en) 2014-03-01 2017-07-11 Sandisk Technologies Llc Firmware reversion trigger and control
KR102190670B1 (ko) * 2014-03-03 2020-12-14 삼성전자주식회사 마이그레이션 관리자를 포함하는 메모리 시스템
CN104899114B (zh) * 2014-03-07 2018-03-20 中国科学院苏州纳米技术与纳米仿生研究所 一种固态硬盘上的连续时间数据保护方法
US9448876B2 (en) 2014-03-19 2016-09-20 Sandisk Technologies Llc Fault detection and prediction in storage devices
US9454448B2 (en) 2014-03-19 2016-09-27 Sandisk Technologies Llc Fault testing in storage devices
US9390814B2 (en) 2014-03-19 2016-07-12 Sandisk Technologies Llc Fault detection and prediction for data storage elements
WO2015147817A1 (en) * 2014-03-26 2015-10-01 Hewlett-Packard Development Company, L.P. Nvm object
CN104951383A (zh) * 2014-03-31 2015-09-30 伊姆西公司 用于监测硬盘的健康状况的方法和装置
US9626400B2 (en) 2014-03-31 2017-04-18 Sandisk Technologies Llc Compaction of information in tiered data structure
US9606870B1 (en) * 2014-03-31 2017-03-28 EMC IP Holding Company LLC Data reduction techniques in a flash-based key/value cluster storage
US9626399B2 (en) 2014-03-31 2017-04-18 Sandisk Technologies Llc Conditional updates for reducing frequency of data modification operations
US9390021B2 (en) 2014-03-31 2016-07-12 Sandisk Technologies Llc Efficient cache utilization in a tiered data structure
US9697267B2 (en) 2014-04-03 2017-07-04 Sandisk Technologies Llc Methods and systems for performing efficient snapshots in tiered data structures
US9990298B2 (en) 2014-05-12 2018-06-05 Western Digital Technologies, Inc System and method for caching solid state device read request results
US10656842B2 (en) 2014-05-30 2020-05-19 Sandisk Technologies Llc Using history of I/O sizes and I/O sequences to trigger coalesced writes in a non-volatile storage device
US10114557B2 (en) 2014-05-30 2018-10-30 Sandisk Technologies Llc Identification of hot regions to enhance performance and endurance of a non-volatile storage device
US9703491B2 (en) 2014-05-30 2017-07-11 Sandisk Technologies Llc Using history of unaligned writes to cache data and avoid read-modify-writes in a non-volatile storage device
US10162748B2 (en) 2014-05-30 2018-12-25 Sandisk Technologies Llc Prioritizing garbage collection and block allocation based on I/O history for logical address regions
US10656840B2 (en) 2014-05-30 2020-05-19 Sandisk Technologies Llc Real-time I/O pattern recognition to enhance performance and endurance of a storage device
US10146448B2 (en) 2014-05-30 2018-12-04 Sandisk Technologies Llc Using history of I/O sequences to trigger cached read ahead in a non-volatile storage device
US9208077B1 (en) 2014-05-30 2015-12-08 Avago Technologies General Ip (Singapore) Pte. Ltd. Forced map entry flush to prevent return of old data
US10372613B2 (en) 2014-05-30 2019-08-06 Sandisk Technologies Llc Using sub-region I/O history to cache repeatedly accessed sub-regions in a non-volatile storage device
US9690720B2 (en) 2014-06-03 2017-06-27 Qualcomm Incorporated Providing command trapping using a request filter circuit in an input/output virtualization (IOV) host controller (HC) (IOV-HC) of a flash-memory-based storage device
US9632953B2 (en) 2014-06-03 2017-04-25 Qualcomm Incorporated Providing input/output virtualization (IOV) by mapping transfer requests to shared transfer requests lists by IOV host controllers
US9652381B2 (en) 2014-06-19 2017-05-16 Sandisk Technologies Llc Sub-block garbage collection
TWI540582B (zh) * 2014-07-10 2016-07-01 群聯電子股份有限公司 資料管理方法、記憶體控制電路單元以及記憶體儲存裝置
US9443601B2 (en) 2014-09-08 2016-09-13 Sandisk Technologies Llc Holdup capacitor energy harvesting
US9542118B1 (en) * 2014-09-09 2017-01-10 Radian Memory Systems, Inc. Expositive flash memory control
US10552085B1 (en) 2014-09-09 2020-02-04 Radian Memory Systems, Inc. Techniques for directed data migration
US10025843B1 (en) 2014-09-24 2018-07-17 EMC IP Holding Company LLC Adjusting consistency groups during asynchronous replication
CN104461391B (zh) * 2014-12-05 2019-08-02 上海宝存信息科技有限公司 一种存储设备元数据管理处理方法及系统
US20160259754A1 (en) * 2015-03-02 2016-09-08 Samsung Electronics Co., Ltd. Hard disk drive form factor solid state drive multi-card adapter
CN106155812A (zh) 2015-04-28 2016-11-23 阿里巴巴集团控股有限公司 一种对虚拟主机的资源管理的方法、装置、系统及电子设备
US10656838B2 (en) 2015-07-13 2020-05-19 Samsung Electronics Co., Ltd. Automatic stream detection and assignment algorithm
US10089196B2 (en) 2015-07-14 2018-10-02 Shannon Systems Ltd. Methods for reconfiguring a storage controller when control logic fails and apparatuses using the same
CN106648439B (zh) * 2015-07-14 2019-11-29 上海宝存信息科技有限公司 于控制逻辑错误时重新配置存储控制器的方法及装置
US10552058B1 (en) 2015-07-17 2020-02-04 Radian Memory Systems, Inc. Techniques for delegating data processing to a cooperative memory controller
US11983138B2 (en) 2015-07-26 2024-05-14 Samsung Electronics Co., Ltd. Self-configuring SSD multi-protocol support in host-less environment
US10108503B2 (en) * 2015-08-24 2018-10-23 Western Digital Technologies, Inc. Methods and systems for updating a recovery sequence map
US10552335B2 (en) * 2015-09-25 2020-02-04 Beijing Lenovo Software Ltd. Method and electronic device for a mapping table in a solid-state memory
US10019193B2 (en) * 2015-11-04 2018-07-10 Hewlett Packard Enterprise Development Lp Checkpointing a journal by virtualization of non-volatile random access memory
CN105512054B (zh) * 2015-12-09 2018-11-09 上海兆芯集成电路有限公司 主机接口控制器以及储存装置控制方法
US10152527B1 (en) 2015-12-28 2018-12-11 EMC IP Holding Company LLC Increment resynchronization in hash-based replication
US9927985B2 (en) * 2016-02-18 2018-03-27 SK Hynix Inc. Method of dynamic table journaling
US10866905B2 (en) 2016-05-25 2020-12-15 Samsung Electronics Co., Ltd. Access parameter based multi-stream storage device access
US9830098B1 (en) 2016-07-11 2017-11-28 Silicon Motion, Inc. Method of wear leveling for data storage device
US11144496B2 (en) 2016-07-26 2021-10-12 Samsung Electronics Co., Ltd. Self-configuring SSD multi-protocol support in host-less environment
US10210123B2 (en) 2016-07-26 2019-02-19 Samsung Electronics Co., Ltd. System and method for supporting multi-path and/or multi-mode NMVe over fabrics devices
US10346041B2 (en) 2016-09-14 2019-07-09 Samsung Electronics Co., Ltd. Method for using BMC as proxy NVMeoF discovery controller to provide NVM subsystems to host
US10372659B2 (en) 2016-07-26 2019-08-06 Samsung Electronics Co., Ltd. Multi-mode NMVE over fabrics devices
US11461258B2 (en) 2016-09-14 2022-10-04 Samsung Electronics Co., Ltd. Self-configuring baseboard management controller (BMC)
US9946489B2 (en) * 2016-07-27 2018-04-17 Western Digital Technologies, Inc. Multi-stream journaled replay
US10229000B2 (en) 2016-08-09 2019-03-12 Seagate Llc Erasure codes to prevent lower page corruption in flash memory
KR102229013B1 (ko) * 2016-09-02 2021-03-17 삼성전자주식회사 자동 스트림 검출 및 할당 알고리즘
US20180101312A1 (en) * 2016-10-06 2018-04-12 Netflix, Inc. Techniques for generating and operating on in-memory datasets
US9678837B1 (en) 2016-10-14 2017-06-13 International Business Machines Corporation Variable checkpointing in a streaming application with one or more consistent regions
US9720785B1 (en) 2016-10-14 2017-08-01 International Business Machines Corporation Variable checkpointing in a streaming application that includes tuple windows
CN108153482B (zh) * 2016-12-05 2021-09-07 厦门旌存半导体技术有限公司 Io命令处理方法与介质接口控制器
US10719495B2 (en) * 2017-02-09 2020-07-21 Micron Technology, Inc. Stream selection for multi-stream storage devices
US10303560B2 (en) * 2017-02-14 2019-05-28 Dell Products L.P. Systems and methods for eliminating write-hole problems on parity-based storage resources during an unexpected power loss
JP6779821B2 (ja) * 2017-03-24 2020-11-04 キオクシア株式会社 メモリシステム及びデータの読み出し方法
US20180300083A1 (en) * 2017-04-12 2018-10-18 Hewlett Packard Enterprise Development Lp Write-ahead logging through a plurality of logging buffers using nvm
CN108733575B (zh) * 2017-04-20 2022-12-27 深圳市得一微电子有限责任公司 一种断电重启后逻辑对物理映像表的重建方法、固态硬盘
US11048624B2 (en) * 2017-04-25 2021-06-29 Samsung Electronics Co., Ltd. Methods for multi-stream garbage collection
US10528295B2 (en) * 2017-04-29 2020-01-07 International Business Machines Corporation Intra-tier data migration to segregate zombie storage from dead storage
KR102234725B1 (ko) * 2017-05-30 2021-04-02 에스케이하이닉스 주식회사 컨트롤러 및 메모리 시스템 및 메모리 시스템의 동작 방법
US10635654B2 (en) * 2017-06-12 2020-04-28 Samsung Electronics Co., Ltd. Data journaling for large solid state storage devices with low DRAM/SRAM
US10691340B2 (en) * 2017-06-20 2020-06-23 Samsung Electronics Co., Ltd. Deduplication of objects by fundamental data identification
US10275162B2 (en) 2017-06-23 2019-04-30 Dell Products L.P. Methods and systems for managing data migration in solid state non-volatile memory
US10176046B1 (en) * 2017-06-29 2019-01-08 EMC IP Holding Company LLC Checkpointing of metadata into user data area of a content addressable storage system
TWI633434B (zh) * 2017-07-12 2018-08-21 宏碁股份有限公司 管理固態硬碟之方法、系統及電腦可讀取媒體
CN107728937B (zh) * 2017-09-15 2020-09-04 上海交通大学 一种使用非易失性内存介质的键值对持久存储方法及系统
CN107784121B (zh) * 2017-11-18 2020-04-24 中国人民解放军国防科技大学 一种基于非易失内存的日志文件系统的小写优化方法
KR20190074886A (ko) * 2017-12-20 2019-06-28 에스케이하이닉스 주식회사 메모리 시스템 및 그것의 동작 방법
US20190214087A1 (en) * 2018-01-09 2019-07-11 Western Digital Technologies, Inc. Non-volatile storage system with decoupling of write transfers from write operations
TWI662409B (zh) * 2018-01-23 2019-06-11 祥碩科技股份有限公司 實體區域頁面位址轉換器與實體區域頁面清單存取方法
US10691354B1 (en) 2018-01-31 2020-06-23 EMC IP Holding Company LLC Method and system of disk access pattern selection for content based storage RAID system
TWI651650B (zh) * 2018-02-05 2019-02-21 大陸商深圳大心電子科技有限公司 記憶體管理方法及使用所述方法的儲存控制器
US10585791B2 (en) * 2018-03-20 2020-03-10 Intel Corporation Ordering of memory device mapping to reduce contention
US10636495B2 (en) 2018-06-12 2020-04-28 Western Digital Technologies, Inc. Adjustable read retry order based on decoding success trend
US11347653B2 (en) * 2018-08-31 2022-05-31 Nyriad, Inc. Persistent storage device management
CN110928737B (zh) * 2018-09-19 2021-05-18 华为技术有限公司 监控样本进程的内存访问行为的方法和装置
US10922178B2 (en) * 2018-10-31 2021-02-16 Hewlett Packard Enterprise Development Lp Masterless raid for byte-addressable non-volatile memory
CN111143230B (zh) * 2018-11-02 2022-03-29 群联电子股份有限公司 数据整并方法、存储器存储装置及存储器控制电路单元
TWI709042B (zh) 2018-11-08 2020-11-01 慧榮科技股份有限公司 用來進行關於容錯式磁碟陣列的映射資訊管理之方法與裝置以及儲存系統
CN109450689B (zh) * 2018-11-19 2022-02-22 郑州云海信息技术有限公司 一种日志打印方法、装置、存储介质和计算机设备
CN109558337B (zh) * 2018-11-30 2023-09-19 北京同有飞骥科技股份有限公司 高速缓存的动态访问方法、装置及存储介质
US10845991B2 (en) * 2018-12-03 2020-11-24 EMC IP Holding Company LLC Shallow memory table for data storage service
US11163693B2 (en) * 2019-07-30 2021-11-02 EMC IP Holding Company LLC Hash-based one-level mapping for storage clusters
TWI743562B (zh) * 2019-09-11 2021-10-21 英業達股份有限公司 資料記錄系統的操作方法
KR20210041159A (ko) 2019-10-04 2021-04-15 삼성전자주식회사 정정 가능한 독출 오류가 발생한 데이터를 복구하는 메모리 시스템 및 호스트의 동작 방법
KR20210041158A (ko) 2019-10-04 2021-04-15 삼성전자주식회사 기입 오류가 발생한 데이터를 복구하는 메모리 시스템 및 호스트의 동작 방법
KR102691952B1 (ko) * 2019-10-14 2024-08-06 에스케이하이닉스 주식회사 컨트롤러 및 이를 포함하는 데이터 저장 시스템
US11726921B2 (en) * 2020-05-21 2023-08-15 Seagate Technology Llc Combined page footer for parallel metadata storage
US11620234B2 (en) 2020-06-29 2023-04-04 Western Digital Technologies, Inc. Operation-deterministic write operations for data recovery and integrity checks
TWI733568B (zh) * 2020-08-27 2021-07-11 慧榮科技股份有限公司 記憶裝置、快閃記憶體控制器及其存取方法
KR20220037184A (ko) * 2020-09-17 2022-03-24 삼성전자주식회사 스토리지 장치, 스토리지 시스템 및 스토리지 시스템의 동작 방법
KR20220101349A (ko) 2021-01-11 2022-07-19 삼성전자주식회사 스토리지 장치의 데이터 기입 방법 및 이를 수행하는 스토리지 장치
JP2022172698A (ja) * 2021-05-06 2022-11-17 株式会社ソニー・インタラクティブエンタテインメント 情報処理装置、情報処理システム、および情報処理方法
CN113255262B (zh) * 2021-06-07 2021-09-28 上海国微思尔芯技术股份有限公司 对象分配方法、装置、计算机设备和存储介质
TWI773395B (zh) 2021-06-22 2022-08-01 慧榮科技股份有限公司 記憶體控制器與連結識別方法
US20230015697A1 (en) * 2021-07-13 2023-01-19 Citrix Systems, Inc. Application programming interface (api) authorization
US20230119926A1 (en) * 2021-10-15 2023-04-20 Vmware, Inc. Supporting random access uploads to an object store
KR102497130B1 (ko) 2021-11-11 2023-02-07 삼성전자주식회사 스토리지 장치 및 그것의 동작 방법
JP7457740B2 (ja) * 2022-03-03 2024-03-28 株式会社日立製作所 ストレージシステム及びその制御方法
CN118519667A (zh) * 2024-07-23 2024-08-20 深圳佰维存储科技股份有限公司 Ufs元数据重建方法、装置、可读存储介质及电子设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100445134B1 (ko) * 2002-01-31 2004-08-21 삼성전자주식회사 플래시 메모리 안정화기능을 구비한 호스트 기기 및 그 방법
US20100131702A1 (en) * 2002-08-29 2010-05-27 Micron Technology, Inc. Single segment data object management
US20110099323A1 (en) * 2009-10-27 2011-04-28 Western Digital Technologies, Inc. Non-volatile semiconductor memory segregating sequential, random, and system data to reduce garbage collection for page based mapping

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1153235A (ja) 1997-08-08 1999-02-26 Toshiba Corp ディスク記憶装置のデータ更新方法、ならびにディスク記憶制御システム
US6763424B2 (en) 2001-01-19 2004-07-13 Sandisk Corporation Partial block data programming and reading operations in a non-volatile memory
US20060174067A1 (en) * 2005-02-03 2006-08-03 Craig Soules Method of caching data
US7594073B2 (en) * 2006-09-29 2009-09-22 Intel Corporation Method and apparatus for caching memory content on a computing system to facilitate instant-on resuming from a hibernation state
TW201007734A (en) * 2008-08-06 2010-02-16 Genesys Logic Inc Flash memory control apparatus having signal-converting module
US7925925B2 (en) * 2008-12-30 2011-04-12 Intel Corporation Delta checkpoints for a non-volatile memory indirection table
CN101576834B (zh) 2009-05-08 2012-05-30 西安蓝海本立信息科技有限公司 基于时间戳建立数据视图的连续数据保护系统及方法
CN101930404B (zh) 2010-08-27 2012-11-21 威盛电子股份有限公司 存储装置及其操作方法
EP2764516A4 (en) * 2011-10-05 2015-07-08 Lsi Corp SELF-HISTORIZATION AND HIERARCHICAL CONSISTENCY FOR NON-VOLATILE STORES

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100445134B1 (ko) * 2002-01-31 2004-08-21 삼성전자주식회사 플래시 메모리 안정화기능을 구비한 호스트 기기 및 그 방법
US20100131702A1 (en) * 2002-08-29 2010-05-27 Micron Technology, Inc. Single segment data object management
US20110099323A1 (en) * 2009-10-27 2011-04-28 Western Digital Technologies, Inc. Non-volatile semiconductor memory segregating sequential, random, and system data to reduce garbage collection for page based mapping

Also Published As

Publication number Publication date
JP2014534503A (ja) 2014-12-18
EP2764516A1 (en) 2014-08-13
EP2764516A4 (en) 2015-07-08
US8949517B2 (en) 2015-02-03
KR20140084337A (ko) 2014-07-04
TWI516931B (zh) 2016-01-11
CN103392207B (zh) 2017-08-04
US20140082261A1 (en) 2014-03-20
KR20130132662A (ko) 2013-12-04
WO2013052562A1 (en) 2013-04-11
CN103392207A (zh) 2013-11-13
KR101562781B1 (ko) 2015-10-23
TW201324150A (zh) 2013-06-16
US20170161191A1 (en) 2017-06-08
US9886383B2 (en) 2018-02-06

Similar Documents

Publication Publication Date Title
KR101522848B1 (ko) 비휘발성 스토리지에 대한 셀프-저널링 및 계층적 일치성
US11449252B2 (en) Method of writing and reading data in an NVM using Lpage identification headers
KR102155191B1 (ko) 비휘발성 메모리에 대한 기록들의 관리 및 그 기록들의 영역 선택
TWI584125B (zh) 輸入/輸出裝置及計算主機相互運作
KR101912596B1 (ko) 리던던트 어레이들을 통한 비휘발성 메모리 프로그램 실패 복구
US9213633B2 (en) Flash translation layer with lower write amplification
KR101564569B1 (ko) 상위-레벨 리던던시 정보 계산
WO2012148828A2 (en) Variable over-provisioning for non-volatile storage
US9396104B1 (en) Accessing compressed data of varying-sized quanta in non-volatile memory

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E902 Notification of reason for refusal
A107 Divisional application of patent
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20180403

Year of fee payment: 4