KR20180012691A - 다중 스트림 저널 리플레이 - Google Patents

다중 스트림 저널 리플레이 Download PDF

Info

Publication number
KR20180012691A
KR20180012691A KR1020170077449A KR20170077449A KR20180012691A KR 20180012691 A KR20180012691 A KR 20180012691A KR 1020170077449 A KR1020170077449 A KR 1020170077449A KR 20170077449 A KR20170077449 A KR 20170077449A KR 20180012691 A KR20180012691 A KR 20180012691A
Authority
KR
South Korea
Prior art keywords
block sets
block
sequence number
major
sets
Prior art date
Application number
KR1020170077449A
Other languages
English (en)
Other versions
KR101979088B1 (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 KR20180012691A publication Critical patent/KR20180012691A/ko
Application granted granted Critical
Publication of KR101979088B1 publication Critical patent/KR101979088B1/ko

Links

Images

Classifications

    • 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
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1471Saving, restoring, recovering or retrying involving logging of persistent data for recovery
    • 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
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1438Restarting or rejuvenating
    • 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/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0647Migration mechanisms
    • 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/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced 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/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • 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/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • 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
    • 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/064Management of blocks
    • 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/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0652Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
    • 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
    • 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/1041Resource optimization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/20Employing a main memory using a specific memory technology
    • G06F2212/202Non-volatile memory
    • G06F2212/2022Flash 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/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/7205Cleaning, compaction, garbage collection, erase control

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)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Read Only Memory (AREA)
  • Memory System (AREA)

Abstract

플래시 저장 시스템에 대한 간접 참조 리플레이의 방법은 호스트 스트림에서, 데이터를 플래시 저장 시스템의 블록세트들에 기입하는 단계를 포함한다. 호스트 블록세트들에는 가장 최근에 닫힌 호스트 블록세트로부터 증분된 메이저 시퀀스 번호가 할당된다. 이 방법은 할당된 메이저 시퀀스 번호와 관련되는 각각의 호스트 블록세트에 간접 참조 저널을 기입하는 단계를 포함한다. 이 방법은 가비지 수집(GC) 스트림에서, 데이터를 플래시 저장 시스템의 다른 블록세트들에 기입하는 단계를 포함한다. GC 블록세트들에는 가장 최근에 닫힌 호스트 블록세트에 기초하는 메이저 시퀀스 번호, 및 가장 최근에 닫힌 GC 블록세트로부터 증분된 마이너 시퀀스 번호가 할당된다. 이 방법은 할당된 메이저 및 마이너 시퀀스 번호들과 관련되는 각각의 GC 블록세트에 간접 참조 저널을 기입하는 단계를 포함한다. 블록세트들의 저널들을 메이저 시퀀스 및 마이너 시퀀스 번호들의 순서로 리플레이함으로써 간접 참조 테이블이 구축된다.

Description

다중 스트림 저널 리플레이{MULTI-STREAM JOURNALED REPLAY}
본 개시는 플래시 저장 장치에 관한 것으로, 더 상세하게는 플래시 저장 장치를 위한 간접 참조(indirection) 시스템을 복원하는 것에 관한 것이다.
플래시 저장 장치를 위한 간접 참조 시스템은 각각의 호스트 액세스 가능 논리 블록 주소(LBA)에 대해 플래시 메모리 장치상의 물리적 위치를 계속 추적한다. 플래시 저장 장치가 전력을 상실하고 전력이 복원될 때 다시 부팅한 후에, 간접 참조 시스템은 간접 참조 시스템이 전력 상실 전에 가졌던 상태로 복원되는데, 이는 간접 참조 리플레이(indirection replay) 또는 리플레이로 알려진 프로세스이다. 간접 참조 리플레이는 새로운 기입들 또는 기입 델타들의 저널(journal)이 사용자 데이터와 함께 로그됨에 따라 전체로서의 간접 참조 시스템의 스냅샷들의 조합을 종종 이용한다. 그러나, 스냅샷 기반 리플레이는 스냅샷들과 저널링 간의 동기화가 관리되어야만 하므로, 펌웨어 복잡성을 증가시킬 수 있다. 스냅샷에 필요한 리소스로 인해 런타임 성능이 손해를 입을 수 있다. 스냅샷을 사용하여 리플레이할 때 부팅 시간 성능도 손해를 입을 수 있다.
본 기술은 리플레이를 위한 스냅샷의 사용을 피한다. 전체 플래시 저장 장치는 기입 델타들로부터 리플레이된다. 본 기술은 또한 다중 스트림 시스템에서 스냅샷 없는 리플레이를 허용한다.
본 기술의 양태들에 따르면, 플래시 저장 장치를 리플레이하기 위한 방법이 제공된다. 이 방법은 일차 스트림에서, 데이터를 저장 장치의 제1 복수의 블록세트에 기입하는 단계를 포함한다. 상기 방법은 각각의 메이저 시퀀스 번호를 상기 제1 복수의 블록세트의 각각의 블록세트에 할당하는 단계를 포함하고, 상기 각각의 메이저 시퀀스 번호는 상기 제1 복수의 블록세트 중 가장 최근에 닫힌 블록세트에 할당된 이전 메이저 시퀀스 번호로부터 증분된다. 상기 방법은 상기 제1 복수의 블록세트 각각에 각각의 간접 참조 저널을 기입하는 단계를 더 포함하고, 상기 각각의 간접 참조 저널은 상기 각각의 블록세트에 기입된 데이터(예를 들어, 기입 델타들)에 대응하고 상기 각각의 블록세트에 할당된 상기 각각의 메이저 시퀀스 번호와 관련된다. 상기 방법은 또한 상기 일차 스트림과 동시에 동작하는 이차 스트림에서, 데이터를 상기 저장 장치의 제2 복수의 블록세트에 기입하는 단계를 포함한다. 상기 방법은 각각의 메이저-마이너 시퀀스 번호들을 상기 제2 복수의 블록세트의 각각의 블록세트에 할당하는 단계를 포함하고, 상기 각각의 메이저-마이너 시퀀스 번호들은 상기 제1 복수의 블록세트 중 상기 가장 최근에 닫힌 블록세트에 할당된 상기 이전 메이저 시퀀스 번호 및 상기 제2 복수의 블록세트에서 가장 최근에 닫힌 블록세트로부터 증분된 각각의 마이너 시퀀스 번호를 포함한다. 상기 방법은 상기 제2 복수의 블록세트 각각에 각각의 간접 참조 저널을 기입하는 단계를 더 포함하고, 상기 각각의 간접 참조 저널은 상기 각각의 블록세트에 기입된 상기 데이터에 대응하고 상기 각각의 블록세트에 할당된 상기 각각의 메이저-마이너 시퀀스 번호와 관련된다. 상기 방법은 또한 먼저 각각의 메이저 시퀀스 번호들에 따라 그리고 다음으로 각각의 마이너 시퀀스 번호들에 따라 순서화된 상기 제1 및 제2 복수의 블록세트로부터 상기 간접 참조 저널들을 리플레이함으로써 상기 저장 장치의 메모리에 간접 참조 테이블을 구축하는 단계를 포함한다.
본 기술의 양태들에 따르면, 플래시 저장 장치가 제공된다. 이 플래시 저장 장치는 메모리, 복수의 플래시 메모리 장치, 및 제어기를 포함한다. 상기 플래시 메모리 장치는 각각 블록들로 분할된 메모리 셀들을 포함하고, 상기 복수의 플래시 메모리 장치는 각각의 플래시 메모리 장치로부터의 블록들을 결합함으로써 블록세트들로 구성된다. 상기 제어기는 호스트 스트림에서, 데이터를 상기 플래시 저장 시스템의 제1 복수의 블록세트에 기입하도록 구성된다. 상기 제어기는 각각의 메이저 시퀀스 번호를 상기 제1 복수의 블록세트의 각각의 블록세트에 할당하도록 구성되고, 상기 각각의 메이저 시퀀스 번호는 상기 제1 복수의 블록세트 중 가장 최근에 닫힌 블록세트에 할당된 이전 메이저 시퀀스 번호로부터 증분된다. 상기 제어기는 또한 상기 제1 복수의 블록세트 각각에 각각의 간접 참조 저널을 기입하도록 구성되고, 상기 각각의 간접 참조 저널은 상기 각각의 블록세트에 기입된 상기 데이터에 대응하고 상기 각각의 블록세트에 할당된 상기 각각의 메이저 시퀀스 번호와 관련된다. 상기 제어기는 또한 일차 스트림과 동시에 동작하는 가비지 수집 스트림에서, 데이터를 상기 플래시 저장 시스템의 제2 복수의 블록세트에 기입하도록 구성된다. 상기 제어기는 각각의 메이저-마이너 시퀀스 번호들을 상기 제2 복수의 블록세트의 각각의 블록세트에 할당하도록 구성되고, 상기 각각의 메이저-마이너 시퀀스 번호들은 상기 제1 복수의 블록세트 중 상기 가장 최근에 닫힌 블록세트에 할당된 상기 이전 메이저 시퀀스 번호 및 상기 제2 복수의 블록세트에서 가장 최근에 닫힌 블록세트로부터 증분된 각각의 마이너 시퀀스 번호를 포함한다. 상기 제어기는 또한 상기 제2 복수의 블록세트 각각에 각각의 간접 참조 저널을 기입하도록 구성되고, 상기 각각의 간접 참조 저널은 상기 각각의 블록세트에 기입된 상기 데이터에 대응하고 상기 각각의 블록세트에 할당된 상기 각각의 메이저-마이너 시퀀스 번호들과 관련된다. 상기 제어기는 또한 먼저 각각의 메이저 시퀀스 번호들에 따라 그리고 다음으로 각각의 마이너 시퀀스 번호들에 따라 순서화된 상기 제1 및 제2 복수의 블록세트로부터 상기 간접 참조 저널들을 리플레이함으로써 상기 메모리에 간접 참조 테이블을 구축하도록 구성된다.
본 기술의 양태들에 따르면, 실행 가능 명령들로 인코딩된 머신 판독 가능 매체가 제공된다. 상기 명령들은, 프로세서에 의해 실행될 때, 상기 프로세서로 하여금 동작들을 수행하게 한다. 이 동작들은 일차 스트림에서, 데이터를 저장 장치의 제1 복수의 블록세트에 기입하는 것을 포함한다. 상기 동작들은 각각의 메이저 시퀀스 번호를 상기 제1 복수의 블록세트의 각각의 블록세트에 할당하는 것을 포함하고, 상기 각각의 메이저 시퀀스 번호는 상기 제1 복수의 블록세트 중 가장 최근에 닫힌 블록세트에 할당된 이전 메이저 시퀀스 번호로부터 증분된다. 상기 동작들은 또한 상기 제1 복수의 블록세트 각각에 각각의 간접 참조 저널을 기입하는 것을 포함하고, 상기 각각의 간접 참조 저널은 상기 각각의 블록세트에 기입된 상기 데이터에 대응하고 상기 각각의 블록세트에 할당된 상기 각각의 메이저 시퀀스 번호와 관련된다. 상기 동작들은 또한 상기 일차 스트림과 동시에 동작하는 이차 스트림에서, 데이터를 상기 저장 장치의 제2 복수의 블록세트에 기입하는 것을 포함한다. 상기 동작들은 각각의 메이저-마이너 시퀀스 번호들을 상기 제2 복수의 블록세트의 각각의 블록세트에 할당하는 것을 포함하고, 상기 각각의 메이저-마이너 시퀀스 번호들은 상기 제1 복수의 블록세트 중 상기 가장 최근에 닫힌 블록세트에 할당된 상기 이전 메이저 시퀀스 번호 및 상기 제2 복수의 블록세트에서 가장 최근에 닫힌 블록세트로부터 증분된 각각의 마이너 시퀀스 번호를 포함한다. 상기 동작들은 또한 상기 제2 복수의 블록세트 각각에 각각의 간접 참조 저널을 기입하는 것을 포함하고, 상기 각각의 간접 참조 저널은 상기 각각의 블록세트에 기입된 상기 데이터에 대응하고 상기 각각의 블록세트에 할당된 상기 각각의 메이저-마이너 시퀀스 번호들과 관련된다. 상기 동작들은 먼저 각각의 메이저 시퀀스 번호들에 따라 그리고 다음으로 각각의 마이너 시퀀스 번호들에 따라 순서화된 상기 제1 및 제2 복수의 블록세트로부터 상기 간접 참조 저널들을 리플레이함으로써 상기 저장 장치의 메모리에 간접 참조 테이블을 구축하는 것을 포함한다.
본 기술의 다른 구성들은 하기의 상세한 설명으로부터 본 기술분야의 기술자들에게 쉽게 명백해질 것이며, 본 기술의 다양한 구성들이 예시로서 도시되고 기술되어 있는 것으로 이해된다. 이해될 바와 같이, 본 기술은 다른 및 상이한 구성들이 가능하고, 그 몇몇의 세부 사항들은, 모두가 본 기술의 범위를 벗어나지 않으면서, 다양한 다른 점들에서 수정이 가능하다. 따라서, 도면 및 상세한 설명은 제한적인 것이 아니라 본질적으로 예시적인 것으로 간주되어야 한다.
도 1은 본 기술의 양태들에 따른 플래시 저장 장치의 구성 요소들을 예시하는 블록도이다.
도 2a는 본 기술의 양태들에 따른 일차 스트림 및 이차 스트림에 대한 블록세트 식별자(ID)들의 다이어그램이다.
도 2b는 도 2a의 블록세트들에 대한 대응하는 메이저/마이너 시퀀스 번호들을 갖는 블록세트 ID들을 도시한다.
도 3은 본 기술의 양태들에 따른 저널의 다이어그램이다.
도 4는 본 기술의 양태들에 따른 플래시 저장 시스템을 위한 리플레이를 위한 방법을 예시하는 흐름도이다.
이하에 설명되는 상세한 설명은 본 기술의 다양한 구성들에 대한 설명으로서 의도된 것이고 본 기술이 실시될 수 있는 유일한 구성을 나타내기 위한 것이 아니다. 첨부된 도면은 본 명세서에 통합되어 상세한 설명의 일부를 구성한다. 상세한 설명은 본 기술에 대한 철저한 이해를 제공하기 위해 특정 세부 사항들을 포함한다. 그러나, 본 기술이 이러한 특정 세부 사항들 없이 실시될 수 있음은 본 기술분야의 기술자들에게 명백할 것이다. 어떤 경우에는, 잘 알려진 구조들 및 구성 요소들은 본 기술의 개념을 모호하게 하지 않기 위해 블록도 형식으로 도시된다.
도 1은 본 기술의 양태들에 따른 플래시 저장 시스템(110)의 구성 요소들을 예시하는 블록도이다. 도 1에 도시된 바와 같이, 플래시 저장 시스템(110)은 인터페이스(115), 제어기(120), 메모리(125), 및 플래시 메모리 장치들(130A-130N)을 포함한다. 인터페이스(115)는 플래시 저장 시스템(110)과 호스트(150) 간의 데이터, 명령, 및/또는 제어 신호의 통신을 용이하게 한다. 제어기(120)는 호스트(150)로부터 수신된 명령에 따라 플래시 메모리 장치들(130) 중 하나에 데이터를 저장하고 그 안의 데이터를 검색하도록 플래시 저장 시스템(110)의 동작을 제어한다. 랜덤 액세스 메모리(RAM)일 수 있는 메모리(125)는 제어기(120)가 명령을 처리하고 호스트(150)와 플래시 메모리 장치들(130A-130N) 간에 데이터를 전송하기 위한 일시적인 저장 공간을 제공한다. 각각의 이들 구성 요소들의 동작은 아래에서 더 상세히 설명된다.
인터페이스(115)는 호스트(150)와 플래시 저장 시스템(110) 간의 물리적 및 전기적 연결을 제공한다. 인터페이스(115)는 물리적 및 전기적 연결을 통해 호스트(150)와 플래시 저장 시스템(110) 간의 데이터, 명령, 및/또는 제어 신호의 통신을 용이하게 하도록 구성된다. 인터페이스(115)와의 연결 및 통신은 USB(Universal Serial Bus), SCSI(Small Computer System Interface), SATA(Serial Advanced Technology Attachment) 등과 같은 표준 인터페이스에 기초할 수 있다. 대안적으로, 연결 및/또는 통신은 독점적인 인터페이스에 기초할 수 있다. 본 기술은 임의의 특정 유형의 인터페이스에 제한되지 않는다.
제어기(120)는 호스트(150)와 플래시 메모리 장치들(130A-130N) 간의 데이터의 흐름을 관리한다. 제어기(120)는 인터페이스(115)에 결합되고 인터페이스(115)를 통해 호스트(150)로부터 명령 및 데이터를 수신하도록 구성된다. 예를 들어, 제어기(120)는 호스트(150)로부터 데이터 및 기입 명령을 수신하여 데이터를 하나 이상의 플래시 메모리 장치(130)에 기입할 수 있다. 제어기(120)는 또한 인터페이스(115)를 통해 호스트 시스템에 데이터를 전송하도록 구성된다. 예를 들어, 제어기(120)는 플래시 메모리 장치(130)로부터 데이터를 판독하고 판독 명령에 응답하여 호스트(150)에 데이터를 전송할 수 있다. 제어기(120)는 또한 내부 제어 알고리즘 또는 호스트(150)로부터 수신될 수 있는 다른 유형의 명령에 기초하여 플래시 메모리 장치들(130A-130N) 및 메모리(125)에 저장된 데이터를 관리하도록 구성된다. 다른 유지 관리 동작들은 플래시 저장 시스템(110) 내의 제어기(120)에 의해 수행될 수 있다.
제어기(120)는 본 명세서에 설명된 동작들 및 기능들을 수행하도록 설계되고 구성된 범용 프로세서, 마이크로컨트롤러, 디지털 신호 프로세서(DSP), 주문형 집적 회로(ASIC), 필드 프로그래머블 게이트 어레이(FPGA) 또는 다른 프로그램 가능 논리 장치, 개별 게이트 또는 트랜지스터 논리 장치, 개별 하드웨어 구성 요소들, 또는 이들의 임의의 조합으로 구현될 수 있다. 제어기(120)는 머신/컴퓨터 판독 가능 매체 상에 저장된 명령들의 하나 이상의 시퀀스들을 실행함으로써 본 명세서에 설명된 동작들 및 기능들을 수행할 수 있다. 머신/컴퓨터 판독 가능 매체는 플래시 메모리 장치(130), 메모리(125), 또는 제어기(120)가 명령들 또는 코드를 판독할 수 있는 다른 유형의 판독 가능 매체일 수 있다. 예를 들어, 플래시 저장 시스템(110)은 플래시 저장 시스템(110)의 동작 동안 제어기(120)에 의해 판독되고 실행되는 명령들의 하나 이상의 시퀀스를 포함하는 펌웨어/소프트웨어로 인코딩된 EPROM 또는 EEPROM과 같은 판독 전용 메모리(ROM)를 포함할 수 있다.
플래시 메모리 장치들(130A-130N)은 모두 단일 플래시 칩 상에 위치되거나 또는 다수의 플래시 칩 상에 배치될 수 있다. 플래시 메모리 장치들은 제어기(120)에 의해 플래시 메모리 장치로부터 데이터가 판독되고 플래시 메모리 장치에 데이터가 기입되는 다수의 채널 사이에 분할되거나, 단일 채널에 결합될 수 있다. 플래시 메모리 장치(130)는 NAND 플래시를 사용하여 구현될 수 있다.
플래시 메모리 장치(130)는 플래시 메모리 블록(140)과 같은 저장 블록들로 분할된 다수의 메모리 셀을 포함한다. 이들 저장 블록은 데이터 블록 또는 메모리 블록으로 지칭될 수 있고 물리적 블록 주소를 사용하여 제어기(120)에 의해 주소 지정 가능하다. 각각의 저장 블록은 또한 참조 페이지를 포함하는 저장 블록의 물리적 블록 주소로부터의 오프셋 또는 물리적 페이지 주소를 사용하여 제어기(120)에 의해 주소 지정 가능한 다수의 데이터 세그먼트 또는 페이지로 분할된다. 저장 블록들은 단일 소거 동작으로 플래시 메모리 장치(130) 내에서 소거되는 데이터의 단위들을 나타낸다. 물리적 페이지들은 단일 판독 또는 기입 동작에서 플래시 메모리 장치(130)로부터 판독되거나 플래시 메모리 장치(130)에 기입되는 데이터의 단위들을 나타낸다. 플래시 메모리 블록들(140A-1 내지 140N-1)과 같은 플래시 메모리 장치들(130)에 걸쳐 유사하게 위치된 플래시 메모리 블록들(140)은 블록세트(145)로서 함께 그룹화될 수 있다. 각각의 플래시 메모리 장치(130)는 또한 레지스터(135)를 포함하고, 이는 예를 들어 대응하는 플래시 메모리 장치(130)와 관련된 카운터들 및 다른 데이터를 저장하는 데 사용될 수 있다.
본 기술은 플래시 메모리의 임의의 특정 용량에 제한되지 않는다. 예를 들어, 플래시 메모리(25) 내의 저장 블록들은 각각 32, 64, 또는 128 페이지를 포함할 수 있다. 또한, 플래시 메모리(25) 내의 페이지들은 각각 512 바이트, 2 킬로바이트, 또는 4 킬로바이트를 포함할 수 있다.
메모리(125)는 제어기(120)에 결합되고 플래시 저장 시스템(110)의 동작 중에 제어기(120)에 의해 사용되는 휘발성 메모리를 나타낸다. 제어기(120)는 메모리(125)에 명령 및/또는 데이터를 버퍼링할 수 있다. 제어기(120)는 또한 호스트(150)에 의해 사용된 논리적 데이터 주소들을 플래시 메모리 장치들(130A-130N)의 부분들에 대응하는 가상 및/또는 물리적 주소들로 변환하는 데 사용되는 주소 변환 테이블들과 같은 간접 참조 시스템을 저장하기 위해 메모리(125)를 사용할 수 있다. 플래시 저장 시스템을 관리하는 데 통상적으로 사용되는 다른 유형의 테이블, 데이터, 상태 표시기 등이 또한 제어기(120)에 의해 메모리(125)에 저장될 수 있다. 메모리(125)는 본 기술의 범위를 벗어남이 없이 동적 랜덤 액세스 메모리(DRAM), 정적 랜덤 액세스 메모리(SRAM), 또는 본 기술분야의 기술자들에게 알려진 다른 유형의 휘발성 랜덤 액세스 메모리를 사용하여 구현될 수 있다.
예를 들어 정전 또는 플래시 저장 시스템(110)의 셧다운으로 인해 플래시 저장 시스템(110)이 전원을 상실할 때, 간접 참조 시스템의 상태가 상실될 수 있다. 전원이 플래시 저장 시스템에 복원되면, 간접 참조 시스템은 전원 상실 전의 간접 참조 시스템의 상태로 복원되어야 한다. 저널 기반 리플레이에서는 스냅샷들의 사용을 피할 수 있다. 각각의 기입 동작마다, 가상 주소의 물리적 주소로의 매핑에 대한 변경들을 기술하는 저널이 기록된다. 첫 번째 저널로부터 순차적으로 저널을 리플레이하면 간접 참조 시스템이 재구축될 것이다. 한 번에 하나의 블록세트만 열리고 기입되는, 단일 스트림 시스템에서, 블록세트들의 순차적 번호 매김은 저널들이 올바른 순서로 리플레이될 것을 보장한다.
블록세트들은 대응하는 저널들을 저장한다. 이 인라인 저널링(in-line journaling)은 저장 장치에 기입되는 저널의 수를 제한한다. 인라인 저널은 또한 더 이상 필요하지 않은 저널들을 자연스럽게 만료시키는데, 그 이유는 저널들은 블록세트가 삭제될 때 지워지기 때문이다. 올바른 순서로 리플레이하려면 기입된 블록세트들의 순서로 저널들을 리플레이해야 할 것이다. 그러나, 2개 이상의 블록세트가 한 번에 열릴 수 있도록 2개 이상의 스트림이 동시에 동작하는, 다중 스트림 시스템에서, 단순한 순차적 번호 매김은 일관성 오류를 도입할 수 있다.
예를 들어, 호스트 스트림은 제1 블록세트를 열 수 있는 반면 가비지 수집(GC) 스트림은 제2 블록세트를 연다. GC는 유효한 데이터를 블록에서 또 다른 블록으로 이동시키고 블록을 소거함으로써 블록을 해제하는 프로세스를 언급한다. 더 새로운 버전의 매핑이 GC 스트림의 블록세트에 기입되는 것이 가능하다. 올바른 리플레이 시퀀스는 어느 블록세트가 먼저 닫히는지에 의존할 것이며, 따라서 (더 오래된 저널에 기초하는) 더 오래된 저널이 (더 새로운 저널에 기초하는) 더 새로운 매핑 후에 리플레이되지 않는다. 그러나, 블록세트가 열림에 따라 순차적 번호가 할당되고, 블록세트 닫기의 순서는 예측 가능하지 않기 때문에, 단순한 순차적 번호 매기기는 리플레이 중에 오류가 발생할 수 있다. 더 오래된 매핑이 리플레이 중에 더 새로운 매핑을 대체하는 것으로 끝날 수 있다.
도 2a는 2개의 스트림, 즉 일차 스트림(210) 및 이차 스트림(220)에 대해 열리고 닫히는 블록세트들의 시퀀스를 도시한다. 일차 스트림(210)은 블록세트들(201, 204, 206, 및 203)을 포함한다. 이차 스트림(220)은 블록세트들(207, 202, 및 205)을 포함한다. 블록세트들의 길이는 열고 닫는 시간들에 대응한다. 예를 들어, 블록세트(207)는 블록세트(201)가 닫힌 후에 그리고 블록세트(204)가 열려 있는 동안 열린다. 바꾸어 말해서, 2개의 블록세트가 동시에 데이터를 기입하기 위해 열린다. 블록세트들은 블록세트가 더 이상 기입될 수 없을 때, 예를 들어 여유 공간이 없는 경우, 또는 미리 결정된 기간 후에 닫힐 수 있고, 따라서 블록세트는 무기한으로 열리지 않는다. 일차 스트림(210)은 호스트 스트림에 대응할 수 있고, 따라서 블록세트들(201, 204, 206, 및 203)이 호스트 동작을 위해 열리고 닫힌다. 이차 스트림(220)은 가비지 수집(GC) 스트림에 대응할 수 있고, 따라서 블록세트들(207, 202, 및 205)이 GC 동작을 위해 열리고 닫힌다.
양태들에 따르면, 블록세트가 열릴 때 각각의 블록세트에 시퀀스 번호가 할당된다. 호스트 블록세트에 대한 시퀀스 번호는 메이저 시퀀스 번호를 포함한다. GC 블록세트에 대한 시퀀스 번호는, 메이저 시퀀스 번호 구성 요소와 마이너 시퀀스 번호 구성 요소를 포함하는, 메이저-마이너 시퀀스 번호를 포함한다. 메이저 시퀀스 번호는 호스트 블록세트들을 순서화하는 데 사용된다. 마이너 시퀀스 번호는 GC 블록세트들을 순서화하는 데 사용된다. 호스트 블록세트들에 시퀀스 번호들을 할당할 때, 마지막으로 닫힌 호스트 블록세트 메이저 시퀀스 번호가 증분되어 현재 호스트 블록세트에 할당된다. 마이너 시퀀스 번호들은 호스트 블록세트들에 필요하지 않으므로 0 또는 NULL일 수 있다.
GC 스트림에 대해, GC 블록세트들에 대한 메이저 시퀀스 번호는 마지막으로 닫힌 호스트 블록세트 메이저 시퀀스 번호로 설정된다. 1에서 시작될 수 있는, 마이너 시퀀스 번호는 동일한 메이저 시퀀스 번호를 갖는 GC 블록세트들의 번호를 매기는 데 사용된다. 바꾸어 말해서, 마지막으로 닫힌 호스트 블록세트가 변경될 때까지, GC 블록세트들은 동일한 메이저 시퀀스 번호를 가질 것이고, 마이너 시퀀스 번호들은 상이할 것이다. 또한, GC 스트림에 대한 블록세트들을 선택할 때, 현재 GC 블록세트의 메이저 시퀀스 번호보다 높은 메이저 시퀀스 번호를 갖는 블록세트들은 제외된다.
도 2b는 도 2a의 블록세트들에 대한 순서화된 블록세트 ID 블록들을 도시한다. 도 2a에 도시된 바와 같이, 일차 스트림(210)은 먼저 블록세트(201)를 연다. 블록세트(201)에는 1000의 메이저 번호, 및 호스트의 스트림 유형이 할당된다. 마이너 시퀀스 번호는 NULL이다. 그 후 블록세트(201)는 닫히고 블록세트(204)는 열린다. 마지막으로 닫힌 블록세트 - 블록세트(201) - 는 1000의 메이저 시퀀스 번호를 가지므로, 블록세트(204)에는 다음 메이저 시퀀스 번호 1001이 할당된다. 마이너 시퀀스 번호는 NULL이고, 스트림 유형은 호스트이다.
블록세트(204)가 열린 후에, 블록세트(207)는 이차 스트림(220)에서 열린다. 블록세트(204)가 여전히 열려 있기 때문에, 마지막으로 닫힌 호스트 블록세트는 블록세트(201)이다. 블록세트(201)는, 블록세트(207)의 메이저 시퀀스 번호로도 사용되는, 1000의 메이저 시퀀스 번호를 갖는다. 블록세트(207)에는 1의 마이너 시퀀스 번호가 할당되어, 이 블록세트는 1000의 메이저 시퀀스 번호를 갖는 첫 번째 GC 블록세트이다. 스트림 유형은 GC로 설정된다.
이차 스트림(220)은 블록세트(204)가 여전히 열려 있는 동안 블록세트(207)를 닫고 블록세트(202)를 연다. 마지막으로 닫힌 호스트 블록세트는 여전히 블록세트(201)이므로, 블록세트(202)에는 메이저 시퀀스 번호 1000이 할당된다. 블록세트(202)에 대한 마이너 시퀀스 번호는 이전 마이너 시퀀스 번호로부터 증분되므로 2로 설정된다. 스트림 유형은 GC이다.
블록세트(202)가 여전히 열려 있는 동안, 일차 스트림(210)은 블록세트(204)를 닫고 블록세트(206)를 연다. 마지막으로 닫힌 호스트 블록세트는 이제 블록세트(204)이므로, 블록세트(206)에 대한 메이저 시퀀스 번호는 1002이다(예를 들어, 블록세트(204)의 메이저 시퀀스 번호로부터 증분된다). 마이너 시퀀스 번호는 NULL이고, 스트림 유형은 호스트이다.
블록세트(206)가 여전히 열려 있는 동안, 이차 스트림(220)은 블록세트(202)를 닫고 블록세트(205)를 연다. 마지막으로 닫힌 호스트 블록세트는 블록세트(204)이므로, 블록세트(205)에 대한 메이저 시퀀스 번호는 1001이다(예를 들어, 블록세트(204)의 동일한 메이저 시퀀스 번호). 마이너 시퀀스 번호는 1로 설정되고, 스트림 유형은 GC이다.
일차 스트림(210)은 블록세트(206)를 닫고 블록세트(203)를 연다. 블록세트(203)에는 1003의 메이저 시퀀스 번호가 할당된다(예를 들어, 블록세트(206)의 메이저 시퀀스 번호로부터 증분된다). 마이너 시퀀스 번호는 NULL이고, 스트림 유형은 호스트이다.
도 3은 블록세트에 저장될 수 있는 저널의 다이어그램을 도시한다. 이 저널은 헤더(301), 푸터(302), 및 가상-물리(virtual-to-physical, V2P) 엔트리들(308)과의 일련의 논리 블록 번호(LBN)(307) 쌍들을 포함한다. LBN은 논리 블록 주소에 대응하고, V2P는 물리적 주소에 대응한다. LBN(307) 및 V2P(308) 쌍들은 대응하는 기입 동작의 결과로서 간접 참조 시스템에 대한 변경들을 기술한다. 헤더(301)는 블록세트 시퀀스 번호(303), 저널 엔트리 번호(304), 오픈 타임스탬프(305), 및 스트림 번호(306)를 포함한다. 푸터(302)는 블록세트 시퀀스 번호(303) 및 저널 엔트리 번호(304)를 포함한다. 블록세트 시퀀스 번호(303)는 메이저 시퀀스 번호 및 마이너 시퀀스 번호를 포함한다. 저널 엔트리 번호는 저널 엔트리들에 대한 인덱싱에 대응한다. 오픈 타임스탬프(305)는 블록세트가 열린 때에 대응한다. 스트림 번호(306)는 블록세트를 연 스트림을 식별한다.
도 4는 본 기술의 양태들에 따른 플래시 저장 시스템(110)을 관리하기 위한 방법을 예시하는 흐름도이다. 이 방법은 제어기(120)가 명령들로 인코딩된 매체로부터 하나 이상의 명령 시퀀스를 판독하여 실행함으로써 수행될 수 있다. 이 방법은 일단 제어기(120)가 플래시 저장 장치(110)에 전원이 공급되었거나 유지 관리 목적을 위해 동작이 중단되고 기입 요청이 수신되었을 때 요구되는 임의의 시동 작업 및 하우스키핑 절차를 완료하면 시작된다. 기입 요청은 인터페이스(115)를 통해 호스트(150)로부터 수신된 명령에 기초할 수 있다. 대안적으로, 기입 요청은 제어기(120)에 의해 실행되는 유지 관리 프로세스와 같은 내부 프로세스에 의해 생성될 수 있다. 기입 요청이 수신되면, 제어기(120)는 기입 요청을 개시한다. 기입 요청을 개시하는 것은 어느 블록세트들에 기입할지를 결정하는 것을 포함할 수 있다. 일단 기입 요청이 개시되면, 프로세스는 블록 410에서 시작된다.
블록 410에서, 일차 스트림에서, 데이터가 저장 장치의 제1 복수의 블록세트에 기입된다. 일차 스트림은 예를 들어 호스트 데이터를 하나 이상의 블록세트(145)에 기입하기 위한 호스트 스트림일 수 있다. 하나 이상의 블록세트(145)는 기입 동작에 필요한 블록세트들 및 저장 장치 관리를 위한 인자들에 기초하여 제어기(120)에 의해 선택될 수 있다. 블록세트(145)는 선택되고 큐잉될 수 있거나, 다음 블록세트(145)가 필요할 때, 예를 들어 블록세트(145)가 닫힌 후에 선택될 수 있다. 일차 스트림은 한 번에 하나의 블록세트(145)가 열릴 수 있다.
블록 420에서, 메이저 시퀀스 번호가 제1 복수의 블록세트의 각각의 블록세트에 할당된다. 메이저 시퀀스 번호는 제1 복수의 블록세트 중 가장 최근에 닫힌 블록세트에 할당된 이전 메이저 시퀀스 번호로부터 증분된다. 블록세트(145)가 일차 스트림에 대해 열릴 때, 제어기(120)는 가장 최근에 닫힌 블록세트(145)의 메이저 시퀀스 번호를 결정한다. 그 후 가장 최근에 닫힌 블록세트의 메이저 시퀀스 번호는 현재의 메이저 시퀀스 번호를 결정하기 위해 1만큼 증분된다. 현재의 메이저 시퀀스 번호는 현재 열린 블록세트(145)에 할당된다. 특정 구현에서, 메이저 시퀀스 번호는 블록세트가 열림에 따라 증분하는 카운터로 추적될 수 있다. 그러한 구현에서, 블록세트들을 열고 닫는 일차 스트림이 2개 이상 존재할 수 있다. 카운터는 제2 열린 블록세트(145)가 제1 열린 블록세트(145)와 동일한 메이저 번호를 갖는 것을 방지한다.
메이저 시퀀스 번호는 스트림이 열려 있는 동안 기입 동작들을 정확하게 조정하기 위해 블록세트가 열릴 때 블록세트에 할당된다. 예를 들어, 2개의 블록세트(145)가 열렸지만 메이저 시퀀스 번호가 이미 할당되지 않은 경우, 이들 블록세트(145)에 대한 리플레이의 순서는 분명하지 않을 것이다. 또한, 특정 런타임 데이터 조정 결정은 각각의 열린 블록세트에 대한 메이저 시퀀스 번호를 아는 것에 의존한다. 그러나, 특정 구현에서, 메이저 시퀀스 번호는 블록세트가 닫힐 때 할당될 수 있다.
블록 430에서, 간접 참조 저널이 제1 복수의 블록세트 각각에 기입된다. 간접 참조 저널은 블록세트에 기입된 데이터에 대응하고 각각의 블록세트에 할당된 메이저 시퀀스 번호와 관련된다. 간접 참조 저널은 블록세트(145)가 업데이트됨에 따라 각각의 블록세트(145)에 기입된다. 하나 이상의 간접 참조 저널이 블록세트(145)의 블록(140)에 기입될 수 있다. 예를 들어, 블록세트(145)의 마지막 블록(140)에 디렉터리가 기입될 수 있으며, 이는 간접 참조 저널들을 계속 추적한다. 따라서, 간접 참조 저널들은 블록세트(145)에 걸쳐 분산될 수 있다. 또한, 간접 참조 저널들은 논리 스트라이프의 마지막 페이지 다음의 페이지와 같은 특정 위치들에 기입될 수 있다.
블록 440에서, 일차 스트림과 동시에 동작하는 이차 스트림에서, 데이터가 제2 복수의 블록세트에 기입된다. 이차 스트림은 가비지 수집 스트림 또는 다른 유지 관리 스트림일 수 있다. 블록세트들은 선택되고 큐잉될 있거나, 이전 블록세트가 닫힐 때 선택될 수 있다. 예를 들어, GC 스트림은 GC 동작에 대한 블록세트(145)를 선택할 수 있다. 그러나, GC 스트림은 현재 GC 메이저 시퀀스 번호보다 큰 메이저 시퀀스 번호를 가진 블록세트들을 제외할 것이다.
블록 450에서, 메이저-마이너 시퀀스 번호들이 제2 복수의 블록세트의 각각의 블록세트에 할당된다. 메이저-마이너 시퀀스 번호들은 제1 복수의 블록세트 중 가장 최근에 닫힌 블록세트에 할당된 이전 메이저 시퀀스 번호 및 제2 복수의 블록세트에서 가장 최근에 닫힌 블록세트로부터 증분된 마이너 시퀀스 번호를 포함한다. 다수의 호스트 스트림을 갖는 시스템들과 같은 특정 구현에서는, 모든 호스트 스트림에 걸쳐 가장 오래된 호스트 메이저 시퀀스 번호가 GC 메이저 시퀀스 번호로 사용된다.
블록 460에서, 간접 참조 저널이 제2 복수의 블록세트 각각에 기입된다. 간접 참조 저널은 각각의 블록세트에 기입된 데이터에 대응하고 각각의 블록세트에 할당된 각각의 메이저-마이너 시퀀스 번호와 관련된다. 전술한 블록 430과 유사하게, 저널은 블록세트(145)가 업데이트됨에 따라 대응하는 블록세트(145)에 기입된다.
블록 470에서, 먼저 각각의 메이저 시퀀스 번호들에 따라 그리고 다음으로 각각의 마이너 시퀀스 번호들에 따라 순서화된 제1 및 제2 복수의 블록세트로부터 간접 참조 저널들을 리플레이함으로써 간접 참조 테이블이 저장 장치의 메모리에 구축된다. 블록 470은 플래시 저장 시스템(110)에 대한 부트 시퀀스 동안 발생할 수 있다. 예를 들어, 플래시 저장 시스템(110)은 전원을 상실했을 수 있거나 또는 셧다운되었을 수 있고 그 후 다시 전원이 공급될 수 있다.
저널들을 갖는 플래시 저장 시스템(110)의 블록세트들(145)이 식별된다. 제어기(120)는 블록세트들(145) 중 어떤 블록세트가 유효한 데이터를 갖는지를 식별하고, 유효한 데이터를 갖는 블록세트들(145)의 메이저 또는 메이저-마이너 시퀀스 번호들을 결정할 수 있다. 특정 구현에서, 제어기(120)는 블록세트들(145)의 영구 리스트 및 대응하는 메이저 또는 메이저-마이너 시퀀스 번호들을 유지할 수 있다. 다른 특정 구현에서, 각각의 블록세트(145)는, 예를 들어, 블록세트가 닫힐 때, 스트림에서 열리는 다음 블록세트에 대한 식별자를 저장함으로써, 관련된 스트림에서 다음 블록세트(145)에 대한 식별자 또는 링크를 유지할 수 있다.
저널들을 갖는 블록세트들(145)은 먼저 각각의 메이저 시퀀스 번호들에 따라 순서화된다. 그 후 동일한 메이저 시퀀스 번호를 갖는 블록세트들(145)은 처음에 0 또는 NULL이 있는, 마이너 시퀀스 번호에 의해 순서화된다. 리플레이는 이러한 블록세트들의 순서대로 블록세트들(145)로부터의 저널들을 리플레이함으로써 발생한다.
대안적으로, 저널들을 갖는 블록세트들(145)은 2개의 리스트, 즉 호스트 리스트 및 GC 리스트로 분리될 수 있다. 호스트 리스트는 호스트 유형으로 지정된 블록세트들(145)을 포함하고, GC 리스트는 GC 유형으로 지정된 블록세트들(145)을 포함한다. 호스트 리스트의 블록세트들은 메이저 시퀀스 번호에 의해 정렬된다. GC 리스트의 블록세트들은 먼저 메이저 시퀀스 번호에 의해 그리고 다음으로 마이너 시퀀스 번호에 의해 정렬된다.
리플레이는 호스트 리스트 또는 GC 리스트로부터의 것일 수 있는, 가장 오래된 시퀀스 번호로 시작된다. 호스트 블록세트들을 리플레이할 때, GC 리스트의 헤드에 있는 GC 블록세트(예를 들어, 리플레이되지 않은 가장 오래된 GC 블록세트)의 메이저 시퀀스 번호와 일치하는 메이저 시퀀스 번호를 가진 호스트 블록세트가 리플레이될 때까지 블록세트들의 저널들이 리플레이된다. 이 호스트 블록세트가 리플레이된 후, GC 리스트의 헤드에서 시작하여, GC 블록세트들이 리플레이된다.
현재 GC 메이저 시퀀스 번호는 GC 리스트의 헤드에 대응한다. GC 블록세트들은 현재 GC 메이저 시퀀스 번호와 동일한 메이저 시퀀스 번호를 갖는 모든 GC 블록세트가 리플레이될 때까지 리플레이된다. 그 후, 다음 호스트 블록리스트가 리플레이된다. 리플레이는 모든 블록세트가 리플레이될 때까지 호스트 리스트와 GC 리스트 간을 전환한다.
본 기술분야의 기술자들은 본 명세서에 설명된 다양한 예시적인 블록, 모듈, 요소, 구성 요소, 방법, 및 알고리즘이 전자 하드웨어, 컴퓨터 소프트웨어, 또는 이들 둘 모두의 조합으로서 구현될 수 있다는 것을 이해할 것이다. 하드웨어 및 소프트웨어의 이러한 상호 교환 가능성을 설명하기 위해, 다양한 예시적인 블록, 모듈, 요소, 구성 요소, 방법, 및 알고리즘이 일반적으로 그들의 기능 면에서 위에 설명되었다. 이러한 기능이 하드웨어로 구현되는지 소프트웨어로 구현되는지는 전체 시스템에 부과된 특정 응용 및 설계 제약에 의존한다. 숙련된 기술자들은 설명된 기능을 각각의 특정 응용에 대해 다양한 방식으로 구현할 수 있다. 다양한 구성 요소들 및 블록들은 모두 본 기술의 범위를 벗어나지 않고 상이하게 배열될 수 있다(예를 들어, 상이한 순서로 배열되거나 상이한 방식으로 분할됨).
개시된 프로세스들에서의 단계들의 특정 순서 또는 계층 구조는 예시적인 접근법의 예시인 것으로 이해된다. 설계 선호도에 기초하여, 프로세스들에서의 특정 순서 또는 계층 구조가 재배열될 수 있는 것으로 이해된다. 단계들 중 일부는 동시에 수행될 수 있다. 첨부된 방법 청구항들은 샘플 순서로 다양한 단계들의 요소들을 제시하며, 제시된 특정 순서 또는 계층 구조로 제한되도록 의도되지 않는다.
전술한 설명은 본 기술분야의 임의의 사람이 본 명세서에 설명된 다양한 양태를 실시할 수 있게 하기 위해 제공된다. 이러한 양태들에 대한 다양한 변형들이 본 기술분야의 기술자들에게 용이하게 명백할 것이며, 본 명세서에서 정의된 일반적인 원리들은 다른 양태들에 적용될 수 있다. 따라서, 청구항들은 본 명세서에 도시된 양태들로 제한되는 것으로 의도되지 않고, 언어 청구항들과 일치하는 전체 범위가 주어져야 하며, 단수의 요소에 대한 언급은 구체적으로 그렇게 진술되지 않는 한 "하나 그리고 단 하나"를 의미하는 것으로 의도되지 않으며, "하나 이상"을 의미한다. 구체적으로 다르게 진술되지 않는 한, "일부"라는 용어는 하나 이상을 언급한다. 남성의 대명사(예를 들어, 그의)는 여성 및 중성의 성별(예를 들어, 그녀의 및 그것의)을 포함하고 그 반대도 마찬가지이다. 제목 및 부제가 있다면, 그것들은 단지 편의상 사용되며 발명을 제한하지 않는다.
"양태"와 같은 어구는 그러한 양태가 본 기술에 필수적이거나 그러한 양태가 본 기술의 모든 구성에 적용됨을 의미하지는 않는다. 양태에 관한 개시는 모든 구성 또는 하나 이상의 구성에 적용될 수 있다. 양태와 같은 어구는 하나 이상의 양태를 언급할 수 있고 그 반대도 마찬가지이다. "구성"과 같은 어구는 이러한 구성이 본 기술에 필수적이거나 그러한 구성이 본 기술의 모든 구성에 적용됨을 의미하지는 않는다. 구성에 관한 개시는 모든 구성 또는 하나 이상의 구성에 적용될 수 있다. 구성과 같은 어구는 하나 이상의 구성을 언급할 수 있고 그 반대도 마찬가지이다.
"예시적인"이라는 단어는 본 명세서에서 "예 또는 예시의 역할을 하는"을 의미하기 위해 사용된다. "예시적인"으로 본 명세서에 설명된 임의의 양태 또는 설계는 반드시 다른 양태 또는 설계보다 바람직하거나 유리한 것으로 해석되어야 하는 것은 아니다.
본 기술분야의 통상의 기술자들에게 공지되거나 추후 공지될 이 개시의 전반에 걸쳐 기술된 다양한 양태의 요소에 대한 모든 구조적 및 기능적 등가물들은 명백히 본 명세서에 참고로 포함되며 청구항들에 의해 포함되는 것으로 의도된다. 또한, 본 명세서에 개시된 어떠한 것도 그러한 개시가 청구항들에 명시적으로 기재되었는지의 여부에 관계없이 대중에 헌정되도록 의도되지 않는다. 어떠한 청구항 요소도 그 요소가 명백히 "~를 위한 수단"이라는 어구를 사용하여 기재되거나, 방법 청구항의 경우에, 그 요소가 "~를 위한 단계"라는 어구를 사용하여 기재되지 않는 한, 35 U.S.C. §112, 여섯 번째 단락의 규정에 따라 해석되어서는 안된다. 또한, 포괄한다(include)", "갖는다(have)" 등의 용어가 설명 또는 청구항들에서 사용되는 경우, 그러한 용어는 "포함한다(comprise)"가 청구항에서 전이어(transitional word)로서 사용될 때 해석되는 바와 같이 "포함한다"라는 용어와 유사한 방식으로 포괄적인 것으로 의도된다.

