KR101769448B1 - 주석이 달린 극소 기록 작동을 수행하기 위한 방법 및 장치 - Google Patents

주석이 달린 극소 기록 작동을 수행하기 위한 방법 및 장치 Download PDF

Info

Publication number
KR101769448B1
KR101769448B1 KR1020167005673A KR20167005673A KR101769448B1 KR 101769448 B1 KR101769448 B1 KR 101769448B1 KR 1020167005673 A KR1020167005673 A KR 1020167005673A KR 20167005673 A KR20167005673 A KR 20167005673A KR 101769448 B1 KR101769448 B1 KR 101769448B1
Authority
KR
South Korea
Prior art keywords
data
storage
metadata
application
address
Prior art date
Application number
KR1020167005673A
Other languages
English (en)
Other versions
KR20160038053A (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 KR20160038053A publication Critical patent/KR20160038053A/ko
Application granted granted Critical
Publication of KR101769448B1 publication Critical patent/KR101769448B1/ko

Links

Images

Classifications

    • 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/0658Controller construction arrangements
    • 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/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1448Management of the data involved in backup or backup restore
    • G06F11/1451Management of the data involved in backup or backup restore by selection of backup contents
    • 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/1474Saving, restoring, recovering or retrying in transactions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/11File system administration, e.g. details of archiving or snapshots
    • G06F16/113Details of archiving
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • G06F16/1824Distributed file systems implemented using Network-attached Storage [NAS] architecture
    • 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/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • 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/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time

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)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Quality & Reliability (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Retry When Errors Occur (AREA)

Abstract

데이터를 하나 이상의 기록 매체에 극소로 기록하는 것에 관한 기법들이 개시된다. 일 실시예에서, 데이터의 세트에 대한 극소 기록을 수행하라는 요청이 수신된다. 요청에 응하여, 데이터의 세트는 복수의 저장부 중 적어도 하나 내의 전용 위치에 메타데이터를 저장하는 것을 포함하여 복수의 저장부에 걸쳐 기록된다. 메타데이터는 기록이 성공적으로 완료되었는지 여부를 판단하는데 사용 가능하다. 일부 실시예들에서, 요청은 복수의 저장부의 어드레스 영역이 할당되었던 애플리케이션으로부터 수신된다. 그러한 일 실시예에서, 어드레스 영역은 데이터를 저장하기 위한 애플리케이션에 액세스 가능하고, 전용 위치는 어드레스 영역의 외부에 상주한다. 일 실시예에서, 메타데이터는 데이터의 세트가 기록되었던 어드레스 영역 및 순차 번호를 지정한다.

Description

주석이 달린 극소 기록 작동을 수행하기 위한 방법 및 장치{METHOD AND APPARATUS FOR PERFORMING ANNOTATED ATOMIC WRITE OPERATIONS}
본 발명은 일반적으로 물리적 기록 매체 상에 데이터를 저장하는 것에 관한 것으로, 보다 상세하게는 데이터를 극소로 저장하는 것에 관한 것이다.
일부 경우들에서, 저장 디바이스에 데이터의 기록이 방해되어 데이터가 저장 디바이스에 성공적으로 완전히 기록되지 않을 수 있다. 이러한 형태의 실패는 예를 들어, 저장 디바이스의 전력 손실, 저장 디바이스의 기계적 고장, 작동 시스템 크래시(crash), 저장 디바이스를 컴퓨터 시스템에 결합하는 단절된 연결, 네트워크 부착 저장(NAS) 또는 저장 영역 네트워크(SAN)의 네트워크 연결성의 손실 등에 응하여 일어날 수 있다.
다양한 시도가 저장 실패를 다루기 위해 행해졌다. 예를 들어, 일부 저장 디바이스는 저장 디바이스에 기록되고 있는 동안 데이터를 저장하기 위해 배터리 백업형 캐시를 사용한다. 전력 고장일 경우에, 캐싱된 데이터는 전력이 복구되면, 기록을 완료하는데 사용될 수 있다. 다른 예로서, 일부 파일 시스템은 저장 디바이스에 행해지는 변경들을 추적하도록 저널(journal)을 유지할 수 있다. 고장일 경우에, 저널은 드라이브를 이전에 유효한 상태로 복구하기 위해 검토될 수 있다. 그러한 파일 시스템의 예로는 새로운 기술 파일 시스템(NTFS), 저널 파일 시스템(JFS), 제3 확장 파일 시스템(ext3) 등이 있다. (클라우드 컴퓨팅 환경에 분포된 애플리케이션들과 같은) 일부 애플리케이션은 데이터가 성공적으로 저장소에 넘겨졌다는 것이 검증될 때까지, 데이터를 유지할 수 있다.
본 발명은 데이터가 다수의 저장 디바이스에 걸쳐 극소로 기록되는 실시예들을 설명한다. 다양한 실시예들에서, 주석이 다수의 저장 디바이스에 걸친 극소 기록의 수행과 함께 저장된다. 주석은 저장 디바이스들 중 적어도 하나 내의 전용 위치에 저장될 수 있고 극소 기록이 성공적으로 완료되었는지 여부를 판단하는데 사용 가능한 메타데이터를 포함한다. 예를 들어, 일 실시예에서, 주석은 저장 디바이스의 핫 스왑(hot swap) 후에 데이터의 일부가 저장 디바이스들 중 하나에 성공적으로 기록되지 않았던 것을 식별하는데 사용될 수 있다. 일부 실시예들에서, 주석은 저장 디바이스들을 이전의 유효한 상태로 복구하도록 극소 기록을 롤백(rollback)하는데 추가로 사용 가능하다.
일 실시예에서, 데이터의 세트에 대한 극소 기록 작동을 수행하라는 요청을 수신하는 단계를 포함하는 방법이 개시된다. 방법은 요청에 응하여, 복수의 저장부 중 적어도 하나 내의 전용 위치에 메타데이터를 저장하는 것을 포함하여 복수의 저장부에 걸쳐 데이터의 세트를 기록하는 단계를 더 포함한다. 메타데이터는 기록이 성공적으로 완료되었는지 여부를 판단하는데 사용 가능하다.
다른 실시예에서, 벡터 저장 모듈 및 롤백 모듈을 포함하는 장치가 개시된다. 벡터 저장 모듈은 데이터의 세트와 관계없이 메타데이터를 저장하는 것을 포함하는 복수의 저장 디바이스 상의 데이터의 세트에 대한 저장 작동들의 그룹을 수행하도록 구성된다. 그러한 일 실시예에서, 메타데이터는 저장 작동들의 그룹을 나타낸다. 롤백 모듈은 저장된 메타데이터에 기반하여 저장 작동들의 그룹을 롤백하도록 구성된다.
또 다른 실시예에서, 저장 모듈 및 오류 검출 모듈을 포함하는 장치가 개시된다. 저장 모듈은 저장 디바이스들의 그룹과 연관되는 어드레스 영역에 데이터의 세트에 대한 극소 기록을 시도하도록 구성된다. 저장 모듈은 또한 메타데이터가 데이터의 세트를 기록하는 것을 나타내도록 어드레스 영역의 외부에 있는 어드레스를 갖는 저장 블록에 메타데이터를 저장하도록 구성된다. 오류 검출 모듈은 메타데이터에 기반하여, 극소 기록이 성공적으로 완료되었는지 여부를 판단하도록 구성된다.
또 다른 실시예에서, 제1 수단 및 제2 수단을 포함하는 장치가 개시된다. 제1 수단은 로그 구조체를 사용하여 데이터를 저장하기 위한 것이며, 제1 수단은 복수의 저장 블록을 포함한다. 제2 수단은 복수의 저장 블록의 서브세트에 데이터를 극소로 기록하고 서브세트 내에 있지 않는 저장 블록에 메타데이터를 기록하기 위한 것이며, 메타데이터는 데이터의 기록을 롤백하는데 사용 가능하다.
다른 실시예에서, 방법이 개시된다. 방법은 극소 기록 작동에 대한 요청을 발행하는 애플리케이션을 포함한다. 그러한 일 실시예에서, 극소 기록 작동은 복수의 저장부에 걸쳐 데이터의 세트를 기록하는 단계 및 복수의 저장부 중 적어도 하나 내의 전용 위치에 메타데이터를 기록하는 단계를 포함한다. 방법은 메타데이터를 판독하려는 시도에 기반하여, 극소 기록 작동이 완료되었는지 여부를 판단하는 애플리케이션을 더 포함한다.
도 1은 데이터를 다수의 저장 디바이스에 극소로 기록하도록 구성되는 컴퓨팅 시스템의 일 실시예를 도시하는 블록도이다.
도 2는 극소 기록 작동들을 수행하도록 실행 가능한 저장 디바이스에 대한 드라이버의 일 실시예를 도시하는 블록도이다.
도 3a 내지 도 3c는 논리적 및 물리적 어드레스 공간들의 실시예들을 도시하는 블록도들이다.
도 4a 및 도 4b는 극소 저장을 용이하게 하는데 사용 가능한 패킷들의 실시예들을 도시하는 블록도들이다.
도 5는 방법의 일 실시예를 도시하는 흐름도이다.
도 6a 및 도 6b는 모듈들을 포함하는 장치들의 실시예들을 도시하는 블록도들이다.
도 7a는 저장 수단 및 극소 기록 수단을 갖는 장치의 다른 실시예를 도시하는 블록도이다.
도 7b는 극소 기록 수단에 의해 구현되는 알고리즘의 일 실시예를 도시하는 흐름도이다.
도 8은 컴퓨팅 시스템을 포함하는 저장 시스템의 일 실시예를 도시하는 블록도이다.
본 발명은 "하나의 실시예" 또는 "일 실시예"에 대한 참조들을 포함한다. "하나의 실시예에서" 또는 "일 실시예에서"란 어구들의 출연들은 반드시 동일한 실시예를 언급하지 않는다. 특정 특징들, 구조체들, 또는 특성들은 본 발명과 일치하는 임의의 적절한 방식으로 결합될 수 있다.
본 발명은 또한 첨부 도면들을 포함하고 참조한다. 도면들에서, 유사한 기호들은 문맥이 달리 지시하지 않는다면, 통상적으로 유사한 구성 요소들을 나타낸다. 상세한 설명, 도면들 및 청구항들에서 설명되는 예시적인 실시예들은 제한하고자 하는 것은 아니다. 본 발명의 범위로부터 벗어나지 않는 범위 내에서 다른 실시예들이 활용될 수 있고, 다른 변경들이 이러한 예시적인 실시예들에 행해질 수 있다.
본 발명에서의 다양한 유닛, 회로 또는 다른 구성 요소가 태스크 또는 태스크들을 수행"하도록 구성되는" 것으로 설명되거나 청구될 수 있다. 그러한 맥락으로, "~하도록 구성되는"은 유닛들/회로들/구성 요소들이 그러한 태스크 또는 태스크들을 작동 동안 수행하는 구조체(예를 들어, 회로망)를 포함한다는 것을 나타냄으로써 구조체를 내포하기 위해 사용된다. 이와 같이, 유닛/회로/구성 요소는 지정된 유닛/회로/구성 요소가 현재 작동하지 않을(예를 들어, 작동 중이지 않을) 때에도, 태스크를 수행하도록 구성된다고 할 수 있다. "~하도록 구성되는" 표현과 함께 사용되는 유닛들/회로들/구성 요소들은 하드웨어―예를 들어, 회로들, 작동을 구현하도록 실행 가능한 프로그램 명령어들을 저장하는 메모리 등을 포함한다. 게다가, "~하도록 구성되는"은 문제가 되고 있는 태스크(들)을 수행할 수 있는 방식으로 작동하는 소프트웨어 및/또는 펌웨어(예를 들어, FPGA 또는 소프트웨어를 실행하는 범용 프로세서)에 의해 조작되는 포괄적 구조체(예를 들어, 포괄적 회로망)를 포함할 수 있다. 유닛/회로/구성 요소가 하나 이상의 태스크를 수행"하도록 구성된다"라고 서술하는 것은 유닛/회로/구성 요소에 대해 35 U.S.C. § 112, 제6 단락을 적용하지 않는 것으로 명확히 의도된다.
다양한 유닛, 회로 또는 다른 구성 요소는 "제1," "제2," 등이란 용어들을 사용하여 설명할 수 있다. 이러한 용어들은 (예를 들어, 공간적, 시간적, 논리적 등) 임의의 타입의 순서에 우선하고, 이를 나타내지 않는 명사들에 대한 형용 어구들로서 사용된다. 예를 들어, 다수의 저장 블록을 갖는 저장 디바이스에서, "제1" 및 "제2" 저장 블록들이란 용어들은 (예를 들어, 다른 저장 블록들 내에 포함되는 저장 블록들을 포함하여) 임의의 2개의 저장 블록을 지칭하는데 사용될 수 있다. 즉, "제1" 및 "제2" 저장 블록들은 저장 디바이스의 처음 2개의 저장 블록에 제한되지 않는다.
데이터의 극소 기록에 대한 다양한 실시예들을 본원에 설명한다. "극소"란 용어는 관련 분야에서 "극소"란 용어의 평범하고 용인되는 의미를 갖고, 작동이 완료 이전에 실패하면, 작동이 어떤 영향도 미치지 않는 작동의 수행을 지칭한다. 따라서, 극소 기록은 기록 작동이 완료 이전에 실패하면(예를 들어, 전력 고장이 모든 데이터가 기록되기 이전에 발생하면), 기록 작동이 저장 디바이스의 상태를 변경하지 않도록(즉, 저장 디바이스 상의 이미 저장된 데이터에 영향을 주지 않도록) 기록 작동이 수행되는 것이다. "극소"란 용어는 작동들 중 하나의 실패가 그룹이 어떤 영향도 미치지 않게 하는 작동들의 그룹을 지칭할 수도 있다. 이하에 논의될 것인 바와 같이, 데이터의 세트는 기록 작동들의 그룹(예를 들어, 각각의 저장 디바이스에 데이터의 세트의 일부의 각각의 기록 작동)을 수행함으로써 다수의 저장 디바이스에 걸쳐 기록될 수 있다("벡터 기록"이라함). 따라서, 그러한 기록이 극소로 수행될 때, 기록 작동들 중 하나가 실패하면(예를 들어, 전력 손실이 저장 디바이스들 중 하나에서 발생하면), 기록 작동들의 그룹 중 어떤 것도 영향을 미치지 않는다. 일부 경우에, 하나 이상의 작동이 실패한 극소 기록의 임의의 영향을 제거하도록 수행될 수 있다. 이러한 복원 작동들은 일반적으로 "롤백(rollback)"이라 할 수 있다. 예를 들어, 데이터가 다수의 디바이스에 걸쳐 극소로 기록되고 있을 때, 디바이스들 중 특정한 것들에의 기록 작동들은 성공적으로 완료되었을 수 있는 반면에, 다른 기록 작동들은 실패했을 수 있다. 그러한 경우에, 성공적인 기록 작동들의 데이터는 유효하지 않은 것으로 표시될 수 있다. (대안적으로, 후술하는 일부 실시예들에서, 극소 기록이 실패하더라도 부분적으로 기록된 데이터가 저장 디바이스 상에 남아 있도록 하기 위해 옵션이 주어질 수 있다.)
본 발명은 처음에 도 1을 참조하여, 다수의 저장 디바이스에 걸쳐 데이터를 극소로 기록하도록 구성되는 컴퓨팅 시스템을 설명한다. 극소 기록 작동들을 용이하게 하는데 사용 가능한 드라이버를 도 2를 참조하여 설명한다. 이러한 설명을 용이하게 하기 위해, 저장 디바이스들과 연관되는 논리적 및 물리적 어드레스 공간들을 도 3a 내지 도 3c를 참조하여 설명한다. 극소 기록 작동들에서 사용 가능한 패킷의 실시예들을 도 4a 및 도 4b를 참조하여 설명한다. 극소 기록 작동들이 수행되는 실시예들을 도 5 내지 도 7b를 참조하여 보다 상세히 설명한다. 그러한 컴퓨팅 시스템을 포함하는 예시적인 저장 시스템을 마지막으로 도 8을 참조하여 설명한다.
이제 도 1을 참조하면, 컴퓨팅 시스템(100)의 블록도가 도시된다. 컴퓨팅 시스템(100)은 서버, 랩탑, 데스크탑, 모바일 디바이스 등과 같은 임의의 적절한 타입의 컴퓨팅 디바이스일 수 있다. 일부 실시예들에서, 컴퓨팅 시스템(100)은 함께 작동하는 다수의 컴퓨팅 디바이스를 포함할 수 있다. 예를 들어, 일 실시예에서, 컴퓨팅 시스템(100)은 도 8과 함께 이하에 논의되는 저장 시스템과 같은 다수의 클라이언트를 대신하여 데이터를 저장하도록 구성되는 데이터 센터에서 함께 결합되는 다수의 서버일 수 있다. 예시된 실시예에서, 컴퓨팅 시스템(100)은 상호 연결부(140)를 통하여 함께 결합되는 프로세서부(110), 랜덤 액세스 메모리(RAM)(120), 하나 이상의 저장 디바이스(130)를 포함한다. 도시된 바와 같이, RAM(120)은 프로세서부(110)에 의해 실행 가능한 하나 이상의 애플리케이션(122) 및 작동 시스템(OS)(124)에 대한 프로그램 명령어들을 포함할 수 있다. OS(124)는 저장 디바이스들(130)에 대한 드라이버(126)를 포함할 수 있으며, 저장 디바이스들(130)은 결국, 제어기(132) 및 하나 이상의 저장 뱅크(134)를 포함할 수 있다.
다양한 실시예들에서, 드라이버(126)는 다양한 기능성을 갖는 것으로 설명된다. 이러한 기능성은 소프트웨어, 하드웨어 또는 이들의 조합으로 구현될 수 있다. 또한, 그러한 기능성은 예를 들어, 일 실시예에서 애플리케이션(122) 같이-OS(124) 외부의 소프트웨어에 의해 구현될 수 있다. 다른 실시예에서, 이러한 기능성은 제어기(132)의 메모리 내에 저장되고 제어기(132)의 프로세서에 의해 실행되는 소프트웨어에 의해 구현될 수 있다. 또 다른 실시예에서, 제어기(132)는 드라이버(126)의 기능성을 구현하는 전용 회로망을 포함할 수 있다. 요컨대, OS(124) 내의 소프트웨어로 구현되는 것으로 드라이버(126)를 기술하는 것은 제한하는 것이 아니고, 오히려 예시적인 실시예를 기술하는 것으로 이해해야 한다.
저장 디바이스들(130)은 데이터가 기록될 수 있는 임의의 물리적 매체를 나타낸다. 본원에 사용되는, "기록된"이란 용어는 이후의 사용을 위해 일부 물리적 기록 매체에 하나 이상의 데이터값을 저장하거나, 기록하거나, 전송하는 전자 컴퓨팅 디바이스의 프로세스를 폭넓게 지칭한다. 따라서, "물리적 기록 매체"는 데이터가 전자 컴퓨팅 디바이스에 의해 기록될 수 있는 임의의 매체를 지칭하도록 본원에 사용된다. 또한, "저장" 및 "메모리"란 용어들은 "물리적 기록 매체"와 같은 것을 의미하도록 본원에 사용된다. 이러한 폭넓은 정의를 고려하면, 도 1에서 그리고 본 발명의 다른 곳에서 (RAM(120)을 지칭할 때) 지정 메모리 및 (저장 디바이스(130)를 지칭할 때) 저장소는 휘발성 및/또는 비휘발성 매체를 지칭할 수 있다. 그러한 매체는 "메모리"로 본원에 지칭될 수도 있고 그러한 매체의 부분들은 "블록들," "셀들," "저장 블록들," "메모리 블록들" 등으로 지칭될 수 있다. 집합적으로, 이러한 블록들의 그룹은 "저장 어레이," "메모리 어레이" 등으로 지칭될 수 있다. 본원에 사용되는 "고체 상태 저장 어레이"란 용어는 후술하는 다양한 형태의 매체와 같은 비휘발성 고체 상태 매체를 포함하는 저장 어레이를 지칭한다.
저장 디바이스(130)에서 데이터에 "액세스하는 것"에 대한 본 발명에서의 언급들은 데이터를 저장 디바이스(130)에 기록하는 것 그리고/또는 저장 디바이스(130)로부터 데이터를 판독하는 것뿐만 아니라, 트림(TRIM) 작동, 유지 액세스, 발견 액세스, 메모리 시맨틱스 하에서의 로딩 및 저장 작동 등을 포함하는 임의의 타입의 트랜잭션을 지칭한다. 또한, 앞서 언급된 "저장" 및 "메모리"의 폭넓은 정의들을 고려하면, 이러한 액세스들은 비휘발성 메모리 및/또는 휘발성 구성 요소들을 갖는 저장 디바이스에 적용 가능할 수 있다.
일부 실시예들에서, 저장 디바이스들(130)은 비휘발성 메모리를 포함하도록 구현될 수 있다. 따라서 그러한 일 실시예에서, 저장 뱅크들(134)은 하드 디스크 드라이브(예를 들어, 통합 구동 전자 공학(IDE) 드라이브, 소형 컴퓨터 시스템 인터페이스(SCSI) 드라이브, 직렬 부착 SCSI(SAS) 드라이브, 직렬 AT 부착(SATA) 드라이브 등), 테이프 드라이브, 기록 가능 광 드라이브(예를 들어, CD 드라이브, DVD 드라이브, 블루레이 드라이브 등) 등과 같은 비휘발성 저장 디바이스들을 포함할 수 있다.
일부 실시예들에서, 저장 디바이스들(130)은 비휘발성 고체 상태 메모리를 포함하도록 구현될 수 있다. 따라서 그러한 일 실시예에서, 저장 뱅크들(134)은 NAND 플래시 메모리, NOR 플래시 메모리, 나노 RAM("NRAM"), 자기 저항 RAM("MRAM"), 상 변화 RAM("PRAM"), 레이스트랙 메모리, 멤리스터(Memristor) 메모리, 나노결정 유선 기반 메모리, 실리콘-산화물 기반 10 나노미터 이하 프로세스 메모리, 그래핀(graphene) 메모리, 실리콘-산화물-질화물-산화물-실리콘("SONOS"), 저항성 랜덤 액세스 메모리("RRAM"), 프로그램 가능 금속화 셀("PMC"), 전도성 브리징 RAM("CBRAM") 등을 포함하지만, 이에 제한되지 않는 임의의 적절한 타입의 고체 상태 저장 매체를 포함할 수 있다. 일부 실시예들에서, 저장 뱅크들(134)은 다수의, 상이한 타입의 고체 상태 저장 매체를 포함할 수 있다.
다른 실시예들에서, 저장 디바이스들(130)은 휘발성 메모리를 포함하도록 구현될 수 있다. 저장 뱅크들(134)은 따라서 예를 들어, RAM, 동적 RAM(DRAM), 정적 RAM(SRAM), 동기 동적 RAM(SDRAM) 등을 포함하지만, 이에 제한되지 않는 임의의 적절한 휘발성 메모리에 상응할 수 있다. 프로세서부(110)와 관계없이 도시되지만, 일부 실시예들에서, 저장 디바이스(130)는 프로세서부(110) 내의 하나 이상의 캐시 레벨(예를 들어, L1, L2, L3 등)과 같은 프로세서부(110) 내의 메모리에 상응할 수 있다.
요컨대, 저장 디바이스들(130)과 관련된 다양한 기능성을 본원에 설명할 것이다. 그러한 기능성은 비휘발성 및 휘발성 형태 둘 다를 포함하는 임의의 적절한 형태의 메모리에 적용 가능할 수 있다. 따라서, 드라이버(126)의 특정 실시예들이 비휘발성 고체 상태 메모리 어레이들의 맥락 내에서 본원에 설명되지만, 드라이버(126)는 휘발성 메모리들 및 다른 타입들의 비휘발성 메모리들 특히, 복구 프로세스를 포함하는 비휘발성 메모리들과 같은 다른 기록 매체에 적용 가능할 수도 있다.
일 실시예에서, 제어기(132)는 저장 디바이스(130)의 작동을 관리하도록 구성된다. 따라서, 제어기(132)는 적절한 뱅크들(134)을 선택하는 것 그리고 그러한 뱅크들 내에 적절한 셀들 내의 데이터에 액세스하는 것을 포함하는 지정된 어드레스들(예를 들어, 이하에 논의되는 "물리적 어드레스들")에서의 판독 작동들의 수행을 용이하게 할 수 있다. 제어기(132)는 특정 셀들의 프로그래밍을 포함하는 기록 작동들의 수행을 용이하게 할 수 있다. 제어기(132)는 일 실시예에서, 이후의 재사용을 위해 셀들의 블록들을 소거하는 것과 같은 저장 디바이스(130)에의 이후의 기록들을 가능하게 하는 준비 작동들을 수행할 수도 있다. (셀들의 블록을 프로그래밍하고 소거하는 것의 사이클은 "PE 사이클"로 지칭될 수 있다) 일부 실시예들에서, 제어기(132)는 판독 및 기록 작동들을 병렬로 수행하기 위해 별도의 판독 및 기록 데이터 파이프라인들을 구현한다. 일 실시예에서, 제어기(132)는 또한 상호 연결부(140)를 통해 (이하에 논의되는) 드라이버(126)와 통신하도록 구성된다. 예를 들어, 일부 실시예들에서, 제어기(132)는 DMA 제어기에 의해 조정되는 직접적 메모리 액세스(DMA) 트랜잭션들을 통하여 판독 및 기록 작동들에 대한 정보를 전달한다. 따라서, 제어기(132)는 주변 구성 요소 상호 연결부(PCI), PCI 익스프레스(PCI-e), 직렬 고급 기술 부착부(직렬 ATA 또는 SATA), 병렬 ATA(PATA), 소형 컴퓨터 시스템 인터페이스(SCSI), IEEE 1394(파이어 와이어), 광섬유 채널, 범용 직렬 버스(USB) 등과 같은 임의의 적절한 상호 연결부 타입을 지원할 수 있다. 일부 실시예들에서, 제어기(132)는 오류 확인, 데이터 압축, 암호화 및 해독, 패킷 조립 및 분해 등과 같은 다른 작동들을 수행할 수도 있다.
다양한 실시예들에서, 저장 디바이스(130)는 로그 구조화된 저장소로서 조직화된다. 본원에 사용되는, "로그 구조체"란 용어는 첨부 지점이 데이터가 어디에 저장되는지를 판단하는데 사용되며; 첨부 지점이 데이터가 저장됨에 따라, "어드레스 공간"을 통해 순차적으로 전진되는 저장 매체 상의 데이터의 배열을 지칭한다. 로그 구조화된 저장소는 단순히 로그 구조체를 사용하여 조직화되는 저장 디바이스이다. 로그 구조체의 사용은 또한 저장 디바이스(130)가 이전의 상태(즉, "로그 체크포인트")로 복구되는 것을 가능하게 하기 위해 메타데이터가 데이터와 함께 저장되는 것을 내포한다. 그러한 복구는 예를 들어, 전력 손실일 경우에 크래시 복원을 용이하게 하고, 데이터 손상일 경우에 마지막 알려진 유효 상태를 복원하기 위해 수행될 수 있다. 본원에 사용되는, "어드레스 공간"이란 용어는 저장 디바이스 내의 데이터를 지정하는데 사용될 수 있는 어드레스 영역(즉, 하나 이상의 어드레스의 컬렉션)을 지칭한다. 후술할 것인 바와 같이, 로그 구조화된 저장소는 논리적 및 물리적 어드레스 공간 둘 다를 가질 수 있다. "논리적 어드레스 공간"이란 용어는 이러한 어드레스 공간이 데이터가 실제로 저장 디바이스(130)의 물리적 매체 상에서 어떻게 조직화되는지 또는 실제로 사용 중이거나, 보존되거나, 더 높은 레벨 프로세스에 할당되는 물리적 어드레스 위치들의 실제 수를 나타내지 않을 수 있더라도, 더 높은 레벨 프로세스들(예를 들어, 애플리케이션들(122) 및 OS(124))에 의해 감지되는 어드레스 공간을 지칭한다. 그에 반해서, "물리적 어드레스 공간"이란 용어는 더 낮은 레벨 프로세스들에 의해 사용되는 어드레스 공간을 지칭하고, 데이터가 저장 디바이스(130)의 물리적 매체 상에서 어떻게 조직화되는지 그리고 더 높은 레벨 프로세스에 의해 사용 중인 물리적 어드레스 위치들의 실제 수를 나타낼 수 있다. 논리적 및 물리적 어드레스 공간들의 실시예들은 각각 도 3a 및 도 3b와 함께 보다 상세히 논의된다. 로그 구조체의 일 실시예는 도 3c와 함께 논의된다.
다양한 실시예들에서, 로그 구조체를 사용하는 것은 데이터가 저장소에 기록되고, 변경되고, 재기록됨에 따라, 데이터의 세트의 다수의 인스턴스(instance)가 저장 디바이스(130)에 존재하는 것을 가능하게 할 수 있다. 물리적 어드레스 공간에서 데이터를 추적하는 것의 일부로서, 저장된 데이터의 더 오래된 인스턴스들(즉, 현재의 인스턴스가 아닌 그러한 인스턴스들)은 유효하지 않은 것으로 표시될 수 있다. 예를 들어, 일 실시예에서, 값이 업데이트되어야 할 때, 값은 (값이 이전에 저장되었던 위치보다는 오히려) 현재의 첨부 지점에 의해 지정되는 저장 블록에서 기록될 수 있다. 기록이 성공적으로 수행되는 것에 응하여, 그러한 값의 임의의 이전에 저장된 인스턴스들은 유효하지 않은 것으로 표시될 수 있다. 본원에 사용되는, "유효하지 않은"이란 용어는 (예를 들어, 데이터의 더 최근의 카피가 존재하므로) 시스템에 의해 더 이상 저장될 필요가 없는 데이터를 지칭한다. 마찬가지로, "무효화하는 것"이란 용어는 유효하지 않은 것으로 데이터를 표시하는 것(예를 들어, 데이터 구조체에 기록을 저장하는 것)을 지칭한다. 무효화하는 것은 데이터의 이전의 인스턴스가 저장 디바이스(130) 상에 존재할 때, 데이터의 인스턴스를 저장 디바이스(130)에 기록하는 것을 지칭할 수도 있다(이전의 인스턴스가 새로운 인스턴스의 기록에 의해 쓸모가 없게 됨).
일 실시예에서, OS(124)는 애플리케이션들(122)에 의한 데이터의 검색을 용이하게 하기 위해 파일 시스템을 구현한다. 본원에 사용되는, "애플리케이션" (또는 "프로세스")란 용어는 일반적으로 하나 이상의 프로세서에 의해 실행 가능한 프로그램 명령어들의 컬렉션을 지칭한다. 애플리케이션의 예로는 예를 들어, OS(124), 파일 시스템 관리자, 데이터베이스 관리 시스템(DBMS), 사용자 공간 라이브러리, 드라이버(예를 들어, 드라이버(126), 필터 드라이버들, 복수 배열 독립 디스크(RAID) 드라이버 등) 등을 들 수 있다. 예시된 실시예에서, 애플리케이션들(122)은 사용자 레벨 애플리케이션들이다. "사용자 레벨"이란 용어는 컴퓨터 시스템의 관리에 책임이 있지 않는 애플리케이션들을 설명하는데 사용된다. 사용자 레벨 애플리케이션의 예로는 예를 들어, 워드 프로세싱 애플리케이션, 웹 브라우저 등을 들 수 있다. 사용자 레벨 애플리케이션들은 컴퓨터 시스템의 작동을 관리하는 커널(kernel) 레벨 (또는 시스템 레벨) 애플리케이션들과 대조적으로 있다. 커널 레벨 애플리케이션의 예로는 예를 들어, 작동 시스템, 드라이버, 하이퍼바이저(hypervisor) 등을 들 수 있다. 일 실시예에서, OS(124)는 사용자 레벨 애플리케이션들에 의한 컴퓨터 시스템(100)의 일정 기능성(예를 들어, 파일, 어드레스, 하드웨어 등)에 대한 액세스를 제한할 수 있지만; OS(124)는 커널 레벨 애플리케이션들에 대해 그러한 기능성을 제한하지 않을 수 있다.
일부 실시예들에서, 애플리케이션들(122)의 애플리케이션 데이터는 "가상 저장부들"로 불리는 하나 이상의 분할 부분으로 조직화될 수 있다. 본원에 사용되는, "가상 저장부" 또는 "VSU"란 용어는 애플리케이션 데이터를 저장하기 위해 하나 이상의 애플리케이션에 의해 사용 가능한 저장 블록들(예를 들어, 논리적 블록들)의 할당된 세트를 지칭한다. 일부 실시예들에서, VSU들은 실제 물리적 어드레스 공간보다 더 큰 논리적 어드레스 공간을 애플리케이션들(122)에 제공하도록 구현될 수 있다. 이에 따라, VSU들에 할당되는 논리적 블록들의 총수는 물리적 매체 상에서 이용 가능한 저장 블록들의 수를 초과할 수 있다. 이러한 할당 방식 작업을 행하기 위해, VSU들은 VSU의 할당의 더 적은 것을 사용하는 VSU가 VSU의 할당의 더 많은 것을 사용하는 VSU와 물리적 매체 공간을 공유하도록 관리될 수 있다. 일부 실시예들에서, VSU들은 보조 드라이브들로부터 데이터의 캐싱을 용이하게 하는데 사용될 수도 있다. 본원에 사용되는, "저장부"란 용어는 일반적으로 저장 디바이스 또는 저장 디바이스 내의 가상 저장부를 지칭한다.
일부 경우들에서, 애플리케이션(122)은 애플리케이션 프로그래밍 인터페이스(API) 요청을 통하여 OS(124)에 상응하는 파일 명칭을 지정함으로써 저장 디바이스들(130) 내의 데이터에 액세스할 수 있다(다른 경우들에서, 애플리케이션(122)은 판독되거나 기록될 어드레스를 지정함으로써 직접 데이터에 액세스할 수 있다). 요청을 수신하는 것에 응하여, OS(124)는 파일에 대한 데이터가 저장되는 하나 이상의 어드레스를 결정하기 위해 (예를 들어, 아이노드(inode)들, 파일 할당 테이블들 등의 세트 내에서) 디렉토리들 및 파일들에 상응하는 다양한 파일 시스템 정보에 액세스할 수 있다.
일 실시예에서, 드라이버(126)는 애플리케이션들(122) 및 OS(124)가 저장 디바이스들(130)과 상호 작용하는 것을 가능하게 하도록 실행 가능하다. 따라서, 드라이버(126)는 지정된 논리적 블록 어드레스들에서 판독 및 기록 작동들을 수행하라는 요청들을 수신할 수 있고 그러한 작동들을 구현하기 위해 상응하는 커맨드들을 제어기(132)로 발행할 수 있다. 일부 실시예들에서, 드라이버(126)는 유효하지 않은 데이터를 갖는 저장 블록들을 복구하기 위해 저장 디바이스들(130)에 대한 가비지(garbage) 수집을 관리한다. 본원에 사용되는, 저장 블록을 "복구하는 것" 또는 저장 블록의 "복구"는 (즉, 저장 블록이 새로운 데이터를 저장할 수 있도록) 재사용을 위해 저장 블록을 준비하는 것을 지칭한다. 플래시 매체의 경우에, 복구는 저장 블록 외로 유효한 데이터를 카피하는 것 그리고 블록을 소거하는 것을 포함할 수 있다. 일부 실시예들에서, 판독 및 기록 작동들의 수행을 용이하게 하기 위해, 드라이버(126)는 또한 논리적 어드레스들(예를 들어, LBA들)을 상응하는 물리적 어드레스들로 매핑한다(다른 실시예들에서, 논리적 어드레스들을 물리적 어드레스들로 매핑하는 것은 제어기(132)에서와 같이 다른 곳에서 수행될 수 있다). 따라서, 드라이버(126)는 데이터가 저장 디바이스들(130) 상에서 조작됨에 따라, 맵들로부터 변환들을 추가하고 제거하는 것을 포함하는 (도 2와 함께 이하에 논의되는 맵들(222)과 같은) 하나 이상의 변환 맵을 관리할 수도 있다.
다양한 실시예들에서, 드라이버(126)는 극소 기록 작동들의 수행을 지원할 수 있다. 앞서 논의된 바와 같이, 극소 기록은 실패일 경우에 어떤 영향도 미치지 않는 극소 기록의 능력 때문에 통상적 기록 작동들에 유리할 수 있다. 따라서 일 실시예에서, 드라이버(126)는 극소 기록을 저장 디바이스들(130) 중 하나에 지원한다. 후술할 것인 바와 같이, 일부 실시예들에서, 그러한 기록 작동을 용이하게 하기 위해, 데이터는 다양한 형태들의 메타데이터를 갖는 헤더를 포함하는 하나 이상의 패킷 내에서 캡슐화될 수 있다. 일 실시예에서, 이러한 메타데이터는 데이터가 극소 기록의 일부로서 저장되고 있는 것을 식별하는 하나 이상의 비트들을 포함할 수 있다. 드라이버(126)는 기록이 성공적으로 완료되었는지 여부를 판단하고 타당하면 극소 기록을 롤백하기 위해 이러한 메타데이터에 추가로 액세스할 수 있다. 다양한 실시예들에서, 드라이버(126)는 또한 다수의 저장 디바이스(130), 가상 저장부들 또는 이들의 조합에 걸쳐 극소 기록을 지원한다. (따라서, 특정 실시예들이 다수의 저장 디바이스에 걸친 극소 기록에 대하여 본원에 설명될 수 있지만, 그러한 설명은 단일 저장 디바이스 내에 위치되는 다수의 가상 저장부를 포함하는-가상 저장부들에 적용 가능할 수도 있다.) 그러한 일 실시예에서, 데이터의 세트는 저장부들 중에서 분포되는 부분들로 분할될 수 있다. 예를 들어, 어드레스들의 영역에 걸쳐 있는 데이터의 세트는 어드레스들에 기반하여 분할될 수 있다. 기록 작동들의 그룹은 그 때 기록 작동 각각이 각각의 저장 디바이스(130)에 일부를 저장하도록 수행될 수 있다. 예시된 실시예에서, 극소 기록을 용이하게 하기 위해, 드라이버(126)는 저장 디바이스들(130)에 수행되는 기록 작동들 각각이 성공적으로 행해졌는지 여부를 판단하기 위해 극소 기록의 일부로서 주석(150)을 추가로 저장한다. 따라서, 기록 작동들 중 하나가 실패하면(예를 들어, 저장 디바이스들(130) 중 하나의 전력 고장이 도중에 발생하면), 드라이버(126) (또는 애플리케이션(122))은 벡터 기록이 성공적으로 완료되고 기록을 롤백하지 않았음을 식별하는데 주석(150)을 사용할 수 있다.
일 실시예에서, 주석(150)은 저장 디바이스들(130) 중 적어도 하나 내의 전용 위치에 저장되는 메타데이터이다. 즉, 위치는 극소 기록이 수행되고 있는 애플리케이션 데이터 중 임의의 것을 포함하지 않는다. (다른 실시예들에서, 그러나, 주석(150)은 비전용 위치에 저장될 수 있다.) 도 3a와 함께 후술할 것인 바와 같이, 일부 실시예들에서, 이러한 위치는 애플리케이션들(122)과 같은 드라이버(126) 이외의 애플리케이션들에 액세스 가능하지 않을 수 있다. 예를 들어, 일 실시예에서, 드라이버(126) (또는 OS(124))는 이러한 위치의 어드레스를 지정하면, 데이터에 대한 애플리케이션(122)의 요청을 거부할 수 있다. 다른 실시예에서, 애플리케이션(122)은 애플리케이션이 이러한 제한된 시점 외부의 임의의 어드레스를 알지 못하도록 총어드레스 공간의 제한된 시점을 가질 수 있으며; 위치는 그 때 이러한 외부 어드레스들 중 하나에 상주할 수 있다. 일부 실시예들에서, 이러한 위치는 정적일 수 있다―예를 들어, 드라이버(126)는 주석(150)을 동일한 논리적 블록 어드레스(LBA) 또는 LBA들에 항상 기록할 수 있다. 그러나, 다른 실시예들에서는, 주석(150)의 위치가 동적일 수 있다. 일 실시예에서, 주석(150)의 위치는 저장되고 있는 데이터와 관계없을 수 있다―예를 들어, 주석(150)은 데이터가 저장되는 어드레스들로부터 분리된 논리적 블록 어드레스에 상주할 수 있다. 일 실시예에서, 주석(150)은 실패가 일부 지점에서 일어나면, 적어도 주석(150)이 성공적으로 저장될 가능성이 더 높도록 극소 기록의 시작 부분에 저장된다. 따라서, 주석(150)은 실패 및 임의의 롤백을 식별하는 것을 용이하게 하는데 이용 가능할 수 있다. 다른 실시예에서, 주석(150)은 극소 기록의 종료 부분에서 저장될 수 있다. 따라서, 주석(150)의 단순 존재는 극소 기록이 성공적으로 완료되었음을 의미할 수 있다.
일부 실시예들에서, 드라이버(126)는 극소 기록에 대한 다수의 형태의 롤백을 지원한다. 따라서 일 실시예에서, 드라이버(126)는 극소 기록에 대한 모든 데이터(예를 들어, 기록될 요청된 데이터뿐만 아니라 기록에 대한 임의의 기록된 메타데이터)는 기록이 실패하면, 무효화되는 전체 롤백을 지원한다. 일부 실시예들에서, 드라이버(126)는 대안적으로 기록된 데이터의 일부가 저장 디바이스들(130) 상에 남는 것이 가능해질 수 있는 반면에, 다른 부분들이 무효화될 수 있는 부분적 롤백을 지원한다. 도 2와 함께 후술할 것인 바와 같이, 그러한 일 실시예에서, 드라이버(126)는 애플리케이션(122)에 기록 실패에 대한 정보를 제공할 뿐만 아니라 애플리케이션(122)에 극소 기록을 롤백하는 상이한 옵션들을 제공하기 위해 애플리케이션(122)과 인터페이싱할 수 있다. 일부 실시예들에서, 애플리케이션(122)은 드라이버(126)에 의해 제공되는 정보에 따라 전체 롤백 또는 부분적 롤백을 수행할 지 아니면 어떤 롤백도 수행하지 않을 지 여부를 선택할 수 있다.
다양한 실시예들에서, 주석(150)과 같은 기록 메타데이터를 통해 극소 기록을 구현하는 것은 다수의 저장부에 걸쳐 극소 기록을 수행하기 위해 오버헤드를 감소시킬 수 있으므로 유리할 수 있다. 예를 들어, 다수의 저장 디바이스(130)에 걸친 극소 기록은 드라이버(126)가 요청을 송신하고 각각의 저장 디바이스(130)로부터의 상응하는 승인을 대기하도록 드라이버(126)가 각각의 저장 디바이스(130)와의 핸드쉐이크(handshake)를 수행하는 것을 포함할 수 있다. 드라이버(126)는 저장 디바이스(130)로부터 어떤 승인도 수신되지 않을 때, 극소 기록이 실패했다고 판단하기 위해 송신된 요청들 및 수신된 승인들의 로그를 추가로 유지할 수 있다. 그러나, 이러한 방식으로 로그를 유지하는 것 그리고 핸드쉐이크들을 전달하는 것은 상당한 양의 부가 메타데이터를 유지하는 것을 야기하고 드라이버(126)와 저장 디바이스들(130) 사이의 버스 트래픽의 양을 상당히 증가시킬 수 있다. 따라서, 기록 메타데이터가 사용되는 다양한 실시예들에서, 드라이버(126)는 핸드쉐이크 작동들을 수행하지 않고, 승인들을 전달하지 않고, 로그를 유지하지 않고 주석(150)과 같은 기록 메타데이터를 통해 극소 기록을 구현할 수 있다.
이제 도 2를 참조하면, 드라이버(126)의 블록도가 도시된다. 예시된 실시예에서, 드라이버(126)는 분배층(210), 저장층들(220A 및 220B) 및 입력/출력(I/O)층들(230A 및 230B)을 포함한다. 다른 실시예들에서, 드라이버(126)는 도시된 것과 상이하게 구성될 수 있다.
일 실시예에서, 분배층(210)은 극소 기록들의 수행을 포함하여 다수의 저장부(예를 들어, 예시된 실시예에서 저장 디바이스들(130))에 걸친 데이터 저장을 관리한다. 따라서, 분배층(210)은 애플리케이션들(122) 및/또는 OS(124)로부터 판독 및 기록 요청들을 수신하고, 적절한 하나 이상의 저장 디바이스(130)를 결정하고, 이하에 논의되는 저장층들(220)에 상응하는 명령어들을 발행할 수 있다. 예를 들어, 일 실시예에서, 주어진 요청은 어드레스들의 영역을 지정할 수 있으며; 분배층(210)은 그 다음 그러한 영역에서의 어드레스들과 연관되는 저장 디바이스들(130)을 식별하기 위해 (후술하는 맵들(222)과 유사한) 맵을 사용할 수 있다. 일부 실시예들에서, 분배층(210)은 또한 (예를 들어, API를 통하여) 극소 기록들을 수행하도록 애플리케이션들(122)과 인터페이싱한다. 따라서 예시된 실시예에서, 분배층(210)은 극소 기록 요청들(202)을 수신하여, 기록 상태들(204)의 표시들을 제공하고, 롤백 명령어들(206)을 수신할 수 있다.
일 실시예에서, 극소 기록 요청들(202)은 극소 기록들을 수행하라는 애플리케이션(122)으로부터의 요청들이다. 일부 실시예들에서, 극소 기록 요청들(202)은 기록될 데이터의 인스턴스(즉, 카피), 하나 이상의 어드레스(예를 들어, LBA들) 및/또는 (비극소 기록과는 대조적으로) 요청이 극소 기록에 대한 것이라는 표시를 포함할 수 있다. 극소 기록 요청(202)에 응하여, 분배층(210)은 하나 이상의 상응하는 명령어를 하부층들(220 및 230)에 발행할 수 있다. 분포된 기록(즉, 다수의 저장 디바이스(130)에 걸친 기록)의 경우에, 분배층(210)은 데이터를 기록하기 위한 저장층들(220)에의 명령어들뿐만 아니라 저장 디바이스(130A)와 같은 저장 디바이스(130) 상에 주석(150)을 저장하라는 하나 이상의 명령어를 발행할 수 있다. 일부 실시예들에서, 분배층(210)은 (도 2에서의 점 블록에 의해 나타내어지는 바와 같이) 다수의 저장 디바이스(130) 상에 주어진 기록에 대한 주석(150)의 다수의 리던던트(redundant) 인스턴스를 저장할 수도 있으며―예를 들어, 주석(150)은 저장 디바이스들(130) 각각, 저장 디바이스들(130)의 서브세트 등에 저장될 수 있다. 도 4b와 함께 설명할 것인 바와 같이, 일 실시예에서, 주석(150)은 극소 기록과 연관되는 순차 번호 및 어드레스 영역(예를 들어, 극소 기록 요청(202)에서 지정되는 LBA 영역)을 포함한다. 그러한 일 실시예에서, 순차 번호는 기록 작동들이 일어났던 순서를 나타낸다. 예를 들어, 일 실시예에서, 분배층(210)은 분배층(210)이 (극소 또는 비극소의) 기록 요청을 수신할 때마다 조정되는 카운터를 유지할 수 있다. 일부 실시예들에서, 분배층(210)은 저장 디바이스들(130)에 저장되는 데이터의 각각의 부분에 순차 번호를 첨부할 수 있다. 즉, 그러한 일 실시예에서, 제1 및 제2 부분들이 저장 디바이스들(130A 및 130B)에 각각 기록되면, 각각의 부분은 (주석(150)에 포함되는 순차 번호의 인스턴스에 더하여) 순차 번호의 각각의 인스턴스를 포함할 수 있다.
일부 실시예들에서, 극소 기록 요청들(202)은 주석(150)에서의 저장을 위해 애플리케이션(122)에 의해 제공되는 데이터를 포함할 수도 있다. 예를 들어, 일 실시예에서, 애플리케이션(122)은 다양한 형태의 메타데이터를 유지할 수 있으며, 다양한 형태의 메타데이터는 상세하게는 극소 기록들의 수행을 위해 또는 일부 다른 목적으로 유지될 수 있다. 그러한 일 실시예에서, 애플리케이션(122)은 이러한 메타데이터가 주석(150)에 저장될 수 있도록 이러한 메타데이터를 드라이버(126)에 제공할 수 있다. 따라서 일부 실시예들에서, 애플리케이션(122)은 무슨 메타데이터가 주석(150) 내에 저장되는지를 한정하고 관리하는 것이 가능할 수 있다. 게다가 또한 일부 실시예들에서, (드라이버(126)와는 대조적으로) 애플리케이션(122)은 극소 기록이 실패했는지 여부를 판단하는데 이러한 정보를 사용할 수 있다.
다양한 실시예들에서, 분배층(210)은 앞서 주목된 바와 같이 극소 기록이 주석(150)에서의 메타데이터에 기반하여 성공적으로 완료되었는지 여부를 판단할 수 있다. (그러나 다른 실시예에서, 이러한 판단은 예를 들어, 이하에 논의되는 기록 상태(204)를 통하여-드라이버(126)에 의해 제공되는 정보에 기반하여 애플리케이션(122)에 의해 수행될 수 있다.) 일 실시예에서, 분배층(210)은 분배층(210)이 수신하는 각각의 극소 기록 요청(202)에 대한 이러한 판단을 수행한다. 대안적으로 다른 실시예에서, 분배층(210)은 기록 실패를 야기했을 수 있는 시스템 고장이 발생되었다는 표시를 수신한 후에 이러한 판단을 수행한다. 예를 들어, 분배층(210)은 컴퓨팅 시스템(100)이 적절한 셧다운 절차들을 거치지 않고 재부팅되고 있거나, 재부팅되었던 것, 컴퓨팅 시스템(100)과 저장 디바이스(130) 사이의 연결이 방해되었던 것 등의 OS(124)로부터의 표시를 수신할 수 있다. 일 실시예에서, 극소 기록이 성공적으로 완료되었는지 여부를 판단하기 위해, 분배층(210)은 그러한 기록과 연관되는 주석(150) (또는 주석들(150))을 판독하는 것을 초기에 시도할 수 있다. 주석(150)이 존재하지 않거나 손상되면, 분배층(210)은 기록이 성공적으로 완료되지 않았다고 판단할 수 있다. 그러나, 주석(150)이 성공적으로 판독되면, 일 실시예에서, 분배층(210)은 기록된 데이터가 저장되었던 곳을 식별하기 위해 주석에 지정되는 어드레스 영역을 판독할 수 있다. 일 실시예에서, 분배층(210)은 데이터와 함께 저장되는 순차 번호들을 판독하고 그 순차 번호들을 주석(150)에 저장되는 순차 번호와 비교하는 것을 추가로 시도할 수 있다. 이러한 번호들이 일치하지 않으면, 분배층(210)은 극소 기록이 성공적으로 완료되지 않았다고 결론을 내릴 수 있다. 다른 한편으로, 순차 번호들이 일치하면, 분배층(210)은 기록이 성공적으로 완료되었다고 결론을 내릴 수 있다. (기록이 실패했는지 여부를 판단하기 위한 다른 기법들이 도 4b와 함께 이하에 논의된다). 어느 경우든, 분배층(210)은 기록 상태(204)를 통하여 요청(202)을 발행했던 애플리케이션(122)에 그것의 결과의 표시를 제공할 수 있다.
일 실시예에서, 기록 상태들(204)은 극소 기록 요청들(202)과 연관되는 기록 작동들이 성공적으로 완료되었는지 여부를 나타낸다. 일부 실시예들에서, 상태(204)는 실패 또는 성공을 나타내는 불린(boolean)값만을 포함할 수 있다. 그러나 다양한 실시예들에서, 기록 상태들(204)은 애플리케이션들(122)에 의해 사용 가능한 부가 정보를 포함할 수 있다. 예를 들어, 일 실시예에서, 기록 상태(204)는 기록이 실패한 것을 나타내고 또한 데이터가 성공적으로 기록되지 않았던 (또는 반대로, 데이터가 성공적으로 기록되었던) 어드레스들(예를 들어, LBA들)을 식별할 수 있다. 일 실시예에서, 기록 상태(204)는 또한 실패와 연관되는 저장 디바이스 또는 디바이스들(130)을 추가로 식별할 뿐만 아니라 실패의 잠재적 원인(예를 들어, 하나 이상의 저장 디바이스(130)와 통신하는 것의 불능)을 식별할 수 있다. 이러한 정보에 기반하여, 일부 실시예들에서, 애플리케이션(122)은 애플리케이션(122)이 드라이버(126)가 실패를 어떻게 처리하기를 원하는지에 대하여 학습된 판단을 행하고 롤백 명령어(206)와 같은 상응하는 표시를 제공할 수 있다.
일부 실시예들에서, 극소 기록이 완료되었는지 여부의 명확한 표시를 포함하는 것보다는 오히려, 기록 상태들(204)은 극소 기록이 실패했는지 여부를 추론하기 위해 애플리케이션(122)에 의해 사용 가능한 정보를 포함할 수 있다. 예를 들어, 일 실시예에서, 드라이버(126)는 데이터를 초기에 기록하고 그 다음 주석(150)을 이후에 기록함으로써 극소 기록을 수행할 수 있다. 게다가 또한, 드라이버(126)는 특정 어드레스들(예를 들어, LBA들)이 기록되었는지 여부(즉, 유효한 데이터가 그러한 위치들에 존재하는지 여부)를 애플리케이션(122)이 질의하는 것을 가능하게 하는 애플리케이션(122)으로부터의 API 호출을 지원할 수 있다. 그러한 일 실시예에서, 애플리케이션(122)은 극소 기록 요청(202)을 발행하고 그 다음 API 호출을 통하여 주석(150)의 어드레스가 기록되었는지 여부를 질의할 수 있다. 이러한 예에서, 기록 상태(204)는 질의에 대해 분배층(210)에 의해 발행되는 응답에 상응할 수 있다. 기록 상태(204)가 어드레스가 기록되지 않았다는 것을 나타내면, 애플리케이션(122)은 주석(150)이 저장되지 않았고, 따라서, 극소 기록이 실패했다고 결론을 내릴 수 있다. 다른 실시예에서, 애플리케이션(122)은 주석(150)을 판독하고 판독으로 실패를 나타내는 기록 상태(204)를 수신하는 것만을 시도할 수 있다. 결과적으로, 애플리케이션(122)은 시도된 판독에 기반하여 극소 기록이 성공하지 못했다고 결론을 내릴 수 있다. 다른 실시예들에서, 기록 상태들(204)은 주석(150)으로부터의 콘텐츠, 검사 합계값들, 타임스탬프들 등과 같은 애플리케이션(122)에 의해 사용 가능한 다른 정보를 포함할 수 있다.
일 실시예에서, 롤백 명령어들(206)은 드라이버(126)가 극소 기록의 롤백을 수행할 것인지 여부를 지정하며, 극소 기록은 실패한 극소 기록들 뿐만 아니라 성공적인(즉, 완료된) 극소 기록들을 포함할 수 있다. (다른 실시예에서, 분배층(210)은 즉, 롤백을 수행하기 위해 명확한 명령어를 수신하지 않고-실패의 검출 시에 자동적으로 롤백을 수행할 수 있다.) 앞서 논의된 바와 같이 일부 실시예들에서, 드라이버(126)는 전체 롤백, 부분적 롤백 등과 같은 다수의 형태의 롤백을 지원할 수 있다. 따라서 그러한 일 실시예에서, 롤백 명령어(206)는 수행될 롤백의 형태를 지정할 수 있다. 일부 실시예들에서, 롤백 명령어(206)는 드라이버(126)가 기록 작동을 성공적으로 완료할 수 있도록 부정확하게 기록되었던 데이터의 인스턴스를 포함할 수도 있다. 보다 상세하게는 그러한 일 실시예에서, 극소로 기록되고 있는 데이터는 데이터가 저장 디바이스(130)에 성공적으로 기록되었다는 것이 검증될 때까지, 컴퓨팅 시스템(100)(예를 들어, RAM(120) 또는 프로세서부(110))에서의 다른 곳에서 캐싱될 수 있다. (일 실시예에서, 이러한 캐싱 능력은 애플리케이션(122)의 기능일 수 있으며; 다른 실시예들에서, 이는 OS(124), 드라이버(126) 등에 의해 수행될 수 있다.) 기록 실패가 발생하면, (예를 들어, 기록 상태(204)에서 지정되는 어드레스들에 의해 식별되는) 분실된 데이터는 분실된 데이터를 저장 디바이스들(130)에 기록하는 것을 시도함으로써 기록 작동을 완료하도록 롤백 명령어(206)에 포함될 수 있다. 일 실시예에서, 드라이버(126)가 실패한 극소 기록 동안 기록된 데이터를 제거하기 위해 전체 롤백 또는 부분적 롤백을 수행하고 있을 때, 드라이버(126)는 앞서 논의된 바와 같이, 저장되는 요청된 데이터뿐만 아니라 기록하는 동안 기록되는 임의의 메타데이터를 포함할 수 있는 데이터를 무효화하기 위한 하나 이상의 트림 커맨드를 발행할 수 있다. 다른 실시예들에서, 드라이버(126)는 데이터를 소거하는 것, 데이터를 덮어쓰기하는 것 등과 같은 실패한 극소 기록 동안에 기록되는 데이터를 제거하기 위해 다른 기법들을 사용할 수 있다.
일 실시예에서, 저장층들(220)은 주어진 저장 디바이스(130)에 대한 작동들을 관리한다. 일 실시예에서, 저장층들(220)은 도 3a 내지 도 3c와 함께 보다 상세히 논의되는 바와 같이 논리적 어드레스들을 상응하는 물리적 어드레스들로 변환한다. 예시된 실시예에서, 각각의 저장층(220)은 각각의 저장층(220)의 디바이스(130)에 대한 각각의 맵(222)을 유지한다. (다른 실시예들에서, 저장층들(220)은 맵을 공유할 수 있으며, 맵은 일부 다른 블록 등에 의해 유지될 수 있다.) 다양한 실시예들에서, 맵들(222)은 저장 디바이스(130) 내에서 논리적 어드레스들의 물리적 어드레스들로의 변환들을 유지한다. 따라서, 데이터가 이동되고 무효화됨에 따라, 데이터는 시간이 지남에 따라 저장 디바이스(130) 상의 상이한 물리적 어드레스들에 상주할 수 있다. 그러나 맵(222)의 사용을 통해, 애플리케이션은 2개 이상의 버전의 데이터가 상이한 물리적 어드레스들에 상주할 수 있더라도, 동일한 논리적 어드레스(예를 들어, 동일한 논리적 블록 어드레스(LBA))를 지정함으로써 가장 최근의 세트의 데이터에 액세스하는 것이 가능할 수 있다. 맵들(222)은 임의의 적절한 데이터 구조체를 사용하여 구현될 수 있다. 따라서 일 실시예에서, 맵들(222)은 이진 트리(tree) 데이터 구조체들이다. 다른 실시예들에서, 맵(222)은 어레이, 링크된 목록, 해시 테이블 등일 수 있다. 일부 실시예들에서, 맵(222)은 다수의 데이터 구조체를 사용하여 구현될 수 있다. 다양한 실시예들에서, 저장층들(220)은 저장층들(220)의 각각의 저장 디바이스들(130)에 대해 그루밍(grooming)하는 것(즉, 저장층들(220)이 또한 가비지 수집으로 지칭되는-데이터를 저장하기 위해 이후에 프로그래밍될 수 있도록 저장 블록들을 식별하고 복구하는 것)을 관리할 수 있다. 저장층들(220)은 유효하지 않은 데이터의 양, 데이터의 온도(즉, 데이터가 얼마나 자주 액세스되는지), 데이터가 저장 블록들로부터 판독될 때, 검출되는 잘못된 데이터의 양 등과 같은 복구를 위해 저장 블록들을 선택하는 다양한 기준 중 임의의 것을 사용할 수 있다.
I/O 층들(230)은 저장 디바이스들(130) 상의 저장 제어기들(132)과 드라이버(126)를 인터페이싱한다. 따라서, I/O 층들(230)은 프로그램, 소거 및 판독 커맨드들을 제어기들(132)로 발행하는 것과 같은 더 낮은 레벨 인터페이싱 작동들을 처리할 수 있다. I/O 층들(230)은 저장 디바이스들(130)에 대한 다양한 형태의 구동 상태를 추적할 수도 있다. 일부 실시예들에서, I/O 층들(230)은 상호 연결부(140)에 걸쳐 DMA 트랜잭션들에 대한 하나 이상의 채널들을 구성하도록 DMA 제어기와 통신할 수 있다. 독립된 블록들로 도시되었지만, I/O 층들(230)은 일 실시예에서 하나의 블록일 수 있다.
이제 도 3a를 참조하면, 논리적 어드레스 공간(302) 및 물리적 어드레스 공간(304)에 대한 극소 저장의 블록도가 도시된다. 일 실시예에서, 논리적 어드레스 공간(302)은 애플리케이션들(122) 및 OS(124)와 같은 더 높은 레벨 프로세스들에 의해 감지되는 데이터의 조직을 나타낸다. 일 실시예에서, 물리적 어드레스 공간(304)은 물리적 매체 상의 데이터의 조직을 나타낸다.
일 실시예에서, 논리적 어드레스 공간(302)은 (또한 섹터들로 지칭되는) 각각의 논리적 블록들(310A 내지 310D)에 상응하는 논리적 어드레스들로 분할된다. 일부 실시예들에서, 논리적 어드레스들은 논리적 블록 어드레스들(LBA들)이다(다른 실시예들에서, 논리적 어드레스들은 일부 다른 형태의 논리적 식별자들에 상응할 수 있다). 일 실시예에서, 논리적 섹터들/블록들(310)은 주어진 논리적 어드레스와 연관되는 데이터의 가장 작은 블록을 나타낸다. 단지 일 예로서, 논리적 블록(310)은 크기가 대략 512 바이트일 수 있다(반면에 이하에 논의되는 논리적 소거 블록들 및 논리적 페이지들은 각각 대략 40MB 및 8kB일 수 있다). 또 다른 예로서, 논리적 블록(310)은 대략 4kB일 수 있다.
일 실시예에서, 물리적 어드레스 공간(304)은 물리적 기록 매체 상의 데이터의 배열에 상응하는 물리적 어드레스들로 분할된다. 도 3b에 대하여 보다 상세히 논의될 것인 바와 같이, 일 실시예에서, 논리적 블록들(310)의 콘텐츠는 논리적 소거 블록들(320) 내에 패킷들(360)로서 저장될 수 있다. 도 3c에 대하여 논의되는 바와 같이, 다양한 실시예들에서, 물리적 어드레스 공간(304)은 기록 작동들이 하나 이상의 첨부 지점에서만 수행될 수 있는 로그 구조체로서 조직화될 수 있다.
일부 실시예들에서, 드라이버(126)는 논리적 어드레스 공간(302)이 "드문 어드레스 공간"이 되도록 저장 디바이스(130)의 물리적 어드레스 공간(304)보다 상당히 더 큰 논리적 어드레스 공간(302)을 나타낼 수 있다. (본 발명의 목적으로, 드문 어드레스 공간은 근본적 저장 디바이스들의 물리적 어드레스 공간보다 적어도 10% 더 큰 임의의 논리적 어드레스 공간이다.) 예를 들어, 일 실시예에서, 드라이버(126)는 32 비트 물리적 어드레스 공간에 대하여 48 비트 드문 어드레스 공간을 나타낼 수 있다. 그러한 일 실시예에서, 애플리케이션들(122)은 논리적 어드레스 공간(302)의 상당한 사용되지 않는 부분들이 저장된 데이터의 블록들 사이에 존재할 수 있도록 논리적 어드레스 공간(302)의 총어드레스 영역보다 상당히 덜 소모할 수 있다.
일부 실시예들에서, 드라이버(126)는 데이터 저장을 위해 논리적 어드레스 공간(302)의 부분들을 애플리케이션들(122)에 할당할 수 있다. 예를 들어, 예시된 실시예에서, 애플리케이션들(122A 및 122B)은 각각 논리적 어드레스 영역들(312A 및 312B)이 할당되었다. (그러나 다른 실시예들에서, 애플리케이션들(122)은 할당된 영역(312)을 공유할 수 있다.) 따라서, 애플리케이션(122A)은 영역(312A) 내에 논리적 블록들(310)을 어드레싱함으로써 데이터를 판독하고 기록할 수 있다. 예를 들어, 일 실시예에서, 애플리케이션(122A)은 논리적 블록들(310A1 및 310A2)을 포함하는 어드레스 영역에 대한 극소 기록을 요청할 수 있다. 이러한 논리적 블록들(310)은 그 다음 패킷들(360A 및 360B)로서 저장 디바이스들(130A 및 130B)에 걸쳐 저장될 수 있다. 마찬가지로, 애플리케이션(122B)은 영역(312B) 내에 논리적 블록들(310)을 어드레싱함으로써 (논리적 블록(310B)에서의 데이터와 같은) 데이터에 액세스할 수 있다. 일부 실시예들에서, 영역들(312)은 저장 디바이스들(130) 상의 (또한 앞서 논의된 바와 같이 가상 저장부들(VSU들)로 지칭되는) 별도의 분할 부분들에 상응할 수 있다.
다양한 실시예들에서, 극소 기록 동안 기록되는 패킷들(360)의 위치는 (결국, 분할 부분들의 특정 배열 뿐만 아니라 컴퓨팅 시스템(100)에서 저장 디바이스들(130)의 특정 배열에 의존할 수 있는) 논리적 어드레스들의 상응하는 물리적 어드레스들로의 매핑에 의존할 수 있다. 따라서 예시된 실시예에서, 논리적 블록들(310A1 및 310A2)의 극소 기록은 논리적 블록들(310A1 및 310A2)의 논리적 어드레스들이 저장 디바이스들(130A 및 130B) 둘 다에서의 물리적 어드레스들로 매핑되므로, 각각 저장 디바이스들(130A 및 130B)에 위치되는 패킷(360A 및 360B)에 수행된다. 다른 경우들에서, 논리적 블록들(310A1 및 310A2)의 논리적 어드레스들은 데이터가 저장 디바이스들(130) 중 하나에만 (또는 저장 디바이스들(130)의 일부 서브세트에만) 기록되도록 상이하게 매핑되었을 수 있다. 따라서 일 실시예에서, 애플리케이션(122A)은 데이터가 저장 디바이스들(130A 및 130B) 둘 다에 저장되는 것을 야기하는 극소 기록에 대한 제1 요청을 발행할 수 있고 데이터가 저장 디바이스(130A) 상에만 저장되는 것을 야기하는 제2 이후의 요청을 발행할 수 있다.
앞서 논의된 바와 같이 다양한 실시예들에서, 드라이버(126)는 극소 기록의 실패를 검출하고 극소 기록을 롤백하는데 사용 가능한 하나 이상의 주석(150)을 저장할 수 있다. 예시된 실시예에서, 주석(150)은 예시 목적으로 전용 블록(314)으로 도시되는-논리적 블록(310) 내에 저장된다. 그러한 일 실시예에서, 전용 블록들(314)은 보존된 논리적 어드레스 영역(316) 내에 위치될 수 있다. 일 실시예에서, 전용 영역(316)은 전용 블록들(314)을 저장하기 위해 보존되는 하나 이상의 논리적 블록 어드레스의 영역이다(즉, 영역(316)은 앞서 논의된 애플리케이션들(122)과 같은 사용자 레벨 애플리케이션들로부터의 애플리케이션 데이터를 갖는 논리적 블록들(310)을 포함하지 않는다). 일부 실시예들에서, 영역(316)은 영역들(312)의 외부에 상주할 수 있고 애플리케이션들(122)에 액세스 가능하지 않을 수 있다 (앞서 논의된 바와 같이, 이는 보존된 영역(316)에서 어드레스를 지정하는 임의의 데이터 요청을 드라이버(126)가 거부하는 것, 애플리케이션(122)이 보존된 영역(316)에서 임의의 어드레스의 존재를 알 수 없는 것 등에 기인할 수 있다). 하나의 그러한 실시예에서, 애플리케이션(122)은 API 호출을 통하여 드라이버(126)로의 주석(150)의 콘텐츠를 여전히 판독하는 것이 가능할 수 있지만; 애플리케이션(122)은 주석(150)의 어드레스 (또는 어드레스들)을 지정하는 판독 요청을 통하여 콘텐츠에 직접 액세스하는 것이 가능하지 않을 수 있다. 보존된 논리적 어드레스 영역으로 도시되지만, 다른 실시예들에서, 어드레스 영역(316)은 저장 디바이스들(130)의 하나 이상의 물리적 어드레스를 포함하는 물리적 어드레스 영역일 수 있다. 그러한 일 실시예에서, 어드레스 영역(316)은 다수의 저장 디바이스(130)에 걸쳐 있거나 저장 디바이스들(130) 중 단 하나에만 상주할 수 있다. 또 다른 실시예들에서, 어드레스 영역(316)은 보존되지 않을 수 있다―즉, 주석(150)은 사용자 데이터(즉, 사용자 레벨 애플리케이션의 데이터)를 포함하는 저장 블록들이 산재되는 저장 블록에 저장될 수 있다. 영역(316)은 지속적이거나 비지속적인 어드레스들을 포함할 수도 있다. 예시된 실시예에서, 애플리케이션들(122A 및 122B)은 영역들(316A 및 316B) 중 각각의 하나와 각각 연관된다. 그러한 일 실시예에서, 각각의 영역(316)은 그것의 각각의 애플리케이션(122)과 연관되는 기록들에 대한 주석들(150)을 저장할 수 있다. 예를 들어, 전용 블록(314A)은 애플리케이션(122A)에 의해 요청되는 가장 최근의 극소 기록에 대한 주석(150)을 저장할 수 있으며; 전용 블록(314B)은 애플리케이션(122B)에 의해 요청되는 가장 최근의 극소 기록에 대한 주석(150)을 저장할 수 있으므로―드라이버(126)는 어느 한 극소 기록에 대한 롤백을 수행하는 것이 가능할 수 있다. 일부 실시예들에서, 영역(316)은 가장 최근의 극소 기록들의 세트에 대해 다수의 전용 블록(314)을 저장하는 것이 가능할 수 있다. 예를 들어, 영역(316A)은 마지막 4개의 요청된 극소 기록에 대해 주석들(150)을 저장할 수 있다. 다른 실시예들에서, 애플리케이션들(122)은 보존된 영역(316)을 공유할 수 있다. 일부 실시예들에서, 영역(312)은 영역(312)의 상응하는 영역(316)과 함께 위치될 수 있다―예를 들어, 영역(316A)은 영역(312A)에 인접할 수 있다. 다른 실시예들에서, 영역들(316)은 영역들(316)의 각각의 영역들(312)과 분리될 수 있다. 일부 실시예들에서, 영역들(316)은 함께 위치될 수 있다―예를 들어, 영역들(316)은 논리적 어드레스들의 하나의 인접한 영역을 형성할 수 있다. 일부 실시예들에서, 영역들(316)은 정적일 수 있으며; 다른 실시예들에서, 영역들(316)은 동적일 수 있다.
예시된 실시예에서, 전용 블록들(314)은 주석 패킷들(362)로서 저장된다. 일부 실시예들에서, 주석 패킷들(362)은 애플리케이션들(122), 드라이버(126)의 가비지 수집 프로세스 등에 의해 부주의로 변경되거나 삭제되지 않도록 보호될 수 있다. 이를 달성하기 위해 일 실시예에서, 주석 패킷들(362)은 저장 디바이스들(130) 상의 특정 보존된 영역-예를 들어, 드라이버(126)에 의해 유지되는 메타데이터를 저장하도록 보존되는 특정 논리적 소거 블록(320)에 저장될 수 있다. 저장 디바이스들(130) 상의 특정 보존된 영역에 대한 액세스는 애플리케이션(122)이 애플리케이션(122)의 극소 저장 작동 동안 메타데이터에만 액세스할 수 있도록 제어될 수 있다. 주석 패킷(362)의 일 실시예가 도 4b와 함께 이하에 논의된다.
이제 도 3b를 참조하면, 저장 디바이스(130) 내의 저장 블록들의 블록도가 도시된다. 예시된 실시예에서, 저장 뱅크(134)는 다수의 물리적 소거 블록(PEBs)(330)을 포함하는 논리적 소거 블록들(LEBs)(320)로 조직화되며, 다수의 물리적 소거 블록(PEBs)(330)은 별도의 다이들(306)에 위치된다. 논리적 소거 블록(320)은 결국, 다수의 물리적 페이지(350)를 포함하는 다수의 논리적 페이지(340)로 추가로 분할된다. 물리적 페이지들(350)은 다수의 패킷(360)을 포함하며, 다수의 패킷(360)은 오류 교정 코드(ECC) 청크들(370)로 그룹화될 수 있다.
본원에 사용되는, "소거 블록"이란 용어는 폭넓게 논리적 소거 블록 또는 물리적 소거 블록을 지칭한다. 일 실시예에서, 물리적 소거 블록(330)은 (예를 들어, 다이 상의 셀들의 배선으로 인해) 주어진 시간에 소거될 수 있는 주어진 저장 뱅크(134)가 갖는 가장 작은 저장 블록을 나타낸다. 일 실시예에서, 논리적 소거 블록들(320)은 소거 커맨드를 수신하는 것에 응하여 제어기(132)에 의해 소거 가능한 가장 작은 블록을 나타낸다. 그러한 일 실시예에서, 제어기(132)가 특정 논리적 소거 블록(320)을 지정하는 소거 커맨드를 수신할 때, 제어기(132)는 논리적 소거 블록(320) 내에서 각각의 물리적 소거 블록(330)을 동시에 소거할 수 있다. 주어진 논리적 소거 블록(320) 내의 물리적 소거 블록들(330)(예를 들어, 블록들(330A 및 330B))이 물리적 소거 블록들(330)들이 별도의 다이(306)에 상주하더라도, 물리적 어드레스 공간(304)에서 인접한 것으로 고려될 수 있다는 점이 주목된다. 따라서, "인접한"이란 용어는 동일한 물리적 매체 내에 저장되는 데이터뿐만 아니라, 별도의 매체 내에 저장되는 데이터에도 적용 가능할 수 있다.
일 실시예에서, 물리적 페이지(350)는 주어진 시간에 기록될 수 있는 주어진 저장 뱅크(134) 내의 가장 작은 저장 블록을 나타낸다. 일 실시예에서, 논리적 페이지(340)는 제어기(132)에 의해 지원되는 가장 작은 기록 가능 저장 블록이다. (일 실시예에서, 제어기(132)는 논리적 페이지까지의 분량의 데이터를 저장하도록 구성되는 버퍼를 포함할 수 있으며; 버퍼를 채울 시에, 제어기(132)는 버퍼의 콘텐츠를 단일 논리적 페이지에 동시에 기록할 수 있다.) 일부 경우들에서, 다수의 다이(306)에 걸쳐 논리적 페이지(340)를 분할하는 것은 다수의 다이(306)가 병렬로 액세스될 때, 데이터의 세트에 대해 더 빠른 액세스 시간들을 야기할 수 있다.
일 실시예에서, 패킷(360)은 주어진 시간에 판독될 수 있는 주어진 저장 뱅크(134) 내의 가장 작은 저장 블록을 나타낸다. 일 실시예에서, ECC 청크(370)는 제어기(132)에 의해 판독 가능한 가장 작은 저장 블록이다. 일부 실시예들에서, 패킷들(360)은 패킷들(360)이 논리적 블록(310)의 콘텐츠 (또는 일부 경우들에서 다수의 블록(310))뿐만 아니라 패킷 헤더를 포함할 수 있으므로, 논리적 블록들(310)보다 약간 더 클 수 있다.
일부 실시예들에서, 드라이버(126)는 메타데이터를 저장 블록들(320 내지 370) 중 하나 이상과 연관시킬 수 있다. 본원에 사용되는, "메타데이터"란 용어는 고체 상태 저장 디바이스(130)의 작동을 용이하게 하는데 사용 가능한 시스템 데이터를 지칭하며; 메타데이터는 예를 들어, 애플리케이션들에 의해 생성되는 데이터(즉, "애플리케이션 데이터") 또는 작동 시스템에 의해 "사용자 데이터"로 고려될 데이터의 형태들과 대조적이다. 예를 들어, 일 실시예에서, 논리적 소거 블록(320)은 사용량 통계치(예를 들어, 논리적 소거 블록(320) 상에서 수행되는 프로그램 소거 사이클의 수), 건강 통계치(예를 들어, 손상된 데이터가 논리적 소거 블록(320)으로부터 얼마나 자주 판독되었는지를 나타내는 값), 보안 또는 액세스 제어 파라미터들, 시퀀스 정보(예를 들어, 시퀀스 지시기), (예를 들어, 극소 저장 작동에의 포함을 나타내는) 영속적 메타데이터 플래그, 트랜잭션 식별자 등을 제한하지 않고 지정하는 메타데이터를 포함할 수 있다. 도 4a와 함께 설명할 것인 바와 같이, 패킷(360)은 다양한 형태의 메타데이터를 포함할 수도 있다. 다양한 실시예들에서, 드라이버(126)는 저장 디바이스(130)의 작동을 관리하기 위해 다른 형태들의 메타데이터에 따라 이러한 정보를 사용할 수 있다. 예를 들어, 드라이버(126)는 판독 및 기록 작동들의 수행을 용이하게 하고, (예를 들어, 드라이버에 의해 사용되는 다양한 데이터 구조체의 재구성 및/또는 저장 디바이스(130) 상에서 수행되는 저장 작동들의 시퀀스를 재생하는 것을 포함하는) 저장 디바이스(130)를 이전의 상태로 복원하고 등을 위해 이러한 정보를 사용할 수 있다.
이제 도 3c를 참조하면, 물리적 어드레스 공간(304) 내의 로그 구조체(380)의 블록도가 도시된다. 도시된 바와 같이 다양한 실시예들에서, 데이터는 초기 논리적 페이지(340)―예를 들어, 페이지(340A)에서 시작하는 (또한 "헤드"로 지칭되는) 첨부 지점(382)에서 순차적으로 저장된다. 부가 데이터가 저장됨에 따라, 첨부 지점(382)은 로그 구조체(380)에서의 이후의 논리적 페이지들(340)―예를 들어, 페이지(340B, 340C) 등으로 진행한다. (본원에 사용되는, "인접한"이란 용어는 순차적 순서로 교대로 기록되는 저장 블록들을 설명하는데 사용될 수 있다. 예를 들어, 도시된 바와 같이, 논리적 페이지(340A)는 논리적 페이지(340B)에 인접하며; LEB(320A)는 LEB(320B)에 인접해 있다.) 결국, 충분한 데이터를 저장한 후에, 첨부 지점(382)은 저장 디바이스(130)에서의 "마지막" 페이지(340)에 도달하며, 그 때에 첨부 지점(382)은 다시 초기 논리적 페이지(340)로 행갈이를 한다. 따라서, 로그 구조체(380)는 루프/사이클로 도시된다. 더 많은 데이터가 저장됨에 따라, (비음영 페이지들(340)로 도시되는) 이용 가능한 논리적 페이지(340)의 수는 감소하고 (음영 페이지들(340)로 도시되는) 사용되는 논리적 페이지(340)의 수는 증가한다. 앞서 논의된 바와 같이, 이러한 논리적 페이지들(340)을 재사용하기 위해(즉, 이러한 논리적 페이지들(340)을 추가의 기록들을 수용하는데 이용 가능하게 하기 위해), 일 실시예에서, 드라이버(126)는 논리적 소거 블록들(320) 상에서 소거 작동들을 수행한다. 일 실시예에서, 테일(tail)(384)은 구조체(380) 내에서 여전히 사용 중인 가장 오래된 논리적 페이지(340)를 식별하기 위해 유지된다(테일에 위치되는 것 이외의 페이지들이 테일보다 더 최근인 것으로 고려된다). 가장 오래된 논리적 페이지(340)를 갖는 논리적 소거 블록(320)이 결국 소거될 때, 테일(384)은 로그 구조체(380)의 끝부분에서 사용 중인 다음의 가장 오래된 논리적 페이지(340)로 앞으로 진행된다.
일반적으로, 저장 디바이스(130)에서의 다른 데이터보다 덜 흔히 변경되는 데이터는 테일(384)쪽으로 이동할 것이다(그러한 데이터는 "더 차가운 온도"를 갖거나 단순히 "차가운 데이터"로 설명될 수 있다). 다른 한편으로, ("더 뜨거운 온도"를 갖거나 "뜨거운" 데이터로 설명되는) 더 흔히 변경되는 데이터는 통상적으로 헤드(382)에 더 근접하게 위치될 것이다. 따라서, LEB(320A)에 위치되는 유효한 데이터는 LEB(320B)에서의 데이터보다 "더 차가울" 가능성이 있다.
다수의 저장 디바이스(130)가 사용되는 실시예들에서, 각각의 저장 디바이스(130)는 별도의 각각의 로그 구조체로서 구현될 수 있다. 따라서 일 실시예에서, 각각의 저장층(220)은 각각의 저장층(220)의 각각의 저장 디바이스(130)에 대한 첨부 지점을 추적할 수 있다. 따라서, 기록이 다수의 저장 디바이스(130)에 액세스하도록 수행될 때, 데이터의 각각의 부분은 저장 디바이스들(130)의 첨부 지점들 중 각각의 하나에 기록될 수 있다. 다르게 말해, 데이터의 일부는 저장 디바이스(130A)에 대한 첨부 지점(382)에 기록될 수 있으며, 데이터의 일부는 저장 디바이스(130B)에 대한 첨부 지점(382)에 기록될 수 있는 등이다. 그러나 다른 실시예들에서, 저장 디바이스들(130)은 비로그 구조화된 형식으로 조직화될 수 있다.
이제 도 4a를 참조하면, 패킷(360)의 블록도가 도시된다. 예시된 실시예에서, 패킷(360)은 헤더(410) 및 페이로드(payload)(420)를 포함한다. 앞서 논의된 바와 같이 다양한 실시예들에서, 패킷(360)은 드라이버(126)에 의해 사용 가능한 다양한 형태의 메타데이터를 포함할 수 있다. 예시된 실시예에서, 이러한 메타데이터는 페이로드(420)에서의 데이터에 대한 논리적 블록 어드레스(LBA)(412), 극소 비트들(414)의 세트 및 오류 교정 코드(ECC)(416)를 포함한다. 패킷 헤더(410)는 패킷 크기, 다른 패킷들에의 연결 등과 같은 (다방면 블록(418)에 의해 나타내어지는) 부가 형태들의 메타데이터를 포함할 수도 있다. 다른 실시예들에서, 블록들(412 내지 420)은 도시된 것과 상이하게 배열될 수도 있다.
일 실시예에서, 극소 비트들(414)은 단일 저장 디바이스(130)에의 극소 기록이 실패했는지 여부를 판단하는데 사용 가능하다. 일 실시예에서, 극소 비트들(414)은 극소 기록 동안 저장되는 패킷들(360)의 세트에서의 시작 및 종료 패킷들(360)을 나타낼 수 있다. 따라서, 시작 또는 종료 패킷(360)이 분실되거나 손상되면, 드라이버(126)는 기록이 성공적으로 완료되지 않았다고 결론을 내릴 수 있다. 다양한 실시예들에서, 극소 비트들(414)은 앞서 논의되고 후술하는 바와 같이 다수의 저장 디바이스(130)에 걸친 극소 기록이 실패했는지 여부를 판단하는데 사용 가능한 주석(150)과는 별개이다.
이제 도 4b를 참조하면, 주석 패킷(362)의 블록도가 도시된다. 예시된 실시예에서, 주석 패킷(362)은 헤더(410) 및 페이로드(420)를 포함하며, 페이로드(420)는 주석(150)을 포함한다. 앞서 논의된 바와 같이 일부 실시예들에서, 주석(150)은 극소 기록이 수행되었던 LBA 영역(422) 및 극소 기록이 일어났을 때에 상응하는 순차 번호(424)를 포함한다. 즉, 순차 번호(424)는 (예를 들어, 데이터의 시간, 컴퓨팅 시스템(100)이 작동하고 있었던 시간의 양 등을 나타내는) 타임 스탬프, 수행되었던 기록 작동의 수를 나타내는 값 등을 포함할 수 있다. 일부 실시예들에서, 다수의 저장부에 걸친 각각의 극소 기록은 각각의 순차 번호(424)가 할당된다. 다른 실시예들에서, 극소 기록을 구성하는 저장부에의 각각의 개별 기록은 각각의 순차 번호(424)가 할당된다―따라서 예를 들어, 4개의 저장 디바이스에 걸친 극소 기록은 극소 기록을 구성하는 4개의 개별 기록에 대해 4개의 각각의 순차 번호가 할당될 것이다. 일부 실시예들에서, 순차 번호(424)는 극소 기록을 용이하게 하기 위해 발행되는 각각의 메시지에 할당될 수 있다. 예를 들어, 극소 기록은 개별 기록 작동 당 다수의 메시지를 발행하는 것을 더 포함하는 각각의 저장 디바이스(130)에 다수의 개별 기록 작동을 수행하는 것을 포함할 수 있으므로; 그러한 구현에서, 각각의 메시지는 순차 번호(424)가 할당될 수 있다. 주석(150)은 극소 기록 동안 사용되는 저장 디바이스들(130)의 표시, 극소 기록을 용이하게 하는데 사용되는 메타데이터 이외의 메타데이터(즉, 일부 다른 목적으로 사용되는 메타데이터) 등과 같은 (다방면 블록(426)에 의해 나타내어지는) 부가 정보를 포함할 수도 있다. 이러한 정보는 앞서 논의된 바와 같이 애플리케이션(122)에 의해 제공되는 메타데이터를 포함할 수도 있다. 주석 패킷(362)에서의 주석(150)은 도시된 것과 상이하게 구현될 수도 있다. 따라서 다른 실시예들에서, 블록들(422 내지 426)은 상이하게 배열될 수 있으며; 더 많거나 더 적은 블록이 존재할 수 있다.
드라이버(126)는 주석(150)의 메타데이터에 기반하여 극소 기록이 실패했는지 여부를 판단하기 위해 다양한 기법을 사용할 수 있다. 일 실시예에서, 순차 번호의 인스턴스는 저장 디바이스(130)에 기록되는 패킷들(360)의 각각의 세트와 함께 저장된다. 예를 들어, 순차 번호는 각각의 세트에서 마지막 패킷(360)에 대한 페이로드(420)에 기록될 수 있다. 그러한 일 실시예에서, 드라이버(126)는 이러한 시퀀스 번호들이 저장되는 곳을 식별하는데 LBA 영역(422)을 사용할 수 있다. 드라이버(126)는 그 다음 이러한 번호들을 순차 번호(424)와 비교할 수 있다. 그것들이 일치하지 않으면, 드라이버(126)는 기록이 실패했다고 결론을 내릴 수 있다. 그러나, 그것들이 일치하면, 드라이버(126)는 기록이 성공적으로 완료되었다고 결론을 내릴 수 있다. 다른 실시예에서, 드라이버(126)는 영역(422)에서의 LBA들을 패킷들(360)에서의 LBA들(412)과 비교할 수 있다. 그것들이 일치하지 않으면, 드라이버(126)는 기록이 성공적으로 완료되지 않았다고 결론을 내릴 수 있다. 또 다른 실시예에서, 드라이버(126)는 다양한 저장 디바이스(130) 상에서 관련 있는 패킷들(360)을 식별하는데 LBA 영역(422)을 사용할 수 있다. 드라이버(126)는 그 다음 저장 디바이스들(130)에 수행되는 개별 기록 작동들 중 임의의 것이 실패했는지 여부를 판단하는 데 극소 비트들(414)을 사용할 수 있다. 따라서, 극소 비트들(414)이 기록 작동들 중 하나에 대한 실패를 나타내면, 드라이버(126)는 다수의 저장 디바이스(130)에 걸친 극소 기록이 실패했다고 결론을 내릴 수 있다. 다양한 실시예들에서, 롤백이 수행되고 있으면, 드라이버(126)는 그러한 위치들에서의 데이터를 무효화하기 위해 어드레스 영역(422)에 지정되는 어드레스들 각각 (또는 부분적 롤백의 경우에 어드레스들의 서브세트)에 대한 트림 커맨드들을 발행할 수 있다.
이제 도 5를 참조하면, 방법(500)의 흐름도가 도시된다. 방법(500)은 컴퓨팅 시스템(100) 또는 저장 디바이스(130)와 같은 장치에 의해 수행될 수 있는 방법의 일 실시예이다. 따라서 일 실시예에서, 장치는 방법(500)을 수행하기 위해 드라이버(126)와 같은 드라이버의 프로그램 명령어들을 실행할 수 있다. 일부 실시예들에서, 방법(500)의 수행은 전력 손실, 작동 시스템 고장, 저장 디바이스 고장 등과 같은 크래시로부터 복원하는 시스템 능력을 개선할 수 있다.
단계(510)에서, 데이터의 세트에 대한 극소 기록 작동을 수행하라는 요청(예를 들어, 요청(202))이 수신된다. 일부 실시예들에서, 요청은 저장부들(예를 들어, 저장 디바이스들(130), 하나 이상의 저장 디바이스(130) 내의 가상 저장부들 또는 이들의 조합)의 어드레스 영역이 할당되었던 애플리케이션(예를 들어, 애플리케이션(122A))으로부터 수신된다. 앞서 논의된 바와 같이, 이러한 어드레스 영역은 인접하거나 인접하지 않은 논리적이거나 물리적인 어드레스 영역일 수 있으며; 이러한 어드레스 영역은 단일 저장부에 국한되거나 다수의 저장부에 걸쳐 있을 수도 있다. 어드레스 영역은 데이터를 저장하는 애플리케이션(예를 들어, 논리적 블록(310A))에 액세스 가능할 수 있다. 일 실시예에서, 요청은 데이터가 저장되게 될 영역의 하나 이상의 어드레스를 지정할 수 있다.
단계(520)에서, 요청에 응하여, 데이터의 세트는 저장부 중 적어도 하나 내의 전용 위치에서 메타데이터(예를 들어, 주석(150))를 저장하는 것을 포함하여 다수의 저장부(예를 들어, 저장 디바이스들(130A 및 130B))에 걸쳐 기록된다. 일부 실시예들에서, 단계(520)는 복수의 저장 디바이스 중 제1의 것 내의 전용 위치(예를 들어, 저장 디바이스(130A) 상의 주석(150))에 메타데이터의 제1 인스턴스를 저장하는 단계, 및 복수의 저장 디바이스 중 제2의 것 내의 전용 위치(예를 들어, 저장 디바이스(130B) 상의 동일한 주석(150)의 카피)에 메타데이터의 제2 인스턴스를 저장하는 단계를 포함한다. 다양한 실시예들에서, 메타데이터는 기록이 성공적으로 완료되었는지 여부를 판단하는데 사용 가능하다. 메타데이터는 기록 성공을 판단하는데 명확하게 또는 암암리에 사용될 수 있다. 메타데이터의 명확한 사용은 메타데이터의 상이한 인스턴스들이 동일한 극소 기록 트랜잭션의 일부라는 것을 보장하기 위해 메타데이터의 상이한 인스턴스들 중의 타임스탬프들 또는 시퀀스 식별자들을 비교하는 것을 포함할 수 있다. 메타데이터의 암시적 사용은 각각의 저장부에 대한 메타데이터가 존재하는지 여부의 단순한 확인을 포함할 수 있다. 특정 저장부에 대한 메타데이터가 존재하지 않으면, 이는 극소 기록 트랜잭션이 성공하지 못했다는 분명한 암시적 표시를 제공할 수 있다.
일 실시예에서, 전용 위치(예를 들어, 보존된 영역(316))는 어드레스 영역(예를 들어, 영역(312)) 외부에 상주한다. 일부 실시예들에서, 단계(520)는 순차 번호들이 기록 작동들이 일어나는 순서를 나타내도록 유닛들에 수행되는 기록 작동들에 순차 번호들을 할당하는 단계를 포함한다. 일 실시예에서, 메타데이터는 데이터의 세트가 기록되었던 어드레스 영역(예를 들어, LBA 영역(422)) 및 데이터의 세트의 기록에 상응하는 순차 번호(예를 들어, 순차 번호(424))를 지정한다. 일부 실시예들에서, 단계(520)는 데이터의 세트가 기록되는 저장부들 각각에 순차 번호의 각각의 인스턴스를 저장하는 단계 및 순차 번호의 인스턴스들이 일치하는 것을 검증함으로써 기록이 성공적으로 완료되었는지 여부를 판단하는 단계를 포함한다. 일부 실시예들에서, 저장된 메타데이터는 요청을 제공했던 애플리케이션에 의해 제공되는 메타데이터를 포함한다. 일 실시예에서, 단계(520)는 복수의 저장부 각각으로부터 메타데이터를 판독하는 단계 및 메타데이터를 판독하는 단계에 기반하여, 극소 기록 작동이 실패했다고 판단하는 단계를 포함한다. 일 실시예에서, 판독하는 단계 및 판단하는 단계는 극소 기록을 요청하는 애플리케이션에 의해 수행될 수 있지만; 다른 실시예에서, 판독하는 단계 및 판단하는 단계는 드라이버에 의해 수행될 수 있다. 일부 실시예들에서, 단계(520)는 요청을 제시했던 애플리케이션에 기록이 성공적으로 완료되는데 실패했다고 (예를 들어, 기록 상태(204)를 통하여) 지시하는 단계 및 극소 기록 작동을 롤백하라는 애플리케이션으로부터의 요청(예를 들어, 롤백 명령어(206))을 수신하는 단계를 포함한다. 일부 실시예들에서, 지시하는 단계는 데이터의 세트가 성공적으로 기록되지 않았던 하나 이상의 논리적 블록 어드레스를 식별하는 단계를 포함한다. 일 실시예에서, 단계(520)는 지정된 어드레스 영역(예를 들어, LBA 영역(422))에 기록되는 데이터를 무효화하는 단계를 포함하는 극소 기록 작동을 롤백하는 단계를 포함한다.
유사한 방법이 일 실시예에서, 또한 방법(500)을 수행하는 컴퓨팅 시스템―예를 들어, 애플리케이션(122)을 실행하는 컴퓨팅 시스템과 상호 작용하는 애플리케이션에 대해 고려된다는 점이 주목된다.
이제 도 6a를 참조하면, 모듈들을 포함하는 장치(600)의 블록도가 도시된다. 본원에 사용되는, "모듈"이란 용어는 작동들을 수행하도록 구성되는 회로망 또는 작동들을 수행하도록 하나 이상의 프로세서에 의해 실행 가능한 내부에 저장되는 프로그램 명령어들을 갖는 메모리를 지칭한다. 따라서, 모듈은 여러 가지의 방식으로 구현되는 하드웨어 회로로 구현될 수 있다. 하드웨어 회로는 예를 들어, 맞춤 초고밀도 집적(VLSI) 회로들 또는 게이트 어레이들, 로직 칩들과 같은 기성품의 반도체들, 트랜지스터들, 또는 다른 개별 구성 요소들을 포함할 수 있다. 모듈은 필드 프로그램 가능 게이트 어레이들, 프로그램 가능 어레이 로직, 프로그램 가능 로직 디바이스들 등과 같은 프로그램 가능 하드웨어 디바이스들로 구현될 수도 있다. 모듈은 지정된 작동들을 수행하도록 실행 가능한 프로그램 명령어들을 저장하는 임의의 적절한 형태의 비일시적 컴퓨터 판독 가능 매체일 수도 있다. 장치(600)는 본원에 설명되는 기능성 중 임의의 것을 구현하는 모듈들을 포함할 수 있다. 예를 들어, 예시된 실시예에서, 장치(600)는 벡터 저장 모듈(610) 및 롤백 모듈(620)을 포함한다.
일 실시예에서, 벡터 저장 모듈(610)은 데이터의 세트와 관계없이 메타데이터(예를 들어, 주석(150))를 저장하는 것을 포함하여 복수의 저장 디바이스 상의 데이터의 세트에 대한 저장 작동들의 그룹을 수행하도록 구성된다. 그러한 일 실시예에서, 메타데이터는 저장 작동들의 그룹을 나타낸다. 일부 실시예들에서, 벡터 저장 모듈(610)은 저장 디바이스들 중 적어도 하나에서 저장 블록(예를 들어, 주석 패킷(362)) 내에 메타데이터를 저장하도록 구성된다. 저장 블록은 데이터의 세트와 연관되는 애플리케이션에 액세스 가능하지 않은 어드레스(예를 들어, 영역(316)과 연관되는 LBA)를 가질 수 있다. 일 실시예에서, 벡터 저장 모듈(610)은 (예를 들어, 기록 상태(204)를 통하여) 저장 작동들의 그룹이 성공적으로 수행되었는지 여부를 나타내도록 구성된다. 일부 실시예들에서, 벡터 저장 모듈(610)은 패킷 헤더(예를 들어, 헤더(410))를 갖는 패킷(예를 들어, 패킷(360)) 내의 일부를 캡슐화하는 것을 포함하는 데이터의 세트의 일부에 대한 저장 작동을 수행하도록 구성된다. 패킷 헤더는 저장 작동이 성공적으로 수행되었는지 여부를 판단하는데 사용 가능한 하나 이상의 비트(예를 들어, 극소 비트들(414))를 포함할 수 있다. 그러한 일 실시예에서, 하나 이상의 비트는 저장된 메타데이터와 별개이다.
일 실시예에서, 롤백 모듈(620)은 저장된 메타데이터에 기반하여 저장 작동들의 그룹을 롤백하도록 구성된다. 일 실시예에서, 롤백 모듈(620)은 요청(예를 들어, 롤백 명령어(206))을 수신하는 것에 응하여 롤백을 수행하도록 구성된다. 일부 실시예들에서, 요청은 부분적 롤백을 수행하라는 요청일 수 있다. 그러한 일 실시예에서, 롤백 모듈(620)은 요청에 응하여 저장 작동들의 그룹 모두가 아닌 저장 작동들의 그룹의 서브세트를 롤백하도록 구성된다. 다양한 실시예들에서, 롤백 모듈(620)은 하나 이상의 트림 커맨드를 복수의 저장 디바이스로 발행함으로써 저장 작동들의 그룹을 롤백하도록 구성된다.
일부 실시예들에서, 벡터 저장 모듈(610) 및/또는 롤백 모듈(620)은 제어기(132)와 같은 제어기 내에 있다. 다른 실시예에서, 모듈들(610 및/또는 620)은 메모리(120)와 같은 메모리 내에 위치될 수 있다. 요컨대, 장치(600)의 모듈들은 본원에 설명되는 기능성을 수행하도록 임의의 적절한 방식으로 구현될 수 있다. 장치(600)는 모듈들(610 및 620)의 기능성을 갖는 임의의 적절한 구조체에 상응할 수도 있다. 일 실시예에서, 장치(600)는 저장 디바이스(130)와 같은 저장소를 포함하는 (또는 이것에 결합되는) 컴퓨팅 시스템이다. 다른 실시예에서, 장치(600)는 (제어기(132)와 같은) 제어기 및 (저장 뱅크들(134)과 같은) 하나 이상의 저장 요소를 포함하는 카드이다. 또 다른 실시예에서, 장치(600)는 모듈들(610 및 620)을 저장하는 메모리 시스템을 포함하는 컴퓨팅 시스템이다.
이제 도 6b를 참조하면, 모듈들을 포함하는 장치(650)의 블록도가 도시된다. 장치(650)는 본원에 설명되는 기능성 중 임의의 것을 구현하는 모듈들을 포함할 수 있고 장치(600)에 대하여 앞서 논의된 것들과 같은 임의의 적절한 구조체에 상응할 수 있다. 예시된 실시예에서, 장치(650)는 저장 모듈(660) 및 오류 검출 모듈(670)을 포함한다.
일 실시예에서, 저장 모듈(660)은 저장 디바이스들의 그룹과 연관되는 어드레스 영역에 데이터의 세트에 대한 극소 기록을 시도하도록 구성된다. 그러한 일 실시예에서, 저장 모듈(660)은 어드레스 영역(예를 들어, 영역(312A))의 외부에 있는 어드레스를 갖는 저장 블록(예를 들어, 전용 블록(314))에 메타데이터(예를 들어, 주석(150))를 저장하도록 추가로 구성되며, 이 메타데이터는 데이터의 세트를 기록하는 것을 나타낸다. 일부 실시예들에서, 저장 모듈(660)은 극소 기록이 시도되었던 순서를 나타내는 (예를 들어, 패킷(360)의 페이로드(420)에서의)의 순차 번호의 각각의 인스턴스에 따라 데이터의 세트의 각각의 부분을 저장 디바이스들의 그룹의 각각의 저장 디바이스에(예를 들어, 패킷들(360A 및 360B)을 각각 저장 디바이스들(130A 및 130B)에) 기록하도록 구성된다. 일부 실시예들에서, 저장 모듈(660)은 각각의 저장 블록이 복수의 애플리케이션에 대한 가장 최근의 극소 기록에 상응하는 메타데이터를 포함하도록 복수의 애플리케이션(예를 들어, 애플리케이션(122A 및 122B)) 각각에 대한 각각의 저장 블록(예를 들어, 전용 블록들(314A 및 314B))을 유지하도록 구성된다. 일부 실시예들에서, 저장 모듈(660)은 복수의 저장 블록이 애플리케이션에 대한 복수의 가장 최근에 수행된 극소 기록에 상응하는 메타데이터를 포함하도록 애플리케이션에 대한 복수의 저장 블록(예를 들어, 애플리케이션(122A)에 대한 영역(316A)에서의 다수의 전용 블록(314A))을 유지하도록 구성된다. 일 실시예에서, 어드레스 영역은 드문 어드레스 공간(예를 들어, 논리적 어드레스 공간(302))의 논리적 블록 어드레스 영역(예를 들어, 영역(312A))이다. 일 실시예에서, 외부 어드레스는 논리적 블록 어드레스 영역에 인접하지 않는 논리적 블록 어드레스이다.
일 실시예에서, 오류 검출 모듈(670)은 메타데이터에 기반하여, 극소 기록이 성공적으로 완료되었는지 여부를 판단하도록 구성된다. 일부 실시예들에서, 오류 검출 모듈(670)은 순차 번호의 인스턴스들을 메타데이터에서의 순차 번호(예를 들어, 순차 번호(424))의 인스턴스와 비교함으로써 극소 기록이 성공적으로 완료되었는지 여부를 판단하도록 구성된다.
이제 도 7a를 참조하면, 저장 수단(710) 및 극소 기록 수단(720)을 포함하는 장치(700)의 블록도가 도시된다. 장치(700)는 저장 수단(710) 및 극소 기록 수단(720)의 기능성을 갖는 임의의 적절한 구조체에 상응할 수 있다. 예를 들어, 장치(700)는 서버, 랩탑, 데스크탑, 모바일 디바이스 등과 같은 임의의 적절한 타입의 컴퓨팅 디바이스일 수 있다. 일부 실시예들에서, 장치(700)는 함께 작동하는 다수의 컴퓨팅 디바이스를 포함할 수 있다. 일부 실시예들에서, 장치(700)는 (제어기(132)와 같은) 제어기 및 (저장 뱅크들(134)과 같은) 하나 이상의 저장 요소를 포함하는 카드이다.
다양한 실시예들에서, 저장 수단(710)은 저장 디바이스(130)에 대하여 본원에 설명되는 기능성 중 임의의 것을 구현할 수 있다. 따라서 일 실시예에서, 저장 수단(710)은 로그 구조체를 사용하여 데이터를 저장하기 위한 것이다. 저장 수단(710)은 저장 디바이스(130)(예를 들어, 하나 이상의 저장 뱅크(134), 컴퓨팅 시스템(100), 저장 시스템(200) 등)에 대하여 앞서 논의된 것들과 같은 임의의 적절한 구조체에 상응할 수 있다. 따라서, "로그 구조체를 사용하여 데이터를 저장하기 위한 수단"이란 어구는 위에 목록으로 나열된 구조체들뿐만 아니라 위에 목록으로 나열된 구조체들의 상응하는 균등물들 중 임의의 것을 지칭한다.
다양한 실시예들에서, 극소 기록 수단(720)은 드라이버(126)에 대하여 본원에 설명되는 기능성 중 임의의 것을 구현할 수 있다. 따라서 일 실시예에서, 극소 기록 수단(720)은 데이터를 복수의 저장 블록의 서브세트(예를 들어, 영역(312A))에 극소로 기록하고 메타데이터를 서브세트 내에 있지 않는 저장 블록(예를 들어, 전용 블록(314A))에 기록하기 위한 것이다. 그러한 일 실시예에서, 메타데이터는 데이터의 기록을 롤백하는데 사용 가능하다. 일부 실시예들에서, 극소 기록 수단(720)은 드라이버(126)와 함께 설명된 것 이외의 기능성을 구현할 수도 있다.
극소 기록 수단(720)은 임의의 적절한 구조체에 상응할 수 있다. 일 실시예에서, 극소 기록 수단(720)은 작동들을 수행하도록 구성되는 하드웨어 회로(예를 들어, 제어기(132))이다. 하드웨어 회로는 예를 들어, 맞춤 초고밀도 집적(VLSI) 회로들 또는 게이트 어레이들, 로직 칩들과 같은 기성품의 반도체들, 트랜지스터들, 또는 다른 개별 구성 요소들을 포함할 수 있다. 수단(720)은 필드 프로그램 가능 게이트 어레이들, 프로그램 가능 어레이 로직, 프로그램 가능 로직 디바이스들 등과 같은 프로그램 가능 하드웨어 디바이스들로 구현될 수도 있다. 다른 실시예에서, 수단(720)은 알고리즘을 구현하도록 하나 이상의 프로세서(예를 들어, 프로세서부(110))에 의해 실행 가능한 내부에 저장되는 프로그램 명령어들을 갖는 메모리(예를 들어, RAM(120))를 포함한다. 일 실시예에서, 수단(720)은 도 7b에 대하여 논의되는 알고리즘을 구현한다. 일부 실시예들에서, 수단(720)은 모듈들(610, 620, 660 및/또는 670)에 상응한다. 따라서, "데이터를 복수의 저장 블록의 서브세트에 극소로 기록하고 메타데이터를 서브세트 내에 있지 않는 저장 블록에 기록하기 위한 수단"이란 어구는 위에 목록으로 나열된 구조체들뿐만 아니라 위에 목록으로 나열된 구조체들의 상응하는 균등물들 중 임의의 것을 지칭한다.
이제 도 7b를 참조하면, 알고리즘(730)을 도시하는 흐름도가 도시된다. 알고리즘(730)은 극소 기록 수단(720)에 의해 구현되는 알고리즘의 일 실시예이다. 예시된 실시예에서, 알고리즘(730)은 단계(732)에서 앞서 논의된 것과 같이 다수의 저장 디바이스에 걸쳐 데이터의 세트를 그리고 저장 디바이스들 중 적어도 하나에 주석을 기록하는 단계를 포함한다. 알고리즘(730)은 단계(734)에서 데이터의 세트를 기록하는 단계의 성공적인 완료를 검증하기 위해 주석을 사용하는 단계를 더 포함한다. 앞서 논의된 바와 같이 일부 실시예들에서, 단계(734)는 주석에 의해 식별되는 위치들에서의 순차 번호들, 논리적 어드레스들, 극소 비트들 등을 비교하는 단계를 포함할 수 있다.
이제 도 8을 참조하면, 컴퓨팅 시스템(100)을 포함하는 저장 시스템(800)의 블록도가 도시된다. 앞서 논의된 바와 같이, 컴퓨팅 시스템(100)은 저장 디바이스(130)에 저장되는 데이터 상에서 작동하는 하나 이상의 애플리케이션을 포함할 수 있다. 예시된 실시예에서, 컴퓨팅 시스템(100)은 클라이언트 시스템들(820A 및 820B)이 네트워크(830)를 통하여 하나 이상의 저장 디바이스(130)에서의 데이터에 액세스하고 하나 이상의 저장 디바이스(130)에 데이터를 저장하는 것을 가능하게 하도록 저장 서버 애플리케이션(810)을 실행시킨다. 예를 들어, 일 실시예에서, 저장 시스템(800)은 서버 애플리케이션(810)이 저장 디바이스(130)에서 클라이언트들(820)로 엔터프라이즈 데이터를 분배하는 엔터프라이즈(enterprise) 환경과 연관될 수 있다. 일부 실시예들에서, 클라이언트들(820)은 데이터를 다른 컴퓨팅 시스템들에 추가로 분배하기 위해 웹 서버, 메일 서버, 가상 사설 네트워크(VPN) 서버 등과 같은 다른 서버 애플리케이션들을 실행시킬 수 있다. 따라서 일부 실시예들에서, 저장 서버 애플리케이션(810)은 파일 전송 프로토콜(FTP), 네트워크 파일 시스템(NFS) 프로토콜, 서버 메시지 블록(SMB) 프로토콜, 애플 파일 프로토콜(AFP) 등과 같은 다양한 네트워크 부착 저장(NAS) 프로토콜을 구현할 수 있다. 일부 실시예들에서, 컴퓨팅 시스템(100)은 저장 영역 네트워크(SAN)를 구현하도록 구성되는 수개의 컴퓨팅 시스템(100) 중 하나일 수 있다.
***
본 발명은 다양한 예시적인 실시예들을 참조하여 행해졌다. 그러나, 당업자는 변화들 및 변경들이 본 발명의 범위로부터 벗어나지 않는 범위 내에서 예시적인 실시예들에 행해질 수 있다는 점을 인지할 것이다. 예를 들어, 다양한 작동 단계뿐만 아니라, 작동 단계들을 수행하기 위한 구성 요소들은 특정 응용에 의존하여 또는 시스템의 작동과 연관되는 임의의 수의 비용 함수를 고려하여 대안적인 방식들로 구현될 수 있다(예를 들어, 단계들 중 하나 이상은 삭제되거나, 변경되거나, 다른 단계들과 결합될 수 있다). 그러므로, 본 발명은 제한적인 의미보다는 오히려 예시적인 의미로 간주되어야 하고, 모든 그러한 변경은 본 발명의 범위 내에 포함되는 것으로 의도된다. 마찬가지로, 이익들, 다른 이점들 및 문제들에 대한 해결법들을 다양한 실시예들에 대하여 상술하였다. 그러나, 이익들, 이점들, 문제들에 대한 해결법들 및 임의의 이익, 이점 또는 해결법을 야기하거나 보다 명백하게 할 수 있는 임의의 요소(들)이 중요하거나, 필요하거나, 필연적인 특징부 또는 요소로 해석되지 않아야 한다. 본원에 사용되는, "포함하다," "포함하는"이란 용어들 및 이 용어들의 임의의 다른 변형은 비배타적인 포함을 다루는 것으로 의도되어, 요소들의 목록을 포함하는 프로세스, 방법, 물품 또는 장치가 그러한 요소들만을 포함하지 않고 그러한 프로세스, 방법, 시스템, 물품 또는 장치에 명확히 목록으로 나열되거나 내재되지 않은 다른 요소들을 포함할 수 있다. 또한 본원에 사용되는, "결합되는," "결합하는"이란 용어들 및 이 용어들의 임의의 다른 변형은 물리적 연결, 전기적 연결, 자기적 연결, 광 연결, 통신적 연결, 기능적 연결 및/또는 임의의 다른 연결을 포함하는 것으로 의도된다.
게다가, 당업자에 의해 이해될 것인 바와 같이, 본 발명의 원리들은 저장 매체에서 구현되는 기계-판독 가능 프로그램 코드 수단을 갖는 기계-판독 가능 저장 매체 상의 컴퓨터 프로그램 제품에 반영될 수 있다. 자기 저장 디바이스(하드 디스크, 플로피 디스크 등), 광 저장 디바이스(CD-ROM, DVD, 블루레이 디스크 등), 플래시 메모리 등을 포함하는 임의의 유형의, 비일시적 기계-판독 가능 저장 매체가 활용될 수 있다. 이러한 컴퓨터 프로그램 명령어들은 범용 컴퓨터, 특수 목적 컴퓨터 또는 기계를 생산하는 다른 프로그램 가능 데이터 프로세싱 장치로 로딩될 수 있어, 컴퓨터 또는 다른 프로그램 가능 데이터 프로세싱 장치 상에서 실행되는 명령어들이 지정된 기능들을 구현하는 수단을 생성한다. 이러한 컴퓨터 프로그램 명령어들은 컴퓨터 또는 특정 방식으로 기능하는 다른 프로그램 가능 데이터 프로세싱 장치를 지시할 수 있는 기계-판독 가능 메모리에 저장될 수도 있어, 기계-판독 가능 메모리에 저장되는 명령어들이 지정된 기능을 구현하는 구현 수단을 포함하는 제조의 물품을 생성한다. 컴퓨터 프로그램 명령어들은 일련의 작동 단계들이 컴퓨터-구현된 프로세스를 생성하는 컴퓨터 또는 다른 프로그램 가능 장치 상에서 수행되게 하도록 컴퓨터 또는 다른 프로그램 가능 데이터 프로세싱 장치로 로딩될 수도 있어, 컴퓨터 또는 다른 프로그램 가능 장치 상에서 실행되는 명령어들이 지정된 기능들을 구현하기 위한 단계들을 제공한다.
본 발명의 원리들이 다양한 실시예들에서 나타내어졌지만, 특히 특정 환경 및 작동 필요 조건들에 적응되는 구조체, 배열, 비율, 요소, 재료 및 구성 요소의 많은 변경이 본 발명의 원리들 및 범위로부터 벗어나지 않는 범위 내에서 이용될 수 있다. 이러한 그리고 다른 변화들 또는 변경들은 본 발명의 범위 내에 포함되는 것으로 의도된다.

Claims (22)

  1. 데이터의 세트에 대한 극소 기록 작동을 수행하라는 요청을 수신하는 단계; 및
    상기 요청에 응하여, 복수의 저장부 중 적어도 하나 내의 전용 위치에 메타데이터를 저장하는 것을 포함하여 복수의 저장부에 걸쳐 상기 데이터의 세트를 기록하는 단계를 포함하며, 상기 메타데이터는 상기 기록이 완료되었는지 여부를 판단하는데 사용 가능하고, 상기 메타데이터는 상기 극소 기록 작동의 상기 데이터의 세트를 식별하는 다수의 비트를 포함하고, 상기 요청은 상기 복수의 저장부의 액세스 가능한 어드레스 영역이 할당되었던 애플리케이션으로부터 수신되며, 상기 전용 위치는 상기 액세스 가능한 어드레스 영역의 외부에 있고 상기 애플리케이션에 의해 액세스 가능하지 않은, 방법.
  2. 삭제
  3. 제1항에 있어서,
    상기 복수의 저장부에 수행되는 기록 작동들에 하나 이상의 순차 번호를 할당하는 단계를 더 포함하며, 상기 순차 번호들은 상기 기록 작동들이 일어나는 순서를 나타내고;
    상기 메타데이터는 상기 데이터의 세트가 기록되는 어드레스 영역 및 상기 데이터의 세트의 상기 기록에 상응하는 상기 순차 번호를 지정하는, 방법.
  4. 제3항에 있어서,
    상기 극소 기록 작동을 롤백하는 단계를 더 포함하며, 상기 롤백하는 단계는 상기 지정된 어드레스 영역에 기록되는 데이터를 무효화하는 단계를 포함하는, 방법.
  5. 제1항에 있어서,
    상기 기록하는 단계는 상기 데이터의 세트가 기록되는 상기 복수의 저장부 각각에 순차 번호의 각각의 인스턴스를 저장하는 단계를 포함하며, 상기 메타데이터는 상기 순차 번호의 다른 인스턴스를 포함하고;
    상기 방법은 상기 순차 번호의 상기 인스턴스들이 일치하는 것을 검증함으로써 상기 기록이 완료되었는지 여부를 판단하는 단계를 더 포함하는, 방법.
  6. 제1항에 있어서,
    상기 복수의 저장부 각각으로부터 상기 메타데이터를 판독하는 단계; 및
    상기 메타데이터를 판독하는 단계에 기반하여, 상기 극소 기록 작동이 실패했다고 판단하는 단계를 더 포함하는, 방법.
  7. 제1항에 있어서,
    상기 기록이 성공적으로 완료되는데 실패했다는 것을 애플리케이션에 지시하는 단계로서, 상기 데이터의 세트가 성공적으로 기록되지 않았던 하나 이상의 논리적 블록 어드레스를 식별하는 단계를 포함하는 단계; 및
    상기 애플리케이션으로부터 상기 극소 기록 작동을 롤백하라는 요청을 수신하는 단계를 더 포함하는, 방법.
  8. 제1항에 있어서,
    상기 저장된 메타데이터는 상기 요청을 제공했던 애플리케이션에 의해 제공되는 메타데이터를 포함하는, 방법.
  9. 제1항에 있어서,
    상기 메타데이터를 저장하는 단계는:
    상기 복수의 저장 유닛 중 제1의 것 내의 전용 위치에 상기 메타데이터의 제1 인스턴스를 저장하는 단계; 및
    상기 복수의 저장 유닛 중 제2의 것 내의 전용 위치에 상기 메타데이터의 제2 인스턴스를 저장하는 단계를 포함하며, 상기 제1 및 제2 인스턴스들은 리던던트인, 방법.
  10. 데이터의 세트와 관계없이 메타데이터를 저장하는 것을 포함하는 복수의 저장 디바이스 상에 데이터의 세트에 대한 저장 작동들의 그룹을 수행하도록 구성되는 벡터 저장 모듈 - 상기 메타데이터는 상기 저장 작동들의 그룹을 나타내고, 상기 메타데이터는 상기 데이터의 세트를 식별하는 다수의 비트를 포함하고, 상기 벡터 저장 모듈은 상기 복수의 저장 디바이스 중 적어도 하나에서의 저장 블록 내에 상기 메타데이터를 저장하도록 구성되며, 상기 저장 블록은 상기 데이터의 세트와 연관되는 애플리케이션에 액세스 가능하지 않은 어드레스를 가짐 -; 및
    상기 저장된 메타데이터에 기반하여 상기 저장 작동들의 그룹을 롤백하도록 구성되는 롤백 모듈을 포함하고,
    상기 벡터 저장 모듈 및 상기 롤백 모듈은 비일시적 컴퓨터 판독 가능한 매체에 저장된 하나 이상의 명령어들 및 회로망을 포함하고, 상기 비일시적 컴퓨터 판독 가능한 매체에 저장된 상기 명령어들은 하나 이상의 프로세서에 의해 실행 가능한, 장치.
  11. 삭제
  12. 제10항에 있어서,
    상기 벡터 저장 모듈은 상기 저장 작동들의 그룹이 성공적으로 수행되었는지 여부를 나타내도록 구성되고;
    상기 롤백 모듈은 요청을 수신하는 것에 응하여 상기 롤백을 수행하도록 구성되는, 장치.
  13. 제12항에 있어서,
    상기 요청은 부분적 롤백을 수행하라는 요청이고;
    상기 롤백 모듈은 상기 요청에 응하여 상기 저장 작동들의 그룹 모두가 아닌 상기 저장 작동들의 그룹의 서브세트를 롤백하도록 구성되는, 장치.
  14. 제10항에 있어서,
    상기 롤백 모듈은 하나 이상의 트림 커맨드를 상기 복수의 저장 디바이스로 발행함으로써 상기 저장 작동들의 그룹을 롤백하도록 구성되는, 장치.
  15. 제10항에 있어서,
    상기 벡터 저장 모듈은 패킷 헤더를 갖는 패킷 내의 부분을 캡슐화하는 것을 포함하는 상기 데이터의 세트의 일부에 대한 저장 작동을 수행하도록 구성되고, 상기 패킷 헤더는 상기 저장 작동이 성공적으로 수행되었는지 여부를 판단하는데 사용 가능한 하나 이상의 비트를 포함하고, 상기 하나 이상의 비트는 상기 저장된 메타데이터와 별개인, 장치.
  16. 저장 디바이스들의 그룹과 연관되는 어드레스 영역에 데이터의 세트에 대한 극소 기록을 시도하고, 상기 어드레스 영역의 외부에 있는 어드레스를 갖는 저장 블록에 메타데이터를 저장하고, 상기 메타데이터에 기반하여, 상기 극소 기록이 성공적으로 완료되었는지 여부를 판단하도록 구성되는 제어기를 포함하고,
    상기 어드레스 영역은 상기 데이터와 연관되는 애플리케이션에 액세스 가능하고, 상기 어드레스 영역의 외부에 있는 어드레스는 상기 애플리케이션에 액세스 가능하지 않으며, 상기 메타데이터는 상기 데이터의 세트를 기록하는 것을 나타내고, 상기 메타데이터는 상기 극소 기록의 상기 데이터의 세트를 식별하는 다수의 비트를 포함하고,
    상기 제어기는 비일시적 컴퓨터 판독 가능한 매체에 저장된 하나 이상의 명령어들 및 회로망을 포함하고, 상기 비일시적 컴퓨터 판독 가능한 매체에 저장된 상기 명령어들은 하나 이상의 프로세서에 의해 실행 가능한, 장치.
  17. 제16항에 있어서,
    상기 제어기는
    상기 극소 기록이 시도되었던 순서를 나타내는 순차 번호의 각각의 인스턴스에 따라 상기 저장 디바이스들의 그룹에서의 각각의 저장 디바이스에 상기 데이터의 세트의 각각의 부분을 기록하도록 구성되고,
    상기 순차 번호의 상기 인스턴스들을 상기 메타데이터에서의 상기 순차 번호의 인스턴스와 비교함으로써 상기 극소 기록이 성공적으로 완료되었는지 여부를 판단하도록 구성되는, 장치.
  18. 제16항에 있어서,
    상기 제어기는 복수의 애플리케이션 각각에 대한 각각의 저장 블록을 유지하도록 구성되며, 상기 각각의 저장 블록은 그러한 애플리케이션에 대한 가장 최근의 극소 기록에 상응하는 메타데이터를 포함하는, 장치.
  19. 제16항에 있어서,
    상기 제어기는 애플리케이션에 대한 복수의 저장 블록을 유지하도록 구성되며, 상기 복수의 저장 블록은 상기 애플리케이션에 대한 복수의 가장 최근의 극소 기록에 상응하는 메타데이터를 포함하는, 장치.
  20. 제16항에 있어서,
    상기 어드레스 영역은 드문 어드레스 공간의 논리적 블록 어드레스 영역이고, 상기 어드레스 영역에 대한 외부 어드레스는 상기 논리적 블록 어드레스 영역에 인접하지 않는 논리적 블록 어드레스인, 장치.
  21. 로그 구조체를 사용하여 데이터를 저장하는 제1 수단 - 상기 제1 수단은 복수의 저장 블록을 포함함 -; 및
    상기 복수의 저장 블록의 서브세트에 데이터를 극소로 기록하고 상기 서브세트 내에 있지 않는 저장 블록에 메타데이터를 기록하는 제2 수단 -상기 메타데이터는 상기 데이터의 상기 기록을 롤백하는데 사용 가능하고, 상기 메타데이터는 상기 데이터를 식별하는 다수의 비트를 포함하고, 상기 저장 블록은 극소로 기록될 데이터를 요청하는 애플리케이션에 의해 액세스 가능하지 않은 어드레스를 가짐 -
    을 포함하는, 장치.
  22. 애플리케이션이 극소 기록 작동에 대한 요청을 발생시키는 단계 - 상기 극소 기록 작동은 데이터의 세트를 복수의 저장부에 걸쳐 기록하는 것 및 메타데이터를 상기 복수의 저장부 중 적어도 하나 내의 전용 위치에 기록하는 것을 포함하고, 상기 전용 위치는 상기 애플리케이션에 의해 액세스 가능하지 않고, 상기 메타데이터는 상기 데이터의 세트를 식별하는 다수의 비트를 포함함 -;
    상기 애플리케이션이 상기 메타데이터를 판독하는 시도에 기반하여, 상기 극소 기록 작동이 완료되었는지 여부를 판단하는 단계
    를 포함하는 방법.
KR1020167005673A 2013-08-13 2014-08-13 주석이 달린 극소 기록 작동을 수행하기 위한 방법 및 장치 KR101769448B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201361865565P 2013-08-13 2013-08-13
US61/865,565 2013-08-13
US14/230,844 US10223208B2 (en) 2013-08-13 2014-03-31 Annotated atomic write
US14/230,844 2014-03-31
PCT/US2014/050882 WO2015023744A1 (en) 2013-08-13 2014-08-13 Method and apparatus for performing annotated atomic write operations

Publications (2)

Publication Number Publication Date
KR20160038053A KR20160038053A (ko) 2016-04-06
KR101769448B1 true KR101769448B1 (ko) 2017-08-18

Family

ID=52467719

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167005673A KR101769448B1 (ko) 2013-08-13 2014-08-13 주석이 달린 극소 기록 작동을 수행하기 위한 방법 및 장치

Country Status (7)

Country Link
US (1) US10223208B2 (ko)
JP (2) JP2016535896A (ko)
KR (1) KR101769448B1 (ko)
CN (1) CN105659204B (ko)
DE (1) DE112014003349T5 (ko)
TW (1) TWI630622B (ko)
WO (1) WO2015023744A1 (ko)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10223208B2 (en) 2013-08-13 2019-03-05 Sandisk Technologies Llc Annotated atomic write
US9880926B1 (en) * 2013-08-20 2018-01-30 Seagate Technology Llc Log structured reserved zone for a data storage device
US9632927B2 (en) 2014-09-25 2017-04-25 International Business Machines Corporation Reducing write amplification in solid-state drives by separating allocation of relocate writes from user writes
KR102263046B1 (ko) * 2014-10-29 2021-06-09 삼성전자주식회사 메모리 장치, 메모리 시스템, 상기 메모리 장치의 동작 방법 및 상기 메모리 시스템의 동작 방법
US10078582B2 (en) 2014-12-10 2018-09-18 International Business Machines Corporation Non-volatile memory system having an increased effective number of supported heat levels
US9779021B2 (en) 2014-12-19 2017-10-03 International Business Machines Corporation Non-volatile memory controller cache architecture with support for separation of data streams
US10101938B2 (en) * 2014-12-30 2018-10-16 International Business Machines Corporation Data storage system selectively employing multiple data compression techniques
US9690503B2 (en) * 2015-06-26 2017-06-27 Intel Corporation Returning coherent data in response to a failure of a storage device when a single input/output request spans two storage devices
US9886208B2 (en) 2015-09-25 2018-02-06 International Business Machines Corporation Adaptive assignment of open logical erase blocks to data streams
JP2017107318A (ja) 2015-12-08 2017-06-15 株式会社東芝 メモリシステム、情報処理装置および処理方法
KR102570367B1 (ko) * 2016-04-21 2023-08-28 삼성전자주식회사 불휘발성 메모리 장치 및 컨트롤러를 포함하는 스토리지 장치를 액세스하는 액세스 방법
KR20180046405A (ko) * 2016-10-27 2018-05-09 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
WO2018107460A1 (zh) * 2016-12-16 2018-06-21 华为技术有限公司 对象复制方法、装置及对象存储设备
CN109213425B (zh) * 2017-06-30 2023-10-31 北京忆恒创源科技股份有限公司 利用分布式缓存在固态存储设备中处理原子命令
CN107783861B (zh) * 2017-07-31 2020-11-24 平安科技(深圳)有限公司 交易回滚方法、装置、存储介质和计算机设备
GB2572578B (en) * 2018-04-04 2020-09-16 Advanced Risc Mach Ltd Cache annotations to indicate specultative side-channel condition
CN108664218A (zh) * 2018-04-23 2018-10-16 浙江大华技术股份有限公司 一种基于数据特征的ssd存储方法、装置及系统
GB2576330B (en) * 2018-08-14 2020-08-19 Advanced Risc Mach Ltd Barrier-free atomic transfer of multiword data
US11636069B2 (en) * 2020-07-24 2023-04-25 Capital Thought Holdings L.L.C. Data storage system and method
US11468017B2 (en) * 2020-07-24 2022-10-11 Capital Thought Holdings L.L.C. Data storage system and method
KR20220020143A (ko) * 2020-08-11 2022-02-18 삼성전자주식회사 오버라이트 처리를 수행하는 스토리지 시스템, 스토리지 시스템을 제어하는 호스트 시스템 및 스토리지 시스템의 동작 방법
US11704038B2 (en) * 2021-04-12 2023-07-18 EMC IP Holding Company LLC Processing out of order writes in a log structured file system for improved garbage collection
US11467970B1 (en) 2021-08-03 2022-10-11 Kioxia Corporation Metadata management in non-volatile memory devices using in-memory journal

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120030408A1 (en) * 2010-07-28 2012-02-02 Fusion-Io, Inc. Apparatus, system, and method for atomic storage operations
US20120066450A1 (en) 2009-02-11 2012-03-15 Infinidat Ltd. Virtualized storage system and method of operating thereof

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6502174B1 (en) * 1999-03-03 2002-12-31 International Business Machines Corporation Method and system for managing meta data
US6553511B1 (en) 2000-05-17 2003-04-22 Lsi Logic Corporation Mass storage data integrity-assuring technique utilizing sequence and revision number metadata
US8856467B2 (en) * 2004-11-18 2014-10-07 International Business Machines Corporation Management of metadata in a storage subsystem
US7636946B2 (en) * 2005-08-31 2009-12-22 Microsoft Corporation Unwanted file modification and transactions
US8151082B2 (en) 2007-12-06 2012-04-03 Fusion-Io, Inc. Apparatus, system, and method for converting a storage request into an append data storage command
US7873878B2 (en) * 2007-09-24 2011-01-18 International Business Machines Corporation Data integrity validation in storage systems
US20090292885A1 (en) * 2008-05-22 2009-11-26 Fujitsu Limited Method and apparatus for providing atomic access to memory
US8200922B2 (en) 2008-12-17 2012-06-12 Netapp, Inc. Storage system snapshot assisted by SSD technology
US8725934B2 (en) * 2011-12-22 2014-05-13 Fusion-Io, Inc. Methods and appratuses for atomic storage operations
US9423920B2 (en) * 2010-12-22 2016-08-23 Sap Se System and method for modifying user interface elements
WO2012129191A2 (en) * 2011-03-18 2012-09-27 Fusion-Io, Inc. Logical interfaces for contextual storage
US9274937B2 (en) 2011-12-22 2016-03-01 Longitude Enterprise Flash S.A.R.L. Systems, methods, and interfaces for vector input/output operations
CN104303162B (zh) 2012-01-12 2018-03-27 桑迪士克科技有限责任公司 用于管理缓存接纳的系统和方法
US10176189B2 (en) * 2012-09-19 2019-01-08 Hitachi Data Systems Engineering UK Limited System and method for managing deduplication using checkpoints in a file storage system
US9164888B2 (en) * 2012-12-10 2015-10-20 Google Inc. Using a logical to physical map for direct user space communication with a data storage device
US20140358868A1 (en) * 2013-06-04 2014-12-04 International Business Machines Corporation Life cycle management of metadata
KR20150030786A (ko) 2013-08-05 2015-03-23 엘에스산전 주식회사 태양광 pcs 제어 시스템
US10223208B2 (en) 2013-08-13 2019-03-05 Sandisk Technologies Llc Annotated atomic write
US10466922B2 (en) * 2015-12-07 2019-11-05 Netapp, Inc. Accelerating concurrent access to a file in a memory-based file system
US11157407B2 (en) * 2016-12-15 2021-10-26 Optimum Semiconductor Technologies Inc. Implementing atomic primitives using cache line locking

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120066450A1 (en) 2009-02-11 2012-03-15 Infinidat Ltd. Virtualized storage system and method of operating thereof
US20120030408A1 (en) * 2010-07-28 2012-02-02 Fusion-Io, Inc. Apparatus, system, and method for atomic storage operations

Also Published As

Publication number Publication date
KR20160038053A (ko) 2016-04-06
TW201517052A (zh) 2015-05-01
CN105659204A (zh) 2016-06-08
JP2016535896A (ja) 2016-11-17
JP2018152127A (ja) 2018-09-27
WO2015023744A1 (en) 2015-02-19
JP6556911B2 (ja) 2019-08-07
US10223208B2 (en) 2019-03-05
TWI630622B (zh) 2018-07-21
CN105659204B (zh) 2019-04-30
DE112014003349T5 (de) 2016-04-07
US20150052395A1 (en) 2015-02-19

Similar Documents

Publication Publication Date Title
KR101769448B1 (ko) 주석이 달린 극소 기록 작동을 수행하기 위한 방법 및 장치
US9342256B2 (en) Epoch based storage management for a storage device
US10318324B2 (en) Virtualization support for storage devices
US10102075B2 (en) Systems and methods for storage collision management
US9489297B2 (en) Pregroomer for storage array
US10127166B2 (en) Data storage controller with multiple pipelines
US9195396B2 (en) Estimating access frequency statistics for storage device
US9767017B2 (en) Memory device with volatile and non-volatile media
US10013354B2 (en) Apparatus, system, and method for atomic storage operations
US9519575B2 (en) Conditional iteration for a non-volatile device
EP2879040B1 (en) Data storage method, data storage apparatus, and storage device
US9798673B2 (en) Paging enablement of storage translation metadata
US10114576B2 (en) Storage device metadata synchronization
US9990150B2 (en) Method to provide transactional semantics for updates to data structures stored in a non-volatile memory
US20240045597A1 (en) Storage device and operation method thereof
KR102435910B1 (ko) 스토리지 장치 및 그것의 동작 방법
US20240192860A1 (en) Method and device for log structured merge-tree based key-value data storage
US20230195308A1 (en) Storage device, host system having the same, and operating method thereof
EP4318249A1 (en) Storage device and operation method thereof
EP4246330A1 (en) Storage device and operating method thereof

Legal Events

Date Code Title Description
A201 Request for examination
N231 Notification of change of applicant
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant