KR102462708B1 - 다수의 스토리지 디바이스에 걸친 원자 기입 동작의 수행 - Google Patents

다수의 스토리지 디바이스에 걸친 원자 기입 동작의 수행 Download PDF

Info

Publication number
KR102462708B1
KR102462708B1 KR1020177012626A KR20177012626A KR102462708B1 KR 102462708 B1 KR102462708 B1 KR 102462708B1 KR 1020177012626 A KR1020177012626 A KR 1020177012626A KR 20177012626 A KR20177012626 A KR 20177012626A KR 102462708 B1 KR102462708 B1 KR 102462708B1
Authority
KR
South Korea
Prior art keywords
write
data
storage devices
command
storage device
Prior art date
Application number
KR1020177012626A
Other languages
English (en)
Other versions
KR20170092537A (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 KR20170092537A publication Critical patent/KR20170092537A/ko
Application granted granted Critical
Publication of KR102462708B1 publication Critical patent/KR102462708B1/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/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
    • 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
    • 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/0689Disk arrays, e.g. RAID, JBOD
    • 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/065Replication mechanisms

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Computer Security & Cryptography (AREA)
  • Quality & Reliability (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

다수의 스토리지 디바이스들에 걸친 원자 기입 동작을 수행하는 컴퓨터 프로그램 제품, 시스템 및 방법이 제공된다. 기입 동작을 위해 데이터를 기입할 복수의 스토리지 디바이스들에 대한 결정이 이루어진다. 태그가 기입 동작을 고유하게 식별하기 위해 생성된다. 태그 및 기입 데이터를 포함하는 기입 커맨드가 결정된 스토리지 디바이스들 각각에 송신되어 스토리지 디바이스들 각각이 스토리지 디바이스에서 기입 데이터를 기입하게 한다. 스토리지 디바이스들 각각은 기입 동작에 의해 업데이트될 데이터의 이전 버전의 카피를 유지한다. 복귀 커맨드가 태그와 함께 스토리지 디바이스들 중 하나에 송신되어 스토리지 디바이스가 스토리지 디바이스에서 기입 데이터의 이전 버전의 카피를 복구하게 한다.

Description

다수의 스토리지 디바이스에 걸친 원자 기입 동작의 수행{PERFORMING AN ATOMIC WRITE OPERATION ACROSS MULTIPLE STORAGE DEVICES}
본 명세서에 기술되는 실시예들은 일반적으로 스토리지 디바이스들에 걸쳐 원자 기입 동작을 수행함으로써 다수의 스토리지 디바이스들에 걸쳐 데이터를 저장하는 호스트 시스템에 관한 것이다.
RAID(Redundant Array of Independent Disk) 제어기들은 다수의 스토리지 드라이브들에 대해 데이터를 스트라이프화(stripe)하고, (통상적으로 스트라이프화된 데이터를 XOR하는 것에 의해) RAID 스트라이프들 내의 드라이브들에 기입된 데이터로부터 패리티 데이터를 계산하여 패리티 디스크에 기입한다. RAID 구현예들이 가지는 한 가지 잠재적 문제점은 RAID 기입 홀이라 알려져 있다. 기입 홀은, RAID 스트라이프 내의 데이터가 업데이트되지만 패리티 데이터가 업데이트되지 않아서 디스크가 고장날 때 데이터를 재구성하기 위해 모든 디스크들이 제로로 XOR할 때 발생한다. 문제점은 둘 이상의 디스크들을 원자력적으로(atomically) 업데이트할 방법이 없다는 것이며, 따라서, RAID 스트라이프들은 충돌 또는 정전 동안 손상 받을 수 있다. 이러한 문제점을 다루기 위해, RAID 제어기들은, 패리티 데이터가 기입될 수 있을 때까지 기입 데이터를 백업하도록, 또한 NVRAM들로서 알려진, 비휘발성 스토리지 디바이스들을 유지한다. 그러나, NVRAM들을 추가하는 것은 RAID 제어기들 및 RAID 솔루션들의 비용을 증가시킨다. RAID 소프트웨어 구현예들은 중요한 성능 이슈들을 가지지 않고 기입 홀 문제점을 성공적으로 다루는 것으로 알려져 있지 않다.
고장의 경우, 데이터의 복원을 허용하는, RAID 저장 솔루션을 이용하는 것과 같은, 다수의 스토리지 디바이스들에 걸친 데이터의 기입에 대해 개선된 솔루션들을 제공하기 위한 본 기술분야의 요구가 존재한다.
실시예들은, 동일한 참조 번호들이 유사한 엘리먼트들을 지칭하는, 축척에 맞게 그려지지 않은, 첨부 도면들에 관련하여, 예시로서 기술된다.
도 1은 호스트 시스템이 다수의 스토리지 디바이스들에 걸쳐 데이터를 저장하는 스토리지 시스템의 실시예를 예시한다.
도 2는 기입 동작들을 위한 호스트 시스템 및 스토리지 디바이스들에 의해 유지되는 기입 상태 엔트리의 실시예를 예시한다.
도 3은 기입 동작을 위해 스토리지 디바이스들에 의해 유지되는 기입 상태 엔트리의 실시예를 예시한다.
도 4는 원자 기입 동작을 위한 데이터의 기입과 관련한 호스트 시스템으로부터의 커맨드(command)들에 응답하여 스토리지 디바이스 내의 상태 트랜지션들을 도시하는 상태도를 예시한다.
도 5a 및 5b는 다수의 스토리지 디바이스들에 걸쳐 데이터를 기입하기 위한 기입 동작을 구현하도록 스토리지 제어기 드라이버에 의해 수행되는 동작들의 실시예를 예시한다.
도 6은 호스트 시스템으로부터의 오픈(OPEN) 커맨드를 프로세싱하도록 스토리지 디바이스에 의해 수행되는 동작들의 실시예를 예시한다.
도 7, 8 및 9는 호스트 시스템으로부터의 기입(WRITE) 커맨드를 프로세싱하도록 스토리지 디바이스에 의해 수행되는 동작들의 실시예들을 예시한다.
도 10은 클로즈(CLOSE) 커맨드를 프로세싱하도록 스토리지 디바이스에 의해 수행되는 동작들의 실시예를 예시한다.
도 11, 12 및 13은 기입 동작에 대한 인터럽션을 핸들링하도록 호스트 시스템에 의해 수행되는 동작들의 실시예들을 예시한다.
도 14는 상태 질의 요청을 프로세싱하도록 스토리지 디바이스에 의해 수행되는 동작들의 실시예를 예시한다.
도 15는 도 1의 호스트 시스템이 구현될 수 있는 시스템을 예시한다.
현재 RAID 제어기들은 부분적으로 기입된 데이터를 캐싱하기 위해 고가의 NVRAM 디바이스들에서 구현되는 역 기입 캐시(write back cache)를 가짐으로써 기입 홀 데이터 손상(corruption)을 다룬다. 그러나, 이러한 솔루션들은 NVRAM들의 사용을 요구하는데, 이는 RAID 제어기의 가장 비싼 컴포넌트들 중 하나일 수 있다. 또한, 역 기입 캐시를 위한 NVRAM의 사용은 기반 스토리지 디바이스들이 NVRAM 디바이스들의 성능에 접근하는 판독 및 기입 성능을 가질 때, 예컨대, 고체 상태 스토리지 드라이브(SSD)들을 가지는 경우, 병목을 야기할 수 있다.
기술된 실시예들은 기입 홀들 및 사일런트 데이터 손상을 보호하는 동시에 스토리지 디바이스들 자체에 부분적으로 기입된 데이터의 저장을 오프로드(offload)시킴으로써 NVRAM 디바이스들의 사용을 회피하는 RAID 또는 다른 스토리지 제어기를 구현하기 위한 기법들을 제공한다. 저장 또는 RAID 제어기는 분산된 스토리지 디바이스들과 협업하여 부분적으로 기입된 데이터를 저장하기 위해 별도의 역 기입 캐시 또는 커미트 로그 디바이스(commit log device)의 필요 없이 스토리지 디바이스들에 대한 원자 업데이트들을 보장한다.
기술되는 실시예들은 원자 방식으로 다수의 디바이스들에 걸쳐 다수의 불연속적 데이터 블록들을 업데이트하기 위한 디바이스 분산형 솔루션을 제공한다. 데이터의 업데이트 동안 임의의 주어진 시점에서, 호스트 시스템 내의 소프트웨어에서 구현될 수 있는 스토리지 제어기는, 스토리지 디바이스들에서 부분적으로 또는 전체적으로 기입된 데이터의 저장을 오프로드시킴으로써 전체 동작이 완전히 완료되거나 전혀 완료되지 않음을 주장(assert)할 수 있다. SSD들의 경우, 이들의 판독 및 기입 레이트들은 NVRAM에 근접할 수 있다. 따라서, 기술된 실시예들은 스토리지 디바이스들인 SSD들에 오프로드 되는, 부분적으로 기입된 데이터를 백업하기 위한 NVRAM을 필요로 하지 않는다. 이러한 방식으로, 스토리지 디바이스들이 SSD들과 같은 고속 액세스 디바이스들일 때, SSD들이 부분적으로 기입된 데이터 및 그 데이터의 이전 버전을 저장하기 위해 원자 기입 동작들에서 사용될 것이기 때문에, NVRAM에 의해 유입되는 병목이 존재하지 않을 것이다.
기술되는 실시예들을 구현하는 스토리지 디바이스들은 소프트웨어 RAID 제어기와 같은 스토리지 제어기가 스토리지 디바이스들에서의 의도(intent)를 등록하여 데이터의 이전 버전을 백업하는 메커니즘을 제공한다. 이러한 "의도"는 스토리지 디바이스들이 기입들에 대한 인터럽션의 경우 복원을 위해 필요한 데이터를 제공할 것임을 나타낸다. 의도 엔트리가 기입 동작을 위해 오픈되는 동안, 스토리지 디바이스들은 열거된 데이터 블록들의 "구" 또는 "새로운" 카피를 유지한다. 기입이 완료되면 각각의 디바이스 내의 의도 엔트리 및 오래된 데이터는 폐기될 수 있다. 그러나, 기입이 인터럽트되는 경우, 트랜잭션을 완료로 롤포워드시키거나, 또는 이전 상태/데이터로 롤백시키기 위한 RAID 구현예, 멀티-디바이스 파일 시스템, 또는 데이터베이스를 위한 모든 참여 스토리지 디바이스들 및 스토리지 제어기에 걸쳐 충분한 분산 메타데이터가 존재한다. 기술된 실시예의 스토리지 시스템의 소비자들은 기입 요청이 완전히 완료되거나 전혀 완료되지 않는 것을 겪는다.
후속하는 기재에서, 논리 구현예들, 연산코드들, 오퍼랜드들을 특정하기 위한 수단, 자원 파티셔닝/공유/복제 구현예들, 시스템 컴포넌트들의 타입들 및 상호관계들, 및 논리 파티셔닝/통합 선택들과 같은 다수의 특정 상세항목들은 본 발명의 보다 철저한 이해를 제공하기 위해 설명된다. 그러나, 발명이 이러한 특정 상세항목들 없이도 구현될 수 있다는 것이 본 기술분야의 통상의 기술자에 의해 인지될 것이다. 다른 경우들에서, 제어 구조들, 게이트 레벨 회로들 및 전체 소프트웨어 명령 시퀀스들은 발명을 모호하게 하지 않기 위해 상세히 보여지지 않는다. 본 기술분야의 통상의 기술자는, 포함된 기재들을 이용하여, 과도한 실험 없이 적절한 기능성을 구현할 수 있을 것이다.
명세서에서 "일 실시예", "실시예", "예시적인 실시예" 등의 참조들은, 기술되는 실시예가 특정 특징, 구조 또는 특성을 포함할 수 있지만, 모든 실시예가 특정 특징, 구조 또는 특성을 반드시 포함하지는 않을 수도 있음을 나타낸다. 또한, 이러한 구문들이 반드시 동일한 실시예를 지칭하지는 않는다. 특정 실시예들은 스토리지 디바이스 전자 어셈블리들에 관한 것이다. 실시예들은 전자 어셈블리들을 형성하기 위한 방법들 및 디바이스들 모두를 포함한다.
도 1은, 다른 부착된 컴퓨터 시스템들 및 디바이스들로부터 다수의 스토리지 디바이스들(1021, 1022...102n)로 통신되는 사용자 데이터와 같은 데이터를 저장하는 호스트 시스템(100)을 가지는 저장 환경의 실시예를 예시한다. 호스트 시스템(100)은 스토리지 디바이스들(1021, 1022...102n) 내의 데이터의 저장을 관리하기 위한 스토리지 제어기 드라이버(106)를 포함하는 운영 체제(104)를 포함한다. 스토리지 제어기 드라이버(106)는 데이터가 기입되었음을 스토리지 디바이스가 확인할 때까지 스토리지 디바이스들(1021, 1022...102n)에 송신된 데이터를 버퍼링시키는 기입 캐시(110) 및 저장을 위한 스토리지 디바이스들(1021, 1022...102n)에 분산되는 데이터에 대한 정보를 가지는 기입 동작 상태 정보(200)를 유지한다.
일 실시예에서, 스토리지 제어기 드라이버(106)는 복수의 스토리지 디바이스들(1021, 1022...102n)에 대한 데이터 유닛의 일부분들에 대한 RAID(Redundant Array of Independent Disk) 알고리즘 스트라이프(stripe)를 구현하고, 스트라이프화된 데이터 유닛들에 대한 패리티 데이터를 계산하고, 스토리지 디바이스들(1021, 1022...102n) 중 하나에 패리티 데이터를 저장할 수 있다. 패리티 데이터는 데이터를 가지는 스토리지 디바이스들(1021, 1022...102n) 중 하나가 고장나는 경우 패리티 에러 복원을 수행하기 위해 XOR 패리티 데이터를 포함할 수 있다. 스토리지 제어기 드라이버(106)는 인터리빙 등을 포함하는 상이한 RAID 알고리즘들을 구현할 수 있다.
도 1의 실시예에서, 스토리지 제어기 드라이버(106)는 운영 체제(104)의 소프트웨어 컴포넌트를 포함한다. 대안적인 실시예에서, 스토리지 제어기 드라이버(106)는 내부 버스를 통해 호스트 시스템(100)에 접속될 수 있는 하드웨어 디바이스 또는 별도의 하드웨어 제어기 또는 카드에서 구현될 수 있다.
각각의 스토리지 디바이스(1021, 1022...102n)는 호스트 시스템(100)으로부터 판독 및 기입 커맨드들을 통신하는 것 및 수신하는 것을 포함하는, 하나 이상의 데이터 저장 유닛들(114)에 대한 데이터의 기입을 관리하는 제어기(112)를 포함한다. 제어기(112)는 호스트 시스템(100)에 의해 송신되는 기입 요청들의 상태에 대한 정보를 가지는 기입 동작 상태(300)를 유지한다. 제어기(112)는 호스트 시스템(100)으로부터 판독 및 기입 요청들을 대기시키기 위한 큐(queue)를 또한 포함할 수 있다.
일 실시예에서, 스토리지 디바이스들(1021, 1022...102n)은 고체 상태 드라이브(SSD), 플래시 드라이브 등을 포함할 수 있다. SSD 구현예들에 대해, 데이터 저장 유닛들(114)은 플래시 메모리 셀들의 NAND 다이들을 포함할 수 있다. 일 실시예에서, NAND 다이들은 각각의 셀에 2개 비트 값들인, 하위 비트 값 및 상위 비트 값을 레코딩하는 멀티레벨 셀(multilevel cell)(MLC) NAND 플래시 메모리를 포함할 수 있다. 대안적으로, NAND 다이들은 단일 레벨 셀(single level cell)(SLC) 메모리들 또는 셀 당 3 비트(three bit per cell)(TLC) 메모리들을 포함할 수 있다. 저장 유닛들(114)은 MLC NAND 플래시 메모리, 강유전성 랜덤-액세스 메모리(FeTRAM), 나노와이어-기반 비휘발성 메모리, 상변화 메모리(PCM)와 같은 3차원(3D) 교차점 메모리, 멤리스터 기술을 포함하는 메모리, 자기저항성 랜덤-액세스 메모리(MRAM), 스핀 전달 토크(Spin Transfer Torque)(STT)-MRAM, 단일 레벨 셀(SLC) 플래시 메모리, 에너지원 후원형(backed)(배터리/수퍼-커패시터) DRAM, 및 다른 전기적 소거가능한 프로그래밍가능한 판독 전용 메모리(EEPROM) 타입 디바이스들을 또한 포함할 수 있지만, 이에 제한되지 않는다. 대안적인 실시예에서, 스토리지 디바이스들(1021, 1022...102n)은 하드 디스크 드라이브들 등과 같은 다른 타입들의 스토리지 디바이스들을 포함할 수 있다. 스토리지 디바이스들(1021, 1022...102n)이 하드 디스크 드라이브들을 포함하는 실시예들에서, 데이터 저장 유닛(114)은 자기 디스크를 포함할 수 있다.
호스트 시스템(100)은 버스 인터페이스와 같은 인터페이스(116)를 통해 스토리지 디바이스들(1021, 1022...102n)과 통신할 수 있다. 호스트(100) 및 스토리지 디바이스들(1021, 1022...102n)은 동일한 인클로저 또는 별도의 인클로저들 내에 위치될 수 있다. 대안적으로, 호스트 시스템(100)은 네트워크를 통해 스토리지 디바이스들(1021, 1022...102n)과 통신할 수 있다.
호스트(100) 및 스토리지 디바이스들(1021, 1022...102n)은 SATA(Serial Advanced Technology Attachment) 인터페이스와 같이 그 사이의 통신을 허용하기 위한 입력/출력(Input/Output)(I/O) 인터페이스들을 포함하고, 호스트(100)와 스토리지 디바이스(102)를 커플링시키는 SATA 순응형 버스를 포함할 수 있다. 다른 실시예들에서, 직렬 연결형 SCSI(Serial Attached Small Computer System Interface)(또는 단순히 SAS), PCIe(Peripheral Component Interconnect Express) 등과 같은 다른 타입들의 I/O 인터페이스들 및 버스 상호접속들이 사용될 수 있다.
도 2는 스토리지 제어기 드라이버(106)가 스토리지 디바이스들(1021, 1022...102n)중 하나에 대해 오픈되는 각각의 기입 동작 동안 유지하는 기입 동작 상태 엔트리(200i)의 실시예를 예시한다. 각각의 엔트리(200i)는, 다수의 스토리지 디바이스들(1021, 1022...102n)에 걸쳐 스트라이프화되는 데이터의 트랙들 또는 블록들을 가질 수 있는, 기입 동작의 고유한 식별자를 제공하는 기입 동작 태그(200); 태그(200)에 의해 식별되는 기입 동작이 관련되는 스토리지 디바이스들(1021, 1022...102n)을 식별하는 스토리지 디바이스 식별자(ID); 및 기입 동작의 상태(206)를 가질 수 있다.
기입 동작이 다수의 스토리지 디바이스들(1021, 1022...102n)에 대한 데이터 유닛의 기입 일부분을 수반하는 경우, 다수의 기입 상태 엔트리들(200)이 존재할 수 있고; 각각의 기입 동작에 대해, 이러한 엔트리들 각각은 기입 동작 태그(202)를 위한 데이터를 수신한 스토리지 디바이스들(1021, 1022...102n) 중 하나에 관해 식별된 기입 동작에 대한 상태를 제공한다.
상태(206)는 다음을 포함하지만 이에 제한되지 않는, 스토리지 디바이스들(1021, 1022...102n) 중 하나에 관한 기입 동작의 상태를 나타낼 수 있다:
유휴(IDLE) 상태는 스토리지 디바이스(204)가 의도 로깅을 나타내기 위한 오픈(OPEN) 커맨드를 아직 수락하지 않았음을 나타낸다. 의도 로깅에 확인응답하는 스토리지 디바이스는 데이터를 업데이트하기 이전에 기입 데이터의 이전 버전의 카피를 만들고, 기입 동작이 완료될 때까지, 즉 원자 동작이 완료될 때까지 그 이전 버전을 유지하도록 커미트(commit)된다.
오픈(OPEN) 상태는 스토리지 디바이스(204)가 기입 동작 태그(202)를 식별하는 오픈(OPEN) 커맨드를 수신했음을 확인응답하는 것을 나타내는데, 이는 스토리지 디바이스(204)가 기입할 의도에 확인응답했으며, 데이터가 식별된 기입 동작에 대해 업데이트되기 이전에 데이터의 이전 버전을 저장할 준비가 되었음을 나타낸다.
더티(DIRTY) 상태는, 기입 동작(202)이, 각각이 특정된 스토리지 디바이스(204)에서 기입할 데이터 유닛 또는 범위의 일부분에 대한 것인, 다수의 기입 커맨드들로 구성될 때 사용된다. 데이터의 일부분을 기입하는 기입 커맨드들 중 하나에 대한 더티(DIRTY) 상태는 기입 데이터의 해당 부분이 스토리지 디바이스(204)에 기입되었음을 나타낸다. 오픈(OPEN) 상태를 가지는 데이터의 부분들에 대한 기입들을 위한 기입 상태 엔트리들(200i)은 해당 특정 부분이 완료되지 않았음을 나타낸다.
기입됨(WRITTEN) 상태는, 특정 스토리지 디바이스(204)에 대한 기입 동작(202)을 위해 요구되는 기입이 완료되었음을 나타낸다. 단 하나의 기입 커맨드가 기입 동작(202)을 위해 송신된 경우, 기입됨(WRITTEN)은 스토리지 디바이스(204)가 그것이 기입을 완료했음을 확인할 때 표시된다. 스토리지 디바이스(204)에 대한 기입 동작(202)이 복수의 기입 커맨드들, 예를 들어, 서브-기입 커맨드들로 구성되는 경우, 기입 동작(202)의 기입됨(WRITTEN)은, 데이터의 부분들에 대한 컴포넌트 기입 커맨드들 모두가 스토리지 디바이스(204)에서 완료될 때 표시된다.
복귀(REVERT) 상태는 복귀(REVERT) 커맨드가 스토리지 디바이스(204)에 송신되어 기입 동작(202)에 의해 업데이트된 데이터가 로깅된 이전 버전으로 롤백함을 나타낸다.
클로즈(CLOSE) 상태는 스토리지 디바이스(204)가 클로즈(CLOSE) 커맨드의 수락을 확인응답하여 스토리지 디바이스(204)가 기입 동작(202)을 위한 데이터의 모든 로깅된 이전 버전들 및 상태 정보를 클리어(clear)하게 하는 것을 나타낸다.
도 3은 스토리지 디바이스들(1021, 1022...102n) 각각이 스토리지 제어기 드라이버(106)에 의해 오픈되는 각각의 기입 동작을 위해 유지하는 기입 동작 상태 엔트리(300i)의 실시예를 예시한다. 각각의 엔트리(300i)는 다수의 스토리지 디바이스들(1021, 1022...102n) 에 걸쳐 스트라이프화되는 데이터의 트랙들 또는 블록들을 가질 수 있는 기입 동작의 고유한 식별자를 제공하는 기입 동작 태그(300); 업데이트된 데이터의 이전 버전의 카피를 유지하기 위한 스토리지 디바이스의 의도를 나타내는 의도 로그됨 플래그(304); 및 전술된 상태들 중 하나를 포함할 수 있는 기입 동작의 상태(306)를 가질 수 있다.
대안적인 실시예들에서, 스토리지 제어기 드라이버(106)는 동작들 동안 명백한 기입 동작 상태(200) 정보를 유지하지 않을 수 있다. 대신, 스토리지 디바이스들(1021, 1022...102n)은 상태(300)를 유지하고, 스토리지 제어기 드라이버(106)는 기입 동작들에 대한 인터럽션을 핸들링하도록 요구될 때 스토리지 디바이스들(1021, 1022...102n)로부터 상태를 획득할 것이다.
스토리지 제어기 드라이버(106)는 다수의 스토리지 디바이스들(1021, 1022...102n)에 데이터 유닛 또는 범위의 일부분들을 기입하기 위한 기입 동작의 일부로서 스토리지 디바이스들(1021, 1022...102n)에 하기의 커맨드들을 제출할 수 있다:
오픈(OPEN)(태그, 범위들) - 식별된 범위들 또는 데이터 유닛들을 기입하기 위한 기입 동작 태그에 대한 새로운 의도 로그를 시작하도록 스토리지 디바이스(1021, 1022...102n)에 명령한다.
클로즈(CLOSE)(태그) - 기입 동작을 클로즈하고, 기입 동작 태그에 대해 유지되는 데이터의 로깅된 이전 버전들 및 임의의 상태 정보를 제거하도록 스토리지 디바이스(1021, 1022...102n)에 명령한다.
태그를 가지는 기입(WRITE WITH TAG)(태그, 범위들) - 기입(WRITE)으로서 본원에서 또한 지칭되며, 오픈 기입 동작(태그)을 위한 데이터(범위들)를 기입하도록 스토리지 디바이스(1021, 1022...102n)에 명령한다.
태그를 가지는 판독(READ WITH TAG)(태그, 범위들, 신규) - 판독(READ)으로서 본원에서 또한 지칭되며, 기입 동작(태그)을 위한 식별된 데이터(범위들)에 대한 이전 버전, 기입 데이터 또는 둘의 혼합 중 어느 하나를 검색하도록 수신 스토리지 디바이스(1021, 1022...102n)에 명령한다.
복귀(REVERT)(태그) - 기입된 데이터를 기입 동작(태그)을 위한 데이터의 로깅된 이전 버전으로 롤백시키도록 스토리지 디바이스(1021, 1022...102n)에 명령한다.
도 4는 스토리지 디바이스들(1021, 1022...102n)에서의 상이한 상태들을 기술하는 상태도(400)의 실시예를 예시한다. 오래된 데이터 상태(401)는 데이터가 업데이트되기 이전의 데이터의 상태를 보여준다. 오픈 커맨드를 수신하면, 수신 스토리지 디바이스(1021, 1022...102n)의 상태는, 스토리지 디바이스(1021, 1022...102n)가 새로운 데이터를 기입하기 이전에 데이터의 이전 버전을 저장하는 의도 로깅됨 상태(403)로 트랜지션한다(402). 스토리지 디바이스(1021, 1022...102n)는 제자리 기입(write-in-place write)을 수행함으로써 새로운 데이터를 기입하거나, 카피 온-기입(copy on-write)을 수행하기 위한 인디렉션(indirection)을 사용하여, 기입 시 오래된 데이터를 카피할 수 있다. 기입 동작이 스토리지 디바이스에 대한 데이터 유닛의 부분들의 일련의 기입 커맨드들로 구성되는 실시예들에서, 이후 기입 커맨드들 중 하나를 수신할 시에, 수신 스토리지 디바이스(1021, 1022...102n)의 상태는, 데이터 유닛의 일부분들 중 하나에 대한 특정 기입이 완료될 때, 그러나 스토리지 디바이스에 대한 기입들 모두가 완료되기 이전에, 더티 상태(405)로 트랜지션한다(404). 기입 동작이 단일 기입 커맨드로 구성되거나, 상태는 각자, 기입 상태(409)로 트랜지션한다(407 및 408). 기입 동작(태그)에 대한 클로즈(CLOSE) 커맨드를 수신할 시에, 스토리지 디바이스(1021, 1022...102n)는 새로운 데이터 상태(411)로 트랜지션한다(410). 새로운 데이터 상태(411)에서, 스토리지 디바이스(1021, 1022...102n)는 데이터의 로깅된 이전 버전 및 기입 동작을 위한 기입 상태 엔트리(300i)와 같은, 기입 동작의 다른 정보(태그)를 폐기한다. 대안적으로, 데이터의 로깅된 이전 버전 및 다른 관련 정보를 가지는 저장 공간은 자유 공간으로서 마킹될 수 있고, 쓰레기(garbage) 수집 및 재사용을 위해 이용가능하다.
도 4의 상태도 실시예는, 모든 스토리지 디바이스들이 이들의 데이터가 단일 기입 커맨드 또는 다수의 기입 커맨드들 중 어느 하나에서 기입됨을 확인할 때까지, 기입 동작이 스토리지 디바이스들(1021, 1022...102n) 중 임의의 것에서 완료되지 않기 때문에, 원자성(atomicity)을 제공한다. 원자 기입 동작이 완료되는 포인트까지, 스토리지 디바이스들(1021, 1022...102n)은 부분 및 전체 기입 데이터 뿐만 아니라 스토리지 제어기 드라이버(106)가 기입 동작의 기입 데이터 또는 업데이트 이전의 데이터의 이전 버전으로 데이터를 롤백시키도록 하기 위한 데이터의 이전 버전을 유지한다. 또한, 패리티 데이터가 유지되는 실시예들에서, 스토리지 디바이스들(1021, 1022...102n)은 원자 기입 동작이 완료되기 이전에 패리티 데이터의 계산을 허용하기에 충분한 정보를 유지한다. 스토리지 제어기 드라이버(106)와 스토리지 디바이스들(1021, 1022...102n) 사이의 이러한 원자 기입 동작의 구현예는 하기에 상세하게 기술된다.
도 5a 및 5b는 다수의 스토리지 디바이스들(1021, 1022...102n)에 걸쳐 기입하거나 스트라이프화할 기입 데이터, 예를 들어, 데이터 유닛들, 트랙들 범위들을 가지는 원자 기입 동작을 관리하기 위해 스토리지 제어기 드라이버(106)에 의해 수행되는 동작들의 실시예를 예시한다. 원자 기입 동작을 위한 절차를 개시할 시에(블록(500)), 스토리지 제어기(106)는 기입 동작을 고유하게 식별하기 위해 사용할 태그를 결정한다(블록(501)). 스토리지 제어기 드라이버(106)는 기입 동작을 위한 데이터를 수신하도록 스토리지 디바이스들(1021, 1022...102n) 각각에 오픈(OPEN) 커맨드를 송신하여, 업데이트될 데이터의 이전 버전을 저장하기 위한 의도 로깅을 시작하라고 스토리지 디바이스들(1021, 1022...102n)에 명령한다(블록(503)). 오픈(OPEN) 커맨드를 송신하는 것은 스토리지 제어기 드라이버(106)가, 유휴(IDLE)의 상태를 가지는 기입 동작에 대한 데이터가 송신될 각각의 스토리지 디바이스(1021, 1022...102n)에 대한 기입 상태 엔트리(200i)를 생성하는 결과를 초래한다. 기입 동작이 각각의 스토리지 디바이스에 대한 데이터의 일부분들에 대한 다수의 기입 커맨드들을 수반할 경우, 스토리지 드라이브 제어기(106)는 스토리지 디바이스(1021, 1022...102n)에 대한 데이터의 일부분들에 대한 기입 커맨드들 각각에 대한 별도의 상태를 제공하기 위해 데이터의 일부분을 기입하는 기입 커맨드들 각각에 대해 유휴(IDLE) 상태를 가지는 기입 상태 엔트리(200i)를 제공할 수 있다.
기입 동작을 위해 스토리지 디바이스들(1021, 1022...102n) 중 하나로부터 오픈(OPEN) 커맨드의 확인응답을 수신할 시에(블록(505)), 스토리지 제어기 드라이버(106)는 오픈(OPEN)을 표시하도록 기입 동작 태그 및 스토리지 디바이스(1021, 1022...102n)에 대한 상태(206)를 업데이트한다(블록(506)). (블록(507)에서) 스토리지 디바이스들(1021, 1022...102n) 모두가 오픈(OPEN) 상태를 가지지 않는 경우, 스토리지 제어기 드라이버(106)는, 스토리지 디바이스들(1021, 1022...102n)의 다른 것으로부터의 오픈(OPEN) 커맨드의 확인응답을 기다려서, 모든 스토리지 디바이스들(1021, 1022...102n)이 이들이 의도 로깅에 참여할 것임을 보장하도록 블록(505)으로 되돌아간다. (블록(507)에서) 모든 스토리지 디바이스들(1021, 1022...102n)이 오픈(OPEN) 상태에 확인응답한 경우, 스토리지 제어기 드라이버(106)는 기입 동작을 위해 스토리지 디바이스들(1021, 1022...102n) 각각에 송신할 데이터를 결정한다(블록(508)). 이러한 동작은 다수의 스토리지 디바이스들에 걸쳐 기입할 데이터 유닛의 부분들을 결정하는 것을 수반할 수 있다. RAID 구현예들에서, 이러한 동작은 스토리지 디바이스들(1021, 1022...102n) 각각에 대해 스트라이프화할 데이터, 및 XOR 패리티 데이터를 저장하는 스토리지 디바이스들(1021, 1022...102n) 중 하나 이상에 대한 계산된 XOR 패리티 데이터를 결정할 수 있다. 또한, 이러한 결정은 스토리지 디바이스들 각각에 대해 기입할 데이터의 부분을 다수의 기입 커맨드들로 추가로 나누어 각각의 스토리지 디바이스(1021, 1022...102n)에 대한 데이터의 각 부분을 기입할 수 있다.
스토리지 제어기 드라이버(106)는 스토리지 디바이스에 대해 결정된 표시된 기입 데이터를 기입하도록 기입(WRITE)(또는 태그를 가지는 기입(WRITE WITH TAG)) 커맨드를 스토리지 디바이스들 각각에 송신한다(블록(509)). 상태(206)는 기입이 송신되었음을 나타내기 위한 하나 이상의 기입 커맨드들을 수신하는 스토리지 디바이스들(1021, 1022...102n) 각각 및 기입 동작 태그에 대해 업데이트된다(블록(510)). 일 실시예에서, 기입(WRITE) 커맨드를 수신한 스토리지 디바이스에 대한 오픈(OPEN) 상태는 기입이 송신되었지만 완료되지는 않았음을 나타낼 것이다.
제어는 이후, 스토리지 제어기 드라이버(106)가 기입 동작 태그에 대한 스토리지 디바이스들 중 하나로부터 기입이 완료되었다는 확인응답을 수신하는(블록(511)) 도 5b의 블록(511)으로 진행한다. 기입 동작 태그에 대한 상태 및 확인응답 스토리지 디바이스는 기입이 완료되었음을 나타내도록 업데이트되며(블록(512)), 이는 기입됨(WRITTEN) 상태일 수 있다. 스토리지 제어기 드라이버(106)는 이후 기입 캐시(110)에서 해당 완료된 기입 동작에 대한 데이터를 클리어할 수 있다(블록(513)). 이 점에서, 기입 데이터의 카피가 스토리지 디바이스(1021, 1022...102n)에서 유지되고, 스토리지 제어기 드라이버(106)는 부분적으로 기입된 데이터를 유지할 필요가 없다. 기입 동작이 하나의 스토리지 디바이스에 대한 다수의 기입 커맨드들을 수반하는 경우, 스토리지 제어기 드라이버(106)는 기입 커맨드에 대한 데이터의 부분을 폐기하지만, 확인응답이 수신되지 않은 기입 커맨드들에 대한 스토리지 디바이스에 대해 기입할 데이터의 부분들을 유지할 수 있다. (블록(514)에서) 기입 완료 상태, 예를 들어, 기입됨(WRITTEN) 상태에 확인응답하지 않은 기입 커맨드를 수신하는 일부 스토리지 디바이스들(1021, 1022...102n)이 존재하는 경우, 제어는 블록(511)으로 역진행하여 모든 스토리지 디바이스들(1021, 1022...102n)로부터의 추가적인 기입 완료 확인응답을 기다린다. 스토리지 디바이스들(1021, 1022...102n) 각각에 다수의 기입 커맨드들을 송신하는 것을 수반하는 기입 동작에 대해, 제어는, 데이터의 부분들에 대한 기입 동작들 모두가 완료되지는 않은 경우, 블록(511)으로 역진행한다.
(블록(514)에서) 모든 기입들이 기입 동작에 대한 기입 데이터를 수신하는 모든 스토리지 디바이스(1021, 1022...102n)에서 완료된 경우, 스토리지 제어기 드라이버(106)는 기입 동작 태그에 대한 기입 상태 엔트리들(200i)에서 식별되는 스토리지 디바이스들(1021, 1022...102n) 각각에 클로즈(CLOSE) 커맨드를 송신한다(블록(515)). 기입 동작에 대한 스토리지 디바이스들(1021, 1022...102n) 중 하나로부터 클로즈(CLOSE) 커맨드가 완료되었다는 확인응답을 수신할 시에(블록(516)), 스토리지 제어기 드라이버(106)는 클로즈(CLOSE) 상태를 나타내기 위해 확인응답 스토리지 디바이스(204) 및 기입 동작 태그(202)에 대해 기입 상태 엔트리(200i)에서 상태(206)를 업데이트한다(블록(517)). (블록(518)에서) 모든 디바이스들(1021, 1022...102n)이 클로즈(CLOSE) 커맨드의 프로세싱에 확인응답하지는 않는 경우, 제어는 블록(516)으로 역진행하여, 스토리지 디바이스들(1021, 1022...102n) 중 다른 것으로부터의 클로즈(CLOSE) 커맨드의 확인응답을 기다린다. (블록(518)에서) 클로즈(CLOSE) 커맨드를 송신받은 모든 스토리지 디바이스들(1021, 1022...102n)이 확인응답을 리턴시키는 경우, 스토리지 제어기 드라이버(106)는 스토리지 디바이스들(1021, 1022...102n) 각각 및 기입 동작 태그에 대한, 기입 상태 엔트리들(200i) 모두와 같은, 기입 동작 태그에 대한 임의의 정보를 폐기할 수 있다(블록(519)). 대안적으로, 스토리지 제어기 드라이버(106)는 추후 쓰레기 수집 또는 재사용을 위한 자유 공간으로서 모든 스토리지 디바이스들에 대한 기입 동작을 위한 정보를 나타낼 수 있다.
대안적인 실시예에서, 블록들(518 및 519)에서의 동작들은 수행되지 않으며, 확인응답이 최초로 수신될 때 클로즈(CLOSE)가 비동기적으로 각각의 스토리지 디바이스(1021, 1022...102n)에 대해 표시되는데, 왜냐하면 모든 디바이스들이 첫번째 클로즈(CLOSE) 상태 확인응답이 수신되는 시간까지 데이터를 기입하기 때문이다. 추가적인 대안적인 실시예들에서, 스토리지 제어기 드라이버(106)는 스토리지 디바이스들(1021, 1022...102n)로부터 수신되는 확인응답들에 기초하여 상태 정보를 유지하지 않으며, 오직 기입 동작들에 대한 인터럽션 또는 다른 고장이 존재할 때의 상태에 대해 스토리지 디바이스들(1021, 1022...102n)에 질의할 때 필요 시에 이러한 상태 정보를 획득한다.
도 5a 및 5b의 동작들을 이용하여, 스토리지 제어기 드라이버(106)는 전체 기입 동작이 완료된 것으로서 확인될 때까지 모든 기입 데이터 및 기입 데이터의 이전 버전을 유지할 필요가 없다. 대신, 일단 데이터가 스토리지 디바이스(1021, 1022...102n)에 기입되면, 해당 스토리지 디바이스(1021, 1022...102n)에 대한 데이터는 폐기되는데 왜냐하면 원자 기입이, 스토리지 디바이스들(1021, 1022...102n) 각각이 데이터의 이전 카피 및 현재 기입 데이터를 유지하여 기입을 롤백시키거나 완료시키도록 함을 보장하기 때문이다. 또한 패리티 데이터가 계산되는 경우, 스토리지 디바이스들은 부분적으로 기입된 데이터를 유지하여 롤 포워드시킬 패리티 데이터의 재계산을 허용하고 기입 동작을 위한 넌-패리티 및 패리티 데이터의 기입을 완료한다. 논의된 바와 같이, 패리티 데이터는, 스토리지 디바이스들 중 하나가 고장나는 경우 데이터 복원을 위해 사용될 수 있는 XOR 패리티 또는 다른 패리티 데이터와 같은 삭제 코드 패리티 데이터를 포함할 수 있다.
도 6-9는 스토리지 제어기 드라이버(106)로부터의 커맨드들을 프로세싱하여 원자 기입 동작을 구현하도록 스토리지 디바이스들(1021, 1022...102n) 각각의 제어기(112)에서 구현되는 동작들을 예시한다. 도 6은 스토리지 제어기 드라이버(106)로부터 오픈(OPEN) 커맨드를 프로세싱하도록 제어기(112)에 의해 수행되는 동작들의 실시예를 예시한다. 기입 동작(태그)을 특정하는 오픈(OPEN) 커맨드를 수신하는 것(블록(600))에 응답하여, 스토리지 디바이스 제어기(112)는, 기입 동작 태그(302)를 식별하는 기입 상태 엔트리(300i)를 생성하여, 식별된 기입 동작 태그(302)의 일부분으로서 업데이트할 데이터의 이전 버전이 로깅되고 저장될 것임을 나타내고, 상태(306)를 오픈(OPEN)으로서 나타내는 의도 로깅됨(304) 상태를 나타낸다(블록(601)). 제어기(112)는 호스트(100)에 오픈(OPEN) 완료 상태를 리턴시킨다(블록(602)). 오픈 상태를 가지는 스토리지 디바이스(1021, 1022...102n)는 업데이트된 데이터의 이전 버전을 저장하기 위한 의도, 및 어떠한 송신된 기입들도 수신되지 않았다는, 또는 수신되었지만 완료되지 않았다는 것에 확인응답한다.
도 7은, 태그를 가지는 기입(WRITE WITH TAG)과 같이, 기입 동작 태그에 대한 기입(WRITE) 커맨드를 프로세싱하도록 스토리지 디바이스 제어기(112)에 의해 수행되는 동작들의 실시예를 예시한다. 데이터 저장 유닛(들)(114)에서 위치를 어드레싱하는 논리적 또는 물리적 어드레스에 대한 기입 데이터를 가지는 기입 동작(태그)에 대한 기입 커맨드를 수신할 시에(블록(700)), 제어기(112)는 업데이트할 데이터의 이전 버전으로서 스토리지 어드레스에서 데이터 저장 유닛(114)에 데이터의 카피를 저장한다(블록(701)). 대안적인 카피-온 기입 구현예에서, 제어기(112)는 오래된 데이터가 위치되는 곳을 기억하고 새로운 데이터를 새로운 저장 영역에 기입할 수 있으며, 인디렉션 표는 오래된 데이터의 위치가 재사용되게 한다. 기입 커맨드 내의 기입 데이터가 스토리지 어드레스에 기입된다(블록(702)). 기입은, 플래시 메모리, SSD 등을 가지는 케이스와 같이, 실제 저장 유닛(114)에 데이터를 기입할 시에, 또는 데이터 저장 유닛(114)과는 별도인 버퍼에서 스토리지 디바이스(1021, 1022...102n) 내의 기입 데이터를 버퍼링시킬 시에 완료된 것으로 간주될 수 있으며, 여기서 버퍼링된 데이터는 하드 디스크 드라이브를 가지는 케이스와 같이, 데이터 저장 유닛(114)에 결국 디스테이지된다(destaged). 기입을 완료할 시에, 제어기(112)는 기입 동작(302)을 위해 기입 상태 엔트리(300i)에서 기입됨(WRITTEN)으로서 기입 동작의 상태(306)를 나타낸다(블록(703)). 완료는 호스트(100)에 리턴된다(블록(704)). 도 7의 동작들은 기입 동작을 위해 각각의 스토리지 디바이스(1021, 1022...102n)에 송신되는 단 하나의 기입 커맨드가 존재할 때 수행될 수 있다.
도 8은 기입 동작 태그 및 하나의 스토리지 디바이스에 대한 데이터의 부분들을 기입하도록, 태그를 가지는 기입(WRITE WITH TAG)과 같은 복수의 기입(WRITE) 커맨드들을 처리하기 위해 스토리지 디바이스 제어기(112)에 의해 수행되는 동작들의 실시예를 예시한다. 또한 데이터 유닛(들)(114)에서 스토리지 어드레스에 대한 기입 동작(태그)에 대한 데이터의 부분들을 기입하기 위해 서브-기입 커맨드들이라 지칭되는 복수의 커맨드들을 수신할 시(블록(800)), 제어기(112)는 각각의 기입(WRITE)을 위해 블록들(801 내지 805)에서의 동작들의 루프를 수행한다. 블록(802)에서, 스토리지 어드레스에서 데이터 저장 유닛(114) 내의 데이터의 카피는 업데이트할 데이터의 이전 버전으로서 저장된다. 대안적인 카피-온 기입 구현예에서, 제어기(112)는 오래된 데이터가 위치된 곳을 기억하고 새로운 데이터를 새로운 저장 영역에 기입할 수 있으며, 인디렉션 표는 오래된 데이터의 위치가 재사용되도록 한다. 기입(WRITE) 커맨드 내의 기입 데이터는 스토리지 어드레스에 기입된다(블록(803)). 기입(WRITE)을 완료할 시에, 제어기(112)는 기입 동작(302)을 위해 기입 상태 엔트리(300i)에서 더티(DIRTY)로서 기입된 부분적 데이터 및 기입 동작의 상태(306)를 표시한다(블록(804)). 모든 기입 동작들에 대해 기입하도록 데이터 유닛의 모든 부분들의 기입을 완료한 이후, 제어기(112)는 기입 동작(태그) 및 기입 커맨드들에 대한 기입 완료를 호스트(100)에 리턴시킨다.
도 8의 실시예에서, 기입 완료 또는 기입됨(WRITTEN) 상태는 데이터 유닛에 대한 데이터의 모든 부분들을 기입하기 위해 모든 기입 커맨드를 수행한 이후에만 리턴된다. 대안적인 실시예에서, 제어기(112)는, 기입 데이터의 부분이 완료됨을 나타내는, 각각의 기입 커맨드가 완료될 때 더티 상태를 리턴시킬 수 있다.
도 9는 스토리지 디바이스(1021, 1022...102n)의 데이터 유닛들이 독립적으로 어드레싱가능한 스토리지 디바이스들을 포함할 때, 패리티 데이터 유닛(114)을 포함한, 복수의 데이터 유닛들(114)에 걸쳐 수신된 기입 데이터를 스트라이프화하기 위해 제어기(112)에 의해 수행되는 동작들의 실시예를 예시한다. 데이터 유닛들(114)은 플래시 디바이스들, SSD들, 하드 디스크 드라이브들 등과 같은 독립적 스토리지 디바이스들을 포함할 수 있다. 대안적으로, 스토리지 디바이스가 SSD를 포함하는 경우, 데이터 유닛들(114)은 SSD 스토리지 디바이스에 대한 NAND 다이들과 같이, 스토리지 디바이스(1021, 1022...102n) 내의 메모리 셀들의 다이들을 포함할 수 있다. 도 9의 실시예에서, 제어기(112)는 데이터 유닛들(114)에 걸쳐 스트라이프화시킬 모든 데이터를 캐싱하기 위한 기입 캐시를 가지는 RAID 제어기를 포함할 수 있다. 추가로, 제어기(112)는 스토리지 제어기 드라이버(106)에 대해 기술된 바와 같이 원자 기입 동작들을 수행하기 위한 스토리지 제어기 드라이버(106)의 로직을 구현할 수 있다.
스토리지 어드레스에 대한 기입 데이터를 가지는 기입 동작(태그)에 대한 기입 커맨드를 프로세싱할 시(블록(900)), 제어기(112)는 기입 캐시 내에 데이터의 이전 버전으로서 스토리지 어드레스에서 데이터 저장 유닛들(114)에 데이터의 카피를 저장한다(블록(901)). 대안적인 카피-온 기입 구현예에서, 제어기(112)는 오래된 데이터가 위치된 곳을 기억하고, 새로운 데이터를 새로운 저장 영역에 기입할 수 있고, 인디렉션 표는 오래된 데이터의 위치가 재사용되도록 한다. 제어기(112)는 스토리지 디바이스 내의 데이터 저장 유닛들에 걸쳐 스트라이프화하기 위한 기입 데이터에 대한 스트라이프 유닛들을 결정하고(블록(902)) 저장 유닛들(114)의 패리티 데이터 저장 유닛에 기입하기 위한 스트라이프 유닛들에 대한 XOR 패리티 데이터와 같은, 그러나 이에 제한되지 않는, 삭제 코드 패리티 데이터를 계산한다(블록(903)). 일 실시예에서, 제어기(112)는 RAID 알고리즘을 사용하여 상이한 RAID 레벨들에 따라 스트라이프 유닛들 및 패리티 데이터를 결정할 수 있다. 제어기(112)는 데이터 저장 유닛들(904)에 스트라이프 유닛들 및 패리티 데이터를 기입하고(블록(904)), 저장 유닛들(114)에 대한 기입 커맨드로부터의 데이터의 스트라이핑의 완료 시에 호스트(110)에 리턴시킨다(블록(905)). 패리티 데이터는 에러 정정 코드들 또는 본 기술분야에 공지된 다른 패리티 알고리즘을 사용하여 계산될 수 있다.
도 10은 스토리지 제어기 드라이버(106)로부터의 클로즈(CLOSE) 커맨드를 프로세싱하기 위해 스토리지 디바이스 제어기(112)에 의해 수행되는 동작들의 실시예를 예시한다. 기입 동작(태그)에 대한 클로즈(CLOSE) 커맨드를 수신할 시에(블록(1000)), 제어기(112)는 기입 동작에 대한 데이터의 이전 버전들 및 기입 상태 엔트리(300i)를 포함한, 기입 동작에 대한 기입 상태 정보를 폐기한다(블록(1002)). 클로즈(CLOSE) 완료는 기입 동작(태그)에 대해 호스트 시스템(100)에 리턴된다(블록(1004)).
도 11-13은 정전 또는 기입 동작들의 인터럽션을 초래하는 다른 이벤트와 같은 고장으로부터 복원시키기 위해 스토리지 제어기 드라이버(106)에 의해 수행되는 동작들의 실시예들을 예시한다. 도 11에 대해, 기입 동작들에 대한 인터럽션을 검출할 시에(블록(1100)), 스토리지 제어기 드라이버(106)는 기입됨(WRITTEN) 상태(206)를 가지지 않는 스토리지 디바이스들(1021, 1022...102n) 각각에 상태 질의를 송신한다(블록(1101)). 상태를 수신할 시에(블록(1102)), 스토리지 제어기 드라이버(106)는 기입됨(WRITTEN), 오픈(OPEN), 클로즈드(CLOSED) 등과 같은, 스토리지 디바이스로부터 수신되는 상태에 대응하는 상태(206)를 표시하도록 기입 동작 태그(202) 및 스토리지 디바이스(204)에 대한 기입 상태 엔트리(200i)를 업데이트한다(블록(1103)). 수신된 상태가 스토리지 디바이스에 송신된 복수의 기입 커맨드들 중 하나에 대한 것인 경우, 리턴된 상태는 더티(DIRTY)를 나타낼 수 있고, 따라서, 상이한 기입(WRITE) 커맨드들과 함께 송신된 데이터의 모든 부분들은 아닌, 데이터의 일부분이, 기입되었다. (블록(1104)에서) 상태가 기입 동작(태그들) 중 하나에 대한 모든 스토리지 디바이스들(1021, 1022...102n)에 대해 수신되는 경우, 스토리지 제어기 드라이버(106)는 기입 동작에 관여하는 스토리지 디바이스들(1021, 1022...102n)을 데이터의 이전 버전으로 리턴시키거나(롤 백) 기입 데이터의 버전으로 리턴시키도록(롤 포워드) 복원 동작을 개시한다(블록(1105)). 대안적으로, 복원 동작은 판독 커맨드를 통해 스토리지 디바이스(1021, 1022...102n)로부터 복원될 수 있는 전력 손실의 시간에서 인 플라이트(in flight)였던 데이터를 재생성하도록 태그 커맨드를 가지는 판독을 사용함으로써 스토리지 디바이스 내의 데이터를 지속적이도록(consistent) 만드는 것을 수반할 수 있다. 도 12 및 13은 도 11의 블록(1105)에서 수행되는 상이한 타입들의 복원 동작들에 대한 동작들의 실시예들을 예시한다.
도 12는 기입 동작 이전에 데이터의 이전 버전으로 복귀하는 복원 동작을 수행하도록 스토리지 드라이버 제어기(106)에 의해 수행되는 동작들의 실시예를 예시한다. 복원 동작이 존재하는 경우, 도 12의 동작들은 기입 동작 상태(200)에서 각각의 기입 동작 태그에 대해 수행될 수 있다. 복원 동작을 개시할 때(블록(1200)), 스토리지 제어기 드라이버(106)는, 기입 동작의 상태가, 기입 동작 태그에 대한 기입 상태 엔트리(200i)에서 스토리지 디바이스들(1021, 1022...102n) 모두가 아닌 그중 일부가 기입됨(WRITTEN) 상태에 있을 때 발생하는 인터럽트된 기입인지의 여부를 결정한다(블록(1201)). 이는, 일부 엔트리들(200i)이 기입됨(WRITTEN) 상태를 나타내고 다른 것들이 오픈(OPEN) 또는 더티(DIRTY) 상태 또는 기입이 완료되지 않았을 수 있음을 나타내는 임의의 다른 상태를 나타낼 때 발생할 수 있다. (블록(1201)에서) 기입 동작에 대한 상태가 인터럽트된 기입이 아닌 경우, 스토리지 제어기 드라이버(106)는, 기입 동작 태그의 상태가, 스토리지 디바이스들(1021, 1022...102n) 중 적어도 하나가 오픈(OPEN) 상태에 있고, 적어도 하나가 유휴(IDLE) 상태일 때 발생하는, 인터럽트된 오픈인지의 여부를 결정한다(블록(1202)). 그러한 경우, 복원 동작은 (블록(1203)에서) 클로즈(CLOSE) 커맨드를 모든 스토리지 디바이스들(1021, 1022...102n)에 송신하는 것을 포함한다. 그렇지 않을 경우, (블록(1202)에서) 모두가 유휴(IDLE) 상태에 있는 경우, 어떠한 복원 동작도 취해지지 않고 제어가 종료한다.
(블록(1201)에서) 기입 동작의 상태가 인터럽트된 기입인 경우, 스토리지 제어기 드라이버(106)는 복귀(REVERT) 커맨드를 기입됨(WRITTEN) 또는 더티(DIRTY) 상태를 가지는 것으로서 기입 상태 엔트리들(200i)에 표시되는 임의의 스토리지 디바이스(1021, 1022...102n)에 송신하여 스토리지 디바이스(1021, 1022...102n)가 데이터의 이전 버전을 가지고 업데이트된 데이터를 롤백시키게 한다(블록(1204)). (블록(1205)에서) 기입 동작에 대한 스토리지 디바이스들 중 하나로부터 복귀(REVERT) 커맨드가 완료되었다는 확인응답을 수신하면, (블록(1206)에서) 복귀(REVERT) 커맨드를 수신하는 모든 디바이스들(1021, 1022...102n)이 복귀(REVERT) 동작이 완료되었다고 확인응답하는 경우, 스토리지 제어기 드라이버(106)는 유휴(IDLE) 상태에 있지 않은 기입 동작 태그에 대한 기입 상태 엔트리들(200i)에서 식별되는 모든 스토리지 디바이스들(1021, 1022...102n)에 클로즈(CLOSE) 커맨드를 송신한다(블록(1207)). 이 점에서, 데이터가 이전 상태로 복귀했기 때문에, 기입될 필요가 있는 임의의 데이터는 기입 데이터를 생성한 더 높은 레벨의 애플리케이션으로부터 복원되어야 한다. 그렇지 않은 경우, (블록(1206)에서) 스토리지 디바이스들(1021, 1022...102n) 모두가 복귀(REVERT) 커맨드가 완료되었다고 확인응답하지는 않는 경우, 제어는 블록(1205)으로 역진행하여 모든 복귀(REVERT) 커맨드들이 완료되기를 기다린다.
도 13은 복원 동작을 수행하여 기입 동작에 대한 기입 커맨드를 수신한 스토리지 디바이스들(1021, 1022...102n) 모두에서 기입 동작을 완료하도록 스토리지 드라이버 제어기(106)에 의해 수행되는 동작들의 대안적인 실시예를 예시한다. 복원 동작이 존재하는 경우, 도 13의 동작들은 기입 동작 상태(200)에서 각각의 기입 동작 태그에 대해 수행될 수 있다. 복원 동작을 개시할 시(블록(1300)), 스토리지 제어기 드라이버(106)는 도 12의 블록들(1201, 1202 및 1203)에 대해 기술된 동일한 동작들인 블록들(1301, 1302 및 1303)에서의 동작들을 수행하여 기입 동작이 인터럽트된 기입 상태를 가지는지 또는 인터럽트된 오픈(OPEN) 상태를 가지는지를 결정한다. 상태가 인터럽트된 기입 상태라고 결정할 시(블록(1301)), 패리티 데이터를 가지는 실시예들에 대해, (블록(1306)에서) 패리티 데이터를 가지는 스토리지 디바이스(들)가 기입됨(WRITTEN) 상태에 있지 않은 경우, 스토리지 제어기 드라이버(106)는 더티(DIRTY) 또는 기입됨(WRITTEN) 상태(206)를 나타내는 엔트리들(200i)을 가지는 임의의 스토리지 디바이스들로부터 기입된 기입 데이터를 판독한다(블록(1304)). 스토리지 제어기 드라이버(106)는 완료되지 않은 기입들에 대해, 스토리지 디바이스들(1021, 1022...102n)로부터 판독된 기입 데이터 및 기입 캐시(110) 내의 기입 데이터 중 임의의 것으로부터 패리티 데이터를 계산한다(블록(1305)). 계산된 패리티 데이터는 패리티를 가지는 스토리지 디바이스(들)에 기입된다(블록(1306)).
(블록(1306)에서) 패리티의 재기입을 완료한 이후, 또는 (블록(1303)에서) 패리티 데이터를 가지는 스토리지 디바이스(들)가 기입됨(WRITTEN) 상태에 있고, 이후 스토리지 디바이스들 각각(1021, 1022...102n)에 대해 오픈(OPEN) 상태에 있는 것으로서(기입이 완료되지 않음) 기입 동작 태그에 대해 상태 엔트리들(200i)에서 식별되는 경우, 스토리지 제어기 드라이버(106)는 기입 캐시(110)로부터 이전에 송신된 기입 데이터를 기입하도록 기입(WRITE) 커맨드를 재송신한다(블록(1307)). 패리티 데이터가 존재하지 않은 실시예들에서, 이후 기입 동작에 대한 인터럽트된 기입 상태를 결정한 이후(블록(130)), 제어는 블록(1307)으로 바로 진행한다.
도 13의 기술된 실시예들을 가지고, 기입 완료가 모든 데이터의 기입 이후 리턴되는 실시예들에서, 이후 블록(1307)에서의 동작이 수행되어 기입을 완료하지 않은 스토리지 디바이스들에 대한 데이터를 재기입한다. 기술된 실시예들에서, 스토리지 디바이스(1021, 1022...102n)는 기입의 완료 시에 중간 더티(DIRTY) 확인응답들을 리턴시키는 것이 아니라, 기입(WRITE) 커맨드들 또는 서브-기입 커맨드들이 완료될 때까지 기다리고 이후 기입 동작을 위해 사용되는 모든 기입 커맨드들에 대한 기입 완료를 송신할 수 있다. 이 실시예에서, 더티(DIRTY) 상태는 오직, 에러 복원 동안 상태 질의에 응답하여 리턴된다. 대안적인 실시예에서, 스토리지 디바이스(1021, 1022...102n)는 기입 동작을 위한 복수의 기입 커맨드들 중 하나를 완료시키는 것에 응답하여 더티(DIRTY)를 리턴시킬 수 있다.
도 14는 스토리지 제어기 드라이버(106)로부터 상태 질의를 수신하는 것에 응답하여 스토리지 디바이스들(1021, 1022...102n)의 제어기(112)에 의해 수행되는 동작들의 실시예를 예시한다. 상태 질의를 수신하는 것(블록(1400))에 응답하여, (블록(1401)에서) 기입 동작 상태(300)에서 유지되는 기입 동작 태그들 중 임의의 것에 대한 임의의 계류 중인 완료되지 않은 커맨드들이 존재하는 경우, 스토리지 디바이스(1021, 1022...102n)는 오픈(OPEN), 기입(WRITE), 클로즈(CLOSE), 복귀(REVERT)와 같은, 기입 동작들에 대한 계류중인 커맨드들을 완료할 것이다. 기입 동작들에 대한 계류 중인 커맨드들이 존재하지 않는 경우(블록(1401)), 또는 모든 계류 중인 커맨드들을 완료한 이후(블록(1402)), 제어기(112)는 모든 기입 상태 엔트리들(300i)에서 표시되는 바와 같이 모든 기입 동작 태그들에 대한 상태 정보를 송신한다(블록(1403)).
"일 실시예" 또는 "실시예"에 대한 이 명세서 전반에 걸친 참조가, 실시예와 관련하여 기술되는 특정 특징, 구조 또는 특성이 본 발명의 적어도 일 실시예에 포함된다는 것이 인지되어야 한다. 따라서, 이 명세서의 다양한 부분들에서 "실시예" 또는 "일 실시예" 또는 "대안적인 실시예"에 대한 둘 이상의 참조들이 반드시 모두 동일한 실시예를 지칭하지는 않는다는 것이 강조되며 인지되어야 한다. 또한, 특정 특징들, 구조들 또는 특성들은 발명의 하나 이상의 실시예들에서 적합한 것으로서 조합될 수 있다.
유사하게, 발명의 실시예들의 이전 기재에서, 다양한 특징들이, 다양한 발명의 양태들 중 하나 이상의 이해를 보조하는 개시내용의 개요화의 목적으로, 발명의 단일 실시예, 도면 또는 기재에서 때때로 함께 그룹화된다는 것이 인지되어야 한다. 그러나, 개시내용의 이러한 방법은, 청구되는 발명 대상이 각각의 청구항에서 명시적으로 인용되는 것보다 더 많은 특징들을 요구한다는 의도를 반영하는 것으로서 해석되지 않아야 한다. 오히려, 후속하는 청구항들이 반영하는 바와 같이, 발명의 양태들은 단일의 이전의 개시된 실시예의 모두보다 더 적은 특징들에 존재한다. 따라서, 상세한 설명에 후속하는 청구항들은 이에 의해 이러한 상세한 설명에 명백하게 포함된다.
스토리지 제어기 드라이버(106) 및 스토리지 디바이스들(1021, 1022...102n) 내의 제어기(112)의 기술된 동작들은 소프트웨어, 펌웨어, 하드웨어 또는 이들의 임의의 조합을 산출하기 위해 표준 프로그래밍 및/또는 엔지니어링 기법들을 사용하여 방법, 장치 또는 컴퓨터 판독가능한 저장 매체로서 구현될 수 있다. 기술된 동작들은 기능들을 직접 실행할 수 있는 "컴퓨터 판독가능한 저장 매체" 내에 유지되는, 또는 프로세서가 컴퓨터 판독가능한 저장 매체로부터 코드를 판독하고 실행할 수 있는 코드 또는 로직으로서 구현될 수 있다. 컴퓨터 판독가능한 저장 매체는, 자기 저장 매체(예를 들어, 하드 디스크 드라이브들, 플로피 디스크들, 테이프 등), 광학 스토리지(CD-ROM들, DVD들, 광학 디스크들 등), 휘발성 및 비휘발성 메모리 디바이스들(예를 들어, EEPROM들, ROM들, PROM들, RAM들, DRAM들, SRAM들, 플래시 메모리, 펌웨어, 프로그래밍가능한 로직 등), 고체 상태 디바이스(Solid State Devices)(SSD) 등을 포함할 수 있지만, 이에 제한되지 않는다. 컴퓨터 판독가능한 저장 매체는 하드웨어 디바이스에서 구현되는 디지털 로직(예를 들어, 집적 회로 칩, 프로그래밍가능한 논리 디바이스, 프로그래밍가능한 게이트 어레이(Programmable Gate Array)(PGA), 필드-프로그래밍가능한 게이트 어레이(field-programmable gate array)(FPGA), 주문형 집적 회로(Application Specific Integrated Circuit)(ASIC) 등)을 더 포함할 수 있다. 또한, 기술된 동작들을 구현하는 코드는 "전송 신호들"에서 구현될 수 있고, 여기서 전송 신호들은 광섬유, 구리 와이어 등과 같은 전송 매체를 통해 또는 공간을 통해 전파할 수 있다. 코드 또는 로직이 인코딩되는 전송 신호들은 무선 신호, 위성 전송, 라디오 파들, 적외선 신호들, 블루투스 등을 더 포함할 수 있다. 컴퓨터 판독가능한 저장 매체 상에 내장되는 프로그램 코드는 전송국 또는 전송 컴퓨터로부터 수신국 또는 수신 컴퓨터로 전송 신호들로서 전송될 수 있다. 컴퓨터 판독가능한 저장 매체는 전송 신호들 단독으로 구성되는 것이 아니라, 유형적 컴포넌트들을 포함한다. 본 기술분야의 통상의 기술자는 많은 수정들이 본 발명의 범위로부터 벗어나지 않고 이러한 구성에 대해 이루어질 수 있으며, 제조 물품이 본 기술분야에 공지된 적절한 정보 베어링 매체를 포함할 수 있음을 인지할 것이다.
도 15는 호스트 시스템(100)이 구현될 수 있는 시스템(1500)의 실시예를 예시한다. 시스템은 운영 체제(104) 및 스토리지 제어기 드라이버(106)와 같은 실행 중인 프로그램들, 오퍼랜드들 및 파라미터들이 캐싱되는 휘발성 메모리 디바이스(1508), 및 데이터와 프로그램들이 저장될 수 있는 비휘발성 스토리지 디바이스(1510)와 버스(1506)를 통해 통신하는 프로세서(1504)를 포함한다. 프로세서(1504)는, 입력 디바이스들, 디스플레이 디바이스들, 그래픽 카드들, 포트들, 네트워크 인터페이스들 등을 포함할 수 있는 입력/출력(I/O) 디바이스들(1512a, 1512b)과 또한 통신할 수 있다. 비휘발성 스토리지 디바이스(1510)는 스토리지 드라이브 베이 내와 같은, 시스템 인클로저(1500)에 장착되거나, 또는 포트 인터페이스를 통해 또는 네트워크를 통해 시스템(1500)에 접속될 수 있다.
예들
후속하는 예들은 추가적인 실시예들에 관한 것이다.
예 1은 동작들을 야기하도록 복수의 스토리지 디바이스들과 통신하는 호스트 시스템에서 실행되는 컴퓨터 프로그램 명령들을 가지는 컴퓨터 판독가능한 스토리지 디바이스이며, 동작들은: 기입 동작을 위해 데이터를 기입할 복수의 스토리지 디바이스들을 결정하는 것; 기입 동작을 고유하게 식별하기 위한 태그를 생성하는 것; 기입 데이터 및 태그를 포함하는 기입 커맨드를 결정된 스토리지 디바이스들 각각에 송신하여 스토리지 디바이스들 각각이 스토리지 디바이스에서 기입 데이터를 기입하게 하는 것 ― 스토리지 디바이스들 각각은 기입 동작에 의해 업데이트되도록 데이터의 이전 버전의 카피를 유지함 ― ; 및 태그를 가지는 복귀 커맨드를 스토리지 디바이스들 중 하나에 송신하여 스토리지 디바이스가 스토리지 디바이스에서 기입 데이터의 이전 버전의 카피를 복원하게 하는 것을 포함한다.
예 2에서, 예들 1 및 3-11의 발명 대상은, 동작들이: 디바이스들 각각에 태그를 가지는 오픈 커맨드를 송신하는 것을 더 포함하고, 오픈 커맨드는 스토리지 디바이스들 각각이 기입 동작에 의해 업데이트될 데이터의 이전 버전의 카피를 유지하게 하고; 그리고 기입 커맨드는 오픈 커맨드를 송신받은 스토리지 디바이스들 모두로부터 오픈 커맨드의 확인응답을 수신하는 것에 응답하여 스토리지 디바이스들 각각에 송신된다는 것을 선택적으로 포함할 수 있다.
예 3에서, 예들 1, 2, 및 4-11의 발명 대상은, 동작들이: 스토리지 디바이스에서 기입 커맨드가 완료된 스토리지 디바이스들 모두에 대한 확인응답을 수신하는 것에 응답하여, 스토리지 디바이스들 각각에 클로즈 커맨드를 송신하는 것을 더 포함하고, 클로즈 커맨드가 스토리지 디바이스들 각각이 데이터의 이전 버전의 카피를 포함하는 기입 동작의 컨텍스트를 제거하게 한다는 것을 선택적으로 포함할 수 있다.
예 4에서, 예들 1-3 및 5-11의 발명 대상은, 동작들이: 인터럽션을 검출하는 것; 모든 스토리지 디바이스들이 기입 커맨드를 완료하지 않았다고 결정하는 것; 및 기입 동작을 클로즈하도록 클로즈 커맨드를 오픈 상태인 스토리지 드라이브들 각각에 송신하는 것을 더 포함한다는 것을 선택적으로 포함할 수 있다.
예 5에서, 예들 1-4 및 6-11의 발명 대상은, 동작들이: 인터럽션을 검출하는 것에 응답하여, 기입 커맨드의 완료에 확인응답하지 않은 스토리지 디바이스들의 상태를 결정하는 것을 더 포함하고, 복귀 커맨드가 기입 커맨드를 완료했다고 결정된 스토리지 디바이스들 중 적어도 하나의 스토리지 디바이스에 송신되는 것을 더 포함한다는 것을 선택적으로 포함할 수 있다.
예 6에서, 예들 1-5 및 7-11의 발명 대상은, 스토리지 디바이스들의 상태를 결정하는 것이, 기입 커맨드가 완료되었다는 것에 확인응답하지 않은 기입 커맨드를 수신한 스토리지 디바이스들 각각에 질의를 송신하는 것을 포함하고, 복귀 커맨드가 기입이 완료되었음을 나타내는 기입 커맨드에 응답한 스토리지 디바이스들 각각에 그리고 기입이 완료되었음을 나타내는 질의에 응답한 스토리지 디바이스들 각각에 송신된다는 것을 선택적으로 포함할 수 있다.
예 7에서, 예들 1-6 및 8-11의 발명 대상은, 동작들이: 기입 커맨드들과 함께 송신된 기입 데이터를 캐싱하는 것; 기입 데이터를 가지는 기입 커맨드가 완료되었다는 확인응답을 수신하는 것에 응답하여 기입 커맨드들 중 하나와 함께 송신된 캐싱된 기입 데이터를 폐기하는 것; 인터럽션을 검출하는 것에 응답하여, 기입 커맨드를 수신한, 그리고 기입이 완료되었다고 확인응답하지 않은 스토리지 디바이스들의 상태를 결정하는 것; 및 기입이 완료되지 않았음을 나타내는 상태를 가지는 스토리지 디바이스들 각각에 캐싱된 기입 데이터와 함께 기입 커맨드를 재송신하는 것을 더 포함한다는 것을 선택적으로 포함할 수 있다.
예 8에서, 예들 1-7 및 9-11의 발명 대상은, 스토리지 디바이스들에 송신된 기입 커맨드들이 복수의 디바이스들에 송신된 넌-패리티 데이터 및 스토리지 디바이스들 중 적어도 하나의 스토리지 디바이스에 송신된 패리티 데이터를 포함한다는 것을 선택적으로 포함할 수 있다.
예 9에서, 예들 1-8, 10 및 11의 발명 대상은, 패리티 데이터의 기입 커맨드들이 완료되지 않았다고 결정하는 것에 응답하여: 기입 커맨드가 완료되었음을 나타내는 상태를 가지는 스토리지 디바이스들 각각으로부터 기입 데이터를 판독하는 것; 및 스토리지 디바이스들 중 적어도 하나의 스토리지 디바이스로부터 판독되는 기입 데이터 및 기입이 완료되지 않았음을 나타내는 상태를 가지는 스토리지 디바이스들에 대해 캐싱된 기입 데이터로부터 패리티 데이터를 계산하는 것 수행하는 것을 선택적으로 포함할 수 있다.
예 10에서, 예들 1-9 및 11의 발명 대상은, 복수의 기입 커맨드들이 스토리지 디바이스에 대한 기입 데이터의 일부분을 기입하도록 스토리지 디바이스들 각각에 송신되며, 동작들이: 기입 커맨드들과 함께 송신된 기입 데이터의 일부분들을 캐싱하는 것; 인터럽션을 검출하는 것에 응답하여, 기입 커맨드들을 수신하고, 기입들 모두가 완료되었다고 확인응답하지 않은 스토리지 디바이스들의 상태를 결정하는 것; 전부보다 더 적은 송신된 기입 커맨드들이 완료되었음을 확인응답한 스토리지 디바이스들 각각에 대해, 기입 데이터의 일부분을 판독하기 위해 스토리지 디바이스에 적어도 하나의 판독 커맨드를 송신하는 것; 기입 데이터의 판독된 부분으로부터 그리고 완료되지 않은 기입들과 함께 송신된 기입 데이터의 캐싱된 부분들로부터 패리티 데이터를 계산하는 것; 완료되지 않은 기입 데이터의 캐싱된 부분을 가지는, 그리고 계산된 패리티 데이터에 대한 기입 커맨드를 데이터의 부분들이 의도된 적어도 하나의 스토리지 디바이스에 재송신하는 것을 더 포함한다는 것을 선택적으로 포함할 수 있다.
예 11에서, 예들 1-10의 발명 대상은, 호스트 시스템이 스토리지 디바이스들에 복수의 기입 동작들을 송신하고, 각각의 기입 동작에 대해 기입 동작을 고유하게 식별하는 태그를 제공하고, 동작들은: 기입 동작에 대한 인터럽션을 검출하는 것에 응답하여, 스토리지 디바이스들에서 유지되는 태그들에 대한 상태에 대해 스토리지 디바이스들에 질의 요청을 송신하는 것; 및 요청에 응답하여, 스토리지 디바이스들에서 개시되는 기입 동작들의 태그들, 및 오픈 또는 기입된 상태를 나타내는 태그들 각각에 대한 기입 동작의 상태를 스토리지 디바이스들 각각으로부터 수신하는 것을 더 포함한다는 것을 선택적으로 포함할 수 있다.
예 12는 호스트 시스템과 통신하는 스토리지 디바이스이며, 스토리지 디바이스는 실행될 때 동작들을 수행하는 제어기를 포함하고, 동작들은: 기입 데이터 및 기입 동작을 고유하게 식별하는 태그를 가지는 기입 커맨드를 호스트 시스템으로부터 수신하는 것; 기입 커맨드에 응답하여, 기입 데이터를 스토리지 디바이스에 기입하고, 기입 커맨드의 일부분으로서 업데이트된 데이터의 이전 버전의 카피를 유지하는 것; 기입 커맨드가 수신된 기입 동작을 식별하는 태그를 가지는 복귀 커맨드를 수신하는 것; 및 복귀 커맨드에 응답하여, 기입 데이터에 의해 업데이트된 데이터의 이전 버전의 카피를 복원하는 것을 포함한다.
예 13에서, 예들 12 및 14-18의 발명 대상은, 기입 커맨드가 각각이 기입 동작에 대한 기입 데이터의 일부분을 가지는 복수의 기입 커맨드들을 포함하고, 기입 데이터를 기입하고 이전 버전의 카피를 유지하는 동작들이 기입 커맨드들 각각에 대해 수행되고, 동작들은: 기입 커맨드들 모두 내의 기입 데이터의 일부분들의 기입을 완료하는 것에 응답하여 기입 커맨드에 대한 확인응답을 리턴시키는 것; 및 기입 커맨드들 중 하나에 대해 기입된 데이터의 일부분을 더티(dirty)로서 표시하는 것을 더 포함한다는 것을 선택적으로 포함할 수 있다.
예 14에서, 예들 12, 13 및 15-18의 발명 대상은, 동작들이: 기입 동작에 대한 클로즈 커맨드를 수신하는 것; 기입 동작에 대한 클로즈 커맨드에 응답하여 기입 동작에 대한 데이터의 이전 카피 및 기입 동작에 대한 정보를 삭제하는 것; 및 클로즈 커맨드의 완료의 확인응답을 호스트 시스템에 리턴시키는 것을 더 포함한다는 것을 선택적으로 포함할 수 있다.
예 15에서, 예들 12-14 및 16-18의 발명 대상은 스토리지 디바이스가 고체 상태 디스크(SSD)를 포함한다는 것을 선택적으로 포함할 수 있다.
예 16에서, 예들 12-15, 17, 및 18의 발명 대상은, 동작들이: 호스트 시스템으로부터 기입 동작에 대한 태그를 가지는 오픈 커맨드를 수신하는 것; 태그에 의해 식별되는 기입 동작의 일부로서 업데이트된 데이터의 이전 버전의 카피를 유지하도록 태그에 대한 의도 로깅(intent logging)을 표시하는 것; 및 의도 로깅을 표시하는 것에 응답하여 오픈 커맨드의 확인응답을 리턴시키는 것을 더 포함하고, 기입 커맨드는 오픈 커맨드의 확인응답을 리턴시킨 후에 송신된다는 것을 선택적으로 포함할 수 있다.
예 17에서, 예들 12-16 및 18의 발명 대상은, 동작들이: 호스트로부터 상태 질의를 수신하는 것; 상태 질의를 수신하는 것에 응답하여: 기입 동작에 대한 임의의 계류 중인 기입 커맨드를 완료하는 것; 계류 중인 기입 커맨드를 완료하는 것에 응답하여 호스트에 기입 완료를 리턴시키는 것; 및 기입 동작에 대한 계류 중인 기입 커맨드가 존재하지 않는다고 결정하는 것에 응답하여 오픈 상태를 리턴시키는 것을 더 포함한다는 것을 선택적으로 포함할 수 있다.
예 18에서, 예들 12-17의 발명 대상은, 계류 중인 기입 커맨드를 완료시키고, 기입 완료 또는 오픈 상태를 호스트에 리턴시키는 동작이 스토리지 디바이스에서 오픈된 복수의 기입 동작들 각각에 대해 수행된다는 것을 선택적으로 포함할 수 있다.
예 19는, 프로세서; 및 동작들을 수행하도록 프로세서에 의해 실행되는 프로그램 명령들을 가지는 컴퓨터 판독가능한 저장 매체를 포함하는 복수의 스토리지 디바이스들과 통신하는 시스템이며, 동작들은: 기입 동작을 위해 데이터를 기입할 복수의 스토리지 디바이스들을 결정하는 것; 기입 동작을 고유하게 식별하기 위한 태그를 생성하는 것; 결정된 스토리지 디바이스들 각각에 태그 및 기입 데이터를 포함하는 기입 커맨드를 송신하여 스토리지 디바이스들 각각이 스토리지 디바이스에서 기입 데이터를 기입하게 하는 것 ― 스토리지 디바이스들 각각은 기입 동작에 의해 업데이트될 데이터의 이전 버전의 카피를 유지함 ― ; 및 태그를 가지는 복귀 커맨드를 스토리지 디바이스들 중 하나에 송신하여 스토리지 디바이스가 스토리지 디바이스에서 기입 데이터의 이전 버전의 카피를 복원하게 하는 것을 포함한다.
예 20에서, 예들 19 및 21-26의 발명 대상은, 동작들이: 태그를 가지는 오픈 커맨드를 스토리지 디바이스들 각각에 송신하는 것을 더 포함하고, 오픈 커맨드는 스토리지 디바이스들 각각이 기입 동작에 의해 업데이트될 데이터의 이전 버전의 카피를 유지하게 하고; 그리고 기입 커맨드는 오픈 커맨드를 송신받은 스토리지 디바이스들 모두로부터 오픈 커맨드의 확인응답을 수신하는 것에 응답하여 스토리지 디바이스들 각각에 송신된다는 것을 선택적으로 포함할 수 있다.
예 21에서, 예들 19, 20 및 22-26의 발명 대상은, 동작들이: 스토리지 디바이스에서 기입 커맨드가 완료된 모든 스토리지 디바이스들에 대한 확인응답을 수신하는 것에 응답하여, 스토리지 디바이스들 각각에 클로즈 커맨드를 송신하는 것을 더 포함하고, 클로즈 커맨드가 스토리지 디바이스들 각각이 데이터의 이전 버전의 카피를 포함하는 기입 동작의 컨텍스트를 제거하게 한다는 것을 선택적으로 포함할 수 있다.
예 22에서, 예들 19-21 및 23-26의 발명 대상은, 동작들이: 인터럽션을 검출하는 것; 모든 스토리지 디바이스들이 기입 커맨드를 완료했음을 결정하는 것; 및 기입 동작을 클로즈하도록 클로즈 커맨드를 오픈 상태인 스토리지 디바이스들 각각에 송신하는 것을 더 포함한다는 것을 선택적으로 포함할 수 있다.
예 23에서, 예들 19-22 및 24-26의 발명 대상은, 동작들이: 인터럽션을 검출하는 것에 응답하여, 기입 커맨드의 완료에 확인응답하지 않은 스토리지 디바이스들의 상태를 결정하는 것을 더 포함하고, 복귀 커맨드가 기입 커맨드를 완료한 것으로 결정되는 스토리지 디바이스들 중 적어도 하나의 스토리지 디바이스에 송신된다는 것을 선택적으로 포함할 수 있다.
예 24에서, 예들 19-23 및 25-26의 발명 대상은, 스토리지 디바이스들의 상태를 결정하는 것이 기입 커맨드가 완료된 것에 확인응답하지 않은, 기입 커맨드를 수신한 스토리지 디바이스들 각각에 질의를 송신하는 것을 포함하고, 복귀 커맨드는 기입이 완료되었음을 나타내는 기입 커맨드에 응답한 스토리지 디바이스들 각각에, 그리고 기입이 완료되었음을 나타내는 질의에 응답한 스토리지 디바이스들 각각에 송신된다는 것을 선택적으로 포함할 수 있다.
예 25에서, 예들 19-24 및 26의 발명 대상은, 동작들이: 기입 커맨드들과 함께 송신된 기입 데이터를 캐싱하는 것; 기입 데이터를 가지는 기입 커맨드가 완료되었다는 확인응답을 수신하는 것에 응답하여 기입 커맨드들 중 하나와 함께 송신된 캐싱된 기입 데이터를 폐기하는 것; 인터럽션을 검출하는 것에 응답하여, 기입 커맨드를 수신하며 기입이 완료되었다고 확인응답하지 않은 스토리지 디바이스들의 상태를 결정하는 것; 및 기입이 완료되지 않았음을 나타내는 상태를 가지는 스토리지 디바이스들 각각에 캐싱된 기입된 데이터를 가지는 기입 커맨드를 재송신하는 것을 더 포함한다는 것을 선택적으로 포함할 수 있다.
예 26에서, 예들 19-25의 발명 대상은, 스토리지 디바이스들에 송신되는 기입 커맨드들이 복수의 스토리지 디바이스들에 송신되는 비-패리티 데이터 및 스토리지 디바이스들 중 적어도 하나의 스토리지 디바이스에 송신되는 패리티 데이터를 포함한다는 것을 선택적으로 포함할 수 있다.
예 27은: 기입 동작을 위해 데이터를 기입할 복수의 스토리지 디바이스들을 결정하는 것; 기입 동작을 고유하게 식별하기 위한 태그를 생성하는 것; 기입 데이터 및 태그를 포함하는 기입 커맨드를 결정된 스토리지 디바이스들 각각에 송신하여 스토리지 디바이스들 각각이 스토리지 디바이스에서 기입 데이터를 기입하게 하는 것 ― 스토리지 디바이스들 각각은 기입 동작에 의해 업데이트될 데이터의 이전 버전의 카피를 유지함 ― ; 및 태그를 가지는 복귀 커맨드를 스토리지 디바이스들 중 하나에 송신하여 스토리지 디바이스가 스토리지 디바이스에서 기입 데이터의 이전 버전의 카피를 복원하게 하는 것을 포함하는, 방법이다.
예 28에서, 예들 27 및 29-31의 발명 대상은 태그를 가지는 오픈 커맨드를 스토리지 디바이스들 각각에 송신하는 것을 선택적으로 포함할 수 있고, 오픈 커맨드는 스토리지 디바이스들 각각이 기입 동작에 의해 업데이트될 데이터의 이전 버전의 카피를 유지하게 하고; 그리고 기입 커맨드는 오픈 커맨드를 송신받은 모든 스토리지 디바이스들로부터 오픈 커맨드의 확인응답을 수신하는 것에 응답하여 스토리지 디바이스들 각각에 송신된다.
예 29에서, 예들 27, 28 30, 및 31의 발명 대상은, 인터럽션을 검출하는 것에 응답하여, 기입 커맨드의 완료에 확인응답하지 않은 스토리지 디바이스들의 상태를 결정하는 것을 선택적으로 포함할 수 있고, 복귀 커맨드가 기입 커맨드를 완료했다고 결정된 스토리지 디바이스들 중 적어도 하나의 스토리지 디바이스에 송신된다.
예 30에서, 예들 27-30의 발명 대상은, 기입 커맨드들과 함께 송신되는 기입 데이터를 캐싱하는 것; 기입 데이터를 가지는 기입 커맨드가 완료되었다는 확인응답을 수신하는 것에 응답하여 기입 커맨드들 중 하나와 함께 송신되는 캐싱된 기입 데이터를 폐기하는 것; 인터럽션을 검출하는 것에 응답하여, 기입 커맨드를 수신하였고 기입이 완료되었다고 확인응답하지 않은 스토리지 디바이스들의 상태를 결정하는 것; 및 기입이 완료되지 않았음을 나타내는 상태를 가지는 스토리지 디바이스들 각각에 캐싱된 기입 데이터를 가지는 기입 커맨드를 재송신하는 것을 선택적으로 포함할 수 있다.
예 31에서, 예들 27-30의 발명 대상은 나머지 스토리지 기입 레이트(remaining storage write rate) 및 현재 스토리지 기입 레이트(current storage write rate)로부터 기입 증폭에 대한 조정을 결정하는 것이, 현재 스토리지 기입 레이트에 적용될 때 나머지 스토리지 기입 레이트를 초래하는 조정 인자를 결정하는 것을 포함한다는 것을 선택적으로 포함할 수 있다.
예 32에서, 예 27의 발명 대상은 다음 중 적어도 하나의 단계를 선택적으로 포함할 수 있다:
(1) 태그를 가지는 오픈 커맨드를 스토리지 디바이스들 각각에 송신하는 것 ― 오픈 커맨드는 스토리지 디바이스들 각각이 기입 동작에 의해 업데이트될 데이터의 이전 버전의 카피를 유지하게 하고; 기입 커맨드는, 오픈 커맨드를 송신받은 모든 스토리지 디바이스들로부터 오픈 커맨드의 확인응답을 수신하는 것에 응답하여 스토리지 디바이스들 각각에 송신됨 ― ; 및/또는
(2) 스토리지 디바이스에서 기입 커맨드가 완료된 모든 스토리지 디바이스들에 대한 확인응답을 수신하는 것에 응답하여 클로즈 커맨드를 스토리지 디바이스들 각각에 송신하는 것 ― 클로즈 커맨드는 스토리지 디바이스들 각각이 데이터의 이전 버전의 카피를 포함하는 기입 동작의 컨텍스트를 제거하게 함 ― ; 및/또는
(3) 인터럽션을 검출하는 것; 모든 스토리지 디바이스들이 기입 커맨드를 완료하지 않았다고 결정하는 것; 및 기입 동작을 클로즈하도록 클로즈 커맨드를 오픈 상태인 스토리지 디바이스들 각각에 송신하는 것; 및/또는
(4) 인터럽션을 검출하는 것에 응답하여, 기입 커맨드의 완료에 확인응답하지 않은 스토리지 디바이스들의 상태를 결정하는 것 ― 복귀 커맨드가 기입 커맨드를 완료한 것으로 결정되는 스토리지 디바이스들 중 적어도 하나의 스토리지 디바이스에 송신됨 ― ; 및/또는
(5) 스토리지 디바이스들의 상태를 결정하는 것은 기입 커맨드가 완료되었다고 확인응답하지 않았다는 질의를 기입 커맨드를 수신한 스토리지 디바이스들에 송신하는 것을 포함하고, 복귀 커맨드는 기입이 완료되었음을 나타내는 기입 커맨드에 응답한 스토리지 디바이스들 각각에 그리고 기입이 완료되었음을 나타내는 질의에 응답한 스토리지 디바이스들 각각에 송신됨; 및/또는
(6) 기입 커맨드들과 함께 송신된 기입 데이터를 캐싱하는 것; 기입 데이터를 가지는 기입 커맨드가 완료되었다는 확인응답을 수신하는 것에 응답하여 기입 코매드들 중 하나와 함께 송신된 캐싱된 기입 데이터를 폐기하는 것; 인터럽션을 검출하는 것에 응답하여, 기입 커맨드를 수신하였으며 기입이 완료되었다고 확인응답하지 않은 스토리지 디바이스들의 상태를 결정하는 것; 및 기입이 완료되지 않았음을 나타내는 상태를 가지는 스토리지 디바이스들 각각에 캐싱된 기입 데이터를 가지는 기입 커맨드를 재송신하는 것; 및/또는
(7) 스토리지 디바이스들에 송신된 기입 커맨드들은 복수의 스토리지 디바이스들에 송신되는 비-패리티 데이터 및 스토리지 디바이스들 중 적어도 하나의 스토리지 디바이스에 송신되는 패리티 데이터를 포함함; 및/또는
(8) 패리티 데이터의 기입 커맨드가 완료되지 않았다고 결정하는 것에 응답하여: 기입 커맨드가 완료되었음을 나타내는 상태를 가지는 스토리지 디바이스들 각각으로부터 기입 데이터를 판독하는 것; 및 스토리지 디바이스들 중 적어도 하나의 스토리지 디바이스로부터 판독되는 기입 데이터 및 기입이 완료되지 않았음을 나타내는 상태를 가지는 스토리지 디바이스들에 대한 캐싱된 기입 데이터로부터 패리티 데이터를 계산하는 것을 수행하는 것; 및/또는
(9) 복수의 기입 커맨드들은 스토리지 디바이스들 각각에 송신되어 스토리지 디바이스에 대한 기입 데이터의 일부분을 기입하고: 기입 커맨드들과 함께 송신된 기입 데이터의 일부분들을 캐싱하는 것; 인터럽션을 검출하는 것에 응답하여, 기입 커맨드를 수신하였고 모든 기입들이 완료되었다고 확인응답하지 않은 스토리지 디바이스들의 상태를 결정하는 것; 모두보다 더 적은 송신된 기입 커맨드들이 완료되었다고 확인응답하는 스토리지 디바이스들 각각에 대해, 기입 데이터의 일부분을 판독하도록 적어도 하나의 판독 커맨드를 스토리지 디바이스에 송신하는 것; 기입 데이터의 판독된 부분으로부터 그리고 완료하지 않은 기입들과 함께 송신된 기입 데이터의 캐싱된 부분들로부터 패리티 데이터를 계산하는 것; 완료되지 않은 기입 데이터의 캐싱된 부분을 가지는 그리고 계산된 패리티 데이터에 대한 기입 커맨드들을 데이터의 일부분들이 의도되는 적어도 하나의 스토리지 디바이스에 재송신하는 것; 및/또는
(10) 호스트 시스템은 스토리지 디바이스들에 복수의 기입 동작들을 송신하고, 각각의 기입 동작에 대해, 기입 동작을 고유하게 식별하는 데이터를 제공하며: 기입 동작에 대한 인터럽션을 검출하는 것에 응답하여, 스토리지 디바이스들에서 유지되는 태그들에 대한 상태에 대한 질의 요청을 스토리지 디바이스들에 송신하는 것; 및 요청에 응답하여, 스토리지 디바이스들 각각으로부터, 스토리지 디바이스들에서 개시되는 기입 동작들의 태그들 및 오픈 및 기입됨 상태를 나타내는 태그들 각각에 대한 기입 동작의 상태를 수신하는 것을 더 포함함.
예 33은, 기입 동작을 고유하게 식별하는 태그 및 기입 데이터를 가지는 기입 커맨드를 호스트 시스템으로부터 수신하는 것; 기입 커맨드에 응답하여, 기입 데이터를 스토리지 디바이스에 기입하는 것 및 기입 커맨드의 일부로서 업데이트된 데이터의 이전 버전의 카피를 유지하는 것; 기입 커맨드가 수신된 기입 동작을 식별하는 태그를 가지는 복귀 커맨드를 수신하는 것; 및 복귀 커맨드에 응답하여, 기입 데이터에 의해 업데이트된 데이터의 이전 버전의 카피를 복원시키는 것을 포함하는, 방법이다.
예 34에서, 예 33의 발명 대상은 기입 동작에 대한 클로즈 커맨드를 수신하는 것; 및 기입 동작에 대한 클로즈 커맨드에 응답하여 기입 동작에 대한 데이터의 이전 카피 및 기입 동작에 대한 정보를 삭제하는 것; 및 클로즈 커맨드의 완료의 확인응답을 호스트 시스템에 리턴시키는 것을 선택적으로 포함할 수 있다.
예 35에서, 예 33의 발명 대상은 다음 중 적어도 하나의 단계를 선택적으로 포함할 수 있다:
(1) 기입 커맨드는 각각이 기입 동작에 대한 데이터의 부분을 가지는 복수의 기입 커맨드들을 포함하고, 기입 데이터를 기입하고 이전 버전의 카피를 유지하는 동작들은 기입 커맨드들 각각에 대해 수행되며: 기입 커맨드들 모두 내의 기입 데이터의 부분들의 기입을 완료하는 것에 응답하여 기입 커맨드에 대한 확인응답을 리턴시키는 것; 및 기입 커맨드들 중 하나에 대해 기입된 데이터의 부분을 더티로서 표시하는 것을 더 포함함; 및/또는
(2) 기입 동작에 대한 클로즈 커맨드를 수신하는 것; 기입 동작에 대한 클로즈 커맨드에 응답하여 기입 동작에 대한 데이터의 이전 카피 및 기입 동작에 대한 정보를 삭제하는 것; 및 클로즈 커맨드의 완료의 확인응답을 호스트 시스템에 리턴시키는 것;
(3) 스토리지 디바이스는 고체 상태 디스크(SSD)를 포함함; 및/또는
(4) 기입 동작에 대한 태그를 가지는 오픈 커맨드를 호스트 시스템으로부터 수신하는 것; 태그에 의해 식별되는 기입 동작의 일부로서 업데이트된 데이터의 이전 버전의 카피를 유지하도록 태그에 대한 의도 로깅을 표시하는 것; 및 의도 로깅을 표시하는 것에 응답하여 오픈 커맨드의 확인응답을 리턴시키는 것 ― 기입 커맨드는 오픈 커맨드의 확인응답을 리턴시킨 이후 송신됨 ― ; 및/또는
(5) 호스트로부터 상태 질의를 수신하는 것; 상태 질의를 수신하는 것에 응답하여: 기입 동작에 대한 임의의 계류 중인 기입 커맨드를 완료하는 것; 계류 중인 기입 커맨드를 완료시키는 것에 응답하여 호스트에 기입 완료를 리턴시키는 것; 및 기입 동작에 대한 계류중인 기입 커맨드가 존재하지 않는다고 결정하는 것에 응답하여 오픈 상태를 리턴시키는 것; 및/또는
(6) 계류 중인 기입 커맨드를 완료시키고 기입 완료 또는 오픈 상태를 호스트에 리턴시키는 동작은 스토리지 디바이스에서 오픈인 복수의 기입 동작들 각각에 대해 수행됨.
예 36은 임의의 선행 청구항에서 청구되는 바와 같은 방법을 수행하기 위한 수단을 포함하는 장치이다.
예 37은 실행될 때 임의의 선행 청구항에서 청구되는 바와 같은 방법을 구현하거나 장치 또는 시스템을 실현하기 위한 머신-판독가능한 명령들을 포함하는 머신-판독가능한 스토리지이다.
예 38은: 기입 동작에 대한 데이터를 기입할 복수의 스토리지 디바이스들 결정하기 위한 수단; 기입 동작을 고유하게 식별하기 위한 태그를 생성하기 위한 수단; 태그 및 기입 데이터를 포함하는 기입 커맨드를 결정된 스토리지 디바이스들 각각에 송신하여, 스토리지 디바이스들 각각이 스토리지 디바이스에서 기입 데이터를 기입하게 하기 위한 수단 ― 스토리지 디바이스들 각각은 기입 동작에 의해 업데이트될 데이터의 이전 버전의 카피를 유지함 ― ; 태그를 가지는 복원 커맨드를 스토리지 디바이스들 중 하나에 송신하여 스토리지 디바이스가 스토리지 디바이스에서 기입 데이터의 이전 버전의 카피를 복원하게 하기 위한 수단을 포함하는, 장치이다.
예 39에서, 예 38의 발명 대상은 태그를 가지는 오픈 커맨드를 스토리지 디바이스들 각각에 송신하기 위한 수단을 선택적으로 포함할 수 있고, 오픈 커맨드는 스토리지 디바이스들 각각이 기입 동작에 의해 업데이트될 데이터의 이전 버전의 카피를 유지하게 하고, 기입 커맨드는 오픈 커맨드를 송신 받은 모든 스토리지 디바이스들로부터 오픈 커맨드의 확인응답을 수신하는 것에 응답하여 스토리지 디바이스들 각각에 송신된다.

Claims (25)

  1. 동작들을 야기하기 위해 복수의 스토리지 디바이스들과 통신하는 호스트 시스템에서 실행되는 컴퓨터 프로그램 명령들을 가지는 컴퓨터 판독가능한 스토리지 디바이스로서, 상기 동작들은:
    기입 동작을 위해 데이터를 기입할 복수의 스토리지 디바이스들을 결정하는 것;
    상기 기입 동작을 고유하게 식별하기 위한 태그를 생성하는 것;
    상기 태그 및 기입 데이터를 포함하는 기입 커맨드를 상기 결정된 스토리지 디바이스들 각각에 송신하여 상기 스토리지 디바이스들 각각이 상기 스토리지 디바이스에서 상기 기입 데이터를 기입하게 하는 것 ― 상기 스토리지 디바이스들 각각은 상기 기입 동작에 의해 업데이트될 상기 데이터의 이전 버전의 카피(copy)를 유지함 ― ; 및
    상기 태그를 가지는 복귀(revert) 커맨드를 상기 스토리지 디바이스들 중 하나에 송신하여 상기 스토리지 디바이스가 상기 스토리지 디바이스에서 상기 기입 데이터의 이전 버전의 카피를 복원하게 하는 것
    을 포함하는 컴퓨터 판독가능한 스토리지 디바이스.
  2. 제1항에 있어서, 상기 동작들은:
    상기 디바이스들 각각에 상기 태그를 가지는 오픈(open) 커맨드를 송신하는 것을 더 포함하고, 상기 오픈 커맨드는 상기 스토리지 디바이스들 각각이 상기 기입 동작에 의해 업데이트될 데이터의 이전 버전의 카피를 유지하게 하고;
    상기 기입 커맨드는 상기 오픈 커맨드를 송신받은 스토리지 디바이스들 모두로부터 상기 오픈 커맨드의 확인응답(acknowledgment)을 수신하는 것에 응답하여 상기 스토리지 디바이스들 각각에 송신되는 컴퓨터 판독가능한 스토리지 디바이스.
  3. 제1항에 있어서, 상기 동작들은:
    상기 스토리지 디바이스에서 상기 기입 커맨드가 완료된 상기 스토리지 디바이스들 모두에 대한 확인응답을 수신하는 것에 응답하여, 상기 스토리지 디바이스들 각각에 클로즈(close) 커맨드를 송신하는 것을 더 포함하고, 상기 클로즈 커맨드는 상기 스토리지 디바이스들 각각이 상기 데이터의 이전 버전의 카피를 포함하는 상기 기입 동작의 컨텍스트(context)를 제거하게 하는 컴퓨터 판독가능한 스토리지 디바이스.
  4. 제1항에 있어서, 상기 동작들은:
    인터럽션(interruption)을 검출하는 것;
    상기 스토리지 디바이스들 모두가 상기 기입 커맨드를 완료하지 않았다고 결정하는 것; 및
    상기 기입 동작을 클로즈하도록 클로즈 커맨드를 오픈 상태인 스토리지 드라이브들(storage drives) 각각에 송신하는 것
    을 더 포함하는 컴퓨터 판독가능한 스토리지 디바이스.
  5. 제1항에 있어서, 상기 동작들은:
    인터럽션을 검출하는 것에 응답하여, 상기 기입 커맨드의 완료에 확인응답하지 않은 스토리지 디바이스들의 상태를 결정하는 것을 더 포함하고, 상기 복귀 커맨드는 상기 기입 커맨드를 완료했다고 결정된 상기 스토리지 디바이스들 중 적어도 하나의 스토리지 디바이스에 송신되는 컴퓨터 판독가능한 스토리지 디바이스.
  6. 제5항에 있어서, 상기 스토리지 디바이스들의 상태를 결정하는 것은 상기 기입 커맨드가 완료되었다는 것에 확인응답하지 않은 상기 기입 커맨드를 수신한 스토리지 디바이스들 각각에 질의를 송신하는 것을 포함하고, 상기 복귀 커맨드는 기입이 완료되었음을 나타내는 상기 기입 커맨드에 응답한 스토리지 디바이스들 각각에 그리고 기입이 완료되었음을 나타내는 질의에 응답한 스토리지 디바이스들 각각에 송신되는 컴퓨터 판독가능한 스토리지 디바이스.
  7. 제1항에 있어서, 상기 동작들은:
    상기 기입 커맨드들과 함께 송신된 상기 기입 데이터를 캐싱(caching)하는 것;
    상기 기입 데이터를 가지는 상기 기입 커맨드가 완료되었다는 확인응답을 수신하는 것에 응답하여 상기 기입 커맨드들 중 하나와 함께 송신된 상기 캐싱된 기입 데이터를 폐기하는 것;
    인터럽션을 검출하는 것에 응답하여, 상기 기입 커맨드를 수신하였고 상기 기입이 완료되었다고 확인응답하지 않은 스토리지 디바이스들의 상태를 결정하는 것; 및
    상기 기입이 완료되지 않았음을 나타내는 상태를 가지는 스토리지 디바이스들 각각에 상기 캐싱된 기입 데이터와 함께 상기 기입 커맨드를 재송신하는 것
    을 더 포함하는 컴퓨터 판독가능한 스토리지 디바이스.
  8. 제7항에 있어서, 상기 스토리지 디바이스들에 송신된 기입 커맨드들은 복수의 스토리지 디바이스들에 송신된 넌-패리티 데이터(non-parity data) 및 상기 스토리지 디바이스들 중 적어도 하나의 스토리지 디바이스에 송신된 패리티 데이터(parity data)를 포함하는 컴퓨터 판독가능한 스토리지 디바이스.
  9. 제8항에 있어서, 상기 패리티 데이터의 기입 커맨드가 완료되지 않았다고 결정하는 것에 응답하여,
    상기 기입 커맨드가 완료되었음을 나타내는 상태를 가지는 상기 스토리지 디바이스들 각각으로부터 상기 기입 데이터를 판독하는 것; 및
    상기 스토리지 디바이스들 중 상기 적어도 하나의 스토리지 디바이스로부터 판독되는 기입 데이터 및 상기 기입이 완료되지 않았음을 나타내는 상태를 가지는 스토리지 디바이스들에 대해 상기 캐싱된 기입 데이터로부터 상기 패리티 데이터를 계산하는 것
    을 수행하는 컴퓨터 판독가능한 스토리지 디바이스.
  10. 제1항에 있어서,
    복수의 기입 커맨드들이 상기 스토리지 디바이스에 대한 상기 기입 데이터의 일부분을 기입하도록 상기 스토리지 디바이스들 각각에 송신되며, 상기 동작들은:
    상기 기입 커맨드들과 함께 송신된 기입 데이터의 일부분들을 캐싱하는 것;
    인터럽션을 검출하는 것에 응답하여, 상기 기입 커맨드들을 수신하고, 기입들 모두가 완료되었다고 확인응답하지 않은 스토리지 디바이스들의 상태를 결정하는 것;
    송신된 모든 기입 커맨드들보다 적은 기입 커맨드들이 완료되었음을 확인응답한 스토리지 디바이스들 각각에 대해, 상기 기입 데이터의 일부분을 판독하도록 상기 스토리지 디바이스에 적어도 하나의 판독 커맨드를 송신하는 것;
    상기 기입 데이터의 판독된 부분으로부터 그리고 완료되지 않은 기입들과 함께 송신된 상기 기입 데이터의 캐싱된 부분들로부터 패리티 데이터를 계산하는 것;
    완료되지 않은 상기 기입 데이터의 캐싱된 부분을 가지는, 그리고 상기 계산된 패리티 데이터에 대한 기입 커맨드를 상기 데이터의 부분들이 의도된 상기 적어도 하나의 스토리지 디바이스에 재송신하는 것
    을 더 포함하는 컴퓨터 판독가능한 스토리지 디바이스.
  11. 제1항에 있어서,
    상기 호스트 시스템은 상기 스토리지 디바이스들에 복수의 기입 동작들을 송신하고, 각각의 기입 동작에 대해 상기 기입 동작을 고유하게 식별하는 태그를 제공하고, 상기 동작들은:
    상기 기입 동작에 대한 인터럽션을 검출하는 것에 응답하여, 상기 스토리지 디바이스들에서 유지되는 태그들에 대한 상태에 대해 상기 스토리지 디바이스들에 질의 요청을 송신하는 것; 및
    상기 요청에 응답하여, 상기 스토리지 디바이스들에서 개시되는 상기 기입 동작들의 태그들, 및 오픈 또는 기입된 상태를 나타내는 태그들 각각에 대한 상기 기입 동작의 상태를 상기 스토리지 디바이스들 각각으로부터 수신하는 것
    을 더 포함하는 컴퓨터 판독가능한 스토리지 디바이스.
  12. 스토리지 디바이스로서,
    호스트 시스템과 통신하는 제어기;
    상기 제어기에 의해, 기입 데이터 및 기입 동작을 고유하게 식별하는 태그를 가지는 기입 커맨드를 상기 호스트 시스템으로부터 수신하는 것;
    상기 기입 커맨드에 응답하여, 상기 스토리지 디바이스 내의 비휘발성 메모리에 상기 기입 데이터를 기입하고, 상기 기입 커맨드의 일부분으로서 업데이트된 데이터의 이전 버전의 카피를 유지하는 것;
    상기 기입 커맨드가 수신된 상기 기입 동작을 식별하는 태그를 가지는 복귀 커맨드를 수신하는 것; 및
    상기 복귀 커맨드에 응답하여, 상기 기입 데이터에 의해 업데이트된 상기 데이터의 이전 버전의 카피를 복원하는 것
    을 포함하는 스토리지 디바이스.
  13. 제12항에 있어서, 상기 기입 커맨드는 각각이 상기 기입 동작에 대한 기입 데이터의 일부분을 가지는 복수의 기입 커맨드들을 포함하고, 상기 기입 데이터를 기입하고 상기 이전 버전의 카피를 유지하는 동작들은 상기 기입 커맨드들 각각에 대해 수행되고, 상기 동작들은:
    상기 기입 커맨드들 모두 내의 상기 기입 데이터의 일부분들의 기입을 완료하는 것에 응답하여 상기 기입 커맨드에 대한 확인응답을 리턴(return)시키는 것; 및
    상기 기입 커맨드들 중 하나에 대해 기입된 데이터의 일부분을 더티(dirty)로서 표시하는 것
    을 더 포함하는 스토리지 디바이스.
  14. 제12항에 있어서, 상기 동작들은:
    상기 기입 동작에 대한 클로즈 커맨드를 수신하는 것;
    상기 기입 동작에 대한 상기 클로즈 커맨드에 응답하여 상기 기입 동작에 대한 정보 및 상기 기입 동작에 대한 데이터의 이전 카피를 삭제하는 것; 및
    상기 클로즈 커맨드의 완료의 확인응답을 상기 호스트 시스템에 리턴시키는 것
    을 더 포함하는 스토리지 디바이스.
  15. 제12항에 있어서, 상기 스토리지 디바이스는 고체 상태 디스크(solid state disk)(SSD)를 포함하는 스토리지 디바이스.
  16. 제12항에 있어서, 상기 동작들은:
    상기 호스트 시스템으로부터 상기 기입 동작에 대한 태그를 가지는 오픈 커맨드를 수신하는 것;
    상기 태그에 의해 식별되는 상기 기입 동작의 일부로서 업데이트된 데이터의 이전 버전의 카피를 유지하도록 상기 태그에 대한 의도 로깅(intent logging)을 표시하는 것; 및
    상기 의도 로깅을 표시하는 것에 응답하여 상기 오픈 커맨드의 확인응답을 리턴시키는 것
    을 더 포함하고, 상기 기입 커맨드는 상기 오픈 커맨드의 확인응답을 리턴시킨 후에 송신되는 스토리지 디바이스.
  17. 제12항에 있어서,
    상기 동작들은:
    상기 호스트로부터 상태 질의를 수신하는 것;
    상기 상태 질의를 수신하는 것에 응답하여:
    상기 기입 동작에 대한 임의의 계류 중인 기입 커맨드를 완료하는 것;
    상기 계류 중인 기입 커맨드를 완료하는 것에 응답하여 상기 호스트에 기입 완료를 리턴시키는 것; 및
    상기 기입 동작에 대한 계류 중인 기입 커맨드가 존재하지 않는다고 결정하는 것에 응답하여 오픈 상태를 리턴시키는 것
    을 더 포함하는 스토리지 디바이스.
  18. 제17항에 있어서, 상기 계류 중인 기입 커맨드를 완료시키고, 상기 기입 완료 또는 오픈 상태를 상기 호스트에 리턴시키는 동작은 상기 스토리지 디바이스에서 오픈된 복수의 기입 동작들 각각에 대해 수행되는 스토리지 디바이스.
  19. 복수의 스토리지 디바이스들과 통신하는 시스템으로서,
    프로세서; 및
    동작들을 수행하도록 상기 프로세서에 의해 실행되는 프로그램 명령들을 가지는 컴퓨터 판독가능한 저장 매체
    를 포함하고, 상기 동작들은:
    기입 동작을 위해 데이터를 기입할 복수의 스토리지 디바이스들을 결정하는 것;
    상기 기입 동작을 고유하게 식별하기 위한 태그를 생성하는 것;
    상기 결정된 스토리지 디바이스들 각각에 상기 태그 및 기입 데이터를 포함하는 기입 커맨드를 송신하여 상기 스토리지 디바이스들 각각이 상기 스토리지 디바이스에서 상기 기입 데이터를 기입하게 하는 것 ― 상기 스토리지 디바이스들 각각은 상기 기입 동작에 의해 업데이트될 상기 데이터의 이전 버전의 카피를 유지함 ― ; 및
    상기 태그를 가지는 복귀 커맨드를 상기 스토리지 디바이스들 중 하나에 송신하여 상기 스토리지 디바이스가 상기 스토리지 디바이스에서 상기 기입 데이터의 이전 버전의 카피를 복원하게 하는 것
    을 포함하는 시스템.
  20. 제19항에 있어서, 상기 동작들은:
    상기 스토리지 디바이스들 각각에 상기 태그를 가지는 오픈 커맨드를 송신하는 것을 더 포함하고, 상기 오픈 커맨드는 상기 스토리지 디바이스들 각각이 상기 기입 동작에 의해 업데이트될 상기 데이터의 이전 버전의 카피를 유지하게 하고;
    상기 기입 커맨드는 상기 오픈 커맨드를 송신받은 스토리지 디바이스들 모두로부터 상기 오픈 커맨드의 확인응답을 수신하는 것에 응답하여 상기 스토리지 디바이스들 각각에 송신되는 시스템.
  21. 제19항에 있어서, 상기 동작들은:
    인터럽션을 검출하는 것에 응답하여, 상기 기입 커맨드의 완료에 확인응답하지 않은 스토리지 디바이스들의 상태를 결정하는 것을 더 포함하고, 상기 복귀 커맨드는 상기 기입 커맨드를 완료한 것으로 결정되는 스토리지 디바이스들 중 적어도 하나의 스토리지 디바이스에 송신되는 시스템.
  22. 방법으로서,
    기입 동작을 위해 데이터를 기입할 복수의 스토리지 디바이스들을 결정하는 단계;
    상기 기입 동작을 고유하게 식별하기 위한 태그를 생성하는 단계;
    상기 결정된 스토리지 디바이스들 각각에 상기 태그 및 기입 데이터를 포함하는 기입 커맨드를 송신하여 상기 스토리지 디바이스들 각각이 상기 스토리지 디바이스에서 상기 기입 데이터를 기입하게 하는 단계 ― 상기 스토리지 디바이스들 각각은 상기 기입 동작에 의해 업데이트될 상기 데이터의 이전 버전의 카피를 유지함 ― ; 및
    상기 태그를 가지는 복귀 커맨드를 상기 스토리지 디바이스들 중 하나에 송신하여 상기 스토리지 디바이스가 상기 스토리지 디바이스에서 상기 기입 데이터의 이전 버전의 카피를 복원하게 하는 단계
    를 포함하는 방법.
  23. 제22항에 있어서,
    상기 스토리지 디바이스들 각각에 상기 태그를 가지는 오픈 커맨드를 송신하는 단계를 더 포함하고, 상기 오픈 커맨드는 상기 스토리지 디바이스들 각각이 상기 기입 동작에 의해 업데이트될 상기 데이터의 이전 버전의 카피를 유지하게 하고;
    상기 기입 커맨드는 상기 오픈 커맨드를 송신받은 스토리지 디바이스들 모두로부터 상기 오픈 커맨드의 확인응답을 수신하는 것에 응답하여 상기 스토리지 디바이스들 각각에 송신되는 방법.
  24. 제22항에 있어서,
    인터럽션을 검출하는 것에 응답하여, 기입 커맨드의 완료에 확인응답하지 않은 스토리지 디바이스들의 상태를 결정하는 단계를 더 포함하고, 상기 복귀 커맨드는 상기 기입 커맨드를 완료한 것으로 결정되는 스토리지 디바이스들 중 적어도 하나의 스토리지 디바이스에 송신되는 방법.
  25. 제22항에 있어서,
    상기 기입 커맨드들과 함께 송신된 기입 데이터를 캐싱하는 단계;
    상기 기입 데이터를 가지는 상기 기입 커맨드가 완료되었다는 확인응답을 수신하는 것에 응답하여 상기 기입 커맨드들 중 하나와 함께 송신되는 캐싱된 기입 데이터를 폐기하는 단계;
    인터럽션을 검출하는 것에 응답하여, 상기 기입 커맨드를 수신하였고 상기 기입이 완료되었다고 확인응답하지 않은 스토리지 디바이스들의 상태를 결정하는 단계; 및
    상기 기입이 완료되지 않았음을 나타내는 상태를 가지는 스토리지 디바이스들 각각에 상기 캐싱된 기입 데이터와 함께 상기 기입 커맨드를 재송신하는 단계
    를 더 포함하는 방법.
KR1020177012626A 2014-12-10 2015-11-12 다수의 스토리지 디바이스에 걸친 원자 기입 동작의 수행 KR102462708B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/566,636 2014-12-10
US14/566,636 US9471448B2 (en) 2014-12-10 2014-12-10 Performing an atomic write operation across multiple storage devices
PCT/US2015/060478 WO2016094025A1 (en) 2014-12-10 2015-11-12 Performing an atomic write operation across multiple storage devices

Publications (2)

Publication Number Publication Date
KR20170092537A KR20170092537A (ko) 2017-08-11
KR102462708B1 true KR102462708B1 (ko) 2022-11-04

Family

ID=56107928

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177012626A KR102462708B1 (ko) 2014-12-10 2015-11-12 다수의 스토리지 디바이스에 걸친 원자 기입 동작의 수행

Country Status (6)

Country Link
US (1) US9471448B2 (ko)
EP (1) EP3230846B1 (ko)
KR (1) KR102462708B1 (ko)
CN (1) CN107111453B (ko)
TW (1) TWI601008B (ko)
WO (1) WO2016094025A1 (ko)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9760295B2 (en) * 2014-09-05 2017-09-12 Toshiba Memory Corporation Atomic rights in a distributed memory system
US9946607B2 (en) * 2015-03-04 2018-04-17 Sandisk Technologies Llc Systems and methods for storage error management
US10082985B2 (en) * 2015-03-27 2018-09-25 Pure Storage, Inc. Data striping across storage nodes that are assigned to multiple logical arrays
US9588857B2 (en) * 2015-06-22 2017-03-07 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Raid logical stripe backup to non-volatile memory in response to raid storage device media errors
US10120751B2 (en) * 2015-09-25 2018-11-06 Intel Corporation Techniques to recover data using exclusive OR (XOR) parity information
US9921914B2 (en) 2015-11-03 2018-03-20 Intel Corporation Redundant array of independent disks (RAID) write hole solutions
US9910786B2 (en) 2015-11-03 2018-03-06 Intel Corporation Efficient redundant array of independent disks (RAID) write hole solutions
US10725763B1 (en) * 2017-06-28 2020-07-28 Amazon Technologies, Inc. Update and rollback of configurations in a cloud-based architecture
US10379838B1 (en) 2017-06-28 2019-08-13 Amazon Technologies, Inc. Update and rollback of code and API versions
US10552061B2 (en) 2017-08-08 2020-02-04 International Business Machines Corporation Providing preferential access to a metadata track in two track writes
WO2019127212A1 (zh) * 2017-12-28 2019-07-04 华为技术有限公司 一种数据写入的方法及固态硬盘阵列
CN110825309B (zh) 2018-08-08 2021-06-29 华为技术有限公司 数据读取方法、装置及系统、分布式系统
CN108918928B (zh) * 2018-09-11 2020-11-10 广东石油化工学院 一种负荷分解中功率信号自适应重构方法
US10891232B2 (en) * 2019-03-21 2021-01-12 International Business Machines Corporation Page-based memory operation with hardware initiated secure storage key update
CN111897495B (zh) * 2020-07-28 2023-07-04 深圳忆联信息系统有限公司 提高ssd写性能的实现方法、装置、计算机设备及存储介质
US20230136664A1 (en) * 2021-11-02 2023-05-04 SK Hynix Inc. Storage device and electronic device

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5774643A (en) * 1995-10-13 1998-06-30 Digital Equipment Corporation Enhanced raid write hole protection and recovery
JP3592640B2 (ja) * 2001-01-09 2004-11-24 株式会社東芝 ディスク制御システムおよびディスク制御方法
US6523087B2 (en) * 2001-03-06 2003-02-18 Chaparral Network Storage, Inc. Utilizing parity caching and parity logging while closing the RAID5 write hole
US6857053B2 (en) 2002-04-10 2005-02-15 International Business Machines Corporation Method, system, and program for backing up objects by creating groups of objects
US7401191B1 (en) * 2004-05-28 2008-07-15 Ncr Corp. System and method for performing disk write operations by writing to a data depot prior to an in-place write
US7636814B1 (en) 2005-04-28 2009-12-22 Symantec Operating Corporation System and method for asynchronous reads of old data blocks updated through a write-back cache
US7613743B1 (en) 2005-06-10 2009-11-03 Apple Inc. Methods and apparatuses for data protection
EP1934751B1 (en) * 2005-08-25 2017-11-08 Lattice Semiconductor Corporation Smart scalable storage switch architecture
US8443153B1 (en) * 2010-01-06 2013-05-14 Netapp, Inc. Dynamic balancing of performance with block sharing in a storage system
EP2598996B1 (en) * 2010-07-28 2019-07-10 SanDisk Technologies LLC Apparatus, system, and method for conditional and atomic storage operations
US9569320B2 (en) * 2010-12-01 2017-02-14 Seagate Technology Llc Non-volatile memory program failure recovery via redundant arrays
US8732518B2 (en) 2011-04-13 2014-05-20 Netapp, Inc. Reliability based data allocation and recovery in a storage system
US20130198446A1 (en) * 2012-01-30 2013-08-01 Infinidat Ltd. Storage system for atomic write of one or more commands
US9116793B2 (en) 2012-06-12 2015-08-25 International Business Machines Corporation Maintaining versions of data in solid state memory
US9395924B2 (en) * 2013-01-22 2016-07-19 Seagate Technology Llc Management of and region selection for writes to non-volatile memory
KR20140128819A (ko) * 2013-04-29 2014-11-06 삼성전자주식회사 아토믹 라이트 방법
EP2879040B1 (en) * 2013-10-18 2017-03-01 Huawei Technologies Co., Ltd. Data storage method, data storage apparatus, and storage device
US9274720B1 (en) * 2014-09-15 2016-03-01 E8 Storage Systems Ltd. Distributed RAID over shared multi-queued storage devices

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
미국공개특허 제2010-0114847호(2010.05.06.) 1부.*
미국공개특허 제2013-0332655호(2013.12.12.) 1부.*
미국등록특허 제7636814호(2009.12.22.) 1부.*

Also Published As

Publication number Publication date
EP3230846B1 (en) 2019-12-25
CN107111453A (zh) 2017-08-29
KR20170092537A (ko) 2017-08-11
CN107111453B (zh) 2020-11-06
EP3230846A4 (en) 2018-06-13
EP3230846A1 (en) 2017-10-18
WO2016094025A1 (en) 2016-06-16
US9471448B2 (en) 2016-10-18
TWI601008B (zh) 2017-10-01
US20160170850A1 (en) 2016-06-16
TW201633127A (zh) 2016-09-16

Similar Documents

Publication Publication Date Title
KR102462708B1 (ko) 다수의 스토리지 디바이스에 걸친 원자 기입 동작의 수행
US11281601B2 (en) Multi-device storage system with hosted services on peer storage devices
US11481121B2 (en) Physical media aware spacially coupled journaling and replay
US8943357B2 (en) System and methods for RAID writing and asynchronous parity computation
US9785575B2 (en) Optimizing thin provisioning in a data storage system through selective use of multiple grain sizes
CN106471478B (zh) 用于在非易失性数据存储设备内以原子的方式执行多个写事务的设备控制器和方法
US8601347B1 (en) Flash memory device and storage control method
US20170242822A1 (en) Dram appliance for data persistence
US9830092B2 (en) Solid state device parity caching in a hybrid storage array
US10489289B1 (en) Physical media aware spacially coupled journaling and trim
US11630778B2 (en) Efficient processing of commands in a memory sub-system
CN110865770B (zh) 存储器系统
US20170077960A1 (en) Adaptively strengthening ecc for solid state cache
US12013762B2 (en) Meta data protection against unexpected power loss in a memory system
US20150169475A1 (en) Local locking in a bi-directional synchronous mirroring environment
US11287988B2 (en) Autonomous raid data storage device locking system
WO2016032955A2 (en) Nvram enabled storage systems
US11340826B2 (en) Systems and methods for strong write consistency when replicating data
US20240111623A1 (en) Extended protection storage system put operation
US11941287B2 (en) System and method for near-instant unmapping and write-same in a log-structured storage cluster
US11487664B1 (en) Performing data reduction during host data ingest
CN116594805A (zh) 用于设备中复制目的地原子性的系统、方法和装置
CN117336308A (zh) 使用网络恢复存储装置中的数据的方法和存储装置
CN115248748A (zh) 执行元数据管理的存储装置及操作该存储装置的方法
WO2015196416A1 (zh) 数据存储方法、装置和非易失性存储器

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