Claims (20)

  1. 방법으로서,
    일차 스트림에서, 데이터를 저장 장치의 제1 복수의 블록세트들에 기입하는 단계;
    각각의 메이저 시퀀스 번호를 상기 제1 복수의 블록세트들의 각각의 블록세트에 할당하는 단계 - 상기 각각의 메이저 시퀀스 번호는 상기 제1 복수의 블록세트들 중 가장 최근에 닫힌 블록세트에 할당된 이전 메이저 시퀀스 번호로부터 증분됨 -;
    상기 제1 복수의 블록세트들 각각에 각각의 간접 참조 저널을 기입하는 단계 - 상기 각각의 간접 참조 저널은 상기 각각의 블록세트에 기입된 상기 데이터에 대응하고 및 상기 각각의 블록세트에 할당된 상기 각각의 메이저 시퀀스 번호와 관련됨 -;
    상기 일차 스트림과 동시에 동작하는 이차 스트림에서, 데이터를 상기 저장 장치의 제2 복수의 블록세트들에 기입하는 단계;
    각각의 메이저-마이너 시퀀스 번호들을 상기 제2 복수의 블록세트들의 각각의 블록세트에 할당하는 단계 - 상기 각각의 메이저-마이너 시퀀스 번호들은 상기 제1 복수의 블록세트들 중 상기 가장 최근에 닫힌 블록세트에 할당된 상기 이전 메이저 시퀀스 번호 및 상기 제2 복수의 블록세트들에서 가장 최근에 닫힌 블록세트로부터 증분된 각각의 마이너 시퀀스 번호를 포함함 -;
    상기 제2 복수의 블록세트들 각각에 각각의 간접 참조 저널을 기입하는 단계 - 상기 각각의 간접 참조 저널은 상기 각각의 블록세트에 기입된 상기 데이터에 대응하고 상기 각각의 블록세트에 할당된 상기 각각의 메이저-마이너 시퀀스 번호들과 관련됨 -; 및
    먼저 각각의 메이저 시퀀스 번호들에 따라 그리고 다음으로 각각의 마이너 시퀀스 번호들에 따라 순서화된 상기 제1 및 제2 복수의 블록세트들로부터 상기 간접 참조 저널들을 리플레이함으로써 상기 저장 장치의 메모리에 간접 참조 테이블을 구축하는 단계를 포함하는, 방법.
  2. 제1항에 있어서, 상기 간접 참조 테이블을 구축하는 단계는:
    각각의 메이저 시퀀스 번호들에 따라 상기 제1 복수의 블록세트들을 순서화하는 단계;
    각각의 메이저 시퀀스 번호들에 따라 상기 제2 복수의 블록세트들을 순서화하는 단계; 및
    각각의 마이너 시퀀스 번호들에 따라 동일한 메이저 시퀀스 번호를 갖는 상기 제2 복수의 블록세트들의 블록세트들을 순서화하는 단계를 추가로 포함하는, 방법.
  3. 제2항에 있어서, 상기 간접 참조 테이블을 구축하는 단계는:
    리플레이된 블록세트의 메이저 시퀀스 번호가 상기 순서화된 제2 복수의 블록세트들에서 가장 오래된 메이저 시퀀스 번호와 일치할 때까지 상기 순서화된 제1 복수의 블록세트들의 각각의 블록세트로부터 상기 간접 참조 저널들을 리플레이하는 단계; 및
    상기 가장 오래된 메이저 시퀀스 번호와 일치하는 메이저 시퀀스 번호를 갖는 모든 블록세트들이 리플레이될 때까지 상기 순서화된 제2 복수의 블록세트들의 각각의 블록세트로부터 상기 간접 참조 저널들을 리플레이하는 단계를 추가로 포함하는, 방법.
  4. 제1항에 있어서, 상기 간접 참조 테이블을 구축하는 단계는:
    상기 제1 복수의 블록세트들 및 상기 제2 복수의 블록세트들을 제3 복수의 블록세트들로 결합하는 단계;
    각각의 메이저 시퀀스 번호들에 따라 상기 제3 복수의 블록세트들을 순서화하는 단계;
    각각의 마이너 시퀀스 번호들에 따라 동일한 메이저 시퀀스 번호를 갖는 상기 제2 복수의 블록세트들의 블록세트들을 순서화하는 단계; 및
    상기 순서화된 제3 복수의 블록세트들의 각각의 블록세트로부터 상기 간접 참조 저널들을 리플레이하는 단계를 추가로 포함하는, 방법.
  5. 제1항에 있어서,
    상기 일차 스트림과 동시에 동작하는 제2 일차 스트림에서, 데이터를 상기 저장 장치의 제3 복수의 블록세트들에 기입하는 단계;
    각각의 메이저 시퀀스 번호를 상기 제3 복수의 블록세트들의 각각의 블록세트에 할당하는 단계 - 상기 각각의 메이저 시퀀스 번호는 상기 제1 또는 제3 복수의 블록세트들 중 가장 최근에 닫힌 블록세트에 할당된 이전 메이저 시퀀스 번호로부터 증분됨 -; 및
    상기 제3 복수의 블록세트들 각각에 각각의 간접 참조 저널을 기입하는 단계를 추가로 포함하는, 방법.
  6. 제5항에 있어서, 상기 메이저-마이너 시퀀스 번호들은 상기 제1 또는 제3 복수의 블록세트들 중 상기 가장 최근에 닫힌 블록세트에 할당된 상기 이전 메이저 시퀀스 번호를 포함하는, 방법.
  7. 제5항에 있어서, 상기 메이저-마이너 시퀀스 번호들은 상기 제1 복수의 블록세트들 중 상기 가장 최근에 닫힌 블록세트와 상기 제3 복수의 블록세트들 중 상기 가장 최근에 닫힌 블록세트 중에 더 오래된 블록세트에 할당된 상기 이전 메이저 시퀀스 번호를 포함하는, 방법.
  8. 제5항에 있어서, 상기 일차 스트림은 호스트 스트림에 대응하고, 상기 제2 일차 스트림은 제2 호스트 스트림에 대응하고, 상기 이차 스트림은 가비지 수집 스트림에 대응하는, 방법.
  9. 제1항에 있어서, 상기 일차 스트림은 호스트 스트림에 대응하고, 상기 이차 스트림은 가비지 수집 스트림에 대응하는, 방법.
  10. 제9항에 있어서, 상기 가비지 수집 스트림은 상기 제2 복수의 블록세트들에 대해, 상기 할당된 메이저-마이너 시퀀스 번호들의 상기 메이저 시퀀스 번호보다 작은 각각의 메이저 시퀀스 번호들을 갖는 블록세트들을 선택하는, 방법.
  11. 제1항에 있어서, 상기 간접 참조 테이블을 구축하는 단계는 상기 저장 장치를 부팅하는 것에 응답하여 수행되는, 방법.
  12. 플래시 저장 시스템으로서,
    메모리;
    복수의 플래시 메모리 장치들; 및
    제어기를 포함하고, 상기 제어기는:
    호스트 스트림에서, 데이터를 상기 플래시 저장 시스템의 제1 복수의 블록세트들에 기입하고;
    각각의 메이저 시퀀스 번호를 상기 제1 복수의 블록세트들의 각각의 블록세트에 할당하고 - 상기 각각의 메이저 시퀀스 번호는 상기 제1 복수의 블록세트들 중 가장 최근에 닫힌 블록세트에 할당된 이전 메이저 시퀀스 번호로부터 증분됨 -;
    상기 제1 복수의 블록세트들 각각에 각각의 간접 참조 저널을 기입하고 - 상기 각각의 간접 참조 저널은 상기 각각의 블록세트에 기입된 상기 데이터에 대응하고 및 상기 각각의 블록세트에 할당된 상기 각각의 메이저 시퀀스 번호와 관련됨 -;
    상기 호스트 스트림과 동시에 동작하는 가비지 수집 스트림에서, 데이터를 상기 플래시 저장 시스템의 제2 복수의 블록세트들에 기입하고;
    각각의 메이저-마이너 시퀀스 번호들을 상기 제2 복수의 블록세트들의 각각의 블록세트에 할당하고 - 상기 각각의 메이저-마이너 시퀀스 번호들은 상기 제1 복수의 블록세트들 중 상기 가장 최근에 닫힌 블록세트에 할당된 상기 이전 메이저 시퀀스 번호 및 상기 제2 복수의 블록세트들에서 가장 최근에 닫힌 블록세트로부터 증분된 각각의 마이너 시퀀스 번호를 포함함 -;
    상기 제2 복수의 블록세트들 각각에 각각의 간접 참조 저널을 기입하고 - 상기 각각의 간접 참조 저널은 상기 각각의 블록세트에 기입된 상기 데이터에 대응하고 및 상기 각각의 블록세트에 할당된 상기 각각의 메이저-마이너 시퀀스 번호들과 관련됨 -;
    먼저 각각의 메이저 시퀀스 번호들에 따라 그리고 다음으로 각각의 마이너 시퀀스 번호들에 따라 순서화된 상기 제1 및 제2 복수의 블록세트들로부터 상기 간접 참조 저널들을 리플레이함으로써 상기 메모리에 간접 참조 테이블을 구축하도록 구성되는, 플래시 저장 시스템.
  13. 제12항에 있어서, 상기 제어기는:
    각각의 메이저 시퀀스 번호들에 따라 상기 제1 복수의 블록세트들을 순서화하고;
    각각의 메이저 시퀀스 번호들에 따라 상기 제2 복수의 블록세트들을 순서화하고;
    각각의 마이너 시퀀스 번호들에 따라 동일한 메이저 시퀀스 번호를 갖는 상기 제2 복수의 블록세트들의 블록세트들을 순서화하고;
    리플레이된 블록세트의 메이저 시퀀스 번호가 상기 순서화된 제2 복수의 블록세트들에서 가장 오래된 메이저 시퀀스 번호와 일치할 때까지 상기 순서화된 제1 복수의 블록세트들의 각각의 블록세트로부터 상기 간접 참조 저널들을 리플레이하고;
    상기 가장 오래된 메이저 시퀀스 번호와 일치하는 메이저 시퀀스 번호를 갖는 모든 블록세트들이 리플레이될 때까지 상기 순서화된 제2 복수의 블록세트들의 각각의 블록세트로부터 상기 간접 참조 저널들을 리플레이하도록 추가로 구성되는, 플래시 저장 시스템.
  14. 제12항에 있어서, 상기 제어기는:
    상기 제1 복수의 블록세트들 및 상기 제2 복수의 블록세트들을 제3 복수의 블록세트들로 결합하고;
    각각의 메이저 시퀀스 번호들에 따라 상기 제3 복수의 블록세트들을 순서화하고;
    각각의 마이너 시퀀스 번호들에 따라 동일한 메이저 시퀀스 번호를 갖는 상기 제2 복수의 블록세트들의 블록세트들을 순서화하고;
    상기 순서화된 제3 복수의 블록세트들의 각각의 블록세트로부터 상기 간접 참조 저널들을 리플레이하도록 추가로 구성되는, 플래시 저장 시스템.
  15. 제12항에 있어서, 상기 제어기는:
    상기 호스트 스트림과 동시에 동작하는 제2 호스트 스트림에서, 데이터를 상기 플래시 저장 시스템의 제3 복수의 블록세트들에 기입하고;
    각각의 메이저 시퀀스 번호를 상기 제3 복수의 블록세트들의 각각의 블록세트에 할당하고 - 상기 각각의 메이저 시퀀스 번호는 상기 제1 또는 제3 복수의 블록세트들 중 가장 최근에 닫힌 블록세트에 할당된 이전 메이저 시퀀스 번호로부터 증분됨 -;
    상기 제3 복수의 블록세트들 각각에 각각의 간접 참조 저널을 기입하도록 추가로 구성되는, 플래시 저장 시스템.
  16. 제12항에 있어서, 상기 간접 참조 테이블을 구축하는 것은 상기 저장 장치를 부팅하는 것에 응답하여 수행되는, 플래시 저장 시스템.
  17. 실행 가능 명령어들로 인코딩된 머신 판독 가능 매체로서, 상기 명령어들은, 프로세서에 의해 실행될 때, 상기 프로세서로 하여금 동작들을 수행하게 하고, 상기 동작들은:
    일차 스트림에서, 데이터를 저장 장치의 제1 복수의 블록세트들에 기입하는 것;
    각각의 메이저 시퀀스 번호를 상기 제1 복수의 블록세트들의 각각의 블록세트에 할당하는 것 - 상기 각각의 메이저 시퀀스 번호는 상기 제1 복수의 블록세트들 중 가장 최근에 닫힌 블록세트에 할당된 이전 메이저 시퀀스 번호로부터 증분됨 -;
    상기 제1 복수의 블록세트들 각각에 각각의 간접 참조 저널을 기입하는 것 - 상기 각각의 간접 참조 저널은 상기 각각의 블록세트에 기입된 상기 데이터에 대응하고 및 상기 각각의 블록세트에 할당된 상기 각각의 메이저 시퀀스 번호와 관련됨 -;
    상기 일차 스트림과 동시에 동작하는 이차 스트림에서, 데이터를 상기 저장 장치의 제2 복수의 블록세트들에 기입하는 것;
    각각의 메이저-마이너 시퀀스 번호들을 상기 제2 복수의 블록세트들의 각각의 블록세트에 할당하는 것 - 상기 각각의 메이저-마이너 시퀀스 번호들은 상기 제1 복수의 블록세트들 중 상기 가장 최근에 닫힌 블록세트에 할당된 상기 이전 메이저 시퀀스 번호 및 상기 제2 복수의 블록세트들에서 가장 최근에 닫힌 블록세트로부터 증분된 각각의 마이너 시퀀스 번호를 포함함 -;
    상기 제2 복수의 블록세트들 각각에 각각의 간접 참조 저널을 기입하는 것 - 상기 각각의 간접 참조 저널은 상기 각각의 블록세트에 기입된 상기 데이터에 대응하고 및 상기 각각의 블록세트에 할당된 상기 각각의 메이저-마이너 시퀀스 번호들과 관련됨 -; 및
    먼저 각각의 메이저 시퀀스 번호들에 따라 그리고 다음으로 각각의 마이너 시퀀스 번호들에 따라 순서화된 상기 제1 및 제2 복수의 블록세트들로부터 상기 간접 참조 저널들을 리플레이함으로써 상기 저장 장치의 메모리에 간접 참조 테이블을 구축하는 것을 포함하는, 머신 판독 가능 매체.
  18. 제17항에 있어서, 상기 동작들은:
    상기 일차 스트림과 동시에 동작하는 제2 일차 스트림에서, 데이터를 상기 저장 장치의 제3 복수의 블록세트들에 기입하는 것;
    각각의 메이저 시퀀스 번호를 상기 제3 복수의 블록세트들의 각각의 블록세트에 할당하는 것 - 상기 각각의 메이저 시퀀스 번호는 상기 제1 또는 제3 복수의 블록세트들 중 가장 최근에 닫힌 블록세트에 할당된 이전 메이저 시퀀스 번호로부터 증분됨 -; 및
    상기 제3 복수의 블록세트들 각각에 각각의 간접 참조 저널을 기입하는 것을 추가로 포함하는, 머신 판독 가능 매체.
  19. 제18항에 있어서, 상기 메이저-마이너 시퀀스 번호들은 상기 제1 복수의 블록세트들 중 상기 가장 최근에 닫힌 블록세트와 상기 제3 복수의 블록세트들 중 상기 가장 최근에 닫힌 블록세트 중에 더 오래된 블록세트에 할당된 상기 이전 메이저 시퀀스 번호를 포함하는, 머신 판독 가능 매체.
  20. 제18항에 있어서, 상기 일차 스트림은 호스트 스트림에 대응하고, 상기 제2 일차 스트림은 제2 호스트 스트림에 대응하고, 상기 이차 스트림은 가비지 수집 스트림에 대응하는, 머신 판독 가능 매체.
