KR20160031012A - 저장 일관성을 위한 시스템 및 방법 - Google Patents

저장 일관성을 위한 시스템 및 방법 Download PDF

Info

Publication number
KR20160031012A
KR20160031012A KR1020167003843A KR20167003843A KR20160031012A KR 20160031012 A KR20160031012 A KR 20160031012A KR 1020167003843 A KR1020167003843 A KR 1020167003843A KR 20167003843 A KR20167003843 A KR 20167003843A KR 20160031012 A KR20160031012 A KR 20160031012A
Authority
KR
South Korea
Prior art keywords
storage
data
file
logical
lids
Prior art date
Application number
KR1020167003843A
Other languages
English (en)
Other versions
KR101718670B1 (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 KR20160031012A publication Critical patent/KR20160031012A/ko
Application granted granted Critical
Publication of KR101718670B1 publication Critical patent/KR101718670B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/178Techniques for file synchronisation in file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/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/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
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/1847File system types specifically adapted to static storage, e.g. adapted to flash memory or SSD
    • G06F17/30174
    • G06F17/30218
    • 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]

Abstract

저장층은 효율적인 개방-폐쇄 일관성 작동들을 구현하도록 구성된다. 개방 폐쇄 일관성은 파일이 폐쇄될 때까지, 파일의 본래의 상태를 보존하는 것을 포함한다. 저장층은 파일 개방 요청에 응하여 파일을 복제하도록 구성될 수 있다. 파일을 복제하는 것은 2개의 별도의 세트의 식별자들에 의해 파일 데이터를 참조하는 것을 포함할 수 있다. 하나의 세트는 파일 변경들을 반영하도록 구성될 수 있고, 다른 세트는 파일의 본래의 상태를 보존하도록 구성될 수 있다. 파일을 변경하도록 구성되는 후속 작동들은 저장층이 다른 세트의 식별자들을 통해 변경되지 않은 파일에의 액세스를 제공하는 동안, 세트들의 식별자들 중 하나를 참조하여 수행될 수 있다. 파일을 페쇄하는 것은 병합 정책에 따라 식별자들의 세트들을 병합하는 것을 포함할 수 있다.

Description

저장 일관성을 위한 시스템 및 방법{SYSTEMS AND METHODS FOR STORAGE CONSISTENCY}
본 발명은 저장 시스템에 관한 것으로, 특히 파일 일관성을 유지하기 위한 시스템 및 방법에 관한 것이다.
무엇보다도, 폐쇄 대 개방 파일 일관성 모델을 구현하는 방법들의 실시예들이 본원에 개시된다. 여기서 개시되는 방법들의 단계들은 프로세서들, 로직 회로들 등과 같은 기계 구성 요소들을 사용하여 구현될 수 있다. 따라서, 개시된 방법들의 하나 이상의 단계 및/또는 작동은 한 특정 기계에 묶일 수 있다. 대안적으로, 또는 부가적으로, 개시된 방법들의 단계들 및/또는 작동들은 저장 매체 상에 저장되는 컴퓨터-판독 가능 코드로서 구현될 수 있다. 저장 매체는 영속적이거나 비일시적인 저장 매체를 포함할 수 있다.
본원에 개시되는 저장 일관성을 위한 방법의 실시예들은 저장 디바이스의 하나 이상의 저장 위치 상에 저장되는 데이터를 어드레스 공간의 논리 식별자들과 연관시키는 단계, 논리 식별자들의 작업 세트 및 논리 식별자들의 일관성 세트가 동일한 하나 이상의 저장 위치와 연관되도록 데이터에 액세스하라는 저장 클라이언트의 요청에 응하여 논리 식별자들의 작업 세트를 제공하는 단계, 및/또는 데이터의 적어도 일부를 변경하도록 구성되는 저장 작동을 구현하는 단계를 포함할 수 있으며, 저장 작동을 구현하는 단계는 작업 세트에서 논리 식별자들 중 하나 이상의 저장 위치 연관들을 업데이트하는 단계 및 논리 식별자들의 일관성 세트와 하나 이상의 저장 위치 사이에 연관들을 보존하는 단계를 포함한다.
저장 작동은 데이터를 저장 디바이스 상의 로그에 첨부하는 것을 포함할 수 있고, 방법은 첨부된 데이터를 논리 식별자들의 작업 세트의 논리 식별자와 연관시키는 단계를 더 포함할 수 있다. 대안적으로, 또는 부가적으로, 저장 작동은 저장 디바이스 상에 저장되는 데이터의 본래의 데이터 세그먼트를 변경하도록 구성되는 데이터 세그먼트를 저장 디바이스 상에 기록하는 것을 포함할 수 있고, 방법은 논리 식별자들의 일관성 세트에서의 논리 식별자를 참조하여 본래의 데이터 세그먼트에 대한 액세스를 제공하는 단계, 및/또는 논리 식별자들의 작업 세트에서의 논리 식별자의 사용에 의해 본래의 데이터 세그먼트를 변경하도록 구성되는 데이터 세그먼트를 연관시키는 단계를 더 포함할 수 있다. 일부 실시예들에서, 저장 작동은 데이터를 파일에 첨부하는 것을 포함하고, 방법은 하나 이상의 부가 논리 식별자를 논리 식별자들의 작업 세트에 할당하는 단계, 및/또는 상기 하나 이상의 부가 논리 식별자를 참조하여 첨부된 데이터에 대한 액세스를 제공하는 단계를 더 포함한다. 저장 작동은 파일의 복수의 본래의 데이터 세그먼트 중 하나를 변경하도록 구성될 수 있고, 방법은 논리 식별자들의 일관성 세트의 논리 식별자들의 사용에 의해 복수의 본래의 데이터 세그먼트를 참조하는 단계, 논리 식별자들의 작업 세트의 논리 식별자들의 사용에 의해 저장 작동에 의해 변경되지 않은 본래의 데이터 세그먼트들을 참조하는 단계, 및/또는 논리 식별자들의 작업 세트의 논리 식별자를 통해 저장 작동에 상응하는 데이터 세그먼트를 참조하는 단계를 더 포함할 수 있다.
개시된 방법의 일부 실시예들은 저장 클라이언트에 의해 수행되는 저장 작동들 동안 저장 용량을 저장 디바이스 상에 보존함으로써 논리 식별자들의 작업 세트를 할당하는 단계를 더 포함할 수 있다. 방법은 상이한 저장 클라이언트의 요청에 응하여 저장 작동에 의해 변경되지 않는 데이터에 대한 액세스를 제공하는 단계를 더 포함할 수 있다.
일부 실시예들에서, 개시된 방법은 논리 식별자들의 일관성 세트 및 논리 식별자들의 부가 작업 세트가 동일한 저장 위치들과 연관되도록 데이터에 상응하는 파일을 개방하라는 다른 저장 클라이언트의 요청에 응하여 논리 식별자들 공간의 부가 작업 세트를 할당하는 단계를 더 포함할 수 있고, 연관들은 저장 작동에 의해 변경되지 않는다. 데이터는 데이터를 각각의 논리 식별자와 연관시키도록 구성되는 영속적 메타데이터와 연관시켜 저장 디바이스 상에 저장될 수 있고, 방법은 데이터를 일관성 세트 및 작업 세트의 논리 식별자들과 연관시키도록 구성되는 영속적 메타데이터를 저장 디바이스에 첨부하는 단계를 더 포함할 수 있다.
개시된 방법의 실시예들은 데이터에 상응하는 파일을 폐쇄하라는 저장 클라이언트의 요청에 응하여 논리 식별자들의 일관성 세트를 논리 식별자들의 작업 세트와 병합하는 단계를 더 포함할 수 있으며, 병합하는 단계는 저장 클라이언트에 의해 논리 식별자들의 작업 세트를 참조하여 행해지는 파일에 대한 변경들을 논리 식별자들의 일관성 세트로 포함시키는 단계를 포함한다. 일부 실시예들에서, 방법은 논리 식별자들의 작업 세트를 하나 이상의 저장 위치의 저장 어드레스들로 결합시키는 단계를 더 포함한다.
저장 일관성을 위한 장치의 실시예들이 본원에 개시된다. 개시된 장치의 실시예들은 파일의 데이터를 논리 식별자들의 본래의 세트 및 논리 식별자들의 복제 세트 둘 다로 결합시킴으로써 저장 디바이스 상에 저장되는 데이터에 상응하는 파일을 복제하도록 구성되는 변환 모듈, 복제 논리 식별자들을 참조하여 파일을 변경하도록 구성되는 저장 작동들을 수행하는 동안 저장 디바이스 상에 저장되는 파일 데이터를 보존하고 보존된 파일 데이터와 논리 식별자들의 본래의 세트 사이의 결합들을 보존하도록 구성되는 저장층, 및 저장 작동들을 수행한 후에 본래의 논리 식별자들을 통해 보존된 파일 데이터에 대한 액세스를 제공하도록 구성되는 인터페이스를 포함할 수 있다.
변환 모듈은 파일을 개방하라는 요청에 응하여 파일을 복제하도록 구성될 수 있고, 인터페이스는 파일과 관련되는 상이한 요청에 응하여 논리 식별자들의 본래의 세트를 통해 보존된 파일 데이터에 대한 액세스를 제공하도록 구성된다. 변환 모듈은 개방된 파일과 관련되는 저장 작동들을 논리 식별자들의 복제된 세트로 재지향시키도록 추가로 구성될 수 있다.
저장 작동들은 파일에서 데이터 세그먼트를 제거하도록 구성될 수 있고, 저장층은 데이터 세그먼트와 논리 식별자들의 복제된 세트에서의 논리 식별자 사이의 연관을 제거하고 데이터 세그먼트와 논리 식별자들의 본래의 세트에서의 논리 식별자 사이의 연관을 보존하도록 구성될 수 있다. 대안적으로, 또는 부가적으로, 저장 작동들은 파일의 기존 데이터를 변경하도록 구성될 수 있고, 저장층은 논리 식별자들의 복제된 세트의 하나 이상의 논리 식별자를 사용하여 파일의 변경된 데이터를 참조하고 논리 식별자들의 본래의 세트의 논리 식별자들을 사용하여 상응하는 보존된 파일 데이터를 참조하도록 구성될 수 있다.
일부 실시예들에서, 변환 모듈은 논리 식별자들의 복제된 세트의 논리 식별자들을 참조하여 수행되는 저장 작동들의 파일 변경들을 논리 식별자들의 본래의 세트로 포함시킴으로써 복제된 논리 식별자들을 본래의 논리 식별자들로 폴딩(folding)하도록 추가로 구성된다. 파일 변경들은 파일의 데이터 세그먼트를 저장 디바이스 상에 저장하는 것을 포함할 수 있고, 파일 변경들을 포함시키는 것은 데이터 세그먼트를 논리 식별자들의 본래의 세트의 논리 식별자들 중 하나와 연관시키기 위해 영속적 메타데이터를 저장 디바이스 상에 저장하는 것을 포함한다. 일부 실시예들에서, 파일 변경들은 파일을 확장시키는 것을 포함하고, 파일 변경들을 포함시키는 것은 확장된 파일의 데이터를 참조하기 위해 논리 식별자들을 본래의 논리 식별자들의 세트에 추가하는 것을 포함한다.
저장 일관성을 위한 시스템의 실시예들이 본원에 개시된다. 개시된 시스템은 파일을 개방하라는 요청에 응하여 파일의 논리 카피를 생성하는 수단으로서, 논리 카피를 생성하는 것은 2개의 상이한 세트의 논리 어드레스들을 통해 파일의 데이터를 참조하는 것을 포함하는 수단, 2개의 상이한 세트의 논리 어드레스들 중 제1의 것을 참조하여 파일을 변경하는 수단, 및 제1 세트의 논리 어드레스들을 참조하여 파일을 변경한 후에 2개의 상이한 세트의 논리 어드레스들 중 제2의 것을 통해 파일의 본래의 버전에의 액세스를 제공하는 수단을 포함할 수 있다. 일부 실시예들에서, 개시된 시스템은 병합 정책에 따라 제1 세트의 논리 어드레스들 내에서 구현되는 파일 변경들을 참조하도록 제2 세트의 논리 어드레스들을 업데이트함으로써 2개의 상이한 세트의 논리 어드레스들을 병합하는 수단을 더 포함한다. 파일을 변경하는 수단은 파일의 변경된 데이터를 저장 디바이스 상에 저장되는 로그에 첨부하는 수단을 포함할 수 있다. 2개의 상이한 세트의 논리 어드레스들을 병합하는 수단은 제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는 폐쇄 대 개방 파일 일관성의 추가 실시예들을 도시한다.
도 10은 극소 저장 작동들을 구현하도록 구성되는 저장층을 포함하는 시스템의 일 실시예를 도시한다.
도 11은 비휘발성 저장 매체 상에서 문맥 형식으로 데이터 저장의 논리 인터페이스를 관리하는 방법의 일 실시예의 흐름도이다.
도 12는 문맥 데이터의 논리 인터페이스를 관리하는 방법의 일 실시예의 흐름도이다.
도 13은 문맥 데이터의 논리 인터페이스를 관리하는 방법의 다른 실시예의 흐름도이다.
도 14는 영역 병합 작동들을 관리하는 방법의 일 실시예의 흐름도이다.
도 15는 영역 복제 작동들을 관리하는 방법의 다른 실시예의 흐름도이다.
도 16은 영역 병합 작동들을 관리하는 방법의 다른 실시예의 흐름도이다.
도 17은 개방 대 폐쇄 파일 일관성을 구현하는 방법의 일 실시예의 흐름도이다.
도 1a는 저장 서비스들을 하나 이상의 저장 클라이언트(106)에 제공하도록 구성되는 저장층(130)을 포함하는 컴퓨팅 시스템(100)의 일 실시예의 블록도이다. 저장층(130)은 본원에 더 상세히 개시된 바와 같이 개방 대 폐쇄 파일 서비스들을 제공하도록 구성될 수 있다. 컴퓨팅 시스템(100)은 서버, 데스크탑, 랩탑, 내장형 시스템, 모바일 디바이스 등을 포함하지만, 이에 제한되지 않는 임의의 적절한 컴퓨팅 디바이스를 포함할 수 있다. 일부 실시예들에서, 컴퓨팅 시스템(100)은 서버 컴퓨팅 디바이스들의 클러스터와 같은 다수의 컴퓨팅 디바이스를 포함할 수 있다. 컴퓨팅 시스템(100)은 프로세싱 리소스(101), 휘발성 메모리 리소스(102)(예를 들어, 랜덤 액세스 메모리(RAM)), 비휘발성 저장 리소스(103) 및 통신 인터페이스(104)를 포함할 수 있다. 프로세싱 리소스들(101)은 범용 중앙 처리 장치들(CPUs), 응용 주문형 집적 회로들(ASICs), 및 필드 프로그램 가능 게이트 어레이들(FPGAs), 프로그램 가능 로직 어레이들(PLGs) 등과 같은 프로그램 가능 로직 요소들을 포함할 수 있지만, 이에 제한되지 않는다. 비휘발성 저장 리소스들(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 나노미터 이하 프로세스 메모리, 그래핀 메모리, 실리콘-산화물-질화물-산화물-실리콘(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(PAT A), 소형 컴퓨터 시스템 인터페이스(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, 프론트 엔드 식별자, 논리 어드레스, 논리 블록 어드레스들(LBAs), 논리 장치 번호(LUN) 어드레스, 가상 장치 번호(VUN) 어드레스, 가상 저장 어드레스, 저장 어드레스, 물리적 어드레스, 매체 어드레스, 백엔드 어드레스 등을 포함할 수 있지만, 이에 제한되지 않는다.
논리 어드레스 공간(132)의 논리 용량은 논리 어드레스 공간(132)에서 LID의 수 및/또는 LID들에 의해 참조되는 저장 리소스들의 크기 및/또는 입도에 상응할 수 있다. 일부 실시예들에서, 논리 어드레스 공간(132)은 "성기게 제공될" 수 있다. 본원에 사용되는, 성기게 제공되는 논리 어드레스 공간(132)은 근본적 저장 리소스들의 물리적 저장 용량을 초과하는(예를 들어, 저장 매체(140)의 저장 용량을 초과하는) 논리 용량을 갖는 논리 어드레스 공간(132)을 지칭한다. 일 실시예에서, 저장층(130)은 저장 매체(140)의 물리적 저장 용량을 초과할 수 있는 64 비트 논리 어드레스 공간(132)(예를 들어, 2^26 고유 LID들을 포함하는 논리 어드레스 공간)을 제공하도록 구성된다. 큰, 성기게-제공되는 논리 어드레스 공간(132)은 네이밍 충돌 가능성을 감소시키면서 저장 클라이언트들(106)이 LID들의 근접한 영역들을 효율적으로 할당하고/하거나 참조하는 것을 가능하게 할 수 있다. 저장 할당을 위한 시스템들 및 방법들의 추가 실시예들이 "저장 할당을 위한 시스템들 및 방법들(System and Methods for Storage Allocation)"이라는 명칭으로 David Flynn 외에 의해 2013년 4월 17일자로 출원된 미국 특허 출원 제 13/865,153호에 개시되며, 그 전체가 참조로 본원에 포함된다.
저장층(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)은 각각의 물리적 저장 유닛이 어레이(115)의 각각의 열(118) 상에 있는 2개 이상의 물리적 저장 유닛의 조합을 지칭한다. 논리 소거 블록은 2개 이상의 물리적 소거 블록의 세트를 지칭하고, 논리 페이지는 2개 이상의 페이지의 세트를 지칭하고, 등이다. 일부 실시예들에서, 논리 소거 블록은 각각의 논리 저장 요소(115) 및/또는 뱅크(bank) 내의 소거 블록들을 포함할 수 있다. 대안적으로, 논리 소거 블록은 복수의 상이한 어레이(115) 내의 소거 블록들을 포함할 수 있고/있거나 고체 상태 저장 요소들의 다수의 뱅크에 걸쳐 있을 수 있다.
다시 도 1a를 참조하면, 저장층(130)은 로그 구조화된 저장 구성으로(예를 들어, 저장 로그로) 데이터를 저장 매체(140) 상에 저장하도록 구성되는 로그 저장 모듈(136)을 더 포함할 수 있다. 본원에 사용되는, "저장 로그" 또는 "로그 구조체"는 저장 매체(140)의 저장 어드레스 공간(144) 내에서 데이터의 순서화된 배열을 지칭한다. 저장 로그의 데이터는 영속적 메타데이터를 포함하고/하거나 이것과 연관될 수 있다. 따라서, 저장층(130)은 문맥의, 자체 설명 형식으로 데이터를 저장하도록 구성될 수 있다. 본원에 사용되는, 전후 사정과 관련되거나 자체 설명의 형식은 데이터가 영속적 메타데이터와 연관시켜 저장되는 데이터 형식을 지칭한다. 일부 실시예들에서, 영속적 메타데이터는 데이터를 식별하도록 구성될 수 있고, 이에 따라, 데이터의 논리 인터페이스를 포함하고/하거나 참조할 수 있다(예를 들어, 데이터와 연관되는 LID(들)을 포함할 수 있다). 영속적 메타데이터는 데이터의 소유자, 액세스 제어, 데이터 타입, 상대 위치 또는 데이터의 오프셋과 관련되는 정보, 데이터와 연관되는 저장 작동(들)(예를 들어, 극소 저장 작동들, 트랜잭션(transaction)들 등)과 관련되는 정보, 로그 시퀀스 정보, 데이터 저장 파라미터들(예를 들어, 압축 알고리즘, 암호화 등) 등을 포함하지만, 이에 제한되지 않는 다른 정보를 포함할 수 있다.
도 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 인코딩, 컨벌루셔널 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)의 상이한 부분들을 병합하는 것을 포함할 수 있다. 본원에 더 상세히 개시된 바와 같이, 복제 및/또는 이동 작동들은 중복 제거, 스냅샷, 논리 카피, 극소 작동, 트랜잭션 등과 같은 더 높은 레벨 저장 작동들을 효율적으로 구현하는데 사용될 수 있다. 복제 및 다른 논리 조작 작동들을 위한 시스템들 및 방법들의 실시예들이 David Flynn 외에 의해 2012년 3월 19일자로 출원된 "문맥 저장을 위한 논리 인터페이스들(Logical Interfaces for Contextual Storage)", "가상 저장층 지원 작동들 순서화, 가상 어드레스 공간, 극소 작동들 및 메타데이터 발견(Virtual Storage Layer Supporting Operations Ordering, A Virtual Address Space, Atomic Operations, and Metadata Discovery)"이라는 명칭으로 2011년 3월 18일자로 출원된 미국 가출원 제 61/454,235호, "논리 어드레스 공간을 관리하기 위한 시스템들, 방법들 및 인터페이스들(Systems, Methods, and Interfaces for Managing a Logical Address Space)"이라는 명칭으로 David Flynn 외에 의해 2012년 4월 17일자로 출원된 미국 가출원 제 61/625,647호, 및 "논리 어드레스 공간을 관리하기 위한 시스템들, 방법들 및 인터페이스들(Systems, Methods, and Interfaces for Managing a Logical Address Space)"이라는 명칭으로 David Flynn 외에 의해 2012년 4월 23일자로 출원된 미국 가출원 제 61/637,165호에 개시되며, 이들 각각이 참조로 포함된다.
도 3a를 참조하면, 저장층(130)은 복제 작동, 이동 작동, 병합 작동 등과 같은 저장층(130)에 의해 관리되는 데이터와 관련되는 논리 인터페이스 작동들을 관리하도록 구성되는 논리 인터페이스 관리 모듈(334)을 포함할 수 있다. LID들을 복제하는 것은 무엇보다도, 2개 이상의 상이한 세트의 LID들의 사용에 의해 데이터가 참조되는 것을 가능하게 하기 위해 저장 매체(140)에 저장되는 데이터의 논리 인터페이스를 변경하는 것을 포함할 수 있다. 따라서, 복제품을 생성하는 것은: a) 논리 어드레스 공간(132) (또는 논리 어드레스 공간(132)의 전용 부분)에서 LID들의 세트를 할당하는 것, 그리고 b) 무엇보다도, 저장 메타데이터(135)의 사용에 의해 "본래의" LID들의 세트와 동일한 저장 위치(들)와 할당된 LID들을 연관시키는 것을 포함할 수 있다. 그러므로, 복제품을 생성하는 것은 새로운 세트의 복제된 LID들을 특정 세트의 저장 위치들과 연관시키도록 구성되는 순방향 맵(160)에 하나 이상의 엔트리를 추가하는 것을 포함할 수 있다.
논리 인터페이스 관리 모듈(334)은 복제 동기화 정책에 따라 복제 작동들을 구현하도록 구성될 수 있다. 복제 동기화 정책은 복수의 복제품 또는 카피 중 제1의 것을 참조하여 수행되는 작동들이 다른 복제품들 또는 카피들로 어떻게 전파되는지를 판단하는데 사용될 수 있다. 예를 들어, 복제품들은 할당 작동들에 대하여 동기화될 수 있어, 복제품들 중 하나를 확장시키라는 요청이 다른 복제품들 및/또는 카피들을 확장시키는 것을 포함한다. 본원에 사용되는, 파일 (또는 다른 데이터 세그먼트)를 확장시키는 것은 파일의 크기, 범위 및/또는 규모를 증가시키는 것을 지칭하며, 파일의 크기, 범위 및/또는 규모를 증가시키는 것은 하나 이상의 논리 식별자를 복제품에 추가하는 것, 복제품에 할당된 논리 식별자들 중 하나 이상을 변경하는 것 등을 포함할 수 있다. 복제 동기화 정책은 병합 정책을 포함할 수 있으며, 병합 정책은 무엇보다도, 복제품들이 (이하에 추가로 상세히 개시되는) 병합 및/또는 폴드 작동으로 결합될 때, 복제품들 사이의 차이들이 어떻게 관리되는지를 판단할 수 있다.
도 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))을 업데이트하는 것, 데이터 세그먼트들의 업데이트된 논리 인터페이스를 나타내는 저장 매체(140) 상의 영속적 노트(366)를 저장하는 것, 그리고 업데이트된 논리 인터페이스와 일치하는 문맥 형식(패킷 형식(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)와 연관시키기 위해 저장 매체(140) 상에 영속적 노트(366)를 저장하는 것을 더 포함할 수 있다.
저장층(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)는 각각이 별도의 세트의 LID들을 포함하고, 각각이 각각의 저장층(130)에 상응하는 복수의 상이한 논리 어드레스 공간, 저장 디바이스(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들과 관련되는 데이터 작동들의 상대적 로그 순서를 보존할 수 있지만, 저장 로그는 절대적 타이밍 정보를 정확히 반영할 수 없다.
일부 실시예들에서, 저장 매체(130) 상에서 수행되는 저장 작동들의 상대적 타이밍 정보를 확립하는데 사용될 수 있는 로그 저장 모듈(136)은 데이터를 타이밍 정보와 연관시키도록 구성된다. 일부 실시예들에서, 타이밍 정보는 (타이밍 모듈(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에 대한 순방향 맵(160)(시간(tl))을 재구성하도록 구성될 수 있다. 시간(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 작동들을 체크포인팅(checkpointing)하기 위해 저장층(130)을 레버리징하도록 추가로 구성될 수 있다. 본원에 사용되는, "mmap" 작동은 파일들의 콘텐츠가 파일 시스템(906)의 표준 판독/기록 인터페이스들보다 오히려 표준 로드 및 저장 작동들을 통해 메모리의 페이지들로서 액세스되는 작동을 지칭한다. "msync" 작동은 (존재한다면) 파일의 불결한 페이지들을 저장 매체(140)로 플러싱하는 작동을 지칭한다. mmap 작동들의 이용은 파일 체크포인팅을 어렵게 할 수 있다. 파일 작동들은 메모리에서 수행되고 msync는 상태가 저장되어야 할 때, 발행된다. 그러나, msync 후의 파일의 상태는 현재의 인 메모리(in-memory) 상태를 나타내고 마지막 저장된 상태는 손실될 수 있다. 그러므로, 파일 시스템(906)이 msync 동안 크래싱(crashing)하게 되면, 파일은 일관되지 않는 상태로 남겨질 수 있다.
일부 실시예들에서, 파일 시스템(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)의 다른 부분으로 선택적으로 병합하고/하거나 폴딩(folding)하는 것을 포함할 수 있다. 본원에 사용되는, 논리 어드레스 공간(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)은 효율적인 극소 저장 작동들을 구현하도록 추가로 구성될 수 있다. 도 10은 극소 저장 작동들을 구현하도록 구성되는 저장층(130)을 포함하는 시스템(1000)의 일 실시예의 블록도이다. 본원에 사용되는, 극소 저장 작동은 완전히 전체로서 완료되거나 롤 백(roll back)되는 저장 작동을 지칭한다. 따라서, 극소 저장 작동들은 부분적으로 완료되지 않을 수 있으며; 저장층(130)은 불완전한 극소 저장 작동들의 데이터를 무효화하고/하거나 제거하도록 구성될 수 있다. 극소 저장 작동들, 그리고 특히 다수의 단계를 포함하고/하거나 다수의 상이한 LID 영역 또는 벡터와 관련되는 극소 저장 작동들을 구현하는 것은 높은 오버헤드 비용을 부과할 수 있다. 예를 들어, 일부 데이터베이스 시스템은 다수의 세트의 과다한 기록 작동들을 이용하여 극소 저장 작동들을 구현한다.
저장층(130)은 극소 저장 작동들의 효율을 증가시키기 위해 영역 복제, 영역 이동 및/또는 본원에 개시되는 다른 작동들을 레버리징할 수 있는 극소 저장 모듈(1036)을 포함할 수 있다. 일부 실시예들에서, 인터페이스(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)은 극소 저장 작동과 관련되는 저장 작동들을 미리 정해진 영역("프로세스 중" 영역(1032))으로 재지향시키도록 구성될 수 있다. 프로세스 중 영역(1032)은 저장 클라이언트들(106)에 액세스 가능하지 않은 논리 어드레스 공간(132)의 지정된 부분일 수 있다. 대안적으로, 프로세스 중 영역(1032)은 별도의 명칭 공간(예를 들어, 참조 맵(460) 및/또는 다른, 중개 어드레스 공간)으로 구현될 수 있다. 극소 저장 작동이 프로세스 중 영역(1032) 내에서 완료된(예를 들어, 구성 성분 I/O 벡터들 모두가 처리된) 후에, 극소 저장 모듈(1036)은 프로세스 중 영역(1032)에서 논리 어드레스 공간(132)에서의 목적지 영역(들)로 극소 저장 요청의 데이터를 이동시키기 위해 극소 영역 이동 작동을 수행할 수 있다. 앞서 개시된 바와 같이, 영역 이동 작동은 단일 영속적 노트(366)를 저장 매체(140)에 기록하는 것을 포함할 수 있다.
저장 클라이언트(106)는 벡터들(1040A 및 1040B)과 관련되는 극소 기록 요청을 발행할 수 있다. 도 10에 도시된 바와 같이, 극소 저장 작동이 수행되기 전에(상태(1015A)에서), 벡터(1040A)의 LID들(10 내지 13)은 저장 어드레스들(P1 내지 P4)에 결합될 수 있고 벡터(1040B)의 식별자들(36 내지 38)은 저장 어드레스들(P6 내지 P8)에 결합될 수 있다. 상태(1015B)에 도시된 바와 같이, 극소 저장 모듈(1036)은 극소 저장 작동들을 프로세스 중 영역(1032)으로 재지향시키도록 구성될 수 있다. 앞서 개시된 바와 같이, 프로세스 중 영역(1032)은 논리 어드레스 공간(132)의 지정된 영역을 포함할 수 있고/있거나 별도의 명칭 공간 내에서 구현될 수 있다. 프로세스들 중 영역(1032) 내의 벡터(1042A)는 벡터(1040A)의 LID들(10 내지 13)에 상응할 수 있고 프로세스 중 벡터(1042B)는 벡터(1040B)의 LID들(36 내지 38)에 상응할 수 있다. 벡터들(1042A 및 1042B)은 논리 어드레스 공간(132)에서의 상응하는 벡터들(1040A 및 1040B) (그리고/또는 순방향 맵(160)에서의 상응하는 엔트리들)을 참조하도록 구성되는 메타데이터를 포함할 수 있다. 상태(1015B)에서 극소 저장 작동들을 구현하는 것은 프로세스 중 벡터들(1042A 및 1042B)의 식별자들(Z0 내지 Z3 및/또는 Z6 내지 Z6)과 연관시켜 데이터를 저장 매체(140)에 첨부하는 것을 포함할 수 있다. 다른 저장 작동들은 프로세스 중 영역(1032) 내에서 극소 벡터 작동들과 동시에 수행되고/되거나 극소 벡터 작동들 내에 인터리빙될 수 있다.
극소 저장 작동이 완료 전에 실패하면, 벡터들(1040A 및 1040B)의 본래의 데이터는 영향을 받지 않을 수 있다. 재구성 동안, 프로세스 중 엔트리들과 연관되는 데이터(P9 내지 P13 및/또는 P100 내지 P102에서의 데이터)는 (프로세스 중 영역(1032)의 식별자들과의 연관으로 인해) 불완전한 극소 저장 작동의 일부로서 식별될 수 있고, 데이터는 제거될 수 있다.
도 10에 도시된 바와 같이 상태(1015B)에서, 앞서 개시된 바와 같이 프로세스 중 영역(1032)의 식별자들과 연관시켜 데이터를 저장 매체(140)에 첨부하는 것을 포함할 수 있는 극소 저장 작동(들)은 완료될 수 있다. 극소 저장 요청의 완료는 논리 어드레스 공간(132)에서의 목적지 논리 인터페이스에 상응하는 프로세스 중 벡터들(1042A 및 1042B)에 기록되는 데이터의 논리 인터페이스를 변경하기 위해 영역 이동 작동을 수행하는 것을 포함할 수 있다. 영역 이동 작동은 저장 어드레스(P9 내지 P13)를 LID들(10 내지 13)에 그리고 저장 어드레스(P100 내지 102)를 LID들(36 내지 38)에 결합하도록 영속적 노트(366)를 저장 매체(140) 상에 저장하는 극소 저장 작동을 수행하는 것을 포함할 수 있다. 영역 이동 작동은 도 4a 내지 도 4e의 참조 엔트리 실시예들 및/또는 도 5a 및 도 5b의 중개 매핑 실시예들을 포함하지만, 이에 제한되지 않는 다른 방식들로 구현될 수 있다.
도 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은 본원에 개시되는 저장층(130)을 사용하여 개방 대 폐쇄 파일 일관성을 구현하는 방법(1700)의 일 실시예의 흐름도이다. 단계(1710)는 파일의 데이터에 상응하는 LID 영역을 복제하는 단계를 포함할 수 있다. 앞서 개시된 바와 같이, 파일 시스템(906) (및/또는 다른 저장 클라이언트(106))는 폐쇄 대 개방 파일 일관성 모델을 구현하기 위해 저장층(130)을 레버리징하도록 구성될 수 있다. 따라서, 단계(1710)는 파일 시스템(906)으로부터의 요청에 응하여 그리고/또는 파일을 개방하라는 클라이언트로부터의 요청에 응하여 수행될 수 있다. 단계(1710)는 2개 이상의 상이한 세트의 LID들을 통해 파일 데이터의 저장 위치들을 참조하도록 파일 데이터의 논리 인터페이스를 변경하는 단계를 포함할 수 있다. 2개 이상의 상이한 세트의 LID들은 LID들의 작업 세트 및 본래의, 일관성 세트를 포함할 수 있다. 따라서, LID들의 본래의, 일관성 세트는 파일의 주버전에 상응할 수 있고, LID들의 작업 세트는 클라이언트에 의해 사용되는 파일의 작업 카피에 상응할 수 있다. 작업 카피는 다른 저장 클라이언트들에 의해 행해지는 동시에 일어나는 파일 변경들(클라이언트가 단계(1710)에서 파일을 개방한 후에 행해지는 변경들)로부터 격리될 수 있다. 마찬가지로, 논리 식별자들의 작업 세트에서 논리 식별자들을 참조하여 행해지는 변경들은 LID들의 파일 작업 세트가 (예를 들어, 파일을 폐쇄하는 것에 응하여) 다른 LID 세트들과 병합될 때까지, LID들의 본래의, 일관성 세트(파일의 주버전)로 전해지지 않을 수 있다. 단계(1710)의 영역 복제 작동은 도 3a 내지 도 3e의 다수의 참조 실시예들, 도 4a 내지 도 4e의 참조 색인 실시예들, 그리고/또는 도 5a 및 도 5b의 중간 매핑층 실시예들을 포함하여 본원에 개시되는 영역복제 실시예들 중 임의의 것을 이용하여 수행될 수 있다. 단계(1710)는 파일 개방 작동을 요청했던 저장 클라이언트(106)와 같은 저장 클라이언트(106)에 LID 세트들 중 하나 이상을 제공하는 단계를 더 포함할 수 있다. 저장 클라이언트는 LID들의 작업 세트가 구비될 수 있다. 대안적으로, 또는 부가적으로, 저장층(130)은 저장 클라이언트(106)에 LID들의 본래의, 일관성 세트 (또는 다른 세트)를 제공할 수 있고, 저장층(130)은 저장 클라이언트(106)의 저장 요청들을 LID들의 작업 세트로 재지향시킬 수 있다.
단계(1720)는 LID들의 작업 세트 내에서 저장 작동들을 수행하는 단계를 포함할 수 있다. 저장 작동들은 파일을 변경하도록 구성되는 저장 매체(140) 상에 하나 이상의 데이터 세그먼트(예를 들어, 파일의 하나 이상의 본래의, 변경되지 않은 데이터 세그먼트를 변경하고/하거나 오버라이트하도록 구성되는 데이터 세그먼트들)를 저장하는 것을 포함할 수 있다. 저장 작동들은 본원에 개시되는 바와 같이 LID들의 작업 세트에서의 LID들 중 하나 이상을 업데이트된 저장 위치들 및/또는 어드레스들에 결합시키는 것을 더 포함할 수 있다. 파일의 변경되지 않은 데이터에 관련되는 작업 세트 내의 LID들은 본래의 저장 어드레스들에 결합된 상태로 남을(LID들의 본래의, 일관성 세트와 동일한 저장 위치들에 결합된 상태로 남을) 수 있다.
단계(1722)는 앞서 개시된 바와 같이 본래의, 일관성 세트 LID들을 참조하여 본래의, 변경되지 않은 버전의 파일 및 상응하는 파일 데이터에 대한 액세스를 제공하는 단계를 포함할 수 있다. 단계(1722)는 무엇보다도, 단계(1710)에서와 같이 파일 LID들의 다른 복제품을 생성함으로써 다른 클라이언트들이 파일을 개방하는 것을 가능하게 하는 단계를 더 포함할 수 있다.
단계(1730)는 앞서 개시된 바와 같이 LID들의 작업 세트를 LID들의 본래의, 일관성 세트와 같은 다른 LID 영역으로 병합하는 단계를 포함할 수 있다. 단계(1730)는 클라이언트가 파일을 폐쇄하는 것에 응하여 수행될 수 있다. 단계(1730)는 앞서 개시된 바와 같이 병합 충돌들을 식별하고 해결하는 단계를 더 포함할 수 있다. 병합 충돌들을 해결하는 단계는 복제된 LID 영역들 중 하나 이상에서 행해지는 변경들을 무시하는 단계를 포함할 수 있다. 일부 실시예들에서, 예를 들어, 단계(1710)에서 생성되는 LID들의 작업 세트에 상응하는 변경들은 상이한 저장 클라이언트(106)의 LID들의 상이한 작업 세트를 참조하여 행해지는 변경들을 무시하거나, 이것들에 의해 무시될 수 있다. 병합 충돌들을 해결하는 단계는 LID들의 작업 세트를 참조하여 행해지는 변경들에 상응하는 제1 LID 영역 및 LID들의 상이한 작업 세트에서 다른 저장 클라이언트에 의해 행해지는 충돌하는 변경들에 상응하는 다른 LID 영역을 생성하기 위해 LID 영역을 분기시키는 단계를 포함할 수 있다. LID 영역들을 병합하는 단계는 앞서 개시된 바와 같이 영속적 노트(366)를 저장 매체(140) 상에 저장하는 단계, 데이터의 문맥 형식과 상반되는 논리 인터페이스를 통해 저장 매체(140) 상에 저장되는 데이터에 대한 액세스를 제공하는 단계, 및/또는 업데이트된 문맥 형식으로 데이터를 재기록하는 단계를 더 포함할 수 있다.
본 발명은 다양한 예시적인 실시예들을 참조하여 행해졌다. 그러나, 당업자는 변화들 및 변경들이 본 발명의 범위로부터 벗어나지 않는 범위 내에서 예시적인 실시예들에 행해질 수 있다는 점을 인지할 것이다. 예를 들어, 다양한 작동 단계뿐만 아니라, 작동 단계들을 수행하기 위한 구성 요소들은 특정 응용에 의존하여 또는 시스템의 작동과 연관되는 임의의 수의 비용 함수를 고려하여 대안적인 방식들로 구현될 수 있다(예를 들어, 단계들 중 하나 이상은 삭제되거나, 변경되거나, 다른 단계들과 결합될 수 있다). 그러므로, 본 발명은 제한적인 의미보다 오히려 예시적인 의미로 간주되어야 하고, 모든 그러한 변경은 본 발명의 범위 내에 포함되는 것으로 의도된다. 마찬가지로, 이익들, 다른 이점들 및 문제들에 대한 해결법들을 다양한 실시예들에 대하여 상술하였다. 그러나, 이익들, 이점들, 문제들에 대한 해결법들 및 임의의 이익, 이점 또는 해결법을 야기하거나 보다 명백하게 할 수 있는 임의의 요소(들)이 중요하거나, 필요하거나, 필연적인 특징부 또는 요소로 해석되지 않아야 한다. 본원에 사용되는, "포함하다," "포함하는"이란 용어들 및 이 용어들의 임의의 다른 변형은 비배타적인 포함을 다루는 것으로 의도되어, 요소들의 목록을 포함하는 프로세스, 방법, 물품 또는 장치가 그러한 요소들만을 포함하지 않고 그러한 프로세스, 방법, 시스템물품 또는 장치에 명확히 목록으로 나열되거나 내재하지 않는 다른 요소들을 포함할 수 있다. 또한 본원에 사용되는, "결합되는," "결합하는"이란 용어들 및 이 용어들의 임의의 다른 변형은 물리적 연결, 전기적 연결, 자기 연결, 광 연결, 통신적 연결, 기능적 연결 및/또는 임의의 다른 연결을 포함하는 것으로 의도된다.
게다가, 당업자에 의해 이해될 것인 바와 같이, 본 발명의 원리들은 저장 매체에서 구현되는 기계-판독 가능 프로그램 코드 수단을 갖는 기계-판독 가능 저장 매체 상의 컴퓨터 프로그램 제품에서 반영될 수 있다. 자기 저장 디바이스(하드 디스크, 플로피 디스크 등), 광 저장 디바이스(CD-ROM, DVD, 블루레이 디스크 등), 플래시 메모리 등을 포함하는 임의의 유형의, 비일시적 기계-판독 가능 저장 매체가 활용될 수 있다. 이러한 컴퓨터 프로그램 명령어들은 범용 컴퓨터, 특수 목적 컴퓨터 또는 기계를 생산하는 다른 프로그램 가능 데이터 프로세싱 장치로 로딩될 수 있어, 컴퓨터 또는 다른 프로그램 가능 데이터 프로세싱 장치 상에서 실행되는 명령어들이 지정된 기능들을 구현하는 수단을 생성한다. 이러한 컴퓨터 프로그램 명령어들은 컴퓨터 또는 특정 방식으로 기능하는 다른 프로그램 가능 데이터 프로세싱 장치를 지시할 수 있는 기계-판독 가능 메모리에 저장될 수도 있어, 기계-판독 가능 메모리에 저장되는 명령어들이 지정된 기능을 구현하는 구현 수단을 포함하는 제조의 물품을 생성한다. 컴퓨터 프로그램 명령어들은 일련의 작동 단계들이 컴퓨터-구현된 프로세스를 생성하는 컴퓨터 또는 다른 프로그램 가능 장치 상에서 수행되게 하도록 컴퓨터 또는 다른 프로그램 가능 데이터 프로세싱 장치로 로딩될 수도 있어, 컴퓨터 또는 다른 프로그램 가능 장치 상에서 실행되는 명령어들이 지정된 기능들을 구현하기 위한 단계들을 제공한다.
본 발명의 원리들이 다양한 실시예들에서 나타내어졌지만, 특히 특정 환경 및 작동 필요 조건들에 적응되는 구조체, 배열, 비율, 요소, 재료 및 구성 요소의 많은 변경이 본 발명의 원리들 및 범위로부터 벗어나지 않는 범위 내에서 이용될 수 있다. 이러한 그리고 다른 변화들 또는 변경들은 본 발명의 범위 내에 포함되는 것으로 의도된다.

Claims (22)

  1. 저장 디바이스의 하나 이상의 저장 위치 상에 저장되는 데이터를 어드레스 공간의 논리 식별자들과 연관시키는 단계;
    논리 식별자들의 작업 세트 및 논리 식별자들의 일관성 세트가 상기 동일한 하나 이상의 저장 위치와 연관되도록 상기 데이터에 액세스하라는 저장 클라이언트의 요청에 응하여 논리 식별자들의 작업 세트를 제공하는 단계; 및
    상기 데이터의 적어도 일부를 변경하도록 구성되는 저장 작동을 구현하는 단계를 포함하며, 상기 저장 작동을 구현하는 단계는 상기 작업 세트에서 상기 논리 식별자들 중 하나 이상의 저장 위치 연관들을 업데이트하는 단계 및 상기 논리 식별자들의 일관성 세트와 상기 하나 이상의 저장 위치 사이에 상기 연관들을 보존하는 단계를 포함하는, 방법.
  2. 제1항에 있어서,
    상기 저장 작동은 데이터를 상기 저장 디바이스 상의 로그에 첨부하는 것을 포함하며, 상기 방법은 상기 첨부된 데이터를 상기 논리 식별자들의 작업 세트의 논리 식별자와 연관시키는 단계를 더 포함하는, 방법.
  3. 제1항에 있어서,
    상기 저장 작동은 상기 저장 디바이스 상에 저장되는 상기 데이터의 본래의 데이터 세그먼트를 변경하도록 구성되는 데이터 세그먼트를 상기 저장 디바이스 상에 기록하는 것을 포함하며, 상기 방법은:
    상기 논리 식별자들의 상기 일관성 세트에서의 논리 식별자를 참조하여 상기 본래의 데이터 세그먼트에 대한 액세스를 제공하는 단계; 및
    상기 논리 식별자들의 작업 세트에서의 논리 식별자의 사용에 의해 상기 본래의 데이터 세그먼트를 변경하도록 구성되는 상기 데이터 세그먼트를 연관시키는 단계를 더 포함하는, 방법.
  4. 제1항에 있어서,
    상기 저장 작동은 데이터를 파일에 첨부하는 것을 포함하며, 상기 방법은:
    하나 이상의 부가 논리 식별자를 상기 논리 식별자들의 작업 세트에 할당하는 단계; 및
    상기 하나 이상의 부가 논리 식별자를 참조하여 상기 첨부된 데이터에 대한 액세스를 제공하는 단계를 더 포함하는, 방법.
  5. 제1항에 있어서,
    상기 저장 작동은 파일의 복수의 본래의 데이터 세그먼트 중 하나를 변경하도록 구성되며, 상기 방법은:
    상기 논리 식별자들의 일관성 세트의 논리 식별자들의 사용에 의해 상기 복수의 본래의 데이터 세그먼트를 참조하는 단계;
    상기 논리 식별자들의 작업 세트의 논리 식별자들의 사용에 의해 상기 저장 작동에 의해 변경되지 않은 상기 본래의 데이터 세그먼트들을 참조하는 단계; 및
    상기 논리 식별자들의 작업 세트의 논리 식별자를 통해 상기 저장 작동에 상응하는 데이터 세그먼트를 참조하는 단계를 더 포함하는, 방법.
  6. 제1항에 있어서,
    상기 저장 클라이언트에 의해 수행되는 저장 작동들 동안 저장 용량을 상기 저장 디바이스 상에 보존함으로써 상기 논리 식별자들의 작업 세트를 할당하는 단계를 더 포함하는, 방법.
  7. 제1항에 있어서,
    상이한 저장 클라이언트의 요청에 응하여 상기 저장 작동에 의해 변경되지 않는 상기 데이터에 대한 액세스를 제공하는 단계를 더 포함하는, 방법.
  8. 제1항에 있어서,
    상기 논리 식별자들의 일관성 세트 및 상기 논리 식별자들의 부가 작업 세트가 상기 동일한 저장 위치들과 연관되도록 상기 데이터에 상응하는 파일을 개방하라는 다른 저장 클라이언트의 요청에 응하여 논리 식별자들 공간의 부가 작업 세트를 할당하는 단계를 더 포함하고, 상기 연관들은 상기 저장 작동에 의해 변경되지 않는, 방법.
  9. 제1항에 있어서,
    상기 데이터는 상기 데이터를 각각의 논리 식별자와 연관시키도록 구성되는 영속적 메타데이터와 연관시켜 상기 저장 디바이스 상에 저장되며, 상기 방법은 상기 데이터를 상기 일관성 세트 및 상기 작업 세트의 논리 식별자들과 연관시키도록 구성되는 영속적 메타데이터를 상기 저장 디바이스에 첨부하는 단계를 더 포함하는, 방법.
  10. 제1항에 있어서,
    상기 데이터에 상응하는 파일을 폐쇄하라는 상기 저장 클라이언트의 요청에 응하여 상기 논리 식별자들의 일관성 세트를 상기 논리 식별자들의 작업 세트와 병합하는 단계를 더 포함하며, 상기 병합하는 단계는 상기 저장 클라이언트에 의해 상기 논리 식별자들의 작업 세트를 참조하여 행해지는 상기 파일에 대한 변경들을 상기 논리 식별자들의 일관성 세트로 포함시키는 단계를 포함하는, 방법.
  11. 제1항에 있어서,
    상기 논리 식별자들의 작업 세트를 상기 하나 이상의 저장 위치의 저장 어드레스들로 결합시키는 단계를 더 포함하는, 방법.
  12. 파일의 데이터를 논리 식별자들의 본래의 세트 및 논리 식별자들의 복제 세트 둘 다로 결합시킴으로써 저장 디바이스 상에 저장되는 데이터에 상응하는 파일을 복제하도록 구성되는 변환 모듈;
    상기 복제 논리 식별자들을 참조하여 상기 파일을 변경하도록 구성되는 저장 작동들을 수행하는 동안 상기 저장 디바이스 상에 저장되는 상기 파일 데이터를 보존하고 상기 보존된 파일 데이터와 상기 논리 식별자들의 본래의 세트 사이의 결합들을 보존하도록 구성되는 저장층; 및
    상기 저장 작동들을 수행한 후에 상기 본래의 논리 식별자들을 통해 상기 보존된 파일 데이터에 대한 액세스를 제공하도록 구성되는 인터페이스를 포함하는, 장치.
  13. 제12항에 있어서,
    상기 변환 모듈은 상기 파일을 개방하라는 요청에 응하여 상기 파일을 복제하도록 구성되고, 상기 인터페이스는 상기 파일과 관련되는 상이한 요청에 응하여 상기 논리 식별자들의 본래의 세트를 통해 상기 보존된 파일 데이터에 대한 액세스를 제공하도록 구성되는, 장치.
  14. 제13항에 있어서,
    상기 변환 모듈은 상기 개방된 파일과 관련되는 저장 작동들을 상기 논리 식별자들의 복제된 세트로 재지향시키도록 구성되는, 장치.
  15. 제12항에 있어서,
    상기 저장 작동들은 상기 파일에서 데이터 세그먼트를 제거하도록 구성되고, 상기 저장층은 상기 데이터 세그먼트와 상기 논리 식별자들의 복제된 세트에서의 논리 식별자 사이의 연관을 제거하고 상기 데이터 세그먼트와 상기 논리 식별자들의 본래의 세트에서의 논리 식별자 사이의 연관을 보존하도록 구성되는, 장치.
  16. 제12항에 있어서,
    상기 저장 작동들은 상기 파일의 기존 데이터를 변경하도록 구성되고, 상기 저장층은 상기 논리 식별자들의 복제된 세트의 하나 이상의 논리 식별자를 사용하여 상기 파일의 상기 변경된 데이터를 참조하고 상기 논리 식별자들의 본래의 세트의 논리 식별자들을 사용하여 상응하는 보존된 파일 데이터를 참조하도록 구성되는, 장치.
  17. 제12항에 있어서,
    상기 변환 모듈은 상기 논리 식별자들의 복제된 세트의 상기 논리 식별자들을 참조하여 수행되는 상기 저장 작동들의 파일 변경들을 상기 논리 식별자들의 본래의 세트로 포함시킴으로써 상기 복제된 논리 식별자들을 상기 본래의 논리 식별자들로 폴딩하도록 추가로 구성되는, 장치.
  18. 제17항에 있어서,
    상기 파일 변경들은 상기 파일의 데이터 세그먼트를 상기 저장 디바이스 상에 저장하는 것을 포함하고, 상기 파일 변경들을 포함시키는 것은 상기 데이터 세그먼트를 상기 논리 식별자들의 본래의 세트의 상기 논리 식별자들 중 하나와 연관시키기 위해 영속적 메타데이터를 상기 저장 디바이스 상에 저장하는 것을 포함하는, 장치.
  19. 제17항에 있어서,
    상기 파일 변경들은 상기 파일을 확장시키는 것을 포함하고, 상기 파일 변경들을 포함시키는 것은 상기 확장된 파일의 데이터를 참조하기 위해 논리 식별자들을 상기 본래의 논리 식별자들의 세트에 추가하는 것을 포함하는, 장치.
  20. 파일을 개방하라는 요청에 응하여 파일의 논리 카피를 생성하는 수단으로서, 상기 논리 카피를 생성하는 것은 2개의 상이한 세트의 논리 어드레스들을 통해 상기 파일의 데이터를 참조하는 것을 포함하는 수단;
    상기 2개의 상이한 세트의 논리 어드레스들 중 상기 제1의 것을 참조하여 상기 파일을 변경하는 수단; 및
    상기 제1 세트의 논리 어드레스들을 참조하여 상기 파일을 변경한 후에 상기 2개의 상이한 세트의 논리 어드레스들 중 제2의 것을 통해 상기 파일의 본래의 버전에의 액세스를 제공하는 수단을 포함하는, 시스템.
  21. 제20항에 있어서,
    병합 정책에 따라 상기 제1 세트의 논리 어드레스들 내에서 구현되는 파일 변경들을 참조하도록 상기 제2 세트의 논리 어드레스들을 업데이트함으로써 상기 2개의 상이한 세트의 논리 어드레스들을 병합하는 수단을 더 포함하는, 시스템.
  22. 제21항에 있어서,
    상기 파일을 변경하는 수단은 상기 파일의 변경된 데이터를 저장 디바이스 상에 저장되는 로그에 첨부하는 수단을 포함하고, 상기 2개의 상이한 세트의 논리 어드레스들을 병합하는 수단은 상기 제2 세트의 논리 어드레스들의 논리 어드레스를 상기 변경된 데이터와 연관시키도록 구성되는 영속적 노트를 상기 로그에 첨부하는 수단을 포함하는, 시스템.
KR1020167003843A 2013-07-26 2014-07-23 저장 일관성을 위한 시스템 및 방법 KR101718670B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201361858812P 2013-07-26 2013-07-26
US61/858,812 2013-07-26
US14/303,419 US20150032982A1 (en) 2013-07-26 2014-06-12 Systems and methods for storage consistency
US14/303,419 2014-06-12
PCT/US2014/047895 WO2015013452A1 (en) 2013-07-26 2014-07-23 Systems and methods for storage consistency

Publications (2)

Publication Number Publication Date
KR20160031012A true KR20160031012A (ko) 2016-03-21
KR101718670B1 KR101718670B1 (ko) 2017-03-21

Family

ID=52391499

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167003843A KR101718670B1 (ko) 2013-07-26 2014-07-23 저장 일관성을 위한 시스템 및 방법

Country Status (6)

Country Link
US (1) US20150032982A1 (ko)
JP (1) JP6290405B2 (ko)
KR (1) KR101718670B1 (ko)
DE (1) DE112014003076T5 (ko)
TW (1) TWI659318B (ko)
WO (1) WO2015013452A1 (ko)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190044145A (ko) * 2014-06-24 2019-04-29 구글 엘엘씨 원격 데이터베이스에 대한 변경사항들의 처리
WO2017092016A1 (en) * 2015-12-03 2017-06-08 Huawei Technologies Co., Ltd. A method a source storage device to send a source file and a clone file of the source file to a backup storage device, a source storage device and a backup storage device
KR102615151B1 (ko) 2016-06-23 2023-12-18 삼성전자주식회사 불휘발성 메모리 장치를 포함하는 스토리지 시스템
CN107704466B (zh) * 2016-08-09 2020-12-11 上海川源信息科技有限公司 数据储存系统
TWI610219B (zh) * 2016-08-09 2018-01-01 捷鼎國際股份有限公司 資料儲存系統
KR20180091296A (ko) 2017-02-06 2018-08-16 삼성전자주식회사 손상된 메타 데이터를 처리하는 스토리지 장치 및 상기 스토리지 장치의 동작 방법
US11132353B2 (en) * 2018-04-10 2021-09-28 Intel Corporation Network component, network switch, central office, base station, data storage, method and apparatus for managing data, computer program, machine readable storage, and machine readable medium
CN110413444B (zh) * 2018-04-27 2023-05-09 伊姆西Ip控股有限责任公司 实现存储卷的一致性组的快照集
US10832768B2 (en) 2018-07-03 2020-11-10 Micron Technology, Inc. Data storage based on data polarity
TWI687822B (zh) * 2018-11-29 2020-03-11 宏碁股份有限公司 日誌文件儲存及讀取的方法及裝置
CN110351386B (zh) * 2019-07-23 2022-09-16 华云工业互联网有限公司 一种不同副本间的增量同步方法及装置
US11468017B2 (en) * 2020-07-24 2022-10-11 Capital Thought Holdings L.L.C. Data storage system and method
US11636069B2 (en) * 2020-07-24 2023-04-25 Capital Thought Holdings L.L.C. Data storage system and method
CN113239001A (zh) * 2021-05-21 2021-08-10 珠海金山网络游戏科技有限公司 一种数据存储方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR19990013405A (ko) * 1997-07-10 1999-02-25 포만제프리엘 공유 메모리 프로세싱 시스템에 대한 캐시 일관성 네트워크 어댑터
US7870172B1 (en) * 2005-12-22 2011-01-11 Network Appliance, Inc. File system having a hybrid file system format
KR20120104302A (ko) * 2009-12-11 2012-09-20 마이크로소프트 코포레이션 순서 의존성 없는 일관성

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05197605A (ja) * 1991-10-03 1993-08-06 Mitsubishi Electric Corp ファイルシステム
US5682497A (en) * 1993-09-28 1997-10-28 Intel Corporation Managing file structures for a flash memory file system in a computer
DE19540915A1 (de) * 1994-11-10 1996-05-15 Raymond Engineering Redundante Anordnung von Festkörper-Speicherbausteinen
US6256637B1 (en) * 1998-05-05 2001-07-03 Gemstone Systems, Inc. Transactional virtual machine architecture
US7039773B2 (en) * 2003-04-29 2006-05-02 Oracle International Corporation Method and mechanism for efficient implementation of ordered records
US7664791B1 (en) * 2005-10-26 2010-02-16 Netapp, Inc. Concurrent creation of persistent point-in-time images of multiple independent file systems
US7651593B2 (en) * 2005-12-19 2010-01-26 Commvault Systems, Inc. Systems and methods for performing data replication
US7568078B2 (en) * 2006-07-26 2009-07-28 Cisco Technology, Inc. Epoch-based MUD logging
US8719501B2 (en) * 2009-09-08 2014-05-06 Fusion-Io Apparatus, system, and method for caching data on a solid-state storage device
US8706968B2 (en) * 2007-12-06 2014-04-22 Fusion-Io, Inc. Apparatus, system, and method for redundant write caching
US8046550B2 (en) * 2008-07-14 2011-10-25 Quest Software, Inc. Systems and methods for performing backup operations of virtual machine files
US8725934B2 (en) * 2011-12-22 2014-05-13 Fusion-Io, Inc. Methods and appratuses for atomic storage operations
JP5948340B2 (ja) * 2010-11-22 2016-07-06 ヒタチ データ システムズ エンジニアリング ユーケー リミテッドHitachi Data Systems Engineering Uk Limited データストレージシステムにおける、ファイルのクローニング及びデクローニング
WO2012129191A2 (en) * 2011-03-18 2012-09-27 Fusion-Io, Inc. Logical interfaces for contextual storage
US8812450B1 (en) * 2011-04-29 2014-08-19 Netapp, Inc. Systems and methods for instantaneous cloning
US9274937B2 (en) * 2011-12-22 2016-03-01 Longitude Enterprise Flash S.A.R.L. Systems, methods, and interfaces for vector input/output operations
EP2798486B1 (en) * 2011-12-29 2019-11-06 VMware, Inc. N-way synchronization of desktop images
US9116819B2 (en) * 2012-10-17 2015-08-25 Datadirect Networks, Inc. Reducing metadata in a write-anywhere storage system
GB2509057A (en) * 2012-12-18 2014-06-25 Ibm Predictive point-in-time copy for storage systems

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR19990013405A (ko) * 1997-07-10 1999-02-25 포만제프리엘 공유 메모리 프로세싱 시스템에 대한 캐시 일관성 네트워크 어댑터
US7870172B1 (en) * 2005-12-22 2011-01-11 Network Appliance, Inc. File system having a hybrid file system format
KR20120104302A (ko) * 2009-12-11 2012-09-20 마이크로소프트 코포레이션 순서 의존성 없는 일관성

Also Published As

Publication number Publication date
KR101718670B1 (ko) 2017-03-21
WO2015013452A1 (en) 2015-01-29
DE112014003076T5 (de) 2016-03-17
JP6290405B2 (ja) 2018-03-07
US20150032982A1 (en) 2015-01-29
JP2016528618A (ja) 2016-09-15
TWI659318B (zh) 2019-05-11
TW201516720A (zh) 2015-05-01

Similar Documents

Publication Publication Date Title
KR101769465B1 (ko) 극소 저장 작동을 위한 시스템 및 방법
KR101718670B1 (ko) 저장 일관성을 위한 시스템 및 방법
US10102075B2 (en) Systems and methods for storage collision management
US10019320B2 (en) Systems and methods for distributed atomic storage operations
US9563555B2 (en) Systems and methods for storage allocation
US9342256B2 (en) Epoch based storage management for a storage device
US10055420B1 (en) Method to optimize random IOS of a storage device for multiple versions of backups using incremental metadata
US10380026B2 (en) Generalized storage virtualization interface
US9323465B2 (en) Systems and methods for persistent atomic storage operations
US10558561B2 (en) Systems and methods for storage metadata management
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
US9996426B1 (en) Sparse segment trees for high metadata churn workloads
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
US20160026408A1 (en) Storage device metadata synchronization

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
FPAY Annual fee payment

Payment date: 20200218

Year of fee payment: 4