KR101769465B1 - 극소 저장 작동을 위한 시스템 및 방법 - Google Patents

극소 저장 작동을 위한 시스템 및 방법 Download PDF

Info

Publication number
KR101769465B1
KR101769465B1 KR1020167005340A KR20167005340A KR101769465B1 KR 101769465 B1 KR101769465 B1 KR 101769465B1 KR 1020167005340 A KR1020167005340 A KR 1020167005340A KR 20167005340 A KR20167005340 A KR 20167005340A KR 101769465 B1 KR101769465 B1 KR 101769465B1
Authority
KR
South Korea
Prior art keywords
storage
data
identifiers
metadata
operations
Prior art date
Application number
KR1020167005340A
Other languages
English (en)
Other versions
KR20160038028A (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 KR20160038028A publication Critical patent/KR20160038028A/ko
Application granted granted Critical
Publication of KR101769465B1 publication Critical patent/KR101769465B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F17/30312
    • 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
    • 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/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • G06F9/467Transactional memory

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)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

극소 저장 모듈은 제2의, 상이한 세트의 식별자들을 참조하여 제1 세트의 식별자들로 지향되는 극소 저장 작동을 구현하도록 구성될 수 있다. 극소 저장 작동을 완료하는 것에 응하여, 극소 저장 모듈은 상응하는 데이터를 제1의, 타겟 세트의 식별자들로 이동시킬 수 있다. 이동 작동은 데이터의 논리 인터페이스를 변경하는 것을 포함할 수 있다. 이동 작동은 데이터를 제1 세트의 식별자들에 결합하도록 구성되는 영속적 메타데이터를 저장하는 것을 더 포함할 수 있다.

Description

극소 저장 작동을 위한 시스템 및 방법{SYSTEMS AND METHODS FOR ATOMIC STORAGE OPERATIONS}
본 발명은 저장 시스템에 관한 것으로, 특히 파일 일관성을 유지하기 위한 시스템 및 방법에 관한 것이다.
극소 저장 작동들을 구현하는 방법의 실시예들이 본원에 개시된다. 개시된 방법의 실시예들은 트랜잭션 식별자들을 극소 저장 요청의 타겟 식별자들에 링크하는 단계, 극소 저장 요청의 저장 작동들을 트랜잭션 식별자들로 재지향시키는 단계, 및/또는 극소 저장 요청의 저장 작동들을 완료하는 것에 응하여 재지향된 저장 작동들의 데이터를 트랜잭션 식별자들에서 타겟 식별자들로 이동시키는 단계를 포함할 수 있다.
저장 작동들은 첨부된 데이터를 트랜잭션 식별자들 중 하나 이상과 연관시키도록 구성되는 메타데이터로 저장 매체에 데이터를 첨부하는 것을 포함할 수 있다. 첨부된 데이터를 이동시키는 단계는 첨부된 데이터를 타겟 식별자들과 연관시키도록 구성되는 저장 매체 상에 메타데이터를 저장하는 단계를 포함할 수 있다.
저장 작동들은 각각의 트랜잭션 식별자와 연관되는 하나 이상의 중간 식별자와 저장된 데이터를 결합하도록 구성되는 메타데이터로 비휘발성 저장 매체 상에 데이터를 저장하는 것을 포함할 수 있다. 저장된 데이터를 이동시키는 단계는 하나 이상의 중간 식별자를 각각의 타겟 식별자에 결합하도록 구성되는 비휘발성 저장 매체 상에 영속적 노트를 저장하는 단계를 포함할 수 있다. 일부 실시예들에서, 방법은 재지향된 저장 작동들의 데이터를 이동시키는 단계에 응하여 극소 저장 요청의 완료를 승인하는 단계를 더 포함한다.
극소 저장 작동들을 구현하는 장치의 실시예들이 본원에 개시된다. 개시된 장치는 제2 세트의 식별자들을 저장 요청의 제1 세트의 논리 식별자들로 매핑하도록 구성되는 재지향 모듈, 제2 세트의 식별자들 내에서 저장 디바이스 상의 저장 요청의 저장 작동들을 수행하도록 구성되는 로그 저장 모듈, 및/또는 저장 요청의 저장 작동들을 제1 세트의 논리 식별자들로 이동시키도록 구성되는 극소 저장 모듈을 포함할 수 있다. 극소 저장 모듈은 영속적 메타데이터를 저장함으로써 상기 저장 작동들을 저장 디바이스로 이동시키도록 구성될 수 있다. 영속적 메타데이터는 제2 세트의 식별자들과 연관시켜 저장 디바이스 상에 저장되는 데이터 세그먼트들을 제1 세트의 식별자들에 결합하도록 구성될 수 있다. 극소 저장 모듈은 영속적 메타데이터가 저장 디바이스 상에 저장될 것이라고 판단하는 것에 응하여 저장 요청의 완료를 승인하도록 추가로 구성될 수 있다. 제1 세트의 식별자들은 복수의 공통 원소를 갖지 않는 세트의 논리 식별자들을 포함할 수 있고, 영속적 메타데이터는 복수의 공통 원소를 갖지 않는 세트의 논리 식별자들 내의 각각의 논리 식별자에 데이터 세그먼트들을 결합하도록 구성되는 단일 영속적 노트일 수 있다.
일부 실시예들에서, 재지향 모듈은 제1 세트의 식별자들의 어드레스 공간과 상이한 어드레스 공간 내에서 제2 세트의 식별자들을 할당하도록 구성된다. 대안적으로, 재지향 모듈은 제1 세트의 식별자들의 어드레스 공간의 지정된 영역 내에서 제2 세트의 식별자들을 할당하도록 구성될 수 있다. 제2 세트의 식별자들은 트랜잭션 어드레스 공간에 상응할 수 있고, 개시된 장치는 트랜잭션 어드레스 공간의 식별자들과 연관되는 데이터 세그먼트들을 무효화하도록 구성되는 재구성 모듈을 더 포함할 수 있다.
극소 저장 모듈은 제2 세트의 식별자들에서 식별자들 중 하나의 데이터를 무효화하도록 구성되는 저장 작동을 이동시키는 것에 응하여 제1 세트의 식별자들 내의 식별자들 중 하나를 무효화하도록 구성될 수 있다. 로그 저장 모듈은 저장 디바이스 상의 데이터 세그먼트들의 순서화된 로그에 데이터 세그먼트들을 첨부하도록 구성될 수 있다. 로그 저장 모듈은 데이터 세그먼트들의 순서화된 로그 내에서 저장 요청의 2개 이상의 데이터 세그먼트 사이에 저장 요청과 관련되지 않는 데이터 세그먼트를 첨부하도록 추가로 구성될 수 있다.
극소 저장 작동들을 구현하는 시스템의 실시예들이 본원에 개시된다. 시스템은 목적지 논리 식별자들의 세트와 관련되는 극소 저장 요청을 수신하는 수단, 트랜잭션 식별자들의 세트를 목적지 세트의 논리 식별자들에 링크하는 수단, 극소 저장 요청과 관련되는 복수의 데이터 패킷을 저장 디바이스 상의 순차적 저장 로그에 첨부하는 수단으로서, 데이터 패킷들은 데이터 패킷들을 각각의 트랜잭션 식별자와 연관시키도록 구성되는 영속적 메타데이터를 포함하는 수단, 및/또는 영속적 노트를 저장 로그에 첨부하는 수단으로서, 영속적 노트는 데이터 패킷들을 각각의 트랜잭션 식별자와 연관시키도록 구성되는 영속적 메타데이터를 포함하는 복수의 데이터 패킷을 각각의 목적지 논리 식별자와 연관시키도록 구성되는 수단을 포함할 수 있다.
개시된 시스템은 목적지 논리 식별자들의 세트의 논리 식별자들을 각각의 트랜잭션 식별자로 매핑하는 수단을 더 포함할 수 있다. 일부 실시예들에서, 시스템은 각각의 하나 이상의 트랜잭션 식별자에 링크되는 논리 식별자와 연관되는 저장 위치에 트랜잭션 식별자들 중 하나 이상을 결합하는 수단을 포함한다. 개시된 시스템의 실시예들은 영속적 노트를 첨부하는 것에 응하여 각각의 지정 논리 식별자를 사용하여 데이터 패킷들을 각각의 트랜잭션 식별자와 연관시키도록 구성되는 영속적 메타데이터를 포함하는 데이터 패킷들에 대한 액세스를 제공하는 수단을 더 포함할 수 있다.
목적지 논리 식별자들은 논리 어드레스 공간에 상응할 수 있고, 트랜잭션 식별자들은 상이한, 트랜잭션 어드레스 공간에 상응할 수 있다. 시스템은 데이터 패킷들의 영속적 메타데이터의 사용에 의해 논리 어드레스 공간의 논리 식별자들과 저장 디바이스 상의 데이터 패킷들 사이에 매핑들의 색인을 재구성하는 수단, 및/또는 상이한, 트랜잭션 어드레스 공간에 상응하는 트랜잭션 식별자들과 연관되는 데이터 패킷들을 무효화하는 수단을 더 포함할 수 있다.
도 1a는 개방 대 폐쇄 일관성을 위한 시스템의 일 실시예의 블록도이다.
도 1b는 저장 메타데이터의 실시예들을 도시한다.
도 1c는 저장 어레이의 일 실시예를 도시하는 블록도이다.
도 1d는 데이터 패킷 형식의 일 실시예를 도시한다.
도 1e는 저장 로그의 일 실시예를 도시한다.
도 2는 개방 대 폐쇄 일관성을 위한 시스템의 다른 실시예의 블록도이다.
도 3a는 영역 복제, 이동, 병합 및 다른 더 높은 레벨 저장 작동들을 효율적으로 구현하도록 구성되는 저장층을 포함하는 시스템의 일 실시예의 블록도이다.
도 3b는 영역 복제 작동들의 실시예들을 도시한다.
도 3c는 영역 복제 작동들의 추가 실시예들을 도시한다.
도 3d는 영역 복제 작동들의 추가 실시예들을 도시한다.
도 3e는 영역 복제 작동들의 추가 실시예들을 도시한다.
도 4a는 개방 대 폐쇄 일관성을 위한 시스템의 다른 실시예의 블록도이다.
도 4b는 참조 맵의 사용에 의해 구현되는 영역 복제 작동들의 실시예들을 도시한다.
도 4c는 참조 맵의 사용에 의해 구현되는 영역 복제 작동들의 추가 실시예들을 도시한다.
도 4d는 참조 맵의 사용에 의해 구현되는 영역 복제 작동들의 추가 실시예들을 도시한다.
도 4e는 참조 맵의 사용에 의해 구현되는 영역 복제 작동들의 추가 실시예들을 도시한다.
도 5a는 집합층을 포함하는 시스템의 일 실시예의 블록도이다.
도 5b는 집합층의 사용에 의해 구현되는 영역 복제 작동들의 실시예들을 도시한다.
도 6은 중복 제거 작동들의 실시예들을 도시한다.
도 7은 스냅샷 작동들을 효율적으로 구현하도록 구성되는 저장층을 포함하는 시스템의 일 실시예를 도시하는 블록도이다.
도 8a 내지 도 8e는 영역 이동 작동들의 실시예들을 도시한다.
도 9a는 효율적인 파일 관리 작동들을 구현하도록 구성되는 저장층을 포함하는 시스템의 블록도이다.
도 9b는 mmap 체크포인트들을 구현하도록 구성되는 저장층의 일 실시예를 도시한다.
도 9c는 저장층에 의해 구현되는 영역 복제 및 영역 병합 작동들의 실시예들을 도시한다.
도 9d는 영역 복제 및 영역 병합 작동들의 추가 실시예들을 도시한다.
도 9e는 영역 복제 및 영역 병합 작동들의 추가 실시예들을 도시한다.
도 9f는 효율적인 개방 대 폐쇄 파일 일관성을 구현하도록 구성되는 저장층을 포함하는 시스템의 일 실시예의 블록도이다.
도 9g는 폐쇄 대 개방 파일 일관성의 추가 실시예들을 도시한다.
도 10a는 극소 저장 작동들을 구현하도록 구성되는 저장층을 포함하는 시스템의 일 실시예를 도시한다.
도 10b는 극소 저장 작동들의 실시예들을 도시한다.
도 11은 비휘발성 저장 매체 상에서 문맥 형식으로 데이터 저장의 논리 인터페이스를 관리하는 방법의 일 실시예의 흐름도이다.
도 12는 문맥 데이터의 논리 인터페이스를 관리하는 방법의 일 실시예의 흐름도이다.
도 13은 문맥 데이터의 논리 인터페이스를 관리하는 방법의 다른 실시예의 흐름도이다.
도 14는 영역 병합 작동들을 관리하는 방법의 일 실시예의 흐름도이다.
도 15는 영역 복제 작동들을 관리하는 방법의 다른 실시예의 흐름도이다.
도 16은 영역 병합 작동들을 관리하는 방법의 다른 실시예의 흐름도이다.
도 17은 극소 저장 작동들에 대한 방법의 일 실시예의 흐름도이다.
도 18은 극소 저장 작동들에 대한 방법의 다른 실시예의 흐름도이다.
도 19는 극소 저장 작동들에 대한 방법의 다른 실시예의 흐름도이다.
도 1a는 저장 서비스들을 하나 이상의 저장 클라이언트(106)에 제공하도록 구성되는 저장층(130)을 포함하는 컴퓨팅 시스템(100)의 일 실시예의 블록도이다. 저장층(130)은 본원에 더 상세히 개시된 바와 같이 개방 대 폐쇄 파일 서비스들을 제공하도록 구성될 수 있다. 컴퓨팅 시스템(100)은 서버, 데스크탑, 랩탑, 내장형 시스템, 모바일 디바이스 등을 포함하지만, 이에 제한되지 않는 임의의 적절한 컴퓨팅 디바이스를 포함할 수 있다. 일부 실시예들에서, 컴퓨팅 시스템(100)은 서버 컴퓨팅 디바이스들의 클러스터와 같은 다수의 컴퓨팅 디바이스를 포함할 수 있다. 컴퓨팅 시스템(100)은 프로세싱 리소스(101), 휘발성 메모리 리소스(102)(예를 들어, 랜덤 액세스 메모리(RAM)), 비휘발성 저장 리소스(103) 및 통신 인터페이스(104)를 포함할 수 있다. 프로세싱 리소스들(101)은 범용 중앙 처리 장치(CPU), 응용 주문형 집적 회로(ASIC), 및 필드 프로그램 가능 게이트 어레이(FPGA), 프로그램 가능 로직 어레이(PLG) 등과 같은 프로그램 가능 로직 요소를 포함할 수 있지만, 이에 제한되지 않는다. 비휘발성 저장 리소스들(103)은 자기 하드 디스크, 고체 상태 저장 매체, 광 저장 매체 등과 같은 비일시적 기계-판독 가능 저장 매체를 포함할 수 있다. 통신 인터페이스(104)는 컴퓨팅 시스템(100)을 네트워크(105)에 통신 결합하도록 구성될 수 있다. 네트워크(105)는 송신 제어 프로토콜/인터넷 프로토콜(TCP/IP) 네트워크, 로컬 영역 네트워크(LAN), 광역 네트워크(WAN), 가상 사설 네트워크(VPN), 저장 영역 네트워크(SAN), 공중 교환 전화 네트워크(PSTN), 인터넷 등을 포함하지만, 이에 제한되지 않는 임의의 적절한 통신 네트워크를 포함할 수 있다.
컴퓨팅 시스템(100)은 저장층(130)을 포함할 수 있으며, 저장층(130)은 저장 서비스들을 하나 이상의 저장 클라이언트(106)에 제공하도록 구성될 수 있다. 저장 클라이언트들(106)은 (베어 메탈 작동 시스템, 게스트 작동 시스템, 가상 기계, 가상화 환경 등을 포함하는) 작동 시스템, 파일 시스템, 데이터베이스 시스템, 원격 저장 클라이언트(예를 들어, 네트워크(105)를 통해 컴퓨팅 시스템(100) 및/또는 저장층(130)에 통신 결합되는 저장 클라이언트) 등을 포함할 수 있지만, 이에 제한되지 않는다.
저장층(130) (및/또는 저장층(130)의 모듈들)은 소프트웨어, 하드웨어 또는 이들의 조합으로 구현될 수 있다. 일부 실시예들에서, 저장층(130)의 부분들은 비휘발성 저장 리소스들(103)과 같은 영속적인, 비일시적 저장 매체 상에 저장될 수 있는 컴퓨터 프로그램 코드와 같은 실행 가능 명령어들로서 구현된다. 명령어들 및/또는 컴퓨터 프로그램 코드는 프로세싱 리소스들(101)에 의해 실행되도록 구성될 수 있다. 대안적으로, 또는 부가적으로, 저장층(130)의 부분들은 일반적 및/또는 특수 용도 구성 요소, 프로그램 가능 하드웨어, FPGA, ASIC, 하드웨어 제어기, 저장 제어기 등과 같은 기계 구성 요소로서 구현될 수 있다.
저장층(130)은 저장 매체(140) 상에서 저장 작동들을 수행하도록 구성될 수 있다. 저장 매체(140)는 데이터를 영속적으로 저장할 수 있는 임의의 저장 매체를 포함할 수 있다. 본원에 사용되는 "영속적" 데이터 저장은 영속적인, 비휘발성 저장 매체 상에 정보를 저장하는 것을 지칭한다. 저장 매체(140)는 하나 이상의 고체 상태 저장 디바이스 또는 드라이브(SSD), 하드 디스크 드라이브(예를 들어, 통합 구동 전자 공학(IDE) 드라이브, 소형 컴퓨터 시스템 인터페이스(SCSI) 드라이브, 직렬 부착 SCSI(SAS) 드라이브, 직렬 AT 부착(SATA) 드라이브 등), 테이프 드라이브, 기록 가능 광 드라이브(예를 들어, CD 드라이브, DVD 드라이브, 블루레이 드라이브 등) 등에서의 고체 상태 저장 매체와 같은 비휘발성 저장 매체를 포함할 수 있다.
일부 실시예들에서, 저장 매체(140)는 NAND 플래시 메모리, NOR 플래시 메모리, 나노 RAM(NRAM), 자기 저항 RAM(MRAM), 상 변화 RAM(PRAM), 레이스트랙 메모리, 멤리스터(Memristor) 메모리, 나노결정 유선 기반 메모리, 실리콘-산화물 기반 10 나노미터 이하 프로세스 메모리, 그래핀(graphene) 메모리, 실리콘-산화물-질화물-산화물-실리콘(SONOS), 저항성 랜덤 액세스 메모리(RRAM), 프로그램 가능 금속화 셀(PMC), 전도성 브리징 RAM(CBRAM) 등을 포함할 수 있지만, 이에 제한되지 않는 비휘발성 고체 상태 메모리를 포함한다. 저장 매체(140)의 특정 실시예들이 본원에 개시되지만, 본 발명의 교시들은 비휘발성 형태 및 휘발성 형태 둘 다를 포함하는 메모리의 임의의 적절한 형태에 적용될 수 있다. 따라서, 저장층(130)의 특정 실시예들이 비휘발성의, 고체 상태 저장 디바이스들(140)의 맥락으로 개시되지만, 저장층(130)은 다른 저장 디바이스들 및/또는 저장 매체와 함께 사용될 수 있다.
일부 실시예들에서, 저장 매체(140)는 휘발성 메모리를 포함하며, 휘발성 메모리는 RAM, 동적 RAM(DRAM), 정적 RAM(SRAM), 동기 동적 RAM(SDRAM) 등을 포함할 수 있지만, 이에 제한되지 않는다. 저장 매체(140)는 CPU 캐쉬(예를 들어, L1, L2, L3 캐쉬 등), 그래픽 메모리 등과 같은 프로세싱 리소스들(101)의 메모리에 상응할 수 있다. 일부 실시예들에서, 저장 매체(140)는 상호 연결부(127)의 사용에 의해 저장층(130)에 통신 결합된다. 상호 연결부(127)는 주변 구성 요소 상호 연결부(PCI), PCI 익스프레스(PCI-e), 직렬 고급 기술 부착부(직렬 ATA 또는 SATA), 병렬 ATA(PATA), 소형 컴퓨터 시스템 인터페이스(SCSI), IEEE 1394(파이어 와이어), 광섬유 채널, 범용 직렬 버스(USB) 등을 포함할 수 있지만, 이에 제한되지 않는다. 대안적으로, 저장 매체(140)는 네트워크(105) (및/또는 저장 영역 네트워크(SAN), 가상 저장 영역 네트워크(VSAN) 등과 같은 다른 통신 인터페이스)를 통해 저장층(130)에 통신 결합되는 원격 저장 디바이스일 수 있다. 그러므로, 상호 연결부(127)는 PCE-e 버스와 같은 원격 버스, 네트워크 연결부(예를 들어, 인피니밴드(Infiniband)), 저장 네트워크, 광섬유 채널 프로토콜(FCP) 네트워크, 하이퍼(Hyper)SCSI 등을 포함할 수 있다.
저장층(130)은 무엇보다도, 저장 제어기(139)의 사용에 의해 저장 매체(140) 상에서 저장 작동들을 관리하도록 구성될 수 있다. 저장 제어기(139)는 저장 드라이버, I/O 드라이버, 필터 드라이버 등과 같은 하나 이상의 드라이버 및/또는 컴퓨팅 시스템(100) 상에서 작동하는 다른 소프트웨어 모듈; 하드웨어 제어기, 통신 인터페이스 등과 같은 하드웨어 구성 요소; 등을 포함하지만, 이에 제한되지 않는 소프트웨어 및/또는 하드웨어 구성 요소들을 포함할 수 있다. 저장 매체(140)는 저장 디바이스(141) 상에 구현될 수 있다. 저장층(130)의 부분들(예를 들어, 저장 제어기(139))는 저장 디바이스(141)의 하드웨어 및/또는 소프트웨어 구성 요소들(예를 들어, 펌웨어)로서 구현될 수 있다.
저장 제어기(139)는 저장 매체(140)의 특정 저장 위치들에서 저장 작동들을 구현하도록 구성될 수 있다. 본원에 사용되는, 저장 위치는 데이터를 영속적으로 저장할 수 있는 저장 리소스(예를 들어, 저장 매체 및/또는 디바이스)의 저장 단위를 지칭하며; 저장 위치들은 페이지, 페이지들의 그룹(예를 들어, 논리 페이지 및/또는 논리 페이지 내의 오프셋), 저장 구획(예를 들어, 물리적 소거 블록, 논리적 소거 블록 등), 섹터, 자기 디스크 상의 위치, 배터리 백업형 메모리 위치 등을 포함할 수 있지만, 이에 제한되지 않는다. 저장 위치들은 저장 매체(140)의 저장 어드레스 공간(144) 내에서 어드레스 가능할 수 있다. 저장 어드레스들은 물리적 어드레스, 매체 어드레스, 백엔드(back-end) 어드레스, 어드레스 오프셋 등에 상응할 수 있다. 저장 어드레스들은 임의의 적절한 저장 어드레스 공간(144), 저장 어드레싱 체계, 및/또는 저장 위치들의 배열에 상응할 수 있다.
저장층(130)은 저장 클라이언트들(106)이 저장층(130)에 의해 제공되는 저장 서비스들에 액세스할 수 있는 인터페이스(131)를 포함할 수 있다. 저장 인터페이스(131)는 블록 디바이스 인터페이스, 가상화된 저장 인터페이스, 하나 이상의 가상 저장 유닛들(VSUs), 객체 저장 인터페이스, 데이터베이스 저장 인터페이스, 및/또는 다른 적절한 인터페이스 및/또는 어플리케이션 프로그래밍 인터페이스(API) 중 하나 이상을 포함할 수 있다.
저장층(130)은 프론트 엔드(front-end) 저장 인터페이스를 통해 저장 리소스들을 참조하는 것에 대비할 수 있다. 본원에 사용되는, "프론트 엔드 저장 인터페이스"는 저장 클라이언트들(106)이 저장층(130)의 저장 리소스들을 참조할 수 있는 인터페이스 및/또는 명칭 공간을 지칭한다. 저장 인터페이스는 논리 어드레스 공간(132)에 상응할 수 있다. 논리 어드레스 공간(132)은 식별자들의 그룹, 세트, 컬렉션, 범위 및/또는 규모를 포함할 수 있다. 본원에 사용되는, "식별자" 또는 "논리 식별자"(LID)는 소스 리소스를 참조하기 위한 식별자를 지칭하며; LID들은 명칭(예를 들어, 파일 명칭, 구별되는 명칭 등), 데이터 식별자, 참조 부호, 링크, LID, 프론트 엔드 식별자, 논리 어드레스, 논리 블록 어드레스(LBA), 논리 장치 번호(LUN) 어드레스, 가상 장치 번호(VUN) 어드레스, 가상 저장 어드레스, 저장 어드레스, 물리적 어드레스, 매체 어드레스, 백엔드 어드레스 등을 포함할 수 있지만, 이에 제한되지 않는다.
논리 어드레스 공간(132)의 논리 용량은 논리 어드레스 공간(132)에서 LID의 수 및/또는 LID들에 의해 참조되는 저장 리소스들의 크기 및/또는 입도에 상응할 수 있다. 일부 실시예들에서, 논리 어드레스 공간(132)은 "성기게 제공될" 수 있다. 본원에 사용되는, 성기게 제공되는 논리 어드레스 공간(132)은 근본적 저장 리소스들의 물리적 저장 용량을 초과하는(예를 들어, 저장 매체(140)의 저장 용량을 초과하는) 논리 용량을 갖는 논리 어드레스 공간(132)을 지칭한다. 일 실시예에서, 저장층(130)은 저장 매체(140)의 물리적 저장 용량을 초과할 수 있는 64 비트 논리 어드레스 공간(132)(예를 들어, 2^26 고유 LID들을 포함하는 논리 어드레스 공간)을 제공하도록 구성된다. 큰, 성기게-제공되는 논리 어드레스 공간(132)은 네이밍 충돌 가능성을 감소시키면서 저장 클라이언트들(106)이 LID들의 근접한 영역들을 효율적으로 할당하고/하거나 참조하는 것을 가능하게 할 수 있다.
저장층(130)의 변환 모듈(134)은 논리 어드레스 공간(132)의 LID들을 저장 리소스들(예를 들어, 저장 매체(140)의 저장 어드레스 공간(144) 내에 저장되는 데이터)로 매핑하도록 구성될 수 있다. 논리 어드레스 공간(132)은 백엔드 저장 리소스들(예를 들어, 저장 매체(140))와는 관계없을 수 있으므로; 논리 어드레스 공간(132)의 LID들과 저장 어드레스 공간(144)의 저장 어드레스들 사이에 설정되거나 미리 정해진 매핑들이 없을 수 있다. 일부 실시예들에서, 논리 어드레스 공간(132)은 드물고/드물거나, 성기게 제공되고/되거나, 과잉 제공되어, 논리 어드레스 공간(132)의 크기가 저장 매체(140)의 저장 어드레스 공간(144)과 다르다.
저장층(130)은 저장 매체(140) 상에서 수행되는 저장 작동들과 관련되는 저장 메타데이터(135)를 유지하도록 구성될 수 있다. 저장 메타데이터(135)는 논리 어드레스 공간(132)의 LID들과 저장 어드레스 공간(144) 내의 저장 어드레스들 사이에 애니 투 애니(any-to-any) 매핑들을 포함하는 순방향 맵, 저장 매체(140)의 저장 위치들의 콘텐츠와 관련되는 역방향 맵, 유효 비트맵, 신뢰성 테스트 및/또는 상태 메타데이터, 상태 정보(예를 들어, 오류율, 퇴역 상태 등), 캐쉬 메타데이터 등을 포함할 수 있지만, 이에 제한되지 않는다. 저장 메타데이터(135)의 부분들은 컴퓨팅 시스템(100)의 휘발성 메모리 리소스들(102) 내에 유지될 수 있다. 대안적으로, 또는 부가적으로, 저장 메타데이터(135)의 부분들은 비휘발성 저장 리소스들(103) 및/또는 저장 매체(140) 상에 저장될 수 있다.
도 1b는 논리 어드레스 공간(132)의 LID들과 저장 어드레스 공간(144) 내의 백엔드 식별자들(예를 들어, 저장 어드레스들) 사이의 애니 투 애니 매핑들(150)의 일 실시예를 도시한다. 애니 투 애니 매핑들(150)은 저장 메타데이터(135)의 하나 이상의 데이터 구조체에서 유지될 수 있다. 도 1b에 도시된 바와 같이, 변환 모듈(134)은 임의의 저장 리소스 식별자(임의의 LID)를 임의의 백엔드 저장 위치로 매핑하도록 구성될 수 있다. 추가로 예시되는 바와 같이, 논리 어드레스 공간(132)은 근본적 저장 어드레스 공간(144)과 상이하게 크기 조정될 수 있다. 도 1b 실시예에서, 논리 어드레스 공간(132)은 성기게 제공될 수 있고, 이에 따라, 저장 어드레스 공간(144)에서의 저장 어드레스들의 영역보다 더 큰 LID들의 영역을 포함할 수 있다.
앞서 개시된 바와 같이, 저장 클라이언트들(106)은 논리 어드레스 공간(132)의 LID들을 통해 저장 리소스들을 참조할 수 있다. 따라서, 논리 어드레스 공간(132)은 저장 리소스들의 논리 인터페이스(152)에 상응할 수 있고, 저장 어드레스 공간(144) 내에서 특정 저장 어드레스들로의 매핑들은 저장 리소스들의 백엔드 인터페이스(154)에 상응할 수 있다.
저장층(130)은 순방향 맵(160)에서 논리 인터페이스(152)와 백엔드 인터페이스(154) 사이에 애니 투 애니 매핑들(150)을 유지하도록 구성될 수 있다. 순방향 맵(160)은 색인, 맵, 해시 맵, 해시 테이블, 트리(tree), 영역 인코딩된 트리, b-트리 등을 포함하지만, 이에 제한되지 않는 임의의 적절한 데이터 구조체를 포함할 수 있다. 순방향 맵(160)은 저장 매체(140) 상에 저장되는 데이터를 참조하는데 사용되도록 할당되었던 LID들에 상응하는 엔트리들(162)을 포함할 수 있다. 순방향 맵(160)의 엔트리들(162)은 저장 어드레스 공간(144) 내에서 LID들(164A 내지 164D)을 각각의 저장 어드레스(166A 내지 166D)와 연관시킬 수 있다. 순방향 맵(160)은 드물게 상주될 수 있고, 이에 따라, 저장 클라이언트(106)에 의해 현재 할당되지 않고/않거나 저장 매체(140) 상에 저장되는 유효한 데이터를 참조하는데 현재 사용되지 않는 LID들에 상응하는 엔트리들을 생략할 수 있다. 일부 실시예들에서, 순방향 맵(160)은 영역 인코딩된 데이터 구조체를 포함하여, 엔트리들(162) 중 하나 이상은 복수의 LID(예를 들어, LID들의 범위, 규모 및/또는 세트)에 상응할 수 있다. 도 1b 실시예에서, 순방향 맵(160)은 저장 어드레스들(166A)의 상응하는 영역으로 매핑되는 LID들(164A)의 영역에 상응하는 엔트리(162)를 포함한다. 엔트리들(162)은 LID들에 의해 인덱싱될 수 있다. 도 1b 실시예에서, 엔트리들(162)은 각각의 링크에 의해 트리 데이터 구조체로 배열된다. 그러나, 본 발명은 이러한 점에 제한되지 않고, 임의의 적절한 데이터 구조체 및/또는 인덱싱 메커니즘을 사용하도록 구성될 수 있다.
도 1c를 참조하면, 일부 실시예들에서, 저장 매체(140)는 복수의 고체 상태 저장 요소(116A 내지 116Y)를 포함하는 고체 상태 저장 어레이(115)를 포함할 수 있다. 본원에 사용되는, 고체 상태 저장 어레이 (또는 저장 어레이)(115)는 2개 이상의 독립된 열(118)의 세트를 지칭한다. 열(118)은 무엇보다도, 상호 연결부(127)를 사용하여 병렬로 저장층(130)에 통신 결합되는 하나 이상의 고체 상태 저장 요소(116A 내지 116Y)를 포함할 수 있다. 어레이(115)의 행들(117)은 각각의 열(118)의 물리적 저장 유닛들(고체 상태 저장 요소들(116A 내지 116Y))을 포함할 수 있다. 본원에 사용되는, 고체 상태 저장 요소(116A 내지 116Y)는 패키지, 칩, 다이(die), 플레인, 인쇄 회로 기판 등으로 구현되는 고체 상태 저장 리소스들을 포함하지만, 이에 제한되지 않는다. 어레이(115)를 포함하는 고체 상태 저장 요소들(116A 내지 116Y)은 독립된 작동이 가능할 수 있다. 따라서, 고체 상태 저장 요소들(116A) 중 제1의 것은 제2 고체 상태 저장 요소(116B)가 상이한 저장 작동을 수행하는 동안, 제1 저장 작동을 수행하는 것이 가능할 수 있다. 예를 들어, 고체 상태 저장 요소(116A)는 다른 고체 상태 저장 요소(116B)가 상이한 물리적 어드레스에서의 데이터를 판독하는 동안, 제1 물리적 어드레스에서의 데이터를 판독하도록 구성될 수 있다.
고체 상태 저장 어레이(115)는 논리 저장 요소(LSE)로 지칭될 수도 있다. 본원에 더 상세히 개시된 바와 같이, 고체 상태 저장 어레이(115)는 논리 저장 유닛들(행들(117))을 포함할 수 있다. 본원에 사용되는, "논리 저장 유닛" 또는 행(117)은 2개 이상의 물리적 저장 유닛의 조합을 지칭하며, 각각의 물리적 저장 유닛은 어레이(115)의 각각의 열(118) 상에 위치한다. 논리 소거 블록은 2개 이상의 물리적 소거 블록의 세트를 지칭하고, 논리 페이지는 2개 이상의 페이지의 세트 등을 지칭한다. 일부 실시예들에서, 논리 소거 블록은 각각의 논리 저장 요소(115) 및/또는 뱅크(bank) 내의 소거 블록들을 포함할 수 있다. 대안적으로, 논리 소거 블록은 복수의 상이한 어레이(115) 내의 소거 블록들을 포함할 수 있고/있거나 고체 상태 저장 요소들의 다수의 뱅크에 걸쳐 있을 수 있다.
다시 도 1a를 참조하면, 저장층(130)은 로그 구조화된 저장 구성으로(예를 들어, 저장 로그로) 데이터를 저장 매체(140) 상에 저장하도록 구성되는 로그 저장 모듈(136)을 더 포함할 수 있다. 본원에 사용되는, "저장 로그" 또는 "로그 구조체"는 저장 매체(140)의 저장 어드레스 공간(144) 내에서 데이터의 순서화된 배열을 지칭한다. 저장 로그의 데이터는 영속적 메타데이터를 포함하고/하거나 이것과 연관될 수 있다. 따라서, 저장층(130)은 문맥의, 자체 설명 형식으로 데이터를 저장하도록 구성될 수 있다. 본원에 사용되는, 문맥의 또는 자체 설명의 형식은 데이터가 영속적 메타데이터와 연관시켜 저장되는 데이터 형식을 지칭한다. 일부 실시예들에서, 영속적 메타데이터는 데이터를 식별하도록 구성될 수 있고, 이에 따라, 데이터의 논리 인터페이스를 포함하고/하거나 참조할 수 있다(예를 들어, 데이터와 연관되는 LID(들)을 포함할 수 있다). 영속적 메타데이터는 데이터의 소유자, 액세스 제어, 데이터 타입, 상대 위치 또는 데이터의 오프셋과 관련되는 정보, 데이터와 연관되는 저장 작동(들)(예를 들어, 극소 저장 작동, 트랜잭션 등)과 관련되는 정보, 로그 시퀀스 정보, 데이터 저장 파라미터들(예를 들어, 압축 알고리즘, 암호화 등) 등을 포함하지만, 이에 제한되지 않는 다른 정보를 포함할 수 있다.
도 1d는 문맥 데이터 형식의 일 실시예를 도시한다. 도 1d의 패킷 형식(110)은 데이터 세그먼트(112) 및 영속적 메타데이터(114)를 포함한다. 데이터 세그먼트(112)는 임의의 자의적 길이 및/또는 크기를 가질 수 있다. 영속적 메타데이터(114)는 데이터 패킷(110)의 하나 이상의 헤더 필드로 구현될 수 있다. 앞서 개시된 바와 같이, 영속적 메타데이터(114)는 데이터 세그먼트(112)의 논리 인터페이스를 포함할 수 있고, 이에 따라, 데이터 세그먼트(112)와 연관되는 LID(들)을 포함할 수 있다. 도 1d가 패킷 형식(110)을 도시하지만, 본 발명은 이러한 점에 제한되지 않고 저장 매체(140) 상의 색인, 저장 구획 색인 등을 포함하지만, 이에 제한되지 않는 다른 방식들로 데이터(예를 들어, 데이터 세그먼트(112))를 문맥 메타데이터와 연관시킬 수 있다. 데이터 패킷들(110)은 시퀀스 정보(113)와 연관될 수 있다. 시퀀스 정보는 저장 로그 내에서 데이터 패킷들의 상대적 순서를 결정하는데 사용될 수 있다. 일부 실시예들에서, 데이터 패킷들은 저장 매체(140)의 저장 구획들 내에서 순차적으로 첨부된다. 저장 구획들은 소거 블록들, 논리 소거 블록들 등에 상응할 수 있다. 각각의 저장 구획은 다수의 데이터 패킷(110)을 저장하는 것이 가능할 수 있다. 저장 구획 내에서 데이터 패킷들(110)의 상대 위치는 저장 로그 내의 패킷들의 순서를 결정할 수 있다. 저장 구획들의 순서는 무엇보다도, 저장 구획 시퀀스 정보(113)에 의해 결정될 수 있다. 저장 구획들은 저장 구획이 사용을 위해 초기화되거나(예를 들어, 소거되거나), 프로그래밍되거나, 폐쇄되거나 등일 때, 각각의 시퀀스 정보(113)가 할당될 수 있다. 저장 구획 시퀀스 정보(113)는 저장 어드레스 공간(144) 내에서 저장 구획들의 순서화된 시퀀스를 결정할 수 있다. 따라서, 저장 로그 내에서 데이터 패킷(110)의 상대적 순서는: a) 특정 저장 구획 내의 데이터 패킷(110)의 상대 위치, 및 b) 저장 어드레스 공간(144)에서 다른 저장 구획들에 대한 저장 구획의 순서에 의해 결정될 수 있다.
일부 실시예들에서, 저장층(130)은 고체 상태 저장 매체, 플래시 저장 매체 등과 같은 비대칭의, 한 번 기록 저장 매체(140)를 관리하도록 구성될 수 있다. 본원에 사용되는, "한번 기록" 저장 매체는 새로운 데이터가 저장 매체 상에 기록되거나 프로그래밍될 때마다, 재초기화되는(예를 들어, 소거되는) 저장 매체를 지칭한다. 본원에 사용되는, "비대칭" 저장 매체는 상이한 타입들의 저장 작동들에 대해 상이한 레이턴시들을 갖는 저장 매체를 지칭한다. 일부 실시예들에서, 예를 들어, 판독 작동들은 기록/프로그램 작동들보다 더 빠를 수 있고, 기록/프로그램 작동들은 소거 작동들보다 훨씬 더 빠를 수 있다(예를 들어, 매체를 판독하는 것은 소거하는 것보다 수백 배 더 빠르고, 저장 매체를 프로그래밍하는 것보다 수십 배 더 빠를 수 있다). 저장 매체(140)는 그룹으로서 소거될 수 있는 저장 구획들(예를 들어, 소거 블록들)로 분할될 수 있다. 이에 따라, 단일 데이터 세그먼트를 "제 위치에서" 변경하는 것은 데이터를 포함하는 전체 소거 블록을 소거하는 것 그리고 본래의, 변경되지 않은 데이터와 함께 소거 블록에 변경된 데이터를 재기록하는 것이 필요할 수 있다. 이는 비효율적인 "기록 확장"을 야기할 수 있으며, 이는 매체를 지나치게 마모시킬 수 있다. 그러므로 일부 실시예들에서, 저장층(130)은 데이터를 "제 위치에 있지 않게" 기록하도록 구성될 수 있다. 본원에 사용되는, 데이터를 "제 위치에 있지 않게" 기록하는 것은 데이터를 "제 위치에" 오버라이트하는 것(예를 들어, 데이터의 본래의 물리적 저장 위치를 오버라이트하는 것)보다 오히려 데이터를 상이한 저장 위치(들)에서 업데이트하고/하거나 오버라이트하는 것을 지칭한다. 데이터를 제 위치에 있지 않게 업데이트하고/하거나 오버라이트하는 것은 변경될 데이터를 갖는 소거 블록 상의 기존의, 유효한 데이터가 소거되고 재카피될 필요가 없으므로, 기록 확장을 피할 수 있다. 더욱이, 데이터를 제 위치에 있지 않게 기록하는 것은 많은 저장 작동의 레이턴시 경로로부터의 소거를 제거할 수 있어, 소거 레이턴시는 기록 작동들의 "중요한 경로"의 일부가 되지 않는다.
저장층(130)은 무엇보다도, 로그 저장 모듈(136)의 사용에 의해 제 위치에 있지 않게 저장 작동들을 수행하도록 구성될 수 있다. 로그 저장 모듈(136)은 저장층(130)에 의해 수행되는 저장 작동들의 상대적 순서를 유지하여, 저장 매체(140) 상에 "저장 로그"를 형성하는 방식으로 저장 어드레스 공간(144) 내의 현재의 첨부 지점에 데이터를 첨부하도록 구성될 수 있다. 도 1e는 저장 매체(140)의 저장 어드레스 공간(144) 내에서 수행되는 첨부 전용 저장 작동들의 일 실시예를 도시한다. 앞서 개시된 바와 같이, 저장 어드레스 공간(144)은 각각이 데이터를 저장하는데 사용되도록 초기화될(예를 들어, 소거될) 수 있는 복수의 저장 구획(170A 내지 170N)(예를 들어, 소거 블록들, 논리 소거 블록들 등)을 포함한다. 저장 구획들(170A 내지 170N)은 본원에 개시되는 바와 같이 페이지들, 논리 페이지들 등에 상응할 수 있는 각각의 저장 위치를 포함할 수 있다. 저장 위치들은 각각의 저장 어드레스(예를 들어, 저장 어드레스(0) 내지 저장 어드레스(N))가 할당될 수 있다.
로그 저장 모듈(136)은 물리적 어드레스 공간(144) 내에서 첨부 지점(180)으로부터 순차적으로 데이터를 저장하도록 구성될 수 있다. 도 1e 실시예에서, 데이터는 저장 구획(170A)의 저장 위치(182) 내의 첨부 지점(180)에서 첨부될 수 있고, 저장 위치(182)가 채워질 때, 첨부 지점(180)은 다음의 이용 가능한 저장 위치로 진행할 수 있다(181). 본원에 사용되는, "이용 가능한" 저장 위치는 초기화되었고 아직 프로그래밍되지 않았던(예를 들어, 소거되었던) 저장 위치를 지칭한다. 앞서 개시된 바와 같이, 일부 타입들의 저장 매체는 소거 후에 한 번만 확실하게 프로그래밍될 수 있다. 따라서, 이용 가능한 저장 위치는 초기화된 (또는 소거된) 상태의 저장 구획(170A 내지 170N) 내의 저장 위치를 지칭할 수 있다.
도 1e 실시예에서, 논리 소거 블록(170B)은 무엇보다도, 소거된 상태로 있지 않은(예를 들어, 유효한 데이터를 포함하는) 것으로 인해 저장에 이용 가능하지 않거나, 높은 오류율로 인해 사용 불능이거나 할 수 있다. 그러므로, 저장 위치(182)를 채운 후에, 로그 저장 모듈(136)은 이용 가능하지 않은 저장 구획(170B)을 스킵하고, 첨부 지점(180)을 다음의 이용 가능한 저장 구획(170C)으로 진행시킬 수 있다. 로그 저장 모듈(136)은 데이터를 저장 위치들(183 내지 185)에 첨부하는 것을 계속하도록 구성될 수 있으며, 그 때에 첨부 지점(180)은 앞서 개시된 바와 같이 다음의 이용 가능한 저장 구획(170A 내지 170N)에서 계속된다.
저장 어드레스 공간(144) 내의 "마지막" 저장 위치(예를 들어, 저장 구획(170N)의 저장 위치(N)(189)) 상에 데이터를 저장한 후에, 로그 저장 모듈(136)은 제1 저장 구획(170A) (또는 저장 구획(170A)이 이용 가능하지 않으면, 다음의 이용 가능한 저장 구획)으로 다시 랩핑(wrapping)함으로써 첨부 지점(180)을 진행시킬 수 있다. 따라서, 로그 저장 모듈(136)은 저장 어드레스 공간(144)을 루프 또는 사이클로서 처리할 수 있다.
앞서 개시된 바와 같이, 저장 어드레스 공간(144) 내에서 순차적으로 데이터를 첨부하는 것은 저장 매체(140) 상에 저장 로그를 생성할 수 있다. 도 1e 실시예에서, 저장 로그는 저장 어드레스 공간(144) 내에서 첨부 지점(180)으로부터 데이터 패킷들 (및/또는 다른 데이터 구조체들)을 순차적으로 저장함으로써 수행되는 저장 작동들의 순서화된 시퀀스를 포함할 수 있다. 첨부 전용 저장 형식은 앞서 개시된 바와 같이 데이터를 제 위치에 있지 않게 변경하고/하거나 오버라이트하는데 사용될 수 있다. 제 위치에 있지 않게 저장 작동들을 수행하는 것은, 변경되고/되거나 오버라이트되고 있는 데이터를 포함하는 저장 구획들(170A 내지 170N) 상의 기존 유효한 데이터가 소거되고/되거나 재카피될 필요가 없으므로, 기록 확장을 피할 수 있다. 더욱이, 데이터를 제 위치에 있지 않게 기록하는 것은 많은 저장 작동의 레이턴시 경로로부터의 소거를 제거할 수 있다(소거 레이턴시는 더 이상 기록 작동의 "중요한 경로"의 일부가 아니다).
도 1e 실시예에서, LID(A)에 상응하는 데이터 세그먼트(X0)는 저장 위치(191)에 저장될 수 있다. 데이터 세그먼트(X0)는 앞서 개시된 자체 설명 패킷 형식(110)으로 저장될 수 있다. 패킷(110)의 데이터 세그먼트(112)는 데이터 세그먼트(X0)를 포함할 수 있고, 영속적 메타데이터(114)는 데이터 세그먼트와 연관되는 LID(들)(예를 들어, LID(A))를 포함할 수 있다. 저장 클라이언트(106)는 LID(A)와 연관되는 데이터를 변경하고/하거나 오버라이트하는 작동을 요청할 수 있으며, 이러한 작동은 데이터 세그먼트(X0)를 데이터 세그먼트(XI)로 대체하는 것을 포함할 수 있다. 저장층(130)은 저장 위치(191)에서 기존 데이터 패킷(110)을 제 위치에서 변경하는 것보다 오히려 저장 매체(144) 상의 상이한 저장 위치(193)에 데이터 세그먼트(XI)를 포함하는 새로운 패킷(110)을 첨부함으로써 이러한 작동을 제 위치에 있지 않게 수행할 수 있다. 저장 작동은 LID(A)를 저장 위치(193)의 저장 어드레스와 연관시키고/시키거나 저장 위치(191)에서 쓸모 없게 된 데이터(X0)를 무효화하기 위해 저장 메타데이터(135)를 업데이트하는 것을 더 포함할 수 있다. 도 1e에 도시된 바와 같이, 저장 메타데이터(135)를 업데이트하는 것은 LID(A)(164E)를 변경된 데이터 세그먼트(XI)의 저장 어드레스와 연관시키기 위해 순방향 맵(160)의 엔트리를 업데이트하는 것을 포함할 수 있다.
제 위치에 있지 않게 저장 작동들을 수행하는 것(예를 들어, 데이터를 저장 로그에 첨부하는 것)은 쓸모 없게 되거나 유효하지 않은 데이터(예를 들어, 소거되고/되거나, 변경되고/되거나, 제 위치에 있지 않게 오버라이트되었던 데이터)가 저장 매체(140) 상에 남는 것을 야기할 수 있다. 도 1e에 도시된 바와 같이, 저장 위치(191)에서 제 위치에 데이터 세그먼트(X0)를 오버라이트하고/하거나 대체시키는 것과는 대조적으로 데이터 세그먼트(XI)를 저장 로그에 첨부함으로써 LID(A)의 데이터를 변경하는 것은 쓸모 없게 된 버전의 데이터 세그먼트(X0)를 저장 매체(140) 상에 유지하는 것을 야기한다. 쓸모 없게 된 버전의 데이터 세그먼트(X0)는 앞서 개시된 바와 같이, 데이터 세그먼트(X0)를 소거하는 것이 전체 저장 구획(170A)을 소거하고/하거나 저장 구획(170A) 상에 유효한 데이터를 재배치하는 것을 포함할 수 있으며, 이는 시간 소모가 큰 작동이고 기록 확장을 야기할 수 있으므로, 저장 매체(140)에서 즉시 제거되지(예를 들어, 소거되지) 않을 수 있다. 마찬가지로, 더 이상 사용되지 않는(예를 들어, 삭제되거나 트림(TRIM) 작동을 거치는) 데이터는 즉시 제거되지 않을 수 있다. 이에 따라, 시간이 지남에 따라, 저장 매체(140)는 상당한 양의 "유효하지 않은" 데이터를 축적할 수 있다.
저장층(130)은 저장 메타데이터(135)(예를 들어, 순방향 맵(160))의 사용에 의해 저장 위치(191)에서의 데이터 세그먼트(X0)와 같은 유효하지 않은 데이터를 식별할 수 있다. 저장층(130)은 순방향 맵(160)에서의 유효한 식별자들(LID들)과 연관되지 않는 저장 위치들이 저장 매체(140) 상에 보유될 필요가 없는 데이터를 포함한다고 판단할 수 있다. 대안적으로, 또는 부가적으로, 저장층(130)은 삭제되었고/되었거나, 트리밍되었고/되었거나, 쓸모 없게 되고/되거나, 그렇지 않으면 유효하지 않은 데이터를 효율적으로 식별하기 위해 유효 비트맵, 역방향 맵 등과 같은 다른 저장 메타데이터(135)를 유지할 수 있다.
저장층(130)은 유효하지 않은 데이터가 점유한 저장 리소스들을 복구하도록 구성될 수 있다. 저장층(130)은 (데이터 열화, 기록 방해, 판독 방해 등으로 인한 오류 상태들을 방지하기 위해) 저장 매체(140) 상에 저장되는 데이터를 리프레싱(refreshing)하는 것, 매체 신뢰성 조건들을 모니터링하는 것 등을 포함하지만, 이에 제한되지 않는 다른 매체 관리 작동들을 수행하도록 추가로 구성될 수 있다. 본원에 사용되는, 저장 구획(170A 내지 170N)과 같은 저장 리소스를 복구하는 것은 새로운 데이터가 저장 구획(170A 내지 170N) 상에 저장될/프로그래밍될 수 있도록 저장 구획(170A 내지 170N)을 소거하는 것을 지칭한다. 저장 구획(170A 내지 170N)을 복구하는 것은 저장 구획(170A 내지 170N) 상의 유효한 데이터를 새로운 저장 위치로 재배치하는 것을 포함할 수 있다. 저장층(130)은 저장 구획(170A 내지 170N)에서 유효하지 않은 데이터의 양, 저장 구획(170A 내지 170N)에서 유효한 데이터의 양, 마모 수준들(예를 들어, 프로그램/소거 사이클의 수), 저장 구획(170A 내지 170N)이 프로그래밍되거나 리프레시되었을 때부터의 시간 등을 포함할 수 있지만, 이에 제한되지 않는 하나 이상의 인자에 기반하여 복구를 위해 저장 구획들(170A 내지 170N)을 식별할 수 있다.
저장층(130)은 저장 매체(140) 상에 저장 로그의 콘텐츠의 사용에 의해 순방향 맵(160)을 포함하여 저장 메타데이터(135)를 재구성하도록 구성될 수 있다. 도 1e 실시예에서, LID(A)와 연관되는 현재의 버전의 데이터는 각각 저장 위치들(191 및 193)에서 데이터 패킷들(110)의 상대적 로그 순서에 기반하여 결정될 수 있다. 저장 위치(193)에서의 데이터 패킷이 저장 로그에서 저장 위치(191)에서의 데이터 패킷 이후에 순서화되므로, 저장층(130)은 저장 위치(193)가 LID(A)에 상응하는 가장 최근의, 최신의 버전의 데이터를 포함한다고 판단할 수 있다. 저장층(130)은 LID(A)를 (저장 위치(191)에서의 쓸모 없게 된 데이터보다 오히려) 저장 위치(193)에서의 데이터 패킷과 연관시키도록 순방향 맵(160)을 재구성할 수 있다.
도 2는 저장층(130)을 포함하는 시스템(200)의 다른 실시예를 도시한다. 저장 매체(140)는 각각이 하나 이상의 저장 어레이(115A 내지 115N)를 포함할 수 있는 복수의 독립된 뱅크(119A 내지 119N)를 포함할 수 있다. 각각의 독립된 뱅크(119A 내지 119N)는 상호 연결부(127)를 통하여 저장 제어기(139)에 결합될 수 있다.
저장 제어기(139)는 저장층(130)으로부터 버스(127)를 통하여 저장 요청들을 수신하도록 구성되는 저장 요청 수신기 모듈(231)을 포함할 수 있다. 저장 요청 수신기(231)는 저장층(130) 및/또는 저장 클라이언트들(106)로/로부터 데이터를 전달하도록 추가로 구성될 수 있다. 따라서, 저장 요청 수신기 모듈(231)은 하나 이상의 직접적 메모리 액세스(DMA) 모듈, 원격 DMA 모듈, 버스 제어기, 브릿지, 버퍼 등을 포함할 수 있다.
저장 제어기(139)는 요청 모듈(231)을 통하여 수신되는 요청들에 응하여 데이터를 저장 매체(140) 상에 저장하도록 구성되는 기록 모듈(240)을 포함할 수 있다. 저장 요청들은 요청들과 관련되는 데이터의 논리 인터페이스를 포함하고/하거나 참조할 수 있다. 기록 모듈(240)은 앞서 개시된 바와 같이, 저장 매체(140)의 저장 어드레스 공간(144) 내에 데이터 패킷들(110)을 순차적으로 첨부하는 것을 포함할 수 있는 자체 설명 저장 로그에 데이터를 저장하도록 구성될 수 있다. 데이터 패킷들(110)은 데이터의 논리 인터페이스를 포함하고/하거나 참조할 수 있다(예를 들어, 데이터와 연관되는 LID(들)을 포함할 수 있다). 기록 모듈(240)은 저장을 위해 데이터를 처리하도록 구성되는 기록 프로세싱 모듈(242)을 포함할 수 있다. 저장을 위해 데이터를 처리하는 것은: a) 압축 프로세싱, b) 암호화 프로세싱, c) 각각의 데이터 패킷(110) (및/또는 다른 수용기들)로 데이터를 캡슐화하는 것, d) 오류 교정 코드(ECC) 프로세싱을 수행하는 것 등 중 하나 이상을 포함할 수 있다. 기록 버퍼(244)는 저장 매체(140) 상의 저장을 위해 데이터를 버퍼링하도록 구성될 수 있다. 일부 실시예들에서, 기록 버퍼(244)는 저장 제어기(139)의 클럭 도메인을 저장 매체(140) (및/또는 상호 연결부(127))의 클럭 도메인과 동기화하도록 구성되는 하나 이상의 동기화 버퍼를 포함할 수 있다.
로그 저장 모듈(136)은 데이터 저장 작동들에 대한 저장 위치(들)을 선택하도록 구성될 수 있고 독립된 뱅크들(119A 내지 119N)의 저장 어레이들(115A 내지 115N)에 어드레싱 및/또는 제어 정보를 제공할 수 있다. 본원에 개시되는 바와 같이, 로그 저장 모듈(136)은 저장 매체(140)의 저장 어드레스 공간(144) 내에 로그 형식으로 데이터를 순차적으로 첨부하도록 구성될 수 있다.
데이터를 기록하는 저장 작동들은: a) 하나 이상의 데이터 패킷을 저장 매체(140) 상의 저장 로그에 첨부하는 것, 그리고 b) 데이터의 LID(들)을 하나 이상의 데이터 패킷의 저장 어드레스들과 연관시키도록 저장 메타데이터(135)를 업데이트하는 것을 포함할 수 있다. 일부 실시예들에서, 저장 메타데이터(135)는 저장 제어기(139)의 메모리 리소스들 상에서(예를 들어, 저장 매체(140)를 포함하는 저장 디바이스(141)의 전용 휘발성 메모리 리소스들 상에서) 유지될 수 있다. 대안적으로, 또는 부가적으로, 저장 메타데이터(135)의 부분들은 저장층(130) 내에서(예를 들어, 도 1a의 컴퓨팅 디바이스(110)의 휘발성 메모리(112) 상에서) 유지될 수 있다. 일부 실시예들에서, 저장 메타데이터(135)는 저장층(130)에 의한 휘발성 메모리에 유지될 수 있고, 저장 매체(140) 상에 주기적으로 저장될 수 있다.
저장 제어기(139)는 저장 요청 수신기 모듈(231)을 통하여 수신되는 요청들에 응하여 저장 매체(140) 상에서 저장 로그로부터 데이터를 판독하도록 구성되는 데이터 판독 모듈(241)을 더 포함할 수 있다. 요청들은 요청된 데이터의 LID(들), 요청된 데이터의 저장 어드레스 등을 포함할 수 있다. 판독 모듈(241)은: a) 무엇보다도, 순방향 맵(160)의 사용에 의해 요청된 데이터를 포함하는 데이터 패킷(들)(110)의 저장 어드레스(들)을 결정하고, b) 저장 매체(140) 상의 결정된 저장 어드레스(들)로부터 데이터 패킷(들)(110)을 판독하고, c) 요청 엔티티에 의해 사용되는 데이터를 처리하도록 구성될 수 있다. 저장 매체(140)로부터 판독되는 데이터는 판독 버퍼(245)를 통하여 판독 모듈(241)로 스트리밍될 수 있다. 판독 버퍼(245)는 상술한 바와 같이 클럭 도메인 동기화에 대한 하나 이상의 판독 동기화 버퍼를 포함할 수 있다. 판독 프로세싱 모듈(243)은 저장 매체(144)로부터 판독되는 데이터를 처리하도록 구성될 수 있으며, 이는: a) 압축 해제 프로세싱, b) 해독 프로세싱, c) 하나 이상의 데이터 패킷(110) (및/또는 다른 수용기들)로부터 데이터를 추출하는 것, d) ECC 프로세싱을 수행하는 것 등 중 하나 이상을 포함할 수 있지만, 이에 제한되지 않는다.
저장 제어기(139)는 특정 독립된 뱅크들(119A 내지 119N)로/로부터 기록 모듈(240) 및/또는 판독 모듈(241)의 데이터 및/또는 커맨드들을 선택적으로 라우팅(routing)하도록 구성되는 뱅크 제어기(252)를 더 포함할 수 있다. 일부 실시예들에서, 저장 제어기(139)는 독립된 뱅크들(119A 내지 119N) 사이에서 저장 작동들을 인터리빙(interleaving)하도록 구성된다. 저장 제어기(139)는 예를 들어, 기록 모듈(240)로부터의 데이터가 뱅크(119B)의 저장 어레이(115B)로 프로그래밍되고 있는 동안, 뱅크(119A)의 저장 어레이(115A)로부터 판독 모듈(241)로 판독할 수 있다. 멀티 뱅크 저장 작동들의 추가 실시예들이 "뱅크 인터리브를 사용하여 고체 상태 저장을 위해 커맨드들을 관리하는 장치, 시스템 및 방법(Apparatus, System, and Method for Managing Commands for Solid-State Storage Using Bank Interleave)"이라는 명칭으로 David Flynn 외에 의해 2006년 12월 12일자로 출원된 미국 특허 출원 일련 번호 제 11/952,095호에 개시되며, 참조로 본원에 포함된다.
기록 프로세싱 모듈(242)은 데이터 패킷들(110)을 ECC 코드워드들로 인코딩하도록 구성될 수 있다. 본원에 사용되는, ECC 코드워드는 데이터 및 상응하는 오류 검출 및/또는 교정 정보를 지칭한다. 기록 프로세싱 모듈(242)은 임의의 적절한 ECC 알고리즘을 구현하고/하거나 임의의 적절한 타입의 ECC 코드워드들을 생성하도록 구성될 수 있으며, 임의의 적절한 타입의 ECC 코드워드들은 데이터 세그먼트 및 상응하는 ECC 신드롬(syndrome), ECC 심볼, ECC 청크, 및/또는 다른 구조화된 및/또는 구조화되지 않은 ECC 정보를 포함할 수 있지만, 이에 제한되지 않는다. ECC 코드워드들은 블록 ECC 인코딩, 컨벌루셔널(convolutional) ECC 인코딩, 낮은 밀도 패리티 체크(LDPC) 인코딩, 갈라거(Gallager) 인코딩, 리드 솔로몬(Reed-Solomon) 인코딩, 해밍(Hamming) 코드, 다차원 패리티 인코딩, 주기적 오류 교정 코드, BCH 코드 등을 포함하지만, 이에 제한되지 않는 임의의 적절한 오류 교정 인코딩을 포함할 수 있다. 기록 프로세싱 모듈(242)은 미리 정해진 크기의 ECC 코드워드들을 생성하도록 구성될 수 있다. 따라서, 단일 패킷은 복수의 상이한 ECC 코드워드로 인코딩될 수 있고/있거나 단일 ECC 코드워드는 2개 이상의 패킷의 부분들을 포함할 수 있다. 대안적으로, 기록 프로세싱 모듈(242)은 임의로 크기 조정된 ECC 코드워드들을 생성하도록 구성될 수 있다. 오류 교정 코드 프로세싱의 추가 실시예들이 "적응형 오류-교정 코딩을 위한 시스템들 및 방법들(Systems and Methods for Adaptive Error-Correction Coding)"이라는 명칭으로 Jeremy Fillingim 외에 의해 2013년 3월 14일자로 출원된 미국 특허 출원 일련 번호 제 13/830,652호에 개시되며, 참조로 본원에 포함된다.
일부 실시예들에서, 저장층(130)은 높은 레벨 저장 작동들을 효율적으로 구현하도록 논리 어드레스 공간(132)을 레버리징(leveraging)한다. 저장층(130)은 "복제" 또는 "논리 카피" 작동들을 구현하도록 구성될 수 있다. 본원에 사용되는, "복제" 또는 "논리 카피"는 저장층(130)에 의해 관리되는 데이터를 효율적으로 카피하거나 복제하는 작동들을 지칭한다. 복제 작동은 "본래의" LID들의 세트와 동일한 데이터에 상응하는 "복제된" LID들의 세트를 생성하는 것을 포함할 수 있다. 그러므로, 복제 작동은 2개의(2개 이상의) 상이한 논리 인터페이스(예를 들어, 상이한 세트들의 LID들)을 사용하여 동일한 세트의 저장 위치들을 참조하는 것을 포함할 수 있다. 그러므로, 복제 작동은 저장 매체(140) 상에 저장되는 하나 이상의 데이터 패킷(110)의 논리 인터페이스를 변경할 수 있다. "논리 이동"은 저장층(130)에 의해 관리되는 데이터의 논리 인터페이스를 변경하는 작동을 지칭할 수 있다. 논리 이동 작동은 저장 매체(140) 상에 저장되는 데이터를 참조하는데 사용되는 LID들을 변경하는 것을 포함할 수 있다. "병합" 작동은 논리 어드레스 공간(132)의 상이한 부분들을 병합하는 것을 포함할 수 있다. 본원에 더 상세히 개시된 바와 같이, 복제 및/또는 이동 작동들은 중복 제거, 스냅샷, 논리 카피, 극소 작동, 트랜잭션 등과 같은 더 높은 레벨 저장 작동들을 효율적으로 구현하는데 사용될 수 있다.
도 3a를 참조하면, 저장층(130)은 복제 작동, 이동 작동, 병합 작동 등과 같은 저장층(130)에 의해 관리되는 데이터와 관련되는 논리 인터페이스 작동들을 관리하도록 구성되는 논리 인터페이스 관리 모듈(334)을 포함할 수 있다. LID들을 복제하는 것은 무엇보다도, 2개 이상의 상이한 세트의 LID들의 사용에 의해 데이터가 참조되는 것을 가능하게 하기 위해 저장 매체(140)에 저장되는 데이터의 논리 인터페이스를 변경하는 것을 포함할 수 있다. 따라서, 복제품을 생성하는 것은: a) 논리 어드레스 공간(132) (또는 논리 어드레스 공간(132)의 전용 부분)에서 LID들의 세트를 할당하는 것, 그리고 b) 무엇보다도, 저장 메타데이터(135)의 사용에 의해 "본래의" LID들의 세트와 동일한 저장 위치(들)와 할당된 LID들을 연관시키는 것을 포함할 수 있다. 그러므로, 복제품을 생성하는 것은 새로운 세트의 복제된 LID들을 특정 세트의 저장 위치들과 연관시키도록 구성되는 순방향 맵(160)에 하나 이상의 엔트리를 추가하는 것을 포함할 수 있다.
논리 인터페이스 관리 모듈(334)은 복제 동기화 정책에 따라 복제 작동들을 구현하도록 구성될 수 있다. 복제 동기화 정책은 복수의 복제품 또는 카피 중 제1의 것을 참조하여 수행되는 작동들이 다른 복제품들 또는 카피들로 어떻게 전파되는지를 판단하는데 사용될 수 있다. 예를 들어, 복제품들은 할당 작동들에 대하여 동기화될 수 있어, 복제품들 중 하나를 확장시키라는 요청이 다른 복제품들 및/또는 카피들을 확장시키는 것을 포함한다. 본원에 사용되는, 파일 (또는 다른 데이터 세그먼트)를 확장시키는 것은 파일의 크기, 범위 및/또는 규모를 증가시키는 것을 지칭하며, 파일의 크기, 범위 및/또는 규모를 증가시키는 것은 하나 이상의 논리 식별자를 복제품에 추가하는 것, 복제품에 할당된 논리 식별자들 중 하나 이상을 변경하는 것 등을 포함할 수 있다. 복제 동기화 정책은 병합 정책을 포함할 수 있으며, 병합 정책은 무엇보다도, 복제품들이 (이하에 추가로 상세히 개시되는) 병합 및/또는 폴드(fold) 작동으로 결합될 때, 복제품들 사이의 차이들이 어떻게 관리되는지를 판단할 수 있다.
도 3a는 저장층(130)에 의해 구현되는 영역 복제 작동의 일 실시예를 도시한다. 도 3a의 영역 복제 작동은 저장 클라이언트(106)로부터의 요청에 응하여 구현될 수 있다. 일부 실시예들에서, 저장층(130)의 인터페이스(131)는 복제 작동들을 수행하기 위한 인터페이스들 및/또는 API들을 제공하도록 구성될 수 있다. 대안적으로, 또는 부가적으로, 영역 복제 작동은 극소 작동, 트랜잭션, 스냅샷, 논리 카피, 파일 관리 작동 등과 같은 더 높은 레벨 작동의 일부로서 수행될 수 있다.
도 3a에 도시된 바와 같이, 저장층(130)의 순방향 맵(160)은 LID들(1024 내지 2048)을 매체 저장 위치들(3453 내지 4477)에 결합하도록 구성되는 엔트리(362)를 포함한다. 다른 엔트리들은 도시된 실시예의 상세들을 모호하게 하는 것을 피하기 위해 도 3a로부터 생략된다. 본원에 개시되는 바와 같이, 엔트리(362) 및 엔트리(362)의 결합들은 저장 클라이언트들(106)이 상응하는 데이터(예를 들어, 데이터 세그먼트(312))를 참조할 수 있으며; 저장 클라이언트들(106)이 LID들(1024 내지 2048)의 사용에 의해 저장층(130)을 통해 데이터 세그먼트(312) (및/또는 데이터 세그먼트(312)의 부분들)에 액세스하고/하거나 이것들을 참조할 수 있게 하는 논리 인터페이스(311A)를 한정할 수 있다. 따라서, LID들(1024 내지 2048)은 무엇보다도, 데이터 세그먼트(312)의 논리 인터페이스(311A)를 한정한다.
본원에 개시되는 바와 같이, 저장층(130)은 저장 매체(140) 상에 문맥 형식(예를 들어, 패킷 형식(110))으로 데이터를 저장하도록 구성될 수 있다. 도 3a 실시예에서, 저장 위치들(3453 내지 4477)에서의 데이터 패킷(310)은 데이터 세그먼트(312)를 포함한다. 데이터 패킷(310)은 데이터 세그먼트(312)의 논리 인터페이스를 표시하는(예를 들어, 데이터 세그먼트(312)를 LID들(1024 내지 2048)과 연관시키는) 영속적 메타데이터(314)를 더 포함한다. 앞서 개시된 바와 같이, 설명적인, 영속적 메타데이터와 연관시켜 데이터를 저장하는 것은 저장층(130)이 저장 로그의 콘텐츠로부터 순방향 맵(160) (및/또는 다른 저장 메타데이터(135))을 재구축하는 것을 가능하게 할 수 있다. 도 3a 실시예에서, 엔트리(362)는 저장 어드레스들(3453 내지 4477)에 저장되는 데이터를 패킷(310)의 영속적 메타데이터(314)에 의해 참조되는 LID들(1024 내지 2048)과 연관시킴으로써 재구성될 수 있다. 도 3a가 단일 패킷(310)을 도시하지만, 본 발명은 이러한 점에 제한되지 않는다. 일부 실시예들에서, 엔트리(362)의 데이터는 각각이 각각의 영속적 메타데이터(314)를 포함하는 다수의, 상이한 패킷(310)(예를 들어, 각각의 저장 위치에 대한 별도의 패킷 등)에 저장될 수 있다.
논리 인터페이스 관리 모듈(334)은 무엇보다도, 복제될 본래의 LID들에 상응하는 새로운 세트의 LID들을 할당하고 본래의, 소스 LID들의 저장 위치들에 새로운 LID들을 결합함으로써 엔트리(362)를 복제하도록 구성될 수 있다. 도 3b에 도시된 바와 같이, LID들(1024 내지 2048)의 복제품을 생성하는 것은 논리 인터페이스 관리 모듈(334)이 균등한 세트의 LID들(6144 내지 7168)을 할당하고 복제된 세트의 식별자들을 저장 어드레스들(3453 내지 4477)에 결합하는 것을 포함할 수 있다. 그러므로, 복제품을 생성하는 것은 저장 매체(140) 상에 카피되고/되거나 복제될 근본적 데이터 세그먼트(312)를 필요로 하지 않고 LID들(6144 내지 7168)을 포함하도록 데이터 세그먼트(312)의 논리 인터페이스(311B)를 확장시키기 위해 저장 메타데이터(135)를 변경하는 것을 포함할 수 있다.
데이터 세그먼트(312)의 변경된 논리 인터페이스(311B)는 저장 위치들(3453 내지 4477)에 저장되는 상응하는 데이터 패킷(310)의 문맥 형식과 상반될 수 있다. 앞서 개시된 바와 같이, 데이터 패킷(310)의 영속적 메타데이터(314)는 LID들(1024 내지 2048)을 참조하지만, 복제된 LID들(6144 내지 7168)을 포함하고/하거나 참조하지 않는다. 데이터 세그먼트(312)의 문맥 형식은 변경된 논리 인터페이스(311B)와 일치하도록 업데이트될 수 있으며(예를 들어, 단지 LID들(1024 내지 2048)과는 대조적으로 데이터를 LID들(1024 내지 2048 및 6144 내지 7168)과 연관시키도록 업데이트될 수 있으며), 이는 데이터 세그먼트를 LID들의 세트들 둘 다와 연관시키는 패킷 형식으로 데이터 세그먼트를 재기록하는 것을 포함할 수 있다. 저장 디바이스(141)가 랜덤 액세스의, 제 위치 기록 저장 디바이스이면, 영속적 메타데이터(314)는 제 위치에 업데이트될 수 있다. 한 번 기록의, 비대칭 저장 매체(140)을 포함하는 다른 실시예들에서, 그러한 제 위치 업데이트들은 비효율적일 수 있다. 그러므로, 저장층(130)은 데이터가 (매체 관리 모듈(370)에 의해) 저장 복원, 재배치 등과 같은 매체 관리 작동으로 재배치될 때까지, 일관되지 않는 문맥 형식으로 데이터를 유지하도록 구성될 수 있다. 데이터 세그먼트(312)의 문맥 형식을 업데이트하는 것은 저장 매체(140) 상에 데이터 세그먼트(312)를 재배치하고/하거나 재기록하는 것을 포함할 수 있으며, 이러한 재배치하고/하거나 재기록하는 것은 데이터 세그먼트(312)가 크고/크거나 복제품이 다수의 LID를 포함한다면, 시간 소모가 큰 프로세스일 수 있고 특히 비효율적일 수 있다. 그러므로 일부 실시예들에서, 저장층(130)은 복제된 데이터 세그먼트(312)의 문맥 형식을 업데이트하는 것을 연기할 수 있고/있거나 하나 이상의 배후 작동으로 문맥 형식을 업데이트할 수 있다. 한편, 저장층(130)은 일관되지 않는 문맥 형식(데이터 패킷(310))으로 저장되는 동안, 데이터 세그먼트(312)에 대한 액세스를 제공하도록 구성될 수 있다.
저장층(130)은 상응하는 데이터 세그먼트(312)의 문맥 형식이 업데이트되기 전에, 복제 작동들의 완료를 승인하도록 구성될 수 있다. 데이터는 저장 매체(140) 상에 업데이트된 문맥 형식으로 이후에 재기록될(예를 들어, 재배치될) 수 있다. 업데이트는 복제 작동 및/또는 다른 전면 저장 작동들의 "중요한 경로"의 외부에서 일어날 수 있다. 일부 실시예들에서, 데이터 세그먼트(312)는 저장 복원 프로세스, 데이터 리프레시 작동 등 중 하나 이상의 일부로서 매체 관리 모듈(370)에 의해 재배치된다. 따라서, 저장 클라이언트들(106)은 데이터 세그먼트(312)의 문맥 형식이 변경된 논리 인터페이스(311B)에 따라 업데이트되는 것을 대기하지 않고 변경된 논리 인터페이스(311B)를 통해(예를 들어, LID들(1024 내지 2048 및/또는 6144 내지 7168)을 참조하여) 데이터 세그먼트(312)에 액세스하는 것이 가능할 수 있다.
데이터 세그먼트(312)의 문맥 형식이 저장 매체(140) 상에서 업데이트될 때까지, 데이터 세그먼트(312)의 변경된 논리 인터페이스(311B)는 저장 메타데이터(135)(예를 들어, 맵(160))에만 존재할 수 있다. 그러므로, 순방향 맵(160)이 무엇보다도, 전원 고장 또는 데이터 손상으로 인해 손실되면, 복제 작동은 재구성된 저장 메타데이터(135)에서 반영되지 않을 수 있다(복제 작동은 영속적이고/이거나 크래시(crash)에서 안전하지 않을 수 있다). 앞서 예시된 바와 같이, 데이터 패킷(310)의 영속적 메타데이터(314)는 데이터 세그먼트(312)가 LID들(6144 내지 7168)이 아닌, LID들(1024 내지 2048)과만 연관된다는 것을 나타낸다. 그러므로, 엔트리(362)만이 (도 3a에서와 같이) 재구성될 것이고, 엔트리(364)는 생략될 것이며; 결과적으로, 변경된 논리 인터페이스(311B)를 통해(예를 들어, 6144 내지 7168을 통해) 데이터 세그먼트(312)에 액세스하려는 후속 시도들은 실패할 수 있다.
일부 실시예들에서, 복제 작동은 복제 작동을 영속적이고/이거나 크래시에서 안전하게 하도록 영속적 노트를 저장 매체(140) 상에 저장하는 것을 더 포함할 수 있다. 본원에 사용되는, "영속적 노트"는 저장 매체(140) 상에 저장되는 메타데이터를 지칭한다. 영속적 노트들(366)은 본원에 개시되는 바와 같이 로그 순서에 상응할 수 있고/있거나 패킷 형식으로 저장될 수 있다. 영속적 노트(366)는 데이터 세그먼트(312)의 변경된 논리 인터페이스(311B)의 표시를 포함할 수 있다. 도 3b 실시예에서, 도시된 복제 작동에 상응하는 영속적 노트(366)는 저장 어드레스들(3453 내지 4477)에 저장되는 데이터를 LID들(1024 내지 2048 및 6144 내지 7168)의 영역들 둘 다와 연관시키도록 구성될 수 있다. 저장 매체(140)의 콘텐츠로부터 순방향 맵(160)의 재구성 동안, 영속적 노트(366)는 데이터 세그먼트(312)를 업데이트된 논리 인터페이스(311B)의 LID 영역들 둘 다와 연관시키기 위해 엔트리들(362 및 364) 둘 다를 재구성하는데 사용될 수 있다. 일부 실시예들에서, 저장층(130)은 저장 메타데이터(135)를 업데이트하고(예를 들어, 엔트리(364)를 생성하고) 영속적 노트(366)를 저장 매체(140) 상에 저장하는 것에 응하여 복제 작동의 완료를 승인할 수 있다. 영속적 노트(366)는 이에 대응하여 무효화되고/되거나 저장 매체(140)에서 제거되도록 표시될 수 있어, 업데이트된 논리 인터페이스(311B)와 일치하도록 데이터 세그먼트(312)의 문맥 형식을 업데이트한다(예를 들어, 앞서 개시된 바와 같이 데이터 세그먼트(312)를 재배치하고/하거나 재기록한다).
일부 실시예들에서, 데이터 세그먼트(312)의 업데이트된 문맥 형식은 데이터 세그먼트(312)를 LID 영역들(1024 내지 2048 및 6144 내지 7168) 둘 다와 연관시키는 것을 포함할 수 있다. 도 3c는 데이터 세그먼트(312)에 대한 업데이트된 문맥 형식(데이터 패킷(320))의 일 실시예를 도시한다. 도 3c에 도시된 바와 같이, 데이터 패킷(320)의 영속적 메타데이터(324)는 데이터 세그먼트(312)를 업데이트된 논리 인터페이스(311B)의 LID 영역들(1024 내지 2048 및 6144 내지 7168) 둘 다와 연관시킨다. 데이터 패킷(320)은 본래의 데이터 패킷(310)과 상이한 저장 어드레스들(64432 내지 65456)에서 제 위치에 있지 않게 기록될 수 있으며, 이는 순방향 맵(160)의 업데이트된 엔트리들(362 및 364)에서 반영될 수 있다. 데이터 패킷(320)을 저장 로그에 첨부하는 것에 응하여, 상응하는 영속적 노트(366)는 (존재한다면) 무효화될 수 있다(제거되고/되거나 저장 매체(140)에서 후속 제거되도록 표시될 수 있다). 일부 실시예들에서, 영속적 노트(366)를 제거하는 것은 영속적 노트(366)가 더 이상 저장 매체(140) 상에 보유될 필요가 없다는 것을 나타내는 하나 이상의 트림 메시지를 발행하는 것을 포함할 수 있다. 대안적으로, 또는 부가적으로, 순방향 맵(160)의 부분들은 영속적인, 크래시에서 안전한 저장 위치(예를 들어, 비일시적 저장 리소스들(103) 및/또는 저장 매체(140))에 저장될 수 있다. 순방향 맵(160)(예를 들어, 엔트리들(362 및 364))을 지속시키는 것에 응하여, 영속적 노트(366)는 데이터 세그먼트(312)가 업데이트된 문맥 형식으로 아직 재기록되지 않았더라도, 앞서 개시된 바와 같이 무효화될 수 있다.
논리 인터페이스 관리 모듈(334)은 "기록 시 카피 모드"를 포함하는 하나 이상의 상이한 모드에 따라 복제 작동들을 구현하도록 구성될 수 있다. 도 3d는 기록 시 카피 모드로 복제된 영역 내에서 수행되는 저장 작동의 일 실시예를 도시한다. 기록 시 카피 모드에서, 복제품을 생성한 후에 일어나는 저장 작동들은 복제품들을 서로로부터 분기시킬 수 있다(예를 들어, 엔트리들(362 및 364)은 상이한 저장 어드레스들, 범위들 및/또는 규모들을 지칭할 수 있다). 도 3d 실시예에서, 저장층(130)은 (도 3c에 도시된 바와 같이) 데이터 세그먼트(312)를 LID 영역들(1024 내지 2048 및 6144 내지 7168) 둘 다와 연관시키도록 구성되는 업데이트된 문맥 데이터 형식(패킷(320))으로 데이터 세그먼트(312)를 기록하였다. 그 다음, 저장 클라이언트(106)는 LID들(6657 내지 7168)에 상응하는 데이터를 변경하고/하거나 오버라이트하라는 하나 이상의 저장 요청을 발행할 수 있다. 도 3d 실시예에서, 저장 요청은 LID들(6657 내지 7168)의 데이터를 변경하고/하거나 오버라이트하는 것을 포함한다. 이에 대응하여, 저장층(130)은 새롭고/새롭거나 변경된 데이터를 저장 매체(130) 상에 저장할 수 있으며, 이는 앞서 개시된 바와 같이 새로운 데이터 패킷(340)을 저장 로그에 첨부하는 것을 포함할 수 있다. 데이터 패킷(340)은 (예를 들어, 패킷(340)의 영속적 메타데이터(344)의 사용에 의해) 데이터 세그먼트(342)를 LID들(6657 내지 7424)과 연관시킬 수 있다. 순방향 맵(160)은 LID들(6657 내지 7424)을 데이터 세그먼트(342)와 연관시키도록 업데이트될 수 있으며, 이는 데이터 세그먼트(312)에서 데이터의 변경되지 않은 부분을 계속해서 참조하도록 구성되는 엔트리(365) 및 저장 어드레스들(78512 내지 79024)에 저장되는 새로운 데이터 세그먼트(342)를 참조하는 엔트리(367)로 엔트리(364)를 분할하는 것을 포함할 수 있다. 도 3d에 도시된 기록 시 카피 모드에서, LID들(1024 내지 2048)에 상응하는 엔트리(362)는 변경되지 않고, 저장 어드레스들(64432 내지 65456)에서의 데이터 세그먼트(312)를 계속해서 참조할 수 있다. 도 3d에 도시되지 않았지만, 영역(1024 내지 2048) 내의 변경들은 엔트리(362)에 영향을 주는 유사한 분기 변화들을 야기할 수 있다. 더욱이, 저장 요청(들)은 데이터를 변경하고/하거나 오버라이트하는 것에 제한되지 않는다. 다른 작동들은 LID들의 세트를 확장시키는 것(데이터를 첨부하는 것), LID들을 제거하는 것(데이터를 삭제하고/하거나, 잘라 줄이고/이거나, 트리밍하는 것) 등을 포함할 수 있다.
일부 실시예들에서, 저장층(130)은 "동기화된 복제" 모드와 같은 다른 복제 모드들을 지원할 수 있다. 동기화된 복제 모드에서, LID들의 복제된 영역 내에서 행해지는 변경들은 하나 이상의 다른, 상응하는 영역에서 반영될 수 있다. 도 3d 실시예에서, "동기화된 복제" 모드로 설명된 저장 작동을 구현하는 것은 무엇보다도, LID들(1024 내지 1536)을 본래의 데이터 세그먼트(312)의 부분들과 연관시키도록 구성되는 엔트리로 엔트리(362)를 분할하는 것, 그리고 LID들(1537 내지 2048)을 새로운 데이터 세그먼트(342)와 연관시키도록 구성되는 엔트리를 추가하는 것을 포함할 수 있는 본원에 개시되는 바와 같은 새로운 데이터 세그먼트(342)를 참조하기 위해 엔트리(362)를 업데이트하는 것을 포함할 수 있다.
다시 도 3d의 기록 시 카피 실시예를 참조하면, 논리 인터페이스 관리 모듈(334)은 복제 병합 작동들을 관리하도록 추가로 구성될 수 있다. 본원에 사용되는, "병합" 또는 "복제 병합"은 2개 이상의 상이한 LID들의 세트 및/또는 영역을 결합하는 작동을 지칭한다. 도 3d 실시예에서, 영역 병합 작동은 엔트리(362)를 상응하는 복제된 엔트리들(365 및 367)과 병합하는 것을 포함할 수 있다. 논리 인터페이스 관리 모듈(334)은: 보다 최근의 변경들이 더 이른 변경들에 우선하는 기록 순서 정책; 저장 작동들의 상대적 우선 순위에 기반하는(예를 들어, 저장 작동들과 연관되는 저장 클라이언트(들)(106), 어플리케이션들 및/또는 사용자들의 특성들에 기반하는) 우선 순위 기반 정책; 완료 지시기(예를 들어, 극소 저장 작동의 완료, 극소 저장 작동의 고장 등); fadvise 파라미터들; ioctrl 파라미터들 등과 같은 병합 정책에 따라 영역 병합 작동들을 구현하도록 구성될 수 있다.
도 3e는 영역 병합 작동의 일 실시예를 도시한다. 도 3e의 영역 병합 작동은 영역(6144 내지 6656)을 영역(1024 내지 2048)으로 병합하는 것을 포함할 수 있다. 따라서, 영역 병합 작동은 병합 정책에 따라 LID 영역(6144 내지 6656) 내에서 행해지는 변경들을 LID 영역(1024 내지 2048)에 선택적으로 적용하는 것을 포함할 수 있다. 그러므로, 영역 병합 작동은 LID들(1537 내지 2048)을 새로운/변경된 데이터 세그먼트(342)를 포함하는 저장 어드레스들(78512 내지 79024)과 연관시키기 위해 LID 영역(1024 내지 2048)을 업데이트하는 것을 포함할 수 있다. 업데이트는 순방향 맵(160)에서의 엔트리(362)를 분할하는 것을 포함할 수 있으며; 엔트리(372)는 LID들(1024 내지 1536)을 본래의 데이터 세그먼트(312)의 부분들과 연관시키도록 구성될 수 있고, 엔트리(373)는 LID들(1537 내지 2048)을 새로운 데이터 세그먼트(342)와 연관시키도록 구성될 수 있다. 더 이상 LID들(1537 내지 2048)에 의해 참조되지 않는 데이터 세그먼트(312)의 부분들은 본원에 개시되는 바와 같이 무효화될 수 있다. 본래의, 소스 영역으로 병합되었던 LID 영역(6144 내지 7168)은 순방향 맵(160)으로부터 할당 해제되고/되거나 제거될 수 있다.
도 3e에 도시되는 영역 병합 작동은 데이터의 부분들에 대한 논리 인터페이스(311C)를 변경하는 것을 야기할 수 있다. 데이터 세그먼트(342)의 문맥 형식(데이터 패킷(340))은 데이터 세그먼트(342)를 병합된 LID들(1537 내지 2048)보다는 오히려 LID들(6657 내지 7168)과 연관시킬 수 있다. 앞서 개시된 바와 같이, 저장층(130)은 일관되지 않는 문맥 형식으로 저장되는 데이터 세그먼트(342)에 대한 액세스를 제공할 수 있다. 저장층(130)은 데이터 세그먼트(342)가 하나 이상의 배후 작동(예를 들어, 저장 복원 작동들)으로 LID들(1537 내지 2048)과 연관되는 업데이트된 문맥 형식으로 데이터 세그먼트(342)를 저장하도록 구성될 수 있다. 일부 실시예들에서, 영역 병합 작동은 데이터 세그먼트(342)를 업데이트된 논리 인터페이스(311C)와 연관시키기 위해(예를 들어, 저장 어드레스들(78512 내지 79024)에서의 데이터 세그먼트(342)를 LID들(1537 내지 2048)과 연관시키기 위해) 영속적 노트(366)를 저장 매체(140) 상에 저장하는 것을 더 포함할 수 있다. 앞서 개시된 바와 같이, 영속적 노트(366)는 영역 병합 작동이 영속적이고 크래시에서 안전한 것을 보장하는데 사용될 수 있다. 영속적 노트(366)는 논리 인터페이스(311C)와 일치하는(예를 들어, 데이터 세그먼트(342)를 LID들(1537 내지 2048)과 연관시키는) 문맥 형식으로 데이터 세그먼트(342)를 재배치하는 것, 순방향 맵(160)을 지속시키는 것 등에 응하여 제거될 수 있다.
도 3a 내지 도 3e와 함께 개시된 복제 작동들은 영역 이동 작동과 같은 다른 논리 작동들을 구현하는데 사용될 수 있다. 다시 도 3a 내지 도 3c를 참조하면, 순방향 맵(160)의 엔트리(362)를 복제하는 복제 작동은 데이터 세그먼트(312)를 본래의 세트의 LID들(1024 내지 2048) 및 (엔트리(364)의) 새로운 세트의 복제된 LID들(6144 내지 7168) 둘 다와 연관시키기 위해 데이터 세그먼트(312)와 연관되는 논리 인터페이스를 변경하는 것을 포함할 수 있다. 복제 작동은 데이터 세그먼트(312)의 업데이트된 논리 인터페이스(311B)를 나타내는 영속적 노트(366)를 저장하는 것 그리고/또는 하나 이상의 배후 저장 작동으로 업데이트된 논리 인터페이스(311B)에 따라 데이터 세그먼트(312)를 재기록하는 것을 더 포함할 수 있다.
논리 인터페이스 관리 모듈(334)은 "영역 이동" 작동들을 구현하도록 추가로 구성될 수 있다. 본원에 사용되는, "영역 이동" 작동은 데이터 세그먼트들을 상이한 세트들의 LID들과 연관시키기 위해 하나 이상의 데이터 세그먼트의 논리 인터페이스를 변경하는 것을 지칭한다. 그러므로, 영역 이동 작동은 본원에 개시되는 바와 같이 하나 이상의 데이터 세그먼트를 업데이트된 논리 인터페이스와 연관시키기 위해 저장 메타데이터(135)(예를 들어, 순방향 맵(160))를 업데이트하는 것, 데이터 세그먼트들의 업데이트된 논리 인터페이스를 나타내는 영속적 노트(366)를 저장 매체(140) 상에 저장하는 것, 그리고 업데이트된 논리 인터페이스와 일치하는 문맥 형식(패킷 형식(310))으로 데이터 세그먼트들을 재기록하는 것을 포함할 수 있다. 따라서, 저장층(130)은 도 3a 내지 도 3e와 함께 앞서 개시된 것들과 동일한 메커니즘들 및/또는 프로세싱 단계들을 사용하여 영역 이동 작동들을 구현할 수 있다.
도 3a 내지 도 3e에 개시된 복제 및/또는 영역 이동 작동들은 저장층(130)에 일정 제한들을 부과할 수 있다. 앞서 개시된 바와 같이, 문맥 형식으로 데이터를 저장하는 것은 데이터를 참조하는 각각의 LID와 데이터를 연관시키는 것을 포함할 수 있다. 도 3c 실시예에서, 영속적 메타데이터(324)는 LID 영역들(1024 내지 2048 및 6144 내지 7168) 둘 다에 대한 참조들을 포함한다. 그러므로, 데이터 세그먼트에 대한 참조 번호들을 증가시키는 것은 문맥 데이터 형식의 오버헤드의 상응하는 증가를 부과할(예를 들어, 영속적 메타데이터(324)의 크기를 증가시킬) 수 있다. 일부 실시예들에서, 영속적 메타데이터(314)의 크기는 제한될 수 있으며, 이는 특정 데이터 세그먼트(312)를 참조할 수 있는 참조 및/또는 복제품의 수를 제한할 수 있다. 더욱이, 상이한 LID(들)에 대한 다수의 참조의 포함은 저장 복원 작동들을 복잡하게 할 수 있다. 데이터 세그먼트(312)가 재배치될 때 업데이트될 필요가 있는 순방향 맵 엔트리의 수는 데이터 세그먼트(312)를 참조하는 LID의 수에 따라 달라질 수 있다. 다시 도 3c를 참조하면, 그루밍(grooming) 및/또는 저장 복원 작동으로 데이터 세그먼트(312)를 재배치하는 것은 2개의 별도의 엔트리(362 및 364)를 업데이트하는 것을 포함할 수 있다. N개의 상이한 LID(예를 들어, N개의 상이한 복제품)에 의해 참조되는 데이터 세그먼트를 재배치하는 것은 순방향 맵(160)에서 N개의 상이한 엔트리를 업데이트하는 것을 포함할 수 있다. 마찬가지로, 데이터 세그먼트를 저장하는 것은 N개의 엔트리를 영속적 메타데이터(314)로 기록하는 것을 포함할 수 있다. 이러한 가변의 오버헤드는 배후 저장 복원 작동들의 성능을 감소시킬 수 있고 지원될 수 있는 동시 발생 복제품 및/또는 참조의 수를 제한할 수 있다.
일부 실시예들에서, 논리 인터페이스 관리 모듈(334)은 복제 작동들에 의해 부과되는 오버헤드를 감소시키기 위해 중간 매핑층을 포함하고/하거나 레버리징할 수 있다. 중간 매핑층은 효율적인 복제 작동들 (뿐만 아니라 본원에 더 상세히 개시된 바와 같이 다른 작동들)을 용이하게 하도록 구성되는 "참조 엔트리들"을 포함할 수 있다. 본원에 사용되는, "참조 엔트리"는 순방향 맵(160) (및/또는 다른 저장 메타데이터(135)) 내에서 다른 엔트리들을 참조하는데 사용되는 매핑 데이터 구조체의 엔트리를 지칭한다. 참조 엔트리는 논리 어드레스 공간(132) 내에서 하나 이상의 다른 엔트리에 의해 참조되는 동안만 존재할 수 있다. 일부 실시예들에서, 참조 엔트리들은 저장 클라이언트들(106)에 액세스 가능하지 않을 수 있고/있거나 변경되지 않을 수 있다. 저장층(130)은 단일 참조 엔트리 인터페이스를 통하여 다수의, 상이한 논리 인터페이스들을 통해 저장 클라이언트들이 동일한 세트의 데이터를 참조하는 것을 가능하게 하도록 참조 엔트리들을 레버리징할 수 있다. 저장 매체(140) 상의 데이터(다수의 LID에 의해 참조되는 데이터)의 문맥 형식은 결국 다른 영속적 메타데이터(예를 들어, 영속적 노트들(366))을 통해 N개의 다른 논리 인터페이스와 연관되는 참조 엔트리들과 데이터를 연관시키도록 단순화될 수 있다. 그러므로, 복제된 데이터를 재배치하는 것은 참조 엔트리와 데이터 세그먼트의 새로운 저장 어드레스 사이의 단일 매핑을 업데이트하는 것을 포함할 수 있다.
도 4a는 효율적인 개방 대 폐쇄 일관성을 위한 시스템(400)의 다른 실시예의 블록도이다. 시스템(400)은 중간 매핑층의 사용에 의해 영역 복제 작동들을 구현하도록 구성되는 저장층(130)을 포함한다. 저장 메타데이터(135)는 논리 어드레스 공간(132)과 관련되는 순방향 맵(160)을 포함할 수 있다. 순방향 맵(160) (및/또는 다른 저장 메타데이터(135))는 앞서 개시된 바와 같이 저장 클라이언트들(106)에 의한 논리 어드레스 공간의 할당들, LID들과 저장 어드레스 공간(144) 내의 저장 어드레스들 사이의 결합들 등에 관한 정보를 포함할 수 있다.
도 4a 실시예에서, 논리 인터페이스 관리 모듈(334)은 참조 맵(460)의 사용에 의해 복제 작동들을 관리하도록 구성되는 참조 모듈(434)을 포함할 수 있다. 참조 맵(460)은 논리 어드레스 공간(132)의 하나 이상의 논리 인터페이스(예를 들어, 하나 이상의 세트의 LID들)에 의해 참조되고 있는 데이터에 상응하는 참조 엔트리들을 포함할 수 있다. 참조 모듈(434)은 더 이상 유효한 데이터를 참조하는데 사용되고 있지 않고/않거나 더 이상 순방향 맵(160) 내의 엔트리들에 의해 참조되고 있지 않는 참조 엔트리들을 제거하도록 구성될 수 있다. 도 4a에 도시된 바와 같이, 참조 엔트리들은 순방향 맵(160)과 별도로(예를 들어, 별도의 참조 맵(460)에서) 유지될 수 있다. 참조 엔트리들은 참조 식별자들의 사용에 의해 식별될 수 있으며, 참조 식별자들은 논리 어드레스 공간(132)과 별도의 명칭 공간에서 유지될 수 있다. 따라서, 참조 엔트리들은 저장층 인터페이스(131)를 통해 저장 클라이언트들(106)에 직접 액세스 가능한 논리 어드레스 공간(132)과 별도이고 별개인 중간, "가상" 또는 "참조" 어드레스 공간(432)의 일부일 수 있다. 대안적으로, 일부 실시예들에서, 참조 엔트리들은 저장 클라이언트들(106)에 의해 직접 액세스 가능하지 않은 논리 어드레스 공간(132)의 미리 정해진 영역들 및/또는 부분들로부터 선택되는 LID들이 할당될 수 있다.
논리 인터페이스 관리 모듈(334)은 순방향 맵(160)에서의 하나 이상의 LID 엔트리를 참조 맵(460)에서의 참조 엔트리들에 링크함으로써 복제 작동들을 구현하도록 구성될 수 있다. 참조 엔트리들은 복제된 데이터의 저장 어드레스(들)에 결합될 수 있다. 따라서, 복제된 데이터와 연관되는 LID들은 간접적으로 참조 맵(460)을 통해 근본적 데이터를 참조할 수 있다(예를 들어, LID(들)은 결국 저장 어드레스들로 매핑되는 참조 엔트리들로 매핑될 수 있다). 따라서, 복제된 데이터에 상응하는 순방향 맵(160)에서의 엔트리들은 "간접적 엔트리들"로 지칭될 수 있다. 본원에 사용되는, "간접적 엔트리"는 참조 맵(460)에서의 참조 엔트리를 참조하고/하거나 이것에 링크되는 순방향 맵(160)에서의 엔트리를 지칭한다. 간접적 엔트리들은 논리 어드레스 공간(132) 내의 LID가 할당될 수 있고, 저장 클라이언트들(106)에 액세스 가능할 수 있다.
앞서 개시된 바와 같이, 특정 세트의 LID들을 복제한 후에, 저장 클라이언트들(106)은 복제된 영역들 중 하나 이상 내에서 저장 작동들을 수행할 수 있으며, 이는 (복제 모드에 따라) 복제품들을 서로로부터 분기시킬 수 있다. "기록 시 카피" 모드에서, 특정 복제품에 행해지는 변경들은 다른 복제된 영역들에서 반영되지 않을 수 있다. 도 4a 실시예에서, 복제품에 행해지는 변경들은 간접적 엔트리와 연관되는 "국부" 엔트리들에서 반영될 수 있다. 본원에 사용되는, "국부 엔트리"는 저장 매체(140)의 하나 이상의 저장 어드레스로 직접 매핑되는 간접적 엔트리의 일부를 지칭한다. 따라서, 국부 엔트리들은 특정 복제품에서 변경되었고/었거나 다른 복제품들의 콘텐츠와 상이한 데이터를 참조하도록 구성될 수 있다. 그러므로, 국부 엔트리들은 특정 복제품에 고유한 데이터에 상응할 수 있다.
변환 모듈(134)은 무엇보다도, 참조 맵(460) 및/또는 참조 모듈(434)의 사용에 의해 복제된 데이터와 연관되는 데이터에 액세스하도록 구성될 수 있다. 변환 모듈(134)은 우선 국부 엔트리들을 순회하는 것, 그리고 타겟 프론트 식별자(들)이 국부 엔트리들 내에서 발견되지 않으면, 간접적 엔트리가 링크되는 참조 엔트리들 내에서 순회를 계속하는 것을 포함할 수 있는 캐스케이드(cascade) 조회를 구현할 수 있다.
로그 저장 모듈(136) 및 매체 관리 모듈(370)은 복제된 데이터의 문맥 형식을 관리하도록 구성될 수 있다. 도 4a 실시예에서, 복제된 데이터(순방향 맵(160) 내에서 2개 이상의 LID 영역에 의해 참조되는 데이터)는 데이터를 참조 맵(460)의 하나 이상의 참조 엔트리와 연관시키는 문맥 형식으로 저장될 수 있다. 그러한 복제된 데이터 세그먼트들과 함께 저장되는 영속적 메타데이터는 데이터 세그먼트와 연관되는 각각의 LID를 식별하는 것과는 대조적으로 단일 참조 엔트리에 상응할 수 있다. 그러므로, 복제품을 생성하는 것은 앞서 개시된 바와 같이 무엇보다도, 매체 관리 모듈(370)의 사용에 의해 하나 이상의 배후 작동으로 복제된 데이터의 문맥 형식을 업데이트하는 것을 포함할 수 있다.
도 4b는 참조 맵(460)을 사용하는 복제 작동의 일 실시예를 도시한다. 상태(413A)에서, (도 4b에서 10,2로 표시되는) 논리 어드레스 공간(132)에서의 LID(10) 규모 2에 상응하는 엔트리는 저장 매체(140) 상에서 저장 어드레스(20000)에서의 데이터를 직접 참조할 수 있다. 다른 엔트리들은 개시된 실시예의 상세들을 모호하게 하는 것을 피하기 위해 도 4b로부터 생략된다. 상태(413B)에서, 저장층(130)은 영역(10,2)을 복제하는 작동을 구현한다. 영역(10,2)을 복제하는 것은: a) 논리 어드레스 공간에서 (도 4b에서 400,2로 표시되는) LID들의 새로운 영역을 할당하는 것, 그리고 b) 엔트리들(10,2 및 400,2)이 (도 4b에서 100000,2로 표시되는) 저장 어드레스(20000)에서의 복제된 데이터를 참조할 수 있는 참조 맵(460)에서 참조 엔트리들을 할당하는 것을 포함할 수 있다. 복제 작동은 상태(413C)에서 도시되는 바와 같이 엔트리들(10,2 및 400,2)을 참조 엔트리(100000,2)와 연관시키는 것을 더 포함할 수 있다. 앞서 개시된 바와 같이, 엔트리들(10,2 및 400,2)을 참조 엔트리(100000,2)와 연관시키는 것은 엔트리들(10,2 및 400,2)이 간접적 엔트리들이라는 것을 표시하는 것을 포함할 수 있다. 상태(413C)는 저장 어드레스(20000)에서의 데이터를 참조 엔트리(100000,2)와 연관시키고/시키거나 엔트리들(10,2 및 400,2)을 참조 맵(460)에서의 참조 엔트리(100000,2)와 연관시키기 위해 영속적 노트(366)를 저장 매체(140) 상에 저장하는 것을 더 포함할 수 있다.
저장층(130)은 LID(10) 또는 LID(400)를 통해(참조 엔트리(100000,2)를 통해) 저장 어드레스(20000)에서 데이터 세그먼트에 대한 액세스를 제공할 수 있다. LID(10 또는 400)와 관련되는 요청에 응하여, 변환 모듈(134)은 순방향 맵(160)에서의 상응하는 엔트리가 참조 맵(460)에서의 엔트리와 연관되는 간접적 엔트리라고 판단할 수 있다. 이에 대응하여, 참조 모듈(434)은 (존재한다면) 순방향 맵(160) 내의 국부 엔트리들 및 참조 맵(460)에서의 상응하는 참조 엔트리들(예를 들어, 참조 엔트리(100000,2))의 사용에 의해 저장 어드레스를 판단하기 위해 캐스케이드를 수행한다.
단계(413C)에서 복제품을 생성하는 것은 데이터를 LID 영역들(10,2 및 400,2) 둘 다와 연관시키기 위해 단계(20000)에서 저장되는 데이터 세그먼트의 논리 인터페이스를 변경하는 것을 포함할 수 있다. 그러나, 데이터의 문맥 형식은 단지 데이터를 LID들(10,2)과 연관시킬 수 있다. 앞서 개시된 바와 같이, 복제품을 생성하는 것은 참조 엔트리(100000,2)를 통해 데이터 세그먼트를 LID들(10,2 및 400,2)과 연관시키기 위해 영속적 노트(366)를 저장 매체(140) 상에 저장하는 것을 더 포함할 수 있다. 데이터 세그먼트는 매체 관리 모듈(370)에 의해 수행되는 하나 이상의 배후 작동으로 업데이트된 문맥 형식으로 재기록될 수 있다. 데이터는 별도의 LID 영역들(10,2 및 400,2)과는 대조적으로 참조 엔트리(100000,2)와 데이터 세그먼트를 연관시키는 영속적 메타데이터(314)와 함께 저장될 수 있다. 그러므로, (상태(413D)에 도시된 바와 같이) 데이터 세그먼트를 재배치하는 것은 데이터를 참조하는 각각의 LID 영역에 상응하는 다수의 엔트리(예를 들어, 다수의 엔트리(10,2 및 400,2))와는 대조적으로 참조 맵(460)에서의 단일 엔트리를 업데이트하는 것만을 필요로 할 수 있다. 더욱이, 순방향 맵(160)에서의 임의의 수의 LID 영역은 저장 매체(140) 상의 데이터와 연관되는 영속적 메타데이터(314)의 크기를 증가시키고/시키거나 매체 관리 모듈(370)의 작동을 복잡하게 만들지 않고 데이터 세그먼트를 참조할 수 있다.
도 4c는 참조 엔트리들을 사용하여 구현되는 복제 작동의 다른 실시예를 도시한다. LID들(1024 내지 2048) 및/또는 데이터 세그먼트(312)의 복제품을 생성하라는 요청에 응하여, 논리 인터페이스 관리 모듈(334)은 데이터 세그먼트(312)를 나타내기 위해 참조 맵(460)에서의 참조 엔트리(482)를 할당하도록 구성될 수 있다. 순방향 맵(160)에서의 임의의 수의 LID는 데이터 세그먼트(312)와 연관되는 영속적 메타데이터의 오버헤드를 증가시키고/시키거나 매체 관리 모듈(370)의 작동을 복잡하게 만들지 않고 참조 엔트리(482)를 통해 데이터를 참조할 수 있다. 도 4c에 도시된 바와 같이, 참조 엔트리(482)는 데이터 세그먼트(312)의 저장 어드레스들(저장 어드레스들(64432 내지 65456))에 결합될 수 있다. 순방향 맵(160)에서의 엔트리들(462 및 472)은 참조 엔트리(482)를 통해 간접적으로 저장 어드레스들을 참조할 수 있다(예를 들어, 도 4c에 도시된 바와 같이 참조 엔트리(482)에 링크될 수 있다).
도 4c 실시예에서, 참조 엔트리(482)는 식별자들(0Z 내지 1024Z)이 할당된다. 참조 엔트리(482)의 식별자(들)은 논리 어드레스 공간(132)의 특정 부분에 상응할 수 있거나 상이한, 별도의 명칭 공간에 상응할 수 있다. 저장층(130)은 무엇보다도, 엔트리들(462 및/또는 472)과 연관되는 메타데이터의 사용에 의해 엔트리들(462 및 472)을 참조 엔트리(482)에 링크할 수 있다. 대안적으로, 또는 부가적으로, 간접적 엔트리들(462 및/또는 472)은 저장 어드레스 메타데이터를 참조 엔트리(482)에 대한 참조들 및/또는 링크들로 대체할 수 있다. 참조 엔트리(482)는 저장층(130)을 통하여 저장 클라이언트들(106)에 의해 직접 액세스 가능하지 않을 수 있다.
복제 작동은 데이터 세그먼트(312)의 논리 인터페이스(311D)를 변경하는 것을 더 포함할 수 있으며; 변경된 논리 인터페이스(311D)는 데이터 세그먼트(312)가 간접적 엔트리(462)의 LID들(1024 내지 2048) 및/또는 간접적 엔트리(472)의 LID들(6144 내지 7168)을 통해 참조되는 것을 가능하게 할 수 있다. 참조 엔트리(482)가 저장 클라이언트들(106)에 액세스 가능하지 않을 수 있지만, 참조 엔트리(482)는 (간접적 엔트리들(462 및 472)을 통해) 변환 모듈(134)에 의해 데이터에 액세스하는데 사용될 수 있고, 이에 따라, 데이터 세그먼트(312)의 변경된 논리 인터페이스(311B)의 일부인 것으로 고려될 수 있다.
복제 작동은 영속적 노트(366A)를 저장 매체(140) 상에 저장하는 것을 더 포함할 수 있다. 앞서 개시된 바와 같이, 영속적 노트(들)(366A 및/또는 366B)의 저장은 복제 작동이 영속적이고 크래시에서 안전한 것을 보장할 수 있다. 영속적 노트(366A)는 데이터 세그먼트(312)와 연관되는 참조 엔트리(482)를 식별하도록 구성될 수 있다. 따라서, 영속적 노트(366A)는 저장 어드레스들(64432 내지 65456)을 참조 엔트리 식별자(들)(0Z 내지 1024Z)과 연관시킬 수 있다. 복제 작동은 엔트리들(462 및/또는 472)의 LID들을 참조 엔트리(482)와 연관시키도록 구성되는 다른 영속적 노트(366B)를 저장하는 것을 더 포함할 수 있다. 대안적으로, 엔트리들(462, 472 및 482) 사이의 연관과 관련되는 메타데이터는 단일 영속적 노트에 포함될 수 있다. 영속적 노트들(366A 및/또는 366B)는 데이터 세그먼트(312)가 업데이트된 문맥 형식으로 재배치되고/되거나 순방향 맵(160) (및/또는 참조 맵(460))이 지속될 때까지, 저장 매체(140) 상에 보유될 수 있다.
데이터 세그먼트(312)의 변경된 논리 인터페이스(311D)는 문맥 형식 본래의 데이터 패킷(410A)과 상반될 수 있으며; 영속적 메타데이터(314A)는 참조 엔트리(482) 및/또는 복제된 엔트리(472)보다 오히려 LID들(1024 내지 2048)을 참조할 수 있다. 저장층(130)은 변경된 논리 인터페이스(311D)와 일치하는 업데이트된 문맥 형식(패킷 410B)으로 데이터 세그먼트(312)를 저장하도록 구성될 수 있으며; 영속적 메타데이터(314B)는 각각의 복제된 영역(예를 들어, 엔트리들(462 및 472)) 내의 LID(들)을 별도로 식별하는 것과는 대조적으로 데이터 세그먼트(312)를 참조 엔트리(482)와 연관시킬 수 있다. 따라서, 간접적 엔트리(482)의 사용은 영속적 메타데이터(314A 및 314B)의 크기 제한들과는 관계없이, 데이터 세그먼트(312)의 논리 인터페이스(311D)가 임의의 수의 LID를 포함하는 것을 가능하게 한다. 더욱이, 참조 엔트리(482)의 부가 복제들은 데이터 세그먼트(312)의 문맥 형식을 업데이트하지 않고 행해질 수 있으며; 그러한 업데이트들은 새로운 LID 영역들을 순방향 맵(160)에서의 참조 엔트리(482)와 연관시킴으로써 그리고/또는 무엇보다도, 영속적 노트들(366)의 사용에 의해 행해질 수 있다.
앞서 개시된 바와 같이, 간접적 엔트리들(462 및/또는 472)은 참조 엔트리(482)를 통해 데이터 세그먼트(312)를 초기에 참조할 수 있다. 복제 작동 이후에 수행되는 저장 작동들은 순방향 맵(160) 내의 국부 엔트리들의 사용에 의해 반영될 수 있다. 복제 작동의 완료 후에, 저장층(130)은 복제된 LID(들) 중 하나 이상과 연관되는 데이터를 변경할 수 있다. 도 4d 실시예에서, 저장 클라이언트(106)는 간접적 엔트리(462)의 LID들(1024 내지 1052)에 상응하는 데이터를 변경하고/하거나 오버라이트하며, 이는 (저장 어드레스들(7823 내지 7851)에서의 데이터 패킷(420)에서) 새로운 데이터 세그먼트(412)를 저장 로그에 첨부하는 것을 포함할 수 있다.
데이터 세그먼트(412)는 데이터 세그먼트(412)를 LID들(1024 내지 1052)과 연관시키도록 구성되는 영속적 메타데이터(414A)를 포함하는 문맥 형식(데이터 패킷(420))으로 저장될 수 있다. 저장층(130)은 데이터 세그먼트(412)를 국부 엔트리(465)에서의 LID들(1024 내지 1052)과 연관시키도록 구성될 수 있다. 국부 엔트리(465)는 간접적 엔트리(462) 및/또는 참조 엔트리(482)를 통해 데이터를 참조하는 것과는 대조적으로, 업데이트된 데이터를 직접 참조할 수 있다.
데이터(1024 내지 1052) (또는 데이터(1024 내지 1052)의 서브세트)와 관련되는 요청에 응하여, 논리 인터페이스 관리 모듈(334)은 캐스케이드 조회 작동으로 요청된 LID들에 대한 참조들을 탐색할 수 있으며, 이는 참조 엔트리들이 뒤따르는 (이용 가능하다면) 국부 엔트리들에 대한 참조들을 탐색하는 것을 포함할 수 있다. 도 4d 실시예에서, 국부 엔트리(465)는 참조 엔트리(462) 당 64432 내지 64460보다 오히려 LID 영역(1024 내지 1052)(저장 어드레스들(7823 내지 7851))과 관련되는 요청들을 충족시키는데 사용될 수 있다. 국부 엔트리(예를 들어, LID들(1053 내지 2048))에서 발견되지 않는 LID들에 대한 요청들은 참조 엔트리(482)를 통해 계속해서 서비스될 수 있다. 그러므로, 영역(1024 내지 2048)과 관련되는 데이터의 논리 인터페이스(311E)는 하나 이상의 국부 엔트리(465), 하나 이상의 간접적 엔트리(462) 및/또는 하나 이상의 참조 엔트리(482)를 포함할 수 있다.
도 4e에 도시되는 추가 실시예에서, 저장층(130)은 논리 인터페이스(311E)의 LID들(예를 들어, LID들(6144 내지 6162)) 중 다른 하나를 통해 복제품의 데이터를 변경할 수 있으며; 논리 인터페이스 구획 문자들은 도시된 실시예의 상세들을 모호하게 하는 것을 피하기 위해 도 4e에 도시되지 않는다. 변경된 데이터는 앞서 개시된 바와 같이 국부 엔트리(475)를 사용하여 참조될 수 있다. 도 4e 실시예에서, 영역들(462 및 472) 각각은 참조 엔트리(482)의 식별자들(0Z 내지 52Z)을 통해 이전에 참조된 데이터의 그것 자체의, 각각의 국부적 버전을 갖는다. 이에 따라, 엔트리(462) 및 엔트리(472)는 어느 것도 영역(0Z 내지 52Z)에 대한 참조를 포함하지 않는다. 참조 모듈(434)은 상응하는 데이터 (및 참조 식별자들)이 더 이상 참조되고 있지 않다고 판단할 수 있고, 이에 따라, 저장 매체(140)에서 제거되도록 표시될(예를 들어, 무효화될) 수 있다. 도 4e에 도시된 바와 같이, 데이터를 무효화하는 것은 무엇보다도, 영역(0Z 내지 52Z)을 제거하기 위해 참조 엔트리(482)를 변경함으로써 참조 맵(460)에서 데이터에 대한 참조들을 제거하는 것을 포함할 수 있다. 데이터를 무효화하는 것은 (예를 들어, 저장 어드레스들(64432 내지 64484)에 저장되는 데이터가 보유될 필요가 없다는 것을 나타내기 위해) 역방향 맵, 유효 비트맵들 등과 같은 다른 저장 메타데이터(135)를 업데이트하는 것을 더 포함할 수 있다. 엔트리들(462 및 472)의 영역들은 어떤 것도 참조 엔트리(482)의 임의 부분을 참조하지 않을 때까지, 계속해서 분기할 수 있으며, 이 지점에서 앞서 개시된 바와 같이 참조 엔트리(482)는 제거될 수 있고 참조되는 데이터는 그것에 의해 무효화될 수 있다.
도 4d 및 도 4e가 LID 영역들을 상응하는 간접적 엔트리들(462 및 472)와 중첩시키는 것을 포함하는 국부 엔트리들(465 및 475)을 도시하지만, 본 발명은 이러한 점에 제한되지 않는다. 일부 실시예들에서, 도 4d의 저장 작동은 LID들(1053 내지 2048)만을 참조하기 위해 국부 엔트리(465)를 생성하고 간접적 엔트리(462)를 변경함으로써 반영될 수 있다. 마찬가지로, 도 4e의 작동은 잘라 줄여진 LID 영역(6163 내지 7168)을 참조하기 위해 국부 엔트리(475)를 생성하고 간접적 엔트리(472)를 변경하는 것을 포함할 수 있다.
다시 도 4a를 참조하면, 참조 모듈(434)은 참조 맵(460)을 관리하거나 "그루밍하도록" 구성될 수 있다. 일부 실시예들에서, 참조 맵(460)에서의 각각의 엔트리는 참조 계수를 포함하는 메타데이터를 포함한다. 참조 계수는 참조 엔트리에 대한 새로운 참조들 또는 링크들이 추가됨에 따라, 증분될 수 있고, 엔트리에 대한 참조들을 제거하는 것에 응하여 점감될 수 있다. 일부 실시예들에서, 참조 계수들은 참조 맵(460)에서의 각각의 참조 식별자에 대해 유지될 수 있다. 대안적으로, 참조 계수들은 참조 엔트리들에 대해 전체적으로 유지될 수 있다. 참조 엔트리의 참조 계수가 0에 도달할 때, 참조 엔트리 (및/또는 참조 엔트리의 일부)는 참조 맵(460)에서 제거될 수 있다. 참조 엔트리 (또는 참조 엔트리의 일부)를 제거하는 것은 본원에 개시되는 바와 같이 저장 매체(140) 상에 상응하는 데이터를 무효화하는 것(데이터가 더 이상 보유될 필요가 없음을 나타내는 것)을 포함할 수 있다.
다른 실시예에서, 참조 모듈(434)은 "마크 앤드 스윕(mark-and-sweep)" 접근법을 사용하여 참조 엔트리들을 제거할 수 있다. 참조 모듈(434) (또는 변환 모듈(134)과 같은 다른 프로세스)는 무엇보다도, 순방향 맵(160)에서의 간접적 엔트리들 (또는 다른 타입의 엔트리들)로부터 참조 엔트리들에의 링크들을 뒤따름으로써 참조 맵(460)에서의 엔트리들에 대한 참조들을 주기적으로 확인할 수 있다. 마크 앤드 스윕 동안 액세스되지 않는 참조 엔트리들은 앞서 개시된 바와 같이 제거될 수 있다. 마크 앤드 스윕은 배후 프로세스로서 작동할 수 있고, 더 이상 사용되고 있지 않은 참조 엔트리들을 식별하고 제거하기 위해 마크 앤드 스윕 작동을 주기적으로 수행할 수 있다.
일부 실시예들에서, 본원에 개시되는 참조 맵(460)은 (예를 들어, 복제품의 생성, 또는 다른 간접적 데이터 참조에 응하여) 요구 시에 생성될 수 있다. 다른 실시예들에서, 모든 데이터 저장 작동은 중간 매핑들을 통해 수행될 수 있다. 그러한 실시예들에서, 저장 클라이언트들(106)은 가상 어드레스 공간 (VAS)의 간접적인, 가상 식별자들(VID들)을 할당할 수 있으며, 간접적인, 가상 식별자들(VID들)은 논리 어드레스 공간(132)과 같은 중간 매핑층을 통해 저장 어드레스들에 링크되고/되거나 저장 어드레스들을 참조할 수 있다. VAS는 저장 클라이언트들(106)과 저장 매체(140) 사이에 중간 매핑층을 추가할 수 있다. 저장 클라이언트들(106)은 논리 어드레스 공간(132)의 논리 식별자들로 매핑되고, 결국 각각의 저장 디바이스(들)(141) 및/또는 저장 매체(140) 상의 저장 어드레스들과 연관되는 가상화된 어드레스 공간의 VID들을 사용하여 데이터를 참조할 수 있다. 본원에 사용되는, VAS는 논리적 장치 번호(LUN) 어드레스 공간, 가상 LUN(vLUN) 어드레스 공간 등을 포함할 수 있지만, 이에 제한되지 않는다.
도 5a는 무엇보다도, 가상화된 어드레스 공간(532)을 사용하여 효율적인 영역 복제 작동들을 구현하도록 구성되는 집합층(530)의 일 실시예를 도시한다. 집합층(530)은 VAS(532)를 인터페이스(531)를 통해 저장 클라이언트들(106)에 제공하도록 구성될 수 있다. 본원에 개시되는 인터페이스(131)와 같이, 인터페이스(531)는 블록 디바이스 인터페이스, 가상 저장 인터페이스, 캐쉬 인터페이스 등 중 하나 이상을 포함할 수 있다. 저장 클라이언트들(106)은 인터페이스(531)를 통해 VAS(532)의 VID들을 참조하여 집합층(530)에 의해 관리되는 저장 리소스들과 관련되는 저장 작동들을 수행할 수 있다.
집합층(530)은 하나 이상의 중개 저장층(예를 들어, 저장층(130))을 통해 저장 리소스들로 VID들을 매핑하도록 구성되는 VAS 변환 모듈(534)을 더 포함할 수 있다. 따라서, 집합층(530)의 VAS 메타데이터(535)는 VAS(532)의 VID들과 VAS(532)의 LID들 사이에 애니 투 애니 매핑들을 포함하는 VAS 순방향 맵(560)을 포함할 수 있다. 도 5a에 도시되지 않았지만, VAS 변환 모듈(534) 및/또는 VAS 순방향 맵(560)은 복수의 상이한 저장층(130)의 복수의 논리 어드레스 공간(132)을 단일 VAS(532)로 집합시키도록 구성될 수 있다. 따라서 일부 실시예들에서, VAS(532)는 각각이 별도의 세트의 LID들을 포함하고, 각각이 각각의 저장층(130)에 상응하는 복수의 상이한 논리 어드레스 공간(132), 저장 디바이스(141) 및/또는 저장 매체(140)에 상응할 수 있다.
도 5a가 저장층(130)과 별도로 집합층(530)을 도시하지만, 본 발명은 이러한 점에 제한되지 않는다. 일부 실시예들에서, VAS(532), VAS 순방향 맵(560), VAS 변환 모듈(534) 및/또는 집합층(530)의 다른 모듈들은 저장층(130)의 일부로서 구현될 수 있다.
집합층(530)은 무엇보다도, 효율적인 영역 복제, 이동, 병합 및/또는 다른 높은 레벨 작동들을 구현하기 위해 VAS(532)에 의해 제공되는 중개 가상 어드레스 공간을 레버리징하도록 구성될 수 있다. 대안적으로, 또는 부가적으로, 중개 매핑층(들)은 하드 디스크들 등과 같은 랜덤 액세스, 제 위치 기록 저장 디바이스들 상에서 효율적인 복제 작동들을 가능하게 하도록 레버리징될 수 있다.
저장 클라이언트들(106)은 VAS(532)의 VID들을 참조하여 저장 작동들을 수행할 수 있다. 따라서, 저장 작동들은 2개의(2개 이상의) 변환층을 포함할 수 있다. VAS 순방향 맵(560)은 VAS(532)의 VID들과 저장층(130)의 논리 어드레스 공간(132)의 식별자들 사이에 제1 변환층을 포함할 수 있다. 저장층(130)의 순방향 맵(160)은 LID들과 저장 매체(140) 상의 저장 어드레스(들) 사이에 제2 변환층을 구현할 수 있다.
집합층(530)은 무엇보다도, VAS 메타데이터(535), VAS 순방향 맵(560) 및/또는 VAS 변환 모듈(534)의 사용에 의해 VAS(532) 내의 할당들을 관리하도록 구성될 수 있다. 일부 실시예들에서, VAS(532)에서 VID를 할당하는 것은 논리 어드레스 공간(132)에서 하나 이상의 상응하는 LID (및/또는 하나 이상의 다른 저장층의 식별자들)을 할당하는 것을 포함할 수 있다. 따라서, VAS(532)에서 할당되는 각각의 VID는 논리 어드레스 공간(132)의 하나 이상의 LID에 상응할 수 있다. 집합층(530)의 VID들과 논리 어드레스 공간(132) 사이의 애니 투 애니 매핑들은 본원에 개시되는 바와 같이 드물고/드물거나 애니 투 애니일 수 있다. 더욱이 일부 실시예들에서, 집합층(530)은 VID들과 복수의 상이한 논리 어드레스 공간(132) 사이에 애니 투 애니 및/또는 영역 관리된 매핑들을 유지하도록 구성될 수 있다. 따라서, 집합층(530)은 상이한 각각의 저장층(130)에 의해 관리되는 복수의 상이한 저장 디바이스(141)의 논리 어드레스 공간들을 단일의, 집합 VAS(532)로 집합시키고/시키거나 결합시킬 수 있다.
도 5a 실시예에서, 논리 어드레스 공간(132)은 직접 액세스 가능하지 않을 수 있고, 이에 따라, 저장 클라이언트들(106)은 인터페이스(531)를 통해 VID들을 사용하여 저장 리소스들을 참조할 수 있다. 그러므로, 하나 이상의 VID를 참조하여 집합층(530)을 통해 저장 작동을 수행하는 것은: a) VID들에 상응하는 저장층(130)을 식별하는 것, b) VAS 변환 모듈(534) 및/또는 VAS 순방향 맵(560)의 사용에 의해 VID들로 매핑되는 저장층(130)의 LID(들)을 결정하는 것; 그리고 c) 결정된 LID(들)를 참조하여 저장층(130)의 사용에 의해 저장 작동을 구현하는 것을 포함할 수 있다.
도 5b는 집합층(530)의 사용에 의해 구현되는 복제 작동의 일 실시예를 도시한다. 앞서 개시된 바와 같이, VAS 순방향 맵(560)은 저장층(130)의 논리 어드레스 공간(132)을 통해 저장 어드레스들로 간접적으로 매핑되는 VAS(532)에 상응할 수 있다. 도 5b는 집합층(530)을 통해 저장 작동들을 구현하는데 사용되는 어드레싱층들을 도시한다. VAS(532)의 VID들은 무엇보다도, 집합층(530)의 인터페이스(531)를 통해 저장 클라이언트들(106)에 액세스 가능한 최고 레벨 어드레싱층을 포함할 수 있다. 저장층(130)의 논리 어드레스 공간(132)은 중개 어드레싱층을 포함할 수 있다. VAS 순방향 맵(560)은 VID들과 LID들 사이에 애니 투 애니 매핑들을 포함할 수 있다. LID들은 순방향 맵(160)의 사용에 의해 저장 어드레스 공간(144) 내에서 저장 어드레스들로 매핑될 수 있다. 따라서, VID들은 저장층(130)의 중간 논리 어드레스 공간을 통해 저장 어드레스 공간(144)으로 매핑될 수 있다.
도 5b에 도시된 바와 같이 상태(563A)에서, VAS 순방향 맵(560)은 VAS(532)에서의 2개의 VID(10 및 11)를 나타내는 엔트리(10,2)를 포함할 수 있다. VAS 순방향 맵(560)은 VID 엔트리(10,2)를 논리 어드레스 공간(132)의 LID들과 연관시킨다. 도 5b 실시예에서, VAS 순방향 맵(560)은 VID 엔트리(10,2)를 LID들(100000 및 100001)(엔트리(100000,2))에 결합시킨다. 엔트리(10,2)는 특정 저장 클라이언트(106)에 할당될 수 있으며, 특정 저장 클라이언트(106)는 VID들을 참조하여 저장 작동들을 수행할 수 있다. 상태(563A)에서, 저장층(130)은 엔트리(100000,2)를 저장 매체(140) 상의 하나 이상의 저장 어드레스(저장 어드레스(20000))로 매핑하도록 구성될 수 있다.
상태(536B)에서, 집합층(530)은 VID 엔트리(10,2)를 복제하는 복제 작동을 구현할 수 있다. 복제 작동은: a) 새로운 VID 엔트리(400,2)를 할당하는 것, 그리고 b) 새로운 VID 엔트리(400,2)를 VAS 순방향 맵(560)에서의 상응하는 엔트리(100000,2)와 연관시키는 것을 포함할 수 있다. 순방향 맵(160)에서의 상응하는 엔트리(100000,2)는 변경되지 않은 상태로 남을 수 있다. 대안적으로, 순방향 맵(160)에서의 엔트리(100000,2)의 참조 계수 (또는 다른 지시기)는 엔트리가 다수의 VID 영역에 의해 참조되고 있다는 것을 나타내도록 업데이트될 수 있다. 저장 어드레스(20000)에 저장되는 데이터의 문맥 형식은 변경되지 않게 남을(예를 들어, 데이터를 논리 인터페이스(100000,2)와 계속해서 연관시킬) 수 있다. 복제 작동은 VID 엔트리(400,2)와 순방향 맵(160)에서의 엔트리(100000,2) 사이의 연관을 나타내도록 영속적 노트(366)를 저장 매체(140) 상에 저장하는 것을 더 포함할 수 있다. 대안적으로, 또는 부가적으로, 복제 작동은 VAS 순방향 맵(560) (및/또는 VAS 순방향 맵(560)의 부분들)을 지속시킴으로써 영속적이고/이거나 크래시에서 안전해 질 수 있다.
상태(536C)에서, 저장 어드레스(20000)에서의 데이터는 저장 어드레스(40000)로 재배치될 수 있다. 재배치는 표준 저장 매체 유지 작동에서, 그리고 복제된 데이터의 문맥 형식을 업데이트하지 않기 위해 일어날 수 있다. 데이터를 재배치하는 것은 순방향 맵(160)에서의 단일 엔트리를 업데이트하는 것을 포함할 수 있다. VAS 순방향 맵(560)은 변경되지 않은 상태로 남을 수 있다. VID 영역들(10,2 및 400,2)의 상이한 버전들에 대한 변경들은 중개의, 논리 어드레스 공간을 통해 관리될 수 있다. VID(10)에 대한 변경은: a) 논리 어드레스 공간(132)에서 새로운 LID를 할당하는 것, b) 새로운 LID와 연관시켜 변경된 데이터를 저장하는 것, 그리고 c) 새로운 LID를 VAS 순방향 맵(560)에서의 VID(10)로 매핑하는 것을 포함할 수 있다.
본원에 개시되는 영역 복제, 이동 및/또는 병합 작동들을 구현하는 실시예들은 스냅샷, 중복 제거, 극소 작동, 트랜잭션, 파일-시스템 관리 기능성 등과 같은 다른, 더 높은 레벨 저장 작동들을 효율적으로 구현하는데 사용될 수 있다. 다시 도 4a를 참조하면, 저장층(130)은 저장 매체(140) 상의 중복 데이터를 식별하도록 구성되는 중복 제거 모듈(374)을 포함할 수 있다. 중복 데이터는 임의의 적절한 메커니즘을 사용하여 식별될 수 있다. 일부 실시예들에서, 중복 데이터는: a) 저장 매체(140)의 콘텐츠를 스캐닝하고, b) 다양한 데이터 세그먼트의 시그니처(signature) 값들을 생성하고, c) 중복 데이터를 식별하기 위해 데이터 시그니처 값들을 비교함으로써 식별된다. 시그니처 값들은 암호 시그니처, 해시 코드, 주기적 코드 등을 포함할 수 있지만, 이에 제한되지 않는다. 시그니처 정보는 순방향 맵(160)과 같은 저장 메타데이터(135) 내에(예를 들어, 엔트리들과 연관되는 메타데이터에) 저장될 수 있고/있거나, 저장 메타데이터(135)의 하나 이상의 별도의 데이터구조체에 유지되고/되거나 인덱싱될 수 있다. 중복 제거 모듈(374)은 데이터 시그니처들을 비교할 수 있고, 시그니처 부합을 검출할 시에, 하나 이상의 중복 제거 작동을 수행할 수 있다. 중복 제거 작동들은 시그니처 부합을 검증하는 것(예를 들어, 바이트 바이 바이트(byte-by-byte) 데이터 비교를 수행하는 것) 그리고 2개 이상의 LID 영역을 통해 중복 데이터를 참조하기 위해 하나 이상의 영역 복제 작동을 수행하는 것을 포함할 수 있다.
도 6은 중복 제거 작동의 일 실시예를 도시한다. 순방향 맵(160)은 엔트리들(662 및 672)을 포함할 수 있으며, 엔트리들(662 및 672)은 상이한 각각의 저장 어드레스(3453 내지 4477 및 7024 내지 8048)에 저장되는 중복된 데이터를 참조할 수 있다. 엔트리들(662 및 672)은 각각 LID들(1024 내지 2048 및 6144 내지 6656)에 상응하는 상이한, 각각의 논리 인터페이스(663 및 673)에 상응할 수 있다. 중복된 데이터 세그먼트(데이터 세그먼트(612))는 앞서 개시된 바와 같이 중복 제거 모듈(374)에 의해 식별되고/되거나 검증될 수 있다. 대안적으로, 중복된 데이터는 데이터가 저장층(130)에서의 저장을 위해 수신됨에 따라, 식별될 수 있다. 따라서, 데이터는 데이터의 부가 카피가 저장 매체(140) 상에 저장되기 전에, 중복 제거될 수 있다.
엔트리들(662 및 672)이 중복 데이터를 참조하는 것을 식별하고/하거나 검증하는 것에 응하여, 저장층(130)은 데이터를 중복 제거하도록 구성될 수 있으며, 이는 2개의 상이한 세트의 LID들을 통해 중복 데이터의 단일 카피를 참조하도록 하나 이상의 영역 복제품을 생성하는 것을 포함할 수 있다. 앞서 개시된 바와 같이, 영역 복제품을 생성하는 것은 데이터 세그먼트의 논리 인터페이스(들)(663 및 673)을 변경하는 것을 포함할 수 있다. 도 6 실시예에서, 중복된 데이터는 각각 저장 위치들(3453 내지 4477 및 7024 내지 8048)에서의 패킷(610) 내에 데이터 세그먼트(612)로서 저장된다. 복제 작동은 데이터 세그먼트들 중 하나의 논리 인터페이스 (또는 데이터 세그먼트의 새로운 버전 및/또는 카피)를 변경하는 것을 포함할 수 있어, 데이터 세그먼트가 엔트리들(663 및 673) 둘 다에 의해 참조될 수 있다.
영역 복제 작동은 도 3a 내지 도 3e의 영역 복제 실시예들, 도 4a 내지 도 4e의 참조 엔트리 실시예들, 그리고/또는 도 5a 및 도 5b의 중간 매핑 실시예들을 포함하여 본원에 개시되는 복제 실시예들 중 임의의 것을 사용하여 구현될 수 있다. 도 6의 중복 제거 실시예에서, LID 영역들(1024 내지 2048 및 6144 내지 7168) 둘 다는 참조 엔트리(682)를 통해 데이터 세그먼트(612)의 단일 버전을 참조하도록 변경될 수 있다(다른 데이터 세그먼트는 무효화될 수 있다). 이에 따라, 중복 제거 작동은 중복 제거된 데이터 세그먼트(612)를 나타내도록(패킷(610)을 참조하도록) 참조 엔트리(682)를 생성하는 것을 포함할 수 있다. 중복 제거 작동은 엔트리들(662 및 672)을 각각의 간접적 엔트리(665 및 675)로 변경하고/하거나 변환하는 것을 더 포함할 수 있으며, 각각의 간접적 엔트리(665 및 675)는 앞서 개시된 바와 같이 참조 엔트리(682)를 통해 데이터 세그먼트(612)로 매핑될 수 있다. 중복 제거 작동들은 데이터 세그먼트(612)를 LID들의 세트들(1024 내지 2048 및 6144 내지 7168) 둘 다(뿐만 아니라 참조 엔트리(682))와 연관시키기 위해 데이터 세그먼트(612)의 논리 인터페이스(669)를 변경하는 것을 더 포함할 수 있다. 중복 제거 작동들은 앞서 개시된 바와 같이 영속적 노트(366)를 저장 매체(140) 상에 저장하는 것을 더 포함할 수 있다.
중복 제거 작동은 앞서 개시된 바와 같이 변경된 논리 인터페이스(669)와 일치하도록 데이터 세그먼트(612)의 문맥 형식을 업데이트하는 것을 더 포함할 수 있다. 문맥 형식을 업데이트하는 것은 하나 이상의 배후 작동으로 데이터 세그먼트(612)를 업데이트된 문맥 형식(데이터 패킷(610))으로 (예를 들어, 저장 위치들(84432 내지 85456)에서의) 저장 로그에 첨부하는 것을 포함할 수 있다. 업데이트된 데이터 패킷(610)은 참조 식별자들(0Z 내지 1023Z))을 통해 데이터 세그먼트(612)를 업데이트된 논리 인터페이스(669)(예를 들어, LID들(1024 내지 2048 및 6144 내지 6656)와 연관시키는 영속적 메타데이터(614)를 포함할 수 있다.
도 6이 LID들의 단일 엔트리 또는 영역을 복제하고/하거나 중복 제거하는 것을 도시하지만, 본 발명은 이러한 점에 제한되지 않는다. 일부 실시예들에서, 복수의 프론트 식별자 영역은 단일 복제 작동으로 복제될 수 있다. 이러한 타입의 복제 작동은 어드레스 영역 (또는 전체 논리 어드레스 공간(132))의 "스냅샷"을 생성하는데 사용될 수 있다. 본원에 사용되는, 스냅샷은 특정 시점의 저장 디바이스 (또는 LID들의 세트)의 상태를 지칭한다. 스냅샷은 스냅샷 작동을 완료한 후에 영역 내에서 일어나는 변경들에 관계없이 LID 영역의 "본래의" 상태를 유지할 수 있다.
도 7은 스냅샷 작동들을 효율적으로 구현하도록 구성되는 저장층(130)을 포함하는 시스템(700)의 일 실시예를 도시하는 블록도이다. 도 7 실시예는 논리 어드레스 공간(132) 내의 어드레스 영역에 관한 것이다. 그러나, 본 발명은 이러한 점에 제한되지 않고, 앞서 개시된 바와 같이 VAS(532) 내의 영역들 및/또는 규모들과 같은 다른 타입들의 어드레스 영역들과 함께 사용되도록 구성될 수 있다. 저장층(130)은 본원에 개시되는 바와 같이 스냅샷 작동들을 구현하도록 구성되는 스냅샷 모듈(736) 및 타이밍 모듈(738)을 포함할 수 있다.
상태(773A)에서, 저장층(130)은 LID 영역(FR1)의 스냅샷을 생성하도록 구성될 수 있다. 스냅샷을 생성하는 것은 특정 시간에서 LID 영역(FR1)의 상태를 보존하는 것을 포함할 수 있다. 스냅샷 작동은 후속 저장 작동들이 LID 영역 내에서 수행되는 것을 가능하게 하면서 LID 영역(FR1)을 보존하는 것을 더 포함할 수 있다.
앞서 개시된 바와 같이, 저장층(130)은 무엇보다도, 로그 저장 모듈(136)의 사용에 의해 저장 매체(140) 상의 저장 로그에 데이터를 저장하도록 구성될 수 있다. 저장 작동들의 로그 순서는 (도 1d 및 도 1e와 함께 개시된 바와 같이) 저장 구획들(170A 내지 170N) 상의 시퀀스 지시기들(113) 및/또는 저장 매체(144)의 저장 어드레스 공간(144) 내의 순차적 저장 위치들과 같은 데이터 패킷들과 연관되는 시퀀스 정보를 사용하여 결정될 수 있다.
저장층(130)은 로그에서 데이터의 상대적 시간 순서화와 같은 다른 타입들의 순서화 및/또는 타이밍 정보를 유지하도록 추가로 구성될 수 있다. 그러나 일부 실시예들에서, 데이터의 로그 순서는 무엇보다도, 데이터가 매체 관리 작동들로 저장 디바이스 내에서 재배치되는 것으로 인해 타이밍 정보를 정확히 반영하지 않을 수 있다. 데이터를 재배치하는 것은 저장 매체(140) 상의 데이터의 본래의 저장 위치로부터 데이터를 판독하는 것 그리고 저장 로그 내의 현재의 첨부 지점에서 데이터를 첨부하는 것을 포함할 수 있다. 이에 따라, 더 오래된, 재배치된 데이터는 저장 로그에 더 새로운, 현재의 데이터와 함께 저장될 수 있다. 그러므로, 저장 로그가 특정 LID들과 관련되는 데이터 작동들의 상대적 로그 순서를 보존할 수 있지만, 저장 로그는 절대적 타이밍 정보를 정확히 반영하지 않을 수 있다.
일부 실시예들에서, 로그 저장 모듈(136)은 데이터를 타이밍 정보와 연관시키도록 구성되며, 이는 저장 매체(130) 상에서 수행되는 저장 작동들의 상대적 타이밍 정보를 확립하는데 사용될 수 있다. 일부 실시예들에서, 타이밍 정보는 (타이밍 모듈(738)에 의해 유지되는) 각각의 타임 스탬프를 포함할 수 있으며, 각각의 타임 스탬프는 저장 매체(140) 상에 저장되는 각각의 데이터 패킷에 적용될 수 있다. 타임 스탬프들은 데이터 패킷들(310)의 영속적 메타데이터(314) 내에 저장될 수 있다. 대안적으로, 또는 부가적으로, 타이밍 모듈(738)은 더 거친 수준의 입도로 타이밍 정보를 추적하도록 구성될 수 있다. 일부 실시예들에서, 타이밍 모듈(738)은 하나 이상의 범용 타이밍 지시기(에포크(epoch) 식별자)를 유지한다. 본원에 사용되는, "에포크 식별자"는 저장층(130)을 통해 수행되는 저장 작동들의 상대적 타이밍을 결정하는데 사용되는 식별자를 지칭한다. 로그 저장 모듈(136)은 데이터 패킷들(710)에서 에포크 지시기(739)를 포함하도록 구성될 수 있다. 에포크 지시기(739)는 타이밍 모듈(738)에 의해 유지되는 현재의 에포크(예를 들어, 범용 타이밍 지시기)에 상응할 수 있다. 에포크 지시기(739)는 상응하는 데이터 세그먼트(712)가 저장 로그에 기록되었던 에포크에 상응할 수 있다. 에포크 지시기(739)는 패킷(710)의 영속적 메타데이터(714) 내에 저장될 수 있고, 이에 따라, 재배치 작동들 동안 데이터 패킷(710)과 연관되는 상태로 남을 수 있다. 타이밍 모듈(738)은 새로운 스냅샷의 생성, 사용자 요청 등과 같은 일정 이벤트들에 응하여 범용 에포크 식별자를 증분시키도록 구성될 수 있다. 데이터 세그먼트(712)의 에포크 지시기(739)는 재배치 및/또는 다른 매체 유지 작동들을 통해 변경되지 않은 상태로 남을 수 있다. 따라서, 에포크 지시기(739)는 저장 로그에서 데이터 패킷(710)의 상대 위치와는 관계없이 데이터 세그먼트(712)의 본래의 저장 시간에 상응할 수 있다.
스냅샷 작동은 특정 시간에 특정 LID 영역(FR1)의 상태를 보존하는 것을 포함할 수 있다. 그러므로, 스냅샷 작동은 저장 매체(140) 상에 FR1과 관련되는 데이터를 보존하는 것을 포함할 수 있다. 데이터를 보존하는 것은: a) 특정 시간 프레임(에포크)과 관련되는 데이터를 식별하는 것, 그리고 b) 저장 매체(140) 상에 식별된 데이터를 보존하는 것(예를 들어, 식별된 데이터가 무엇보다도, 저장 복원 작동들로 저장 매체(140)에서 제거되는 것을 방지하는 것)을 포함할 수 있다. 스냅샷과 관련되는 데이터는 후속 저장 작동들(예를 들어, 데이터를 오버라이트하고/하거나, 변경하고/하거나, 트리밍하고/하거나, 배제하는 작동들)에 의해 무효화되더라도 보유될 수 있다. 특정 스냅샷을 위해 보존될 필요가 있는 데이터는 앞서 개시된 에포크 지시기들(739)의 사용에 의해 식별될 수 있다.
상태(773A)(에포크 지시기(eO)에 의해 표시되는 시간(tl))에서, 저장층(130)은 스냅샷 작동을 구현하라는 요청을 수신할 수 있다. 요청에 응하여, 스냅샷 모듈(736)은 타이밍 모듈(738)에 의해 유지되는 에포크 식별자의 현재의 값을 결정할 수 있다. 에포크 식별자의 현재의 값은 현재의 "스냅샷 에포크"로 지칭될 수 있다. 도 7 실시예에서, 스냅샷 에포크는 0이다. 스냅샷 모듈(736)은 타이밍 모듈(738)이 현재의, 범용 에포크 지시기를 증분시키도록(예를 들어, 에포크 식별자를 1로 증분시키도록) 추가로 구성될 수 있다. 스냅샷을 생성하는 것은 현재의, 업데이트된 에포크 지시기를 표시하도록 구성되는 저장 매체 상에 영속적 노트(366)를 저장하는 것을 더 포함할 수 있다. 영속적 노트(366)는 스냅샷 에포크와 관련되는 데이터가 보존되게 될 것을 나타내도록(예를 들어, 스냅샷 작동에서 보존될 LID들(FR1)의 특정 영역을 식별하도록) 추가로 구성될 수 있다. 영속적 노트(366)는 메타데이터 재구성 작동 중에: a) 현재의 에포크 식별자를 결정하고/하거나, b) 특정 스냅샷 에포크(예를 들어, 에포크(eO))와 연관되는 데이터를 보존하도록 스냅샷 모듈(736) 및/또는 매체 관리 모듈(370)을 구성하는데 사용될 수 있다.
스냅샷 모듈(736)은 스냅샷 에포크와 연관되는 데이터를 보존할 것을 매체 관리 모듈(370)에 명령하도록 추가로 구성될 수 있다. 이에 대응하여, 매체 관리 모듈(370)은: a) 스냅샷을 위해 보존할 데이터(스냅샷 데이터)를 식별하고, b) 무엇보다도, 저장 복원 작동들로 식별된 데이터가 저장 매체(140)에서 제거되는 것을 방지하도록 구성될 수 있다. 매체 관리 모듈(370)은 데이터 패킷들(710)의 에포크 지시기들(739)의 사용에 의해 스냅샷 데이터를 식별할 수 있다. 도 1e와 함께 개시된 바와 같이, 데이터는 저장 매체(140) 상에서 제 위치에 있지 않게 기록될 수 있다. 특정 LID와 연관되는 가장 최근의 버전의 데이터는 로그 내의 상응하는 데이터 패킷들(710)의 순서에 기반하여 결정될 수 있다. 매체 관리 모듈(370)은 스냅샷 에포크 내의 가장 최근의 버전의 데이터를 보존될 필요가 있는 데이터로서 식별하도록 구성될 수 있다. 스냅샷 에포크에서 다른 데이터에 의해 쓸모 없게 되어졌던 데이터는 제거될 수 있다. 도 1e 실시예를 참조하면, (동일한 LID(A)와 연관되는) 데이터(X0 및 XI)가 둘 다 스냅샷 에포크(0)로 표시되었으면, 매체 관리 모듈(370)은 에포크(0)에서 가장 최근의 버전의 데이터를 XI로 식별할 것이고, 데이터(X0)를 제거되도록 표시할 것이다. 그러나, 데이터(X0)가 스냅샷 에포크(0)로 표시되었고 XI가 이후의 에포크(예를 들어, 스냅샷 작동 후에 에포크(1))로 표시되었으면, 매체 관리 모듈(370)은 스냅샷의 데이터를 보존하기 위해 데이터(X0)를 저장 매체(140) 상에 보존할 수 있다.
상태(773B)에서, 스냅샷 모듈(738)은 저장 작동들이 후속 에포크들(예를 들어, 에포크(e1)) 동안 계속해서 수행되는 것을 가능하게 하면서, 스냅샷(FR1)과 관련되는 데이터(에포크(eO)와 연관되는 데이터)를 보존하도록 구성될 수 있다. FR1을 보존하는 것은 저장 작동들이 FR1을 참조하여 계속되는 것을 가능하게 하면서, 에포크(eO)(FR1(eO))에서 LID 영역의 본래의 상태를 보존하도록 FR1을 복제하는 것을 포함할 수 있다. 복제 작동은 중복된 엔트리들, 참조 엔트리들 및/또는 중간 매핑층 중 하나 이상을 사용하여 앞서 개시된 바와 같이 구현될 수 있다. 저장 작동들은 LID들(FR1)을 참조하여 저장 매체(140) 상의 저장 로그에 데이터를 첨부하는 것을 포함할 수 있다. 스냅샷(FR1)(eO)에 상응하는 복제된 LID들은 변경 불가할 수 있다. 따라서, FR1의 스냅샷(eO)은 LID 영역에 대한 변경에도 불구하고 보존될 수 있다. 상태(773B)로 저장되는 데이터는 현재의 에포크(e1)의 에포크 지시기(739)와 함께 저장될 수 있다. 스냅샷 모듈(736)은 에포크(e1) (및 후속 에포크들) 동안 수행되는 저장 작동들에 의해 쓸모 없게 되고/되거나 무효화되어지는 데이터를 보존하도록 구성될 수 있다. 다시 도 1e 실시예를 참조하면, 매체 관리 모듈(370)은 데이터(X0)를 스냅샷(FR1)을 위해 보존할 데이터로서 식별할 수 있다(데이터(XI)는 스냅샷 작동이 수행된 후에, 저장되었을 수 있다). 스냅샷 모듈(738) 및/또는 매체 관리 모듈(370)은 데이터(X0)가 에포크(e1)에서의 데이터(XI)에 의해 이후에 쓸모 없게 되어졌더라도, 데이터(X0)를 보존하도록 구성될 수 있다. 데이터(X0)는 LID(A)가 삭제되거나, 트리밍되거나 하더라도 보유될 수 있다.
에포크 지시기(eO)로 표시되는 LID 영역(FR1)(eO) 및 데이터를 포함하는 FR1(eO)의 스냅샷은 상응하는 스냅샷이 삭제될 때까지, 보존될 수 있다. 스냅샷은 인터페이스(131)를 통해 수신되는 요청에 응하여 삭제될 수 있다. 상태(773C)로 나타내어진 바와 같이, 에포크(0)는 다른, 개재된 에포크들(에포크들(e1 내지 eN))이 생성되었고/되었거나 삭제되었던 후에도, 저장 매체(140) 상에 보유될 수 있다. 에포크(eO)를 삭제하는 것은 에포크(eO)와 연관되는 유효하지 않은/쓸모 없게 된 데이터를 제거하기 위해 스냅샷 모듈(738) 및/또는 매체 관리 모듈(370)을 구성하는 것을 포함할 수 있다.
상태(773A)에서 스냅샷을 생성한 후에 수행되는 저장 작동들은 논리 어드레스 공간(132) 및 상세하게는 순방향 맵(160)을 변경할 수 있다. 변경들은 데이터를 저장 매체(140)에 첨부하는 것, FR1에 대한 LID들을 추가하고/하거나 제거하는 것 등에 응하여 저장 어드레스 결합들을 업데이트하는 것을 포함할 수 있다. 일부 실시예들에서, 스냅샷 모듈(736)은 논리 어드레스 공간(132)의 별도의 영역과 같은 별도의 저장 메타데이터(135) 내에서, 별도의 명칭 공간, 별도의 맵 등에서 스냅샷 영역(FR1)(eO)을 보존하도록 구성된다. 대안적으로, 스냅샷 모듈(736)은 시간(eO)에서 본래의 버전의 FR1을 보존하지 않고 변경들이 순방향 맵(160)에서 일어나는 것을 가능하게 할 수 있다. 스냅샷 모듈(736)은 저장 매체(140) 상에 보존되는 스냅샷 데이터를 사용하여 eO(시간(tl)) 동안 순방향 맵(160)을 재구성하도록 구성될 수 있다. 시간(tl)에서의 순방향 맵(160)은 앞서 개시된 바와 같이 재구성될 수 있으며, 이는 (로그 순서로) 저장 매체(140) 상에 저장되는 데이터에 순차적으로 액세스하는 것 그리고 데이터 패킷들(710)과 연관되는 영속적 메타데이터(714)에 기반하여 순방향 맵 엔트리들을 생성하는 것을 포함할 수 있다. 도 7 실시예에서, 에포크(eO)에 상응하는 순방향 맵(160)은 에포크 지시기(739)(eO (이하))로 표시되는 데이터 패킷들(710)을 참조함으로써 재구성될 수 있다. eO보다 더 큰 에포크 지시기들(739)과 연관되는 데이터는 (스냅샷(FR1)(eO)이 생성되었던 후에, 그러한 데이터가 작동들에 상응하므로), 무시될 수 있다.
본원에 개시되는 저장층(130)은 효율적인 영역 이동 작동들을 구현하도록 추가로 구성될 수 있다. 도 8a는 본원에 개시되는 저장층(130)에 의해 구현되는 이동 작동의 일 실시예를 도시한다. 순방향 맵(160)은 LID들(1023 내지 1025)을 저장 매체(140) 상의 각각의 데이터 세그먼트에 결합하도록 구성되는 엔트리들(862)을 포함한다. 엔트리들(862)은 실시예의 상세들을 더 양호하게 예시하기 위해 별도로 도시되지만; 엔트리들(862)은 LID들(1023 내지 1025)의 전체 영역을 포함하는 단일 엔트리에 포함될 수 있다. 엔트리들(862)은 저장 어드레스들(32, 3096 및 872)에 저장되는 데이터의 논리 인터페이스(863)를 한정할 수 있다. 앞서 개시된 바와 같이, 저장 어드레스들(32, 3096 및 872)에 저장되는 데이터는 데이터를 상응하는 LID(들)(1023, 1024 및 1025)과 연관시키는 문맥 형식으로 저장될 수 있다.
저장층(130)은 무엇보다도, LID들(1023, 1024 및 1025)과 각각의 매체 저장 위치(32, 3096 및 872)에서의 데이터 사이의 연관을 새로운 세트의 LID들(예를 들어, 9215, 9216 및 9217)에 상응하는 새로운 논리 인터페이스(863B)로 대체함으로써 엔트리들(862)을 LID들(9215 내지 9217)로 이동시키도록 구성될 수 있다. 이동 작동은 인터페이스(131)를 통하여 수신되는 요청에 응하여 그리고/또는 더 높은 레벨 저장 작동(예를 들어, 파일을 재명명하라는 요청, 순방향 맵(160)의 균형을 잡고/잡거나 순방향 맵(160)을 조각 모음하는 작동들 등)의 일부로서 수행될 수 있다.
이동 작동은 앞서 개시된 복제 실시예들 중 하나 이상에 따라 구현될 수 있다. 일부 실시예들에서, 이동 작동은 LID들(1023, 1024 및 1025)로 매핑되는 저장 어드레스들을 목적지 LID들(9215, 9216 및 9217)과 연관시키는 것을 포함할 수 있으며, 이 연관시키는 것은 이동 작동에 따라 데이터의 논리 인터페이스(863A)를 변경하는 것을 야기할 수 있다. 이동 작동은 이동 작동이 영속적이고 크래시에서 안전한 것을 보장하기 위해 영속적 노트(366)를 저장 매체(140) 상에 저장하는 것을 더 포함할 수 있다. 저장 어드레스들(32, 872 및 3096)에 저장되는 데이터는 앞서 개시된 바와 같이 하나 이상의 배후 작동으로 업데이트된 논리 인터페이스(863B)에 따라 재기록될 수 있다.
도 8b는 이동 작동의 다른 실시예를 도시한다. 위와 같이, 이동 작동은 LID들(1023 내지 1025)과 연관되는 데이터를 LID들(9215 내지 9217)로 이동시키는 것을 포함할 수 있다. 도 8b의 이동 작동은 도 4a 내지 도 4e와 함께 개시된 바와 같이 참조 엔트리들을 활용할 수 있다. 따라서, 이동 작동은 이동 작동을 나타내기 위해 참조 맵(460)에서 참조 엔트리들(882)을 생성하는 것을 포함할 수 있다. 이동 작동은 참조 엔트리들(882)을 통해 데이터를 참조하기 위해 새로운 간접적 엔트리들(866)을 할당하는 것을 더 포함할 수 있다. 참조 엔트리들(882)은 어드레스들(32, 3096 및 872)과 연관될 수 있는 이동 전 LID들(1023, 1024 및 1025)을 포함할 수 있다. 그러므로, 데이터의 새로운 논리 인터페이스(863C)는 간접적 엔트리들(866) 및 상응하는 참조 엔트리들(882)을 포함할 수 있다. 이동 작동은 앞서 개시된 바와 같이 이동 작동이 영속적이고 크래시에서 안전한 것을 보장하기 위해 영속적 노트(366)를 저장 매체 상에 저장하는 것을 더 포함할 수 있다.
저장 어드레스들(32, 3096 및 872)에 저장되는 데이터의 문맥 형식은 업데이트된 논리 인터페이스(863C)와 상반될 수 있으며; 데이터의 문맥 형식은 LID들(9215, 9216 및 9217) (및/또는 참조 엔트리들)과는 대조적으로 LID들(1023, 1024 및 1025)과 각각의 데이터 세그먼트를 연관시킬 수 있다. 영속적 노트(366)는 데이터의 업데이트된 논리 인터페이스(863C)를 포함할 수 있어, 저장 메타데이터(135)(예를 들어, 순방향 맵(160) 및/또는 참조 맵(460))이 필요하다면 정확하게 재구성될 수 있다.
저장층(130)은 변경된 논리 인터페이스(863C)(LID들(9215, 9216 및 9217))를 통해 일관되지 않는 문맥 형식의 데이터에 대한 액세스를 제공할 수 있다. 데이터는 이동 작동 이후에(이동 작동 및/또는 다른 저장 작동들의 경로를 넘어) 변경된 논리 인터페이스(863C)와 일치하는 문맥 형식으로 재기록되고/되거나 재배치될 수 있다. 일부 실시예들에서, 저장 어드레스들(32, 3096 및/또는 872)에서의 데이터는 상술한 바와 같이 하나 이상의 배후 작동으로 매체 관리 모듈(370)에 의해 재기록될 수 있다. 그러므로, 이동 작동은 순방향 맵(160)을 업데이트하는 것 그리고/또는 영속적 노트(366)를 저장하는 것에 응하여 완료될 (그리고/또는 승인을 되돌릴) 수 있다.
도 8c에 도시된 바와 같이, 순방향 맵(160) 및/또는 다른 저장 메타데이터(135)는 이동 작동의 데이터를 재기록하는 것에 응하여 업데이트될 수 있다. 도 8c 실시예에서, 매체 저장 위치(32)에 저장되는 데이터 세그먼트(812A)는 저장 복원 작동으로 재배치될 수 있으며, 이는 변경된 논리 인터페이스(863C)와 일치하는 문맥 형식(데이터 패킷(810A))으로 데이터를 저장하는 것을 포함할 수 있다. 데이터 패킷(810A)은 데이터 세그먼트(812A)를 LID(9215)와 연관시키는 영속적 메타데이터(814A)를 포함할 수 있다. 순방향 맵(160)은 업데이트된 문맥 형식의 데이터를 참조하도록 업데이트될 수 있으며, 이는 참조 엔트리보다 오히려 데이터 패킷(810A)을 직접 참조하기 위해 LID(9215)의 간접적 엔트리를 변경하는 것을 포함할 수 있다. LID(9215)에 상응하는 엔트리는 간접적 엔트리에서 표준의, 국부 엔트리로 복귀할 수 있고, LID(1023)에 대한 참조 엔트리는 참조 맵(460)에서 제거될 수 있다.
도 8d를 참조하면, 저장 클라이언트(106)는 LID(9217)와 연관되는 데이터를 변경할 수 있으며, 이는 (예를 들어, 저장 어드레스(772)에서) 제 위치에 있지 않게 데이터 세그먼트를 저장하는 것을 포함할 수 있다. 데이터 세그먼트는 변경된 논리 인터페이스(863C)와 일치하는(예를 들어, 데이터를 LID(9217)와 연관시키는) 문맥 형식으로 기록될 수 있다. 이에 대응하여, 순방향 맵(160)은 앞서 개시된 바와 같이 LID(9217)에 대한 엔트리를 데이터 세그먼트의 저장 어드레스(예를 들어, 저장 어드레스(772))와 연관시키고 참조 맵(460)에서 LID(1025)에 대한 참조 엔트리를 제거하도록 업데이트될 수 있다.
일부 실시예들에서, 참조 맵(460)은 순방향 맵(160)과 별도로 유지될 수 있어, 순방향 맵(160) 안의 엔트리들(예를 들어, 엔트리들(882))은 저장 클라이언트들(106)에 의해 직접 참조될 수 없다. 이러한 구분은 저장 클라이언트들(106)이 더 효율적으로 작동하는 것을 가능하게 할 수 있다. 예를 들어, 데이터가 업데이트된 문맥 형식으로 재기록되고/되거나 재배치될 때까지 작동들을 멎게 하는 것보다 오히려, 데이터 작동들은 데이터가 하나 이상의 배후 프로세스에서 재기록되는 동안, 진행될 수 있다. 도 8e를 참조하면, 앞서 개시된 이동 작동을 뒤따라, 저장 클라이언트(106)는 LID(1024)와 관련되어 데이터를 저장할 수 있다. LID(1024)에 상응하는 참조 엔트리(882)는 무엇보다도, 저장 어드레스(3096)에서의 데이터가 업데이트된 문맥 형식으로 아직 재기록되지 않은 것으로 인해 참조 맵(460)에 포함될 수 있다. 그러나, 참조 맵(460)이 순방향 맵(160)과 별도로 유지되므로, 명칭 충돌이 일어나지 않을 수 있고 저장 작동이 완료될 수 있다. 순방향 맵(160)은 논리 인터페이스(863C) (및 참조 맵(460))을 통해 LID(1024)에 이전에 결합되는 데이터에 대한 액세스를 계속해서 제공하면서, 매체 저장 위치(4322)에 저장되는 데이터에 대한 논리 인터페이스를 포함하는 별도의 엔트리(864)를 포함할 수 있다.
개시된 이동 작동에서, 간접적 엔트리들이 무엇보다도, 상응하는 데이터를 재기록하고/하거나, 재배치하고/하거나, 변경하고/하거나, 삭제하고/하거나, 오버라이트하는 것으로 인해 참조 맵(460)의 참조 엔트리들에 더 이상 링크되지 않을 때, 참조 엔트리들은 제거될 수 있고, 간접적 엔트리들은 직접적인, 국부 엔트리들로 복귀할 수 있다. 게다가, 이동 작동과 연관되는 영속적 노트(366)는 앞서 개시된 바와 같이 무효화되고/되거나 저장 매체(140)에서 제거될 수 있다.
다시 도 1a를 참조하면, 저장층(130)의 인터페이스(131)는 본원에 개시되는 저장 작동들을 수행하기 위해 API들 및/또는 인터페이스들을 제공하도록 구성될 수 있다. API들 및/또는 인터페이스들은 블록 인터페이스, 확장된 저장 인터페이스 등 중 하나 이상을 통해 드러날 수 있다. 블록 인터페이스는 fadvise 파라미터들, I/O 제어 파라미터들 등과 같은 인터페이스 확장자들의 사용에 의해 부가 API들 및/또는 기능성을 포함하도록 확장될 수 있다. 인터페이스(131)는 영역 복제 작동, 영역 이동 작동, 영역 병합 작동, 중복 제거, 스냅샷 및 본원에 개시되는 다른, 더 높은 레벨 작동들을 수행하기 위해 API들을 제공할 수 있다. 인터페이스(131)는 저장 클라이언트들(106)이 속성들 및/또는 메타데이터를 LID 영역들에 적용하는 것(예를 들어, 영역을 프리징(freezing)하는 것), 영역 스냅샷들을 관리하는 것 등을 가능하게 할 수 있다. 본원에 개시되는 바와 같이, 영역 복제 작동은 하나 이상의 소스 LID의 세트의 논리 카피를 생성하는 것을 포함한다. 영역 복제, 이동 및/또는 병합 작동은 도 3a 내지 도 3e에 도시된 영역 복제 실시예들, 도 4a 내지 도 4e의 참조 엔트리 실시예들, 및/또는 도 5a 및 도 5b의 중간 매핑층 실시예들을 포함하지만, 이에 제한되지 않는 본원에 개시되는 실시예들 중 임의의 것을 사용하여 구현될 수 있다.
본원에 개시되는 영역 복제, 이동 및/또는 병합 작동들은 중복 제거, 스냅샷, 효율적인 파일 카피 작동(논리 파일 카피), 파일 일관성 관리, 어드레스 공간 관리, mmap 체크포인트, 극소 기록 등과 같은 더 높은 레벨 작동들을 구현하는데 사용될 수 있다. 이러한 더 높은 레벨 작동들은 저장층(130)의 인터페이스(131)를 통해 드러날 수도 있다. 개시된 작동들은 작동 시스템, 파일 시스템, 데이터베이스 서비스 등과 같은 다양한 상이한 저장 클라이언트(106)에 의해 레버리징될 수 있다.
도 9a는 파일 관리 작동들을 구현하도록 구성되는 저장층(130)을 포함하는 시스템(900A)의 일 실시예를 도시한다. 시스템(900A)은 복잡성, 오버헤드 등을 감소시키기 위해 저장층(130)의 기능성을 레버리징하도록 구성될 수 있는 파일 시스템(906)을 포함할 수 있다. 파일 시스템(906)은 효율적인 파일 레벨 스냅샷 및/또는 카피 작동들을 구현하기 위해 영역 복제, 이동, 이동, 스냅샷, 중복 제거 및/또는 본원에 개시되는 다른 기능성을 레버리징하도록 구성될 수 있다. 파일 시스템(906)은 클라이언트 요청들(예를 들어, 카피 커맨드, 파일 스냅샷 ioctrl 등)에 응하여 그러한 작동들을 구현하도록 구성될 수 있다. 파일 시스템(906)은 무엇보다도, a) (존재한다면) 소스 파일의 불결한 페이지들을 플러싱(flushing)하고, b) 카피된 파일 및/또는 파일 레벨 스냅샷을 나타내는 새로운 목적지 파일을 생성하고, c) 소스 파일을 목적지 파일로 복제하도록 구성되는 영역 복제 작동을 수행할 것을 저장 모듈(130)에 명령함으로써 소스 파일 상에 효율적인 파일 카피 및/또는 파일 레벨 스냅샷 작동들을 구현하도록 구성될 수 있다.
도 9a는 파일 시스템(906)에 대한 영역 복제 작동들을 구현하는 다양한 실시예들을 도시한다. 일부 실시예들에서, 그리고 상태(911A)에 도시된 바와 같이, 저장층(130)은 소스 파일(복제될 파일)의 LID들이 순방향 맵(160)의 사용에 의해 저장 매체 상의 파일 데이터로 매핑되는 논리 어드레스 공간(132)을 유지하도록 구성될 수 있다. 상태(911B)에 도시된 상응하는 영역 복제 작동은: a) 목적지 파일에 대한 LID들의 세트를 할당하는 것, 그리고 b) 소스 파일 및 목적지 파일의 LID들을 저장 매체(140) 상의 파일 데이터로 매핑하는 것을 포함할 수 있다. 영역 복제 작동은 파일 데이터가 소스 파일 및 목적지 파일 LID들 둘 다와 연관됨을 나타내기 위해 영속적 노트(366)를 저장 매체(140) 상에 저장하는 것을 더 포함할 수 있다. 영역 복제 작동은 본원에 개시되는 바와 같이 업데이트된 문맥 형식에 따라 파일 데이터를 재기록하는 것을 더 포함할 수 있다.
다른 실시예들에서, 저장층(130)은 (예를 들어, 도 4a 내지 도 4e에 개시된 바와 같이) 영역 복제 작동들을 구현하기 위해 참조 맵(460)을 레버리징할 수 있다. 영역 복제 작동 전에, 상태(911C)에서, 소스 파일의 LID들은 순방향 맵(160)에서의 상응하는 파일 데이터로 직접 매핑될 수 있다. 상태(911D)에서 영역 복제품을 생성하는 것은 참조 맵(460)에서의 하나 이상의 참조 엔트리를 파일 데이터와 연관시키는 것, 그리고 소스 파일 LID들 및 목적지 파일 LID들에 상응하는 간접적 엔트리들을 참조 엔트리에 링크하는 것을 포함할 수 있다. 영역 복제 작동은 본원에 개시되는 바와 같이 영속적 노트(366)를 저장 매체(140) 상에 저장하는 것 그리고/또는 파일 데이터의 문맥 형식을 업데이트하는 것을 더 포함할 수 있다.
일부 실시예들에서, 저장층(130)은 (예를 들어, 도 5a 및 도 5b에 개시된 바와 같이) 중간층 매핑층을 사용하여 영역 복제 작동들을 구현하도록 구성될 수 있다. 상태(911E)로 나타내어진 바와 같이, 소스 파일은 VAS(532)의 VID들의 세트에 상응할 수 있으며, VAS(532)의 VID들의 세트는 중개 어드레스 공간(예를 들어, 저장층(130)의 논리 어드레스 공간(132))을 통해 저장 매체(140) 상의 파일 데이터로 매핑될 수 있다. 영역 복제 작동을 수행하는 것은: a) 목적지 파일에 대해 VAS(532)에서의 VID들을 할당하는 것, 그리고 b) 목적지 파일의 VIS를 중간 매핑층의 LID들(예를 들어, 소스 파일 VID들로 매핑되는 동일한 세트의 LID들)과 연관시키는 것을 포함할 수 있다. 영역 복제 작동은 목적지 VID들이 파일 데이터 LID들과 연관되는 것을 나타내는 영속적 노트(366)를 저장 매체(140) 상에 저장하는 것을 더 포함할 수 있다. 파일 데이터가 중간 식별자들에 이미 결합되어 있으므로, 파일 데이터의 문맥 형식은 업데이트될 필요가 없을 수 있다.
파일 시스템(906)은 mmap 작동들을 체크포인팅하기 위해 저장층(130)을 레버리징하도록 추가로 구성될 수 있다. 본원에 사용되는, "mmap" 작동은 파일들의 콘텐츠가 파일 시스템(906)의 표준 판독/기록 인터페이스들보다는 오히려 표준 로드 및 저장 작동들을 통해 메모리의 페이지들로서 액세스되는 작동을 지칭한다. "msync" 작동은 (존재한다면) 파일의 불결한 페이지들을 저장 매체(140)로 플러싱하는 작동을 지칭한다. mmap 작동들의 이용은 파일 체크포인팅을 어렵게 할 수 있다. 파일 작동들은 메모리에서 수행되고 msync는 상태가 저장되어야 할 때, 발행된다. 그러나, msync 후의 파일의 상태는 현재의 인 메모리(in-memory) 상태를 나타내고 마지막 저장된 상태는 손실될 수 있다. 그러므로, 파일 시스템(906)이 msync 동안 크래싱하게 되면, 파일은 일관되지 않는 상태로 남겨질 수 있다.
일부 실시예들에서, 파일 시스템(906)은 msync로의 호출 동안 mmap-작동된 파일의 상태를 체크포인팅하도록 구성된다. 파일을 체크포인팅하는 것은 앞서 개시된 바와 같이 파일 레벨 스냅샷 (및/또는 영역 복제품)을 생성하는 것을 포함할 수 있다. 파일 레벨 스냅샷은 변경들이 적용되기 전에, 파일의 상태를 저장하도록 구성될 수 있다. msync가 발행될 때, 다른 복제품은 msync 작동으로 적용되는 변경들을 반영하도록 생성될 수 있다. 도 9b에 도시된 바와 같이, (mmap 작동 이전의) 상태(913A)에서, 파일(1)은 LID들(10 내지 13) 및 저장 매체(140) 상의 상응하는 저장 어드레스들(P1 내지 P4)과 연관될 수 있다. mmap 작동에 응하여, 파일 시스템(906)은 저장층(130)의 인터페이스(131)를 통해 영역 복제 작동을 수행할 수 있으며, 이는 (파일(1.1)로 표시되는) 파일(1)의 복제품을 생성하는 것을 포함할 수 있다. 파일(1.1)은 동일한 파일 데이터(예를 들어, 동일한 저장 어드레스들(P1 내지 P4))를 참조하는 상이한 세트의 LID들(40 내지 43)과 연관될 수 있다. 다른 실시예들에서, 파일(1)은 앞서 개시된 바와 같이 참조 맵(460) 및/또는 중간 변환층을 사용하여 복제될 수 있다.
msync 호출에 응하여, 파일 시스템(906)은 (저장층(130)의 사용에 의해) 다른 영역 복제 작동을 수행할 수 있다. 상태(913C)에 도시된 바와 같이, msync 작동과 연관되는 영역 복제 작동은 하나 이상의 불결한 페이지(저장 어드레스들(P5 및 P6))의 콘텐츠를 갖는 파일(1)을 업데이트하고 업데이트된 파일(1)을 파일(1.2)로서 복제하는 것을 포함할 수 있다. 파일(1.1)은 msync 작동 전의 파일의 상태를 반영할 수 있다. 따라서, 고장일 경우에, 파일 시스템(906)은 파일(1)의 이전 상태를 재구성하는 것이 가능할 수 있다.
앞서 개시된 바와 같이, 저장층(130)은 영역 복제 및 영역 병합 작동들을 구현하도록 구성될 수 있으며, 영역 복제 및 영역 병합 작동들은 파일 일관성(예를 들어, 본원에 더 상세히 개시된 바와 같이 폐쇄 대 개방 파일 일관성)과 같은 더 높은 레벨 작동들, 극소 작동들 등을 구현하도록 레버리징될 수 있다. 이러한 작동들은: a) 논리 어드레스 공간(132)의 특정 영역을 복제하는 것, b) 복제된 영역 내에서 저장 작동들을 수행하는 것, 그리고 c) 복제된 영역을 논리 어드레스 공간(132)의 다른 부분으로 선택적으로 병합하고/하거나 폴딩하는 것을 포함할 수 있다. 본원에 사용되는, 논리 어드레스 공간(132)의 영역들을 병합하고/하거나 폴딩하는 것은 무엇보다도, 영역들 중 하나로 구현되는 변경들을 하나 이상의 다른 영역으로 포함시킴으로써 2개 이상의 LID 영역을 결합하는 것을 지칭한다. 병합 작동은 병합 정책에 따라 구현될 수 있으며, 병합 정책은 상이한 LID 영역들 사이의 충돌들을 해결하도록 구성될 수 있다. 병합 정책은 하나의 LID 영역 중 하나의 콘텐츠가 다른 LID 영역의 콘텐츠를 "오버라이트하는" "오버라이트" 모드; LID 영역들의 콘텐츠가 (예를 들어, 논리 OR 작동으로) 함께 결합되는 "OR" 모드; 충돌들이 하나 이상의 LID 영역의 별도의 독립된 카피들을 생성함으로써 해결되는 충돌 시 카피 모드 등을 포함할 수 있지만, 이에 제한되지 않는다. 오버라이트 모드에서, 하나 이상의 다른 LID 영역의 콘텐츠를 오버라이트하는 LID 영역은 (예를 들어, 보다 최근의 작동들이 더 이전 작동들을 오버라이트하는) 커밋(commit) 시간, 우선 순위 등을 포함하지만, 이에 제한되지 않는 임의의 적절한 기준에 기반하여 결정될 수 있다.
도 9c는 저장층(130)의 사용에 의해 구현되는 영역 병합 작동들의 실시예들을 도시한다. 도 9c 실시예에서, 저장층(130)은 식별자 영역(914)을 복제하도록 구성될 수 있으며, 식별자 영역(914)은 순방향 맵(160) 내의 하나 이상의 엔트리에 의해 나타내어질 수 있다. 영역(914) 내의 LID들(072 내지 083)은 저장 어드레스들(95 내지 106)에 결합될 수 있다. 본원에 개시되는 영역 복제 및/또는 병합 작동들은 도 3a 내지 도 3e의 영역 복제 및/또는 이동 실시예들, 도 4a 내지 도 4e의 참조 엔트리 실시예들, 그리고/또는 도 5a 및 도 5b의 중간 매핑층 실시예들 중 임의의 것을 사용하여 구현될 수 있다. 따라서 일부 실시예들에서, LID들(072 내지 083)은 하나 이상의 참조 엔트리 및/또는 중간 매핑층을 통해 저장 어드레스들(95 내지 106)에 결합될 수 있다.
저장층(130)은 영역(914)을 복제하도록 구성될 수 있으며, 이는 상태(941A)에서 도시된 바와 같이 LID들(924)의 새로운 영역을 저장 어드레스들(95 내지 106)에 결합시키는 것을 포함할 수 있다. 영역들(914 및/또는 924)은 영역들(914 및 924)이 관련된다는(예를 들어, 동일한 세트의 저장 어드레스들에 결합된다는) 것을 나타내도록 구성되는 각각의 메타데이터(984 및/또는 994)를 포함할 수 있다. 메타데이터(984 및/또는 994)는 LID 영역들 중 하나와 관련되는 변경들이 다른 영역에서의 LID들과 서로 연관될 수 있도록(예를 들어, LID(972)와 연관시켜 기록되는 데이터가 상응하는 LID(072)와 연관될 수 있는 등 이도록) LID들(072 내지 083)을 LID들(972 내지 983)에 링크하도록 구성될 수 있다. 메타데이터(984 및/또는 994)는 앞서 개시된 바와 같이, 복제품들 사이의 할당 작동들이 동기화될 것인지 여부를 나타낼 수 있는 복제된 LID 영역들에 대한 동기화 정책을 나타낼 수 있다. 메타데이터(984 및/또는 994)는 병합 충돌들이 어떻게 관리될 것인지를 구체화할 수 있는 병합 정책을 더 포함하고/하거나 참조할 수 있다. 병합 정책은 저장층(130)의 인터페이스(131)를 통해 구체화될 수 있고/있거나, 범용 및/또는 디폴트 병합 정책에 기반하여 결정될 수 있고/있거나, 요청 파라미터들(예를 들어, fadvise, ioctrl 등)을 통해 구체화될 수 있는 등이다. 복제 작동은 앞서 개시된 바와 같이 저장 어드레스들(95 내지 106)에서의 데이터를 LID 영역(972 내지 983)과 연관시키도록 구성되는 저장 매체(140)에 영속적 노트(366)를 첨부하는 것 (그리고/또는 데이터를 업데이트된 문맥 형식으로 재기록하는 것)을 더 포함할 수 있다.
저장층(130)은 하나 이상의 저장 클라이언트(106)로부터의 저장 요청들에 응하여 영역들(914 및/또는 924) 중 하나 이상 내에서 저장 작동들을 수행할 수 있다. 상태(941B)에 도시된 바와 같이, 저장 작동은 LID들(972 및 973)과 연관되는 데이터를 변경할 수 있으며, 이는 식별자들(972 및 973)을 새로운 세트의 저장 어드레스들(721 및 722)과 연관시키는 것을 포함할 수 있다. 상태(941B)의 저장 작동(들) 이후에, 저장층(130)은 LID 영역(972 내지 983)을 영역(072 내지 083)과 병합시키는 영역 병합 작동을 수행할 수 있다. 영역 병합 작동은 병합 정책에 따라 LID 영역(924)을 참조하여 행해지는 변경들을 LID 영역(914)으로 포함시키는 것을 포함할 수 있다. 병합 정책은 복제된 영역(924)에서 행해지는 변경들이 소스 영역(914) 내에 데이터를 오버라이트하는 것을 구체화할 수 있다. 따라서, 상태(941C)로 도시되는 병합 작동의 결과는 소스 영역(914)의 LID들(072 및 073)을 저장 어드레스들(721 및 722)에서의 변경된 데이터로 결합하는 것을 포함할 수 있다. 영역 병합 작동은 본원에 개시되는 바와 같이 복제된 LID 영역(972 내지 983)을 할당 해제하는 것, 저장 어드레스들(756 및 757)에서의 데이터를 LID들(072 및 073)과 연관시키도록 구성되는 영속적 노트(366)를 저장하는 것, 그리고/또는 업데이트된 문맥 형식으로 저장 어드레스들(721 및 722)에서의 데이터를 재기록하는 것을 더 포함할 수 있다. 저장 어드레스들(721 및 722)에서의 새로운 데이터에 의해 배제되었던 저장 어드레스들(95 및 96)에 저장된 데이터는 앞서 개시된 바와 같이 무효화될 수 있다.
영역들(914 및/또는 924) 내에서 수행되는 저장 작동들은 충돌을 야기할 수 있다. 일부 실시예들에서, LID 영역들과 연관되는 병합 정책은 충돌을 피할 수 있다. 본원에 더 상세히 개시된 바와 같이, 극소 저장 작동에서, 저장층(130)은 극소 저장 작동들이 하나 이상의 상응하는 영역에서 완료되는 동안, 하나 이상의 LID 영역을 잠글 수 있다. 그러나 다른 구현들에서, 저장층(130)은 저장 작동들이 복제된 영역들 내에서 동시에 수행되는 것을 가능하게 할 수 있다. 상태(941D)에서, 저장층(130)은 영역(924)에서의 LID들(972 및 973, 및 982 및 983)과 연관되는 데이터를 오버라이트하고/하거나 변경하도록 구성되는 저장 작동(들)을 구현할 수 있다. 저장층(130)은 영역(914)의 LID들(072 및 073)과 연관되는 데이터를 오버라이트하고/하거나 변경하도록 구성되는 다른 저장 작동(들)을 구현할 수 있다. LID들(072 및 073, 및 972 및 973)과 관련되는 저장 작동(들)은 영역들(914 및 924) 사이에 병합 충돌을 생성할 수 있다. 병합 충돌은 앞서 개시된 바와 같이 병합 정책에 따라 해결될 수 있다. 일부 실시예들에서, 병합 정책은 무엇보다도, 저장 로그에서 저장 작동들의 상대적 순서에 기반하여 가장 최근의 변경을 적용하는 것을 포함할 수 있다. 다른 구현들에서, 병합 정책은 각각의 저장 작동을 요청했던 저장 클라이언트들(106)(프로세스들, 어플리케이션들 등)의 상대적 우선 순위에 기반하여 충돌을 해결할 수 있다. 다른 구현에서, 병합 정책은 상이한, 충돌하는 버전들을 나타내는 영역들(914 및/또는 924)의 2개의(2개 이상의) 버전을 생성함으로써 충돌을 해결할 수 있다.
상태(941E)는 LID들(972 및 973)과 연관되는 충돌하는 변경들 대신에 LID들(072 및 073)과 연관되는 작동(들)을 포함하도록 구성되는 병합 작동의 결과의 일 실시예를 도시한다. 그러므로 상태(941E)에서, LID들(072 및 073)은 LID들(972 및 973)을 참조하여 수행되는 저장 작동(들)에 상응하는 저장 어드레스들(721 및 722)보다 오히려 LID들(072 및 073)을 참조하여 수행되는 저장 작동(들)에 상응하는 저장 어드레스들(756 및 757)에 결합된다.
상태(941F)는 LID들(072 및 073)을 참조하여 행해지는 충돌하는 변경들 대신에 영역(972 및 973)의 변경들을 포함하도록 구성되는 병합 작동의 결과의 일 실시예를 도시한다. 따라서 상태(941F)에서, 식별자들(072 및 073)은 LID들(072 및 073)과 연관되는 저장 어드레스들(756 및 757)보다 오히려 LID들(972 및 973)을 참조하여 수행되는 저장 작동(들)에 상응하는 저장 어드레스들(721 및 722)에 결합된다.
상태(941G)는 별도의 영역 카피들 또는 버전들을 생성함으로써 병합 충돌들을 관리하도록 구성되는 병합 작동의 결과의 일 실시예를 도시한다. 영역(914)은 식별자들(982 및 983)을 참조하여 행해지는 충돌하지 않는 변경들을 포함할 수 있고 (저장 어드레스들(721 및 722)을 포함하는 것보다 오히려) 식별자들(072 및 073)과 관련되는 충돌하는 저장 작동들의 결과를 보유할 수 있다. 다른 LID 영역(924)은 식별자들(072 및 073)을 참조하여 행해지는 충돌하는 저장 작동(들)의 결과들을 포함하지 않고 상태(941D)의 변경들을 보유할 수 있다. 상태(941G)가 본래의 복제된 LID 영역들(072 내지 083(914) 및 974 내지 981(924))을 사용하여 카피들을 도시하지만, 본 발명은 이러한 점에 제한되지 않고 논리 어드레스 공간(132)의 임의의 영역 내에 영역 카피들 및/또는 버전들을 생성하도록 구성될 수 있다. 상태들(941E 내지 941G)을 참조하여 개시되는 영역 병합 작동들은 본원에 개시되는 바와 같이 저장 어드레스들(721 및 722, 756 및 757, 및/또는 767 및 768)에 저장되는 데이터를 상응하는 LID들과 연관시키기 위해 하나 이상의 영속적 노트(366)를 저장 매체(140)에 첨부하는 것 그리고/또는 하나 이상의 배후 저장 작동으로 데이터를 재기록하는 것을 더 포함할 수 있다.
일부 실시예들에서, 복제된 LID 영역들(914 및/또는 924) 중 하나 이상 내의 작동들은 무엇보다도, 영역들(914 및/또는 924)을 확장시키거나, 영역들(914 및/또는 924)을 수축시키거나 등에 의해 LID 영역들(914 및/또는 924)을 변경하는 것을 포함할 수 있다. 영역들(914 및/또는 924) 중 하나를 확장시키는 것은 다른 영역에 상응하는 확장자를 포함할 수 있고, 이에 따라, 할당 작동들이 영역들(914 및 924) 둘 다에 부가 LID(들)을 할당하는 것에 근거를 둘 수 있다.
본원에 개시되는 영역 병합 작동들은 도 3a 내지 도 3e의 영역 복제 및/또는 이동 실시예들, 도 4a 내지 도 4e의 참조 엔트리 실시예들, 그리고/또는 도 5a 및 도 5b의 중간 매핑 실시예들 중 임의의 것을 사용하여 구현될 수 있다. 도 9d는 참조 맵(460)을 사용하는 영역 병합 작동의 일 실시예를 도시한다. 상태(943A)에 도시된 바와 같이, 영역(914)을 복제하는 것은 논리 어드레스 공간(132)에서 LID 영역(924)을 할당하는 것, (무엇보다도, 메타데이터(984 및/또는 994)를 사용하여) 영역들(914 및 924)을 링크하는 것, 그리고 영역들(914 및 924)을 참조 맵(460)에서의 참조 식별자들(934)과 연관시키는 것을 포함할 수 있다. 영역 복제 작동은 앞서 개시된 바와 같이 참조 맵(460)에서의 영역(934)을 간접적 영역들(914 및/또는 924)과 연관시키도록 구성되는 영속적 노트(366)를 저장 매체(140) 상에 저장하는 것을 더 포함할 수 있다. 참조 맵(460) 내의 영역(934)은 저장 어드레스들(95 내지 106)에 결합될 수 있다. 따라서, 영역들(914 및 924) 둘 다는 동일한 저장 어드레스의 동일한 데이터를 간접적으로 참조할 수 있다.
LID들(982 및 983)에 상응하는 데이터를 변경하도록 구성되는 영역(924) 내의 저장 작동은 상태(943B)에 도시된 바와 같이 영역(924) 내에 새로운 LID들을 할당하는 것 그리고 새로운 국부 엔트리(982 및 983)를 상응하는 저장 어드레스들(767 및 768)에 결합시키는 것을 포함할 수 있다. 영역들(914 및 924)을 병합하는 것은 앞서 개시된 바와 같이 병합 정책에 따라 저장 어드레스들(767 및 768)의 변경된 데이터를 영역(914)으로 포함시키는 것을 포함할 수 있다. 도 9d 실시예에서, 상태(943C)의 영역 병합 작동은 저장 어드레스들(767 및 768)에서의 업데이트된 데이터를 참조하기 위해 참조 엔트리(934)를 제거하는 것 그리고 영역(914)의 LID들(081 내지 083)을 업데이트하는 것을 포함할 수 있다. 병합 작동은 앞서 개시된 바와 같이 영속적 노트(366)를 저장하는 것 그리고/또는 업데이트된 문맥 형식으로 저장 어드레스들(767 및 768)에 데이터를 재기록하는 것을 더 포함할 수 있다.
도 9e는 저장층(130)에 의해 구현되는 영역 복제 및 영역 병합 작동들의 추가 실시예들을 도시한다. 도 9e는 도 5a 및 도 5b와 함께 개시된 바와 같이 중개 어드레스 공간을 포함하는 실시예들에서의 영역 복제 및 영역 병합 작동들을 도시한다. 상태(947A)에서, VID들(072 내지 083)을 포함하는 VID 영역(914)은 VAS 순방향 맵(560)에서의 중개 식별자들(272Z 내지 283Z)을 통해 저장 어드레스들(95 내지 106)에 간접적으로 결합된다. 중개 식별자들은 별도의, 중간 어드레스 공간(2136)(예를 들어, 저장층(130)의 논리 어드레스 공간(132))의 일부일 수 있다.
상태(947B)에 도시된 바와 같이, VID 영역(914)을 복제하는 것은 VID들(972 내지 983)을 포함하는 새로운 VID 영역(924)을 할당하는 것 그리고 영역(924)을 VAS 순방향 맵(560)에서의 중개 식별자들(272Z 내지 283Z)과 연관시키는 것을 포함할 수 있다. 복제 작동은 VID 영역(924)을 중개 어드레스들(272Z 내지 283Z)과 연관시키도록 구성되는 영속적 노트(366)를 저장 매체(140) 상에 저장하는 것을 더 포함할 수 있다. 저장 작동들은 본원에 개시되는 바와 같이 VID 영역들(914 및/또는 924)을 참조하여 수행될 수 있다. VID 영역들(914 및/또는 924)에 대한 변경들은 각각의 VID 영역(914 및/또는 924)과 중간 어드레스 공간(2136) 사이의 업데이트된 매핑들에서 반영될 수 있다. 상태(947C)에서, VID들(982 및 983)의 데이터를 변경하는 저장 작동은 VID들(982 및 983) 및 중간 식별자들(984Z 및 985Z)과 저장 어드레스들(456 및 457) 사이의 업데이트된 매핑들에서 반영된다. VID 영역들(914 및 924)을 병합하는 것은 상태(947D)에 도시된 바와 같이 영역(914)의 VID 매핑들을 업데이트하여 (중개 어드레스들(984Z 및 985Z)을 통해) 업데이트된 데이터를 참조하는 것을 포함할 수 있다. 병합 작동은 앞서 개시된 바와 같이 (존재한다면) 병합 충돌을 해결하는 것을 더 포함할 수 있다. 병합 작동은 VID들(082 및 083)을 중간 어드레스들(984Z 및 985Z)과 연관시키기 위해 하나 이상의 영속적 노트(366)를 저장 매체(140)에 첨부하는 것을 더 포함할 수 있다.
일부 실시예들에서, 저장층(130)은 파일 시스템, 데이터베이스 등과 같은 저장 클라이언트들(106)에 파일 일관성 기능성을 제공하기 위해 본원에 개시되는 영역 복제, 이동 및/또는 병합 작동들을 레버리징할 수 있다. 도 9f를 참조하면, 파일 시스템(906)은 네트워크 파일 시스템(NFS) 버전 3 프로토콜 및/또는 다른 파일 시스템 구현들 및/또는 프로토콜들마다 폐쇄 대 개방 파일 일관성 모델을 구현하도록 저장층(130)을 레버리징할 수 있다. 폐쇄 대 개방 파일 일관성 모델은 다수의 프로세스 및/또는 어플리케이션(파일 시스템 클라이언트)이 동일한 파일 상에서 동시에 작동하는 것을 가능하게 하도록 구성될 수 있다. 파일 변경들은 파일이 폐쇄될 때에 행해지며; 파일 상에서 병렬로 작동하는 다른 클라이언트들은 파일이 개방되는 다음 번까지 변경들을 찾지 못한다. 따라서, 파일의 상태는 파일이 개방될 때에 설정되고 다른 클라이언트들에 의해 병렬로 구현되는 변경들은 파일이 재개방될 때까지, 적용되지 않는다.
일부 실시예들에서, 파일 시스템(906)은 변경들이 작업하는, 복제된 영역 내에서 행해지는 동안, 파일의 "본래의" 데이터(예를 들어, 파일의 일관된 버전)을 보존하기 위해 저장층(130)을 레버리징할 수 있다. 본원에 사용되는, 파일의 "본래의" 데이터 및/또는 파일의 일관된 버전을 보존하는 것은 파일이 개방되었던 시간에 상응하는 상태로 파일 데이터를 유지하고/하거나 파일 데이터의 본래의, 변경되지 않은 상태로의 파일 데이터의 상태가 재구성될 수 있는 파일 변경들의 로그를 유지하는 것을 지칭한다.
도 9f는 폐쇄 대 개방 파일 일관성 모델을 구현하도록 구성되는 저장층(130)을 포함하는 시스템(900F)의 일 실시예를 도시한다. 파일 시스템(906) (및/또는 다른 저장 클라이언트(들)(106))은 폐쇄 대 개방 파일 일관성을 효율적으로 구현하도록 저장층(130)을 레버리징할 수 있다. 저장층(130)은: a) 파일 시스템 클라이언트들(926A 내지 926N)의 파일 개방 요청들에 응하여 파일들을 복제하여, 파일의 "주요" 또는 "일관된" 버전 및 파일의 "작업" 버전을 야기하고; b) 파일의 작업 버전을 참조하여 저장 작동들을 수행하고; c) 파일 폐쇄에 응하여 파일의 작업 버전을 파일의 주버전으로 병합하도록 구성될 수 있다. 저장층(130)은 (예를 들어, 도 3a 내지 도 3e, 도 4a 내지 도 4e, 도 5a 및 도 5b 등의 영역 복제 실시예들을 사용하여) 본원에 개시되는 바와 같이 하나 이상의 영역 복제 작동으로 파일 데이터를 복제하도록 구성될 수 있다. 저장층(130)은 본원에 개시되는 바와 같이 하나 이상의 영역 병합 및/또는 폴드 작동을 사용하여 파일의 작업 버전 및 파일의 주요 또는 일관된 버전을 병합하도록 추가로 구성될 수 있다. 파일의 작업 버전은 파일이 특정 저장 클라이언트(926A 내지 926N)에 의해 개방되었던 때에 파일의 상태를 나타낼 수 있다. 저장 클라이언트(926A 내지 926N)는 파일의 작업 버전에의 배타적 액세스를 가질 수 있고, 이에 따라, 파일의 작업 버전은 다른 클라이언트들(926A 내지 926N)에 의해 행해지는 파일 변경들로부터 격리될 수 있다. 저장층(130)은 파일의 "주요" 또는 "일관된" 논리 인터페이스를 참조하여 본래의, 변경되지 않은 파일 데이터를 유지하도록 구성될 수 있으며, 이는 저장 작동들이 파일의 작업 논리 인터페이스를 참조하여 수행되는 동안, 파일 데이터와 일관된 논리 인터페이스 사이의 연관들을 유지하는 것을 포함할 수 있다. 상이한 저장 클라이언트들(926A 내지 926N)에 의해 행해지는 파일 변경들 사이의 충돌들은 마지막 기록(예를 들어, 마지막 기록이 제 시간에 이전 기록들을 오버라이트함); 충돌 시 카피(예를 들어, 파일의 별도의 버전들을 생성함); 클라이언트(926A 내지 926N), 어플리케이션, 프로세스 등에 기반한 우선 순위 등과 같은 충돌 해결 정책 또는 병합 정책에 따라 해결될 수 있다.
도 9f 실시예에서, 상태(953A)에서, 변환 모듈(134)은 파일의 LID들(파일 LID들(950A))과 저장 어드레스들(P0 내지 P3)에서의 저장 매체(140) 상의 파일(952A)의 데이터 사이에 매핑들(951A)을 포함한다. 매핑들(951A)은 도 5a 및 도 5b와 함께 개시된 바와 같이 본원에 개시되는 순방향 맵(160) 및/또는 하나 이상의 중간 매핑층을 사용하여 구현될 수 있다.
상태(953B)에서, 저장층(130)은 저장 클라이언트(저장 클라이언트(926B))의 파일 개방 요청에 응하여 파일을 복제하도록 구성될 수 있다. 요청은 명시적 요청, 요청 파라미터(예를 들어, fadvise, ioctrl 등) 등으로서 인터페이스(131)를 통해 수신될 수 있다. 복제 작동은 하나 이상의 영역 복제 작동을 포함할 수 있으며, 하나 이상의 영역 복제 작동은 본원에 개시되는 바와 같이, 작업 버전 파일에 상응하는 새로운 세트의 "복제된" 파일 LID들(950B)을 할당하는 것 그리고 복제된 식별자들(950B)의 세트를 파일의 주버전의 LID들(950A)(본래의, 또는 일관된 세트의 논리 식별자들(950A))과 동일한 파일 데이터(952A)와 연관시키는 것을 포함할 수 있다. 영역 복제 작동은 앞서 개시된 바와 같이 주파일 LID들(950A) 및 파일 LID들의 작업 버전(950B) 둘 다와 파일 데이터(952A)를 연관시키기 위해 영속적 노트(366)를 저장 매체(140) 상에 저장하는 것을 더 포함할 수 있다.
일부 실시예들에서, 저장층(130) 및/또는 파일 시스템(906)은 저장 클라이언트(926B)에 의해 수행되는 파일 작동들을 파일의 작업 버전(LID들의 작업 세트(950B))으로 지향시키도록 구성될 수 있다. 따라서, 저장 클라이언트(926B)에 의해 행해지는 변경들은 복제된 파일 LID들(950B)을 참조하여 행해질 수 있다. 그러한 변경들은 본래의, 파일 LID들의 주버전(950A)의 상태에 영향을 주지 않을 수 있다. 그러므로, 저장 클라이언트(926B)는 파일의 본래의, 주버전의 LID들(950A)을 변경하지 않고 LID들(950B)을 참조하여 파일의 작업 버전을 변경할 수 있다.
상태(953C)에서, 저장 클라이언트(926B)는 저장 어드레스(P3)에 저장되는 파일의 데이터를 변경하기 위해 (저장층(130)을 통해) 저장 작동을 수행하였고; 변경된 데이터는 저장 어드레스(P64)에서의 저장 로그에 첨부될 수 있다. 이에 대응하여, 변환 모듈(134)은 파일의 복제된, 작업 버전(950B)의 LID들을 저장 어드레스(P64)에서의 변경된 파일 데이터(952B)로 결합시키도록 매핑들(951B)을 업데이트할 수 있다. 저장 클라이언트(926B)에 의해 변경되지 않은 다른 LID(들)은 본래의, 변경되지 않은 파일 데이터(952A)에 계속해서 결합될 수 있다. 저장층(130)은 파일의 주버전의 식별자들(950A)과 저장 어드레스들(P0 내지 P3)에서의 변경되지 않은 파일 데이터(952A) 사이에 본래의 매핑들(951A)을 보존하도록 구성된다.
다른 저장 클라이언트(926N)는 저장 클라이언트(926B)가 파일을 폐쇄하기 전에, 파일을 개방하라는 요청을 발행할 수 있다. 이에 대응하여, 그리고 상태(953D)에 도시된 바와 같이, 저장층(130)은 주파일의 다른 복제품을 생성할(주파일 식별자들(950A)을 복제할) 수 있다. 복제된 LID들(FID들(950C))은 복제된 식별자 영역(950B)을 참조하여 저장 클라이언트(926B)에 의해 행해지는 변경이 없는 본래의 파일 상태에 상응할 수 있다. 따라서, 복제된 LID들(950C)은 저장 어드레스들(P0 내지 P3)에서의 본래의, 변경되지 않은 파일 데이터(952A)로 매핑될 수 있다(951C). 저장 클라이언트(926N)는 저장 클라이언트(926B)와 병렬로 새로운 복제된 파일 식별자 영역(950C)을 참조하여 저장 작동들을 수행할 수 있다. 클라이언트들(926B 및 926N)에 의해 행해지는 변경들은 클라이언트들(926B 및 926N)의 각각의 LID 영역(950B 및 950C) 내에서 고립될 수 있고, 이에 따라, 파일의 주버전(LID들(950A) 및/또는 서로)에 적용되지 않을 수 있다.
상태(953E)는 저장 클라이언트(926B)가 파일을 폐쇄하는 것의 결과를 도시한다. 저장 클라이언트(926B)의 파일을 폐쇄하라는 요청에 응하여, 저장층(130)은 하나 이상의 영역 병합 작동으로 상응하는 영역의 콘텐츠(FID들(950B))를 파일의 주버전(LID들(950A))으로 병합하도록 구성될 수 있다. 그러나, 변경들은 저장 클라이언트(926N)(FID들(950C))에 의해 사용되는 파일의 버전으로 병합되지 않을 수 있으며; 저장 클라이언트(926N)는 클라이언트(926N)가 파일을 재개방할 때까지, 변경들에 접근 가능하지 않을 수 있다. 변경들을 포함시키는 것은 본원에 개시되는 바와 같이 하나 이상의 영역 병합 작동을 포함할 수 있다. 영역 병합 작동들은 복제된 LID 영역(950B)을 참조하여 행해지는 변경들을 파일의 주버전의 LID 영역(950A)으로 병합하도록 구성될 수 있다. 도 9f 실시예에서, 영역 병합 작동은 저장 어드레스(P64)에서의 변경된 파일 데이터(952B)를 참조하기 위해 주파일 LID들(950A)의 매핑들(951A)을 업데이트하는 것을 포함한다. 클라이언트(924B)에 의해 변경되지 않았던 데이터는 P0 내지 P3에서의 본래의, 변경되지 않은 파일 데이터(952A)에 결합된 상태로 남을 수 있다.
본원에 개시되는 바와 같이 일부 실시예들에서, 변경된 파일 데이터(952B)는 (파일의 주버전과 연관되는 LID들(950A)과는 대조적으로) LID들(950B) 중 하나 이상과 저장 어드레스(P64)에서의 변경된 파일 데이터(952B)를 연관시키도록 구성되는 영속적 메타데이터를 포함할 수 있다. 그러므로, 영역 병합 작동은 LID들(950A)의 영역 중 하나 이상을 저장 어드레스(P64)에서의 변경된 파일 데이터(952B)와 연관시키도록 구성되는 영속적 노트(366)를 저장 매체(140)에 첨부하는 것을 더 포함할 수 있다. 저장 어드레스(P64)에서의 데이터는 하나 이상의 배후 작동으로 업데이트된 영속적 메타데이터와 함께 재기록될 수 있다. 파일 폐쇄 작동 (및 상응하는 영역 병합 작동들) 이후에, 변환 모듈(134)은 영역(950B)의 LID들을 할당 해제하도록 구성될 수 있다.
클라이언트(926N)는 복제된 파일 식별자들(950C)을 참조하여 파일을 변경할 수 있다. 도 9g의 상태(953F)에 도시된 바와 같이, 저장 클라이언트(926N)는 클라이언트(926B)에 의해 구현되는 변경들과 충돌하는 하나 이상의 작동을 수행할 수 있다. 변경들은 클라이언트(950B)가 파일을 폐쇄하기 전에(클라이언트(926B)의 변경들이 상태(953E)에서와 같이 파일의 주버전의 LID들(950A)에 적용되기 전에), 일어날 수 있다. 이에 따라, LID들(950A)은 본래의, 변경되지 않은 파일 데이터(952A)로 매핑되고(951A), 저장 클라이언트(926B)에 할당되는 영역(950B)의 식별자들 중 하나 이상은 변경된 파일 데이터(952B)로 매핑되고, 저장 클라이언트(926N)에 할당되는 영역(950C)의 식별자들 중 하나 이상은 충돌하는 파일 데이터(952C)로 매핑된다. 변경되지 않은 데이터에 상응하는 LID들(950B 및 950C)은 본래의, 변경되지 않은 파일 데이터(952A)를 계속해서 참조할 수 있다.
클라이언트들(926B 및 926C)는 클라이언트들(926B 및 926C)의 각각의 파일을 결국 폐쇄할 수 있으며, 이는 각각의 LID 영역(950B 및 950C)을 참조하여 행해지는 변경들을 파일의 주버전의 영역(950A)으로 병합하는 것을 포함할 수 있다. 저장층(130)은 병합 정책(944)에 따라 영역들(950B 및 950C) 사이의 충돌들을 해결하도록 구성될 수 있다. 일부 실시예들에서, 병합 정책(944)은 저장 클라이언트들(926B 및 926C)이 파일들을 폐쇄했던 순서에 기반할 수 있으며; 폐쇄된 마지막 파일의 변경들은 이전에 적용된 변경들을 오버라이트할 수 있다(예를 들어, 변경들은 일련화될 수 있다). 상태(953G)에 도시된 바와 같이, 저장 클라이언트(950B)는 저장 클라이언트(950C)보다 먼저 파일 폐쇄 요청을 발행할 수 있다. 클라이언트(950B)가 파일을 폐쇄한 후에, 저장층(130)은 (도 9f의 상태(953E)에서 도시된 바와 같이) 영역(950B)을 참조하여 행해지는 변경들을 파일의 주버전의 영역(950A)으로 병합할 수 있다. 클라이언트(926C)에 의한 파일의 폐쇄는 도 9g의 상태(953G)에 도시된 바와 같이 저장 클라이언트(950B)에 의해 행해지는 변경들(변경된 데이터(952B)) 중 일부를 데이터(952C)로 오버라이트하는 것을 야기할 수 있다. P3 및 P64에서의 데이터는 주파일 또는 파일의 현재의, 작업 버전에 의해 더 이상 참조되지 않으므로, 저장 매체(140)로부터 제거되도록 표시될 수 있다. 앞서 개시된 바와 같이, 저장층(130)은 우선 순위 기반 병합 정책(944)과 같은 다른 병합 정책들을 구현하도록 구성될 수 있다. 우선 순위 기반 병합 정책은 저장 클라이언트들(926B 및/또는 926C)의 상대적 우선 순위들에 기반하여 충돌을 해결할 수 있다. 상태(953H)에서, 저장 클라이언트(926C)는 저장 클라이언트(926B)의 뒤에 파일을 폐쇄할 수 있지만; 저장 클라이언트(926B)의 변경들은 저장 클라이언트(926B)의 변경들이 저장 클라이언트(926C)의 충돌하는 변경들보다 더 높은 우선 순위를 갖는 것을 나타내는 병합 정책(944)으로 인해 유지될 수 있다. 따라서, 파일의 주버전의 LID들(950A)은 저장 클라이언트(926B)의 변경된 파일 데이터(952B)를 계속해서 참조할 수 있고, 저장 클라이언트(926C)의 충돌하는 파일 데이터(P96에서의 데이터(952C))는 P3에서의 쓸모 없게 된 파일 데이터(952A)와 함께 가비지(garbage) 수집되도록 표시될 수 있다. 다른 실시예들에서, 병합 정책(944)은 파일의 2개의 주버전을 생성하는 것을 야기하는 충돌 시 카피 정책을 포함할 수 있다. 그러한 실시예들에서, 그리고 상태(953I)에 도시된 바와 같이, 저장층(130)은 (주파일 LID들(950A)을 사용하여) 저장 클라이언트(926B)의 변경들을 주파일로 포함시키도록 구성될 수 있고, 저장 클라이언트(926C)의 충돌하는 변경들을 파일의 새로운 버전(파일 식별자들(950D))으로 포함시킬 수 있다.
병합 정책(944)의 특정 실시예들을 본원에 설명하지만, 본 발명은 이러한 점에 제한되지 않고 임의의 적절한 병합 정책(944)을 구현하고/하거나 포함할 수 있다. 병합 정책(944)은 저장층(130) 및/또는 파일 시스템(906) 내에서 구현될 수 있다. 일부 실시예들에서, 저장층(130) 및/또는 파일 시스템(906)의 병합 정책(944)은 저장층(130)의 인터페이스(131)를 통해 구성될 수 있다. 병합 정책(944)은 저장층(130)을 통해 수행되는 모든 파일 작동들에 적용될 수 있다. 대안적으로, 또는 부가적으로, 병합 정책(944)은 앞서 개시된 바와 같이 무엇보다도, 파일 시스템 API 호출, fadvise, ioctrl 등을 통해 파일에 대한 및/또는 충돌에 대한 기반 상에 설정될 수 있다.
저장층(130)은 효율적인 극소 저장 작동들을 구현하도록 추가로 구성될 수 있다. 도 10a는 극소 저장 작동들을 구현하도록 구성되는 저장층(130)을 포함하는 시스템(1000A)의 일 실시예의 블록도이다. 본원에 사용되는, 극소 저장 작동은 완전히 전체로서 완료되거나 롤 백(roll back)되는 저장 작동을 지칭한다. 따라서, 극소 저장 작동들은 부분적으로 완료되지 않을 수 있으며; 저장층(130)은 불완전한 극소 저장 작동들의 데이터를 무효화하고/하거나 제거하도록 구성될 수 있다. 극소 저장 작동들, 그리고 특히 다수의 단계를 포함하고/하거나 다수의 상이한 식별자 영역 또는 I/O 벡터와 관련되는 극소 저장 작동들을 구현하는 것은 높은 오버헤드 비용을 부과할 수 있다. 예를 들어, 일부 데이터베이스 시스템은 다수의 세트의 과다한 기록 작동들을 이용하여 극소 저장 작동들을 구현한다.
저장층(130)은 저장 트랜잭션들을 구현하도록 구성되는 트랜잭션 모듈(1036)을 포함할 수 있다. 트랜잭션 모듈(1036)은 극소 저장 작동들의 효율을 증가시키기 위해 영역 복제, 영역 이동 및/또는 본원에 개시되는 다른 작동들을 레버리징하는 극소 저장 모듈(1035)을 포함할 수 있다. 일부 실시예들에서, 인터페이스(131)는 벡터화된 극소 저장 작동들을 수행하기 위해 API들 및/또는 인터페이스들을 제공한다. 벡터는 이하와 같은 데이터 구조체로서 정의될 수 있다:
struct iovect {
uint64 iov_base; // 입력 또는 출력에 대한 메모리 영역의 베이스 어드레스
uint32 iov_len; // iov_base에 의해 참조되는 메모리의 크기
uint64 dest_lid; // 목적지 논리 식별자
}
iov_base 파라미터는 벡터의 데이터를 포함하는 메모리 또는 버퍼 위치를 참조할 수 있고, iov_len은 데이터 버퍼의 길이 또는 크기를 지칭할 수 있고, dest_lid는 벡터에 대한 목적지 논리 식별자(들)(예를 들어, 입력 버퍼 iov_len로부터 나타내어지고/지거나 유도되는 영역의 길이를 갖는 베이스 논리 식별자)을 지칭할 수 있다.
그러므로, 데이터를 하나 이상의 벡터에 기록하라는 벡터 저장 요청은 이하와 같이 정의될 수 있다:
vector_write (
int fileids,
const struct iovect *iov,
uint32 iov_cnt,
uint32 flag)
상기 벡터 기록 작동은 *iov 포인터에 의해 참조되고/되거나 벡터 카운트 파라미터(iov_cnt)에 의해 지정되는 벡터 데이터 구조체들 각각으로부터 데이터를 수집하고 각각의 iovect 구조체에서 지정되는 목적지 논리 식별자(들)(예를 들어, dest_lid)에 데이터를 기록하도록 구성될 수 있다. 플래그 파라미터는 벡터 기록 작동이 극소 벡터 작동으로서 구현되어야 할지 여부를 지정할 수 있다.
앞서 예시된 바와 같이, 벡터 저장 요청은 복수의 벡터 각각에 동일한 작동을 수행하는 것(예를 들어, 하나 이상의 상이한 벡터와 관련되는 기록 작동을 무조건적으로(implicitly) 수행함)을 포함할 수 있다. 일부 실시예들에서, 벡터 저장 요청은 각각의 구성 성분 벡터에 대한 상이한 I/O 작동들을 구체화할 수 있다. 따라서, 각각의 iovect 데이터 구조체는 각각의 작동 지시기를 포함할 수 있다. 일부 실시예들에서, iovect 구조체는 이하와 같이 확장될 수 있다:
struct iovect {
uint64 iov_base; // 입력 또는 출력에 대한 메모리 영역의 베이스 어드레스
uint32 iov_len; // iov_base에 의해 참조되는 메모리의 크기
uint32 iov_flag; // 벡터 작동 플래그
uint64 dest_lid; // 목적지 논리 식별자
}
iov_flag 파라미터는 벡터 상에서 수행할 저장 작동을 지정할 수 있다. iov_flag는 기록, 판독, 극소 기록, 트림 또는 폐기 요청, 삭제 요청, 형식 요청, 패턴화된 기록 요청(예를 들어, 지정된 패턴을 기록하라는 요청), 제로 기록 요청 또는 검증 요청, 할당 요청 등을 갖는 극소 기록 작동을 포함하지만, 이에 제한되지 않는 임의의 적절한 저장 작동을 지정할 수 있다. 상술한 벡터 저장 요청 인터페이스는 벡터 구조체들을 수용하도록 확장될 수 있다:
vector_request(
int fileids,
const struct iovect *iov,
uint32 iov_cnt,
uint32 flag)
플래그 파라미터는 vector_request의 벡터 작동들이 극소적으로 수행되어야 할지 여부를 지정할 수 있다. 극소 저장 작동들의 추가 실시예들이 "벡터 입력/출력 작동들을 위한 시스템들, 방법들 및 인터페이스들(Systems, Methods, and Interfaces for Vector Input/Output Operations)"이라는 명칭으로 Ashish Batwara 외에 의해 2012년 12월 21일자로 출원된, 그리고 참조로 본원에 포함되는 미국 특허 출원 일련 번호 제 13/725,728호에 개시된다.
트랜잭션 모듈(1036)은 저장층(130) 내의 극소 저장 작동들을 구현하도록 구성되는 극소 저장 모듈(1035)을 포함할 수 있다. 극소 저장 모듈(1035)은 요청의 타겟 또는 목적지 식별자들과 상이한 세트의 식별자들을 참조하여 극소 저장 요청의 저장 작동들을 구현하도록 구성될 수 있다. 극소 저장 작동들이 완료된 후에, 극소 저장 모듈(1035)은 본원에 개시되는 바와 같이 극소 저장 요청의 각각의 타겟 또는 목적지 식별자로 데이터를 이동시키도록 구성될 수 있다.
일부 실시예들에서, 극소 저장 모듈(1035)은 제2 세트의 식별자들을 참조하여 제1 세트의 논리 식별자들로 지향되는 극소 저장 작동들을 구현한다. 제2 세트의 식별자들은 단명하거나, 일시적이거나, 작업의, 또는 프로세스 중 식별자들인 것으로 고려될 수 있다. 제2 세트의 식별자들은 저장 클라이언트들(106)에 직접 액세스 가능하지 않을 수 있다. 제2 세트의 식별자들은 논리 어드레스 공간(132), 특정 가상 어드레스 공간(예를 들어, VAS(532)), 별도의 명칭 공간 등의 특정 영역에 상응할 수 있다. 극소 저장 요청의 저장 작동들을 완료한 후에, 극소 저장 모듈(1035)은 극소 저장 요청의 데이터를 제1 세트의 식별자들과 연관시키도록 구성되는 영역 이동 작동을 구현할 수 있다. 데이터는 제2 세트의 식별자들과 분리될 수 있다. 위와 같이, 제2 세트의 식별자들은 논리 어드레스 공간(132)의 LID들 및/또는 VAS(532)의 VID들과 구별 가능할 수 있다. 고장 상태일 경우에, 재구성 모듈(1037)은 실패된 트랜잭션들(예를 들어, 불완전한 극소 저장 작동들)과 관련되는 식별자들에 결합되는 데이터를 식별할 수 있다. 식별된 데이터는 메타데이터 재구성 작동들 동안 무효화될 수 있고/있거나 상응하는 엔트리들은 저장 메타데이터(135)로부터 생략될(예를 들어, 순방향 맵(160), VAS 순방향 맵(560), 참조 맵(460) 등으로부터 생략될) 수 있다.
일부 실시예들에서, 극소 저장 모듈(1035)은 도 10a의 트랜잭션 어드레스 공간(1032)과 같은 별도의 어드레스 공간 내에서 극소 저장 작동들을 구현한다. 도 10a가 트랜잭션 어드레스 공간(1032)의 사용을 설명하지만, 본 발명은 이러한 점에 제한되지 않고, 논리 어드레스 공간(132)의 부분(예를 들어, LID들의 범위, 규모 및/또는 세트), VAS(532)의 부분, 참조 맵(460), 중간 어드레스 공간 등을 포함하지만, 이에 제한되지 않는 임의의 적절한 어드레스 영역 및/또는 명칭 공간을 사용하도록 구성될 수 있다. 트랜잭션 어드레스 공간(1032)의 식별자들(트랜잭션 식별자들)은 저장 클라이언트들(106)에 직접 액세스 가능하지 않을 수 있다.
극소 저장 모듈(1035)은 트랜잭션 어드레스 공간(1032)을 참조하여 극소 저장 작동들을 수행할 수 있고, 극소 저장 작동들이 완료된 후에, 트랜잭션 어드레스 공간(1032)에서 논리 어드레스 공간(132) (또는 특정 VAS(532)와 같은 다른 목적지 또는 타겟 명칭 공간)으로 극소 저장 작동들의 데이터를 이동시키도록 구성되는 극소 영역 이동 작동을 수행할 수 있다. 극소 영역 이동 작동은 본원에 개시되는 바와 같이 순방향 맵(160) 내의 결합들을 업데이트하는 것, 메타데이터를 저장 매체(140)에 기록하는 것(예를 들어, 영속적 노트(366)를 로그에 첨부하는 것) 등을 포함할 수 있다.
도 10a 실시예에서, 저장 클라이언트(106)는 논리 어드레스 공간(132) 내의 벡터들(1040A 및 1040B)과 관련되는 극소 저장 요청을 발행한다. 도 10a에 도시된 바와 같이, 벡터들(1040A 및 1040B)은 순방향 맵(160) 내의 기존 엔트리들에 상응할 수 있다. 극소 저장 작동이 (상태(1015A)에서) 구현되기 전에, 벡터(1040A)의 LID들(10 내지 13)은 저장 어드레스들(P1 내지 P4)에 결합될 수 있고 벡터(1040B)의 LID들(36 내지 38)은 저장 어드레스들(P6 내지 P8)에 결합될 수 있다. 다른 실시예들에서, 극소 저장 요청은 할당되지 않고/않거나 저장 어드레스들에 아직 결합되지 않은 LID들과 관련될 수 있고, 이에 따라, 순방향 맵(160) (및/또는 다른 매핑층들) 내에서 상응하는 엔트리들을 갖지 않는다.
극소 저장 요청에 응하여, 극소 저장 모듈(1035)은 무엇보다도, 재지향 모듈(1034)의 사용에 의해 트랜잭션 어드레스 공간(1032) 내에서 제2 세트의 식별자들에 액세스할 수 있다. 재지향 모듈(1034)은 트랜잭션 어드레스 공간(1032) 내에 제2 세트의 식별자들을 할당하도록 구성될 수 있다. 트랜잭션 식별자들은 극소 저장 요청의 부분들(예를 들어, 극소 저장 작동들의 트랙 프로세스 중 부분들)을 구현하는데 사용될 수 있다. 재지향 모듈(1034)은 무엇보다도, 저장 메타데이터(135), 순방향 색인(160) 및/또는 다른 색인 메타데이터 내의 엔트리들 등의 사용에 의해 제2 세트의 식별자들을 제1 세트의 LID들(예를 들어, 극소 저장 요청의 타겟 LID들)에 링크하도록 추가로 구성될 수 있다. 일부 실시예들에서, 극소 저장 모듈(1035)은 본원에 개시되는 바와 같이 제1 세트의 식별자들(벡터들(1040A 및 1040B))과 동일한 저장 어드레스들에 제2 세트의 식별자들을 결합하도록 구성되는 영역 복제 작동(들)을 수행하도록 추가로 구성될 수 있다.
상태(1015B)에 도시된 바와 같이, 재지향 모듈(1034)은 벡터들(1042A 및 1042B)을 포함하는 제2 세트의 식별자들을 할당할 수 있으며, 벡터들(1042A 및 1042B)은 트랜잭션 식별자들(Z0 내지 Z3 및 Z6 내지 Z8)을 포함한다. 트랜잭션 식별자들과 저장 위치들 사이의 결합들은 무엇보다도, 트랜잭션 맵(1060)과 같은 중간 매핑층을 사용하는 저장 메타데이터에서 유지될 수 있다. 트랜잭션 맵(1060)은 트랜잭션 식별자들과 논리 어드레스 공간(132)의 LID들 (및/또는 VAS(532)의 VID들) 사이의 매핑들을 포함할 수 있다. 도 10a 실시예에서, 트랜잭션 맵(1060)은 벡터(1042A)의 트랜잭션 식별자들과 벡터(1040A)의 상응하는 LID들(LID들(10 내지 13)) 사이에 링크들(1064A)을 포함하며, 트랜잭션 맵(1060)은 벡터(1042B)의 트랜잭션 식별자들과 벡터(1040B)의 LID들(36 내지 38) 사이에 링크들(1064B)을 더 포함한다. 트랜잭션 맵(1060)은 트랜잭션 식별자들과 저장 위치들 사이의 결합들을 더 포함할 수 있다. 상태(1015B)는 트랜잭션 식별자들(1042A)과 벡터(1040A)의 LID들의 저장 위치들(P1 내지 P4) 사이에 결합들(1062A), 그리고 트랜잭션 식별자들(1042B)과 벡터(1040B)의 LID들의 저장 위치들(P6 내지 P8) 사이의 결합들(1062B)을 포함하는 트랜잭션 맵(1060)에서의 영역 복제 작동(들)을 도시한다.
극소 저장 모듈(1035)은 트랜잭션 어드레스 공간(1032) 내에서 극소 저장 요청의 극소 저장 작동들을 구현할 수 있으며, 이는 제1 세트의 LID들(벡터들(1040A 및/또는 1040B))에서 제2 세트의 식별자들(1042A 및 1042B의 트랜잭션 식별자들)로 저장 작동들을 재지향시키는 것을 포함할 수 있다. 저장 작동들을 재지향시키는 것은 무엇보다도, 트랜잭션 맵(1060)의 사용에 의해 제2 세트의 트랜잭션 식별자들로의 극소 저장 요청으로 LID들에 대한 참조들을 변환하는 것을 포함할 수 있다. 예를 들어, LID(10)와 관련되는 저장 작동은 트랜잭션 맵(1060)의 매핑들(1064A)에 기반하여 트랜잭션 식별자(Z0)로 재지향될 수 있다. 논리 용량을 할당하도록 구성되는 저장 작동들은 트랜잭션 어드레스 공간(1032)으로 재지향(되고 이것 내에서 유지)될 수 있다. 예를 들어, LID들(14 내지 20)을 포함하도록 벡터(1040A)를 확장시키라는 요청은: a) 논리 어드레스 공간(132)에서 LID들을 할당하는 것, b) 트랜잭션 어드레스 공간(1032)에서 상응하는 트랜잭션 식별자들을 할당하는 것, 그리고 c) 트랜잭션 맵(1060)에서 할당된 트랜잭션 식별자들 및 LID들을 링크하는 것을 포함할 수 있다. LID들을 트리밍하라는 요청은 상응하는 식별자들을 트랜잭션 맵(1060)에서 유효하지 않은 것으로 표시하는 것을 포함할 수 있다. 논리 어드레스 공간(132)에서의 상응하는 LID들은 본원에 보다 상세히 개시된 바와 같이 극소 저장 작동들의 완료 시에 수행되는 영역 이동 작동에 응하여 트리밍될 수 있다.
상태(1015C)에 도시된 바와 같이, 극소 저장 요청의 저장 작동들은 저장 위치들(P9 내지 P13 및 P100 내지 P102)에서 데이터를 저장 매체(140)에 첨부하는 것을 포함할 수 있다. 상응하는 저장 작동들은 본원에 개시되는 바와 같이 트랜잭션 어드레스 공간(1032)으로 재지향될 수 있다. 따라서, 극소 저장 요청의 데이터는 트랜잭션 식별자들(Z0 내지 Z3 및 Z6 내지 Z8)과 연관될 수 있으며, 이는: a) 트랜잭션 맵(1060)에서 저장 위치들(P9 내지 P13 및 P100 내지 P102)을 트랜잭션 식별자들(Z0 내지 Z3 및 Z6 내지 Z8)에 결합하는 것, 그리고 b) 데이터를 각각의 트랜잭션 식별자(Z0 내지 Z3 및 Z6 내지 Z8)와 연관시키도록 구성되는 영속적 메타데이터(114)와 함께 P9 내지 P13 및 P100 내지 P102에 데이터를 저장하는 것을 포함할 수 있다.
다른 저장 작동들이 극소 벡터 작동들과 동시에 수행되고/되거나 이것들 내에서 인터리빙될 수 있다. 따라서, 극소 저장 요청의 데이터는 저장 매체(140)의 저장 어드레스 공간(144) 내의 근접한 저장 위치들에 저장될 필요가 없다. 극소 저장 요청의 데이터는 무엇보다도, 저장 위치들(P9 및 P10, 및 P100 내지 P102)에서의 데이터와 트랜잭션 식별자들(Z0 내지 Z3 및 Z6 내지 Z8) 사이의 결합들에 기반하여 극소 저장 요청과 관련되지 않는 다른 데이터와 구별될 수 있다.
상태(1015C)에서 추가로 도시되는 바와 같이, 벡터들(1040A 및 1040B)의 LID들의 본래의, 변경되지 않은 상태는 극소 저장 작동(들)이 진행 중인 동안, 변경되지 않을 수 있으며; 저장 위치들(P1 내지 P4 및 P6 내지 P8)에서의 데이터는 저장 매체(140) 상에 남을 수 있고, 본래의, 변경되지 않은 데이터와 LID들(10 내지 13 및 36 내지 38) 사이의 결합들은 순방향 색인(160) 내에서 유지될 수 있다. 그러므로, 벡터들(1040A 및 1040B)에 상응하는 본래의, 변경되지 않은 데이터는 극소 저장 작동(들)이 수행되고 있는 동안, 일관된 상태로 유지될 수 있고, 극소 저장 작동(들)의 고장에 관계없이 보존될 수 있다.
극소 저장 작동의 완료는 트랜잭션 어드레스 공간(1032)의 콘텐츠를 논리 어드레스 공간(132)으로 병합하는 것을 포함할 수 있다. 상태(1015D)에 도시된 바와 같이, 트랜잭션 어드레스 공간에서 극소 저장 작동들을 (상태(1015C)에 도시된 바와 같이) 완료한 후에, 극소 저장 모듈(1035)은 데이터를 제1 세트의 LID들(벡터들(1040A 및 1040B)의 목적지 LID들)에 결합하기 위해 P9 내지 P13 및 P100 내지 P102에서의 데이터의 논리 인터페이스를 변경하도록 영역 이동 작동을 수행할 수 있다. 영역 이동 작동은 벡터(1040A)의 LID들(10 내지 13)을 저장 위치들(P9 내지 P13)과 연관시키고 벡터(1040B)의 LID들(36 내지 38)을 저장 위치들(P100 내지 P102)과 연관시키기 위해 순방향 맵(160)을 업데이트하는 것을 포함할 수 있다. 영역 이동 작동은 본원에 개시되는 바와 같이 저장 어드레스(P9 내지 P13)를 LID들(10 내지 13)에 그리고 저장 어드레스(P100 내지 P102)를 LID들(36 내지 38)에 결합시키기 위해 영속적 노트(366)를 저장 매체(140) 상에 저장하는 것을 더 포함할 수 있다. 영역 이동 작동은 도 4a 내지 도 4e의 참조 엔트리 실시예들 및/또는 도 5a 및 도 5b의 중개 매핑 실시예들을 포함하지만, 이에 제한되지 않는 다른 방식들로 구현될 수 있다. 영역 이동 작동은 업데이트된 논리 인터페이스와 일치하는 문맥 형식으로 데이터를 재기록하는 것을 포함할 수도 있으며, 이 재기록하는 것은 데이터를 제1 세트의 LID들(예를 들어, 각각 논리 어드레스 공간(132)의 LID들(10 내지 13 및/또는 36 내지 38))과 연관시키도록 구성되는 영속적 메타데이터(114)와 함께 데이터를 재기록하는 것을 포함할 수 있다. 데이터는 본원에 개시되는 바와 같이 하나 이상의 배후 작동으로 재기록될 수 있다.
극소 저장 모듈(1035)은 영역 이동 작동의 완료에 응하여 극소 저장 요청의 완료를 승인하도록 구성될 수 있다. 따라서, 완료는 영속적 노트(366)를 저장하는 것 그리고/또는 영속적 노트(366)를 기록 버퍼 (및/또는 저장 디바이스(141)의 전원 차단 안전 도메인)에 배치하는 것에 응하여 승인될 수 있다. 극소 저장 요청의 완료는 극소 저장 요청을 구현하는데 사용되는 트랜잭션 식별자들을 할당 해제하는 것을 더 포함할 수 있다.
일부 실시예들에서, 영역 이동 작동은 논리 어드레스 공간(132) 내의 LID 할당들을 변경하는 것을 더 포함할 수 있다. 앞서 개시된 바와 같이, 극소 저장 작동은 논리 어드레스 공간(132) 내에 LID들을 할당하라는 요청을 포함할 수 있다. 그러한 작동을 구현하는 것은: 본원에 개시되는 바와 같이 a) 논리 어드레스 공간(132) 내에 요청된 LID들 (또는 대안적 LID들)을 할당하는 것, b) 트랜잭션 어드레스 공간(1032)에서 상응하는 트랜잭션 식별자들을 할당하는 것, 그리고 c) LID들을 트랜잭션 식별자들에 링크하는 것을 포함할 수 있다. 영역 이동 작동은 본원에 개시되는 바와 같이 트랜잭션 식별자들을 제거하는 것 그리고/또는 상응하는 트랜잭션 식별자들과 연관되는 데이터를 할당된 LID들로 이동시키는 것을 포함할 수 있다. 하나 이상의 LID를 트리밍하는 작동을 구현하는 것은 상응하는 트랜잭션 식별자(들)을 트랜잭션 맵(1060)에서 유효하지 않은 것으로 표시하는 것을 포함할 수 있다. 상응하는 영역 이동 작동은 무엇보다도, 순방향 색인(160)에서 LID들을 제거하고/하거나 LID들이 제거되었음을 나타내는 영속적 메타데이터를 저장함으로써 트랜잭션 식별자들로 매핑되는 LID들을 트리밍하는 것을 포함할 수 있다. 도 10a 실시예에서, LID(12)를 트리밍하라는 요청을 포함하는 극소 저장 요청은 트랜잭션 맵(1060)에서 트랜잭션 식별자(Z2)를 무효화하는 것을 포함할 수 있다. 트랜잭션 식별자(Z2)를 무효화하는 것은 트랜잭션 맵(1060)에서 트랜잭션 식별자(Z2)를 나타내는 엔트리를 유지하는 것, 그리고 엔트리를 유효하지 않거나, 삭제되거나, 트리밍되는 등의 것으로 표시하는 것을 포함할 수 있다. 극소 저장 요청을 완료하는 것은: a) 트랜잭션 식별자(Z2)로 매핑되는 LID를 무효화하는 것(예를 들어, 순방향 맵(160) 및/또는 다른 저장 메타데이터(135)에서 LID(12)에 상응하는 엔트리를 무효화하는 것); 그리고/또는 b) LID(12)를 트리밍하도록 영속적 노트(366)를 구성하는 것(예를 들어, LID(12)에 결합되는 저장 위치(들)에서의 데이터가 저장 매체(140) 상에서 보유될 필요가 없는 것을 나타냄)을 포함할 수 있다.
일부 실시예들에서, 저장층(130)은 저장 로그의 콘텐츠로부터 저장 메타데이터(135)를 재구성하도록 구성되는 재구성 모듈(1037)을 더 포함할 수 있다. 재구성 모듈(1037)은 저장 메타데이터(135)의 손실 및/또는 이것의 손상을 야기하는 고장 상태에 응하여 저장 메타데이터(135)를 재구성할 수 있다. 재구성 모듈(1037)은 로그 순서로(예를 들어, 가장 최근의 것에서 가장 오래된 것으로 또는 그 반대) 저장 어드레스 공간(144) 내의 물리적 저장 위치들을 순회하도록 구성될 수 있다. 재구성 모듈(1037)은 무엇보다도, 순방향 맵(160)의 저장 어드레스 연관들에 대한 LID를 재구성하기 위해 저장 로그의 영속적 메타데이터(114)에 액세스할 수 있다.
도 10a의 극소 저장 작동의 고장에 응하여, 재구성 모듈(1037)은 P1 내지 P4 및 P6 내지 P8의 콘텐츠에 기반하여 각각 벡터들(1040A 및 1040B)을 재구성하도록 구성될 수 있다. 재구성 모듈(1037)은 P9 내지 P13 및/또는 P100 내지 P102에 저장되는 데이터가 프로세스 중 어드레스 공간(1032)의 식별자들(Z0 내지 Z3 및 Z6 내지 Z9)과 데이터의 연관에 기반하여 불완전한 극소 저장 요청과 관련된다는 것을 인지할 수 있다. 그러므로, 재구성 모듈(1037)은 순방향 색인(160)으로부터 엔트리들을 생략하고 상응하는 저장 위치들에서의 데이터를 무효화할 수 있다. 대안적으로, 재구성 모듈(1037)은 부분적 극소 저장 요청이 완료될 수 있도록 트랜잭션 맵(1060)에서 상응하는 엔트리들을 재구성할(예를 들어, 스크래치(scratch)에서 극소 저장 작동을 재시작하는 것과는 대조적으로 고장 지점에서 재개할) 수 있다.
재구성 모듈(1037)은 완료된 극소 저장 요청과 관련되는 데이터를 식별하도록 추가로 구성될 수 있다. 도 10a의 극소 저장 요청의 성공적 완료 후에 저장 메타데이터(135)를 재구성할 때, 재구성 모듈(1037)은 물리적 저장 위치들(P9 내지 P13 및 P100 내지 P102)이 저장 위치(109)에 저장되는 영속적 노트(366)에 기반하여 논리 어드레스 공간(132)의 LID들에 상응하는 것이라고 (그리고 성공적 극소 저장 요청의 결과라고) 판단할 수 있다. 앞서 개시된 바와 같이, 영속적 노트(366)는 P9 내지 P13 및 P100 내지 P102에서의 데이터를 벡터들(1040A 및 1040B)의 LID들과 연관시키도록 구성되는 영속적 메타데이터를 포함할 수 있다. 따라서, 재구성 모듈(1037)은 상응하는 데이터가 업데이트된 문맥 형식으로 재기록되었는지 여부에 관계없이 영속적 노트(366)의 사용에 의해 상태(1015C)의 연관들을 재구성하도록 추가로 구성될 수 있다.
도 10b는 무엇보다도, 본원에 개시되는 저장층(130) 및 집합층(530)의 사용에 의해 구현되는 극소 저장 작동들의 추가 실시예들(1000B)을 도시한다. 상태(1017A)에서, 제1 세트의 VID들과 관련되는 극소 저장 작동이 수신될 수 있다. 상태(1017A)에 도시된 바와 같이, 벡터의 타겟 VID들(4096 내지 4159)은 기존 VID 할당(들) 및/또는 데이터에 상응하지 않을 수 있다. 따라서, VAS 순방향 맵(560)은 VID들(4096 내지 4159)에 상응하는 엔트리들 및/또는 중간 맵(1070) 내의 엔트리들을 포함하지 않을 수 있다.
상태(1017B)에 도시된 바와 같이, 극소 저장 요청에 응하여, 극소 저장 모듈(1035)은 극소 저장 요청에 상응하는 VID들(엔트리들(4096,64))을 할당하도록 구성될 수 있다. 요청된 엔트리들이 이용 가능하지 않으면(예를 들어, 다른 클라이언트 및/또는 기존 데이터에 이미 할당되면), 극소 저장 요청은 실패할 수 있다. 대안적으로, 극소 저장 모듈(1035)은 극소 저장 요청을 구현하기 위해 상이한 세트의 VID들을 할당할 수 있으며, 상이한 세트의 VID들은 극소 저장 요청의 완료 시에 저장 클라이언트(106)로 되돌려질 수 있다.
재지향 모듈(1034)은 VID들(4096,64)에 상응하는 일시적인, 프로세스 중 식별자들(9872Z,64)을 할당하도록 구성될 수 있다. 본원에 개시되는 트랜잭션 식별자들과 같이, 프로세스 중 식별자들(9872Z,64)은 타겟 VID들(예를 들어, 트랜잭션 어드레스 공간(1032))과 상이한 명칭 공간, VAS(560)의 특정 영역, 별도의 VAS(560) 등에 상응할 수 있다. 재지향 모듈(1034)은 무엇보다도, VAS 순방향 맵(560) (및/또는 다른 저장 메타데이터(135)) 내에 각각의 엔트리들의 메타데이터의 사용에 의해 그리고/또는 트랜잭션 맵(1060) (또는 프로세스 중 색인)의 사용에 의해 VID들(4096,64)을 프로세스 중 식별자들(9872Z,64)에 링크하도록 구성될 수 있다. 트랜잭션 식별자들(9872Z,64)을 중간 식별자들(1032,64)에 결합하는 것은 영속적 노트(1066A)를 저장 매체(140)에 첨부하는 것을 포함할 수 있다. 영속적 노트(1066A)는 프로세스 중 식별자들을 중간 식별자들(1032,64)과 연관시키도록 구성되는 영속적 메타데이터를 포함할 수 있다.
상태(1017C)에서, 극소 저장 모듈(1035)은 프로세스 중 식별자들을 참조하여 극소 저장 요청에 상응하는 저장 작동들을 구현하도록 구성될 수 있으며, 이는 극소 저장 요청의 VID들을 상응하는 프로세스 중 식별자들로 재지향시키는 것 (그리고/또는 변환하는 것)을 포함할 수 있다. 저장 작동들은 무엇보다도, 로그 저장 모듈(137)의 사용에 의해 데이터를 저장 매체(140)에 첨부하는 것을 포함할 수 있다. 프로세스 중 식별자들(9872Z,64)은 중간 매핑층(1070)(식별자들(1032,64)) 및/또는 영속적 노트(1066A)를 통해 첨부된 데이터에 결합될 수 있다. 저장 로그에 첨부되는 데이터는 극소 저장 작동의 데이터를 각각의 중간 식별자(1032,64)에 결합하도록 구성되는 영속적 메타데이터(114)를 포함할 수 있다. 영속적 메타데이터(114)는 극소 저장 요청의 일부로서 데이터를 식별하도록 구성되는 플래그 또는 다른 지시기를 더 포함할 수 있다.
극소 저장 요청의 완료는 데이터를 극소 저장 요청의 목적지 VID들(VID들(4096,64))에 결합하기 위해 첨부된 데이터의 논리 인터페이스를 변경하도록 구성되는 영역 이동 작동을 포함할 수 있다. 극소 저장 요청의 저장 작동들을 완료한 후에, 극소 저장 모듈(1035)은 무엇보다도: a) 타겟 VID들(4096,64)을 중간 엔트리(1032,64)와 연관시키도록 VAS 순방향 맵(560)을 업데이트하고; b) 프로세스 중 식별자들(9872Z,64)과 중간 엔트리(1032,64) 사이의 매핑을 제거함으로써 영역 이동 작동을 구현할 수 있다.
영역 이동 작동은 프로세스 중 식별자들(9872Z,64)을 할당 해제하는 것(예를 들어, 앞서 개시된 바와 같이 프로세스 중 색인(1060)에서 엔트리들 및/또는 상응하는 메타데이터를 제거하는 것)을 더 포함할 수 있다. 상태(1017D)에 도시된 바와 같이, 영역 이동 작동은 다른 영속적 노트(1066B)를 저장 매체(140)에 첨부하는 것을 더 포함할 수 있으며, 이는 첨부된 데이터의 변경된 논리 인터페이스를 식별하도록 구성될 수 있다. 영속적 노트(1066B)는 중간 엔트리(1032,64)를 목적지 VID 영역(4096,64)에 결합할 수 있다. 영속적 노트(1066B)는 극소 저장 작동이 성공적으로 완료되었다는 것을 추가로 나타낼 수 있다. 극소 저장 모듈(1035)은 영속적 노트(1066B)를 저장 매체(140) 상에 저장하는 것 (그리고/또는 예를 들어, 전원 차단 안전 도메인 내의 저장을 위해 영속적 노트(1066B)를 스케줄링하는 것)에 응하여 극소 저장 요청의 완료를 승인하도록 구성될 수 있다.
앞서 개시된 바와 같이 일부 실시예들에서, 극소 저장 모듈(1035)에 의해 구현되는 영역 이동 작동들은 타겟 명칭 공간(예를 들어, 논리 어드레스 공간(132))에 대한 변경들을 포함할 수 있다. 일 실시예에서, 예를 들어, 극소 저장 요청은 I/O 벡터를 트리밍하라는 요청을 포함할 수 있다. 극소 저장 요청을 구현하는 것은 앞서 개시된 바와 같이 상응하는 프로세스 중 또는 트랜잭션 식별자(들)을 트리밍하도록 구성되는 영속적 노트(366)를 저장 로그 내에 저장하는 것을 포함할 수 있다. 영역 이동 작동은 타겟 명칭 공간 내에서 트림 작동을 구현하는 것을 포함할 수 있다. 트림 작동은 본원에 개시되는 바와 같이 타겟 I/O 벡터를 트리밍하도록 영속적 노트(1066B)를 구성하는 것 그리고/또는 저장된 트림 커맨드를 타겟 I/O 벡터로 이동시키는 것을 포함할 수 있다.
영속적 노트(1066B)는 앞서 개시된 바와 같이 고장 상태일 경우에 저장 메타데이터(135)를 재구축하기 위해 재구성 모듈(1037)에 의해 사용될 수 있다. 재구성 모듈(1037)은 중개 맵(1070) 및/또는 VAS 순방향 맵(560)의 결합들을 재구축할 수 있다. 상태(1017D)에서, 재구성 모듈(1037)은 로그 내에(예를 들어, 각각의 패킷 헤더 내에) 상응하는 데이터 세그먼트들과 함께 저장되는 영속적 메타데이터(114)의 사용에 의해 1032,64와 상응하는 저장 어드레스들 사이의 연관들을 재구성할 수 있다. 재구성 모듈(1037)은 영속적 노트(1066B)의 사용에 의해 중간 어드레스들(1032,64)을 VID들(4096,64)과 연관시키도록 추가로 구성될 수 있다.
상태(1017E)에 도시된 바와 같이, 재구성 모듈(1037)은 극소 저장 요청의 완료를 나타내는 영속적 노트(1066B)가 저장 매체(140) 상에 존재하지 않는다고 판단하는 것에 응하여 실패된 극소 저장 작동의 데이터를 식별할 수 있다. 재구성 모듈(1037)은: a) 프로세스 중 식별자들(9872Z,64)에 결합되고/되거나 b) (각각의 영속적 메타데이터(114)에서) 극소인 것으로 표시되는 중간 식별자들(1032,64)에 결합되는 데이터를 식별하는 것에 응하여 첨부된 데이터가 불완전한, 실패된 극소 저장 요청의 일부였다고 판단할 수 있다. 이에 대응하여, 재구성 모듈(1037)은: a) 중간 맵(1070)으로부터 엔트리(1032,64)를 제거하고/하거나 생략하고/하거나, b) VAS 순방향 맵(560)으로부터 엔트리들(4096,64 및/또는 9872Z,64)을 제거하고/하거나 생략하고/하거나, c) 저장 매체(140) 상의 상응하는 데이터를 무효화할 수 있다.
도 11은 비휘발성 저장 매체 상에서 문맥 형식으로 저장되는 데이터의 논리 인터페이스를 관리하는 방법(1100)의 일 실시예의 흐름도이다.
단계(1120)는 비휘발성 저장 매체 상에서 문맥 형식으로 저장되는 데이터의 논리 인터페이스를 변경하는 단계를 포함할 수 있다. 논리 인터페이스는 복제 작동, 중복 제거 작동, 이동 작동 등을 포함할 수 있지만, 이에 제한되지 않는 데이터 상의 작동을 수행하는 것에 응하여 단계(1120)에서 변경될 수 있다. 요청은 저장 클라이언트(106), 저장층(130)(예를 들어, 중복 제거 모듈(374)) 등에서 비롯될 수 있다.
논리 인터페이스를 변경하는 단계는 하나 이상의 부가 LID를 사용하여 데이터를 참조하는 단계(예를 들어, 복제, 중복 제거 등), 데이터와 연관되는 LID(들)을 변경하는 단계(예를 들어, 이동) 등을 포함할 수 있지만, 이에 제한되지 않는 데이터와 연관되는 LID(들)을 변경하는 단계를 포함할 수 있다. 변경된 논리 인터페이스는 상술한 바와 같이 저장 매체(140) 상의 데이터의 문맥 형식과 상반될 수 있다.
단계(1120)는 논리 인터페이스에 대한 변경을 식별하는 영속적 노트를 저장 매체(140) 상에 저장하는 단계를 더 포함할 수 있다. 영속적 노트는 논리 작동을 영속적이고 크래시에서 안전하게 하는데 사용될 수 있어, 데이터의 변경된 논리 인터페이스(예를 들어, 저장 메타데이터(135))는 (필요하다면) 저장 매체(140)의 콘텐츠로부터 재구성될 수 있다. 단계(1120)는 논리 인터페이스가 변경되었던 것을 승인하는 단계(예를 들어, API 호출로부터 반송하는 단계, 명시적 승인을 반송하는 단계 등)를 더 포함할 수 있다. 승인 (및 단계(1130)에서의 변경된 논리 인터페이스를 통한 액세스)는 데이터의 문맥 형식이 저장 매체(140) 상에서 업데이트되기 전에, 일어날 수 있다. 따라서, 논리 작동은 데이터가 재기록되고/되거나 재배치될 때까지, 대기하지 않을 수 있으며; 본원에 개시되는 바와 같이, 데이터의 문맥 형식을 업데이트하는 것은 방법(1100)의 "중요한 경로" 및/또는 다른 저장 작동들 및/또는 요청들을 서비스하는 경로 외에 있는 프로세스로 연기되고/되거나 구현될 수 있다.
단계(1130)는 단계(1120)의 변경된 논리 인터페이스를 통해 일관되지 않는 문맥 형식의 데이터에 대한 액세스를 제공하는 단계를 포함할 수 있다. 상술한 바와 같이, 변경된 문맥 인터페이스와 일치하도록 데이터의 문맥 형식을 업데이트하는 것은 비휘발성 저장 매체 상에 데이터를 재기록하고/하거나 재배치하는 것을 포함할 수 있으며, 이는 단계(1120)의 작동 및/또는 변경된 논리 인터페이스와 관련되는 다른 저장 작동들 상에 부가 레이턴시를 부과할 수 있다. 그러므로, 저장층(130)은 데이터의 문맥 형식이 업데이트되는 동안 (또는 업데이트되기 전에), 일관되지 않는 문맥 형식의 데이터에 대한 액세스를 제공하도록 구성될 수 있다. 단계(1130)에서의 데이터에 대한 액세스를 제공하는 단계는 상술한 바와 같이 (하나 이상의 간접적 엔트리를 통하여) 데이터에 상응하는 하나 이상의 참조 엔트리를 참조하고/하거나 이것들에 링크하는 단계를 포함할 수 있다.
단계(1140)는 단계(1120)의 변경된 논리 인터페이스와 일치하도록 저장 매체(140) 상의 데이터의 문맥 형식을 업데이트하는 단계를 포함할 수 있다. 단계(1140)는 데이터를 저장 매체(140) 상의 다른 매체 저장 위치에 재기록하고/하거나 재배치하는 단계를 포함할 수 있다. 상술한 바와 같이, 단계(1140)는 단계(1120) 및/또는 저장층(130)에 의해 수행되는 다른 저장 요청들의 중요한 경로 외에 있는 프로세스를 사용하여 구현될 수 있으며; 단계(1140)는 매체 관리 모듈(370), 중복 제거 모듈(374) 등과 같은 다른, 자율적 모듈에 의해 구현될 수 있다. 따라서, 데이터의 문맥 형식은 다른 저장 작동들 및/또는 요청들을 서비스하는 것과는 관계없이 업데이트될 수 있다. 이에 따라, 단계(1140)는 데이터의 문맥 형식의 즉각적 업데이트를 연기하는 단계 및 매체 관리 프로세스와 같은 하나 이상의 "배후" 프로세스로 데이터의 문맥 형식을 업데이트하는 단계를 포함할 수 있다. 대안적으로, 또는 부가적으로, 데이터의 문맥 형식을 업데이트하는 단계는 다른 저장 작동들에 응하여(예를 들어, 다른 저장 작동들과 함께) 일어날 수 있다. 예를 들어, 데이터를 변경하라는 후속 요청은 데이터가 제 위치에 있지 않게 그리고 업데이트된 문맥 형식으로 재기록되게 할 수 있다.
단계(1140)는 데이터의 문맥 형식이 업데이트됨에 따라, 저장 메타데이터(135)를 업데이트하는 단계를 더 포함할 수 있다. 데이터가 업데이트된 문맥 형식으로 재기록되고/되거나 재배치됨에 따라, 저장층(130)은 그에 상응하게 저장 메타데이터(135)(예를 들어, 순방향 맵(160))를 업데이트할 수 있다. 업데이트들은 상술한 바와 같이 참조 맵(460)에서의 참조 엔트리들에 대한 하나 이상의 링크를 제거하는 것 그리고/또는 간접적 엔트리들을 국부 엔트리들로 대체하는 것을 포함할 수 있다. 단계(1140)는 앞서 개시된 바와 같이 데이터의 문맥 형식을 업데이트하고/하거나 저장 메타데이터(135)를 지속시키는 것에 응하여, 저장 매체(140)로부터 영속적 노트를 무효화하고/하거나 제거하는 단계를 더 포함할 수 있다.
도 12는 비휘발성 저장 매체 상에서 문맥 형식으로 저장되는 데이터의 논리 인터페이스를 관리하는 방법(1200)의 다른 실시예의 흐름도이다. 방법(1200)은 본원에 개시되는 바와 같이 저장층(130)의 하나 이상의 모듈 및/또는 구성 요소에 의해 구현될 수 있다.
단계(1220)는 소거 블록 또는 논리 소거 블록과 같은 복원을 위한 저장 구획을 선택하는 단계를 포함한다. 상술한 바와 같이, 단계(1220)의 선택은 이용 가능한 저장 용량의 부족, 특정 논리 소거 블록 내에서 유효하지 않은 것으로 표시되는 데이터의 백분율이 임계치에 도달하는 것을 검출하는 것, 유효한 데이터의 통합, 임계치에 도달하는 오류 검출율, 데이터 분배를 개선하는 것, 데이터 리프레시 등과 같은 다수의 상이한 요인에 기반할 수 있다. 대안적으로, 또는 부가적으로, 단계(1220)의 선택 기준들은 상술한 바와 같이 저장 구획이 데이터의 상응하는 논리 인터페이스와 상반되는 문맥 형식의 데이터를 포함하는지 여부를 포함할 수 있다.
앞서 개시된 바와 같이, 저장 구획을 복원하는 것 (또는 복구하는 것)은 저장 구획을 소거하는 것 그리고 (존재한다면) 저장 구획 상의 유효한 데이터를 비휘발성 저장 매체 상의 다른 저장 위치들로 재배치하는 것을 포함할 수 있다. 단계(1230)는 그루밍 작동으로 재배치될 데이터의 문맥 형식이 업데이트되어야 할지(예를 들어, 데이터의 논리 인터페이스와 상반되는지) 여부를 판단하는 단계를 포함할 수 있다. 단계(1230)는 상술한 바와 같이, 데이터의 영속적 메타데이터(예를 들어, 논리 인터페이스 메타데이터)가 데이터의 저장 메타데이터(135)와 일치하는지 여부를 판단하기 위해 순방향 맵(160), 참조 맵(460) 및/또는 중개 어드레스 공간과 같은 저장 메타데이터(135)에 액세스하는 단계를 포함할 수 있다. 영속적 메타데이터가 저장 메타데이터(135)와 일치하지 않으면(예를 들어, 상술한 바와 같이 데이터를 상이한 LID들과 연관시키면), 흐름은 단계(1240)에서 계속되며; 그렇지 않으면, 흐름은 단계(1250)에서 계속된다.
단계(1240)는 데이터의 논리 인터페이스와 일치하도록 데이터의 문맥 형식을 업데이트하는 단계를 포함할 수 있다. 단계(1240)는 상술한 바와 같이 상이한 세트의 LID들 (및/또는 참조 엔트리들)을 참조하기 위해 논리 인터페이스 메타데이터를 변경하는 단계를 포함할 수 있다.
단계(1250)는 상술한 바와 같이, 비휘발성 저장 매체 상에서 수행되는 저장 작동들의 순서화된 시퀀스를 보존하는 로그 형식으로 상이한 저장 위치에 데이터를 재배치하는 단계를 포함한다. 따라서, (업데이트된 문맥 형식으로) 재배치된 데이터는 (필요하다면) 저장 메타데이터(135)를 재구성할 때, 유효한 최신 버전의 데이터로 식별될 수 있다. 단계(1250)는 본원에 개시되는 바와 같이 데이터의 논리 인터페이스를 데이터의 새로운 매체 저장 위치들에 결합하고, 일관되지 않는 문맥 형식의 데이터에 대한 간접적 및/또는 참조 엔트리들을 제거하고 등을 위해 저장 메타데이터(135)를 업데이트하는 단계를 더 포함할 수 있다.
도 13은 문맥 형식으로 저장되는 데이터의 논리 인터페이스들을 관리하는 방법(1300)의 다른 실시예의 흐름도이다. 단계(1315)는 하나 이상의 저장 디바이스(120) 상의 중복 데이터를 식별하는 단계를 포함할 수 있다. 단계(1315)는 저장층(130) 내에서 작동하는 중복 제거 모듈(374)에 의해 수행될 수 있다. 대안적으로, 단계(1320)는 저장 작동들이 수행됨에 따라, 저장층(130)에 의해 수행될 수 있다.
단계(1315)는 저장 매체(140)가 중복 데이터를 포함하는 것을 (또는 기록 및/또는 변경 요청의 데이터를 이미 포함하는 것을) 판단하고/하거나 검증하는 단계를 포함할 수 있다. 따라서, 단계(1320)는 (예를 들어, 중복 데이터가 저장 매체(140)에 기록됨에 따라 또는 기록되기 전에,) 저장 작동의 경로 내에서 일어날 수 있고/있거나, 저장 작동들을 서비스하는 경로의 외에서 일어날(예를 들어, 저장 매체(140) 상에 이미 저장되는 중복 데이터를 식별할) 수 있다. 단계(1320)는 저장 메타데이터(135)에서 데이터 시그니처들을 생성하고/하거나 유지하는 단계 및 중복 데이터를 식별하기 위해 시그니처들을 사용하는 단계를 포함할 수 있다.
단계(1315)에서 중복 데이터를 식별하는 것에 응하여, 저장층(130) (또는 중복 제거 모듈(374)과 같은 다른 모듈)은 데이터의 카피의 논리 인터페이스를 변경할 수 있어, 단일 카피가 2개의(2개 이상의) 세트의 LID들에 의해 참조될 수 있다. 단계(1320)에서 논리 인터페이스에 대한 변경은 상술한 바와 같이 저장 메타데이터(135)를 업데이트하고/하거나 영속적 노트를 비휘발성 저장 매체(135) 상에 저장하는 단계를 포함할 수 있다. 단계(1320)는 상술한 바와 같이 비휘발성 저장 매체 상의 데이터의 다른 카피들을 무효화하고/하거나 제거하는 단계를 더 포함할 수 있다.
저장 매체(140) 상의 데이터의 문맥 형식은 변경된 논리 인터페이스와 상반될 수 있다. 그러므로, 단계들(1330 및 1340)은 상술한 바와 같이 변경된 논리 인터페이스를 통해 일관되지 않는 문맥 형식의 데이터에 대한 액세스를 제공하고 저장 매체(140) 상의 데이터의 문맥 형식을 업데이트하는 단계를 포함할 수 있다.
도 14는 본원에 개시되는 저장층(130)에 의해 구현되는 영역 병합 작동의 일 실시예의 흐름도이다. 단계(1410)는 논리 어드레스 공간(132) 내에서 LID들의 세트를 복제하는 단계를 포함할 수 있다. LID들을 복제하는 단계는 2개 이상의 상이한 세트의 LID들을 통해 저장 매체(140)(예를 들어, 동일한 저장 위치들 및/또는 저장 어드레스들) 상의 동일한 세트의 데이터를 참조하는 단계를 포함할 수 있다. 2개 이상의 세트는 LID들의 작업 세트 및 LID들의 본래의, 일관성 세트를 포함할 수 있다. LID들의 작업 세트는 파일 변경 작동들을 수행하는데 사용될 수 있고, LID들의 본래의, 일관성 세트는 데이터의 본래의, 변경되지 않은 상태를 유지하도록 구성될 수 있다.
앞서 개시된 바와 같이, 단계(1410)에서 복제되는 데이터는 LID들의 세트에 의해 참조될 수 있으며, LID들의 세트는 저장 매체(140) 상의 데이터의 저장 위치들에 결합될 수 있다. 단계(1410)는 논리 어드레스 공간(132) 및/또는 별도의 어드레스 공간 내에서 하나 이상의 다른 세트의 LID들을 할당하는 단계를 포함할 수 있다. 하나 이상의 다른 세트의 LID들은 본래의 세트의 LID들의 논리 용량과 균등한(예를 들어, 동일한 수의 LID를 포함하고/하거나 동일한 양의 저장 용량에 상응하는) 논리 용량을 포함할 수 있다. 단계(1410)는 하나 이상의 다른 세트의 LID들의 논리 식별자들을 본래의 세트의 LID들에 의해 참조되는 동일한 데이터와 연관시키고/시키거나 결합하는 단계를 더 포함할 수 있다. 따라서, 단계(1410)는 데이터를 2개 이상의 상이한 세트의 LID들과 연관시키도록 데이터에 대한 논리 인터페이스를 변경하는 단계를 포함할 수 있다. 일부 실시예들에서, 단계(1410)는 논리 어드레스 공간(132) 내에서 하나 이상의 세트의 LID들을 할당하고, LID들을 동일한 세트의 저장 어드레스들에 결합시키는 단계를 포함한다. 대안적으로, 또는 부가적으로, 단계(1410)는 도 4a 내지 도 4e와 함께 개시된 바와 같이 2개 이상의 상이한 세트의 LID들의 LID들을 하나 이상의 참조 엔트리를 통해 저장 어드레스들에 간접적으로 링크하기 위해 참조 맵(460) 내에서 하나 이상의 참조 엔트리를 생성하는 단계를 포함할 수 있다. 대안적으로, 단계(1410)는 (예를 들어, 도 5a 및 도 5b와 함께 개시된 바와 같이) 하나 이상의 중간 매핑층의 사용에 의해 구현될 수 있다. 단계(1410)는 무엇보다도, LID들과 연관되는 메타데이터(984 및/또는 994)를 통해 2개 이상의 세트의 LID들을 링크하는 단계를 더 포함할 수 있다. 메타데이터(984 및/또는 994)는 LID 세트들이 동일한 저장 엔티티의 복제품들(예를 들어, 동일한 파일의 버전들)을 나타내는 것을 표시하도록 구성될 수 있다. 메타데이터(984 및/또는 994)는 앞서 개시된 바와 같이 2개 이상의 세트의 LID들에 대한 병합 정책을 구체화하고/하거나 참조하도록 추가로 구성될 수 있다.
단계(1410)는 단계(1410)의 복제 작동을 영속적이고 크래시에서 안전하게 하도록 구성되는 영속적 노트(366)를 저장 매체(140) 상에 저장하는 단계를 더 포함할 수 있다. 영속적 노트(366)는 데이터의 변경된 논리 인터페이스를 나타내고(예를 들어, 데이터를 2개 이상의 세트의 LID들과 연관시키고), 복제 작동의 병합 정책 등을 나타내도록 구성될 수 있다.
단계(1420)는 단계(1410)의 상이한 LID 영역들 중 하나 이상 내에서 저장 작동들을 수행하는 단계를 포함할 수 있다. 저장 작동들은 하나 이상의 저장 클라이언트(106)로부터 인터페이스(131)를 통해 수신되는 요청들에 응하여 수행될 수 있다. 저장 작동들은 데이터를 저장 매체(140)에 첨부하는 것을 포함할 수 있다. 그러므로, 저장 작동들은 LID 세트들 중 하나 이상에서의 LID들과 저장 매체(140) 상의 저장 위치들 사이의 연관들 및/또는 결합들을 변경하는 것을 포함할 수 있다. 연관들 및/또는 결합들을 변경하는 것은 LID 세트들 중 하나 이상에서의 LID들을 직접 그리고/또는 하나 이상의 간접적 참조 및/또는 매핑층을 통해 첨부된 데이터에 매핑하는 것을 더 포함할 수 있다.
단계(1430)는 앞서 개시된 바와 같이 LID 세트들을 병합하는 단계를 포함할 수 있다. LID 세트들을 병합하는 단계는 앞서 개시된 바와 같이 LID 영역들 중 하나에서 행해지는 변경들을 LID 세트들 중 하나 이상에 포함시키는 단계를 포함할 수 있다. 단계(1430)는 병합 정책에 따라 하나 이상의 병합 충돌을 해결하는 단계를 더 포함할 수 있다. 일부 실시예들에서, 병합하는 단계는 순방향 맵(160)에서 엔트리들을 제거하는 단계, 참조 계수 데이터 구조체에서 저장 위치들에 대한 공유된 참조들을 제거하는 단계, 참조 맵(460)에서 참조 엔트리들을 제거하는 단계, 중간 매핑층에서의 참조들을 제거하는 단계 등을 포함할 수 있는 LID 세트들 중 하나 이상을 삭제하는 단계(예를 들어, 무효화하는 단계)를 포함한다. 단계(1430)는 앞서 개시된 바와 같이 병합된 데이터의 논리 인터페이스를 변경하는 단계를 더 포함할 수 있다. 변경된 논리 인터페이스는 LID 세트들 중 하나 이상을 참조하여 본래 저장되었던 데이터를 참조하는데 사용되는 LID들을 업데이트할 수 있다. 변경된 논리 인터페이스는 저장 매체(140) 상의 데이터의 문맥 형식과 상반될 수 있다. 그러므로, 단계(1430)는 병합된 데이터를 데이터의 업데이트된 논리 인터페이스와 연관시키도록(예를 들어, 제2 세트에서의 LID들과 연관시켜 본래 저장된 데이터를 제1 세트에서의 LID들과 연관시키도록) 하나 이상의 영속적 노트(366)를 저장 매체(140) 상에 첨부하는 단계를 포함할 수 있다. 단계(1430)는 앞서 개시된 바와 같이 일관되지 않는 문맥 형식의 데이터에 대한 액세스를 제공하는 단계 및/또는 하나 이상의 배후 작동으로 데이터의 문맥 형식을 업데이트하는 단계를 더 포함할 수 있다.
도 15는 영역 병합 작동들에 대한 방법(1500)의 다른 실시예의 흐름도이다. 단계(1520)는 LID 영역의 논리 카피를 생성하라는 요청을 수신하는 단계를 포함할 수 있다. 요청은 저장 클라이언트(106)로부터 인터페이스(131)를 통해 수신될 수 있고/있거나 저장층(130)에 의해 제공되는 더 높은 레벨 API의 일부일 수 있다. 요청은 복제품들이 어떻게 동기화될지, 그렇다 하더라도; 병합하는 것이 어떻게 일어날지(병합 정책); 논리 카피가 단명하는 것으로 지정될지 여부 등을 포함할 수 있지만, 이에 제한되지 않는 복제의 "작동 모드"를 포함할 수 있다.
단계(1530)는 요청을 서비스하기 위해 논리 어드레스 공간(132)에서 LID들을 할당하는 단계를 포함할 수 있다. 단계(1530)의 할당은 복제된 LID 영역에 대한 변경들을 수용할 물리적 저장 공간을 보존하는 단계를 더 포함할 수 있다. 물리적 저장 공간의 보존은 복제의 작동 모드에 입각할 수 있다. 예를 들어, 모든 변경들이 복제품과 본래의 어드레스 영역 사이에서 동기화될 것이면, (존재한다면) 물리적 저장 공간의 작은 부분이 보존될 수 있다. 대안적으로, 저장층(130)은 충돌 시 카피 병합 정책을 갖는 논리 카피 작동들에 대한 부가 물리적 저장 용량을 보존할 수 있다. 단계(1530)는 논리 어드레스 공간(132)의 지정된 부분 또는 세그먼트(예를 들어, 논리 카피 및/또는 복제 작동용 전용의 영역) 내에서 복제품을 할당하는 단계를 더 포함할 수 있다. 따라서, 단계(1530)는 제1 세트의 LID들을 복제하기 위해 제2의, 상이한 세트의 LID들을 할당하는 단계를 포함할 수 있다.
단계(1540)는 데이터에 결합되는 본래의 LID들뿐만 아니라 단계(1530)에서 할당되는 복제된 LID들 둘 다를 참조하기 위해 복제품에 상응하는 데이터의 논리 인터페이스를 업데이트하는 단계를 포함할 수 있다. 단계(1540)는 앞서 개시된 바와 같이 영속적 노트(366)를 저장 매체(140) 상에 저장하는 단계를 포함할 수 있다.
단계(1550)는 저장 요청을 수신하고 저장 요청이 제1 및/또는 제2 세트들에서의 LID(복제된 LID 영역)에 관련되는지 여부를 판단하는 단계를 포함한다. 그렇다면, 흐름은 단계(1560)로 계속되며; 그렇지 않으면, 흐름은 단계(1550)를 유지한다.
단계(1560)는 (존재한다면) 무슨 작동들이 다른 연관된 LID 영역들 상에서 취해질지(예를 들어, 할당 작동들을 동기화할지 등)를 판단하는 단계를 포함할 수 있다. 단계(1560)의 판단은 복제품의 동기화 정책을 포함하고/하거나 참조할 수 있는 메타데이터(984 및/또는 994)에 액세스하는 단계를 포함할 수 있다.
단계(1570)는 요청된 저장 작동과 함께 (존재한다면) 단계(1560)에서 판단되는 작동들을 수행하는 단계를 포함할 수 있다. 동기화 작동들 중 하나 이상이 수행될 수 없으면(예를 들어, 복제품들 중 하나 이상에 대한 부가 논리 어드레스 공간(132)이 할당될 수 없으면), 근본적 저장 작동은 실패할 수 있다.
도 16은 영역 복제 및/또는 영역 병합 작동들을 구현하는 방법(1600)의 다른 실시예의 흐름도이다. 단계(1610)는 앞서 개시된 바와 같이 LID 영역을 복제하는 단계를 포함할 수 있다. 단계(1610)는 각각의 저장 어드레스에서 저장 매체(140) 상에 저장되는 데이터와 연관되는 LID들의 세트를 복제하는 단계를 포함할 수 있다. 그러므로, 단계(1610)는 2개 이상의 상이한 세트의 LID들을 동일한 세트의 저장 위치들(예를 들어, 동일한 데이터)과 연관시키는 단계를 포함할 수 있다. 단계(1610)는 앞서 개시된 바와 같이 하나 이상의 영속적 노트(366)를 저장 매체(140) 상에 저장하고/하거나 업데이트된 문맥 형식으로 데이터를 재기록하는 단계를 더 포함할 수 있다. 단계(1610)는 무엇보다도, 메타데이터(984 및/또는 994)를 통해 2개 이상의 세트의 LID들을 링크하는 단계를 포함할 수 있다. 메타데이터(984 및/또는 994)는 앞서 개시된 바와 같이 복제 동기화 정책, 병합 정책 등을 포함하고/하거나 참조할 수 있다.
단계(1620)는 2개 이상의 복제된 LID 영역 중 하나 이상을 참조하여 저장 작동들을 수행하는 단계를 포함할 수 있다. 단계(1620)는 복제된 영역들 사이에서 할당 작동들을 동기화하는 단계를 포함할 수 있다. 단계(1620)의 저장 작동들은 데이터를 저장 매체(140)에 첨부하고/하거나 첨부된 데이터를 상이한 LID 영역들 중 하나 이상의 LID들과 연관시키는 것을 포함할 수 있다.
단계(1630)는 단계(1610)의 2개 이상의 LID 영역을 병합하라는 요청을 수신하는 단계를 포함할 수 있다. 병합 요청은 인터페이스(131)를 통해 수신될 수 있고/있거나 극소 저장 작동 등과 같은 다른, 더 높은 레벨 작동의 일부일 수 있다.
단계(1640)는 (존재한다면) 2개 이상의 세트의 LID들 사이의 병합 충돌들을 식별하는 단계를 포함할 수 있다. 병합 충돌들을 식별하는 단계는 2개 이상의 복제된 LID 영역 중 하나보다 많은 것 내에서 변경되었던 LID들을 식별하는 단계를 포함할 수 있다. 다시 도 9c를 참조하면, 단계(1640)는 영역(924)에서의 상응하는 LID들(972 및 973)이 변경되었듯이, 영역(914)에서의 LID들(072 및 073)이 변경되었다고 판단하는 것에 응하여 상태(941D)에서의 병합 충돌을 식별하는 단계를 포함할 수 있다. 이에 따라, 단계(1640)는 충돌하는 변경들이 병합 작동에서 동일한 LID로 매핑될 경우들을 식별하기 위해 LID 복제품들 내의 변경들을 비교하는 단계를 포함할 수 있다.
단계(1650)는 단계(1640)에서 식별된 병합 충돌들을 해결하는 단계를 포함할 수 있다. 단계(1650)는 앞서 개시된 바와 같이, 병합 충돌들이 어떻게 해결될지를 판단할 수 있는 적용 가능 병합 정책을 판단하는 단계를 포함할 수 있다. 병합 정책은 LID의 어떤 버전이 병합된 LID 영역에 포함되는지 그리고/또는 충돌들이 LID 영역들의 별도의 카피들을 유지함으로써 해결되는지 여부를 구체화할 수 있다. 단계(1650)는 앞서 개시된 바와 같이 해결된 병합 충돌들에 따라 LID 영역들을 병합하는 단계를 더 포함할 수 있다.
도 17은 극소 저장 작동들을 구현하는 방법(1700)의 일 실시예의 흐름도이다. 단계(1710)는 극소 저장 요청의 제1 세트의 식별자들에 상응하는 제2 세트의 식별자들에 액세스하는 단계를 포함할 수 있다. 단계(1710)는 제1 세트의 식별자들(예를 들어, 타겟 LID들, VID들 등)과 관련되는 극소 저장 요청에 응하여 수행될 수 있다. 제1 세트의 식별자들은 저장 매체(140) 상에 저장되는 기존 데이터에 상응할 수 있다. 대안적으로, 극소 저장 요청은 논리 어드레스 공간(132) 또는 VAS(532) 내에 제1 세트의 식별자들 중 일부 (또는 모두)를 할당하라는 요청을 포함할 수 있다. 극소 저장 요청은 LID들 및/또는 VID들의 상이한, 공통 원소를 갖지 않는 벡터들과 관련되는 복수의 저장 작동에 상응할 수 있다. 따라서, 제1 세트의 식별자들은 복수의 공통 원소를 갖지 않는 I/O 벡터를 포함할 수 있다.
일부 실시예들에서, 단계(1710)는 트랜잭션 어드레스 공간(1032), 중간 색인(1070), VAS(532) 등과 같은 별도의 어드레스 공간에서 제1 세트의 식별자들에 상응하는 식별자들을 할당하는 단계를 포함한다. 대안적으로, 단계(1710)는 논리 어드레스 공간(132)의 특정 영역 또는 영역 내에 식별자들을 할당하는 단계를 포함할 수 있다. 단계(1710)는 제1 세트의 식별자들과 동일한 양 및/또는 논리 용량의 상응하는 세트의 식별자들을 할당하는 단계를 포함할 수 있다. 제2 세트의 식별자들은 본원에 개시되는 바와 같이 무엇보다도, 재지향 모듈(1034)의 사용에 의해 액세스되고/되거나 할당될 수 있다. 단계(1710)는 본원에 개시되는 바와 같이 무엇보다도, 트랜잭션 맵(1060)의 사용에 의해 제1 및 제2 세트들의 식별자들을 링크하는 단계를 더 포함할 수 있다.
단계(1710)는 (존재한다면) 제2 세트의 식별자들을 제1 세트의 식별자들의 데이터에 결합시키도록 영역 복제 작동을 구현하는 단계를 더 포함할 수 있다. 영역 복제 작동은 도 3a 내지 도 3e의 영역 복제 실시예들, 도 4a 내지 도 4e의 참조 엔트리 실시예들, 그리고/또는 도 5a 및 도 5b의 중간 매핑층 실시예들을 포함하지만, 이에 제한되지 않는 본원에 개시되는 실시예들 중 임의의 것을 사용하여 구현될 수 있다.
단계(1720)는 단계(1710)에서 액세스되는 제2 세트의 식별자들을 참조하여 극소 저장 요청의 저장 작동들을 구현하는 단계를 포함할 수 있다. 단계(1720)는 제1 세트의 식별자들에서 제2 세트의 식별자들로 저장 작동들을 재지향시키는 단계(예를 들어, 본원에 개시되는 바와 같이 제1 세트의 식별자들과 제2 세트의 식별자들 사이에서 변환시키는 단계)를 포함할 수 있다. 단계(1720)의 저장 작동들은 무엇보다도, 로그 저장 모듈(137)의 사용에 의해 데이터를 저장 매체(140) 상에 저장하는 단계를 포함할 수 있다. 단계(1720)의 저장 작동들은 a) 저장 리소스들을 할당하는 작동들(예를 들어, 논리적 및/또는 물리적 저장 리소스들을 할당하는 작동들), b) 저장 리소스들을 할당 해제하는 작동들(예를 들어, 트림, 영속적 트림 등), c) 데이터를 저장 로그에 기록하는 것, d) 저장 매체(140) 상에 저장되는 기존 데이터를 변경하는 것, e) 저장 매체(140) 상에 저장되는 데이터를 오버라이트하는 것 등을 포함할 수 있지만, 이에 제한되지 않는다. 로그 저장 모듈(136)은 저장 어드레스 공간(144) 내에서 제 위치에 있지 않게 저장 작동들을 구현하도록 구성될 수 있어, 저장 매체(140) 상에 저장되는 기존 데이터를 변경하고/하거나, 오버라이트하고/하거나, 대체하도록 구성되는 작동들은 첨부된 데이터에 의해 변경되고/되거나, 오버라이트되고/되거나, 대체될 데이터가 저장 매체(140) 상에서 변경되지 않은 상태로 남는 동안, 저장 로그에 첨부된다.
단계(1720)에서 저장 매체(140)에 기록되는 데이터는 데이터의 논리 인터페이스를 나타내도록 구성되는 영속적 메타데이터(114)를 포함할 수 있다. 영속적 메타데이터(114)는 단계(1710)에서 액세스되는 제2 세트의 식별자들에 데이터를 결합하도록 구성될 수 있다. 대안적으로, 또는 부가적으로, 영속적 메타데이터(114)는 첨부된 데이터를 중간 어드레스 공간의 식별자들에 결합하도록 구성될 수 있으며, 중간 어드레스 공간의 식별자들은 무엇보다도, 저장 로그 내에 저장되는 영속적 노트(366)를 통해 제2 세트의 식별자들에 결합된다. 일부 실시예들에서, 영속적 메타데이터(114)는 데이터가 극소 저장 작동의 일부라는 것을 나타내도록 추가로 구성될 수 있다. 대안적으로, 또는 부가적으로, 데이터는 (예를 들어, 데이터와 제2 세트의 식별자들 사이의 연관을 통해) 영속적 메타데이터(114)의 사용에 의해 극소 저장 작동의 일부로서 식별될 수 있다.
단계(1730)는 극소 저장 요청을 완료하는 단계를 포함할 수 있다. 극소 저장 요청의 완료는 제2 세트의 식별자들을 참조하여 단계(1720)에서 구현되는 저장 작동들의 데이터를 제1 세트의 타겟 식별자들로 이동시키도록 구성되는 영역 이동 작동을 포함할 수 있다. 영역 이동 작동은 단일의, 극소 기록 작동으로 완료될 수 있다. 단일 극소 기록 작동은 영속적 메타데이터(예를 들어, 영속적 노트(366 및/또는 1066B))를 저장 매체(140) 상에 저장하는 작동을 포함할 수 있다. 영속적 메타데이터는 데이터를 제1 세트의 식별자들(예를 들어, 극소 저장 요청의 타겟 LID들 또는 VID들)에 결합시키기 위해 단계(1720)에서 기록되는 데이터의 논리 인터페이스를 변경하도록 구성될 수 있다. 영속적 메타데이터는 복수의 상이한 저장 벡터(예를 들어, 복수의 상이한, 인접하고 있지 않은 세트의 식별자들)의 논리 인터페이스를 변경하도록 구성될 수 있다. 단계(1730)는 제1 세트의 식별자들을 통해 첨부된 데이터를 참조하도록 저장 메타데이터(135)를 업데이트하는 단계를 더 포함할 수 있으며, 이 업데이트하는 단계는 순방향 색인(160), 참조 맵(460), 중간 매핑층(1070) 등에서의 하나 이상의 매핑을 변경하는 단계를 포함할 수 있다.
단계(1730)는 데이터를 제1 세트의 논리 식별자들과 연관시키도록 구성되는 문맥 형식으로 단계(1720)에서 저장되는 데이터를 재기록하는 단계를 더 포함할 수 있다. 데이터는 하나 이상의 배후 저장 작동으로 재기록될 수 있다. 저장층(130) 및/또는 집합층(530)은 데이터가 재기록되기 전에, 제1 세트의 식별자들을 통해 데이터에 대한 액세스를 제공할 수 있다.
단계(1730)는 극소 저장 요청의 완료를 승인하는 단계를 더 포함할 수 있다. 완료는 영속적 메타데이터(영속적 노트(366 및/또는 1066B))를 저장 매체(140) 상에 저장하는 것 그리고/또는 타당한 확실성 내에서, 영속적 메타데이터가 저장 매체(140) 상에 저장될 것이라고 판단하는 것에 응하여 승인될 수 있다.
도 18은 극소 저장 작동들에 대한 방법(1800)의 다른 실시예의 흐름도이다. 단계(1810)는 극소 저장 요청을 수신하는 단계를 포함할 수 있다. 극소 저장 요청은 무엇보다도, 저장 인터페이스(131)를 통해 저장층(130)에서 수신될 수 있다. 대안적으로, 극소 저장 요청은 집합층(530)의 인터페이스(531)를 통해 수신될 수 있다. 극소 저장 요청은 각각이 LID들 및/또는 VID들의 상이한, 각각의 타겟 세트에 상응할 수 있는 각각의 I/O 벡터 내에서 수행될 복수의 극소 저장 작동을 포함할 수 있다.
단계(1820)는 트랜잭션 또는 프로세스 중 식별자들의 세트를 참조하여 극소 저장 요청의 저장 작동들을 구현하는 단계를 포함할 수 있다. 트랜잭션 식별자들은 논리 어드레스 공간(132)의 특정 영역; VAS(532) (또는 특정 VAS(532) 내의 영역); 앞서 개시된 트랜잭션 어드레스 공간(1032)과 같은 별도의 명칭 공간 등에 상응할 수 있다. 단계(1820)는 극소 저장 요청의 타겟 식별자들에 상응하는 트랜잭션 식별자들을 할당하고/하거나 식별하는 단계를 포함할 수 있으며; 트랜잭션 식별자들은 벡터화된 극소 저장 요청의 I/O 벡터들에 상응하는 복수의 식별자 영역 및/또는 규모를 포함할 수 있다. 일부 실시예들에서, 트랜잭션 식별자들은 타겟 식별자들과 상이한 영역들 및/또는 규모로 할당되고/되거나 식별될 수 있다. 예를 들어, LID들(1024 내지 2048 및 6144 내지 7186)의 2개의 인접하고 있지 않은 영역에 상응하는 극소 저장 작동을 구현하는데 사용되는 트랜잭션 식별자들은 단명하는 식별자들(10240 내지 12288)의 단일 영역 또는 트랜잭션 식별자들의 복수의 더 작은 영역 및/또는 규모 내에서 구현될 수 있다. 트랜잭션 식별자들은 무엇보다도, 저장 메타데이터(135)의 사용에 의해 타겟 식별자들에 링크될 수 있다. 일부 실시예들에서, 트랜잭션 식별자들은 트랜잭션 맵(1060)에서 타겟 식별자들에 링크된다. 트랜잭션 맵(1060)은 트랜잭션 식별자들을 타겟 LID들 및/또는 VID들에 상응하는 저장 위치들에 결합하도록 추가로 구성될 수 있다.
단계(1820)는 트랜잭션 식별자들을 참조하여 극소 저장 요청의 저장 작동들을 구현하는 단계를 더 포함할 수 있다. 극소 저장 작동들 중 하나 이상은 논리 어드레스 공간(132), VAS(532) 등과 같은 타겟 또는 목적지 명칭 공간 내에서 리소스들의 이용 가능성에 입각할 수 있다. 일부 실시예들에서, 예를 들어, 극소 저장 요청은 특정 세트의 LID들을 할당하라는 요청을 포함할 수 있다. 그러므로, 단계(1820)는 앞서 개시된 바와 같이 무엇보다도, 하나 이상의 영속적 노트(366)의 사용에 의해 타겟 명칭 공간 내에서 논리 용량을 잠정적으로 보존하는 단계를 포함할 수 있다. 단계(1820)는 앞서 개시된 바와 같이 상응하는 트랜잭션 식별자들을 할당하고/하거나 보존하는 단계를 더 포함할 수 있다. 할당 작동의 고장에 응하여, 극소 저장 모듈(1035)은: a) 극소 저장 요청에 실패하거나 또는 b) 타겟 명칭 공간 내에 상이한 세트의 타겟 LID들을 할당하고/하거나 보존할 수 있으며, 상이한 세트의 타겟 LID들은 극소 저장 작동의 완료 시에 되돌려질 수 있다.
단계(1820)의 저장 작동들은 데이터를 극소 저장 작동의 일부인 것으로 식별하도록 구성되는 영속적 메타데이터(114)와 연관시켜 데이터를 저장 로그에 첨부하는 것을 더 포함할 수 있다. 영속적 메타데이터는 단계(1810)의 트랜잭션 식별자들을 포함할 수 있다. 대안적으로, 또는 부가적으로, 영속적 메타데이터는 데이터가 불완전한 극소 저장 작동의 일부인 것을 나타내도록 구성되는 극소 저장 플래그 (또는 다른 데이터)를 포함할 수 있다.
단계(1830)는 극소 저장 요청을 완료하는 단계를 포함할 수 있다. 단계(1830)는 단계(1820)에서 구현되는 극소 저장 요청을 폐쇄하는 단계를 포함할 수 있다. 극소 저장 요청을 폐쇄하는 단계는 단계(1820)의 저장 작동들의 데이터를 타겟 식별자들에 결합시키도록 영역 이동 작동을 수행하는 단계를 포함할 수 있으며, 영역 이동 작동을 수행하는 단계는 단계(1820)의 저장 작동들로 저장되는 데이터로 타겟 식별자들을 매핑하도록 저장 메타데이터(135)를 업데이트하는 단계를 포함할 수 있다. 영역 이동 작동은 앞서 개시된 바와 같이 타겟 명칭 공간 내에서 하나 이상의 트림 작동을 구현하는 단계를 더 포함할 수 있다. 극소 저장 요청을 완료하는 단계는: a) 극소 저장 요청의 데이터를 타겟 식별자들에 결합시키고/시키거나 b) 극소 저장 요청이 완료되었음을 나타내도록 구성되는 영속적 메타데이터를 저장 매체(140) 상에 저장하는 단계를 더 포함할 수 있다. 영속적 메타데이터는 (예를 들어, 영속적 노트(366 및/또는 1066B)에서) 단일 저장 작동으로 저장 로그에 첨부될 수 있다. 단계(1830)는 극소 저장 요청의 완료를 승인하는 단계를 더 포함할 수 있다. 완료는 영역 이동 작동들을 완료하는 것 그리고/또는 상응하는 영속적 메타데이터를 저장하는 것에 응하여 승인될 수 있다.
도 19는 극소 저장 작동들에 대한 방법(1900)의 다른 실시예의 흐름도이다. 단계(1910)는 저장 매체(140) 상에서 저장 로그에 액세스하는 단계를 포함할 수 있다. 단계(1910)는 고장 상태 다음에 저장 메타데이터(135)를 재구성하도록 재구성 모듈(1037)에 의해 수행될 수 있다. 재구성 모듈(1037)은 저장 로그의 로그 순서에 따라 저장 로그에 액세스하도록 구성될 수 있다. 재구성 모듈(1037)은 저장 로그 내의 마지막 첨부 지점을 식별하고, 역방향 로그 순서로(예를 들어, 로그의 머리 부분에서 꼬리 부분으로) 저장 로그를 순회하도록 구성될 수 있다.
단계(1920)는 불완전한 극소 저장 요청의 데이터를 식별하는 단계를 포함할 수 있다. 단계(1920)는 트랜잭션 또는 프로세스 중 식별자들 그리고/또는 트랜잭션 및/또는 프로세스 중 어드레스 공간(1032)의 식별자들에 결합되는 데이터를 식별하는 단계를 포함할 수 있다. 단계(1920)는 저장 로그에서 데이터 세그먼트들과 함께 저장되는 영속적 메타데이터(114)에 액세스하는 단계를 포함할 수 있다. 단계(1920)는 저장 로그 내의 다른 영속적 메타데이터가 식별된 데이터 결합들을 변경하는데 실패한 것으로(예를 들어, 논리 어드레스 공간(132) 및/또는 VAS(532)와 같은 상이한 어드레스 공간에서 데이터 세그먼트들을 식별자들과 연관시키지 않는다고) 판단하는 단계를 더 포함할 수 있다.
단계(1930)는 저장 메타데이터(135)로부터 식별된 데이터 세그먼트들을 생략하는 단계를 포함할 수 있으며, 이 생략하는 단계는 데이터를 포함하는 저장 위치(들)을 무효화하는 단계, 및 순방향 맵(160), 중간 매핑층(1070) 등으로부터 데이터 세그먼트들에 상응하는 엔트리들을 생략하는 단계를 포함할 수 있다. 그러므로, 단계(1930)는 실패된 극소 저장 작동을 롤 백하는 단계를 포함할 수 있어, 부분적으로 완료된 극소 저장 작동의 데이터가 타겟 식별자들 및/또는 명칭 공간에 영향을 주지 않는다.
본 발명은 다양한 예시적인 실시예들을 참조하여 행해졌다. 그러나, 당업자는 변화들 및 변경들이 본 발명의 범위로부터 벗어나지 않는 범위 내에서 예시적인 실시예들에 행해질 수 있다는 점을 인지할 것이다. 예를 들어, 다양한 작동 단계뿐만 아니라, 작동 단계들을 수행하기 위한 구성 요소들은 특정 응용에 의존하여 또는 시스템의 작동과 연관되는 임의의 수의 비용 함수를 고려하여 대안적인 방식들로 구현될 수 있다(예를 들어, 단계들 중 하나 이상은 삭제되거나, 변경되거나, 다른 단계들과 결합될 수 있다). 그러므로, 본 발명은 제한적인 의미보다는 오히려 예시적인 의미로 간주되어야 하고, 모든 그러한 변경은 본 발명의 범위 내에 포함되는 것으로 의도된다. 마찬가지로, 이익들, 다른 이점들 및 문제들에 대한 해결법들을 다양한 실시예들에 대하여 상술하였다. 그러나, 이익들, 이점들, 문제들에 대한 해결법들 및 임의의 이익, 이점 또는 해결법을 야기하거나 보다 명백하게 할 수 있는 임의의 요소(들)이 중요하거나, 필요하거나, 필연적인 특징부 또는 요소로 해석되지 않아야 한다. 본원에 사용되는, "포함하다," "포함하는"이란 용어들 및 이 용어들의 임의의 다른 변형은 비배타적인 포함을 다루는 것으로 의도되어, 요소들의 목록을 포함하는 프로세스, 방법, 물품 또는 장치가 그러한 요소들만을 포함하지 않고 그러한 프로세스, 방법, 시스템, 물품 또는 장치에 명확히 목록으로 나열되거나 내재되지 않은 다른 요소들을 포함할 수 있다. 또한 본원에 사용되는, "결합되는," "결합하는"이란 용어들 및 이 용어들의 임의의 다른 변형은 물리적 연결, 전기적 연결, 자기적 연결, 광 연결, 통신적 연결, 기능적 연결 및/또는 임의의 다른 연결을 포함하는 것으로 의도된다.
게다가, 당업자에 의해 이해될 것인 바와 같이, 본 발명의 원리들은 저장 매체에서 구현되는 기계-판독 가능 프로그램 코드 수단을 갖는 기계-판독 가능 저장 매체 상의 컴퓨터 프로그램 제품에 반영될 수 있다. 자기 저장 디바이스(하드 디스크, 플로피 디스크 등), 광 저장 디바이스(CD-ROM, DVD, 블루레이 디스크 등), 플래시 메모리 등을 포함하는 임의의 유형의, 비일시적 기계-판독 가능 저장 매체가 활용될 수 있다. 이러한 컴퓨터 프로그램 명령어들은 범용 컴퓨터, 특수 목적 컴퓨터 또는 기계를 생산하는 다른 프로그램 가능 데이터 프로세싱 장치로 로딩될 수 있어, 컴퓨터 또는 다른 프로그램 가능 데이터 프로세싱 장치 상에서 실행되는 명령어들이 지정된 기능들을 구현하는 수단을 생성한다. 이러한 컴퓨터 프로그램 명령어들은 컴퓨터 또는 특정 방식으로 기능하는 다른 프로그램 가능 데이터 프로세싱 장치를 지시할 수 있는 기계-판독 가능 메모리에 저장될 수도 있어, 기계-판독 가능 메모리에 저장되는 명령어들이 지정된 기능을 구현하는 구현 수단을 포함하는 제조의 물품을 생성한다. 컴퓨터 프로그램 명령어들은 일련의 작동 단계들이 컴퓨터-구현된 프로세스를 생성하는 컴퓨터 또는 다른 프로그램 가능 장치 상에서 수행되게 하도록 컴퓨터 또는 다른 프로그램 가능 데이터 프로세싱 장치로 로딩될 수도 있어, 컴퓨터 또는 다른 프로그램 가능 장치 상에서 실행되는 명령어들이 지정된 기능들을 구현하기 위한 단계들을 제공한다.
본 발명의 원리들을 다양한 실시예들에 나타냈지만, 특히 특정 환경 및 작동 필요 조건들에 적응되는 구조체, 배열, 비율, 요소, 재료 및 구성 요소의 많은 변경이 본 발명의 원리들 및 범위를 벗어나지 않는 범위 내에서 이용될 수 있다. 이러한 그리고 다른 변화들 또는 변경들은 본 발명의 범위 내에 포함되는 것으로 의도된다.

Claims (20)

  1. 방법으로서,
    극소 저장 요청을 구현하는 단계를 포함하고,
    상기 극소 저장 요청을 구현하는 단계는,
    상기 극소 저장 요청에 대응하는 복수의 저장 동작을 실행하는 단계 - 상기 복수의 저장 동작은 상기 극소 저장 요청의 특정된 타겟 식별자로의 기록을 포함하고, 상기 기록을 실행하는 단계는 상기 극소 저장 요청의 상기 특정된 타겟 식별자와 상이한 트랜잭션 식별자로 데이터 세그먼트를 비휘발성 저장 매체 상에 저장하는 단계를 포함함 - , 및
    상기 복수의 저장 동작의 실행을 완료하는 것에 응답하여 상기 극소 저장 요청을 행하는 단계 - 상기 극소 저장 요청을 행하는 단계는, 상기 특정된 타겟 식별자가 상기 트랜잭션 식별자로 상기 비휘발성 저장 매체 상에 저장된 상기 데이터 세그먼트에 매핑되도록 상기 극소 저장 요청의 상기 특정된 타겟 식별자를 상기 저장된 데이터 세그먼트와 연관시키는 영속적 메타데이터를 기록하는 단계를 포함함 -
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 데이터 세그먼트를 저장하는 단계는 상기 데이터 세그먼트를 상기 비휘발성 저장 매체 상의 로그에 첨부하는 단계를 포함하고, 상기 데이터 세그먼트는 상기 첨부된 데이터 세그먼트를 상기 트랜잭션 식별자와 연관시키는 제1 매핑 메타데이터를 포함하는, 방법.
  3. 제2항에 있어서,
    상기 영속적 메타데이터를 기록하는 단계는 제2 매핑 메타데이터를 상기 비휘발성 저장 매체 상의 로그에 첨부하는 단계를 포함하고, 상기 제2 매핑 메타데이터는 상기 첨부된 데이터 세그먼트를 상기 특정된 타겟 식별자와 연관시키고 상기 로그 내에서 상기 제1 매핑 메타데이터를 뒤따르고,
    상기 방법은,
    변환층이 상기 첨부된 데이터 세그먼트를 상기 제1 매핑 메타데이터의 상기 트랜잭션 식별자보다는 상기 제2 매핑 메타데이터의 상기 특정된 타겟 식별자와 연관시키도록 상기 로그 내에서 상기 제1 매핑 메타데이터를 뒤따르는 상기 제2 매핑 메타데이터에 기초하여 상기 제2 매핑 메타데이터가 상기 제1 매핑 메타데이터를 대체한다고 판단하는 단계
    를 더 포함하는, 방법.
  4. 제1항에 있어서,
    상기 데이터 세그먼트를 저장하는 단계는 상기 비휘발성 저장 매체 상에 저장된 상기 데이터 세그먼트의 저장 어드레스를 매핑 색인 내의 상기 트랜잭션 식별자와 연관시키는 단계를 더 포함하는, 방법.
  5. 제4항에 있어서,
    상기 극소 저장 요청을 행하는 단계는 상기 매핑 색인 내에서 상기 트랜잭션 식별자와 상기 저장 어드레스 사이의 연관을 상기 특정된 타겟 식별자와 상기 저장 어드레스 사이의 연관으로 대체하는 단계를 더 포함하는, 방법.
  6. 제1항에 있어서,
    상기 극소 저장 요청을 행하는 단계는 단일 동작으로 상기 영속적 메타데이터를 상기 비휘발성 저장 매체 상에 기록하는 단계를 더 포함하고,
    상기 방법은, 상기 단일 동작의 결과로 상기 영속적 메타데이터를 상기 비휘발성 저장 매체 상에 저장할 것이라고 판단하는 것에 응답하여 상기 극소 저장 요청의 완료를 승인(acknowledging)하는 단계를 더 포함하는, 방법.
  7. 장치로서,
    저장 디바이스 상에서 저장 동작들을 수행하고, 어드레스 공간의 식별자들을 상기 저장 디바이스 상에 저장된 데이터에 매핑하는 저장 메타데이터를 관리하도록 구성된 저장층; 및
    저장 요청을 수신하도록 구성된 저장 인터페이스 - 상기 저장 요청은 복수의 저장 동작을 포함하고 상기 어드레스 공간의 제1 세트의 식별자들과 관련됨 -
    를 포함하고,
    상기 저장층은 상기 저장 요청을 서비스하도록 구성되고, 상기 저장 요청을 서비스하기 위해 상기 저장층은,
    상기 제1 세트의 식별자들과 상이한 제2 세트의 식별자들 내로 상기 저장 디바이스 상의 상기 저장 요청의 상기 복수의 저장 동작을 수행하고 - 상기 복수의 저장 동작을 수행하는 것은 상기 제2 세트의 식별자들의 식별자들로 데이터 세그먼트들을 상기 저장 디바이스 상에 저장하는 것을 포함함 - ,
    상기 저장 메타데이터가 상기 제1 세트의 식별자들의 식별자들을 상기 저장된 데이터 세그먼트들로 매핑하도록, 상기 제1 세트의 식별자들의 상기 식별자들을 상기 제2 세트의 식별자들의 상기 식별자들로 상기 저장 디바이스 상에 저장된 상기 데이터 세그먼트들과 연관시키는 영속적 노트를 기록하도록 구성되는, 장치.
  8. 제7항에 있어서,
    상기 제2 세트의 식별자들의 상기 식별자들로 상기 데이터 세그먼트들을 저장하는 것은 상기 저장 메타데이터 내에서 상기 저장된 데이터 세그먼트들로 상기 제2 세트의 식별자들의 상기 식별자들을 매핑하는 것을 포함하고, 상기 저장 동작들을 이동시키는 것은 상기 저장 메타데이터 내에서 상기 저장된 데이터 세그먼트들로부터 상기 제2 세트의 식별자들의 상기 식별자들을 언매핑(unmapping)하는 것을 포함하는, 장치.
  9. 제7항에 있어서,
    상기 저장층은 상기 영속적 노트가 상기 저장 디바이스 상에 저장될 것이라고 판단하는 것에 응답하여 상기 저장 요청의 완료를 승인하도록 구성되는, 장치.
  10. 제7항에 있어서,
    상기 제1 세트의 식별자들은 복수의 공통 원소를 갖지 않는 세트들의 식별자들(a plurality of disjoint sets of identifiers)을 포함하고, 상기 영속적 노트는 상기 제2 세트의 식별자들의 상기 식별자들로 상기 저장 디바이스 상에 기록된 상기 데이터 세그먼트들을 상기 복수의 공통 원소를 갖지 않는 세트들의 식별자들 내의 각각의 식별자에 결합하도록 구성되는, 장치.
  11. 제7항에 있어서,
    상기 저장층은 로직 어드레스 공간과 상이한 어드레스 공간 및 상기 로직 어드레스 공간의 지정된 영역 중 하나 내에서 상기 제2 세트의 식별자들을 할당하도록 구성되는, 장치.
  12. 제7항에 있어서,
    상기 데이터 세그먼트들을 상기 제2 세트의 식별자들의 상기 식별자들로 기록하는 것은 제1 매핑 메타데이터를 상기 저장 디바이스 상에 유지되는 순서화된 로그에 첨부하는 것을 포함하고, 상기 제1 매핑 메타데이터는 상기 저장 디바이스 상에 저장된 상기 데이터 세그먼트들을 상기 제2 세트의 식별자들의 상기 식별자들과 연관시키고,
    상기 영속적 노트를 저장하는 것은 제2 매핑 메타데이터를 상기 순서화된 로그에 첨부하는 것을 포함하고, 상기 제2 매핑 메타데이터는 상기 저장된 데이터 세그먼트들을 상기 제1 세트의 식별자들의 상기 식별자들과 연관시키고 상기 순서화된 로그 내에서 상기 제1 매핑 메타데이터 이후로 순서화되고,
    상기 제2 매핑 메타데이터는 상기 순서화된 로그 내에서 상기 제1 매핑 메타데이터 이후 순서화되는 것에 기초하여 상기 제1 매핑 메타데이터를 오버라이드(override)하는, 장치.
  13. 제7항에 있어서,
    상기 저장층은 변환 메타데이터를 상기 저장 디바이스 상에 기록하도록 구성되고, 상기 변환 메타데이터는 상기 저장 디바이스 상에서 수행되는 상기 저장 동작들과 각각의 식별자 사이의 연관들을 기록하도록 구성되고, 상기 제2 세트의 식별자들은 트랜잭션 어드레스 공간의 식별자들을 포함하고,
    상기 저장층은 상기 저장 디바이스 상에 기록된 상기 변환 메타데이터의 사용에 의해 상기 저장 메타데이터를 재구축하도록 구성되고, 상기 저장 메타데이터를 재구축하는 것은 상기 변환 메타데이터에 의해 상기 트랜잭션 어드레스 공간의 식별자들과 연관된, 상기 저장 디바이스 상에 저장된 데이터를 무효화시키는 것을 포함하는, 장치.
  14. 제7항에 있어서,
    상기 제2 세트의 식별자들 내의 상기 식별자들 중 하나의 데이터를 무효화시키도록 구성된 저장 동작을 이동시키는 것에 응답하여 상기 저장층은 상기 제1 세트의 식별자들 내의 상기 식별자들 중 하나를 무효화하도록 구성되는, 장치.
  15. 제7항에 있어서,
    상기 데이터 세그먼트들을 상기 저장 디바이스 상에 저장하는 것은 상기 데이터 세그먼트들을 상기 저장 디바이스 상의 순서화된 로그에 첨부하는 것을 포함하고, 상기 저장층은 상기 순서화된 로그 내에서 상기 저장 요청의 2개 이상의 데이터 세그먼트들 사이에 상기 저장 요청과 관련되지 않는 데이터 세그먼트를 첨부하는, 장치.
  16. 시스템으로서,
    목적지 식별자들의 세트의 식별자들과 관련되는 극소 저장 요청을 실행하는 수단 - 상기 실행하는 수단은 식별자들을 저장 디바이스 상에 저장되는 데이터에 매핑하는 변환 수단을 포함함 - ;
    상기 극소 저장 요청과 관련되는 복수의 데이터 패킷을 상기 저장 디바이스 상의 순차적 저장 로그에 첨부하는 수단 - 상기 데이터 패킷들은 상기 데이터 패킷들을 상기 목적지 식별자들의 세트의 상기 식별자들과 상이한 각각의 트랜잭션 식별자와 연관시키도록 구성되는 영속적 메타데이터를 포함함 - ; 및
    상기 극소 저장 요청과 관련되는 상기 복수의 데이터 패킷을 상기 순차적 저장 로그에 첨부하는 것에 응답하여 영속적 노트를 상기 순차적 저장 로그에 첨부하는 수단 - 상기 변환 수단이 상기 순차적 저장 로그에 첨부된 상기 복수의 데이터 패킷을 상기 목적지 식별자들의 세트의 각각의 식별자에 매핑하도록, 상기 영속적 노트는 상기 순차적 저장 로그에 첨부되는 상기 복수의 데이터 패킷을 상기 목적지 식별자들의 세트의 각각의 식별자와 연관시키도록 구성됨 -
    을 포함하는, 시스템.
  17. 제16항에 있어서,
    상기 목적지 식별자들의 세트의 식별자들을 각각의 트랜잭션 식별자에 링크하는 수단을 더 포함하는, 시스템.
  18. 제16항에 있어서,
    상기 트랜잭션 식별자들 중 하나 이상을 상기 목적지 식별자들의 식별자와 연관된 저장 위치에 결합하는 수단을 더 포함하는, 시스템.
  19. 제16항에 있어서,
    상기 목적지 식별자들의 세트의 각각의 식별자를 사용하여 상기 데이터 패킷들을 각각의 트랜잭션 식별자와 연관시키도록 구성되는 상기 영속적 메타데이터를 포함하는 상기 데이터 패킷들에 대한 액세스를 제공하는 수단을 더 포함하는, 시스템.
  20. 제16항에 있어서,
    상기 목적지 식별자들의 세트의 상기 식별자들은 논리 어드레스 공간에 상응하고, 상기 트랜잭션 식별자들은 상이한, 트랜잭션 어드레스 공간에 상응하며, 상기 시스템은,
    상기 데이터 패킷들의 상기 영속적 메타데이터의 사용에 의해 상기 논리 어드레스 공간의 식별자들과 상기 저장 디바이스 상에 저장된 상기 데이터 패킷들 사이에 매핑들을 재구성하는 수단; 및
    상기 트랜잭션 어드레스 공간에 상응하는 트랜잭션 식별자들과 연관되는 데이터 패킷들을 무효화하는 수단을 더 포함하는, 시스템.
KR1020167005340A 2013-08-01 2014-07-29 극소 저장 작동을 위한 시스템 및 방법 KR101769465B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201361861314P 2013-08-01 2013-08-01
US61/861,314 2013-08-01
US14/313,933 US9842128B2 (en) 2013-08-01 2014-06-24 Systems and methods for atomic storage operations
US14/313,933 2014-06-24
PCT/US2014/048593 WO2015017398A1 (en) 2013-08-01 2014-07-29 Systems and methods for atomic storage operations

Publications (2)

Publication Number Publication Date
KR20160038028A KR20160038028A (ko) 2016-04-06
KR101769465B1 true KR101769465B1 (ko) 2017-08-30

Family

ID=52428616

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167005340A KR101769465B1 (ko) 2013-08-01 2014-07-29 극소 저장 작동을 위한 시스템 및 방법

Country Status (7)

Country Link
US (1) US9842128B2 (ko)
JP (1) JP6243028B2 (ko)
KR (1) KR101769465B1 (ko)
CN (1) CN105453021B (ko)
DE (1) DE112014003152T5 (ko)
TW (1) TWI630494B (ko)
WO (1) WO2015017398A1 (ko)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140067869A1 (en) * 2012-08-30 2014-03-06 Atheer, Inc. Method and apparatus for content association and history tracking in virtual and augmented reality
US9535915B2 (en) * 2014-07-11 2017-01-03 Quantum Corporation Immediate recovery of virtual machine using deduplication device and snapshots
US9378049B1 (en) 2015-02-12 2016-06-28 Amazon Technologies, Inc. Servicing I/O requests in an I/O adapter device
US10049001B1 (en) * 2015-03-27 2018-08-14 Amazon Technologies, Inc. Dynamic error correction configuration
US9940284B1 (en) 2015-03-30 2018-04-10 Amazon Technologies, Inc. Streaming interconnect architecture
US9886405B1 (en) 2015-03-30 2018-02-06 Amazon Technologies, Inc. Low latency write requests over a network using a pipelined I/O adapter device
US9864538B1 (en) 2015-06-25 2018-01-09 Amazon Technologies, Inc. Data size reduction
US11169707B2 (en) 2016-01-22 2021-11-09 Netapp, Inc. Garbage collection pacing in a storage system
US10466907B2 (en) * 2016-03-22 2019-11-05 Toshiba Memory Corporation Method to efficiently store object data of an object storage service on a magnetic disk drive and magnetic SMR disk drive
US10838630B2 (en) * 2016-04-18 2020-11-17 Netapp, Inc. Write-ahead log maintenance and recovery
US9842060B1 (en) * 2016-07-13 2017-12-12 Seagate Technology Llc Cache over-provisioning in a data storage device
CN107704462B (zh) * 2016-08-08 2021-07-06 阿里巴巴集团控股有限公司 资源的元数据维护方法、设备及存储装置
US10282297B2 (en) * 2017-02-08 2019-05-07 Arm Limited Read-with overridable-invalidate transaction
CN106951961B (zh) * 2017-02-24 2019-11-26 清华大学 一种粗粒度可重构的卷积神经网络加速器及系统
CN108628761B (zh) * 2017-03-16 2022-04-22 北京忆恒创源科技股份有限公司 原子命令执行方法与装置
US10318202B2 (en) * 2017-03-20 2019-06-11 Via Technologies, Inc. Non-volatile memory apparatus and data deduplication method thereof
US10090067B1 (en) * 2017-05-30 2018-10-02 Seagate Technology Llc Data storage device with rewritable in-place memory
EP3493069B1 (en) * 2017-11-29 2021-02-17 ARM Limited Resource allocation for atomic data access requests
CN110019097B (zh) * 2017-12-29 2021-09-28 中国移动通信集团四川有限公司 虚拟逻辑副本管理方法、装置、设备及介质
US10761978B2 (en) * 2018-10-25 2020-09-01 Micron Technology, Inc. Write atomicity management for memory subsystems
CN111258770B (zh) * 2018-11-30 2023-10-10 上海寒武纪信息科技有限公司 数据处理方法、处理器、数据处理装置及存储介质
US11042323B2 (en) * 2019-06-29 2021-06-22 Intel Corporation Offload defrag operation for host-managed storage
CN112748860B (zh) * 2019-10-30 2024-04-12 伊姆西Ip控股有限责任公司 用于存储管理的方法、电子设备和计算机程序产品
US11640371B2 (en) * 2020-03-12 2023-05-02 Western Digital Technologies, Inc. Snapshot management in partitioned storage
CN111930828B (zh) * 2020-05-29 2024-01-19 武汉达梦数据库股份有限公司 一种基于日志解析的数据同步方法和数据同步系统
CN112307033B (zh) * 2020-11-23 2023-04-25 杭州迪普科技股份有限公司 数据包文件的重构方法、装置及设备
CN113886310B (zh) * 2021-11-02 2024-08-06 上海兆芯集成电路股份有限公司 桥接模块、数据传输系统和数据传输方法
US11853592B2 (en) * 2022-04-07 2023-12-26 Dell Products L.P. Reversible write techniques using physical storage device offloading

Citations (1)

* 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

Family Cites Families (274)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB123416A (en) 1918-02-28 1919-02-27 John Buchanan Composite Valve for all Classes of Internal Combustion Engines.
US4571674A (en) 1982-09-27 1986-02-18 International Business Machines Corporation Peripheral storage system having multiple data transfer rates
US5359726A (en) 1988-12-22 1994-10-25 Thomas Michael E Ferroelectric storage device used in place of a rotating disk drive unit in a computer system
US5247658A (en) 1989-10-31 1993-09-21 Microsoft Corporation Method and system for traversing linked list record based upon write-once predetermined bit value of secondary pointers
US5261068A (en) 1990-05-25 1993-11-09 Dell Usa L.P. Dual path memory retrieval system for an interleaved dynamic RAM memory unit
US5193184A (en) 1990-06-18 1993-03-09 Storage Technology Corporation Deleted data file space release system for a dynamically mapped virtual data storage subsystem
US5307497A (en) 1990-06-25 1994-04-26 International Business Machines Corp. Disk operating system loadable from read only memory using installable file system interface
JP3227707B2 (ja) 1990-12-29 2001-11-12 日本電気株式会社 走行モード別キャッシュメモリ制御方式
US5325509A (en) 1991-03-05 1994-06-28 Zitel Corporation Method of operating a cache memory including determining desirability of cache ahead or cache behind based on a number of available I/O operations
US5438671A (en) 1991-07-19 1995-08-01 Dell U.S.A., L.P. Method and system for transferring compressed bytes of information between separate hard disk drive units
JPH05197605A (ja) * 1991-10-03 1993-08-06 Mitsubishi Electric Corp ファイルシステム
US5469555A (en) 1991-12-19 1995-11-21 Opti, Inc. Adaptive write-back method and apparatus wherein the cache system operates in a combination of write-back and write-through modes for a cache-based microprocessor system
US6256642B1 (en) 1992-01-29 2001-07-03 Microsoft Corporation Method and system for file system management using a flash-erasable, programmable, read-only memory
US5596736A (en) 1992-07-22 1997-01-21 Fujitsu Limited Data transfers to a backing store of a dynamically mapped data storage system in which data has nonsequential logical addresses
US5845329A (en) 1993-01-29 1998-12-01 Sanyo Electric Co., Ltd. Parallel computer
US5459850A (en) 1993-02-19 1995-10-17 Conner Peripherals, Inc. Flash solid state drive that emulates a disk drive and stores variable length and fixed lenth data blocks
JP2856621B2 (ja) 1993-02-24 1999-02-10 インターナショナル・ビジネス・マシーンズ・コーポレイション 一括消去型不揮発性メモリおよびそれを用いる半導体ディスク装置
US5404485A (en) 1993-03-08 1995-04-04 M-Systems Flash Disk Pioneers Ltd. Flash file system
JP2784440B2 (ja) 1993-04-14 1998-08-06 インターナショナル・ビジネス・マシーンズ・コーポレイション データ・ページの転送制御方法
CA2121852A1 (en) 1993-04-29 1994-10-30 Larry T. Jost Disk meshing and flexible storage mapping with enhanced flexible caching
US5499354A (en) 1993-05-19 1996-03-12 International Business Machines Corporation Method and means for dynamic cache management by variable space and time binding and rebinding of cache extents to DASD cylinders
US5682497A (en) 1993-09-28 1997-10-28 Intel Corporation Managing file structures for a flash memory file system in a computer
US5535399A (en) 1993-09-30 1996-07-09 Quantum Corporation Solid state disk drive unit having on-board backup non-volatile memory
JPH086854A (ja) 1993-12-23 1996-01-12 Unisys Corp アウトボードファイルキャッシュ外部処理コンプレックス
US5809527A (en) 1993-12-23 1998-09-15 Unisys Corporation Outboard file cache system
GB9326499D0 (en) 1993-12-24 1994-03-02 Deas Alexander R Flash memory system with arbitrary block size
US5553261A (en) 1994-04-01 1996-09-03 Intel Corporation Method of performing clean-up of a solid state disk while executing a read command
US5696917A (en) 1994-06-03 1997-12-09 Intel Corporation Method and apparatus for performing burst read operations in an asynchronous nonvolatile memory
US5504882A (en) 1994-06-20 1996-04-02 International Business Machines Corporation Fault tolerant data storage subsystem employing hierarchically arranged controllers
JPH08153014A (ja) 1994-11-30 1996-06-11 Hitachi Ltd クライアントサーバシステム
DE19540915A1 (de) 1994-11-10 1996-05-15 Raymond Engineering Redundante Anordnung von Festkörper-Speicherbausteinen
US6002411A (en) 1994-11-16 1999-12-14 Interactive Silicon, Inc. Integrated video and memory controller with data processing and graphical processing capabilities
US6170047B1 (en) 1994-11-16 2001-01-02 Interactive Silicon, Inc. System and method for managing system memory and/or non-volatile memory using a memory controller with integrated compression and decompression capabilities
US5586291A (en) 1994-12-23 1996-12-17 Emc Corporation Disk controller with volatile and non-volatile cache memories
US5651133A (en) 1995-02-01 1997-07-22 Hewlett-Packard Company Methods for avoiding over-commitment of virtual capacity in a redundant hierarchic data storage system
US5701434A (en) 1995-03-16 1997-12-23 Hitachi, Ltd. Interleave memory controller with a common access queue
DE69615278T2 (de) 1995-06-06 2002-06-27 Hewlett-Packard Co. (N.D.Ges.D.Staates Delaware), Palo Alto SDRAM-Datenzuweisungsanordnung und -verfahren
US5682499A (en) 1995-06-06 1997-10-28 International Business Machines Corporation Directory rebuild method and apparatus for maintaining and rebuilding directory information for compressed data on direct access storage device (DASD)
US5930815A (en) 1995-07-31 1999-07-27 Lexar Media, Inc. Moving sequential sectors within a block of information in a flash memory mass storage architecture
US5845313A (en) 1995-07-31 1998-12-01 Lexar Direct logical block addressing flash memory mass storage architecture
US5754563A (en) 1995-09-11 1998-05-19 Ecc Technologies, Inc. Byte-parallel system for implementing reed-solomon error-correcting codes
US6014724A (en) 1995-10-27 2000-01-11 Scm Microsystems (U.S.) Inc. Flash translation layer block indication map revision system and method
US6330688B1 (en) 1995-10-31 2001-12-11 Intel Corporation On chip error correction for devices in a solid state drive
US5787486A (en) 1995-12-15 1998-07-28 International Business Machines Corporation Bus protocol for locked cycle cache hit
US5757567A (en) 1996-02-08 1998-05-26 International Business Machines Corporation Method and apparatus for servo control with high efficiency gray code for servo track ID
US6385710B1 (en) 1996-02-23 2002-05-07 Sun Microsystems, Inc. Multiple-mode external cache subsystem
US5960462A (en) 1996-09-26 1999-09-28 Intel Corporation Method and apparatus for analyzing a main memory configuration to program a memory controller
US5754567A (en) 1996-10-15 1998-05-19 Micron Quantum Devices, Inc. Write reduction in flash memory systems through ECC usage
TW349196B (en) 1996-10-18 1999-01-01 Ibm Cached synchronous DRAM architecture having a mode register programmable cache policy
US6279069B1 (en) 1996-12-26 2001-08-21 Intel Corporation Interface for flash EEPROM memory arrays
US5802602A (en) 1997-01-17 1998-09-01 Intel Corporation Method and apparatus for performing reads of related data from a set-associative cache memory
US6073232A (en) 1997-02-25 2000-06-06 International Business Machines Corporation Method for minimizing a computer's initial program load time after a system reset or a power-on using non-volatile storage
JP3459868B2 (ja) 1997-05-16 2003-10-27 日本電気株式会社 メモリ障害時におけるグループ入れ替え方式
US6418478B1 (en) 1997-10-30 2002-07-09 Commvault Systems, Inc. Pipelined high speed data transfer mechanism
US6101601A (en) 1998-04-20 2000-08-08 International Business Machines Corporation Method and apparatus for hibernation within a distributed data processing system
US5957158A (en) 1998-05-11 1999-09-28 Automatic Switch Company Visual position indicator
US6185654B1 (en) 1998-07-17 2001-02-06 Compaq Computer Corporation Phantom resource memory address mapping system
US6507911B1 (en) 1998-07-22 2003-01-14 Entrust Technologies Limited System and method for securely deleting plaintext data
US6209088B1 (en) 1998-09-21 2001-03-27 Microsoft Corporation Computer hibernation implemented by a computer operating system
US6629112B1 (en) 1998-12-31 2003-09-30 Nortel Networks Limited Resource management for CORBA-based applications
US6412080B1 (en) 1999-02-23 2002-06-25 Microsoft Corporation Lightweight persistent storage system for flash memory devices
KR100330164B1 (ko) 1999-04-27 2002-03-28 윤종용 무효 블록들을 가지는 복수의 플래시 메모리들을 동시에 프로그램하는 방법
US7194740B1 (en) 1999-05-28 2007-03-20 Oracle International Corporation System for extending an addressable range of memory
US7660941B2 (en) 2003-09-10 2010-02-09 Super Talent Electronics, Inc. Two-level RAM lookup table for block and page allocation and wear-leveling in limited-write flash-memories
US6336174B1 (en) 1999-08-09 2002-01-01 Maxtor Corporation Hardware assisted memory backup system and method
KR100577380B1 (ko) 1999-09-29 2006-05-09 삼성전자주식회사 플래시 메모리와 그 제어 방법
JP3785004B2 (ja) 1999-09-30 2006-06-14 株式会社東芝 トランザクション管理方法及びトランザクション管理装置
US8171204B2 (en) 2000-01-06 2012-05-01 Super Talent Electronics, Inc. Intelligent solid-state non-volatile memory device (NVMD) system with multi-level caching of multiple channels
US8452912B2 (en) 2007-10-11 2013-05-28 Super Talent Electronics, Inc. Flash-memory system with enhanced smart-storage switch and packed meta-data cache for mitigating write amplification by delaying and merging writes until a host read
US6671757B1 (en) 2000-01-26 2003-12-30 Fusionone, Inc. Data transfer and synchronization system
US6785835B2 (en) 2000-01-25 2004-08-31 Hewlett-Packard Development Company, L.P. Raid memory
US6523102B1 (en) 2000-04-14 2003-02-18 Interactive Silicon, Inc. Parallel compression/decompression system and method for implementation of in-memory compressed cache improving storage density and access speed for industry standard memory subsystems and in-line memory modules
US7089391B2 (en) 2000-04-14 2006-08-08 Quickshift, Inc. Managing a codec engine for memory compression/decompression operations using a data movement engine
DE10196380T1 (de) 2000-06-23 2003-10-16 Intel Corp Nicht-flüchtiger Cache
TW576966B (en) * 2000-06-23 2004-02-21 Intel Corp Non-volatile cache integrated with mass storage device
US6813686B1 (en) 2000-06-27 2004-11-02 Emc Corporation Method and apparatus for identifying logical volumes in multiple element computer storage domains
US6330642B1 (en) 2000-06-29 2001-12-11 Bull Hn Informatin Systems Inc. Three interconnected raid disk controller data processing system architecture
GB2364581B (en) 2000-07-08 2002-07-03 3Com Corp Application specific integrated circuit with dual-mode system for externally accessible data buses and visibility buses
US6981070B1 (en) 2000-07-12 2005-12-27 Shun Hang Luk Network storage device having solid-state non-volatile memory
US6658438B1 (en) 2000-08-14 2003-12-02 Matrix Semiconductor, Inc. Method for deleting stored digital data from write-once memory device
JP3671138B2 (ja) 2000-08-17 2005-07-13 ジャパンコンポジット株式会社 通気性防水被覆構造体、およびその施工方法
US6404647B1 (en) 2000-08-24 2002-06-11 Hewlett-Packard Co. Solid-state mass memory storage device
US6883079B1 (en) 2000-09-01 2005-04-19 Maxtor Corporation Method and apparatus for using data compression as a means of increasing buffer bandwidth
US6625685B1 (en) 2000-09-20 2003-09-23 Broadcom Corporation Memory controller with programmable configuration
US7039727B2 (en) 2000-10-17 2006-05-02 Microsoft Corporation System and method for controlling mass storage class digital imaging devices
US6779088B1 (en) 2000-10-24 2004-08-17 International Business Machines Corporation Virtual uncompressed cache size control in compressed memory systems
US7257129B2 (en) 2000-11-22 2007-08-14 Silicon Image Memory architecture with multiple serial communications ports
US6754785B2 (en) 2000-12-01 2004-06-22 Yan Chiew Chow Switched multi-channel network interfaces and real-time streaming backup
US6976060B2 (en) 2000-12-05 2005-12-13 Agami Sytems, Inc. Symmetric shared file storage system
US20020103819A1 (en) 2000-12-12 2002-08-01 Fresher Information Corporation Technique for stabilizing data in a non-log based information storage and retrieval system
US7013376B2 (en) 2000-12-20 2006-03-14 Hewlett-Packard Development Company, L.P. Method and system for data block sparing in a solid-state storage device
KR100365725B1 (ko) 2000-12-27 2002-12-26 한국전자통신연구원 플래시 메모리를 이용한 파일 시스템에서 등급별 지움정책 및 오류 복구 방법
JP4818812B2 (ja) 2006-05-31 2011-11-16 株式会社日立製作所 フラッシュメモリストレージシステム
US6731447B2 (en) 2001-06-04 2004-05-04 Xerox Corporation Secure data file erasure
US6839808B2 (en) 2001-07-06 2005-01-04 Juniper Networks, Inc. Processing cluster having multiple compute engines and shared tier one caches
US6785776B2 (en) 2001-07-26 2004-08-31 International Business Machines Corporation DMA exclusive cache state providing a fully pipelined input/output DMA write mechanism
US7275135B2 (en) 2001-08-31 2007-09-25 Intel Corporation Hardware updated metadata for non-volatile mass storage cache
US20030061296A1 (en) 2001-09-24 2003-03-27 International Business Machines Corporation Memory semantic storage I/O
GB0123416D0 (en) 2001-09-28 2001-11-21 Memquest Ltd Non-volatile memory control
US6938133B2 (en) 2001-09-28 2005-08-30 Hewlett-Packard Development Company, L.P. Memory latency and bandwidth optimizations
US6892264B2 (en) 2001-10-05 2005-05-10 International Business Machines Corporation Storage area network methods and apparatus for associating a logical identification with a physical identification
US7173929B1 (en) 2001-12-10 2007-02-06 Incipient, Inc. Fast path for performing data operations
US7013379B1 (en) 2001-12-10 2006-03-14 Incipient, Inc. I/O primitives
JP4061272B2 (ja) 2002-01-09 2008-03-12 株式会社ルネサステクノロジ メモリシステム及びメモリカード
JP4154893B2 (ja) 2002-01-23 2008-09-24 株式会社日立製作所 ネットワークストレージ仮想化方法
US20030145230A1 (en) 2002-01-31 2003-07-31 Huimin Chiu System for exchanging data utilizing remote direct memory access
US7085879B2 (en) 2002-02-27 2006-08-01 Microsoft Corporation Dynamic data structures for tracking data stored in a flash memory device
US7010662B2 (en) 2002-02-27 2006-03-07 Microsoft Corporation Dynamic data structures for tracking file system free space in a flash memory device
US7533214B2 (en) 2002-02-27 2009-05-12 Microsoft Corporation Open architecture flash driver
JP2003281071A (ja) 2002-03-20 2003-10-03 Seiko Epson Corp データ転送制御装置、電子機器及びデータ転送制御方法
JP4050548B2 (ja) 2002-04-18 2008-02-20 株式会社ルネサステクノロジ 半導体記憶装置
US7043599B1 (en) 2002-06-20 2006-05-09 Rambus Inc. Dynamic memory supporting simultaneous refresh and data-access transactions
US7562089B2 (en) 2002-06-26 2009-07-14 Seagate Technology Llc Systems and methods for storing information to allow users to manage files
US7082495B2 (en) 2002-06-27 2006-07-25 Microsoft Corporation Method and apparatus to reduce power consumption and improve read/write performance of hard disk drives using non-volatile memory
JP4001516B2 (ja) 2002-07-05 2007-10-31 富士通株式会社 縮退制御装置及び方法
US7707145B2 (en) * 2002-07-09 2010-04-27 Gerald Mischke Method for control, analysis and simulation of research, development, manufacturing and distribution processes
US7051152B1 (en) 2002-08-07 2006-05-23 Nvidia Corporation Method and system of improving disk access time by compression
KR100505638B1 (ko) 2002-08-28 2005-08-03 삼성전자주식회사 워킹 콘텍스트 저장 및 복구 장치 및 방법
US7340566B2 (en) 2002-10-21 2008-03-04 Microsoft Corporation System and method for initializing a memory device from block oriented NAND flash
US7171536B2 (en) 2002-10-28 2007-01-30 Sandisk Corporation Unusable block management within a non-volatile memory system
US7035974B2 (en) 2002-11-06 2006-04-25 Synology Inc. RAID-5 disk having cache memory implemented using non-volatile RAM
US6996676B2 (en) 2002-11-14 2006-02-07 International Business Machines Corporation System and method for implementing an adaptive replacement cache policy
US7093101B2 (en) 2002-11-21 2006-08-15 Microsoft Corporation Dynamic data structures for tracking file system free space in a flash memory device
EP1572463B1 (en) 2002-12-02 2011-04-06 Silverbrook Research Pty. Ltd Dead nozzle compensation
US6957158B1 (en) 2002-12-23 2005-10-18 Power Measurement Ltd. High density random access memory in an intelligent electric device
US20040148360A1 (en) 2003-01-24 2004-07-29 Hewlett-Packard Development Company Communication-link-attached persistent memory device
US6959369B1 (en) 2003-03-06 2005-10-25 International Business Machines Corporation Method, system, and program for data backup
US8041878B2 (en) 2003-03-19 2011-10-18 Samsung Electronics Co., Ltd. Flash file system
US7610348B2 (en) 2003-05-07 2009-10-27 International Business Machines Distributed file serving architecture system with metadata storage virtualization and data access at the data server connection speed
JP2004348818A (ja) 2003-05-20 2004-12-09 Sharp Corp 半導体記憶装置の書込制御方法及びシステム並びに携帯電子機器
US7243203B2 (en) 2003-06-13 2007-07-10 Sandisk 3D Llc Pipeline circuit for low latency memory
US7047366B1 (en) 2003-06-17 2006-05-16 Emc Corporation QOS feature knobs
US20040268359A1 (en) 2003-06-27 2004-12-30 Hanes David H. Computer-readable medium, method and computer system for processing input/output requests
US7487235B2 (en) 2003-09-24 2009-02-03 Dell Products L.P. Dynamically varying a raid cache policy in order to optimize throughput
US7173852B2 (en) 2003-10-03 2007-02-06 Sandisk Corporation Corrected data storage and handling methods
US7096321B2 (en) 2003-10-21 2006-08-22 International Business Machines Corporation Method and system for a cache replacement technique with adaptive skipping
WO2005065084A2 (en) 2003-11-13 2005-07-21 Commvault Systems, Inc. System and method for providing encryption in pipelined storage operations in a storage network
KR101087906B1 (ko) 2003-11-18 2011-11-30 파나소닉 주식회사 파일기록장치
US7139864B2 (en) 2003-12-30 2006-11-21 Sandisk Corporation Non-volatile memory and method with block management system
US7328307B2 (en) 2004-01-22 2008-02-05 Tquist, Llc Method and apparatus for improving update performance of non-uniform access time persistent storage media
US7305520B2 (en) 2004-01-30 2007-12-04 Hewlett-Packard Development Company, L.P. Storage system with capability to allocate virtual storage segments among a plurality of controllers
US7356651B2 (en) 2004-01-30 2008-04-08 Piurata Technologies, Llc Data-aware cache state machine
US7130957B2 (en) 2004-02-10 2006-10-31 Sun Microsystems, Inc. Storage system structure for storing relational cache metadata
US7130956B2 (en) 2004-02-10 2006-10-31 Sun Microsystems, Inc. Storage system including hierarchical cache metadata
US7231590B2 (en) 2004-02-11 2007-06-12 Microsoft Corporation Method and apparatus for visually emphasizing numerical data contained within an electronic document
US7725628B1 (en) 2004-04-20 2010-05-25 Lexar Media, Inc. Direct secondary device interface by a host
US20050240713A1 (en) 2004-04-22 2005-10-27 V-Da Technology Flash memory device with ATA/ATAPI/SCSI or proprietary programming interface on PCI express
EP1745394B1 (en) 2004-04-26 2009-07-15 Storewiz, Inc. Method and system for compression of files for storage and operation on compressed files
US7644239B2 (en) 2004-05-03 2010-01-05 Microsoft Corporation Non-volatile memory cache performance improvement
US7360015B2 (en) 2004-05-04 2008-04-15 Intel Corporation Preventing storage of streaming accesses in a cache
US7386663B2 (en) 2004-05-13 2008-06-10 Cousins Robert E Transaction-based storage system and method that uses variable sized objects to store data
US20050257017A1 (en) 2004-05-14 2005-11-17 Hideki Yagi Method and apparatus to erase hidden memory in a memory card
US7831561B2 (en) 2004-05-18 2010-11-09 Oracle International Corporation Automated disk-oriented backups
US7447847B2 (en) 2004-07-19 2008-11-04 Micron Technology, Inc. Memory device trims
US7395384B2 (en) 2004-07-21 2008-07-01 Sandisk Corproation Method and apparatus for maintaining data on non-volatile memory systems
US8407396B2 (en) 2004-07-30 2013-03-26 Hewlett-Packard Development Company, L.P. Providing block data access for an operating system using solid-state memory
US7203815B2 (en) 2004-07-30 2007-04-10 International Business Machines Corporation Multi-level page cache for enhanced file system performance via read ahead
US7664239B2 (en) 2004-08-09 2010-02-16 Cox Communications, Inc. Methods and computer-readable media for managing and configuring options for the real-time notification and disposition of voice services in a cable services network
US7398348B2 (en) 2004-08-24 2008-07-08 Sandisk 3D Llc Method and apparatus for using a one-time or few-time programmable memory with a host device designed for erasable/rewritable memory
JPWO2006025322A1 (ja) 2004-08-30 2008-05-08 松下電器産業株式会社 記録装置
US20060075057A1 (en) 2004-08-30 2006-04-06 International Business Machines Corporation Remote direct memory access system and method
US7603532B2 (en) 2004-10-15 2009-10-13 Netapp, Inc. System and method for reclaiming unused space from a thinly provisioned data container
US8131969B2 (en) 2004-10-20 2012-03-06 Seagate Technology Llc Updating system configuration information
US7389393B1 (en) * 2004-10-21 2008-06-17 Symantec Operating Corporation System and method for write forwarding in a storage environment employing distributed virtualization
US7085512B2 (en) 2004-11-04 2006-08-01 Xerox Corporation Compact contamination reducing multi-corona system and method for reducing contamination of surfaces being acted upon by corona generating devices
US7873782B2 (en) 2004-11-05 2011-01-18 Data Robotics, Inc. Filesystem-aware block storage system, apparatus, and method
CA2591333A1 (en) 2004-12-06 2006-06-15 Teac Aerospace Technologies, Inc. System and method of erasing non-volatile recording media
US8074041B2 (en) 2004-12-09 2011-12-06 International Business Machines Corporation Apparatus, system, and method for managing storage space allocation
US7581118B2 (en) 2004-12-14 2009-08-25 Netapp, Inc. Disk sanitization using encryption
US7487320B2 (en) 2004-12-15 2009-02-03 International Business Machines Corporation Apparatus and system for dynamically allocating main memory among a plurality of applications
KR100684887B1 (ko) 2005-02-04 2007-02-20 삼성전자주식회사 플래시 메모리를 포함한 데이터 저장 장치 및 그것의 머지방법
US20060136657A1 (en) 2004-12-22 2006-06-22 Intel Corporation Embedding a filesystem into a non-volatile device
US20060143396A1 (en) 2004-12-29 2006-06-29 Mason Cabot Method for programmer-controlled cache line eviction policy
US7246195B2 (en) 2004-12-30 2007-07-17 Intel Corporation Data storage management for flash memory devices
US20060184718A1 (en) 2005-02-16 2006-08-17 Sinclair Alan W Direct file data programming and deletion in flash memories
US20060184719A1 (en) 2005-02-16 2006-08-17 Sinclair Alan W Direct data file storage implementation techniques in flash memories
US9104315B2 (en) 2005-02-04 2015-08-11 Sandisk Technologies Inc. Systems and methods for a mass data storage system having a file-based interface to a host and a non-file-based interface to secondary storage
US20060190552A1 (en) 2005-02-24 2006-08-24 Henze Richard H Data retention system with a plurality of access protocols
US7254686B2 (en) 2005-03-31 2007-08-07 International Business Machines Corporation Switching between mirrored and non-mirrored volumes
US7620773B2 (en) 2005-04-15 2009-11-17 Microsoft Corporation In-line non volatile memory disk read cache and write buffer
US20060236061A1 (en) 2005-04-18 2006-10-19 Creek Path Systems Systems and methods for adaptively deriving storage policy and configuration rules
US8452929B2 (en) 2005-04-21 2013-05-28 Violin Memory Inc. Method and system for storage of data in non-volatile media
US7702873B2 (en) 2005-04-25 2010-04-20 Network Appliance, Inc. Managing common storage by allowing delayed allocation of storage after reclaiming reclaimable space in a logical volume
US20060265636A1 (en) 2005-05-19 2006-11-23 Klaus Hummler Optimized testing of on-chip error correction circuit
US7457910B2 (en) 2005-06-29 2008-11-25 Sandisk Corproation Method and system for managing partitions in a storage device
US7716387B2 (en) 2005-07-14 2010-05-11 Canon Kabushiki Kaisha Memory control apparatus and method
US7552271B2 (en) 2005-08-03 2009-06-23 Sandisk Corporation Nonvolatile memory with block management
US7409489B2 (en) 2005-08-03 2008-08-05 Sandisk Corporation Scheduling of reclaim operations in non-volatile memory
KR100739722B1 (ko) 2005-08-20 2007-07-13 삼성전자주식회사 플래시 메모리 관리 방법 및 플래시 메모리 시스템
JP5008845B2 (ja) 2005-09-01 2012-08-22 株式会社日立製作所 ストレージシステムとストレージ装置及びその制御方法
US7580287B2 (en) 2005-09-01 2009-08-25 Micron Technology, Inc. Program and read trim setting
JP2007071805A (ja) 2005-09-09 2007-03-22 Denso Corp 力学量センサの製造方法
US20070061508A1 (en) 2005-09-13 2007-03-15 Quantum Corporation Data storage cartridge with built-in tamper-resistant clock
US7437510B2 (en) 2005-09-30 2008-10-14 Intel Corporation Instruction-assisted cache management for efficient use of cache and memory
US7529905B2 (en) 2005-10-13 2009-05-05 Sandisk Corporation Method of storing transformed units of data in a memory system having fixed sized storage blocks
US7516267B2 (en) 2005-11-03 2009-04-07 Intel Corporation Recovering from a non-volatile memory failure
US7739472B2 (en) 2005-11-22 2010-06-15 Sandisk Corporation Memory system for legacy hosts
US7366808B2 (en) 2005-11-23 2008-04-29 Hitachi, Ltd. System, method and apparatus for multiple-protocol-accessible OSD storage subsystem
US7526614B2 (en) 2005-11-30 2009-04-28 Red Hat, Inc. Method for tuning a cache
US7877540B2 (en) 2005-12-13 2011-01-25 Sandisk Corporation Logically-addressed file storage methods
US20070143566A1 (en) 2005-12-21 2007-06-21 Gorobets Sergey A Non-volatile memories with data alignment in a directly mapped file storage system
US20070143561A1 (en) 2005-12-21 2007-06-21 Gorobets Sergey A Methods for adaptive file data handling in non-volatile memories with a directly mapped file storage system
US20070143567A1 (en) 2005-12-21 2007-06-21 Gorobets Sergey A Methods for data alignment in non-volatile memories with a directly mapped file storage system
US7747837B2 (en) 2005-12-21 2010-06-29 Sandisk Corporation Method and system for accessing non-volatile storage devices
US20070143560A1 (en) 2005-12-21 2007-06-21 Gorobets Sergey A Non-volatile memories with memory allocation for a directly mapped file storage system
US20070156998A1 (en) 2005-12-21 2007-07-05 Gorobets Sergey A Methods for memory allocation in non-volatile memories with a directly mapped file storage system
US7831783B2 (en) 2005-12-22 2010-11-09 Honeywell International Inc. Effective wear-leveling and concurrent reclamation method for embedded linear flash file systems
US20070150663A1 (en) 2005-12-27 2007-06-28 Abraham Mendelson Device, system and method of multi-state cache coherence scheme
WO2007097026A1 (ja) 2006-02-27 2007-08-30 Fujitsu Limited キャッシュ制御装置およびキャッシュ制御プログラム
US20070208790A1 (en) 2006-03-06 2007-09-06 Reuter James M Distributed data-storage system
JP2007240904A (ja) 2006-03-09 2007-09-20 Hitachi Ltd プラズマディスプレイ装置
US7676628B1 (en) 2006-03-31 2010-03-09 Emc Corporation Methods, systems, and computer program products for providing access to shared storage by computing grids and clusters with large numbers of nodes
US20070233937A1 (en) 2006-03-31 2007-10-04 Coulson Richard L Reliability of write operations to a non-volatile memory
US7636829B2 (en) 2006-05-02 2009-12-22 Intel Corporation System and method for allocating and deallocating memory within transactional code
US20070261030A1 (en) 2006-05-04 2007-11-08 Gaurav Wadhwa Method and system for tracking and prioritizing applications
US8307148B2 (en) 2006-06-23 2012-11-06 Microsoft Corporation Flash management techniques
US7721059B2 (en) 2006-07-06 2010-05-18 Nokia Corporation Performance optimization in solid-state media
US20080052377A1 (en) 2006-07-11 2008-02-28 Robert Light Web-Based User-Dependent Customer Service Interaction with Co-Browsing
KR101128234B1 (ko) 2006-08-23 2012-03-23 엘지전자 주식회사 메모리 접근 제어 장치 및 방법
US7870306B2 (en) 2006-08-31 2011-01-11 Cisco Technology, Inc. Shared memory message switch and cache
JP4452261B2 (ja) 2006-09-12 2010-04-21 株式会社日立製作所 ストレージシステムの論理ボリューム管理方法、論理ボリューム管理プログラム、及びストレージシステム
JP4942446B2 (ja) 2006-10-11 2012-05-30 株式会社日立製作所 ストレージ装置及びその制御方法
US7685178B2 (en) 2006-10-31 2010-03-23 Netapp, Inc. System and method for examining client generated content stored on a data container exported by a storage system
CN101536002B (zh) 2006-11-03 2015-02-04 气体产品与化学公司 用于工艺监控的系统和方法
US20080120469A1 (en) 2006-11-22 2008-05-22 International Business Machines Corporation Systems and Arrangements for Cache Management
US7904647B2 (en) 2006-11-27 2011-03-08 Lsi Corporation System for optimizing the performance and reliability of a storage controller cache offload circuit
US8935302B2 (en) 2006-12-06 2015-01-13 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for data block usage information synchronization for a non-volatile storage volume
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
WO2008070172A2 (en) 2006-12-06 2008-06-12 Fusion Multisystems, Inc. (Dba Fusion-Io) Apparatus, system, and method for remote direct memory access to a solid-state storage device
US20080140737A1 (en) 2006-12-08 2008-06-12 Apple Computer, Inc. Dynamic memory management
US20080140918A1 (en) 2006-12-11 2008-06-12 Pantas Sutardja Hybrid non-volatile solid state memory system
US7660911B2 (en) 2006-12-20 2010-02-09 Smart Modular Technologies, Inc. Block-based data striping to flash memory
US7913051B1 (en) 2006-12-22 2011-03-22 Emc Corporation Methods and apparatus for increasing the storage capacity of a zone of a storage system
US20080229045A1 (en) 2007-03-16 2008-09-18 Lsi Logic Corporation Storage system provisioning architecture
US8135900B2 (en) 2007-03-28 2012-03-13 Kabushiki Kaisha Toshiba Integrated memory management and memory management method
US20080243966A1 (en) 2007-04-02 2008-10-02 Croisettier Ramanakumari M System and method for managing temporary storage space of a database management system
US9207876B2 (en) 2007-04-19 2015-12-08 Microsoft Technology Licensing, Llc Remove-on-delete technologies for solid state drive optimization
US8429677B2 (en) 2007-04-19 2013-04-23 Microsoft Corporation Composite solid state drive identification and optimization technologies
US7853759B2 (en) 2007-04-23 2010-12-14 Microsoft Corporation Hints model for optimization of storage devices connected to host and write optimization schema for storage devices
JP2008276646A (ja) 2007-05-02 2008-11-13 Hitachi Ltd ストレージ装置及びストレージ装置におけるデータの管理方法
US8850154B2 (en) 2007-09-11 2014-09-30 2236008 Ontario Inc. Processing system having memory partitioning
US20090070526A1 (en) 2007-09-12 2009-03-12 Tetrick R Scott Using explicit disk block cacheability attributes to enhance i/o caching efficiency
US7873803B2 (en) 2007-09-25 2011-01-18 Sandisk Corporation Nonvolatile memory with self recovery
TWI366828B (en) 2007-09-27 2012-06-21 Phison Electronics Corp Wear leveling method and controller using the same
CN101971544B (zh) 2007-11-05 2014-06-18 蜂窝通信设备有限责任公司 缓冲器状态报告系统和方法
JP2009122850A (ja) 2007-11-13 2009-06-04 Toshiba Corp ブロックデバイス制御装置及びアクセス範囲管理方法
US8195912B2 (en) 2007-12-06 2012-06-05 Fusion-io, Inc Apparatus, system, and method for efficient mapping of virtual and physical addresses
KR101086855B1 (ko) 2008-03-10 2011-11-25 주식회사 팍스디스크 고속 동작하는 반도체 스토리지 시스템 및 그 제어 방법
JP2009251764A (ja) * 2008-04-02 2009-10-29 Nec Corp ジョブ管理システム、ジョブ制御方法、及びジョブ制御プログラム
US8051243B2 (en) 2008-04-30 2011-11-01 Hitachi, Ltd. Free space utilization in tiered storage systems
US20090276654A1 (en) 2008-05-02 2009-11-05 International Business Machines Corporation Systems and methods for implementing fault tolerant data processing services
JP5159421B2 (ja) 2008-05-14 2013-03-06 株式会社日立製作所 ストレージシステム及び管理装置を用いたストレージシステムの管理方法
US8775718B2 (en) 2008-05-23 2014-07-08 Netapp, Inc. Use of RDMA to access non-volatile solid-state memory in a network storage system
US8554983B2 (en) 2008-05-27 2013-10-08 Micron Technology, Inc. Devices and methods for operating a solid state drive
WO2009149388A1 (en) 2008-06-06 2009-12-10 Pivot3 Method and system for distributing commands to targets
US7917803B2 (en) 2008-06-17 2011-03-29 Seagate Technology Llc Data conflict resolution for solid-state memory devices
US8843691B2 (en) 2008-06-25 2014-09-23 Stec, Inc. Prioritized erasure of data blocks in a flash storage device
US8135907B2 (en) 2008-06-30 2012-03-13 Oracle America, Inc. Method and system for managing wear-level aware file systems
JP5242264B2 (ja) 2008-07-07 2013-07-24 株式会社東芝 データ制御装置、ストレージシステムおよびプログラム
US20100017556A1 (en) 2008-07-19 2010-01-21 Nanostar Corporationm U.S.A. Non-volatile memory storage system with two-stage controller architecture
KR101086857B1 (ko) 2008-07-25 2011-11-25 주식회사 팍스디스크 데이터 머지를 수행하는 반도체 스토리지 시스템의 제어 방법
US7941591B2 (en) 2008-07-28 2011-05-10 CacheIQ, Inc. Flash DIMM in a standalone cache appliance system and methodology
JP5216463B2 (ja) 2008-07-30 2013-06-19 株式会社日立製作所 ストレージ装置、その記憶領域管理方法及びフラッシュメモリパッケージ
US8205063B2 (en) 2008-12-30 2012-06-19 Sandisk Technologies Inc. Dynamic mapping of logical ranges to write blocks
US20100235597A1 (en) 2009-03-10 2010-09-16 Hiroshi Arakawa Method and apparatus for conversion between conventional volumes and thin provisioning with automated tier management
US8447918B2 (en) 2009-04-08 2013-05-21 Google Inc. Garbage collection for failure prediction and repartitioning
US8566508B2 (en) 2009-04-08 2013-10-22 Google Inc. RAID configuration in a flash memory data storage device
US20100262979A1 (en) 2009-04-08 2010-10-14 Google Inc. Circular command queues for communication between a host and a data storage device
DE102009002474A1 (de) 2009-04-20 2010-10-21 Hilti Aktiengesellschaft Pneumatisches Schlagwerk und Handwerkzeugmaschine
US8516219B2 (en) 2009-07-24 2013-08-20 Apple Inc. Index cache tree
US10026458B2 (en) * 2010-10-21 2018-07-17 Micron Technology, Inc. Memories and methods for performing vector atomic memory operations with mask control and variable data length and data unit size
US9274937B2 (en) 2011-12-22 2016-03-01 Longitude Enterprise Flash S.A.R.L. Systems, methods, and interfaces for vector input/output operations
US10346095B2 (en) * 2012-08-31 2019-07-09 Sandisk Technologies, Llc Systems, methods, and interfaces for adaptive cache persistence
US9400611B1 (en) * 2013-03-13 2016-07-26 Emc Corporation Data migration in cluster environment using host copy and changed block tracking

Patent Citations (1)

* 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

Also Published As

Publication number Publication date
DE112014003152T5 (de) 2016-03-31
KR20160038028A (ko) 2016-04-06
US20150039577A1 (en) 2015-02-05
JP6243028B2 (ja) 2017-12-06
TW201520792A (zh) 2015-06-01
US9842128B2 (en) 2017-12-12
JP2016534439A (ja) 2016-11-04
CN105453021B (zh) 2019-03-26
WO2015017398A1 (en) 2015-02-05
TWI630494B (zh) 2018-07-21
CN105453021A (zh) 2016-03-30

Similar Documents

Publication Publication Date Title
KR101769465B1 (ko) 극소 저장 작동을 위한 시스템 및 방법
KR101718670B1 (ko) 저장 일관성을 위한 시스템 및 방법
US10019320B2 (en) Systems and methods for distributed atomic storage operations
US10102075B2 (en) Systems and methods for storage collision management
US9563555B2 (en) Systems and methods for storage allocation
US10055420B1 (en) Method to optimize random IOS of a storage device for multiple versions of backups using incremental metadata
US9342256B2 (en) Epoch based storage management for a storage device
US9323465B2 (en) Systems and methods for persistent atomic storage operations
US9824092B2 (en) File storage system including tiers
US10558561B2 (en) Systems and methods for storage metadata management
US10019323B1 (en) Method and system for container data recovery in a storage system
US10956071B2 (en) Container key value store for data storage devices
US9904480B1 (en) Multiplexing streams without changing the number of streams of a deduplicating storage system
US20110055471A1 (en) Apparatus, system, and method for improved data deduplication
US11379447B2 (en) Method and system for enhancing IOPS of a hard disk drive system based on storing metadata in host volatile memory and data in non-volatile memory using a shared controller
US9996426B1 (en) Sparse segment trees for high metadata churn workloads
US10229127B1 (en) Method and system for locality based cache flushing for file system namespace in a deduplicating storage system

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