KR1020170077449A 2016-07-27 2017-06-19 다중 스트림 저널 리플레이 KR101979088B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/221,547 US9946489B2 (en) 2016-07-27 2016-07-27 Multi-stream journaled replay
US15/221,547 2016-07-27

Publications (2)

Publication Number Publication Date
KR20180012691A true KR20180012691A (ko) 2018-02-06
KR101979088B1 KR101979088B1 (ko) 2019-08-28

Family

ID=60951089

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170077449A KR101979088B1 (ko) 2016-07-27 2017-06-19 다중 스트림 저널 리플레이

Country Status (4)

Country Link
US (3) US9946489B2 (ko)
KR (1) KR101979088B1 (ko)
CN (1) CN107665156B (ko)
DE (1) DE102017112489B4 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111338975A (zh) * 2018-12-19 2020-06-26 北京忆恒创源科技有限公司 面向多流的垃圾回收方法及其存储设备
KR20210012085A (ko) 2019-07-23 2021-02-03 삼성전자주식회사 저널 리플레이를 개선하기 위한 스토리지 장치, 그것의 동작 방법, 및 스토리지 장치를 포함하는 전자 장치
US11467980B2 (en) * 2020-01-10 2022-10-11 Micron Technology, Inc. Performing a media management operation based on a sequence identifier for a block
US11620234B2 (en) 2020-06-29 2023-04-04 Western Digital Technologies, Inc. Operation-deterministic write operations for data recovery and integrity checks
KR20220168510A (ko) * 2021-06-16 2022-12-23 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR930008656B1 (ko) * 1991-07-19 1993-09-11 삼성전자 주식회사 노이즈가 억제되는 데이타 출력 버퍼
KR20060051233A (ko) * 2004-11-02 2006-05-19 마이크로소프트 코포레이션 다중 동기화된 데이터 스트림들에 대한 데이터베이스 검색속도를 증진하기 위한 시스템 및 방법
JP2009110548A (ja) * 2004-12-16 2009-05-21 Sandisk Corp 不揮発性メモリおよびマルチストリーム更新追跡を伴う方法
JP5887418B2 (ja) * 2012-09-14 2016-03-16 株式会社日立製作所 ストリームデータ多重処理方法

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6229737B1 (en) * 1996-12-12 2001-05-08 Ericsson Inc. Method and apparatus for initializing semiconductor memory
US6378035B1 (en) * 1999-04-06 2002-04-23 Microsoft Corporation Streaming information appliance with buffer read and write synchronization
US6535920B1 (en) * 1999-04-06 2003-03-18 Microsoft Corporation Analyzing, indexing and seeking of streaming information
US6820144B2 (en) * 1999-04-06 2004-11-16 Microsoft Corporation Data format for a streaming information appliance
US7085842B2 (en) * 2001-02-12 2006-08-01 Open Text Corporation Line navigation conferencing system
US7065696B1 (en) * 2003-04-11 2006-06-20 Broadlogic Network Technologies Inc. Method and system for providing high-speed forward error correction for multi-stream data
US7386655B2 (en) * 2004-12-16 2008-06-10 Sandisk Corporation Non-volatile memory and method with improved indexing for scratch pad and update blocks
US7594087B2 (en) * 2006-01-19 2009-09-22 Sigmatel, Inc. System and method for writing data to and erasing data from non-volatile memory
ATE456432T1 (de) 2006-09-05 2010-02-15 Senson Invest Ltd Tragbares elektrowerkzeug
US8151060B2 (en) 2006-11-28 2012-04-03 Hitachi, Ltd. Semiconductor memory system having a snapshot function
US8290899B2 (en) * 2007-03-28 2012-10-16 Netapp, Inc. Group stamping style asynchronous replication utilizing a loosely-accurate global clock
WO2009076723A1 (en) * 2007-12-19 2009-06-25 Colin Simon Device and method for synchronisation of digital video and audio streams to media presentation devices
US7941692B2 (en) 2007-12-31 2011-05-10 Intel Corporation NAND power fail recovery
US7979626B2 (en) * 2008-05-13 2011-07-12 Microsoft Corporation Flash recovery employing transaction log
US8200922B2 (en) 2008-12-17 2012-06-12 Netapp, Inc. Storage system snapshot assisted by SSD technology
US8949517B2 (en) * 2011-10-05 2015-02-03 Lsi Corporation Self-journaling and hierarchical consistency for non-volatile storage
US8977769B2 (en) * 2012-01-17 2015-03-10 Harman International Industries, Incorporated System for managing lossless failover in an audio-bridging (AVB) network
US9202577B2 (en) 2012-03-30 2015-12-01 Intel Corporation Solid state drive management in power loss recovery
US9037820B2 (en) 2012-06-29 2015-05-19 Intel Corporation Optimized context drop for a solid state drive (SSD)
US9690642B2 (en) 2012-12-18 2017-06-27 Western Digital Technologies, Inc. Salvaging event trace information in power loss interruption scenarios
US9183142B2 (en) 2013-03-15 2015-11-10 Avago Technologies General Ip (Singapore) Pte. Ltd. Reducing flash memory write amplification and latency
WO2014158155A1 (en) * 2013-03-28 2014-10-02 Hewlett-Packard Development Company, L.P. Coordinating replication of data stored in a non-volatile memory-based system
CN103298013B (zh) * 2013-06-24 2016-08-10 京信通信系统(中国)有限公司 一种进行业务恢复的方法及装置
US20150127891A1 (en) * 2013-11-04 2015-05-07 Falconstor, Inc. Write performance preservation with snapshots
US9720618B1 (en) * 2013-12-16 2017-08-01 EMC IP Holding Company LLC Maintaining backup snapshots using continuous replication from multiple sources
US9588847B1 (en) * 2014-03-25 2017-03-07 EMC IP Holding Company LLC Recovering corrupt virtual machine disks
CN104035729B (zh) * 2014-05-22 2017-02-15 中国科学院计算技术研究所 一种日志映射的块设备精简配置方法
US9804934B1 (en) * 2014-12-30 2017-10-31 EMC IP Holding Company LLC Production recovery using a point in time snapshot
US10048876B2 (en) * 2015-09-10 2018-08-14 Western Digital Technologies, Inc. Method for providing nonvolatile storage write bandwidth using a caching namespace
US10108350B2 (en) * 2015-09-10 2018-10-23 Western Digital Technologies, Inc. Method for providing nonvolatile storage write bandwidth using a caching namespace
CN105389230B (zh) * 2015-10-21 2018-06-22 上海爱数信息技术股份有限公司 一种结合快照技术的持续数据保护系统及方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR930008656B1 (ko) * 1991-07-19 1993-09-11 삼성전자 주식회사 노이즈가 억제되는 데이타 출력 버퍼
KR20060051233A (ko) * 2004-11-02 2006-05-19 마이크로소프트 코포레이션 다중 동기화된 데이터 스트림들에 대한 데이터베이스 검색속도를 증진하기 위한 시스템 및 방법
JP2009110548A (ja) * 2004-12-16 2009-05-21 Sandisk Corp 不揮発性メモリおよびマルチストリーム更新追跡を伴う方法
JP5887418B2 (ja) * 2012-09-14 2016-03-16 株式会社日立製作所 ストリームデータ多重処理方法

Also Published As

Publication number Publication date
US20180032277A1 (en) 2018-02-01
DE102017112489B4 (de) 2023-10-12
US9946489B2 (en) 2018-04-17
US10635341B2 (en) 2020-04-28
KR101979088B1 (ko) 2019-08-28
DE102017112489A1 (de) 2018-02-01
US20180232176A1 (en) 2018-08-16
US11182091B2 (en) 2021-11-23
CN107665156A (zh) 2018-02-06
US20200218463A1 (en) 2020-07-09
CN107665156B (zh) 2021-07-06

Similar Documents

Publication Publication Date Title
US11182091B2 (en) Multi-stream journaled replay
US8151082B2 (en) Apparatus, system, and method for converting a storage request into an append data storage command
US9600184B2 (en) Apparatus, system, and method for coordinating storage requests in a multi-processor/multi-thread environment
US8195912B2 (en) Apparatus, system, and method for efficient mapping of virtual and physical addresses
US8909986B2 (en) Data storing method for solid state drive to preserve data integrity after power failure
US8161353B2 (en) Apparatus, system, and method for validating that a correct data segment is read from a data storage device
EP1548599A2 (en) Faster write operations to nonvolatile memory by manipulation of frequently accessed sectors
CN108132890B (zh) 存储芯片的垃圾回收方法、装置、设备及存储介质
CN112631950B (zh) 一种l2p表的保存方法、系统、设备以及介质
US20180189144A1 (en) Apparatus and method for memory storage to protect data-loss after power loss
US20190087122A1 (en) Storage system
KR20010037155A (ko) 플래시 파일 시스템
US11500775B2 (en) File system management in memory device
US7996598B2 (en) Memory management module
CN108595127B (zh) 一种划分sas端口分区的方法及装置
KR101663425B1 (ko) 저장장치의 성능 및 내구성 향상을 위해 다중 오픈 블록을 관리하는 메모리 저장 장치 및 방법
KR101978515B1 (ko) 데이터 저장 장치 및 그 동작 방법

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant