KR20160048814A - 지속적 데이터 구조 - Google Patents

지속적 데이터 구조 Download PDF

Info

Publication number
KR20160048814A
KR20160048814A KR1020167006218A KR20167006218A KR20160048814A KR 20160048814 A KR20160048814 A KR 20160048814A KR 1020167006218 A KR1020167006218 A KR 1020167006218A KR 20167006218 A KR20167006218 A KR 20167006218A KR 20160048814 A KR20160048814 A KR 20160048814A
Authority
KR
South Korea
Prior art keywords
acm
data
commit
module
data structure
Prior art date
Application number
KR1020167006218A
Other languages
English (en)
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 KR20160048814A publication Critical patent/KR20160048814A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1441Resetting or repowering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0804Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc
    • G06F2212/1036Life time enhancement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7203Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks

Abstract

지속적 데이터 구조를 위한 장치, 시스템, 방법, 및 컴퓨터 프로그램 제품이 개시된다. 방법은 논리적 식별자(1025)를 데이터 구조와 연관시키는 단계를 포함한다. 방법은 데이터 구조의 데이터를 휘발성 메모리 모듈(1011, 1013)의 제1 영역(5)에 기입하는 단계를 포함한다. 휘발성 메모리 모듈(1011, 1013)은 트리거에 응답하여 데이터가 보존되는 것을 보장하도록 구성될 수 있다. 방법은, 데이터 구조의 데이터가 논리적 식별자(1025)와 연관되어 머무르도록, 데이터 구조의 데이터를 휘발성 메모리 모듈(1011, 1013)로부터 비휘발성 저장 매체(110, 1110, 1502)에 복사하는 단계를 포함한다. 방법은, 논리적 식별자(1025)를 이용하여 휘발성 메모리 모듈(1011, 1013)에 존재하는 데이터 구조의 데이터와 비휘발성 저장 매체(110, 1110, 1502)에 저장된 데이터 구조의 데이터로의 액세스를 제공하는 단계를 포함한다.

Description

지속적 데이터 구조{PERSISTENT DATA STRUCTURES}
본 개시내용은 데이터 구조에 관한 것으로, 더 구체적으로는, 데이터 구조를 지속적으로 저장하는 것에 관한 것이다.
데이터 구조는, 애플리케이션이 실행될 때 데이터를 조직화하고 추적하기 위해 애플리케이션에 의해 종종 이용된다. 데이터 구조는 대개 휘발성이고 애플리케이션이 실행될 때마다 간단히 재선언된다. 전통적으로 휘발성인 성향으로 인해, 데이터 구조가 보호되고 부주의로 오버라이트되지 않도록 보장하는 주의가 거의 취해지지 않는다.
예를 들어, 잘못된 포인터를 이용한 잘못된 기입은 휘발성 메모리 내의 데이터 구조 또는 데이터 구조의 일부를 오버라이트할 수 있다. 그러나, 데이터 구조는 어쨌든 휘발성이기 때문에, 애플리케이션이 데이터 구조의 무결성을 보호하기 위해 거의 또는 아무것도 할 수 없다.
추가로, 애플리케이션은 후속 실행 동안에 데이터 구조의 데이터로부터 혜택을 받을 수 있다. 특히 전원 고장이나 부적절한 셧다운으로 인해 휘발성 데이터 구조가 소실된다면, 애플리케이션의 실행 상태 또는 기타의 데이터도 역시 소실될 수 있다.
지속적 데이터 구조의 방법들이 제시된다. 한 실시예에서, 방법은 논리적 식별자와 데이터 구조를 연관시키는 단계를 포함한다. 추가 실시예에서, 방법은 데이터 구조의 데이터를 휘발성 메모리 모듈의 제1 영역에 기입하는 단계를 포함한다. 휘발성 메모리 모듈은, 소정 실시예에서, 트리거에 응답하여 데이터가 보존되는 것을 보장하도록 구성된다. 또 다른 실시예에서, 방법은, 데이터 구조의 데이터가 논리적 식별자와 연관되어 머무르도록, 데이터 구조의 데이터를 휘발성 메모리 모듈로부터 비휘발성 저장 매체에 복사하는 단계를 포함한다. 한 실시예에서, 방법은, 논리적 식별자를 이용하여 휘발성 메모리 모듈에 존재하는 데이터 구조의 데이터와 비휘발성 저장 매체에 저장된 데이터 구조의 데이터로의 액세스를 제공하는 단계를 포함한다.
지속적 데이터 구조를 위한 또 다른 방법이 제시된다. 한 실시예에서, 방법은 논리적 식별자와 데이터 구조를 연관시키는 단계를 포함한다. 추가 실시예에서, 방법은, 데이터 구조가 상태 변화에 응답하여 보존되는 것을 보장하도록 구성된 휘발성 메모리 디바이스에 데이터 구조를 저장하는 단계를 포함한다. 소정 실시예에서, 방법은, 데이터 구조가 논리적 식별자와 연관되어 머무르도록, 데이터 구조를 휘발성 메모리 디바이스로부터 비휘발성 저장 매체에 복사하는 단계를 포함한다.
지속적 데이터 구조를 위한 장치들이 제시된다. 한 실시예에서, 할당 모듈은 요청에 응답하여 지속적 트랜잭션 로그(persistent transaction log)를 초기화하도록 구성된다. 소정 실시예들에서, 기입 모듈은, 데이터의 지속성을 보장하도록 구성된 휘발성 메모리에 부가된 데이터를 기입함으로써 지속적 트랜잭션 로그에 데이터를 부가하도록 구성된다. 추가 실시예에서, 집행 모듈은, 지속적 트랜잭션 로그에서 데이터가 오버라이트되는 것을 방지하는 하나 이상의 규칙을 집행하도록 구성된다.
지속적 데이터 구조를 위한 또 다른 장치가 제시된다. 한 실시예에서, 장치는, 지속적 데이터 구조에 대한 하나 이상의 요청을 만족시키기 위한 수단을 포함한다. 소정 실시예에서, 지속적 데이터 구조는, 휘발성 버퍼에 저장된 데이터와 비휘발성 기록 매체에 저장된 데이터를 포함한다. 추가 실시예에서, 장치는 휘발성 버퍼에 저장된 데이터를 비휘발성 기록 매체에 커밋(commit)하기 위한 수단을 포함한다. 또 다른 실시예에서, 장치는, 지속적 데이터 구조와 연관된 논리적 식별자를 이용하여 재시작 이벤트 후에 비휘발성 기록 매체로부터의 지속적 데이터 구조로의 액세스를 제공하기 위한 수단을 포함한다.
지속적 데이터 구조를 위한 추가적인 장치가 제시된다. 한 실시예에서, 자동-커밋 메모리 모듈(auto-commit memory module)은 커밋 이벤트에 응답하여 하나 이상의 메모리 버퍼로부터 비휘발성 저장 디바이스에 데이터를 커밋하도록 구성된다. 소정 실시예들에서, 지속적 데이터 구조 모듈은, 지속적 데이터 구조가 비휘발성 저장 디바이스에 커밋되도록 하나 이상의 메모리 버퍼에 기입하기 위해 지속적 데이터 구조를 위한 데이터를 자동-커밋 메모리 모듈에 제공하도록 구성된다.
지속적 데이터 구조를 위한 동작을 수행하도록 실행가능한 컴퓨터 사용가능한 프로그램 코드를 저장하는 컴퓨터 판독가능한 저장 매체를 포함하는 컴퓨터 프로그램 제품도 역시 제시된다. 한 실시예에서, 동작은 논리적 식별자를 이용하여 지속적 로그로의 액세스를 제공하는 것을 포함한다. 추가 실시예에서, 동작은 지속적 로그에 부가된 데이터를 휘발성 메모리에 버퍼링하는 것을 포함한다. 소정 실시예들에서, 휘발성 메모리는 커밋 트리거에 응답하여 버퍼링된 데이터를 비휘발성 저장 매체에 자동-커밋하도록 구성될 수 있다. 또 다른 실시예에서, 동작은, 지속적 로그의 데이터가 논리적 식별자와 연관되어 머무르도록 버퍼링된 데이터를 휘발성 메모리로부터 비휘발성 저장 매체에 복사하는 단계를 포함한다.
본 개시내용의 이점들이 용이하게 이해되도록 하기 위하여, 앞서 간략히 설명된 본 개시내용의 더 많은 특정한 설명이 첨부된 도면들에 예시되어 있는 특정한 실시예들을 참조하여 이루어질 것이다. 이들 도면들은 본 개시내용의 전형적인 실시예만을 도시하는 것이고 그에 따라 본 개시내용의 범위를 제한하는 것으로 간주되어서는 안 된다는 것을 이해하면서, 본 개시내용이, 다음과 같은 첨부된 도면들의 이용을 통해 추가적인 구체성 및 상세사항과 함께 기술되고 설명될 것이다:
도 1은 지속적 데이터 구조를 위한 시스템의 한 실시예를 나타내는 개략적 블록도이다;
도 2는 지속적 데이터 구조를 위한 시스템의 또 다른 실시예를 나타내는 블록도이다;
도 3은 지속적 데이터 구조를 위한 시스템의 추가 실시예의 블록도이다;
도 4는 복수의 자동-커밋 메모리를 포함하는 시스템의 블록도이다;
도 5는 커밋 관리 장치에서 구현된 자동-커밋 메모리의 블록도이다;
도 6은 지속적 데이터 구조를 위한 시스템의 또 다른 실시예의 블록도이다;
도 7은 자동-커밋 메모리를 위한 방법의 한 실시예의 흐름도이다;
도 8은 자동-커밋 메모리를 위한 방법의 또 다른 실시예의 흐름도이다;
도 9는 자동-커밋 메모리를 위한 방법의 또 다른 실시예의 흐름도이다;
도 10a는 지속적 데이터 구조 모듈의 한 실시예를 나타내는 개략적 블록도이다;
도 10b는 지속적 데이터 구조 모듈의 또 다른 실시예를 나타내는 개략적 블록도이다;
도 11은, 맵핑 구조, 성긴 논리적 주소 공간(sparse logical address space), 및 로그-기반의 기입 구조(log-based writing structure)의 한 실시예를 나타내는 개략적 블록도이다.
도 12는 지속적 데이터 구조를 위한 방법의 한 실시예를 나타내는 개략적 흐름도이다;
도 13은 지속적 데이터 구조를 위한 방법의 또 다른 실시예를 나타내는 개략적 흐름도이다.
본 명세서 전체를 통한 피쳐들, 이점들, 또는 유사한 표현들에 대한 언급은, 본 개시내용에 의해 실현될 수 있는 피쳐들 및 이점들 모두가 본 개시내용의 임의의 하나의 실시예이거나 그 내에 존재해야 한다는 것을 암시하는 것은 아니다. 오히려, 피쳐들 및 이점들을 언급하는 표현들은, 한 실시예와 관련하여 기술되는 특정한 피쳐, 이점, 또는 특성이 본 개시내용의 적어도 한 실시예에 포함된다는 것을 의미하는 것으로 이해되어야 한다. 따라서, 본 명세서 전체에 걸친, 피쳐들 및 이점들, 및 유사한 표현들에 대한 논의는, 동일한 실시예를 언급할 수도 있지만, 반드시 그런 것은 아니다.
본 개시내용의 설명되는 피쳐들, 이점들, 및 특성들은, 하나 이상의 실시예에서 임의의 적절한 방식으로 결합될 수도 있다. 관련 기술분야의 통상의 기술자라면, 본 개시내용은 특정한 실시예의 특정한 피쳐들 또는 이점들 중 하나 이상 없이도 실시될 수 있다는 것을 인식할 것이다. 다른 사례들에서, 본 개시내용의 모든 실시예들에서 존재하는 것은 아닐 수도 있는 추가적인 피쳐들 및 이점들이 소정 실시예들에서 인식될 수 있다. 본 발명의 이들 피쳐들 및 이점들은, 이하의 설명과 첨부된 청구항들로부터 더욱 충분히 명백해지거나, 이하에 제시되는 본 개시내용의 실시에 의해 알 수 있을 것이다.
본 명세서에서 설명되는 많은 기능 유닛들은 그들의 구현 독립성을 더욱 특별히 강조하기 위하여 모듈들로서 라벨링되었다. 예를 들어, 모듈은, 맞춤형 VLSI 회로나 게이트 어레이를 포함하는 하드웨어 회로, 로직 칩, 트랜지스터, 또는 기타의 개별 부품 등의 기성품 반도체로서 구현될 수 있다. 모듈은 또한, 필드 프로그래머블 게이트 어레이, 프로그래머블 어레이 로직, 프로그래머블 로직 디바이스 등의 프로그래머블 하드웨어 디바이스로 구현될 수도 있다.
모듈들은 또한 다양한 유형의 프로세서에 의한 실행을 위해 소프트웨어로 구현될 수도 있다. 실행가능한 코드의 식별된 모듈은, 예를 들어, 객체, 프로시져, 또는 함수로서 구성될 수 있는, 컴퓨터 명령어들의 하나 이상의 물리적 또는 논리적 블록들을 포함할 수 있다. 그럼에도 불구하고, 식별된 모듈의 실행파일들은 물리적으로 함께 위치할 필요는 없고, 논리적으로 함께 결합될 때, 모듈을 포함하고 그 모듈의 기술된 목적을 달성하는, 상이한 위치들에 저장된 이질적인 명령어들을 포함할 수 있다.
사실상, 실행가능한 코드의 모듈은, 단일 명령어, 또는 다수의 명령어일 수 있고, 심지어, 수 개의 상이한 코드 세그먼트들에 걸쳐, 상이한 프로그램들 사이에, 및 수 개의 메모리 디바이스들에 걸쳐 분산될 수도 있다. 유사하게, 연산 데이터는 여기서는 모듈들 내에서 식별되고 예시될 수 있지만, 임의의 적절한 형태로 임베딩되거나 임의의 적절한 유형의 데이터 구조 내에서 구성될 수도 있다. 연산 데이터는 단일 데이터 세트로서 수집되거나, 상이한 저장 디바이스들을 포함한 상이한 장소들에 분포될 수도 있고, 단순히 시스템이나 네트워크 상에 전자적 신호로서, 적어도 부분적으로 존재할 수도 있다. 모듈 또는 모듈의 부분들이 소프트웨어로 구현되는 경우, 소프트웨어 부분들은 하나 이상의 컴퓨터 판독가능한 매체에 저장된다.
본 명세서 전체에 걸쳐 "한 실시예", "실시예", 또는 유사한 용어에 대한 언급은, 그 실시예와 관련하여 기술되는 특정한 피쳐, 구조, 또는 특성이 본 개시내용의 적어도 한 실시예에 포함된다는 것을 의미한다. 따라서, 본 명세서 전체에 걸쳐 문구 "한 실시예에서", "실시예에서", 또는 유사한 구문에 대한 언급은, 반드시 모두가 동일한 실시예를 언급하는 것은 아니다.
컴퓨터 판독가능한 매체에 대한 언급은 디지털 처리 장치 상에 머신-판독가능한 명령어를 저장할 수 있는 임의의 형태를 취할 수 있다. 컴퓨터 판독가능한 매체는, 컴팩트 디스크, 디지털-비디오 디스크, 자기 테이프, 베르누이 드라이브, 자기 디스크, 펀치 카드, 플래시 메모리, 집적 회로, 또는 기타의 디지털 처리 장치 메모리 디바이스에 의해 구현될 수 있다.
또한, 본 개시내용의 설명된 피쳐들, 구조들 또는 특성들은, 하나 이상의 실시예에서 임의의 적절한 방식으로 결합될 수도 있다. 이하의 설명에서, 본 개시내용의 실시예들의 철저한 이해를 제공하기 위해, 프로그래밍, 소프트웨어 모듈, 사용자 선택, 네트워크 트랜잭션, 데이터베이스 질의, 데이터베이스 구조, 하드웨어 모듈, 하드웨어 회로, 하드웨어 칩 등의 예와 같은 수 많은 특정한 세부사항들이 제공된다. 그러나, 당업자라면, 본 개시내용은 하나 이상의 상기 특정한 세부사항 없이, 또는 다른 방법, 컴포넌트, 재료 등을 이용하여 실시될 수 있다는 것을 인식할 것이다. 다른 사례에서, 공지된 구조, 재료, 또는 동작은 본 개시내용의 양태를 흐리게 하는 것을 피하기 위하여 도시되거나 상세히 설명되지 않는다.
여기에 포함된 개략적 흐름도는 일반적으로 논리적 흐름도로서 개시된다. 따라서, 도시된 순서 및 라벨링된 단계들은 제시되는 방법의 한 실시예를 나타낸다. 예시된 방법의 하나 이상의 단계들, 또는 그 일부와, 기능, 로직, 또는 효과에 있어서 동등한 다른 단계들 및 방법들을 생각해 볼 수도 있다. 추가적으로, 채용되는 포맷 및 심볼들은, 본 방법의 논리 단계들을 설명하기 위해 제공되는 것이지 본 방법의 범위를 제한하지 않는 것으로 이해해야 한다. 흐름도에서 다양한 화살표 유형과 라인 유형들이 채용될 수 있지만, 이들은 대응하는 방법의 범위를 제한하지 않는 것으로 이해해야 한다. 사실상, 일부 화살표 또는 기타의 커넥터들은 본 방법의 논리적 흐름만을 표시하기 위해 이용될 수 있다. 예를 들어, 화살표는, 도시된 방법의 나열된 단계들간의 명시되지 않은 지속기간의 대기나 모니터링 기간을 나타낼 수도 있다. 추가적으로, 특정한 방법이 발생하는 순서는 도시된 대응하는 단계들의 순서를 고집하거나 고집하지 않을 수도 있다.
도 1은 데이터 구조를 보존하기 위한 시스템(100)의 한 실시예를 도시한다. 소정 실시예에서, 시스템(100)은, 전원 고장, 전력 감소, 또는 기타의 전력 소실시에도, 데이터를 보존하고 및/또는 전력 관리를 제공한다. 도시된 실시예에서, 시스템(100)은, 호스트 컴퓨팅 디바이스(114)와 저장 디바이스(102)를 포함한다. 호스트(114)는, 서버, 랩탑, 데스크탑, 또는 기타의 컴퓨팅 디바이스 등의 컴퓨터일 수 있다. 호스트(114)는, 메모리, 프로세서, 버스, 및 기타의 컴포넌트 등의 컴포넌트를 포함할 수 있다.
호스트(114)는 저장 디바이스(102)에 데이터를 저장하고 (도시되지 않은) 통신 접속을 통해 저장 디바이스(102)와 데이터를 교환한다. 저장 디바이스(102)는 호스트(114)에 내부적이거나 호스트(114)에 외부적일 수 있다. 통신 접속은, 버스, 네트워크, 또는 호스트(114)와 저장 디바이스(102) 사이의 데이터의 전송을 허용하는 다른 방식의 접속일 수 있다. 한 실시예에서, 저장 디바이스(102)는 PCI 익스프레스(PCI-e) 등의 PCI 접속에 의해 호스트(114)에 접속된다. 저장 디바이스(102)는 호스트(114) 상의 PCI-e 접속부 내에 플러깅되는 카드일 수도 있다.
저장 디바이스(102)는 또한, 판독, 기입, 소거 등의 데이터 저장 동작을 수행하는데 필요한 전력을 저장 디바이스(102)에 제공하는 주 전원에 저장 디바이스(102)를 접속하는 주 전력 접속(130)을 가진다. 저장 디바이스(102)는, 정상 동작 조건 하에서, 주 전력 접속(130)을 통해 주 전원으로부터 필요한 전력을 수신한다. 도 1에 도시된 실시예 등의 소정 실시예에서, 주 전력 접속(130)은, 저장 디바이스(102)를 호스트(114)에 접속하고, 호스트(114)는 저장 디바이스(102)에 전력을 공급하는 주 전원으로서 역할한다. 소정 실시예에서, 앞서 논의된 주 전력 접속(130)과 통신 접속은 호스트(114)와 저장 디바이스(102) 사이의 동일한 물리적 접속의 일부이다. 예를 들어, 저장 디바이스(102)는 PCI 접속을 통해 전력을 수신할 수 있다.
다른 실시예들에서, 저장 디바이스(102)는 주 전력 접속(130)을 통해 외부 전원에 접속할 수 있다. 예를 들어, 주 전력 접속(130)은 (종종 전력 브릭(power brick)이라고 하는) 전력 변환기인 주 전원에 저장 디바이스(102)를 접속할 수 있다. 본 기술분야의 통상의 기술자라면, 저장 디바이스(102)에 의해 전력을 수신할 수 있는 다양한 방식이 존재할 수 있고 저장 디바이스(102)에 대한 주 전원으로서 역할할 수 있는 다양한 디바이스들이 존재할 수 있다는 것을 이해할 것이다.
저장 디바이스(102)는, 호스트(114)에게 비휘발성 저장, 메모리, 및/또는 기록 매체(110)를 제공한다. 도 1은, 기입 데이터 파이프라인(106), 판독 데이터 파이프라인(108), 비휘발성 메모리(110), 저장 제어기(104), 지속적 데이터 구조 모듈(1009), 자동-커밋 메모리(1011), 및 보조 전원(124)을 포함하는 저장 디바이스(102)를 도시한다. 저장 디바이스(102)는, 저장 디바이스(102)의 더 간단한 뷰를 제공하기 위하여 도시되지 않은 추가적 컴포넌트들을 포함할 수 있다. 또한, 도시된 컴포넌트들은 저장 디바이스(102)의 일부이지만, 다른 실시예들에서는, 저장 제어기(104), 지속적 데이터 구조 모듈(1009), 자동-커밋 메모리(1011) 등 중 하나 이상의 적어도 일부가, 컴퓨터 실행가능한 코드, 디바이스 드라이버, 운영 체제 등으로서 호스트(114) 상에 위치할 수 있다.
비휘발성 메모리(110)는, 저장 디바이스(102)에 전력이 공급되지 않는 때에도 데이터가 유지되도록 데이터를 저장한다. 비휘발성 메모리(110)의 예로서는, 플래시 메모리, 랜덤 액세스 메모리(나노 RAM 또는 NRAM), 나노크리스탈 와이어-기반의 메모리, 실리콘-산화물 기반의 서브-10 나노미터 처리 메모리, 그래핀 메모리, 실리콘-산화물-질화물-산화물-실리콘(SONOS), 저항식 랜덤 액세스 메모리(RRAM), 프로그래머블 금속화 셀(PMC), 도전성-브릿징 RAM(CBRAM), 자기-저항식 RAM(MRAM), 동적 RAM(DRAM), 상변화 RAM(PCM 또는 PRAM), 또는 기타의 비휘발성 고체상태 저장 매체가 포함된다. 다른 실시예들에서, 비휘발성 메모리(110)는, 자기 매체, 광학 매체, 또는 다른 유형의 비휘발성 저장 매체를 포함할 수 있다. 예를 들어, 이들 실시예들에서, 비휘발성 저장 디바이스(102)는, 하드 디스크 드라이브, 광학 저장 드라이브 등을 포함할 수 있다.
비휘발성 메모리(110)는 여기서는 "메모리 매체"라 부르지만, 다양한 실시예들에서, 비휘발성 메모리(110)는, 더 일반적으로는, 데이터를 기록할 수 있는 비휘발성 기록 매체를 포함할 수 있고, 비휘발성 기록 매체는, 비휘발성 메모리 매체, 비휘발성 저장 매체 등이라 부를 수도 있다. 또한, 비휘발성 저장 디바이스(102)는, 다양한 실시예들에서, 비휘발성 기록 매체, 비휘발성 메모리 디바이스, 비휘발성 저장 디바이스 등을 포함할 수 있다.
저장 디바이스(102)는 또한, 비휘발성 메모리(110)로의 데이터의 저장과 회수를 조율하는 저장 제어기(104)를 포함한다. 저장 제어기(104)는, 하나 이상의 인덱스를 이용하여, 데이터를 위치파악 및 회수하고, 저장 디바이스(102)에 저장된 데이터에 관한 기타의 동작들을 수행할 수 있다. 예를 들어, 저장 제어기(104)는, 쓰레기 수집(garbage collection) 등의 데이터 그루밍(data grooming) 동작을 수행하기 위한 그루머(groomer)를 포함할 수 있다.
도시된 바와 같이, 저장 디바이스(102), 소정 실시예에서, 기입 데이터 파이프라인(106)과 판독 데이터 파이프라인(108)을 구현하고, 그 예는 도 3과 관련하여 이하에서 더 상세히 설명된다. 기입 데이터 파이프라인(106)은, 데이터가 호스트(114)로부터 비휘발성 메모리(110)에 전송될 때 그 데이터에 관한 소정의 동작을 수행할 수 있다. 이들 동작들은, 예를 들어, 에러 정정 코드(ECC) 생성, 암호화, 압축, 및 기타의 것들을 포함할 수 있다. 판독 데이터 파이프라인(108)은, 비휘발성 메모리(110) 바깥으로 판독되어 호스트(114)에 전송되고 있는 데이터에 관한 유사한 및 잠재적으로는 역 동작을 수행할 수 있다.
저장 디바이스(102)는 또한, 저장 디바이스(102)가 주 전력 접속(130)을 통해 충분한 전력을 수신하지 못하게 되는 완전한 또는 부분적 전력 중단시에 전력을 제공하는 보조 전원(124)을 포함한다. 전력 중단은, 저장 디바이스(102)가 주 전력 접속(130)을 통해 전력을 수신하는 것을 예기치 않게 중단하게 하거나, 주 전력 접속(130)을 통해 저장 디바이스(102)에 의해 수신되는 전력에서의 상당한 감소를 야기하는 임의의 이벤트이다. 한 실시예에서, 전력에서의 상당한 감소는 미리정의된 임계치 아래로 떨어지는 전력을 포함한다. 추가 실시예에서, 미리정의된 임계치는, 주 전력 접속(130)으로부터의 전력의 레벨에서의 정상 등락을 허용하도록 선택된다. 예를 들어, 호스트(114)와 저장 디바이스(102)가 존재하는 건물로의 전력이 정전될 수 있다. (저장 디바이스(102)에 전력을 제공하는 호스트(114)의 부적절한 셧다운 등의) 사용자 행위, 주 전력 접속(130)에서의 고장, 또는 주 전원에서의 고장은 저장 디바이스(102)가 전력을 수신하는 것을 중단하게 할 수 있다. 수 많은 다양한 전력 중단이 저장 디바이스(102)에 대한 예기치 않은 전력 소실을 야기할 수 있다.
보조 전원(124)은, 하나 이상의 배터리, 하나 이상의 커패시터, 커패시터 뱅크, 전원으로의 별개의 접속 등을 포함할 수 있다. 한 실시예에서, 보조 전원(124)은, 주 전력 접속(130)으로부터의 전력 중단 또는 기타의 전력 감소 동안에 저장 디바이스(102)에 전력을 적어도 전력 유지 시간(power hold-up time) 동안 제공한다. 보조 전원(124)은, 추가 실시예에서, 저장 디바이스(102)가 비휘발성 메모리(110)에 있지 않은 데이터를 비휘발성 메모리(110) 내에 플러시(flush) 하기에 충분히 긴 전력 유지 시간을 제공한다. 그 결과, 저장 디바이스(102)는, 저장 디바이스(102)로 하여금 기능을 중단하게 하는 전력 결핍 이전에 저장 디바이스(102)에 영구적으로 저장되지 않은 데이터를 보존할 수 있다. 소정 구현에서, 보조 전원(124)은, 공간을 절약하고, 비용을 줄이며, 저장 디바이스(102)를 감소화하기 위해, 미리정의된 전력 유지 시간을 제공할 수 있는 가능한 가장 작은 커패시터들을 포함할 수 있다. 한 실시예에서, 커패시터들은 일반적으로 더 신뢰성 있고, 유지보수를 덜 요구하며, 보조 전력을 제공하기 위한 다른 옵션들보다 긴 수명을 갖기 때문에, 보조 전원(124)을 구현하기 위해 하나 이상의 뱅크의 커패시터들이 이용된다.
한 실시예에서, 보조 전원(124)은, 주 전력 접속(130)으로부터의 전력을 부분적 또는 완전한 소실시에 저장 디바이스(102)에 전력을 자동으로 제공하는 전기 회로의 일부이다. 유사하게, 시스템(100)은, 부분적 또는 완전한 전력 소실 동안에 보조 전원(124)으로부터 전력을 자동으로 수락 또는 수신하도록 구성될 수 있다. 예를 들어, 한 실시예에서, 보조 전원(124)은, 주 전력 접속(130)과 병렬로 저장 디바이스(102)에 전기적으로 결합되어, 정상 동작 동안에 주 전력 접속(130)이 보조 전원(124)을 충전하고 전력 소실에 응답하여 보조 전원(124)이 저장 디바이스(102)에 자동으로 전력을 제공하게 할 수 있다. 한 실시예에서, 시스템(100)은, 보조 전원(124)으로부터의 전류가 주 전력 접속(130)에 도달하는 것을 방지하기 위해, 보조 전원(124)과 주 전력 접속(130) 사이에 다이오드나 기타의 역 전류 보호물을 더 포함한다. 또 다른 실시예에서, 자동-커밋 메모리(1011)는 주 전력 접속(130)으로부터의 감소된 전력에 응답하여 스위치 등을 이용하여 저장 디바이스(102)로의 보조 전원(124)을 인에이블하거나 접속할 수 있다.
비휘발성 메모리(110)에 아직 있지 않은 데이터의 예로서는, 기입 데이터 파이프라인(106)을 통해 데이터가 이동할 때 휘발성 메모리에 유지될 수 있는 데이터가 포함될 수 있다. 기입 데이터 파이프라인(106) 내의 데이터가 정전 동안에 소실된다면(즉, 비휘발성 메모리(110)에 기입 또는 기타의 방식으로 영구적으로 저장되지 않는다면), 변질(corruption) 및 데이터 소실(data loss)이 발생할 수 있다.
소정 실시예에서, 저장 디바이스(102)가 비휘발성 메모리(110)에 저장될 데이터를 수신한 후의 어떤 시점에서 저장 디바이스(102)는 접수확인을 호스트(114)에 전송한다. 기입 데이터 파이프라인(106), 또는 그 서브-컴포넌트는 접수확인을 생성할 수 있다. 저장 디바이스(102)가 데이터를 수신한 후 가능한 일찍 접수확인을 전송하는 것이 유익하다.
소정 실시예에서, 기입 데이터 파이프라인(106)은 데이터가 비휘발성 메모리(110)에 실제로 저장되기 이전에 접수확인을 전송한다. 예를 들어, 기입 데이터 파이프라인(106)은, 데이터가 기입 데이터 파이프라인(106)을 통해 비휘발성 메모리(110)로의 전송 도중에 아직 있는 동안에, 접수확인을 전송할 수 있다. 이러한 실시예에서, 저장 디바이스(102)는, 데이터 변질을 방지하고 전송된 접수확인의 무결성을 유지하기 위하여, 보조 전원(124)이 충분한 전력을 소실하기 이전에 저장 제어기(104)가 비휘발성 메모리(110)에 접수확인을 전송했던 모든 데이터를 플러시하는 것이 매우 바람직하다.
또한, 소정 실시예에서, 기입 데이터 파이프라인(106) 내의 일부 데이터는 전력 중단의 결과로서 변질될 수 있다. 전력 중단은 전원 고장 뿐만 아니라 공급되는 전력 레벨에서의 예기치 않은 변동을 포함할 수 있다. 전력 레벨에서의 예기치 않은 변화는 저장 디바이스(102)에 있지만 아직 비휘발성 메모리(110)에 있지 않은 데이터를 위험에 빠뜨릴 수 있다. 데이터 변질은 자동-커밋 메모리(1011)가 전력 중단이 존재한다는 것을 알기도(또는 통보받기도) 전에 발생하기 시작할 수도 있다.
예를 들어, PCI-e 명세는, 전력 중단이 시그널링되는 이벤트에서, 소정 상황에서는 데이터가 변질되고 아직 저장되지 않은 것으로 간주되어야 한다고 표시한다. PCI, 직렬 ATA 또는 SATA(serial advanced technology attachment), 병렬 ATA(PATA), SCSI(small computer system interface), IEEE 1394(FireWire), 파이버 채널(Fiber Channel), USB(universal serial bus), PCIe-AS 등의 다른 접속 유형을 이용하여 호스트(114)에 접속된 저장 디바이스(102)에 대해 유사한 잠재적인 변질이 발생할 수 있다. 전력 중단이 발생할 때(그 시점으로부터 현재 시점까지 수신된 데이터가 변질된 것으로 가정될 수 있다는 것을 의미), 소정 시간이 경과할 때, 중단이 감지되고 시그널링될 때, 및 자동-커밋 메모리(1011)가 신호를 수신하고 전력 중단을 알게 될 때, 곤란점이 발생할 수 있다. 전력 중단 발생과 자동-커밋 메모리(1011)가 전력 중단을 발견하는 것 사이의 지연(lag)은 변질된 데이터가 기입 데이터 파이프라인(106)에 들어가는 것을 허용할 수 있다. 소정 실시예에서, 이 변질된 데이터는 식별되어 비휘발성 메모리(110)에 저장되지 않아야 한다. 대안으로서, 이 변질된 데이터는 비휘발성 메모리(110)에 저장될 수 있고 후술되는 바와 같이 변질된 것으로서 마킹될 수 있다. 설명의 간소화를 위해, 본 명세서에서 기능과 피쳐들을 설명하기 위해 변질된 데이터를 식별하고 그 데이터를 비휘발성 메모리(110)에 저장하지 않는 것이 주로 이용될 것이다. 또한, 호스트(114)는 이 데이터가 저장되지 않았다는 것을 알아야 하고, 또는 대안으로서 그 무결성이 의심되는 데이터는 데이터 무결성이 확인될 수 있을 때까지 접수확인되지 않는다. 그 결과, 변질된 데이터는 접수확인되지 않아야 한다.
저장 디바이스(102)는 또한 자동-커밋 메모리(1011)를 포함한다. 소정 실시예에서, 자동-커밋 메모리(1011)는, 저장 제어기(104)와 통신하거나, 이에 의해 관리되거나, 이와 적어도 부분적으로 통합된다. 자동-커밋 메모리(1011)는, 예를 들어, 저장 디바이스(102)를 위한 소프트웨어 드라이버 및/또는 펌웨어와 협력할 수 있다. 한 실시예에서, 자동-커밋 메모리(1011)의 적어도 일부는 저장 디바이스(102) 상에 구현되어, 자동-커밋 메모리(1011)는, 호스트(114)가 더 이상 기능하지 않더라도, 보조 전원(124)으로부터의 전력을 이용하여 부분적 또는 완전한 전력 소실 동안에 기능을 계속할 수 있다.
한 실시예에서, 자동-커밋 메모리(1011)는 주 전력 접속(130)으로부터의 전력의 감소에 응답하여 저장 디바이스(102)에서 전력 소실 모드를 개시한다. 전력 소실 모드 동안에, 자동-커밋 메모리(1011)는, 한 실시예에서, 비휘발성 메모리(110)에 아직 저장되지 않은 저장 디바이스(102) 내에 있는 데이터를 비휘발성 메모리(110) 내에 플러시한다. 특정한 실시예에서, 자동-커밋 메모리(1011)는, 비휘발성 메모리(110)에 아직 저장되지 않은 접수확인되었고 저장 디바이스(102) 내에 있는 데이터를 비휘발성 메모리(110) 내에 플러시한다. 소정 실시예에서, 후술되는 바와 같이, 자동-커밋 메모리(1011)는, 보조 전원(124)이 필수 동작을 완료하기 위한 충분한 전력을 소실하기 이전에, 즉, 보조 전원(124)이 제공하는 전력 유지 시간 동안에 필수 동작이 완료되는 것을 보장하기 위해 저장 디바이스(102) 상에서의 데이터 동작의 실행을 조절할 수 있다.
소정 실시예에서, 필수 동작은, 접수확인된 기입 동작 등의, 저장된 것으로서 접수확인된 데이터에 대한 동작을 포함한다. 다른 실시예에서, 필수적인 동작은, 저장되고 소거된 것으로 접수확인된 데이터에 대한 동작을 포함한다. 다른 실시예에서, 필수 동작은, 저장되고, 판독되고, 소거된 것으로 접수확인된 데이터에 대한 동작을 포함한다. 자동-커밋 메모리(1011)는 또한, 비-필수 동작들이 불필요하게 전력을 소비하지 않고 및/또는 필수 동작들이 실행되는 것을 방해하지 않도록 보장하기 위해 비-필수 동작들을 종료할 수 있다; 예를 들어, 자동-커밋 메모리(1011)는, 소거 동작, 판독 동작, 미접수확인된 기입 동작 등을 종료할 수 있다.
한 실시예에서, 비-필수 동작들을 종료하는 것은 보조 전원(124)으로부터의 전력을 절약하여, 보조 전원(124)이 전력 유지 시간을 제공하는 것을 허용한다. 추가 실시예에서, 자동-커밋 메모리(1011)는 전력 소실 모드 동안에 보조 전원(124)으로부터의 전력을 절감하기 위해 저장 디바이스(102)의 하나 이상의 서브컴포넌트의 동작을 비활성화하거나 기타의 방식으로 셧다운한다. 예를 들어, 다양한 실시예에서, 자동-커밋 메모리(1011)는, 판독 데이터 파이프라인(108), 판독 직접 메모리 액세스(DMA) 엔진, 및/또는 비-필수 동작과 연관된 저장 디바이스(102)의 기타의 서브컴포넌트의 동작을 비활성화할 수 있다.
자동-커밋 메모리(1011)는 또한, 전력 중단에 의해 어떤 데이터가 변질되었는지를 판정하여, 변질된 데이터가 비휘발성 메모리(110)에 저장되는 것을 방지하고, 변질된 데이터가 저장 디바이스(102) 상에 결코 실제로 저장되지 않았다는 것을 호스트(114)가 알도록 보장하는 책임을 질 수 있다. 이것은, 전력 중단으로부터 발생하는 저장 디바이스(102) 내의 데이터의 변질을 방지한다.
한 실시예에서, 시스템(100)은 복수의 저장 디바이스(102)를 포함한다. 자동-커밋 메모리(1011)는, 한 실시예에서, 복수의 저장 디바이스(102) 내의 각각의 저장 디바이스(102)에 대한 전력 소실 모드를 관리하여, 복수의 저장 디바이스(102)에게 전시스템적 전력 소실 모드(system-wide power loss mode)를 제공한다. 추가 실시예에서, 복수의 저장 디바이스(102) 내의 각 저장 디바이스(102)는, 각각의 개별 저장 디바이스(102)에 대한 별개의 전력 소실 모드를 관리하는 별개의 자동-커밋 메모리(1011)를 포함한다. 자동-커밋 메모리(1011)는, 한 실시예에서, 하나 이상의 다른 저장 디바이스(102) 상에서 필수 동작을 실행하기 위한 보조 전원(124)으로부터의 전력을 절감하기 위해, 복수의 저장 디바이스(102)의 하나 이상의 저장 디바이스(102)를 비활성화하거나 기타의 방식으로 셧다운할 수 있다.
한 실시예에서, 시스템(100)은 호스트(114)와 복수의 저장 디바이스(102) 사이에 전기 접속을 제공하기 위한 하나 이상의 어댑터를 포함한다. 어댑터는, 다양한 실시예에서, 단일의 저장 디바이스(102)를 수용하는 슬롯이나 포트, 2개 이상의 저장 디바이스(102)를 수용하는 확장 카드 또는 도터 카드 등을 포함할 수 있다. 예를 들어, 한 실시예에서, 복수의 저장 디바이스(102) 각각은 호스트(114)의 별개의 포트들 또는 슬롯들에 결합될 수 있다. 또 다른 예시적인 실시예에서, 도터 카드 등의 하나 이상의 어댑터는 호스트(114)에 전기적으로 결합(즉, 호스트(114)의 하나 이상의 슬롯이나 포트에 접속)될 수 있고, 하나 이상의 어댑터는 각각 2개 이상의 저장 디바이스(102)에 대한 접속들을 제공할 수 있다.
한 실시예에서, 시스템(100)은, 도터 카드 등의 2개 이상의 어댑터를 수용하는, 마더보드 등의, 회로 보드를 포함하고, 각각의 어댑터는 2개 이상의 저장 디바이스(102)를 수용한다. 추가 실시예에서, 어댑터는 회로 보드의 PCI-e 슬롯을 이용하여 회로 보드에 결합되고, 저장 디바이스(102)는 어댑터의 PCI-e 슬롯을 이용하여 어댑터에 결합된다. 또 다른 실시예에서, 저장 디바이스(102)들 각각은, 플래시 메모리 등의, 비휘발성 고체 상태 저장소의 듀얼 인-라인 메모리 모듈(DIMM)을 포함한다. 한 실시예에서, 회로 보드, 어댑터, 및 저장 디바이스(102)는 호스트(114)에 외부적일 수 있고, 별개의 주 전력 접속(130)을 포함할 수 있다. 예를 들어, 회로 보드, 어댑터, 및 저장 디바이스(102)는 전원 유닛(PSU; power supply unit)을 갖는 외부 인클로져에 하우징될 수 있고, eSATA, eSATAp, SCSI, 파이어와이어(FireWire), 파이버 채널, USB, PCIe-AS 등의 외부 버스를 이용하여 호스트(114)와 통신할 수 있다. 또 다른 실시예에서, 회로 보드는 호스트(114)의 마더보드일 수 있고, 어댑터와 저장 디바이스(102)는 호스트(114)의 내부 저장소일 수도 있다.
본 개시내용에 비추어, 본 기술분야의 통상의 기술자라면, 시스템(100)에서의 이용을 위한 어댑터와 저장 디바이스(102)의 많은 구성을 인식할 것이다. 예를 들어, 각각의 어댑터는, 2개의 저장 디바이스(102), 4개의 저장 디바이스(102), 또는 임의 개수의 저장 디바이스를 수용할 수 있다. 유사하게, 시스템(100)은, 하나의 어댑터, 2개의 어댑터, 3개의 어댑터, 4개의 어댑터, 또는 임의의 지원되는 개수의 어댑터를 포함할 수 있다. 하나의 예시적인 실시예에서, 시스템(100)은 2개의 어댑터를 포함하고, 각각의 어댑터는, 총 8개의 저장 디바이스(102)에 대해, 4개의 저장 디바이스(102)를 수용한다.
한 실시예에서, 보조 전원(124)은 복수의 저장 디바이스(102) 각각에 전력을 제공한다. 예를 들어, 보조 전원(124)은 주 회로 보드 또는 마더보드 상의 회로에 배치되고 수 개의 어댑터에 전력을 제공할 수 있다. 추가 실시예에서, 시스템(100)은, 각각이 복수의 저장 디바이스(102)의 서브셋에 전력을 제공하는 복수의 보조 전원을 포함한다. 예를 들어, 한 실시예에서, 각각의 어댑터는 어댑터의 저장 디바이스(102)에 대한 보조 전원(124)을 포함할 수 있다. 추가 실시예에서, 각각의 저장 디바이스(102)는 저장 디바이스(102)를 위한 보조 전원(124)을 포함할 수 있다. 본 개시내용에 비추어, 본 기술분야의 통상의 기술자라면, 복수의 저장 디바이스(102)에 전력을 제공하기 위한 보조 전원(124)의 상이한 배열들을 인식할 것이다.
전술된 시스템, 방법, 및 장치는, CPU 메모리 기입 입도 및 속도(CPU memory write granularity and speed)로 메모리 시멘틱 기입 동작들(memory semantic write operations)(예를 들어, 지속적 기입들)을 구현할 수 있는 자동-커밋 메모리를 구현하기 위해 이용될 수 있다. 전원 고장 또는 기타의 재시작 이벤트의 경우에도 기입 동작에 대한 소정의 커밋 동작이 발생할 것이라는 것을 보장함으로써, 소정 실시예에서, DRAM, SRAM, BRAM 등의 휘발성 메모리가 비휘발성으로서 이용되거나, 간주되거나, 표현될 수 있다.
여기서 설명되는 자동-커밋 메모리는, 데이터가 휘발성 자동-커밋 메모리 버퍼에 저장되어 있는 동안에도, 데이터가 보존되거나 지속되는 것을 보장 또는 보증하도록 구성될 수 있다. 여기서 설명되는 휘발성 자동-커밋 메모리 버퍼들, 요소들, 모듈들, 또는 디바이스들은, 자동-커밋 메모리 모듈(1011)이 트리거에 응답하여 수행하기 위한 커밋 동작을 정의하는 자동-커밋 메타데이터로 무장(arm)되거나 이와 연관될 수 있다. 여기서 사용될 때, 자동-커밋 메모리 모듈(1011)에 대한 트리거, 커밋 트리거, 트리거 이벤트, 커밋 이벤트 등은, 그에 응답하여 자동-커밋 메모리 모듈(1011)이 휘발성 메모리로부터 비휘발성 메모리 매체(110)에 데이터를 플러시하거나 보존하는 등의 하나 이상의 커밋 동작을 수행하도록 구성되는 발생, 시스템 상태, 조건 등을 포함할 수 있다. 자동-커밋 메모리 모듈(1011)은, 소정 실시예에서, 임의의 단일의 특정한 트리거 이벤트에 관계없이 자동-커밋 메모리 버퍼로부터의 데이터를 플러시, 스트리밍, 복사, 전송, 또는 디스테이징(destage)할 수 있다. 예를 들어, 자동-커밋 메모리 버퍼로부터 비휘발성 메모리 매체(110)로의 데이터의 디스테이징이 도 10의 디스테이지 모듈(1908)에 관하여 이하에서 설명된다.
소정 실시예에서, 자동-커밋 메모리 모듈(1011)에 대한 트리거는, 자동-커밋 메모리 버퍼가 가득차거나, 디스테이지 요청을 수신하거나 하는 등의, 시스템(100)의 일상적 런타임 동안의 비-고장, 비-전력-소실, 및/또는 비-재시작 이벤트를 포함할 수 있다. 다른 실시예들에서, 트리거는, 고장 조건, 전력-소실 조건, 또는 기타의 재시작 이벤트를 포함할 수 있다. 재시작 이벤트는, 여기서 사용될 때, 호스트 컴퓨팅 디바이스 및/또는 비휘발성 저장 디바이스의 적어도 일부에 대한 전력의 의도적 또는 비의도적 소실을 포함한다. 재시작 이벤트는, 시스템 리부팅, 리셋, 또는 셧다운 이벤트; 전력 결함, 전력 소실, 또는 전원 고장 이벤트; 또는 다른 전력의 중단 또는 감소를 포함할 수 있다. 소정의 커밋 동작들을 보장함으로써, 자동-커밋 메모리는 재시작 이벤트 이후에도 저장 클라이언트들이 실행 상태를 재개하는 것을 허용할 수 있거나, 저장 클라이언트들이 상이한 독립된 데이터 세트들을 지속시키는 것을 허용할 수 있거나, 이와 유사한 것을 허용할 수 있다.
본 명세서에서 사용될 때, 용어 "메모리 시멘틱 동작", 또는 더 일반적으로는, "메모리 동작"이란, 조작가능한 메모리 포인터 등을 이용한, 휘발성 메모리 액세스들의 입도, 동기성, 및 액세스 시멘틱을 갖는 동작을 말한다. 메모리 시멘틱 동작은, 로드, 저장, 피크(peek), 포크(poke), 기입, 판독, 세트, 클리어 등을 포함하지만, 이것으로 제한되지 않는다. 메모리 시멘틱 동작은, CPU-레벨의 입도(예를 들어, 단일 바이트, 워드, 캐시 라인 등)에서 동작할 수 있고, 동기적일 수 있다(예를 들어, CPU는 동작이 완료하기를 기다린다). 소정 실시예에서, 캐시 라인 등의 더 큰 크기의 입도에서 액세스를 제공하는 것은, 더 작은 크기의 입도 액세스보다, 액세스 레이트를 증가시킬 수 있거나, 더 효율적인 기입 결합 등을 제공할 수 있다.
ACM(1011)은, 메모리 맵핑된 I/O(MMIO), 포트 I/O, 포트-맵핑된 IO(PMIO), 메모리 맵핑된 파일 I/O 등을 포함하지만 이것으로 제한되지 않는 다양한 메모리 맵핑 기술들 중 하나 이상을 이용하여 컴퓨팅 디바이스 및/또는 애플리케이션들(국지적 및 원격 모두)에 이용가능할 수 있다. 예를 들어, ACM(1011)은, PCI-e 베이스 주소 레지스터(BAR), 또는 기타의 적절한 메커니즘을 이용하여 컴퓨팅 디바이스 및/또는 애플리케이션들(국지적 및 원격 모두)에 이용가능할 수 있다. ACM(1011)은 또한, 더블 데이터 레이트(DDR) 메모리 인터페이스, 하이퍼트랜스포트(HyperTransport), 퀵패스 인터커넥트(QuickPath Interconnect)(QPI) 등의 인터페이스를 이용하여 CPU의 메모리 버스를 통해 직접 액세스가능할 수도 있다. 따라서, ACM(1011)은, CPU 로드/저장, 직접 메모리 액세스(DMA), 제3자 DMA, 원격 DMA(RDMA), 자동 테스트 및 세트 등의, 메모리 액세스 시멘틱을 이용하여 액세스가능할 수 있다. 여기서 개시된 ACM(1011)으로의 직접 메모리 시멘틱 액세스는, 커밋된 동작들을 구현하기 위해 통상적으로 요구되는 많은 시스템 및/또는 가상화 층 콜들(system and/or virtualization layer calls)이 바이패스되는 것을 허용한다(예를 들어, 비동기 입력/출력 인터페이스를 통한 콜백들(call backs)이 바이패스될 수 있다). 일부 실시예에서, ACM(1011)은 하나 이상의 가상 범위(예를 들어, 가상 BAR 범위, 가상 메모리 주소 등)에 맵핑될 수 있다. 가상 맵핑은 복수의 컴퓨팅 디바이스 및/또는 애플리케이션들이 단일의 ACM 주소 범위(1021)를 공유하는 것(예를 들어, 상이한 가상 주소 범위 내에서 동일한 ACM을 동시에 액세스하는 것)을 허용할 수 있다. ACM(1011)은, CPU가 메모리 시멘틱 액세스를 이용해 ACM(1011)에 직접 데이터를 기입하고 판독하기 위해 로드/저장 명령어를 이용할 수 있도록 CPU에 의해 어드레싱가능한 물리적 메모리 주소 공간의 주소 범위에 맵핑될 수 있다. CPU는, 추가 실시예에서, 물리적으로 맵핑된 ACM(1011)을 가상 메모리 주소 공간에 맵핑하여, ACM(1011)을 사용자-공간 프로세스 등에 가상 메모리로서 이용가능하게 할 수 있다.
ACM(1011)은 재시작 조건(또는 기타의 미리 결정된 트리거링 이벤트)의 검출시에 그 내용을 커밋하도록 미리 구성될 수 있고, 따라서, ACM(1011) 상에 수행되는 동작들은 "즉각적으로 커밋되는(instantly committed)" 것으로 간주될 수 있다. 예를 들어, 애플리케이션은, 기입-커밋 레이턴시(write-commit latency)에 의해 영향받는 애플리케이션의 성능을 상당히 증가시킬 수 있는 별개의 대응하는 "커밋" 명령을 필요로 하지 않고, CPU 메모리 입도 및 속도에서 동작하는 메모리 시멘틱 기입을 이용하여 ACM(1011) 상에 "기입-커밋(write-commit)" 동작을 수행할 수 있다. 본 명세서에서 사용될 때, 기입-커밋 동작은, 애플리케이션이 (예를 들어, 메모리 시멘틱 액세스를 이용하여) 데이터를 메모리 위치에 기입한 다음, (예를 들어, 지속적 저장소 또는 기타의 커밋 메커니즘에) 동작을 커밋하기 위해 후속하는 커밋 명령을 발행하는 동작이다.
그 성능이 기입-커밋 레이턴시, 즉, 초기 메모리 기입과 후속하는 지속적 커밋 동작 간의 시간 지연에 기초하는 애플리케이션은 통상적으로, 가상 메모리 시스템을 활용(leveraging)함으로써(예를 들어, 메모리 백킹된 파일(memory backed file)을 이용하여) 이 레이턴시를 감소시키려고 한다. 이 경우에, 애플리케이션은, 시스템 RAM에서 고성능 메모리 시멘틱 기입 동작을 수행하지만, 동작을 커밋하기 위하여, 백킹 파일(또는 기타의 지속적 저장소)에 대한 각각의 기입 동작을 지속시키기 위해 후속하는 "커밋" 명령을 수행해야 한다. 따라서, 각각의 기입-커밋 동작은 그 자신의 별개의 커밋 명령을 포함할 수 있다. 예를 들어, 데이터베이스 로깅(logging) 애플리케이션에서, 각각의 로그 트랜잭션은 다음 트랜잭션이 로깅되기 이전에 기입되고 커밋되어야 한다. 유사하게, 메시징 시스템(예를 들어, 저장 및 포워드 시스템)은 각각의 인입 메시지를 그 메시지의 수신이 접수확인되기 이전에 기입 및 커밋해야 한다. 따라서, 기입-커밋 레이턴시는 데이터를 지속적 저장소에 커밋하기 위해 훨씬 더 느린 동작이 뒤따르는 비교적 빠른 메모리 시멘틱 기입을 포함한다. 기입-커밋 레이턴시는, 지속적 저장소에 대한 액세스 시간, 시스템 콜 오버헤드(예를 들어, RAM 주소들 간의 변환, 백킹 스토어 LBA 등) 등을 포함한 수 개의 인자를 포함할 수 있다. 감소된 기입-커밋 레이턴시로부터 혜택을 입을 수 있는 애플리케이션들의 예로서는, 데이터베이스 로깅 애플리케이션, 파일 시스템 로깅, 메시징 애플리케이션(예를 들어, 스토어 및 포워드), 세마포어 프리미티브 등이 포함되지만, 이것으로 제한되지 않는다.
여기서 개시된 자동-커밋 메모리를 이용한 지속적 데이터 구조에 대한 시스템, 장치, 및 방법들은, 애플리케이션이 커밋 명령을 발행하지 않고, 시스템 고장이나 기타의 재시작 이벤트시에 커밋되는 것이 보장되는, 바이트 레벨, 페이지 레벨, 캐시-라인 레벨, 또는 기타의 메모리 영역 레벨을 포함한 임의의 적절한 레벨의 어드레싱 입도에서 메모리 영역에 대한 직접적 액세스를 제공함으로써 기입-커밋 레이턴시 관련 애플리케이션의 성능을 상당히 증가시키는데 이용될 수 있다. 따라서, 애플리케이션의 기입-커밋 레이턴시는 메모리 시멘틱 액세스(시스템 버스를 통한 단일 기입)의 레이턴시까지 감소될 수 있다.
소정 실시예에서, 지속적 데이터 구조 모듈(1009)은, 여기서 설명된 바와 같은 자동-커밋 메모리(1011)를 이용하거나 이와 협력하여, 휘발성 메모리의 많은 혜택 및 속도와 비휘발성 메모리 매체(110)의 지속성을 수반하여 지속적 데이터 구조를 클라이언트(예를 들어, 운영 체제, 가상 운영 플랫폼, 게스트 운영 체제, 애플리케이션, 데이터베이스 시스템, 프로세스, 쓰레드, 엔티티, 유틸리티, 사용자 등)에 제공할 수 있다.
데이터 구조는, 여기서 사용될 때, 데이터의 조직화된 배열, 그룹, 또는 세트를 포함한다. 데이터 구조는, 미리정의된 패턴이나 스키마에 따라 조직화될 수 있고, 포함된 데이터의 조직화와 그로의 액세스를 용이하게 하기 위해 포인터, 시퀀스 번호, 라벨, 식별자 등의 메타데이터를 포함할 수 있다. 데이터 구조는, 로그(예를 들어, 순차적 로그, 트랜잭션 로그, 애플리케이션 로그), 큐(예를 들어, 선입 선출 또는 FIFO 큐, 버퍼), 스택(예를 들어, 후입선출 또는 LIFO 스택), 트리(예를 들어, 2진 트리, B-트리, B+트리, B* 트리, 3진 트리, K-ary 트리, 공간-분할 트리(space-partitioning tree), 결정 트리), 링크된-리스트(예를 들어, 단일 링크된 리스트, 이중 링크된 리스트, 자기-조직화 리스트(self-organizing list), 이중 접속된 엣지 리스트), 해시(예를 들어, 해시 리스트, 해시 테이블, 해시 트리, 해시 어레이), 어레이(예를 들어, 테이블, 맵, 비트 어레이, 비트 필드, 비트맵, 매트릭스, 성긴 어레이(sparse array)), 힙(예를 들어, 2진 힙, 이항 힙, 파보나치 힙, 3진 힙, D-ary 힙), 그래프(예를 들어, 방향 그래프, 방향 비순환 그래프, 2진 결정 다이어그램, 그래프-구조화된 스택, 멀티그래프, 하이퍼그래프, 인접리스트), 또는 기타의 데이터 구조를 포함할 수 있지만, 이것으로 제한되지 않는다.
데이터 구조의 한 예는 트랜잭션 로그 또는 TLOG이다. 트랜잭션 로그(예를 들어, 트랜잭션 저널, 데이터베이스 로그, 2진 로그, 오딧 트레일(audit trail), 순차적 로그, 애플리케이션 로그)는, 소정 실시예에서, 데이터베이스나 데이터베이스 테이블에 대해 이루어진 업데이트들, 데이터베이스나 기타의 애플리케이션에 의해 실행된 트랜잭션, 또는 이와 유사한 것의 이력 또는 목록과 같은 순차적, 이력적, 또는 연대적 엔트리들을 포함한다. 트랜잭션 로그는 트랜잭션을 롤백(rollback)하거나 언두(undo)하기 위해, 또는 트랜잭션을 리두(redo)하거나 재적용하기 위해, 각각의 트랜잭션에 관한 충분한 정보를 포함할 수 있다. 순차적으로 또는 연대적으로 저장되는 것에 추가하여 또는 그 대신에, 소정 실시예에서, 트랜잭션 로그는, 타임스탬프, 시퀀스 번호, 이전 또는 다음 엔트리로의 링크, 또는 이와 유사한 것과 같은 각각의 엔트리나 트랜잭션에 대한 시퀀스 정보를 포함할 수 있다. 트랜잭션 로그는 또한, 트랜잭션 식별자(예를 들어, 로그 레코드를 생성한 데이터베이스 트랜잭션에 대한 참조), 유형(예를 들어, 데이터베이스 로그 레코드의 유형을 기술하는 라벨), 또는 이와 유사한 것과 같은, 다른 유형의 메타데이터를 포함할 수도 있다. 지속적 트랜잭션 로그는 주로 지속적 데이터 구조 모듈(1009)과 관련하여 여기서 설명되지만, 이 설명은 앞서 열거된 예시적 데이터 구조들 등의 다른 유형의 데이터 구조에도 동등하게 적용가능하다.
지속적 데이터 구조 모듈(1009)은, 애플리케이션 프로그래밍 인터페이스(API), 공유된 라이브러리, 하드웨어 인터페이스, 통신 버스, 하나 이상의 IO 제어(IOCTL) 명령 등의 인터페이스를 제공하고, 이를 통해 클라이언트는 하나 이상의 유형의 지속적 데이터 구조를 생성, 업데이트, 삭제, 또는 기타의 방식으로 액세스할 수 있다. 데이터 구조는, 여기서 사용될 때, 전술된 바와 같이 자동-커밋 메모리(1011)에 의해 보장될 수 있는 바와 같이 데이터 구조가 재시작 이벤트 이후에 소정 형태로 클라이언트에 액세스가능하게 머무른다면, 지속적이다. 지속적 데이터 구조 모듈(1009)은 지속적 논리적 식별자를 지속적 데이터 구조와 연관시킬 수 있고, 클라이언트는 이것을 이용하여 재시작 이벤트 전과 후 양자에 지속적 데이터 구조에 액세스할 수 있다. 예를 들어, 지속적 데이터 구조 모듈(1009)은 도 6에 관하여 후술되는 바와 같이 파일 시스템 모듈(1558)과 협력하여 파일명, 파일명과 오프셋 등으로 파일 시스템 파일로서의 지속적 데이터 구조로의 액세스를 제공할 수 있다. 다른 실시예에서, 지속적 논리적 식별자는, 논리 유닛 번호(LUN) 명칭공간으로부터의 LUN 식별자(ID), LUN ID 및 오프셋, 후술되는 ACM(1011)에 대한 지속적 메모리 명칭공간에 대한 논리적 식별자, 비휘발성 메모리 디바이스(102)의 명칭공간으로부터의 논리 블록 주소(LBA) 또는 LBA 범위, 또는 다른 지속적 논리적 식별자를 포함할 수 있다.
비휘발성 메모리 매체(110)보다 작은 저장 용량을 가질 수 있는 ACM(1011)을 효율적으로 이용하기 위해, 및 휘발성 메모리의 액세스 속도와 비휘발성 메모리 매체(110)의 지속성을 제공하기 위해, 클라이언트가 입력 레이트로 (예를 들어, 포그라운드에서) 데이터 구조에 데이터를 기입할 때, 지속적 데이터 구조 모듈(1009)은 ACM(1011)과 협력하여 입력 레이트와 정합하거나 이를 초과하는 전송 레이트로 ACM(1011)의 ACM 버퍼로부터 비휘발성 메모리 매체(110)로 (예를 들어, 백그라운드에서) 데이터를 디스테이징, 복사, 전송, 마이그레이트, 및/또는 이동시켜, 데이터가 데이터 구조에 할당된 하나 이상의 ACM 버퍼를 오버런하지 않게 할 수 있다. 지속적 데이터 구조 모듈(1009)은, 한 실시예에서, 클라이언트가 데이터를 데이터 구조에 기입하는 입력 레이트를 방해, 지연, 쓰로틀, 지배, 또는 기타의 방식으로 제한할 수 있다. 이런 방식으로, 지속적 데이터 구조 모듈(1009)은, ACM(1011) 및/또는 비휘발성 메모리 매체(110)를 클라이언트로부터 마스킹하거나 은닉하여, 클라이언트가 ACM(1011)의 액세스 속도 및 혜택과 비휘발성 메모리 매체(110)의 지속성을 인지하되, 지속적 데이터 구조 모듈(1009)이 이들 혜택을 제공하기 위해 이용하는 계층화된 아키텍쳐의 복잡성을 알지 않게 할 수 있다.
지속적 데이터 구조 모듈(1009)는, 소정 실시예에서, 데이터 구조에 대한 하나 이상의 규칙을 집행할 수 있다. 예를 들어, 각각의 상이한 유형의 데이터 구조는, 한 세트의 하나 이상의 규칙, 제약, 정의 등에 의해 정의되거나 구조화될 수 있다. 규칙은 데이터 구조에 대한 하나 이상의 허용된 또는 수락될 수 있는 데이터 동작을 정의할 수 있다. 트랜잭션 로그에 대해, 규칙들은, 엔트리들이 순차적이어야 하고, 데이터 엔트리들은 일단 기입되고 나면 오버라이트 또는 업데이트될 수 없다는 것 등을 포함할 수 있다. 상이한 유형의 데이터 구조들은 상이한 규칙들을 가질 수 있다. 예를 들어, 큐는 엄격한 FIFO 규칙을 가질 수 있고, 스택은 엄격한 LIFO 규칙을 가질 수 있고, 트리는 데이터 엔트리들 또는 노드들에 대한 엄격한 순서 또는 계층구조를 정의하는 규칙을 가질 수 있고, 데이터 구조는 소정의 데이터 유형이나 필요한 필드 또는 엔트리들을 요구하는 규칙을 가질 수 있는 등등이다. 소정 실시예에서, 데이터 구조에 대한 하나 이상의 규칙을 집행하는 인터페이스를 제공함으로써, 지속적 데이터 구조 모듈(1009)은 애플리케이션이나 다른 클라이언트가 부주의로 또는 우연히 지속적 데이터 구조를 오버라이트하거나 기타의 방식으로 그 무결성을 침해하지 못하게 할 수 있어서, 지속적 데이터 구조가 데이터 구조의 엄격한 정의 등을 만족하는 것을 보장한다. 지속적 데이터 구조 모듈(1009)은 비휘발성 또는 지속적인 데이터 구조를 제공하기 때문에, 데이터 구조 무결성에서의 오류(예를 들어, 오버라이트된 데이터 구조, 데이터 구조 내의 부적절한 엔트리 등)는 재시작 이벤트 또는 리부팅 이후에 지속되고, 휘발성 데이터 구조에서의 오류와 같이 클리어되거나 리셋되지 않을 것이다.
지속적 데이터 구조 모듈(1009)은, 소정 실시예에서, 운영 체제, 파일 시스템, 하나 이상의 애플리케이션이나 기타의 클라이언트 등과 통합되거나 및/또는 이들에게 ACM(1011) 및/또는 비휘발성 메모리 매체(110)의 하드웨어 능력으로의 액세스를 실질적으로 투명한 방식으로 제공하는 인터페이스 또는 라이브러리를 제공함으로써, 라이브러리, 파일명 또는 기타의 지속적 논리적 식별자 등을 통해 액세스가능한 지속적 데이터 구조를 제공한다. 지속적 데이터 구조 모듈(1009)은, ACM(1011), 비휘발성 메모리(110)(예를 들어, 후술되는 저장 관리층), 파일 시스템(예를 들어, 후술되는 파일 시스템 모듈(1558)의 계층화된 계층구조를 관리하기 때문에, 한 실시예에서, 비휘발성 메모리 매체(110)의 저장 용량에 비해 ACM(1011)에 대한 휘발성 메모리(예를 들어, ACM 버퍼)가 작은 용량인 경우에도, 지속적 데이터 구조 모듈(1009)은 지속적 데이터 구조에 대해 ACM(1011)의 혜택을 제공할 수 있다.
소정 실시예에서, 지속적 데이터 구조 모듈(1009)은 파일 시스템과 지속적 데이터 구조의 실질적으로 투명한 통합을 제공한다. 예를 들어, 클라이언트는, 파일명 및 오프셋을 이용해, 파일명을 갖는 파일로서 파일 시스템 시멘틱을 이용하여 지속적 데이터 구조에 액세스할 수 있는 반면, 지속적 데이터 구조 모듈(1009)은 ACM(1011)의 ACM 버퍼(예를 들어, 휘발성 메모리, 휘발성 메모리 버퍼, 휘발성 메모리 모듈, 휘발성 메모리 요소, 휘발성 메모리 페이지)와 비휘발성 메모리 매체(110) 사이의 데이터 구조의 데이터의 전송을 관리하고, 데이터 구조에 대한 하나 이상의 규칙을 집행하여(예를 들어, 데이터 구조에 대한 파일이 오버라이트되는 것을 방지, 데이터 구조에 대한 파일이 부가만 가능하도록 보장, 데이터 구조에 대한 파일의 엔트리들이 순차적이도록 보장하는 등), 클라이언트가 이러한 책임을 지지 않게 한다. 이런 방식으로, 애플리케이션 또는 기타의 클라이언트는, 표준 라이브러리, 파일 시스템 I/O 또는 기타의 인터페이스를 이용하면서 지속적 데이터 구조에 대해 지속적 데이터 구조 모듈(1009) 및/또는 ACM(1011)의 혜택을 받을 수 있다.
도 2는, 지속적 데이터 구조 모듈(1009)과 자동-커밋 메모리(ACM)(1011)의 한 실시예를 포함하는 시스템(1000)의 블록도이다. 여기서 사용될 때, 자동-커밋 메모리는, 재시작 이벤트 이전에 존재했던 ACM(1011)에 저장된 데이터의 상태와 재시작 이벤트 이후에 자동-커밋 메모리에 저장된 데이터로의 메모리 시멘틱 액세스의 레벨을 복구하도록 함께 구성된 로직 및 컴포넌트들과 결합되고, 직접 메모리 시멘틱 액세스를 위한 지속적 데이터 구조 모듈(1009) 및/또는 기타의 ACM 사용자들에게 노출된, 적어도 바이트 레벨의 메모리 시멘틱 액세스와 주소 입도 레벨의, 레이턴시가 낮고 신뢰성이 높은 메모리 매체를 포함한다. 소정 실시예에서, ACM(1011)은, ACM(1011)에 저장된 데이터가 재시작 이벤트 이후에 액세스가능할 것이라고 보장한다. ACM(1011)은, 한 실시예에서, 필요할 때 또는 ACM 사용자에 의해 지시받을 때 비휘발성 저장 매체에 데이터를 커밋하는 제어기, 로직, 및 기타의 컴포넌트들에 결합된 휘발성 메모리 매체를 포함한다. 추가 실시예에서, ACM(1011)은, 상변화 메모리(PCM 또는 PRAM) 등의 네이티브 비휘발성 저장 매체(natively non-volatile storage medium)를 포함할 수 있고, 트리거링된 커밋 동작은 재시작 이벤트에 응답하여 비휘발성 저장 매체 상의 데이터를 처리해 데이터가 재시작 이벤트 후에 데이터의 소유자에게 이용가능하게 머물도록 할 수 있다.
따라서, 데이터가 ACM(1011)에 기입될 때, 이것은 초기에 그 자체로 "커밋"되지(지속적 메모리 매체 및/또는 상태에 반드시 저장되지) 않을 수 있다; 오히려, ACM 데이터가 ACM(1011)에 저장되는 있는 동안 재시작 이벤트가 발생한다면, 미리 구성된 프로세스가 셋업되어 ACM 데이터와 그 상태를 보존한다. 이러한 재시작 생존 프로세스(restart survival process)를 미리 구성하는 것은 본 명세서에서 "무장(arming)"이라고 부른다. ACM(1011)은, 시스템(1000)이 고장 조건이나 다른 재시작 이벤트를 겪고 있더라도, 미리 구성된 커밋 동작을 자율적으로 및 높은 정도의 보장성으로 수행할 수 있다. 따라서, ACM(1011)에 데이터를 저장하는 엔티티는, 데이터가 "즉각 커밋"되는 것으로 또는 소실이나 변질로부터 안전한 것으로, 적어도 데이터가 하드 디스크 드라이브, 테이프 저장 매체 등의 비휘발성 저장 디바이스에 저장된 것처럼 안전한 것으로 간주할 수 있다.
ACM(1011)이 휘발성 메모리 매체를 포함하는 실시예에서, ACM(1011)은 휘발성 메모리 매체가 비휘발성 메모리처럼 보이게 만들 수 있거나, 휘발성 메모리를 비휘발성 매체처럼 제공할 수 있거나, 이와 유사하게 할 수 있는데, 이것은 ACM(1011)이, 시스템 재시작 이벤트들에 걸쳐, ACM 데이터 및/또는 ACM 메타데이터(1015) 등의 데이터를 보존하기 때문이다. ACM(1011)은, 재시작 또는 고장 조건과 같은 트리거 이벤트가 발생했다고 판정하고, 트리거 이벤트 이후의 유지 시간 동안 휘발성 메모리 매체의 내용을 비휘발성 메모리 매체에 복사하고, 트리거 이벤트가 끝나거나, 전력이 복구되거나, 재시작 이벤트가 완료되는 등의 이후에 비휘발성 메모리 매체로부터 휘발성 메모리 매체로 내용을 다시 복사함으로써 휘발성 메모리 매체가 비휘발성 메모리 매체로서 이용되는 것을 허용할 수 있다.
한 실시예에서, ACM(1011)은 적어도 바이트 어드레싱가능하다. ACM(1011)의 메모리 매체는, 소정 실시예에서, 네이티브 바이트 어드레싱가능(natively byte addressable)할 수 있어서, ACM(1011)에게 바이트 어드레싱능력(byte addressability)을 직접 제공할 수 있다. 또 다른 실시예에서, ACM(1011)의 메모리 매체는 네이티브 바이트 어드레싱가능하지 않지만, ACM(1011)의 휘발성 메모리 매체가 네이티브 바이트 어드레싱가능하고, ACM(1011)은 트리거 이벤트에 응답하여 바이트 어드레싱가능한 휘발성 메모리 매체의 내용을 ACM(1011)의 비-바이트 어드레싱가능한 메모리 매체(non-byte addressable memory media)에 기입 또는 커밋하여, 휘발성 메모리 매체가 ACM(1011)을 바이트 어드레싱가능하게 할 수 있다.
ACM(1011)은 호스트(1014) 등의 하나 이상의 컴퓨팅 디바이스에 액세스가능할 수 있다. 여기서 사용될 때, (호스트(1014) 등의) 컴퓨팅 디바이스는 ACM을 액세스할 수 있는 컴퓨팅 디바이스를 말한다. 호스트(1014)는 주변기기로서 ACM(1011)을 하우징하는 컴퓨팅 디바이스일 수 있다; ACM(1011)은 호스트(1014)의 시스템 버스(1040)에 부착될 수 있다; ACM(1011)은 데이터 네트워크를 통해 호스트(1014)와 통신할 수 있다; 및/또는 ACM(1011)은 호스트(1014)와 기타의 방식으로 통신할 수 있다. 호스트(1014)는, 소정 실시예에서, 또 다른 컴퓨팅 디바이스에 의해 호스팅된 ACM(1011)에 액세스할 수 있다. 액세스는, CPU 프로그램된 IO(CPIO), 포트-맵핑된 IO(PMIO), 메모리-맵핑된 IO(MMIO), 블록 인터페이스, PCI-e 버스, 인피니밴드(Infiniband), RDMA 등을 포함하지만 이것으로 제한되지 않는 임의의 적절한 통신 메커니즘을 이용하여 구현될 수 있다. 호스트(1014)는 하나 이상의 ACM 사용자(1016)를 포함할 수 있다. 여기서 사용될 때, ACM 사용자(1016)란, ACM(1011)에 액세스하도록 구성된 임의의 운영 체제(OS), 가상 운영 플랫폼(예를 들어, 하이퍼바이저를 갖춘 OS), 게스트 OS, 애플리케이션, 프로세스, 쓰레드, 엔티티, 유틸리티, 사용자 등을 말한다.
ACM(1011)은 호스트(1014)의 하나 이상의 레벨에 물리적으로 위치할 수 있다. 한 실시예에서, ACM(1011)은 PCI-e 버스에 접속될 수 있고 MMIO로 호스트(1014)에 액세스가능할 수 있다. 또 다른 실시예에서, ACM(1011)은 메모리 제어기를 통해 호스트(1014)의 CPU에 직접 액세스가능할 수 있다. 예를 들어, ACM(1011)은, 호스트(1014)의 CPU 등에 직접 부착되거나 및/또는 직접 (예를 들어, QPI(Quick Path Interconnect)) 통신할 수 있다. ACM(1011)의 휘발성 매체 및 ACM(1011)의 비휘발성 백킹 매체는, 소정 실시예에서, 동일한 장치 내에 물리적으로 함께 위치하지 않을 수 있지만, 통신 버스, 데이터 네트워크 등을 통해 통신할 수도 있다. 다른 실시예에서, 후술되는 바와 같이, ACM(1011)의 하드웨어 컴포넌트는 밀착 결합(tightly couple)될 수 있고, 단일의 물리적 하드웨어 장치에 통합될 수 있다. ACM(1011)의 휘발성 메모리 매체 및/또는 비휘발성 메모리 매체는, 한 실시예에서, 호스트(1014)의 CPU 캐시 계층구조와 통합되거나 기타의 방식으로 협력하여 기입 결합 등의 CPU 캐싱 기술을 활용할 수 있다.
하나 이상의 ACM 버퍼(1013)는, 소정 실시예에서, 후술되는 메모리 시스템(1018) 등의 호스트 디바이스(1014)의 CPU, 커널 등에 의해 어드레싱가능한 물리적 메모리 주소 공간의 주소 범위 내로 맵핑될 수 있다. 예를 들어, 하나 이상의 ACM 버퍼(1013)는, 직접 부착된 물리적 메모리로서, PCI-e 버스를 통해 MMIO 어드레싱가능한 물리적 메모리로서 맵핑되거나, 물리적 메모리의 하나 이상의 페이지로서 기타의 방식으로 맵핑될 수 있다. 물리적으로 맵핑된 ACM 버퍼(1013)의 적어도 일부는, 추가 실시예에서, 사용자-공간 프로세스 등에게 가상 메모리로서 액세스가능한 가상 메모리 주소 공간 내에 맵핑될 수 있다.
ACM 사용자(1016)가 ACM 버퍼(1013)에 직접 액세스하는 것을 허용하는 것은, 소정 실시예에서, 호스트 디바이스(1014)의 전통적인 운영 체제 메모리 스택의 하나 이상의 층을 바이패스하여, 커널-공간 및/또는 사용자-공간 애플리케이션으로의 직접 로드/저장 동작 액세스를 제공한다. 운영 체제는, 커널 모듈, 애플리케이션 프로그래밍 인터페이스, 후술되는 저장 관리 층(SML)(1050) 등을 이용하여, 한 실시예에서, 하나 이상의 ACM 사용자(1016)를 위해 메모리 시스템(1018)에 및 메모리 시스템(1018)으로부터 ACM 버퍼(1013)를 맵핑 및 언맵핑하고, 일단 운영 체제가 ACM 버퍼(1013)를 메모리 시스템(1018)에 맵핑하고 나면, ACM 사용자(1016)는 ACM 버퍼(1013)에 직접 액세스할 수 있다. 추가 실시예에서, 운영 체제는 또한 ACM 버퍼(1013) 등에 대한 시스템 플러시 콜(system flush call)을 서비스할 수 있다.
저장 관리 모듈(1050) 및/또는 후술되는 SML API(1019)는, 소정 실시예에서, ACM 사용자(1016), 운영 체제, 및/또는 기타의 엔티티가 맵 기능, 언맵 기능, 플러시 기능, 및/또는 기타의 ACM 기능 등의 소정의 ACM 기능을 요청하기 위한 인터페이스를 제공한다. 플러시 요청에 응답하여 플러시 동작을 수행하기 위해, ACM(1011)은 플러시 요청과 연관된 각각의 ACM 버퍼(1013)에 대한 커밋 동작을 수행할 수 있다. 각각의 ACM 버퍼(1013)는 연관된 ACM 버퍼(1013)의 ACM 메타데이터(1015)에 의해 표시된 바와 같이 커밋된다. 플러시 기능은, 다양한 실시예에서, 하나 이상의 ACM 버퍼(1013)에 대해, 모든 ACM 버퍼(1013)에 대해 전시스템적으로, 또는 이와 유사한 것에 대해 특유할 수 있다. 한 실시예에서, 호스트(1014)에 대한 CPU, 운영 체제 등은, CPU 캐시 플러시, 호스트(1014)에 대한 전시스템적 데이터 플러시, 또는 다른 일반적인 플러시 동작에 응답하여 또는 이들의 일부로서, ACM 플러시 동작을 요청할 수 있다.
ACM 사용자(1016), 운영 체제 등은, 데이터 스냅샷 또는 백업 등의 유지보수 동작을 수행하기 이전에 데이터 일관성을 유지하기 위해 플러시 동작을 요청하여, ACM 버퍼(1013)의 재할당 이전에 ACM 데이터를 커밋하거나, 스케쥴링된 재시작 이벤트 또는 ACM 버퍼(1013)로부터의 데이터의 플러싱이 유익할 수 있는 다른 상황들을 준비할 수 있다. ACM 사용자(1016), 운영 체제 등은, 소정 실시예에서, ACM(1011)이 ACM 버퍼(1013)에 대한 메모리 관리를 수행하거나; 애플리케이션들 또는 프로세스들간에 ACM 버퍼(1013)를 재할당하거나; 새로운 데이터, 애플리케이션, 또는 프로세스들에 대해 ACM 버퍼(1013)를 할당하거나; (공유된 ACM(1011) 실시예에서) ACM 버퍼(1013)의 이용을 상이한 호스트(1014)에 이송하거나; ACM 버퍼(1013)의 메모리 맵핑을 기타의 방식으로 조작하기 위해 하나 이상의 ACM 버퍼(1013)를 맵핑 및/또는 언맵핑할 것을 요청할 수 있다. 또 다른 실시예에서, 저장 관리 모듈(1050)은 후술되는 바와 같이 자원 관리 에이전트를 이용하여 ACM 버퍼(1013)를 동적으로 할당, 맵핑, 및/또는 언맵핑할 수 있다.
ACM(1011)은 트리거 이벤트의 경우에 저장된 데이터를 자동-커밋하는 것이 보장되기 때문에, 호스트(1014)(또는 ACM 사용자(1016))는 ACM(1011)에 기입된 데이터를 즉각적으로 "커밋된" 또는 비휘발성인 것으로 간주할 수 있는데, 그 이유는 호스트(1014) 또는 ACM 사용자(1016)는 트리거 이벤트 전과 후 양자에 데이터에 액세스할 수 있기 때문이다. 유익하게도, 재시작 이벤트는 ACM 사용자(1016)가 재시작되거나 재초기화되게 할 수 있지만, ACM(1011)에 저장된 데이터는 재시작 이벤트 이후에 재시작 이벤트 이전의 상태와 동일한 상태/조건에 있다. 따라서, 호스트(1014)는, 재시작 이벤트(또는 기타의 트리거 이벤트)시에 데이터를 커밋하기 위해 ACM(1011)의 미리 구성된 트리거에 의존함으로써 명시적인 커밋 명령을 필요로 하지 않고 메모리 기입 시멘틱을 이용하여(및 CPU 속도 및 입도로) ACM(1011)에 기입할 수 있다.
ACM(1011)은, 각각이 해당 ACM 메타데이터(1015)를 포함하는 복수의 자동-커밋 버퍼(1013)를 포함할 수 있다. 이하에서 논의되는 바와 같이, ACM 메타데이터(1015)는, ACM 버퍼(1013) 내의 데이터에 대한 논리적 식별자, 커밋 에이전트(1020)의 식별자, 커밋 프로세스 또는 기타의 처리 프로시져에 대한 명령어, 보안 데이터 등의, 자동-커밋 버퍼(1013)에 대한 트리거링 이벤트에 응답하여 ACM 데이터의 커밋을 용이하게 하는 데이터를 포함할 수 있다. 자동-커밋 버퍼(1013)는, 단일 섹터, 페이지, 바이트 등으로부터 가상 또는 논리 페이지 크기까지의 (예를 들어, 80 내지 400kb) 임의의 적절한 크기일 수 있다. 자동-커밋 버퍼(1013)의 크기는, 기저 비휘발성 저장 매체의 저장 용량, 및 보조 전원(1024)으로부터 이용가능한 유지 시간에 따라 구성될 수 있다.
한 실시예에서, ACM(1011)은, 호스트(1014), ACM 사용자(1016) 등에게 ACM 버퍼(1013)의 메모리의 실제 저장 용량보다 큰 ACM 버퍼(1013)의 저장 용량을 공표 또는 제공할 수 있다. 더 큰 저장 용량을 제공하기 위해, ACM(1011)은, ACM 버퍼(1013)를, 메모리 시스템(1018)에 및 전술된 비휘발성 메모리(110) 등의 ACM(1011)의 비휘발성 백킹 메모리에 동적으로 맵핑 및 언맵핑할 수 있다. 예를 들어, ACM(1011)은, ACM 버퍼(1013) 액세스가 필요로 할 때, ACM 버퍼(1013)에 대한 가상 주소 범위, 요구 페이지 데이터 및/또는 ACM 버퍼(1013)를 비휘발성 메모리(110)에 제공할 수 있다. 또 다른 실시예에서, 비휘발성 메모리(110)의 하나 이상의 미리정의된 LBA에 커밋하도록 무장된 ACM 버퍼(1013)의 경우, ACM(1011)은 ACM 데이터와 ACM 메타데이터(1015)를 ACM 버퍼(1013)로부터 비휘발성 메모리(110)의 연관된 LBA들에 동적으로 이동시켜, 더 큰 저장 용량을 제공하도록 ACM 버퍼(1013)의 저장 용량을 자유롭게 한다. ACM(1011)은 또한, ACM 버퍼가 이용가능하게 되거나, 현재 로딩된 ACM 버퍼(1013)의 데이터 바깥의 소정 주소가 요청되면, ACM 데이터와 ACM 메타데이터(1015)를 하나 이상의 ACM 버퍼(1013)에 다시 반환할 수 있어서, ACM 버퍼(1013)의 저장 용량을 관리한다.
ACM(1011)은, 재시작 조건(또는 기타의 미리 결정된 조건)에 응답하여 하나 이상의 "트리거링된 커밋 동작"을 구현하도록 미리 구성되거나 "무장"된다. 여기서 사용될 때, 재시작 조건 또는 이벤트는, 호스트(1014)의 소프트웨어 또는 하드웨어 셧다운/재시작, 호스트(1014) 컴퓨팅 디바이스의 고장, 호스트(1014)의 컴포넌트의 고장(예를 들어, 버스(1040)의 고장), 소프트웨어 오류(예를 들어, 호스트(1014) 또는 기타의 컴퓨팅 디바이스에서 실행중인 소프트웨어의 오류), 주 전력 접속(1030)의 소실, 무효한 셧다운, 또는 휘발성 메모리에 저장된 데이터의 소실을 야기할 수 있는 또 다른 이벤트를 포함할 수 있지만, 이것으로 제한되지 않는다.
한 실시예에서, 재시작 이벤트는, 호스트(1014)의 휘발성 메모리 또는 호스트(1014)의 컴포넌트 내에 저장된 데이터의 소실을 야기할 수 있는 이벤트 이후의 처리를 개시하는 호스트(1014)의 동작을 포함한다. 호스트(1014)는, 일단 재시작 조건 또는 이벤트가 종료하거나, 주 전원이 이용가능하거나 하면, 처리를 개시/재개할 수 있다.
ACM(1011)은 재시작 이벤트/조건이 발생했다는 것을 검출하고 및/또는 복구 스테이지를 개시함으로써 재시작 이벤트에 응답하도록 구성된다. 복구 스테이지 동안에, ACM(1011)은 ACM(1011)의 데이터를 재시작 이벤트 이전의 상태로 복구할 수 있다. 대안으로서, 또는 추가로, 복구 스테이지 동안에, ACM(1011)은, 재시작 이벤트 이후에 ACM(1011) 내의 데이터가 ACM 사용자에게 이용가능하다는 보장을 만족하는데 필요한 ACM 데이터 또는 ACM 메타데이터(1015)의 처리를 완료할 수 있다. 대안으로서, 또는 추가로, 복구 스테이지 동안에, ACM(1011)은, 재시작 이벤트 이후에 ACM(1011) 내의 데이터가 커밋된다는 보장을 만족하는데 필요한 ACM 데이터 또는 ACM 메타데이터(1015)의 처리를 완료할 수 있다. 여기서 사용될 때, "커밋"란 ACM(1011) 내의 데이터가 재시작 이벤트 이후에도 소실이나 변질로부터 보호되고 데이터와 연관된 무장 정보에 따라 필요하다면 지속된다는 것을 의미한다. 소정 실시예에서, 복구 스테이지는, 재시작 이벤트가 발생하더라도, ACM 데이터가 지속되도록 ACM 데이터 및 ACM 메타데이터(1015)를 처리하는 것을 포함한다.
여기서 사용될 때, 트리거링된 커밋 동작은, 트리거링 이벤트(예를 들어, 재시작 이벤트, 플러시 명령, 또는 기타의 미리 결정된 이벤트)에 응답하여 ACM(1011)에 의해 수행되도록 무장된 미리 구성된 커밋 동작이다. 소정 실시예에서, 트리거링된 커밋 동작은, 시스템 재시작 이후에도 ACM(1011)의 데이터를 이용가능하게 하고, 재시작 이벤트 이후에 데이터가 ACM 사용자에게 액세스가능할 것이라는 ACM(1011)이 보장을 만족하기에 적어도 충분한 ACM 데이터 및/또는 ACM 메타데이터(1015)를 지속시키며, 소정 실시예에서, 이 보장은, 적어도 부분적으로, ACM(1011)의 데이터를 비휘발성 메모리 매체에 커밋 및/또는 지속시킴으로써 만족된다. 트리거링된 커밋 동작은, 재시작 이벤트 이전에, 동안에, 및/또는 이후에 완료될 수 있다. 예를 들어, ACM(1011)은, 재시작 이벤트 이후의 유지 시간 동안에 비휘발성 메모리(110) 내의 미리정의된 임시 장소에 ACM 데이터 및 ACM 메타데이터(1015)를 기입할 수 있고, 일단 재시작 이벤트가 완료되고 나면, ACM 데이터를 다시 ACM 버퍼(1013)에, 비휘발성 메모리(110) 내의 의도한 장소에 복사하거나, 기타의 처리를 수행할 수 있다.
트리거링된 커밋 동작은, ACM(1011)이 요청되거나 및/또는 특정한 ACM 버퍼(1013)가 호스트(1014)에 의한 이용을 위해 할당될 때, "무장"될 수 있다. 일부 실시예에서, ACM(1011)은 기타의 비-재시작 조건에 응답하여 트리거링된 커밋 동작을 구현하도록 구성될 수 있다. 예를 들어, 특정한 논리 주소로 향하는 동작(예를 들어, 포크(poke))는 ACM(1011)을 트리거할 수 있고, 플러시 동작은 ACM(1011)을 트리거할 수 있고, 등등이다. 이러한 유형의 트리거는, 정상 동작(예를 들어, 비재시작 또는 비고장 조건) 동안에 ACM(1011)의 데이터를 커밋하는데 이용될 수 있다.
무장(arming)은 자동-커밋 버퍼(1013)가 호스트(1014)의 메모리 시스템(1018) 내에 맵핑될 때 발생할 수 있다. 대안으로서, 무장은 별개의 동작으로서 발생할 수 있다. 여기서 사용될 때, 자동-커밋 버퍼(1013)를 무장시키는 것은, 동작이 트리거링될 때 트리거링된 동작을 완료하는데 요구되는 필요한 구성 단계를 수행하는 것을 포함한다. 무장은, 예를 들어, ACM(1011)에 ACM 메타데이터(1015)를 제공하는 것 등을 포함할 수 있다. 소정 실시예에서, 무장은, 트리거링된 동작이 트리거 이벤트 이후에 완료될 수 있도록, 트리거링된 동작에 대한 최소 세트의 단계를 완료하는데 요구되는 필요한 구성 단계를 수행하는 것을 더 포함한다. 소정 실시예에서, 무장은 무장 데이터를 확인하는 것(예를 들어, 자동-커밋 버퍼(1013)의 내용, 또는 그 일부가 ACM 메타데이터(1015)에서 명시된 바와 같이 커밋될 수 있다는 것을 확인하는 것), 및 ACM(1011)이 에러나 중단 없이 트리거링된 동작을 적절히 수행할 수 있고 적절히 수행하도록 구성되어 있다는 것을 확인하는 것을 더 포함한다.
확인은, 일단 무장되고 나면, ACM(1011)은 요구될 시 트리거링된 커밋 동작을 구현할 수 있다는 것을 보장할 수 있다. ACM 메타데이터(1015)가 확인될 수 없다면(예를 들어, 논리적 식별자 또는 기타의 ACM 메타데이터(1015)가 무효하거나, 변질되었거나, 이용가능하지 않는 등), 무장 동작은 실패할 수 있다; 자동-커밋 버퍼(1013)가 유효한 ACM 메타데이터(1015)로 성공적으로 무장되지 않는다면, 자동-커밋 버퍼(1013)에 관한 메모리 시멘틱 동작은 허용되지 않을 수도 있다. 예를 들어, LBA와 물리적 주소 사이의 일대일 맵핑을 갖는 하드 디스크에 의해 백킹되는 자동-커밋 버퍼(1013)는, 무장 동작을 위해 제공된 LBA가 디스크 상의 유효한 (및 동작상의) 물리적 주소에 맵핑되지 않는다면 무장되지 못할 수 있다. 이 경우에, 확인은, LBA가 유효한 대응하는 물리적 주소를 갖고 있는지를 판정하기 위해 디스크에게 질의하는 것 및/또는 자동-커밋 버퍼(1013)의 ACM 메타데이터(1015)로서 물리적 주소를 이용하는 것을 포함할 수 있다.
ACM(1011)(또는 기타의 엔티티)이 재시작 조건 등의 트리거링 이벤트를 검출 및/또는 그 통보를 수신하는 것에 응답하여 무장된 트리거링된 커밋 동작들이 구현된다. 일부 실시예에서, 무장된 커밋 동작은, ACM(1011)에 의해 수행될 수 있고 호스트(1014) 또는 (이하에서 논의되는) ACM(1011)의 "격리 구역" 외부의 기타의 디바이스들과의 추가의 통신을 요구하지 않는 커밋 동작이다. 따라서, ACM(1011)은 호스트(1014) 및/또는 그 다른 컴포넌트들의 트리거링된 커밋 동작을 자율적으로 구현하도록 구성될 수 있다. ACM(1011)은, 트리거링된 커밋 동작이 에러 없이 및/또는 외부 에러 조건에도 불구하고 커밋될 수 있다는 것을 보장할 수 있다. 따라서, 일부 실시예에서, ACM(1011)의 트리거링된 커밋 동작은, 잠재적으로 에러를-도입하는 로직, 컴퓨테이션, 및/또는 계산을 포함하거나 및/또는 요구하지 않는다. 일부 실시예에서, 트리거링된 커밋 동작은, 휘발성 ACM(1011)에 저장된 데이터를 지속적 저장소 위치에 커밋하는 것을 포함한다. 다른 실시예에서, 트리거링된 커밋 동작은, 후술되는 바와 같이, 트리거링 이벤트 이전에, 동안에, 및/또는 이후에 커밋된 데이터의 추가적 처리를 포함할 수 있다. ACM(1011)은 미리 구성된 트리거링된 커밋 동작을 자율적으로 구현할 수 있다; ACM(1011)은 호스트(1014)에서의 고장 또는 재시작 조건, 주 전력의 소실 등에도 불구하고 트리거링된 커밋 동작을 구현할 수 있다. ACM(1011)은, 전술된 바와 같은 ACM(1011)의 무장으로 인해, 트리거링된 커밋 동작을 독립적으로 구현할 수 있다.
ACM 버퍼(1013)에 대한 ACM 메타데이터(1015)는, 소정 실시예에서, ACM 버퍼(1013)의 데이터를 식별한다. 예를 들어, ACM 메타데이터(1015)는, 데이터의 소유자를 식별할 수 있고, 데이터 그 자체를 기술할 수 있는 등등이다. 한 실시예에서, ACM 버퍼(1013)는, 복수의 엔티티 등에 의한 처리를 위한, 복수 레벨의 ACM 메타데이터(1015)를 가질 수 있다. ACM 메타데이터(1015)는, 재시작시에 언팩키징될 수 있고 다양한 엔티티나 커밋 에이전트(1020)에 의해 전술된 바와 같이 트리거링된 커밋 동작을 이행하기 위해 연관된 ACM 데이터를 처리할 방법을 판정하는데 이용될 수 있는 복수의 네스팅된 헤더를 포함할 수 있다. 예를 들어, ACM 메타데이터(1015)는, 블록 메타데이터, 파일 메타데이터, 애플리케이션 레벨 메타데이터, 프로세스 실행 포인트 또는 콜백 메타데이터, 및/또는 다른 레벨의 메타데이터를 포함할 수 있다. 각 레벨의 메타데이터는 상이한 커밋 에이전트(1020) 등과 연관될 수 있다. 소정 실시예에서, ACM 메타데이터(1015)는, 연관된 ACM 데이터의 소유자에 대한 서명, 사전-공유된 키, 넌스(nonce), 또는 ACM(1011)이, 복구 동안에, 커밋 에이전트(1020), ACM 사용자(1016) 등이 커밋된 ACM 메타데이터(1015) 및/또는 연관된 ACM 데이터를 액세스하는 것이 인가되어있는지를 확인하기 위해 이용할 수 있는 기타의 것과 같은, 보안 데이터를 포함할 수 있다. 이런 방식으로, ACM(1011)은 소유권 스푸핑(ownership spoofing) 또는 기타의 비인가된 액세스를 방지할 수 있다. 한 실시예에서, ACM(1011)은, 요청측 커밋 에이전트(1020), ACM 사용자(1016) 등이 정합하는 서명 등의 유효한 인증을 제공할 때까지, ACM 메타데이터(1015) 및/또는 연관된 ACM 데이터를 릴리스하지 않는다.
도 3에 관하여 이하에서 설명되는, 커밋 관리 장치(1122) 등의 하나 이상의 커밋 에이전트(1020)는, 소정 실시예에서, 연관된 ACM 메타데이터(1015)에 기초하여 ACM 데이터를 처리해 트리거링된 커밋 동작을 실행한다. 커밋 에이전트(1020)는, 다양한 실시예에서, 디바이스 드라이버, 커널 모듈, 저장 관리 모듈(1050), 쓰레드, 사용자 공간 애플리케이션 등의 소프트웨어, 및/또는 ACM 메타데이터(1015)를 해석하고 ACM 메타데이터(1015)에 따라 연관된 ACM 데이터를 처리하도록 구성된 후술되는 제어기(1004) 등의 하드웨어를 포함할 수 있다. 복수의 커밋 에이전트(1020)를 갖는 실시예에서, ACM 메타데이터(1015)는 연관된 ACM 데이터를 처리하는 하나 이상의 커밋 에이전트(1020)를 식별할 수 있다. ACM 메타데이터(1015)는, 다양한 실시예에서, 기동할 커밋 에이전트(102)의 프로그램/기능(예를 들어, 프로그램의 파일 경로)을 식별함으로써, 커밋 에이전트(1020)의 컴퓨터 실행가능한 코드(예를 들어, 2진 코드 또는 스크립트)를 포함함으로써, 한 세트의 등록된 커밋 에이전트(1020) 중 어느 것을 이용할지를 나타내는 고유 식별자를 포함함으로써, 및/또는 커밋된 ACM 메타데이터(1015)와 연관된 커밋 에이전트(1020)를 기타의 방식으로 표시함으로써, 커밋 에이전트(1020)를 식별할 수 있다. ACM 메타데이터(1015)는, 소정 실시예에서, 재시작 복구시에 ACM 데이터를 커밋하기 위한, 커밋 에이전트(1020)에 대한 펑션 포인터 및 한계 파라미터 등의 정보를 포함하는 펑션 또는 엔빌로프일 수 있다.
한 실시예에서, 주 커밋 에이전트(1020)는 ACM 메타데이터(1015)를 처리하고, ACM 메타데이터(1015) 및/또는 ACM 데이터를 ACM 메타데이터(1015)에 의해 식별된 하나 이상의 보조 커밋 에이전트(1020)에 건네거나 전송한다. 주 커밋 에이전트(1020)는, 한 실시예에서, ACM(1011), 제어기(1004) 등과 통합될 수 있다. ACM 사용자(1016) 또는 기타의 제3자는, 소정 실시예에서, ACM 사용자(1016) 또는 기타의 제3자가 소유하는 ACM 데이터를 위한 보조 커밋 에이전트(1020)를 제공할 수 있고, 주 커밋 에이전트(1020)는 제공된 보조 커밋 에이전트(1020)와 협력하여 ACM 데이터를 처리할 수 있다. ACM 데이터를 위한 하나 이상의 커밋 에이전트(1020)는, 한 실시예에서, ACM 데이터가 재시작 이벤트 후에 ACM 데이터의 소유자에게 액세스가능하게 머무르는 것을 보장 및/또는 보증한다. 트리거링된 커밋 동작에 관하여 전술된 바와 같이, 커밋 에이전트(1020)는 ACM 메타데이터(1015) 및 연관된 ACM 데이터를 처리하여, 고장이나 기타의 재시작 이벤트 등의 트리거 이벤트 이전에, 동안에, 및/또는 이후에 하나 이상의 트리거링된 커밋 동작을 수행할 수 있다.
한 실시예에서, 커밋 에이전트(1020)는, ACM(1011) 등과 협력해, 재시작 또는 기타의 트리거 이벤트에 응답하여 지속적 또는 비휘발성 장소에 ACM 메타데이터(1015)를 저장할 수 있다. 커밋 에이전트(1020)는 알려진 장소에 ACM 메타데이터(1015)를 저장하거나, 알려진 장소에 ACM 메타데이터(1015)로의 포인터를 저장하거나, ACM 메타데이터(1015)를 외부 에이전트나 데이터 스토어 등에 제공하여, 일단 재시작 또는 기타의 트리거 이벤트가 완료된 후에 커밋 에이전트(1020)가 ACM 메타데이터(1015) 및 연관된 ACM 데이터를 처리할 수 있게 한다. 알려진 장소는, 비휘발성 메모리(110)의 하나 이상의 미리정의된 논리 블록 주소나 물리적 주소, 미리정의된 파일 등을 포함할 수 있다. 소정 실시예에서, ACM(1011)의 하드웨어는 ACM 메타데이터(1015) 및/또는 ACM 메타데이터(1015)로의 포인터를 알려진 장소에 기입하기 위해 협력하도록 구성된다. 한 실시예에서, 알려진 장소는, 호스트(1014)가 재시작 이벤트로부터 복구되고 커밋 에이전트(1020)가 ACM 데이터 및 ACM 메타데이터(1015)를 계속 처리할 수 있을 때까지 ACM 데이터 및 ACM 메타데이터(1015)를 저장하는 임시 장소일 수 있다. 또 다른 실시예에서, 장소는 ACM 메타데이터(1015)와 연관된 지속적 장소일 수 있다.
재시작 이벤트 또는 기타의 트리거 이벤트의 완료에 응답하여, 복구 동안에, 한 실시예에서, 커밋 에이전트(1020)는, 비휘발성 메모리(110)로부터, 미리정의된 장소 등으로부터, ACM 메타데이터(1015)를 위치파악하고 회수할 수 있다. 커밋 에이전트(1020)는, ACM 메타데이터(1015)를 위치파악하고 회수하는 것에 응답하여, 회수된 ACM 메타데이터(1015)와 연관된 ACM 데이터를 위치파악한다. 커밋 에이전트(1020)는, 소정 실시예에서, 커밋 에이전트(1020)가 ACM 메타데이터(1015)를 위치파악하는 것과 실질적으로 유사한 방식으로 ACM 데이터를 위치파악할 수 있고, 미리정의된 장소로부터 ACM 데이터를 회수하며, 미리정의된 장소로부터 ACM 데이터로의 포인터를 회수하고, 외부 에이전트나 데이터 스토어로부터 ACM 데이터를 수신할 수 있다. 한 실시예에서, ACM 메타데이터(1015)는 연관된 ACM 데이터를 식별하고 커밋 에이전트(1020)는 ACM 메타데이터(1015)를 이용하여 연관된 ACM 데이터를 위치파악하고 회수한다. 예를 들어, 커밋 에이전트(1020)는 미리정의된 맵핑을 이용하여 ACM 데이터를 ACM 메타데이터(1015)와 연관시키고(예를 들어, ACM 데이터의 제N 조각은 ACM 메타데이터(1015)의 제N 조각과 연관될 수 있는 등등), ACM 메타데이터(1015)는 연관된 ACM 데이터에 대한 포인터나 인덱스를 포함하거나, 커밋된 ACM 메타데이터(1015)와 연관된 ACM 데이터 사이에는 또 다른 미리정의된 관계가 존재할 수 있다. 또 다른 실시예에서, 외부 에이전트는 커밋 에이전트(1020)에게 연관된 ACM 데이터가 어디에 위치해 있는지를 표시할 수 있다.
ACM 메타데이터(1015) 및 연관된 ACM 데이터를 위치파악하고 회수하는 것에 응답하여, 커밋 에이전트(1020)는 ACM 메타데이터(1015)를 해석하고 ACM 메타데이터(1015)에 기초하여 연관된 ACM 데이터를 처리한다. 예를 들어, 한 실시예에서, ACM 메타데이터(1015)는 커밋 에이전트(1020)가 복구시에 ACM 데이터를 기입할 블록 저장 볼륨 및 LBA(들)을 식별할 수 있다. 또 다른 실시예에서, ACM 메타데이터(1015)는 커밋 에이전트(1020)가 복구시에 ACM 데이터를 기입할 파일 시스템 내의 파일 내의 오프셋을 식별할 수 있다. 추가 실시예에서, ACM 메타데이터(1015)는, 데이터베이스레코드 등의, 커밋 에이전트(1020)가 복구시에 ACM 데이터를 두기 위한 애플리케이션 특유의 지속적 객체를 식별할 수 있다. ACM 메타데이터(1015)는, 추가 실시예에서, 지연된 프로시져 호출 등의, 커밋 에이전트(1020)가 ACM 데이터를 처리하기 위해 호출하는 프로시져를 나타낼 수 있다. ACM(1011)이 휘발성 ACM 버퍼(1013)를 비휘발성 메모리로서 공표하거나 제공하는 실시예에서, ACM 메타데이터(1013)는 커밋 에이전트(1020)가 복구시에 ACM 데이터를 기입할 ACM 버퍼(1013)를 식별할 수 있다.
소정 실시예에서, ACM 메타데이터(1015)는 ACM 메타데이터(1015) 및/또는 연관된 ACM 데이터를 더 처리하기 위해 하나 이상의 보조 커밋 에이전트(1020)를 식별할 수 있다. 보조 커밋 에이전트(1020)는 전술된 커밋 에이전트(1020)와 실질적으로 유사한 방식으로 ACM 메타데이터(1015) 및 연관된 ACM 데이터를 처리할 수 있다. 각각의 커밋 에이전트(1020)는 ACM 메타데이터(1015)의 상이한 레벨이나 서브셋 등에 따라 ACM 데이터를 처리할 수 있다. ACM 메타데이터(1015)는, 다양한 실시예에서, 기동할 보조 커밋 에이전트(102)의 프로그램/기능(예를 들어, 프로그램의 파일 경로)를 식별함으로써, 보조 커밋 에이전트(1020)의 컴퓨터 실행가능한 코드를 포함함으로써, 한 세트의 등록된 보조 커밋 에이전트(1020) 중 어느 것을 이용할지를 나타내는 고유 식별자를 포함함으로써, 및/또는 커밋된 ACM 메타데이터(1015)와 연관된 보조 커밋 에이전트(1020)를 기타의 방식으로 표시함으로써, 보조 커밋 에이전트(1020)를 식별할 수 있다.
한 실시예에서, 보조 커밋 에이전트(1020)는, 이전의 커밋 에이전트(1020)가 ACM 메타데이터(1015) 및/또는 ACM 데이터를 처리한 후에 ACM 메타데이터(1015) 및/또는 ACM 데이터의 나머지 부분을 처리한다. 추가 실시예에서, ACM 메타데이터(1015)는, 호스트가 재시작 이벤트를 경험한 이후에도 보조 커밋 에이전트(1020)가 ACM 데이터를 지속시킬 ACM(1011)으로부터 분리된 또 다른 비휘발성 매체를 식별할 수 있다. 고장이나 기타의 재시작 조건 등의 트리거 이벤트에 응답하여 ACM 메타데이터(1015) 및 ACM 버퍼(1013)로부터의 연관된 ACM 데이터를 커밋하고, 일단 트리거 이벤트가 완료되거나 복구되고 나면 ACM 메타데이터(1015) 및 연관된 ACM 데이터를 처리함으로써, ACM(1011)은 ACM 데이터의 지속성 및/또는 ACM 메타데이터(1015)에 의해 정의된 트리거링된 커밋 동작(들)의 수행을 보장할 수 있다.
ACM(1011)은, 전술된 호스트(114)와 같이, 운영 체제, 가상 머신, 애플리케이션, 프로세서 복합체(1012), 중앙 처리 유닛(CPU)(1012) 등을 포함할 수 있는 호스트(1014)에 통신가능하게 결합된다. 도 2의 예에서, 이들 엔티티들은 일반적으로 ACM 사용자(1016)라 부른다. 따라서, 여기서 사용될 때, ACM 사용자란, 운영 체제, 가상 머신 운영 체제(예를 들어, 하이퍼바이저), 애플리케이션, 라이브러리, CPU 인출-실행 알고리즘, 또는 기타의 프로그램이나 프로세스를 말할 수 있다. ACM(1011)은, 시스템 버스, 프로세서의 메모리 교환 버스 등의(예를 들어, HyperTransport, QuickPath Interconnect(QPI), PCI 버스, PCI-e 버스 등) 버스(1040)를 통해 호스트(1014)(뿐만 아니라 ACM 사용자(1016))에 통신가능하게 결합될 수 있다. 일부 실시예에서, 버스(1040)는 주 전력 접속(1030)를 포함한다(예를 들어, 비휘발성 저장 디바이스(1102)는 버스(1040)를 통해 전력공급될 수 있다). 여기서 설명된 일부 실시예는 비휘발성 저장 디바이스(1102)의 소정 실시예 등의 고체-상태 저장 디바이스를 포함하지만, 본 개시내용에 이 점에서 제한되지 않으며, 임의의 적절한 기록/메모리/저장 디바이스(1102) 및/또는 기록/메모리/저장 매체(1110)를 이용하도록 구성될 수 있다.
ACM(1011)은 트리거링된 커밋 동작을 수행하는 데 이용되는 디바이스와 밀착 결합될 수 있다. 예를 들어, ACM(1011)은, 동일한 디바이스, 주변기기, 카드, 또는 제어기(1004) 및/또는 보조 전원(1024)와 동일한 "격리 구역" 내에 구현될 수 있다. 트리거링된 커밋 동작을 구현하는데 이용되는 컴포넌트들로의 ACM(1011)의 밀착 결합은, 재시작 조건의 이벤트시에 ACM(1011)이 트리거링된 자동-커밋 동작을 구현할 수 있는 (산업 표준이나 기타의 메트릭에 기초한) 허용가능한 레벨의 보장을 제공할 수 있는 "격리 구역"을 정의한다. 도 2의 예에서, ACM(1011)의 격리 구역에는 ACM(1011)의 밀착 결합에 의해 (이하에서 논의되는) 자율 제어기(1004)와 보조 전원(1024)이 제공된다.
제어기(1004)는, 네트워크 제어기(예를 들어, 네트워크 인터페이스 제어기), 저장 제어기, 전용 재시작 조건 제어기 등의 I/O 제어기를 포함할 수 있다. 제어기(1004)는, 펌웨어, 하드웨어, 펌웨어와 하드웨어의 조합 등을 포함할 수 있다. 도 2의 예에서, 제어기(1004)는, 전술된 저장 제어기(104) 및/또는 비휘발성 저장 디바이스 제어기 등의 저장 제어기를 포함한다. 제어기(1004)는 호스트(1014)와는 독립적으로 동작하도록 구성될 수 있다. 따라서, 제어기(1004)는, 호스트(1014)(및/또는 ACM 사용자(1016))에서의 고장 및/또는 주 전력 접속(1030)의 소실 등의, 전술된 재시작 조건에도 불구하고 ACM(1011)의 트리거링된 커밋 동작(들)을 구현하는데 이용될 수 있다.
ACM(1011)은, 전술된 주 전력 접속(130)과 같이, 시스템 버스(버스(1040)), 외부 전원, 호스트(1014) 등에 의해 제공될 수 있는, 주 전력 접속(1030)에 의해 전력공급된다. 소정 실시예에서, ACM(1011)은 또한, 보조 전원(1024)을 포함하거나 및/또는 이에 결합된다. 보조 전원(1024)은 주 전력 접속(1030)의 고장 이벤트시에 ACM(1011)에 전력을 공급할 수 있다. 보조 전원(1024)은, 주 전력 접속(1030)이 고장날 때 ACM(1011) 및/또는 제어기(1004)가 미리 구성된 트리거링된 커밋 동작(들)의 적어도 일부를 자율적으로 구현할 수 있게 하기에 적어도 충분한 전력을 제공할 수 있다. ACM(1011)은, 한 실시예에서, 보조 전원(1024)으로부터 전력을 수신하는 동안 적어도 충분한 데이터(예를 들어, ACM 데이터 및 ACM 메타데이터(1015))를 커밋 또는 지속시켜, 일단 주 전력 접속(1030)이 복구되고 나면 데이터로의 액세스를 허용한다. 소정 실시예에서, 전술된 바와 같이, ACM(1011)은, 하나 이상의 커밋 에이전트(1020) 등을 이용하여, 주 전력 접속(1030)이 복구된 후에 미리 구성된 트리거링된 커밋 동작(들)의 적어도 일부를 수행할 수 있다.
ACM(1011)은 휘발성 메모리 저장소를 포함할 수 있다. 도 2의 예에서, ACM(1011)은 하나 이상의 자동-커밋 버퍼(1013)를 포함한다. 자동-커밋 버퍼(1013)는 휘발성 랜덤 액세스 메모리(RAM)를 이용하여 구현될 수 있다. 일부 실시예에서, 자동-커밋 버퍼(1013)는 ACM(1011)의 독립된 컴포넌트들로서 (예를 들어, 별개의 RAM 모듈로) 구현될 수 있다. 대안으로서, 자동-커밋 버퍼(1013)는, 제어기(1004), 프로세서 복합체(1012), FPGA, 또는 ACM(1011)의 기타의 컴포넌트 내에서 이용가능한 임베딩된 휘발성 메모리(예를 들어, BRAM) 상에 구현될 수 있다.
자동-커밋 버퍼(1013) 각각은 각각의 트리거링된 커밋 동작으로 미리 구성(무장)될 수 있다. 일부 실시예에서, 각각의 자동-커밋 버퍼(1013)는 그 자신의 각각의 ACM 메타데이터(1015)를 포함할 수 있다. ACM 메타데이터(1015)는, 일부 실시예에서, 자동-커밋 버퍼(1013) 상에 저장된 데이터가 커밋되는 방법 및/또는 장소를 식별한다. 일부 예에서, ACM 메타데이터(1015)는, 자동-커밋 버퍼(1013) 내의 데이터와 연관된 논리적 식별자(예를 들어, 객체 식별자, 논리 블록 주소(LBA), 파일명 등)를 포함할 수 있다. 논리적 식별자는 미리정의될 수 있다. 한 실시예에서, 자동-커밋 버퍼(1013)가 커밋될 때, 그 내부의 데이터는 ACM 메타데이터(1015)와 함께 커밋될 수 있다(예를 들어, 데이터는 논리적 식별자에 대응하는 및/또는 논리적 식별자와 연관하여 물리적 저장 위치에 저장될 수 있다). 재시작 이벤트 후의 유지 시간 동안에 ACM 데이터를 커밋하는 것을 용이하게 하기 위해, ACM(1011)은 단일 페이지 기입 등의 단일 원자 동작(atomic operation)에서 ACM 데이터 및 ACM 메타데이터(1015)를 기입할 수 있다. 단일 원자 동작에서 ACM 및 ACM 메타데이터(1015)의 기입을 허용하기 위해, ACM 버퍼(1013)는 ACM(1011)에 의해 이용되는 비휘발성 저장 매체에 대한 단일 기입 단위에 대응하도록 크기조정될 수 있다. 일부 실시예에서, ACM 메타데이터(1015)는, 네트워크 주소, LBA, 또는 데이터에 대한 커밋 장소의 또 다른 식별자를 포함할 수 있다.
추가 실시예에서, 논리적 식별자는 자동-커밋 버퍼(1013)를 데이터의 소유자와 연관시켜, 데이터와 그 소유자는 재시작 이벤트 이후에 소유 관계를 유지할 수 있다. 예를 들어, 논리적 식별자는, 애플리케이션, 애플리케이션 유형, 프로세스 ID, ACM 사용자(1016), 또는 호스트 디바이스(1014)의 또 다른 엔티티를 식별하여, ACM 데이터가 식별된 엔티티와 지속적으로 연관되도록 할 수 있다. 한 실시예에서, 논리적 식별자는, 파일 시스템 명칭공간, 사용자 명칭공간, 프로세스 명칭공간 등의, 기존의 명칭공간의 멤버일 수 있다. 다른 실시예들에서, 논리적 식별자는, ACM 명칭공간 등의, 새로운 또는 별개의 명칭공간의 멤버일 수도 있다. 예를 들어, 통신 엔티티들을 식별하기 위한 분산된 시스템에서 통상적으로 이용되는 바와 같은, 전역적으로 고유한 식별자 명칭공간이 논리적 식별자들에 대한 ACM 명칭공간으로서 이용될 수 있다. ACM(1011)은, 일단 재시작 이벤트가 완료되고 나면 데이터에 대한 논리적 식별자에 따라 커밋된 ACM 데이터를 처리할 수 있다. 예를 들어, ACM(1011)은 재시작 이벤트에 응답하여 ACM 데이터를 임시 장소와 연관된 논리적 식별자에 커밋할 수 있고, 재시작 이벤트 후의 복구 동안에 또 다른 논리적 식별자에 의해 식별된 지속적 장소에 ACM 데이터를 기입할 수 있다.
전술된 바와 같이, ACM(1011)은, ACM(1011) 상의 데이터가 재시작 조건 이벤트시에 커밋될 것을 보장하는, 트리거링된 커밋 동작을 구현하는데 이용되는 컴포넌트들과 밀착 결합될 수 있다(예를 들어, ACM(1011)은 "격리 구역" 내에 구현된다). 여기서 사용될 때, "밀착 결합"이란, ACM(1011)의 트리거링된 커밋 동작을 구현하는데 이용되는 컴포넌트들이 동일한 "격리 구역", 또는 2개 이상의 별개의 신뢰받는 "격리 구역" 내에 있고, 전력 소실, 무효한 셧다운, 호스트(1014) 고장 등의 외부 고장이나 재시작 조건에도 불구하고 동작하도록 구성된 구성을 말한다. 도 2는, ACM(1011), 자동-커밋 버퍼(1013), 호스트(1014)와 독립적으로 동작하도록 구성된 제어기(1004), 및 트리거링된 커밋 동작들이 완료되는 동안 제어기(1004)와 ACM(1011)(자동-커밋 버퍼(1013)를 포함함)에 전력을 공급하도록 구성된 보조 전원(1024) 간의 밀착 결합을 나타낸다. 밀착 결합의 예로서는, 호스트(1014)와 전자적으로 통신하는 별개의 주변기기 내에서, 단일 인쇄 회로 기판(PCB) 상에 제어기(1004), 보조 전원(1024), 및 자동-커밋 버퍼(1013)를 포함하는 것을 포함하지만 이것으로 제한되지 않는다. 다른 실시예에서, ACM(1011)은, 다른 상이한 세트의 컴포넌트들(예를 들어, 리던던트 호스트 디바이스, 리던던트 통신 버스, 리던던트 제어기, 대안적 전원 등)에 밀착 결합될 수 있다.
ACM(1011)은 호스트(1014) 및/또는 그 상에서 실행하는 ACM 사용자(1016)에 의해 액세스가능하다. ACM(1011)으로의 액세스는, CPU 로드/저장 명령, DMA 명령, 제3자 DMA 명령, RDMA 명령, 원자 테스트 및 세트 명령, 조작가능한 메모리 포인터 등의, 메모리 액세스 시멘틱을 이용하여 제공될 수 있다. 일부 실시예에서, ACM(1011)으로의 메모리 시멘틱 액세스는 버스(1040)를 통해(예를 들어, 후술되는 PCI-e BAR를 이용하여) 구현된다.
메모리 시멘틱 패러다임에서, 호스트(1014) 상에서 실행되는 ACM 사용자(1016)는 호스트(1014)의 메모리 시스템(1018)을 통해 ACM(1011)에 액세스할 수 있다. 메모리 시스템(1018)은, 메모리 관리 유닛, 가상 메모리 시스템, 가상 메모리 관리자, 운영 체제에 의해 구현된 가상 메모리 서브시스템(또는 유사한 메모리 주소 공간), 가상화 시스템(예를 들어, 하이퍼바이저), 애플리케이션 등을 포함할 수 있다. ACM(1011)의 일부(예를 들어, 하나 이상의 자동-커밋 버퍼(1013))는 메모리 시스템(1018)에 맵핑되되, 맵핑된 메모리 주소 범위(ACM 주소 범위(1021)) 내에서 구현된 메모리 시멘틱 동작들이 ACM(1011) 상에서 수행되도록 맵핑된다.
저장 관리 모듈(1050)은, 소정 실시예에서, 자원 관리 에이전트 등을 이용하여, 복수의 ACM 사용자(1016) 사이에서 ACM(1011)의 저장 용량을 할당 및/또는 중재한다. 저장 관리 모듈(1050)의 자원 관리 에이전트는, 호스트 디바이스(1014)의 운영 체제에 제공된 커널 모듈, 디바이스 드라이버, 쓰레드, 사용자 공간 애플리케이션 등을 포함할 수 있다. 한 실시예에서, 자원 관리 에이전트는 얼마큼의 ACM 버퍼(1013)의 저장 용량을 ACM 사용자(1016)에 할당할지 및 할당이 얼마나 오래동안 지속될지를 판정한다. 소정 실시예에서, ACM(1011)은 재시작 이벤트들에 걸쳐 데이터를 커밋 또는 지속시키기 때문에, 자원 관리 에이전트는 재시작 이벤트들에 걸쳐 ACM 버퍼(1013)의 저장 용량을 할당할 수 있다.
자원 관리 에이전트는, 상이한 커널 및/또는 사용자 공간 애플리케이션 등의, 상이한 ACM 사용자(1016)에 상이한 ACM 버퍼(1013)를 할당할 수 있다. 자원 관리 에이전트는 ACM 버퍼(1013)를 상이한 사용 유형들에 할당할 수 있고, ACM 버퍼(1013)를 디스테이징 등을 위한 상이한 비휘발성 메모리(110)에 맵핑할 수 있다. 한 실시예에서, 자원 관리 에이전트는 ACM 메타데이터(1015) 등에 의해 ACM 버퍼(1013)과 연관된 커밋 에이전트(1020)에 기초하여 ACM 버퍼(1013)를 할당할 수 있다. 예를 들어, 마스타 커밋 에이전트(1020)는, ACM(1011)의 ACM 버퍼(1013)에 대한 할당 정보를 식별하고 한 실시예에서는 하나 이상의 보조 커밋 에이전트(1020)를 식별하는 할당 맵을 ACM 메타데이터(1015)에서 유지할 수 있고, 마스타 커밋 에이전트(1020)는 ACM 버퍼(1013)의 일부를 보조 커밋 에이전트(1020) 각각에 할당할 수 있다. 또 다른 실시예에서, 커밋 에이전트(1020)는 자원 관리 에이전트에 등록할 수 있고, 자원 관리 에이전트 등에게 ACM 버퍼(1013) 등의 자원을 요청할 수 있다. 자원 관리 에이전트는, ACM 사용자(1016)들 사이에 ACM 버퍼(1013) 저장 용량을 할당 및 중재하기 위해, 메모리 압력 정책(memory pressure policy) 등의 미리정의된 메모리 관리 정책을 이용할 수 있다.
일부 실시예에서, ACM(1011)과 메모리 시스템(1018) 내의 ACM 주소 범위(1021) 사이에 연관을 설정하는 것은, 트리거링된 커밋 동작으로 대응하는 자동-커밋 버퍼(들)(1013)을 미리 구성(무장)하는 것을 포함할 수 있다. 전술된 바와 같이, 이러한 사전구성은, 자동-커밋 버퍼(1013)를, 버퍼(1013)의 ACM 메타데이터(1015)에 저장될 수 있는 논리적 식별자나 기타의 메타데이터와 연관시키는 것을 포함할 수 있다. 전술된 바와 같이, ACM(1011)은, 재시작 조건의 이벤트시에 버퍼 데이터를 명시된 논리적 식별자에 커밋하거나, ACM 메타데이터(1015)에 따라 기타의 처리를 수행하도록 구성될 수 있다.
ACM(1011)으로의 메모리 시멘틱 액세스는, 임의의 적절한 주소 및/또는 디바이스 연관 메커니즘을 이용하여 구현될 수 있다. 일부 실시예에서, 메모리 시멘틱 액세스는, ACM(1011)의 하나 이상의 자동-커밋 버퍼(1013)를 호스트(1014)의 메모리 시스템(1018)으로 맵핑함으로써 구현된다. 일부 실시예에서, 이 맵핑은 버스(1040)를 이용하여 구현될 수 있다. 예를 들어, 버스(1040)는, PCI-e(또는 유사한) 통신 버스를 포함할 수 있고, 맵핑은 버스(1040) 상의 ACM(1011)의 자동-커밋 버퍼(1013)의 베이스 주소 레지스터(BAR; Base Address Register)를 메모리 시스템(1018)의 ACM 주소 범위(1021)와 연관시키는 것(예를 들어, 호스트(1014)가 BAR을 메모리 시스템(1018)에 맵핑하는 것)을 포함할 수 있다.
연관은, ACM 사용자(1016)에 의해(예를 들어, 운영 체제 등의 가상 메모리 시스템에 의해) 저장 관리층(SML)(1050) 등의 저장층의 API를 통해 구현될 수 있다. 저장 관리 모듈(1050)은 ACM 사용자(1016)에게 자동-커밋 메모리(1011)로의 액세스를 제공하도록 구성될 수 있다. 저장 관리층(1050)은, 드라이버, 커널-레벨 애플리케이션, 사용자-레벨 애플리케이션, 라이브러리 등을 포함할 수 있다. SML의 한 예는, Salt Lake City, Utah의 Fusion-io, Inc.의 Virtual Storage Layer®이다. 저장 관리 모듈(1050)은, 특히, 자동-커밋 메모리(1011)의 부분들을 호스트(1014)의 메모리 시스템(1018)으로 맵핑하기 위한 API, 호스트(1014)의 메모리 시스템(1018)으로부터 자동-커밋 메모리(1011)의 부분들을 언맵핑하기 위한 API, ACM 버퍼(1013)를 플러시하기 위한 API, 지속적 데이터 구조 모듈(1009)를 이용하여 지속적 데이터 구조를 액세스하고 관리하기 위한 API 등을 포함하는 SML API(1019)를 제공할 수 있다. 저장 관리 모듈(1050)은, 논리적 주소 공간의 논리적 식별자들과 자동-커밋 메모리(1011) 및/또는 지속적 저장 매체 상의 물리적 저장 장소들간의 연관을 포함하는 포워드 인덱스(1053)를 포함할 수 있는, 메타데이터(1051)를 유지하도록 구성될 수 있다. 일부 실시예에서, ACM(1011)은 BAR(또는 기타의 어드레싱 메커니즘)의 상이한 주소 범위들로 맵핑되는 하나 이상의 가상 범위와 연관될 수 있다. 가상 범위는 상이한 ACM 사용자(1016)들에 의해 액세스(예를 들어, 맵핑)될 수 있다. PCI-e ACM BAR를 호스트 메모리(1018)에 맵핑 또는 노출하는 것은 SML API(1019) 콜을 통해 요구시에 인에이블될 수 있다.
SML API(1019)는 자동-커밋 버퍼(1013)를 메모리 시스템(1018)에 맵핑하기 위한 인터페이스를 포함할 수 있다. 일부 실시예에서, SML API(1019)는, malloc, calloc 등의 기존의 메모리 관리 인터페이스를 확장시켜 자동-커밋 버퍼(1013)를 ACM 사용자 애플리케이션(1016)의 가상 메모리 범위로 확장시킬 수 있다(SML API(1019)를 통한 malloc 콜은 하나 이상의 자동-커밋 메모리 버퍼(1013)를 메모리 시스템(1018)으로 맵핑할 수 있다). 대안으로서, 또는 추가로, SML API(1019)는, "ACM_alloc" "ACM_free" 등의, 하나 이상의 명시적 자동-커밋 맵핑 함수를 포함할 수 있다. 자동-커밋 버퍼(1013)를 맵핑하는 것은, 메모리 동작들이 자동-커밋 버퍼(1013) 상에서 직접 구현되는 것을 보장하도록(예를 들어, 맵핑된 ACM 주소 범위(1021) 내의 캐싱 메모리 동작을 방지하도록) 호스트의 메모리 시스템(1018)을 구성하는 것을 더 포함할 수 있다.
호스트 메모리 시스템(1018) 내의 ACM 주소 범위(1021)와 ACM(1011) 사이의 연관은, 맵핑된 ACM 주소 범위(1021) 내에서 수행되는 메모리 시멘틱 동작들이 (전형적인 기입 커밋 동작, 시스템 콜 등의 추가층들에서, 중간 시스템 RAM, 또는 기타의 중간 메모리 없이) ACM(1011) 상에서 직접 구현되도록 하는 것일 수 있다. 예를 들어, ACM 주소 범위(1021) 내에서 구현된 메모리 시멘틱 기입 동작은 데이터가 (자동-커밋 버퍼(1013)들 중 하나 이상의) ACM(1011)에 기입되게 할 수 있다. 따라서, 일부 실시예에서, ACM 주소 범위(1021)를 맵핑하는 것은, 메모리 동작들이 ACM(1011) 상에서 수행되고 호스트에 의해 캐싱되지(예를 들어, CPU 캐시에, 호스트 휘발성 메모리 등에 캐싱되지) 않도록, ACM 주소 범위(1021) 내의 메모리 캐싱 동작을 디스에이블하는 것을 포함할 수 있다. ACM 주소 범위(1021) 내의 캐싱을 디스에이블하는 것은, ACM 범위(1021)가 정의될 때, ACM 범위(1021)와 연관된 "캐싱불가" 플래그 속성을 세트하는 것을 포함할 수 있다.
앞서 논의된 바와 같이, 호스트 메모리 시스템(1018)과 ACM(1011) 사이의 연관을 설정하는 것은, 미리 결정된 트리거링된 커밋 동작을 구현하도록 ACM(1011)을 "무장시키는 것"을 포함할 수 있다. 무장시키는 것은, ACM(1011)에게 논리적 식별자(예를 들어, 논리 블록 주소, 파일 명칭, 네트워크 주소, 스트라이프 또는 미러링 패턴 등)를 제공하는 것을 포함할 수 있다. ACM(1011)은 트리거링된 커밋 동작을 무장시키기 위해 논리적 식별자를 이용할 수 있다. 예를 들어, ACM(1011)은, 논리적 식별자를 이용하여 지속적 저장 매체에 데이터를 커밋하도록 트리거링될 수 있다(예를 들어, 데이터는 논리적 식별자에 대응하는 물리적 주소에 저장될 수 있고 및/또는 논리적 식별자는 데이터와 함께 로그-기반의 데이터 구조로 저장될 수 있다). ACM(1011)을 무장시키는 것은 호스트(1014)가 ACM 주소 범위(1021) 내에서(그리고 ACM(1011)에 대해) 수행되는 후속 동작들을 "즉각 커밋되는" 것으로 간주하는 것을 허용하여, 즉각적 커밋 시멘틱에 의한 메모리 시멘틱 기입 입도(예를 들어, 바이트 레벨 동작) 및 속도를 가능케한다.
CPU에 대한 "저장" 동작 등의 메모리 시멘틱 기입은 통상적으로 동기 동작이어서, CPU는 후속 동작을 처리하기 이전에 이 동작을 완료한다. 따라서, ACM 메모리 범위(1021)에서 수행되는 메모리 시멘틱 기입 동작은 "즉각 커밋되는" 것으로 간주될 수 있어서, 기입-커밋 동작에서 대응하는 "커밋" 동작에 대한 필요성을 피할 수 있어, 기입-커밋 레이턴시에 의해 영향받는 ACM 사용자(1016)의 성능을 상당히 증가시킬 수 있다. ACM 메모리 범위(1021) 내에서 수행되는 메모리 시멘틱 동작은 동기적일 수 있다. 따라서, ACM(1011)은, 메모리 시멘틱 동작이 차단되는 것(예를 들어, 버스(1040) 등의 다른 층들로부터의 접수확인을 기다리는 것)을 방지하도록 구성될 수 있다. 게다가, ACM 주소 범위(1021)와 ACM(1011) 사이의 연관은 기입-커밋 동작에 통상적으로 포함되는 메모리 시멘틱 동작이 시스템 콜(예를 들어, 별개의 기입 및 커밋 명령들과 그들의 대응하는 시스템 콜)을 바이패스하는 것을 허용한다.
호스트(1014)와 ACM(1011) 사이의 데이터 전송은, 호스트(1014)가 버스(1040)를 통해 ACM(1011)과의 프로세서 IO 동작(PIO)을 수행하는 것; ACM(1011)(또는 기타의 디바이스)이 하나 이상의 DMA 엔진이나 에이전트(데이터 이동기)를 제공하여 호스트(1014)와 ACM(1011) 사이에서 데이터를 전송하는 것; 호스트(1014)가 프로세서 캐시 기입/플러시 동작을 수행하는 것을 포함한 그러나 이것으로 제한되지 않는, 임의의 적절한 데이터 전송 메커니즘을 이용하여 구현될 수 있다.
앞서 논의된 바와 같이, ACM은 소정의 조건(예를 들어, 재시작이나 고장 조건)에 응답하여 미리 구성된 트리거링된 커밋 동작을 자동으로 수행하도록 구성될 수 있다. 일부 실시예에서, 트리거링된 커밋 동작은, ACM(1014)에 저장된 데이터를 지속적 저장 매체에 커밋하는 것을 포함할 수 있다. 따라서, 일부 실시예에서, 전술된 ACM(1011) 등의 ACM은 지속적 저장 매체를 포함할 수 있다. 도 3은, 데이터 구조를, 지속적인, 고체-상태의, 및/또는 비휘발성 저장소에 커밋하는 것을 포함할 수 있는, 트리거링된 커밋 동작을 수행하도록 구성된 지속적 데이터 구조 모듈(1009)과 ACM(1111)의 실시예를 도시하는 시스템(1100)의 블록도이다.
도 3 예의 ACM(1111)은, 제어기(1104)를 포함하는 비휘발성 저장 디바이스(1102)에 밀착 결합될 수 있다. 제어기(1104)는, 전술된 바와 같이 동작할 수 있는 기입 데이터 파이프라인(1106)과 판독 데이터 파이프라인(1108)을 포함할 수 있다. 비휘발성 저장 디바이스(1102)는, 고체-상태 저장 매체 등의 비휘발성 메모리(1110) 상에서 데이터를 지속시킬 수 있다.
커밋 관리 장치(1122)는, 주 전력 접속의 소실, 또는 기타의 미리 결정된 트리거 이벤트 등의, 트리거 이벤트에 응답하여 비휘발성 메모리(1110)에 데이터를 커밋하는데 이용된다. 따라서, 커밋 관리 장치(1122)는, 전술된 바와 같이 자동-커밋 메모리(1011)의 기능을 수행하는 것을 포함하거나 및/또는 수행하도록 구성될 수 있다. 커밋 관리 장치(1122)는 또한, 재시작 조건에 응답하여(또는 호스트(1014) 및/또는 ACM 사용자(1016)로부터의 요청시) 및 ACM 메타데이터(1015)에 따라 ACM(1111) 상의 데이터(예를 들어, 자동-커밋 버퍼(1013)의 내용)를 비휘발성 메모리(1110)에 커밋하도록 구성될 수 있다. 커밋 관리 장치(1122)는 커밋 에이전트(1020)의 한 실시예이다.
ACM(1111) 상의 데이터는, 논리적 식별자 등의, ACM 메타데이터(1015)에 따라 지속적 저장소(1110)에 커밋될 수 있다. ACM(1111)은 재시작 이벤트 후의 추가 처리를 위한 임시 장소에 데이터를 커밋할 수 있고, 전술된 바와 같이, 데이터를 최종 의도된 장소 등에 커밋할 수 있다. 비휘발성 메모리(1110)가 순차적 저장 디바이스라면, 데이터를 커밋하는 것은, 논리적 식별자나 기타의 ACM 메타데이터(1015)를 자동-커밋 버퍼(1013)의 내용과 함께 (예를 들어, 패킷이나 컨테이너 헤더에) 저장하는 것을 포함할 수 있다. 비휘발성 메모리(1110)가 논리적 식별자와 물리적 주소 사이의 1:1 맵핑을 갖는 하드 디스크를 포함한다면, 자동-커밋 버퍼(1013)의 내용은 논리적 식별자가 맵핑되는 저장 장소에 커밋될 수 있다. 데이터와 연관된 논리적 식별자 또는 기타의 ACM 메타데이터(1015)가 미리 구성된다면(예를 들어, 무장된다면), ACM(1111)은 호스트(1014)와는 독립적으로 트리거링된 커밋 동작을 구현한다. 보조 전원(1024)은, 트리거링된 커밋 동작이 완료될 때까지(및/또는 완료된 것으로 확인될 때까지), 또는 ACM(1111)이 재시작 이벤트 이후의 복구 동안에 트리거링된 커밋 동작을 완료할 수 있는 지점까지 트리거링된 커밋 동작이 수행될 때까지, ACM(1111)의 휘발성 자동-커밋 버퍼(1013)에 전력을 공급한다.
일부 실시예에서, ACM(1111)은, 데이터와 (ACM 메타데이터(1015)에 따른) 그 대응하는 논리적 식별자 사이에 연관을 유지하는 방식으로 데이터를 커밋한다. 비휘발성 메모리(1110)가 하드 디스크를 포함한다면, 데이터는, (예를 들어, 논리적 식별자대 물리적 주소 변환을 이용하여) 격리 구역(1301)의 외부에 있을 수 있는, 논리적 식별자에 대응하는 저장 장소에 커밋될 수 있다. 비휘발성 메모리(1110)가 고체-상태 저장 매체 등의 순차적 매체를 포함하는 다른 실시예에서, 데이터는, 참조에 의해 그 전체가 포함되는 2010년 8월 12일 출원된 발명의 명칭이 "APPARATUS, SYSTEM, AND METHOD FOR CACHING DATA"인 미국 가출원 제61/373271호 및/또는 상기에서 설명된 바와 같은 로그-기반의 포맷으로 및/또는 순차적으로 저장될 수 있다. 순차적 저장 동작은, 자동-커밋 버퍼(1013)의 내용을 (ACM 메타데이터(1015)에 의해 표시된) 대응하는 논리적 식별자와 함께 저장하는 것을 포함할 수 있다. 한 실시예에서, 자동-커밋 버퍼(1013)의 데이터와 그 대응하는 논리적 식별자는 미리 결정된 패턴에 따라 매체 상에 함께 저장된다. 소정 실시예에서, 논리적 식별자는 자동-커밋 버퍼(1013)의 내용 이전에 저장된다. 논리적 식별자는, 데이터를 포함하는 패킷의 헤더에, 또는 또 다른 순차적 및/또는 로그-기반의 포맷으로 포함될 수 있다. 데이터와 논리적 식별자 사이의 연관은 전술된 바와 같이 데이터 인덱스가 재구성되는 것을 허용할 수 있다.
전술된 바와 같이, ACM(1011)의 자동-커밋 버퍼(1013)는 호스트(1014)의 메모리 시스템(1018)으로 맵핑될 수 있어서, ACM 사용자(1016)가 메모리 액세스 시멘틱을 이용하여 이들 버퍼(1013)에 액세스할 수 있게 한다. 일부 실시예에서, 논리적 식별자와 자동-커밋 버퍼(1013) 사이의 맵핑은 호스트(1014)의 가상 메모리 시스템을 활용할 수 있다.
예를 들어, 메모리 시스템(1018) 내의 주소 범위는 "메모리 맵핑된 파일"과 연관될 수 있다. 앞서 논의된 바와 같이, 메모리 맵핑된 파일은, 파일, 파일의 일부, 또는 블록 디바이스가 비휘발성 저장 디바이스(1102)의 데이터에 관한 더 효율적인 메모리 시멘틱 동작을 위해 메모리 시스템(1018) 주소 공간으로 맵핑되는 가상 메모리 추상화(virtual memory abstraction)이다. 자동-커밋 버퍼(1013)는 유사한 추상화를 이용하여 호스트 메모리 시스템(1018)으로 맵핑될 수 있다. 따라서, ACM 메모리 범위(1021)는 메모리 맵핑된 파일에 의해 표현될 수 있다. 백킹 파일은, 격리 구역(1301)(아래의 도 5 참조) 내의 비휘발성 메모리(1110) 상에 또는 격리 구역(1301)에 의해 역시 보호되는 또 다른 네트워크 부착된 비휘발성 저장 디바이스(1102) 상에 저장되어야 한다. 자동-커밋 버퍼(1013)는 파일의 일부에만 대응할 수 있다(파일 그 자체는 매우 클 수 있어서, 자동-커밋 버퍼(1013) 및/또는 비휘발성 메모리(1110)의 용량을 초과할 수 있다). 파일의 일부가 자동-커밋 버퍼(1013)에 맵핑될 때, ACM 사용자(1016)(또는 기타의 엔티티)는, ACM 특성과 함께 동작할(예를 들어, ACM 시멘틱을 갖는) 파일 내의 원하는 오프셋과 파일 내의 블록들의 범위를 식별할 수 있다. 이 오프셋은 미리정의된 논리적 식별자를 가질 것이고 논리적 식별자와 범위는 파일 내에 맵핑된 자동-커밋 버퍼(들)(1013)을 커밋하는 것을 트리거하는데 이용될 수 있다. 대안으로서, 파일로의 블록(또는 블록들의 범위)에 대한 별개의 오프셋은 파일에 맵핑된 자동-커밋 버퍼(들)(1013)을 커밋하기 위한 트리거로서 역할할 수 있다. 예를 들어, 메모리 동작(로드, 저장, 포크 등)이 데이터에 관해 별개의 오프셋이나 블록들의 범위에서 수행되는 어느 때라도, 파일에 맵핑된 자동-커밋 버퍼(들)(1013)이 커밋되도록 하는 트리거 이벤트를 야기할 수 있다.
그러나, (예를 들어, 파일의 다른 부분들의 변경, 파일 크기 변경 등으로 인해) 기저의 논리적 식별자는 변할 수도 있다. 변경이 발생하면, 저장 관리 모듈(1050)은, (SML API(1019), ACM 사용자(1016), 지속적 데이터 구조 모듈(1009), 또는 기타의 엔티티를 통해) 대응하는 자동-커밋 버퍼(1013)의 ACM 메타데이터(1015)를 업데이트할 수 있다. 일부 실시예에서, 저장 관리 모듈(1050)은, 자동-커밋 버퍼(1013)와 연관된 파일들의 논리적 식별자에 대한 업데이트에 대해 호스트(1014)(운영 체제, 하이퍼바이저, 또는 기타의 애플리케이션)에게 질의하도록 구성될 수 있다. 질의는 SML API(1019)에 의해 개시될 수 있고 및/또는 호스트(1014)로의 후크(콜백 메커니즘)로서 제공될 수도 있다. ACM 사용자(1016)가 더 이상 자동-커밋 버퍼(1013)를 필요로 하지 않으면, 저장 관리 모듈(1050)은 전술된 바와 같이 버퍼(1013)를 할당해제할 수 있다. 할당해제는, 호스트(1014)에게, 논리적 식별자에 대한 업데이트가 더 이상 필요하지 않다는 것을 통보하는 것을 더 포함할 수 있다.
일부 실시예에서, 파일은 복수의 저장 디바이스에 걸쳐 맵핑될 수 있다(예를 들어, 저장 디바이스들은 RAID 그룹으로 형성될 수 있고, 가상 저장 디바이스 등을 포함할 수도 있다). 자동-커밋 버퍼(1013)와 파일 사이의 연관은 파일 맵핑을 반영하도록 업데이트될 수 있다. 이것은 자동-커밋 버퍼(1013)가 데이터를 적절한 저장 디바이스에 커밋하는 것을 허용한다. 자동-커밋 버퍼(1013)의 ACM 메타데이터(1015)는 전술된 바와 같이 기저 파일 맵핑에 대한 변경 및/또는 분할에 응답하여 업데이트될 수 있다. 대안으로서, 파일은 자동-커밋 버퍼(1013)가 사용 중인 동안 특정한 맵핑이나 분할에 "록킹(lock)"될 수 있다. 예를 들어, 파일의 재맵핑/재분할이 요구된다면, 대응하는 자동-커밋 버퍼(1013)는 데이터를 파일에 커밋한 다음, 새로운 맵핑/분할 방식 하에서 파일과 재연관시킬 수 있다. SML API(1019)는, 저장 관리 모듈(1050)을 이용하여 파일을 록킹하고, 파일을 릴리스하고, 및/또는 파일에 대한 변경에 따라 ACM 메타데이터(1015)를 업데이트하기 위한 인터페이스 및/또는 명령을 포함할 수 있다.
데이터를 고체-상태, 비휘발성 저장소(1110)에 커밋하는 것은, 전술된 바와 같이, 저장 제어기(1104)가 ACM(1111) 자동-커밋 버퍼(1013)로부터의 데이터에 액세스하고, 데이터를 대응하는 논리적 식별자와 연관시키고(예를 들어, 데이터를 라벨링), 및 라벨링된 데이터를 기입 데이터 파이프라인(1106)에 주입하는 것을 포함할 수 있다. 일부 실시예에서, ACM 데이터를 지속시킬 수 있는 페이지 프로그램 명령이 있다는 것을 보장하기 위해, 저장 제어기(1104)는 동작 동안에 2개 이상의 보류중인 페이지 프로그램을 유지한다. ACM 데이터는, 전술된 바와 같이 전력 소실 식별자(전력-차단 충족 패턴)를 기입하기 이전에 비휘발성 메모리(1110)에 커밋될 수 있다.
도 4는, 지속적 데이터 구조 모듈(1009)과 복수의 자동-커밋 메모리(1011)를 포함하는 시스템(1200)의 한 실시예를 도시한다. 도 4의 예에서, 호스트(1014)에 의해 구현된 메모리 시멘틱 액세스는 1011A 및 1011B를 포함하는, 복수의 ACM 상에 저장될 수 있다. 일부 실시예에서, 호스트 데이터는 ACM들(1011A 및 1011b) 사이에서 미러링될 수 있다. 미러링은 멀티캐스트 버스(1040)를 이용하여 구현될 수 있다. 대안으로서, 또는 추가로, ACM들 중 하나(AM(1011A))는 ACM(1011B)에 데이터를 다시 브로드캐스팅하도록 구성될 수 있다. ACM들(1011A 및 1011B)은 서로 국지적일 수(예를 들어, 동일한 로컬 버스 상에 있을 수) 있다. 대안으로서, ACM들(1011A 및 1011B)은 상이한 시스템들 상에 위치할 수 있고, 인피니밴드, 원격 PCI 버스, RDMA 등의, 제거 데이터 액세스를 지원하는 버스를 통해 통신가능하게 결합될 수 있다.
일부 실시예에서, ACM들(1011A 및 1011B)는 스트라이핑 방식(예를 들어, RAID 방식)을 구현할 수 있다. 이 경우에, 호스트 데이터의 상이한 부분들은 상이한 ACM들(1011A 및/또는 1011B)에 전송될 수 있다. 저장 관리 모듈(1050) 및/또는 운영 체제(1018)에 의해 구현된 볼륨 관리자 등의 드라이버 레벨 소프트웨어는 스트라이핑 패턴에 따라 호스트 데이터를 적절한 ACM에 맵핑할 수 있다.
일부 구성에서, ACM들에 의해 제공되는 메모리 액세스 시멘틱은 특정한 저장 스트라이핑 패턴에 따라 구성될 수 있다. 예를 들어, 호스트 데이터가 ACM(1011A)으로부터 ACM(1011B)으로 미러링된다면, 메모리 시멘틱 기입은, ("즉각 커밋" 시멘틱 하에서) 데이터가 ACM(1011B)에 전송되었다는 것을 ACM(1011A)이 확인할 때까지 완료되지 않을 수 있다(및/또는 접수확인이 반환되지 않을 수 있다). ACM들이 스트라이핑 패턴으로 이용될 때 유사한 구성이 구현될 수 있다(예를 들어, 메모리 시멘틱 기입은, 특정한 동작에 대한 스트라이핑 패턴이 완료될 때까지 반환 및/또는 접수확인되지 않을 수 있다). 예를 들어, 기입 동작 상의 복사에서, ACM(1011A)은 자동-커밋 버퍼의 데이터를 저장한 다음, 그 데이터가 ACM(1011B)에 복사되게 할 수 있다. ACM(1011A)은, 데이터가 ACM(1011B)에 복사될 때까지, 기입 동작에 대한 접수확인을 반환하지(또는 데이터가 판독되도록 허용하지) 않을 수 있다.
미러링된 ACM 디바이스들(1011A 및 1011B)의 이용은 높은 가용성의 구성으로 이용될 수 있다. 예를 들어, ACM 디바이스들(1011A 및 1011B)은 별개의 호스트 컴퓨팅 디바이스들에서 구현될 수 있다. 디바이스들(1011A 및 1011B)로의 메모리 시멘틱 액세스는 전술된 바와 같이 (예를 들어, PCI-e 액세스를 이용하여) 디바이스들 사이에서 미러링된다. 디바이스들은, 디바이스 프록싱이 요구되지 않을 수 있도록, 높은 가용성 모드(high-availability mode)에서 동작하도록 구성될 수 있다. 따라서, 트리거 동작(뿐만 아니라 기타의 메모리 시멘틱 액세스)은 양쪽 디바이스들(1011A 및 1011B)에 걸쳐 미러링될 수 있지만, 디바이스들(1011A 및 1011B)은 진행하기 이전에 다른 쪽으로부터 "접수확인"을 기다려야 할 필요가 없어서, 기입-커밋 레이턴시 경로로부터 다른 디바이스를 제거한다.
도 5는 커밋 관리 장치(1122)의 한 실시예(1300)의 블록도이다. 커밋 관리 장치(1122)는, 자동-커밋 메모리(1011), 비휘발성 저장 제어기(1304), 비휘발성 저장 매체(1310), 및/또는 보조 전원(1324)에 (예를 들어, 격리 구역(1301) 내에서) 밀착 결합될 수 있고, 이들 중 하나 이상은 지속적 데이터 구조를 제공하기 위해 지속적 데이터 구조 모듈(1009)과 통신하거나 및/또는 이와 협력할 수 있다. 밀착 결합은, 이들 컴포넌트들(132, 1011, 1304, 1310, 및/또는 1324)을, 동일한 다이 상에서, 동일한 주변 디바이스 상에서, 동일한 카드(예를 들어, 동일한 PCB) 상에서, 미리정의된 격리 구역 내에서 등에서 구현하는 것을 포함할 수 있다. 밀착 결합은, ACM 버퍼(1013)의 트리거링된 커밋 동작들이 재시작 조건의 이벤트시에 커밋되는 것을 보장할 수 있다.
커밋 관리 장치(1122)는, 전력 소실 등의 재시작 조건을 검출하도록 구성될 수 있는, 모니터 모듈(1310)을 포함한다. 모니터 모듈(1310)은, 재시작 조건(예를 들어, 셧다운, 재시작, 전원 고장, 통신 고장, 호스트 또는 애플리케이션 고장 등) 등의 트리거링 이벤트를 감지하고, 이에 응답하여, 커밋 모듈(1320)을 개시해 장치(1122)의 커밋 소실 모드(고장 소실 모드)를 개시하며 및/또는 모듈들(1312, 1314, 1316, 1317 및/또는 1318) 등의 다른 모듈들의 동작을 트리거하도록 구성될 수 있다. 커밋 모듈(1320)은, 전술된 바와 같이 동작할 수 있는, 식별 모듈(1312), 종료 모듈(1314), 변질 모듈(1316), 및 완료 모듈(1318)을 포함한다.
식별 모듈(1312)은 또한, ACM(1011)의 각각의 ACM 버퍼(1013)에 대해 수행될 트리거링된 커밋 동작을 식별하도록 구성될 수 있다. 전술된 바와 같이, 식별 모듈(1312)은, 접수확인형 동작이 비접수확인형 동작보다 높은 우선순위를 가진다고 가정하여, 상대적 중요성에 기초하여 동작들을 우선순위화할 수 있다. 커밋되도록 무장된 자동-커밋 버퍼(1013)의 내용은, 그에 따라 지원되는 "즉각 커밋" 시멘틱으로 인해 높은 우선순위를 할당받을 수 있다. 일부 실시예에서, ACM 트리거링된 커밋 동작에는, 기입 데이터 파이프라인(1306)의 접수확인형 내용보다 높은 우선순위가 부여될 수 있다. 대안으로서, 무장된 자동-커밋 버퍼(1013)의 내용은 "다음으로 가장 높은" 우선순위를 할당받을 수 있다. 우선순위 할당은 (API, IO 제어(IOCTL) 등을 통해) 사용자 구성가능할 수 있다.
종료 모듈(1314)은, 전술된 바와 같이 "필수" 동작이 계속하는 것을 허용하기 위해 비필수 동작을 종료한다. 종료 모듈(1314)은, 커밋되도록 "무장된" ACM(1011)의 부분들(예를 들어, 무장된 자동-커밋 버퍼들)을 유보(hold up)하도록 구성될 수 있고, 자동-커밋 메모리(1011)의 비-무장된(미사용) 부분들로의 전력을 중단할 수 있다. 종료 모듈(1314)은 또한, 이들 버퍼들의 내용이 커밋될 때 ACM(1011)의 부분들(개별 자동-커밋 버퍼(1013))로의 전력을 중단하도록 구성될 수 있다.
변질 모듈(1316)은 전술된 바와 같이 기입 데이터 파이프라인(1306) 내의 데이터의 변질(또는 잠재적 변질)을 식별한다. 모듈(1316)은 또한, 변질된 ACM 데이터(1011)(전력 중단 또는 기타의 재시작 조건 동안에 ACM(1011)에 기입된 데이터)를 식별하도록 구성될 수 있다. 변질 모듈(1316)은, ACM(1011) 상의 변질된 데이터가 트리거링된 커밋 동작에서 커밋되는 것을 방지하도록 구성될 수 있다.
ACM 모듈(1317)은, 자동-커밋 메모리(1011) 내의 무장된 자동-커밋 버퍼들을 액세스하고, 그와 연관된 ACM 메타데이터(1015)를 식별하며(예를 들어, ACM 메타데이터(1015)에 따라 데이터를 대응하는 논리적 식별자로 라벨링), 데이터를 비휘발성 저장 제어기(1304)의 기입 데이터 파이프라인 내에 주입하도록 구성된다. 일부 실시예에서, 자동-커밋 버퍼(1013)의 논리적 식별자(또는 기타의 ACM 메타데이터(1015))는 버퍼(1013) 그 자체에 저장될 수 있다. 이 경우에, 자동-커밋 버퍼(1013)의 내용은, 먼저 데이터를 식별 및/또는 라벨링하지 않고 순차적 및/또는 로그-기반의 저장 디바이스 내에 직접 스트리밍될 수 있다. ACM 모듈(1317)은 기입 데이터 파이프라인(1306)에서 현재의 데이터 이전이나 이후에 데이터를 주입할 수 있다. 일부 실시예에서, ACM(1011)으로부터 커밋된 데이터는, (잠재적으로 변질된 데이터를 제거한 후에) 기입 데이터 파이프라인(1306)의 기입 버퍼의 나머지를 "채우는데" 이용된다. 기입 버퍼의 잔여 용량이 불충분하다면, 기입 버퍼는 비휘발성 저장소(1310)에 기입되고, 다음 기입 버퍼는 나머지 ACM 데이터로 채워진다.
앞서 논의된 바와 같이, 일부 실시예에서, 비휘발성 저장 제어기(1304)는 전력 소실 이벤트시에 기입 데이터 파이프라인(1306)의 내용을 저장하기 위해 무장된 기입 동작(armed write operation)(논리적 페이지 기입)을 유지할 수 있다. ACM(1011)에서 이용될 때, 2개(또는 그 이상의) 무장된 기입 동작(논리적 페이지 기입)이 유지되어 기입 데이터 파이프라인(1306)과 ACM(1011)의 모든 무장된 버퍼(1013) 양쪽 모두의 내용이 재시작 조건 이벤트시에 커밋될 수 있도록 보장할 수 있다. 기입 버퍼 내의 논리적 페이지는 트리거 이벤트가 발생할 때 부분적으로 채워질 수 있기 때문에, 기입 버퍼는 ACM(1011)의 모든 ACM 버퍼(1013)에 저장된 모든 데이터와 지속적인 것으로 인정된 기입 데이터 파이프라인 내의 데이터 용량의 총계보다 많은 적어도 하나 이상의 논리적 페이지의 데이터를 유지하도록 크기조정된다. 이런 방식으로, 트리거 이벤트에 응답하여 ACM(1011)의 지속성을 완성하기에 층분한 용량이 기입 버퍼 내에 존재할 것이다. 따라서, 자동-커밋 버퍼(1013)는 ACM(1011)이 커밋할 수 있는 데이터의 양에 따라 크기조정될 수 있다. 일단 이 임계치가 충족되고 나면, 저장 관리 모듈(1050)은 더 많은 양이 이용가능하게 될 때까지 ACM 버퍼(1013)를 이용하기 위한 요청을 거부할 수 있다.
완료 모듈(1318)은, 소정의 버퍼, 패킷, 및/또는 페이지가 완전히 채워졌는지에 관계없이 기입 데이터 파이프라인을 플러시하도록 구성된다. 완료 모듈(1318)은 (있다면) ACM(1011) 상의 데이터가 기입 데이터 파이프라인(1306) 내에 주입되고 난 후에 플러시를 수행하도록(및 관련된 패딩 데이터를 삽입하도록) 구성된다. 완료 모듈(1318)은 또한, 재시작 조건이 발생했다는 것(예를 들어, 재시작 조건 충족 패턴)을 나타내는데 이용될 수 있는, 완료 표시자를 기입 데이터 파이프라인 내에 주입하도록 구성될 수 있다. 이 충족 패턴은, ACM(1011)으로부터의 트리거링된 데이터를 주입한 후에 기입 데이터 파이프라인(1306)에 포함될 수 있다.
앞서 논의된 바와 같이, 보조 전원(1324)은, ACM(1011)의 내용 뿐만 아니라 기입 데이터 파이프라인(1306) 내의 데이터를 저장하기에 충분한 전력을 제공하도록 구성될 수 있다. 이 데이터를 저장하는 것은, 데이터가 비휘발성 저장 매체(1310) 상에 지속적으로 저장되는 하나 이상의 기입 동작(예를 들어, 페이지 프로그램 동작)을 포함할 수 있다. 기입 동작이 실패하는 경우, 상이한 저장 장소 상에서의 또 다른 기입 동작이 시도될 수 있다. 시도는 데이터가 비휘발성 저장 매체(1310) 상에서 성공적으로 지속될 때까지 계속될 수 있다. 보조 전원(1324)은 복수의 이러한 페이지 프로그램 동작들 각각이 완료되기에 충분한 전력을 제공하도록 구성될 수 있다. 따라서, 보조 전원(1324)은, ACM(1011) 및/또는 기입 데이터 파이프라인(1306)의 데이터를 저장하기 위해 요구되는 바와 같은 2중(또는 더 많은) 페이지 프로그램 기입 동작을 완료하기에 충분한 전력을 제공하도록 구성될 수 있다.
도 6은, 메모리 액세스 시멘틱을 이용하여 ACM(1011)에 액세스하고, 파일 시스템 모듈(1558) 및/또는 저장 관리 모듈(1050)(예를 들어, 전술된 저장 관리 모듈(1050))과 협력하여 지속적 데이터 구조를 제공하는 지속적 데이터 구조 모듈(1009)을 갖춘 호스트 컴퓨팅 디바이스(1014)를 도시하는 블록도(1500)이다. 호스트 컴퓨팅 디바이스(1014)는, 범용 프로세서, 애플리케이션-특유의 프로세서, 재구성가능한 프로세서(FPGA), 프로세서 코어, 프로세서들의 조합, 프로세서 캐시, 프로세서 캐시 계층구조, 또는 이와 유사한 것 중 하나 이상을 포함하지만 이것으로 제한되지 않는 프로세서 복합체/CPU(1012)를 포함할 수 있다. 한 실시예에서, 프로세서 복합체(1012)는 프로세서 캐시를 포함하고, 프로세서 캐시는, 기입 결합 버퍼, L1 프로세서 캐시, L2 프로세서 캐시, L3 프로세서 캐시, 프로세서 캐시 계층구조, 및 다른 유형의 프로세서 캐시 중 하나 이상을 포함할 수 있다. 하나 이상의 ACM 사용자(1016)(예를 들어, 운영 체제, 애플리케이션 등)가 호스트(1014) 상에서 동작한다.
호스트(1014)는, PCI-e 버스 등을 포함할 수 있는 버스(1040)를 통해 ACM(1011)에 통신가능하게 결합될 수 있다. 호스트(1014)에 액세스가능하게 되는 ACM(1011)의 부분들은 자동-커밋 버퍼(1013)로부터 호스트(1014)로 맵핑된다. 일부 실시예에서, 맵핑은, 호스트 메모리 시스템(1018) 내의 주소 범위를 ACM(1011)의 자동-커밋 버퍼(1013)와 연관시키는 것을 포함한다. 이러한 연관은 호스트(1014) 상에서 이용가능한 SML API(1019) 및/또는 저장 관리 모듈(1050)을 이용하여 인에이블될 수 있다.
저장 관리 모듈(1050)은, 전술된 메모리 액세스 시멘틱을 구현하는 라이브러리를 포함하고 및/또는 인터페이스(예를 들어, SML API(1019))를 제공할 수 있다. API(1019)는 메모리 시멘틱 액세스 모듈(1522)을 통해 메모리 액세스 시멘틱을 이용하여 ACM(1011)에 액세스하는데 이용될 수 있다. 비휘발성 저장소(1502)로의 액세스 등의, 다른 유형의 액세스들은 블록 디바이스 인터페이스(1520)를 통해 제공될 수 있다.
저장 관리 모듈(1050)은 (SML API(1019)를 통해) ACM(1011)의 자동-커밋 버퍼(1013)를 메모리 시스템(1018)으로 메모리 맵핑하도록 구성될 수 있다. 메모리 맵은 메모리 시스템(1018)의 가상 메모리 추상화를 이용할 수 있다. 예를 들어, 메모리 맵은 메모리 맵핑된 파일 추상화를 이용하여 구현될 수 있다. 이 예에서, 운영 체제(또는 애플리케이션)(1016)는 메모리 시스템(1018)에 맵핑될 파일을 지정한다. 파일은, 파일 시스템, 운영 체제(1016) 등에 의해 유지될 수 있는 논리적 식별자(LID)(1025)(예를 들어, 논리적 블록 주소)와 연관된다.
메모리 맵핑된 파일은 ACM(1013)의 자동-커밋 버퍼(1013)와 연관될 수 있다. 연관은 버스(1040)를 이용하여 저장 관리 모듈(1050)에 의해 구현될 수 있다. 저장 관리 모듈(1050)은 (메모리 시스템(1018) 내의) 메모리 맵핑된 파일의 주소 범위를 ACM(1011) 상의 자동-커밋 버퍼(1013)의 디바이스 주소와 연관시킨다. 연관은 PCI-e BAR을 메모리 시스템(1018)에 맵핑하는 것을 포함할 수 있다. 도 6의 예에서, 메모리 시스템(1018) 내의 ACM 주소 범위(1021)는 자동-커밋 버퍼(1013)와 연관된다.
앞서 논의된 바와 같이, ACM(1011)에 메모리 액세스 시멘틱을 제공하는 것은 고장이나 기타의 재시작 이벤트시에 저장된 데이터를 커밋하도록 ACM(1011)을 "무장시키는 것"을 포함할 수 있다. 미리 구성된 무장은, 재시작 이벤트 시에, ACM(1011) 상에 저장된 데이터가 적절한 논리적 식별자에 커밋될 것이라는 것을 보장한다. 트리거 조건의 사전-구성은 애플리케이션(1016)이 "즉각-커밋" 메모리 액세스 시멘틱을 이용하여 자동-커밋 버퍼(1013)에 액세스할 수 있게 한다. 자동-커밋 버퍼를 무장시키는데 이용되는 논리적 식별자는, 운영 체제, 메모리 시스템(1018)(예를 들어, 가상 메모리 시스템) 등으로부터 얻을 수 있다.
저장 관리 모듈(1050)은 (예를 들어, 자동적으로, 콜백에 의해, 및/또는 SML API(1019)를 통해) 자동-커밋 버퍼(1013)를 논리적 식별자로 무장시키도록 구성될 수 있다. 각각의 자동-커밋 버퍼(1013)는, 데이터를 상이한 논리적 식별자(상이한 LBA, 지속적 식별자 등)에 커밋하도록 무장될 수 있고, 이것은 ACM(1011)이 다수의 상이한 동시적 ACM 사용자(1016)에게 메모리 시멘틱 액세스를 제공하는 것을 허용할 수 있다. 일부 실시예에서, 자동-커밋 버퍼(1013)를 무장시키는 것은 논리적 식별자로 ACM 메타데이터(1015)를 세트하는 것을 포함한다. 도 6의 예에서, ACM 주소 범위(1021)는 논리적 식별자(1025)와 연관되고, 연관된 자동-커밋 버퍼의 ACM 메타데이터(1015)는 대응하는 논리적 식별자(1025)로 무장된다.
저장 관리 모듈(1050)은, ACM 주소 범위(1021), 논리적 식별자(1025), 및/또는 자동-커밋 버퍼(1013)가 무장될 것이라는 표시를 포함하는 I/O 제어(IOCTL) 명령을 이용하여 자동-커밋 버퍼를 무장시킬 수 있다. (SML API(1019)를 통한) 저장 관리 모듈(1050)은 자동-커밋 버퍼(1013)를 무장해제(disarm) 또는 "분리"하는 인터페이스를 제공할 수 있다. 무장해제 명령은, 자동-커밋 버퍼(1013)의 내용이 전술된 바와 같이 커밋되게(예를 들어, 비휘발성 저장 디바이스(1502)에 커밋되게) 할 수 있다. 분리는 자동-커밋 버퍼(1013)를 "무장해제"하는 것(예를 들어, ACM 메타데이터(1015)를 클리어하는 것)을 더 포함할 수 있다. 저장 관리 모듈(1050)은, 메모리 시스템(1018) 및 자동-커밋 버퍼(1013) 내의 주소 범위들간의 맵핑을 추적하여, 분리 명령이 자동으로 수행되게 하도록 구성될 수 있다.
대안으로서, 또는 추가로, 저장 관리 모듈(1050)은, 호스트(1014)의 운영 체제(또는 가상 운영 체제, 예를 들어, 하이퍼바이저) 내에 통합될 수 있다. 이것은 자동-커밋 버퍼(1013)가 가상 메모리 요구 페이징 시스템(demand paging system)에 의해 이용되는 것을 허용할 수 있다. 운영 체제는 (SML API(1019) 또는 기타의 통합 기술을 통해) ACM 사용자(1016)에 의해 이용을 위해 자동-커밋 버퍼를 맵핑/무장시킬 수 있다. 운영 체제는 ACM 사용자(1016) 및/또는 그 내부 요구 페이징 시스템에 의해 요청될 때 커밋 명령을 내릴 수 있다. 따라서, 운영 체제는, ACM(1011)을, 또 다른, 일반적으로 이용가능한 가상 메모리 자원으로서 이용할 수 있다.
일단 ACM 사용자(1016)가 ACM 주소 범위(1021)를 자동-커밋 버퍼(1013)에 맵핑하고 버퍼(1013)를 무장시키고 나면, ACM 사용자(1016)는, 메모리 액세스 시멘틱을 이용하여 자원에 액세스할 수 있고, 메모리 액세스가 완료되자마자 메모리 액세스가 "논리적으로" 커밋된 것으로 간주할 수 있다. ACM 사용자(1016)는 ACM 주소 범위(1021)로의 메모리 시멘틱 액세스를 "즉각 커밋된" 것으로 간주할 수 있는데, 그 이유는, ACM(1011)이 재시작 조건을 경험하는지에 관계없이 자동-커밋 버퍼의 내용을 (논리적 식별자(1025)에) 커밋하도록 구성되기 때문이다. 따라서, ACM 사용자(1016)는 별개의 기입 및 커밋 명령들을 수행할 것이 요구되지 않을 수 있다(예를 들어, 단일 메모리 시멘틱 기입이면 기입-커밋을 구현하기에 충분하다). 게다가, 여기서 개시되는 자동-커밋 버퍼(1013)와 ACM(1011) 사이의 맵핑은, 펑션 콜, 시스템 콜, 및 심지어 기입-커밋 경로에 통상적으로 레이턴시를 도입하는 (ACM 사용자(1016)가 가상 머신에서 실행중에 있다면) 하이퍼바이저로 인한 오버헤드를 제거한다. 따라서, ACM 사용자(1016)의 기입-커밋 레이턴시 시간은 ACM(1011) 자체에 액세스하는데 요구되는 시간까지 감소될 수 있다.
전술된 바와 같이, 소정 실시예에서, 호스트(1014)는, 하나 이상의 ACM 버퍼(1013)를, 메모리 시스템(1018), 직접 부착된 물리적 메모리, PCI-e 버스를 통해 MMIO 어드레싱가능한 물리적 메모리, 또는 물리적 메모리의 하나 이상의 페이지로서 기타의 방식으로 맵핑되는 것 등의, 호스트 디바이스(1014)의 CPU, 커널 등에 의해 어드레싱가능한 물리적 메모리 주소 공간의 주소 범위로 맵핑한다. 호스트(1014)는 또한, 물리적으로 맵핑된 ACM 버퍼(1013)의 적어도 일부를, 가상 메모리로서 사용자-공간 프로세스 등에 액세스될 수 있는, 가상 메모리 주소 공간으로 맵핑할 수 있다. 호스트(1014)는, 물리적으로 맵핑된 ACM 버퍼(1013)의 전체 용량을 가상 메모리 주소 공간으로 맵핑하거나, 물리적으로 맵핑된 ACM 버퍼(1013)의 일부를 가상 메모리 주소 공간으로 맵핑하거나, 등등을 할 수 있다.
유사한 방식으로, 호스트(1014)는, 물리적으로 맵핑된 ACM 버퍼(1013)를 가상 머신 또는 게스트 운영 체제를 위한 주소 공간으로 변환하는, 가상 머신 하이퍼바이저, 호스트 운영 체제 등을 포함할 수 있다. 물리적으로 맵핑된 ACM 버퍼(1013)는 가상 머신이나 게스트 운영 체제에게 물리적으로 맵핑된 메모리 페이지로서 보일 수 있고, 가상 머신 하이퍼바이저나 호스트 운영 체제는 ACM 버퍼(1013)를 이용하여 물리적 메모리를 스푸핑한다. 자원 관리 에이전트는, 전술된 바와 같이, ACM 버퍼(1013)의 저장 용량을 복수의 가상 머신들, 게스트 운영 체제들 사이에서 할당/조정할 수 있다.
소정 실시예에서, 가상 머신, 게스트 운영 체제 등은 물리적으로 맵핑된 ACM 버퍼(1013)들을 마치 이들이 단순히 물리적으로 맵핑된 메모리인것 처럼 검출하기 때문에, 가상 머신은 ACM 버퍼(1013)들을 게스트 프로세스 등을 위한 하나 이상의 가상 주소 공간 내에 부분-할당/조정할 수 있다. 이것은, 한 실시예에서, 게스트 운영 체제 콜을 행하지 않고, 하이퍼바이저나 호스트 운영 체제에 요청을 하지 않고, 게스트 운영 체제 내의 프로세스들이 ACM 데이터 및/또는 ACM 메타데이터(1015)를 직접 변경하는 것을 허용한다.
또 다른 실시예에서, 가상 머신 및/또는 게스트 운영 체제에 대한 물리적 메모리를 스푸핑하는 것 대신에, 호스트 디바이스(1014)의 가상 머신 하이퍼바이저, 호스트 운영 체제 등이 반가상화(para-virtualization) 기술을 이용할 수 있다. 예를 들어, 가상 머신 및/또는 게스트 운영 체제는 가상 머신 하이퍼바이저 또는 호스트 운영 체제를 인식하고 이와 함께 직접 동작하여 ACM 버퍼(1013)를 할당/조정 등을 할 수 있다. ACM(1011)이 하나 이상의 ACM 사용자(1016)가 하이퍼바이저에 의해 유지되는 가상 머신 내에서 동작하는 가상 머신 환경에서 이용될 때, 하이퍼바이저는, 가상 머신 내에서 동작하는 ACM 사용자(1016)에게 SML API(1019) 및/또는 저장 관리 모듈(1050)로의 액세스를 제공하도록 구성될 수 있다.
하이퍼바이저는 SML API(1019)에 액세스하여, 전술된 바와 같이, 논리적 식별자를 ACM(1011)의 자동-커밋 버퍼(1013)와 연관시킬 수 있다. 그 다음, 하이퍼바이저는 (예를 들어, 가상 머신 메모리 시스템 내의 ACM 주소 범위(1021)를 하나 이상의 자동-커밋 버퍼(1013)에 맵핑함으로써) 하나 이상의 무장된 자동-커밋 버퍼(1013)를 ACM 사용자(1016)에게 제공할 수 있다. 그 다음, ACM 사용자(1016)는, 특히, 하이퍼바이저 및 기타의 시스템 콜로 인한 오버헤드를 유발하지 않고, 메모리 액세스 시멘틱(예를 들어, 효율적인 기입-커밋 동작)을 이용하여 ACM(1011)에 액세스할 수 있다. 하이퍼바이저는 또한, ACM 사용자(1016)에 의해 명시적으로 릴리스될 때까지 ACM 주소 범위(1021)를 자동-커밋 버퍼(1013)와 연관하여 유지하도록(예를 들어, 맵핑이 이용중에 변하지 않도록) 구성될 수 있다. 반가상화 및 협력은, 소정 실시예에서, 가상 머신 환경에서 ACM(1011)의 효율을 증가시킬 수 있다.
일부 실시예에서, ACM 사용자(1016)는 ACM(1013)에 의해 제공되는 "즉각적 커밋" 메모리 액세스 시멘틱과 함께 동작하도록 구성될 수 있다. 예를 들어, 무장된 자동-커밋 버퍼(1013)는 재시작 이벤트에서 (명시적 커밋 명령 없이) 커밋하도록 트리거링되기 때문에, ACM 사용자(1016)가 ACM(1011)으로의 메모리 액세스를 수행하는 순서는 고려대상이 될 수 있다. ACM 사용자(1016)는, 메모리 액세스 동작의 적절한 순서를 보장하기 위해 메모리 배리어(barrier), 컴파일러 플래그 등을 채용할 수 있다.
예를 들어, ACM 사용자(1016)가 (메모리 시멘틱 인터페이스(1522)를 이용해) 블록 디바이스 인터페이스(1520)를 통해 ACM(1011) 상에 저장되어 있는 데이터의 판독을 시도하는 경우 기입 이전의 판독 위험이 발생할 수 있다. 일부 실시예에서, 저장 관리 모듈(1050)은, 메모리 시스템(1018)의 논리적 식별자 및/또는 주소 범위와 자동-커밋 버퍼(1013) 사이의 연관을 추적하는 메타데이터를 유지할 수 있다. ACM 사용자(1016)(또는 기타의 엔티티)가 (예를 들어, 블록 디바이스 인터페이스(1520)를 통해) 자동-커밋 버퍼(1013)에 맵핑되는 논리적 식별자로의 액세스를 시도할 때, 저장 관리 모듈(1050)은 (메모리 시멘틱 인터페이스(1522)를 이용해) 요청을 ACM(1011)에 보내어, 기입 이전의 판독 위험을 방지한다.
저장 관리 모듈(1050)은, ACM(1011)의 일관적 상태(예를 들어, 배리어, 스냅샷, 또는 논리적 사본)를 얻기 위한 "일관성" 메커니즘을 제공하도록 구성될 수 있다. 일관성 메커니즘은, 전술된 바와 같이, ACM(1011) 내의 트리거링된 자동-커밋 버퍼(1013)를 추적할 수 있는 저장 관리 모듈(1050)에 의해 유지되는 메타데이터를 이용하여 구현될 수 있다. 일관성 메커니즘은, 저장 관리 모듈(1050)이 모든 트리거링된 자동-커밋 버퍼(1013)의 내용을 커밋하되, 지속적 저장소의 상태가 유지되도록 하는(예를 들어, 자동-커밋 버퍼(1013)의 내용을 비휘발성 저장소(1502) 또는 기타의 지속적 저장소 상에 저장하는) 것을 포함할 수 있다.
전술된 바와 같이, ACM 사용자(1016)는 메모리 액세스 시멘틱을 이용하여 RAM 입도로 ACM(1011)에 액세스할 수 있고, (재시작, 고장, 전력 소실 등의 이벤트시에) 필요하다면 동작들이 커밋될 것을 보장한다. 이것은, 특히, 호스트(1014)의 메모리 시스템(1018)과 대응하는 자동-커밋 버퍼(1013) 사이의 맵핑에 의해 인에이블된다; 자동-커밋 버퍼(1013)에 맵핑된 ACM 메모리 범위(1021) 내에서 구현된 메모리 시멘틱 동작은 버퍼(1013) 상에서 직접 구현된다. 앞서 논의된 바와 같이, 호스트(1041)와 ACM(1011) 사이의 데이터 전송은, 호스트(1014)가 버스(1040)를 통해 ACM(1011)과의 프로세서 IO 동작(PIO)(예를 들어, MMIO, PMIO 등)을 수행하는 것; ACM(1011)(또는 기타의 디바이스)이 하나 이상의 DMA 엔진이나 에이전트(데이터 이동기)를 제공하여 호스트(1014)와 ACM(1011) 사이에서 데이터를 전송하는 것; 호스트(1014)가 프로세서 캐시 기입/플러시 동작을 수행하는 것을 포함한 그러나 이것으로 제한되지 않는, 임의의 적절한 데이터 전송 메커니즘을 이용하여 구현될 수 있다. 버스(1040) 상에서 데이터를 전송하는 것은, 후속되는 "판독"을 동반한 버스 "기입" 동작을 내리는 것을 포함할 수 있다. 버스(1040)(예를 들어, PCI 버스)가 명시적인 기입 접수확인을 제공하지 않는 경우 후속된 "판독"이 요구될 수 있다.
일부 실시예에서, ACM 사용자는 복수의 작은 트랜잭션과는 반대로 벌크로 ACM(1011)에 데이터를 전송하기를 원할 수도 있다. 벌크 전송은 임의의 적절한 벌크 전송 메커니즘을 이용하여 구현될 수 있다. 벌크 전송 메커니즘은 버스(1040)의 피쳐들에 입각할 수 있다. 예를 들어, PCI-e 버스(1040)를 포함하는 실시예에서, 벌크 전송 동작은 벌크 레지스터 저장 CPU 명령어를 이용하여 구현될 수 있다.
유사하게, ACM(1011)에 대해 의도된 소정의 데이터는 프로세서 복합체(1012)의 프로세서 캐시에 캐싱될 수 있다. 프로세서 캐시에 캐싱된 데이터는, 후술되는 직렬화 명령어 등의, CPU 캐시 플러시 명령어 등을 이용하여 ACM(1011)에(특정한 자동-커밋 버퍼(1013)에) 명시적으로 플러시될 수 있다.
전술된 DMA 엔진은 또한, ACM 사용자(1016)와 ACM(1011) 사이에서 벌크 데이터 전송을 수행하는데 이용될 수 있다. 일부 실시예에서, ACM(1011)은, (SML API(1019)를 통해) 저장 관리 모듈(1050)을 이용하여 ACM 사용자(1016)에 의해 할당 및/또는 액세스될 수 있는, DMA 엔진들 중 하나 이상을 구현할 수 있다. DMA 엔진은, 로컬 시스템 상에서 데이터를 전송하기 위한 로컬 DMA 전송 엔진 뿐만 네트워크 버스, 네트워크 인터페이스 등을 이용하여 데이터를 전송하기 위한 RDMA 전송 엔진을 포함할 수 있다.
일부 실시예에서, ACM(1011)은 캐싱 응용에서 이용될 수 있다. 예를 들어, 비휘발성 저장 디바이스(1502)는, 하드 디스크, 네트워크-부착된 저장소 등(미도시)의 다른 백킹 저장소를 위한 캐시로서 이용될 수 있다. ACM(1011) 자동-커밋 버퍼(1013)들 중 하나 이상은, ACM(1011)의 자동-커밋 버퍼(1013)들 중 하나 이상을 비휘발성 저장소(1502) 내의 적절한 논리적 식별자에 데이터를 커밋하도록 구성함으로써 비휘발성 저장소(1502)(라이트-백 캐시)에 대한 프론트-엔드로서 이용될 수 있다. 트리거링된 버퍼(1013)는 (예를 들어, 버퍼(1013)를 호스트(1014)의 메모리 시스템(1018)에 맵핑함으로써) 전술된 바와 같이 ACM 사용자(1016)에게 액세스될 수 있다. 재시작 조건은 버퍼(1013)의 내용이 비휘발성 저장소(1502) 캐시에 커밋되게 한다. 재시작 조건이 클리어되면, (재시작 조건시에 자동-커밋 버퍼(1013)에 의해 커밋된) 비휘발성 저장소(1502)에 캐싱된 데이터는 기입 캐시에서 "더티(dirty)"로서 간주될 것이고 이용 및/또는 백킹 저장소로의 마이그레이션에 이용가능하다. 캐시 프론트-엔드로서의 ACM(1011)의 이용은 캐시 디바이스의 성능을 증가시키고 및/또는 마모를 감소시킬 수 있다.
일부 실시예에서, ACM(1011)의 자동-커밋 버퍼(1013)는, 운영 체제, 가상 메모리 시스템, 및/또는 호스트(1014)의 하나 이상의 CPU에 의해, 메모리 라이트-백 캐시로서 활용될 수 있다. CPU 라이트-백 캐시의 일부로서 자동-커밋 버퍼(1013)에 캐싱된 데이터는 그룹으로서 커밋되도록 무장될 수 있다. 커밋될 때, 자동-커밋 버퍼(1013)는 데이터 및 연관된 캐시 태그 양쪽 모두를 커밋할 수 있다. 일부 실시예에서, 라이브-백 캐시 자동-커밋 버퍼(write-back cache auto-commit buffer)들(1013)은 ACM 주소로 무장(또는 미리 결정된 라이트-백 캐시 주소로 무장)될 수 있다. 데이터가 복구될 때, LBA 등의 논리적 식별자 정보가 로그 또는 기타의 데이터로부터 판정될 수 있다.
일부 실시예에서, 저장 관리 모듈(1050)은 라이브러리들을 포함하거나 및/또는 특정한 세트의 ACM 사용자(1016)에게 적합한 API들을 퍼블리싱할 수 있다. 예를 들어, 저장 관리 모듈(1050)은, 트랜잭션 로그(데이터베이스, 파일 시스템, 및 기타의 트랜잭션 로그), 저장 및 포워드 메시징 시스템, 지속적 객체 캐싱, 저장 디바이스 메타데이터 등의, 그 성능이 기입-커밋 레이턴시에 예속되어 있는 애플리케이션들에 맞게 구성될 수 있는 지속적 데이터 구조 모듈(1009)을 제공하거나 이와 협력할 수 있다. 지속적 데이터 구조 모듈(1009)은, 지속적 트랜잭션 로그에 대해 즉각 커밋된 로그 라이브러리(Instant Committed Log Library) 등을, 또는 상이한 지속적 데이터 구조에 대해 또 다른 인터페이스를 제공할 수 있다.
지속적 데이터 구조 모듈(1009)은, 전술된 바와 같이, ACM(1011)의 자동-커밋 버퍼(1013)를 ACM 사용자(1016)의 메모리 시스템(1018)에 맵핑하기 위한 메커니즘을 제공한다. ACM 사용자(1016)(또는 지속적 데이터 구조 모듈(1009) 그 자체)는, 자동-커밋 버퍼(1013) 할당, 무장, 및 액세스에 대해 효율적인 "공급자/소비자" 패러다임을 구현할 수 있다. 예를 들어, (ACM 사용자(1016)의 애플리케이션 공간에서) "공급자" 쓰레드 또는 프로세스는 ACM 사용자(1016)에 대해 자동-커밋 버퍼(1013)를 할당 및/또는 무장시키는데(예를 들어, 자동-커밋 버퍼(1013)를 호스트(1014)의 메모리 시스템(1018) 내의 주소 범위에 맵핑, 자동-커밋 버퍼(1013)를 논리적 식별자로 구성하는 등등에) 이용될 수 있다. 그러면, ACM 사용자(1016)의 "소비자" 쓰레드 또는 프로세스는 미리-할당된 자동-커밋 버퍼(1013)에 액세스할 수 있다. 이 접근법에서, 할당 및/또는 무장 단계는 소비자 쓰레드의 기입-커밋 레이턴시 경로 바깥으로 꺼내진다. ACM 사용자(1016)의 소비자 쓰레드는 트리거링된 자동-커밋 버퍼에 맵핑된 메모리 범위(ACM 메모리 범위(1021))로의 메모리 시멘틱 액세스를 전술된 바와 같이 "즉각 커밋된" 것으로 간주할 수 있다.
ACM 사용자(1016)의 소비자 쓰레드(들)의 성능은, 미리 자동-커밋 버퍼(1013)를 할당 및/또는 무장시키도록 지속적 데이터 구조 모듈(1009)(또는 ACM 사용자(1016))의 공급자 쓰레드를 구성함으로써 향상될 수 있다. 다음 자동-커밋 버퍼(1013)가 필요하면, ACM 사용자(1016)는 공급자에 의해 유지된 푸울(pool)로부터 미리할당된/무장된 버퍼에 액세스한다. 공급자는 또한, 필요할 때 클린업 및/또는 커밋 동작을 수행할 수 있다. 예를 들어, 자동-커밋 버퍼에 기입된 데이터가 지속적 저장소에 커밋되려 할 때, 공급자 쓰레드(또는 기입-커밋 경로 외부의 또 다른 쓰레드)는 (SML API(1019)를 이용하여) 데이터가 커밋되게 할 수 있다. 데이터를 커밋하는 것은, 전술된 바와 같이 ACM 사용자(1016)의 소비자 쓰레드를 위해 자동-커밋 버퍼(1013)를 재할당 및/또는 재무장(re-arming)하는 것을 포함할 수 있다.
전술된 "공급자/소비자" 접근법은 "롤링 버퍼(rolling buffer)"를 구현하는데 이용될 수 있다. ACM 사용자(1016)는 미리 결정된 양의 "롤링" 데이터를 이용하는 애플리케이션을 구현할 수 있다. 예를 들어, ACM 사용자(1016)는 "마지막 20개 인바운드 메시지"를 저장하는 메시지 큐를 구현할 수 있고 및/또는 ACM 사용자(1016)는 비휘발성 저장 디바이스에 대한 지령(예를 들어, 지속적 트림 지령(persistent trim directives) 등)을 관리할 수 있다. 공급자 쓰레드는 ACM 사용자(1016)가 필요로 하는 "롤링 데이터"를 보유하기에 적어도 충분한 용량(예를 들어, 마지막 20개 인바운드 메시지를 보유하기에 충분한 용량)을 갖는 자동-커밋 버퍼(1013)를 할당할 수 있다. 소비자 쓰레드는 전술된 바와 같이 메모리 액세스 시멘틱(로드 및 저장 콜)을 이용하여 버퍼에 액세스할 수 있다. SML API(1019)(또는 ACM 사용자(1016)의 공급자 쓰레드)는 자동-커밋 버퍼(1013)의 이용을 모니터링할 수 있다. 소비자 쓰레드가 자동-커밋 버퍼(1013)의 끝 부근에 오면, 공급자 쓰레드는, (필요하다면) 데이터가 커밋되게 하고, 데이터를 메모리 시스템(1018) 내의 또 다른 범위에 맵핑하고, 자동-커밋 버퍼(1013)를 대응하는 논리적 식별자로 무장시킴으로써, 버퍼(1013)의 "헤드"를 재초기화할 수 있다. 소비자가 버퍼(1013)에 계속 액세스하면, 소비자는 공급자 쓰레드에 의해 재초기화된 자동-커밋 버퍼(1013)에 "롤링-오버"되는 새로운 위치에서 새로운 데이터를 저장하고, 계속 동작한다. 일부 경우에, 전술된 롤링 버퍼에 기입된 데이터는 (재시작 조건이나 기타의 트리거링 이벤트가 발생하지 않는 한) 지속적 저장소에 결코 커밋되지 않을 수 있다. 게다가, 자동-커밋 버퍼(1013)의 용량이 ACM 사용자의 롤링 데이터를 보유하기에 충분하다면, 공급자 쓰레드는 전술된 재초기화/재무장을 수행해야 할 필요가 없을 수도 있다. 대신에, 공급자 쓰레드는 단순히 "롤링 오버된" 데이터를 포함하는 자동-커밋 버퍼(1013)를 재맵핑(및/또는 그 내부의 "롤링 오버된" 데이터를 폐기)할 수 있다.
그 가장 단순한 형태에서, 롤링 버퍼는 2개의 ACM 버퍼(1013)를 포함할 수 있고, 저장 관리 모듈(1050)은 ACM 사용자(1016)에 대해 하나의 ACM 버퍼(1013)에 기입하면서 다른 ACM 버퍼(1013)로부터의 이전에 기입된 데이터를 비휘발성 메모리(1110) 등의 저장 장소에 디스테이징할 수 있다. 하나의 ACM 버퍼(1013)를 채우고 다른 ACM 버퍼(1013)의 디스테이징 프로세스를 완료하는 것에 응답하여, 저장 관리 모듈(1050)은 2개의 ACM 버퍼를 투명하게 스위칭하되, ACM 사용자(1016)가 하나의 ACM 버퍼(1013)의 디스테이징 동안 다른 ACM 버퍼(1013)에 핑퐁 방식으로 기입하도록 스위칭한다. 저장 관리 모듈(1050)은 2개보다 많은 ACM 버퍼(1013)에서도 유사한 롤링 프로세스를 구현할 수 있다. 지속적 데이터 구조 모듈(1009)은, 소정 실시예에서, 하나 이상의 트랜잭션 로그 API 기능을 포함하거나 및/또는 지원한다. ACM 사용자(1016)는, 이들 실시예에서, 지속적 데이터 구조 모듈(1009)을 이용하여, 트랜잭션 로그 데이터 구조를 선언하거나 초기화할 수 있다.
트랜잭션 로그 데이터 구조를 생성하는 트랜잭션 로그 API 명령에 대한 파라미터로서, 한 실시예에서, 지속적 데이터 구조 모듈(1009)은, 비휘발성 저장소(1502) 등의 명칭공간 및/또는 주소 공간 내의 장소 등의 저장 장소를 수신하고, 이 장소에, 저장 관리 모듈(1050)은, 2개 이상의 ACM 버퍼(1013)로부터의 트랜잭션 로그의 데이터를, 전술된 바와 같은 롤링 또는 순환 방식으로, 커밋하거나, 비우거나(empty), 및/또는 디스테이징할 수 있다. 일단, ACM 사용자(1016)가 트랜잭션 로그 데이터 구조를 초기화 또는 선언하고 나면, 한 실시예에서, 트랜잭션 로그 데이터 구조를 구현하기 위한 2개 이상의 ACM 버퍼(1013)의 이용은, ACM(1011)의 성능과 혜택을 수반하며, ACM 사용자(1016)에게 실질적으로 투명하다. 2개 이상의 ACM 버퍼(1013)의 이용은, 소정 실시예에서, 2개 이상의 ACM 버퍼(1013)에 대한 디스테이지 레이트가 ACM 사용자(1016)가 2개 이상의 ACM 버퍼(1013)에 기입하는 레이트보다 크거나 같을 때 투명하다. 지속적 데이터 구조 모듈(1009)은, 한 실시예에서, 2개 이상의 ACM 버퍼(1013)를 이용한 트랜잭션 로그 데이터 구조에 대한 바이트-레벨 기입을 제공한다.
또 다른 예에서, 공급자 쓰레드는 4개 이상의 ACM 버퍼(1013)를 유지할 수 있다. 제1 ACM 버퍼(1013)는, 전술된 바와 같이, 소비자로부터 데이터를 수락하도록 무장될 수 있다. 제2 ACM 버퍼(1013)는, 전술된 바와 같이, 소비자 쓰레드에 의해 능동적으로 액세스될(예를 들어, 채워질) 수 있다. 제3 ACM 버퍼(1013)는 사전-무장 프로세스(pre-arming process)(예를 들어, 전술된 바와 같은, 재초기화)에 있을 수 있고, 제4 ACM 버퍼(1013)는 "비우기(emptying)" 또는 "디스테이징" 중(예를 들어, 전술된 바와 같이, 지속적 저장소에 커밋 중)일 수 있다.
일부 실시예에서, 전술된 바와 같은 지속적 데이터 구조 모듈(1009) 및/또는 롤링 로그 메커니즘은, 파일 시스템(예를 들어, ZFS 파일 시스템)을 위한 동기 기입에 대한 Intent Log를 구현하는데 이용될 수 있다. 로그 데이터(ZIL)는 꽤 작고(1 내지 4기가 바이트), 통상적으로 "기입 전용(write only)"이다. 판독은 파일 시스템 복구를 위해서만 수행될 수 있다. 하나 이상의 자동-커밋 버퍼(1013)는 전술된 바와 같은 롤링 로그 및/또는 요구 페이징 메커니즘을 이용하여 파일 시스템 데이터를 저장하는데 이용될 수 있다.
지속적 데이터 구조 모듈(1009)은, 도 4와 연계하여 전술된 바와 같이 높은 가용성 모드에서 동작하도록 구성될 수 있다. 높은 가용성 모드에서, 저장 관리 모듈(1050) 및/또는 버스(1040)는, 각각이 요청된 동작을 구현할 수 있고 및/또는 재시작 조건의 이벤트에서 데이터를 커밋하도록 트리거링될 수 있는 2개 이상의 ACM(1011)으로의 메모리 시멘틱 액세스에 관한 명령을 전송한다.
소정 실시예에서, 지속적 데이터 구조 모듈(1009)은, 도시된 파일 시스템 모듈(1558) 등의, 파일 시스템 내의 파일들로서의 지속적 데이터 구조들로의 액세스를 제공할 수 있다. 파일 시스템 모듈(1558)은, 한 실시예에서, 호스트 디바이스(1014)의 파일 시스템을 포함할 수 있고, 운영 체제, 저장 서브시스템 등에 의해 제공될 수 있다. 추가 실시예에서, 파일 시스템 모듈(1558)은, ACM(1011) 및/또는 비휘발성 메모리 매체(110, 1110, 1502)에 대한 직접 파일 시스템(DFS; direct file system)을 포함하여, 하나 이상의 운영 체제 또는 저장 서브시스템 층 등을 바이패스하여 지속적 데이터 구조로의 효율적이고 체계적인 액세스를 직접 제공할 수 있다.
예를 들어, 한 실시예에서, 파일 시스템 모듈(1558)은, 저장 관리 모듈(1050), 파일 시스템 모듈(1558), 후술되는 메타데이터 모듈(1912) 등이 ACM 버퍼(1013) 및/또는 비휘발성 메모리 매체(110, 1110, 1502) 내의 물리적 위치에 직접 맵핑할 수 있는, 저장 관리 모듈(1050)에 의해 제공된 성긴 논리적 주소 공간에서 파일들을 직접 레이아웃할 수 있다. 파일 시스템 모듈(1558)은, 추가 실시예에서, 저장 관리 모듈(1050) 및/또는 ACM(1011)을 이용하거나 이들과 협력하여, 지속적 데이터 구조 모듈(1009) 또는 기타의 저장 클라이언트들에 대해 각각, 블록 할당, ACM 버퍼(1013) 할당, 및/또는 원자 데이터 업데이트를 수행할 수 있다. 파일 시스템 모듈(1558)은, 오픈, 클로우즈, 판독, 기입, pread, pwrite, lseek, mmap, 또는 기타의 요청이나 명령 등의 하나 이상의 파일 시스템 인터페이스나 API들을 지원할 수 있다. 파일 시스템 모듈(1558)은, 커널-공간에서 커널 모듈을, 사용자-공간에서 사용자 모듈을, 또는 커널-공간 및 사용자-공간 모두에서 모듈들의 조합을 포함할 수 있다. 파일 시스템 모듈(1558)은, 소정 실시예에서, 저장 관리 모듈(1050), 저장 제어기(104, 1004, 1104) 등과 통합되거나, 컴퓨터 실행가능한 프로그램 코드 및/또는 로직 하드웨어의 독립된 모듈일 수 있다.
전술된 바와 같이, 자동-커밋 메모리 모듈(1011), 연관된 커밋 에이전트(102) 등은, 커밋 이벤트, 재시작 이벤트, 동기화 또는 디스테이지 요청, 상태 변화, 조건 변화, 인자 변화, 속성 변화, 자동-커밋 버퍼(1013)의 영역이 가득차게 되는 등의 트리거에 응답하여, ACM 메타데이터(1015)에 기초해, 휘발성 ACM 버퍼(1013)로부터의 데이터를 비휘발성 메모리 매체(110, 1110, 1502)에 커밋, 복사, 전송, 동기화, 디스테이징, 지속, 또는 보존하도록 구성될 수 있다. 데이터를 커밋하는 것은, 한 실시예에서, ACM 버퍼(1013)로부터의 데이터를 비휘발성 메모리 매체(110, 1110, 1502) 내의 장소에 복사하거나 전송하는 것을 포함할 수 있다. 추가 실시예에서, 데이터는, 자동-커밋 메모리 모듈(1011)의 지속성 보장으로 인해, ACM 버퍼(1013)가, 데이터에 대한 커밋 동작을 정의하거나 표시하는 ACM 메타데이터(1015)로 무장되거나 구성되자마자 커밋된 것으로 간주된다.
지속적 데이터 구조 모듈(1009)은, 한 실시예에서, 지속적 데이터 구조에 대한 데이터(예를 들어, 클라이언트로부터의 데이터 구조에 대한 입력 데이터)를, 하나 이상의 ACM 버퍼(1013)에 기입하여 지속적 데이터 구조가 비휘발성 저장 디바이스(102, 1102)의 비휘발성 메모리 매체(110, 1110, 1502)에 커밋되고 및/또는 지속되도록 보장하기 위해, 자동-커밋 메모리 모듈(1011)에 제공하도록 구성될 수 있다. 지속적 데이터 구조 모듈(1009)은 자동-커밋 메모리 모듈(1011)을 이용하여 지속적 데이터 구조를 관리하기 위해 하나 이상의 ACM 프리미티브 동작을 이용할 수 있다. 예를 들어, 다양한 실시예에서, 지속적 데이터 구조 모듈(1009)은, 지속적 데이터 구조의 데이터를 ACM 버퍼(1013)에 로딩하기 위해 ACM 채움 동작을, ACM 버퍼(1013)로부터 비휘발성 메모리 매체(110, 1110, 1502)로 지속적 데이터 구조의 디스테이징, 복사, 전송, 및/또는 이동시키기 위해 ACM 디스테이지 동작을, ACM 버퍼(1013)에 저장된 지속적 데이터 구조의 데이터의 일관성을 보장하기 위해 ACM 배리어 또는 ACM 체크포인트 동작 등을 이용할 수 있다. 추가 실시예에서, 하나 이상의 ACM 버퍼(1013)는, 호스트 디바이스(1014) 등의 가상 메모리에 맵핑될 수 있고, 지속적 데이터 구조 모듈(1009)은, 전술된 바와 같이, 메모리 시멘틱 동작을 이용하여, ACM 버퍼(1013) 내에 데이터를 기입, 저장 또는 로딩할 수 있다.
전술된 바와 같이, 저장 관리 모듈(1050)(예를 들어, 저장 관리 모듈(1050))은 비휘발성 메모리 매체(110, 1110, 1502) 내의 데이터를 순차적으로, 도 11에 관하여 후술되는 순차적 또는 연대적 로그-기반의 기입 구조(2140)내에 저장하도록 구성될 수 있다. 저장 관리 모듈(1050)(예를 들어, 저장 관리 모듈(1050))은, 도 11에 관하여 후술되는 바와 같은 논리-대-물리 주소 맵핑 구조(2000)를 이용하여, 비휘발성 메모리 매체(110, 1110, 1502)에 데이터를 저장하는 물리적 장소에 데이터의 논리적 주소를 맵핑할 수 있다. 지속적 데이터 구조 모듈(1009)의 지속적 데이터 구조는, 소정 실시예에서, 파일 명칭을 이용하여 파일 시스템 모듈(1558)의 파일들로서 액세스가능할 수 있다. 지속적 데이터 구조, 파일 시스템 모듈(1558)의 파일들 등은, 비휘발성 저장 디바이스(102, 1102)의 물리적 저장 용량보다 큰 성긴 논리적 주소 공간을 포함할 수 있는, 저장 관리 모듈(1050)(예를 들어, 저장 관리 모듈(1050))에 의해 제공된 논리적 주소 공간 내의 논리적 식별자(예를 들어, LBA)와 연관될 수 있다. 지속적 데이터 구조 모듈(1009), 파일 시스템 모듈(1558), 저장 관리 모듈(1050)(예를 들어, 저장 관리 모듈(1050)), 및/또는 도 10b와 관련하여 아래에서 설명되는 메타데이터 모듈(1912)은, 지속적 저장 구조, 파일 등의 어느 부분들이 ACM 버퍼(1013)에 저장되는지, 및 어느 부분들이 파일 시스템 모듈(1558)에 대한 파일 시스템 메타데이터에서 이러한 맵핑을 유지하는 비휘발성 메모리 매체(110, 1110, 1502)에 저장되는지 등을 추적할 수 있다.
이런 방식으로, 소정 실시예에서, 파일 시스템 모듈(1558)은, 파일명칭, 오프셋 등을 이용하여 복수의 파일로의 액세스를 제공할 수 있고 파일들(예를 들어, 지속적 데이터 구조 또는 기타의 파일들)은, ACM 버퍼(1013), 비휘발성 메모리 매체(110, 1110, 1502), 및/또는 ACM 버퍼(1013)과 비휘발성 메모리 매체(110, 1110, 1502) 양쪽 모두에 저장될 수 있다. 지속적 데이터 구조 모듈(1009), 파일 시스템 모듈(1558), 저장 관리 모듈(1050), 및/또는 자동-커밋 메모리 모듈(1011) 사이의 이러한 협력은, 휘발성 ACM 버퍼(1013)의 액세스 속도, 비휘발성 메모리 매체(110, 1110, 1502)의 지속성, 및 기저 복잡성의 관리나 인식없이 지속적 데이터 구조로의 파일 시스템 액세스의 편의성을 받을 수 있는, 애플리케이션이나 기타의 클라이언트로부터 은닉되거나 마스킹될 수 있다.
파일 시스템 모듈(1559)은, 소정 실시예에서, ACM 버퍼(1013) 및/또는 비휘발성 메모리 매체(110, 1110, 1502)에 물리적으로 위치한 파일들로의 액세스를 제공하도록 구성되기 때문에, 파일명칭과 연관되고 파일 시스템 모듈(1558)을 통해 파일로서 액세스가능한 지속적 데이터 구조는, 한 실시예에서, 블록 디바이스 인터페이스(1520), 메모리 시멘틱 인터페이스(1522), 및/또는 파일 시스템 모듈(1558)에 의해 제공되는 파일 시스템 동작들을 이용하여 액세스(기입 및/또는 판독)될 수 있다. 한 실시예에서, 파일 시스템 모듈(1558)은 파일을 ACM 컨테이너로서 개방하고, 데이터의 각 블록은 ACM 버퍼(1013) 또는 비휘발성 메모리 매체(110, 1110, 1502) 중 어느 하나의 장소에 맵핑되어 있고, 맵핑은, 파일의 데이터가 ACM 버퍼(1013)로부터 비휘발성 메모리 매체(110, 1110, 1502) 등에 디스테이징됨에 따라 파일의 새로운 데이터가 기입될 때 업데이트된다.
여기서 개시된 ACM(1011)은, 영속성 동기화 프리미티브(durable synchronization primitive) 등의, 다른 유형의 애플리케이션을 가능케하는데 이용될 수 있다. 동기화 프리미티브는, 세마포어(semaphore), 뮤텍스(mutex), 원자 카운터(atomic counter), 테스트 및 세트(test and set) 등을 포함하지만, 이것으로 제한되지 않는다.
동기화 프리미티브는 자동-커밋 버퍼(1013) 상에 구현될 수 있다. 동기화 프리미티브를 액세스하기를 원하는 ACM 사용자(1016)(또는 기타의 엔티티)는 자동-커밋 버퍼(1013)를 메모리 시스템(1018)에 맵핑할 수 있다. 일부 실시예에서, 각각의 ACM 사용자(1016)는 동기화 프리미티브 자동-커밋 버퍼(1013)를 메모리 시스템(1018) 내의 그 자신의 각각의 주소 범위에 맵핑할 수 있다. 상이한 주소 범위들 모두가 동일한 자동-커밋 버퍼(1013)에 맵핑되기 때문에, 모두는 동기화 프리미티브의 동일한 상태를 보일 것이다. 원격 컴퓨팅 디바이스 상의 ACM 사용자(1016)는, RDMA 네트워크 또는 기타의 원격 액세스 메커니즘(예를 들어, 인피니밴드, 원격 PCI 등)을 이용하여 동기화 프리미티브 자동-커밋 버퍼(1013)를 그들의 메모리 시스템에 맵핑할 수 있다.
일부 실시예에서, 저장 관리 모듈(1050)은, ACM(1011) 상의 동기화 프리미티브의 생성 및/또는 이로의 액세스를 용이하게 하는 영속성 동기화 프리미티브 라이브러리(DSL; Durable Synchronization Primitive Library)(1554)를 포함할 수 있다. DSL(1554)은, 전술된 바와 같은 1-대-다 맵핑(하나의 자동-커밋 버퍼(1030) 대 메모리 시스템(1018) 내의 많은 주소 범위)을 용이하게 하도록 구성될 수 있다.
세마포어 프리미티브에 액세스하는 ACM 사용자(1016)들은 그들의 액세스가 "영속성(durable)"인 것으로 간주할 수 있는데, 그 이유는, 동기화 프리미티브가 사용 중에 있는 동안 재시작 조건이 발생한다면, 동기화 프리미티브의 상태는 전술된 바와 같이 지속될 것이기 때문이다(동기화 프리미티브의 자동-커밋 버퍼(1013)는 비휘발성 저장소(1502) 또는 기타의 지속적 저장소에 커밋될 것이다).
전술된 바와 같이, 저장 관리 모듈(1050)은 파일을 호스트(1014)의 메모리 시스템(1018)(가상 주소 공간) 내에 맵핑하는데 이용될 수 있다. 파일은 "즉각 커밋형 메모리"(ICM; Instant Committed Memory) 모드에서 맵핑될 수 있다. 이 모드에서, 메모리 맵핑된 파일에 이루어진 모든 변경은, 재시작 조건이 발생하더라도, 파일에 반영되는 것이 보장된다. 이러한 보장은, ICM 파일의 모든 "더티(dirty)" 페이지들에 대해 ACM(1011)의 자동-커밋 버퍼(1013)를 이용하도록 요구 페이징 시스템을 구성함으로써 이루어질 수 있다. 따라서, 재시작 조건이 발생하면, 더티 페이지는 파일에 커밋될 것이고, 어떠한 데이터도 소실되지 않을 것이다.
일부 실시예에서, 저장 관리 모듈(1050)은 이들 피쳐들을 구현하는 ICM 라이브러리(ICML)(1556)를 포함할 수 있다. ICML(1556)은 호스트(1014)의 운영 체제 및/또는 가상 메모리 시스템과 통합될 수 있다. ICM 메모리 맵핑된 파일의 페이지가 더티화되려할 때, ICML(1556)은 자동-커밋 버퍼(1013)를 더티 페이지를 보유하도록 무장한다. 자동-커밋 버퍼(1013)는 호스트(1014)의 메모리 시스템(1018)에 맵핑되고, 메모리 맵핑된 파일과 연관된 논리적 식별자에 커밋되도록 트리거링된다. 전술된 바와 같이, 메모리 시스템(1018) 내의 페이지들에 대한 변경은 (메모리 시멘틱 액세스 모듈(1522)을 통해) 자동-커밋 버퍼(1013) 상에서 구현된다.
ICML(1556)은, 재시작 조건이 발생할 때 및/또는 호스트(1014)의 요구 페이징 시스템이 또 다른 목적을 위해 자동-커밋 버퍼(1013)를 이용할 필요가 있을 때, 메모리 맵핑된 파일의 자동-커밋 버퍼(1013)를 커밋하도록 구성될 수 있다. 더티 페이지로부터 자동-커밋 버퍼(1013)를 "분리"할지의 판정은, 요구 페이징 시스템에 의해, 저장 관리 모듈(1050)에 의해(예를 들어, LRU(least recently used) 메트릭 등을 이용하여), 또는 어떤 다른 엔티티(예를 들어, ACM 사용자(1016))에 의해 이루어질 수 있다. 자동-커밋 버퍼가 분리되면, 저장 관리 모듈(1050)은 그 내용이 커밋되게 할 수 있다. 대안으로서, 자동-커밋 버퍼(1013)의 내용은, 파일의 가상 메모리 맵핑이 RAM 맵핑 메커니즘을 이용하도록 천이되는 시점에서 시스템 RAM으로 이전될 수 있다.
일부 실시예에서, 저장 관리 모듈(1050)(또는 ICML(1556))은, ACM 사용자(1016)가 데이터를 기입하기 이전에 메모리 맵핑된 파일의 페이지가 더티화되려 한다는 것을 운영 체제(가상 메모리 시스템 등)에게 통보하는 메커니즘을 제공하도록 구성될 수 있다. 이러한 통보는, 운영 체제가 더티 페이지에 대해 미리 자동-커밋 버퍼(1013)를 무장시키고, (자동-커밋 버퍼가 맵핑되고 무장되어 있는 동안) 기입이 실제로 발생할 때 스톨링(stalling)을 방지하는 것을 허용할 수 있다. 자동-커밋 버퍼(1013)의 통보와 준비는 별개의 쓰레드(예를 들어, 전술된 공급자 쓰레드)에서 구현될 수 있다.
저장 관리 모듈(1050) 및/또는 ICML(1556)은, 곧 기입되려고 하는 특정한 페이지가 유용한 내용을 갖고 있지 않고 제로로 채워져야 한다는 것을 운영 체제에 통보하는 API를 제공할 수 있다. 이러한 통보는 운영 체제가 불필요한 판독 동작을 피하도록 도울 수 있다.
파일을 ACM(1011)에 메모리 맵핑하기 위한 메커니즘은, 로그-유형 애플리케이션에서, 또는 지속적 데이터 구조 모듈(1009)에 의해 제공되는 다른 지속적 데이터 구조를 위해 이용될 수 있다. 예를 들어, 지속적 데이터 구조 모듈(1009)은, 전술된 바와 같이, 로그 파일을 하나 이상의 자동-커밋 버퍼(1013)에 메모리 맵핑하도록 구성될 수 있다. 공급자 쓰레드는, 어느 페이지가 더티화되려는지에 관해 및/또는 유효한 데이터를 포함하지 않는 페이지를 식별하는 통보를 운영 체제에 제공할 수 있다.
대안으로서, 또는 추가로, ICML(1556)은 호스트(1014)의 운영 체제로의 통합없이 구현될 수도 있다. 이들 실시예에서, ICML(1556)은, mprotect, mmap, 및 수동 세그먼트화 오류 신호 등의 시스템 신호를 모니터링 및/또는 포착하여 통상적으로 운영 체제에 의해 수행되는 요구 페이징 동작을 에뮬레이트하도록 구성될 수 있다.
도 7은 자동-커밋 메모리를 제공하기 위한 방법(1600)의 한 실시예의 흐름도이다. 단계 1610에서, 방법(1600)이 개시되고 초기화될 수 있다. 단계 1610은, 방법(1600)이 버스를 통해 ACM과의 통신을 개시하는 단계(예를 들어, 버스(1040)를 통해 ACM(1011)과의 통신을 개시하는 단계)를 포함할 수 있다.
단계 1620에서, ACM의 자동-커밋 버퍼는 컴퓨팅 디바이스(예를 들어, 호스트(1014))의 메모리 시스템 내에 맵핑될 수 있다. 맵핑은, 자동-커밋 버퍼의 BAR 주소를 메모리 시스템 내의 주소 범위와 연관시키는 단계를 포함할 수 있다.
단계 1630에서, 자동-커밋 버퍼는, 재시작 조건 이벤트시에 자동-커밋 버퍼가 특정한 지속적 저장소에 및/또는 지속적 저장소 내의 특정한 장소에 커밋되게 하는 ACM 메타데이터로 무장될 수 있다. 일부 실시예에서, ACM 메타데이터는, LBA, 객체 식별자 등의 논리적 식별자를 포함할 수 있다. 단계 1630은, ACM 메타데이터가 유효하고 및/또는 자동-커밋 버퍼의 내용을 커밋하는데 이용될 수 있다는 것을 확인하는 단계를 포함할 수 있다.
단계 1640에서, 운영 체제, 애플리케이션 등의 ACM 사용자는, 메모리 액세스 시멘틱을 이용하여 무장된 자동-커밋 버퍼에 액세스할 수 있다. ACM 사용자는, 단계 1630의 무장으로 인해 액세스들이 "즉각 커밋"된 것으로 간주할 수 있다. 따라서, ACM 사용자는, 별도의 및/또는 명시적인 커밋 명령을 생략하는 "즉각 커밋된" 기입을 구현할 수 있다. 게다가, 메모리 시멘틱 액세스는 (단계 1620의 맵핑을 통해) 자동-커밋 버퍼에 직접 맵핑되기 때문에, 메모리 시멘틱 액세스는 가상 메모리 시스템에서 통상적으로 요구되는 시스템 콜을 바이패스할 수 있다.
단계 1650에서, 방법(1600)은 다음 자동-커밋 버퍼가 맵핑되고 및/또는 무장될 때까지 종료한다.
도 8은 자동-커밋 메모리를 제공하기 위한 방법(1700)의 또 다른 실시예의 흐름도이다. 단계 1710에서, 방법(1700)은 전술된 바와 같이 시작하고 초기화된다.
단계 1720에서, ACM의 자동-커밋 버퍼는 컴퓨팅 디바이스(예를 들어, 호스트(1014))의 메모리 시스템 내에 맵핑되고, 전술된 바와 같이 무장된다.
단계 1730에서, ACM 사용자는, (예를 들어, 단계 1720에서 자동-커밋 버퍼에 맵핑된 메모리 범위 내에서 메모리 시멘틱 동작을 구현함으로써) 메모리 액세스 시멘틱을 이용하여 자동-커밋 버퍼에 액세스한다.
단계 1740에서, 재시작 조건이 검출된다. 전술된 바와 같이, 재시작 조건은 시스템 셧다운, 시스템 재시작, 전력 소실, ACM과 호스트 컴퓨팅 디바이스 간의 통신 소실, 소프트웨어 오류, 또는 ACM 및/또는 호스트 컴퓨팅 디바이스의 지속된 동작을 배제시키는 기타 임의의 재시작 조건일 수 있다.
단계 1750에서, ACM은 자동-커밋 버퍼 상에서 무장된 트리거링된 커밋 동작을 구현한다. 트리거링된 커밋 동작은, 고체-상태 또는 기타의 비휘발성 저장소 등의, 지속적 저장소에 자동-커밋 버퍼의 내용을 커밋하는 것을 포함할 수 있다.
단계 1760에서, 방법(1700)은 다음 자동-커밋 버퍼가 맵핑되고 및/또는 무장될 때까지 또는 재시작 조건이 검출될 때까지 종료한다.
도 9는 자동-커밋 메모리를 제공하기 위한 또 다른 실시예의 흐름도이다. 단계 1810에서, 방법(1800)은 전술된 바와 같이 시작하고 초기화된다. 단계 1820에서, 재시작 조건이 검출된다.
단계 1830에서, 방법(1800)은 (있다면) ACM 상의 무장된 자동-커밋 버퍼를 액세스한다. 무장된 자동-커밋 버퍼를 액세스하는 것은, 방법(1800)이 그 트리거링된 ACM 메타데이터를 검사함으로써 자동-커밋 버퍼가 무장되어 있는지를 판정하는 것을 포함한다. 어떠한 트리거링된 ACM 메타데이터도 존재하지 않거나, ACM 메타데이터가 무효하다면, 방법(1800)은 자동-커밋 버퍼가 무장되어 있지 않다고 판정할 수 있다. 특정한 자동-커밋 버퍼에 대해 유효한 트리거링된 ACM 메타데이터가 존재한다면, 방법(1800)은 자동-커밋 버퍼를 무장된 버퍼로서 식별하고 단계 1840으로 진행한다.
단계 1840에서, 무장된 자동-커밋 버퍼에 대한 트리거링된 커밋 동작이 수행된다. 트리거링된 커밋 동작을 수행하는 것은, 고체-상태 또는 기타의 비휘발성 저장 매체 등의, 순차적 및/또는 로그-기반의 저장 매체에 자동-커밋 버퍼의 내용을 지속시키는 것을 포함할 수 있다. 따라서, 트리거링된 커밋 동작은, 자동-커밋 버퍼의 논리적 식별자에 액세스하는 것, 데이터를 논리적 식별자로 라벨링하는 것, 및 라벨링된 데이터를 기입 데이터 파이프라인 내에 주입하는 것을 포함할 수 있다. 대안으로서, 트리거링된 커밋 동작은 논리적 식별자와 물리적 저장 주소(예를 들어, 하드 디스크) 사이의 일대일 맵핑을 갖는 지속적 저장소 상에 데이터를 저장하는 것을 포함할 수 있다. 트리거링된 커밋 동작은 무장된 자동-커밋 버퍼의 내용을 명시된 물리적 주소에 저장하는 것을 포함할 수 있다.
단계 1840에서 트리거링된 커밋 동작을 수행하는 것은, 보조 전원을 이용하여, 트리거링된 커밋 동작이 완료될 때까지, ACM, 고체-상태 저장 매체, 및/또는 기타의 지속적 비휘발성 저장 매체에 전력을 공급하는 것을 포함할 수 있다.
소정 실시예에서, 물리적 메모리 명칭공간, 가상 메모리 명칭공간 등의 휘발성 메모리 명칭공간을 이용하는 것 대신에 또는 이에 추가하여, 및/또는 파일 시스템 명칭공간, 논리적 유닛 번호(LUN) 명칭 공간 등의 저장 명칭공간을 이용하는 것 대신에 또는 이에 추가하여, 전술된 바와 같은, 하나 이상의 커밋 에이전트(1020)는 ACM(1011)에 대한 독립된 지속적 메모리 명칭공간을 구현할 수 있다. 예를 들어, 통상적으로 물리적 및/또는 가상 메모리 내의 오프셋을 이용하여 액세스되는, 휘발성 메모리 명칭공간은, 리부팅, 고장 이벤트 등의 재시작 이벤트 후에 지속되거나 이용가능하지 않고, 재시작 이벤트 이전에 물리적 및/또는 가상 메모리 내에 데이터를 소유한 프로세스는 통상적으로 재시작 이벤트 이후에 더 이상 존재하지 않는다. 대안으로서, 저장 명칭공간은, 통상적으로, 파일 명칭과 오프셋, LUN ID 및 오프셋 등을 이용하여 액세스된다. 저장 명칭공간은 재시작 이벤트 이후에 이용가능할 수 있지만, 저장 명칭공간은 ACM(1011)과의 이용에 대해 너무 많은 오버헤드를 가질 수 있다. 예를 들어, 파일 시스템 저장 명칭공간을 이용한 각각의 실행 프로세스에 대한 상태를 보관하는 것은, 각각의 실행 프로세스에 대한 별개의 파일을 야기하여, ACM(1011)의 효율적 이용이 되지 못할 수도 있다.
하나 이상의 커밋 에이전트(1020) 및/또는 제어기(1004)는, 소정 실시예에서, ACM 사용자(1016)에게, 저장 명칭공간의 오버헤드없이 재시작 이벤트를 통해 지속되는 ACM(1011)에 대한 새로운 유형의 지속적 메모리 명칭공간을 제공한다. ACM 사용자(1016) 등의 하나 이상의 프로세스는, 한 실시예에서, 전역적으로 고유한 식별자(GUID), 유니버설 고유 식별자(UUID) 등의 고유 식별자를 이용하여 지속적 메모리 명칭공간에 액세스하여, 재시작 이벤트에 앞서 ACM 사용자(1016)에 대한 제1 프로세스에 의해 저장된 데이터가, 저장 명칭공간, 파일 시스템 등의 오버헤드없이, 재시작 이벤트 후에 ACM 사용자(1016)에 대한 제2 프로세스에 이용가능할 수 있다.
고유 식별자는, 한 실시예에서, 커밋 에이전트(1020), 제어기(1004) 등에 의해 ACM 사용자(1016)에게 할당될 수 있다. 또 다른 실시예에서, ACM 사용자(1016)는 그 자신의 고유한 식별자를 판정할 수 있다. 소정 실시예에서, 지속적 메모리 명칭공간은 충분히 크고 및/또는 ACM 사용자(1016)는, 미리정의된, 알려진 방식으로(예를 들어, 충분히 고유한 씨드 값, 넌스 등에 기초하여) 고유 식별자를 판정하여 고유 식별자들간의 충돌을 감소, 제한, 및/또는 제거한다. 한 실시예에서, ACM 메타데이터(1015)는, ACM 버퍼(1013)의 소유자, ACM 버퍼(1013)의 하나 이상의 페이지의 소유자 등과 연관된 지속적 메모리 명칭공간 고유 식별자를 포함한다.
한 실시예에서, 하나 이상의 커밋 에이전트(1020) 및/또는 제어기(1004)는, ACM 사용자(1016)에게 지속적 메모리 명칭공간 API를 제공하고, 이를 통해 ACM 사용자(1016)는 지속적 메모리 명칭공간을 이용하여 ACM(1011)에 액세스할 수 있다. 다양한 실시예에서, 하나 이상의 커밋 에이전트(102) 및/또는 제어기(1004)는, 휘발성 메모리 명칭공간 또는 저장 명칭공간 등의 기존의 명칭공간으로부터 지속적 메모리 명칭공간으로 데이터를 천이, 변환, 맵핑, 및/또는 복사하기 위한 지속적 메모리 명칭공간 API 함수; 지속적 메모리 명칭공간으로부터, 휘발성 메모리 명칭공간 또는 저장 명칭공간 등의 기존의 명칭공간으로 데이터를 천이, 변환, 맵핑, 및/또는 복사하기 위한 지속적 메모리 명칭공간 API 함수; GUID, UUID 등의 고유 식별자를 할당하기 위한 지속적 메모리 명칭공간 API 함수; 고유 식별자와 연관된 ACM 버퍼(1013)를 나열 또는 열거하기 위한 지속적 메모리 명칭공간 API 함수; 고유 식별자와 연관된 데이터를 엑스포트 또는 마이그레이트하여, 애플리케이션 및/또는 프로세스 등의 ACM 사용자(1016)가 그 ACM 데이터를 상이한 호스트(1014)에, 상이한 ACM(1011) 등에 가져가도록 하기 위한 지속적 메모리 명칭공간 API 함수; 및/또는 ACM(1011)에 대한 기타의 지속적 메모리 명칭공간 API 함수를 제공할 수 있다.
예를 들어, ACM 사용자(1016)는, 한 실시예에서, 지속적 메모리 명칭공간 API 함수를 이용하여, 지속적 메모리 명칭공간의 하나 이상의 ACM 버퍼(1013)를 호스트(1014) 등의 운영 체제의 가상 메모리에 맵핑하고, 가상 메모리로의 맵핑은 재시작 이벤트에 응답하여 종료할 수 있는 반면 ACM 사용자(1016)는 재시작 이벤트 후에 지속적 메모리 명칭공간을 이용하여 하나 이상의 ACM 버퍼(1013)에 계속 액세스할 수 있다. 소정 실시예에서, 저장 관리 모듈(1050)은 하나 이상의 커밋 에이전트(102) 및/또는 제어기(1004)와 협력하여 지속적 메모리 명칭공간 API를 제공할 수 있다.
지속적 메모리 명칭공간은, 소정 실시예에서, ACM 메타데이터(1015)에 의해 인덱싱된, ACM 버퍼(1013)(및/또는 연관된 ACM 페이지)의 평탄한 비계층구조적 명칭공간이다. 하나 이상의 커밋 에이전트(1020) 및/또는 제어기(1004)는, 한 실시예에서, ACM 버퍼(1013)가 ACM 메타데이터(1015)에 의해 질의받는 것을 허용한다. ACM 메타데이터(1015)가 고유 식별자를 포함하는 실시예에서, 소정 실시예에서, ACM 사용자(1016)는 고유 식별자와 연관된 ACM 버퍼(1013)(및/또는 저장된 데이터)를 위치파악하기 위해 고유 식별자별로 ACM 버퍼(1013)를 질의 또는 검색할 수 있다. 추가 실시예에서, 하나 이상의 커밋 에이전트(102) 및/또는 제어기(1004)는, ACM 사용자(1016)가 그 일반 메타데이터 필드에서 그 자신의 ACM 메타데이터(1015)를 정의할 수 있도록 ACM 메타데이터(1015) 내에 하나 이상의 일반 메타데이터 필드를 제공할 수 있다. 하나 이상의 커밋 에이전트(1020) 및/또는 제어기(1004)는, 한 실시예에서, 고유 식별자 등에 기초하여, ACM(1011)에게 액세스 제어를 제공할 수 있다.
한 실시예에서, ACM 버퍼(1013)는, 휘발성 명칭공간, 저장 명칭공간 등의, 하나 이상의 추가 명칭공간과 지속적 메모리 명칭공간의 멤버일 수 있다. 추가 실시예에서, 하나 이상의 커밋 에이전트(1020) 및/또는 제어기(1004)는 복수의 ACM 사용자(1016)에게 동일한 ACM 버퍼(103)로의 동시 액세스를 제공할 수 있다. 예를 들어, 동일한 유형의 및/또는 동일한 고유 식별자를 갖는 복수의 ACM 사용자(1016), 단일 유형의 ACM 사용자(1016)의 복수의 인스턴스, 단일 ACM 사용자(1016)의 복수의 프로세스 등이 하나 이상의 ACM 버퍼(1013)를 공유할 수 있다. 동일한 ACM 버퍼(1013)에 액세스하는 복수의 ACM 사용자(1016)는, 한 실시예에서, 록킹 제어(locking control), 턴-기반의 제어(turn-based control), 조정자-기반의 제어(moderator-based control) 등의, 공유된 ACM 버퍼(1013)에 대한 그들 자신의 액세스 제어를 제공할 수 있다. 추가 실시예에서, 고유 식별자를 이용하여, 호스트(1014) 상의 새로운 ACM 사용자(1016), 업데이트된 ACM 사용자(1016) 등이 액세스할 수 있다.
소정 실시예에서, ACM(1011)은, 복수의 독립된 액세스 채널, 버스, 및/또는 포트를 포함할 수 있고, 적어도 2중 포팅형(예를 들어, 2중 포팅형, 3중 포팅형, 4중 포팅형)일 수 있다. ACM(1011)이 적어도 2중 포팅형인 실시예에서, ACM(1011)은 복수의 독립된 버스(1040)를 통해 액세스가능하다. 예를 들어, ACM(1011)은, 단일 호스트(1014)와의 복수의 리던던트 버스(1040)를 통해 액세스할 수 있고, 상이한 호스트(1014) 등과의 별개의 버스(104)를 통해 복수의 호스트(1014)에 액세스가능할 수 있다. ACM(1011)이 적어도 2중 포팅형인 실시예에서, 하나의 노드 및/또는 액세스 채널(예를 들어, 호스트(1014), 버스(1040)이 고장난다면, 하나 이상의 추가 노드 및/또는 ACM(1011)으로의 액세스 채널이 기능을 유지하여, 복수의 호스트(1014)들간에 리던던시, 복제 등의 필요성을 피할 수 있다.
한 실시예에서, ACM(1011)은 PCI-e 부착된 2중 포트 디바이스를 포함하고, ACM(1011)은 독립된 PCI-e 버스(1040)를 통해 2개의 호스트(1014)에 접속되고 이와 통신할 수 있다. 예를 들어, ACM(1011)은 복수의 PCI-e 슬롯 커넥터 등에 접속하기 위한 복수의 PCI-e 엣지 커넥터를 포함할 수 있다. 추가 실시예에서, 전력 접속(1030)도 역시 리던던트일 수 있어서, 버스(1040) 당 하나의 전력 접속(1030)을 가진다. 복수의 접속 중 적어도 하나는, 소정 실시예에서, NIC 등의 데이터 네트워크 접속을 포함할 수 있다. 예를 들어, ACM(1011)은 하나 이상의 PCI-e 접속과 하나 이상의 데이터 네트워크 접속을 포함할 수 있다.
한 실시예에서, 제어기(1004)는 ACM(1011)이 결합되어 있는 복수의 호스트(1014)간에 중재하여, 한 번에 하나의 호스트(1014)가 ACM 버퍼(1013)에 액세스할 수 있다. 제어기(1004)는, 또 다른 실시예에서, 호스트(1014)로부터의 예약 요청을 수락하고, 예약 요청에 응답하여 요청측 호스트(1014)에게 ACM 버퍼(1013)로의 액세스를 제공할 수 있다. ACM(1011)은 예약 요청을 ACM(1011)의 원자 동작으로서 태생적으로(natively) 지원할 수 있다. 다른 실시예에서, ACM(1011)은 호스트(1014)들간에 ACM 버퍼(1013)를 분할하거나, 호스트들간에 ACM 버퍼(1013)를 분할하되 호스트들간에 백킹 비휘발성 메모리(1110)를 공유할 수 있거나, 호스트(1014)들간에 ACM 버퍼(1013), 비휘발성 메모리(1110), 및/또는 연관된 주소 공간들을 기타의 방식으로 분할할 수 있다.
한 실시예에서, 제어기(1004), 하나 이상의 커밋 에이전트(1020), 및/또는 ACM(1011)의 기타의 요소들은 2중-헤드형, 분할된-브레인형 등일 수 있고, 각 헤드 또는 브레인은 ACM(1011)에게 리던던트 기능을 제공하기 위해 호스트(1014)와 및 서로 통신하도록 구성된다. 적어도 2중 포팅형임으로써, 소정 실시예에서, ACM(1011)은, 특히 데이터 네트워크 등을 통해 중복, 복제 등이 수행되는 경우, 보통은 ACM(1011)의 I/O 속도를 감소시키는 이러한 복제, 중복 등의 오버헤드 없이 리던던트 액세스가능할 수 있다.
도 10a는 지속적 데이터 구조 모듈(1009)의 한 실시예를 도시한다. 지속적 데이터 구조 모듈(1009)은, 소정 실시예에서, 전술된 지속적 데이터 구조 모듈(1009)의 다양한 실시예와 실질적으로 유사할 수 있다. 다른 실시예에서, 지속적 데이터 구조 모듈(1009)은, 저장 관리 모듈(1050), 저장 제어기(1004, 1104, 1304), 및/또는 커밋 에이전트(1020)를 포함하거나, 이들과 통합되거나, 및/또는 이들과 통신할 수 있다.
일반적으로, 지속적 데이터 구조 모듈(1009)은, ACM 사용자(1016) 또는 ACM(1011)에 대한 기타의 클라이언트로부터의 지속적 데이터 구조 요청을, 파일 시스템 모듈(1558) 등의 파일 시스템과 협력하여 서비스한다. ACM 사용자(1016)에 관하여 전술된 바와 같이, 여기서 사용될 때, 클라이언트는, 지속적 데이터 구조 모듈(1009) 및/또는 ACM(1011)을 액세스하거나 이용하도록 구성된, 애플리케이션, 운영 체제(OS), 가상 운영 플랫폼(예를 들어, 하이퍼바이저를 갖춘 OS), 게스트 OS, 데이터베이스 시스템, 프로세스, 쓰레드, 엔티티, 유틸리티, 사용자 등 중에서 하나 이상을 포함할 수 있다. 도시된 실시예에서, 지속적 데이터 구조 모듈(1009)은, 요청 모듈(1902), 할당 모듈(1904), 기입 모듈(1906), 및 디스테이지 모듈(1908)을 포함한다.
지속적 데이터 구조 모듈(1009)은, 소정 실시예에서, ACM 버퍼(1013)가 네이티브 휘발성이든 비휘발성이든 관계없이, ACM 버퍼(1013)에 이용되는 매체의 유형에 관계없이, 데이터가 구조가 ACM 버퍼(1013)에 저장되어 있는지, 비휘발성 메모리 매체(110)에 저장되어 있는지, 또는 ACM 버퍼(1013)와 비휘발성 메모리 매체(110) 양쪽 모두의 조합에 저장되어 있는지에 관계없이, 애플리케이션 또는 기타의 클라이언트가 바이트 어드레싱가능한 ACM 버퍼(1013) 및/또는 비휘발성 메모리 매체(110)에 저장된 지속적 데이터 구조에 액세스하기 위한 인터페이스를 제공한다. 전술된 바와 같이, ACM(1011)의 휘발성 메모리 모듈(예를 들어, ACM 버퍼(1013))은, 바이트 어드레싱가능하고, 제위치 기입(write-in-place)하며, 휘발성인 메모리 모듈이나 디바이스일 수 있는 반면, 비휘발성 메모리 매체(110, 1110, 1502)는, 전술된 바와 같이 블록 디바이스 인터페이스(1520)를 이용하여 블록 어드레싱가능할 수 있다.
메모리 맵(예를 들어, mmap)을 이용하는 등의, ACM(1011)에 액세스하는 상기 방법들 대신에 또는 이에 추가하여, 소정 실시예에서, 지속적 데이터 구조 모듈(1009)은, ACM(1011)을 이용하여, 전술된 바와 같은 API, 공유된 라이브러리, 파일 시스템 명칭공간 또는 기타의 지속적 논리적 식별자 등을 이용하는 지속적 데이터 구조를 애플리케이션이나 기타의 클라이언트에 노출할 수 있다. 지속적 데이터 구조 모듈(1009)은, 소정 실시예에서, 보통은 ACM(1011)의 성능을 저하시키고, 지속적 데이터 구조 등으로의 액세스를 복잡하게 하여, 액세스 시간을 증가시키고, 지연 등을 도입할 수 있는, 하나 이상의 운영 체제 및/또는 커널 층을 바이패스할 수 있다. 지속적 데이터 구조 모듈(1009)은, 표준 판독/기입 API, 파일 시스템 명칭공간, LUN 명칭공간 등의 기존의 I/O 인터페이스 또는 명칭공간을 이용하여 지속적 데이터 구조로의 액세스를 제공하거나 맞춤형 지속적 데이터 구조 인터페이스를 제공할 수 있다.
전술된 바와 같이, 소정 실시예에서, 지속적 데이터 구조 모듈(1009) 및/또는 ACM(1011)은, ACM 사용자(1016) 등의 클라이언트가 고속의, 바이트-어드레싱가능한, 지속적 메모리를 이용하여 지속적 데이터 구조에 액세스할 수 있게 하여, 지속적 데이터 구조에 대한 휘발성 메모리와 비휘발성 저장소의 이점을 결합한다. 도 1에 관하여 전술된 자동-커밋 메모리(1011) 등의, 저장 디바이스(102)의 하드웨어 내부의 자동-커밋 로직은, 소정 실시예에서, ACM(1011)의 자동-커밋 버퍼(1013)에 기입된 데이터 구조에 대한 전력-차단 보호를 제공한다. 지속적 데이터 구조 모듈(1009) 및/또는 그 서브-모듈은, 다양한 실시예에서, 저장 관리 모듈(1050) 등의 호스트 컴퓨팅 디바이스(1014)의 프로세서(1012) 상에서 실행중인 디바이스 드라이버와 적어도 부분적으로 통합되거나, ACM(1011) 및/또는 비휘발성 저장 디바이스(1102)의 하드웨어 제어기(1004, 1104)와, 마이크로코드, 펌웨어, 논리 회로 등으로서 적어도 부분적으로 통합되거나, 디바이스 드라이버와 하드웨어 제어기(1004, 1104) 등 사이에서 분할될 수도 있다.
한 실시예에서, 요청 모듈(1902)은, 전술된 ACM 사용자(1016), 또 다른 모듈, 호스트 컴퓨팅 디바이스(1014) 등의 애플리케이션이나 기타의 클라이언트로부터 지속적 데이터 구조에 대한 요청을 모니터링, 검출, 인터셉트, 또는 기타의 방식으로 수신하도록 구성된다. 요청 모듈(1902)은, API, 공유된 라이브러리, 통신 버스, SML 인터페이스(1019), 또는 다른 인터페이스를 통해 데이터 요청을 수신할 수 있다. 여기서 사용될 때, 데이터 요청은, 오픈, 기입/부가, 동기화, 클로우즈, 맵핑, 및 후술되는 지속적 데이터 구조 할당 요청 등의 데이터 구조에 액세스하는, 저장 요청, 메모리 요청, 파일 요청, 지속적 데이터 구조 요청, 자동-커밋 요청 등을 포함할 수 있다.
요청 모듈(1902)은, 블록 디바이스 인터페이스(1520)를 통한 판독 및 기입 요청 등의, 기존의 또는 표준 I/O 인터페이스를 이용하여 데이터 요청을, 메모리 시멘틱 인터페이스(1522)를 통한 로드 및 저장 명령을, 파일 시스템 모듈(1558), 맞춤형 지속적 데이터 구조 인터페이스 등으로부터의 파일 시스템 요청을 수신할 수 있다. 지속적 데이터 구조 요청 또는 명령을 지원하기 위해 자동-커밋 버퍼(1013)를 이용함으로써, 소정 실시예에서, 요청 모듈(1902)은, ACM(1011), 비휘발성 메모리 매체(110) 등의 기저 계층에 대한 지식을 거의 또는 전혀 갖지 않고, 애플리케이션이나 기타의 클라이언트가 지속적 데이터 구조에 대해 투명하게 ACM(1011)에 액세스하는 것을 허용할 수 있다. 예를 들어, 애플리케이션 또는 기타의 클라이언트는, 지속적 데이터 구조 모듈(1009)이 자동-커밋 버퍼(1013) 또는 비휘발성 메모리 매체(1110)를 이용하여 양쪽의 이점을 모두 받으면서 요청을 서비스하거나 만족시키는지에 대한 지식을 거의 또는 전혀 갖지 않고, 지속적 데이터 구조 요청을 요청 모듈(1902)에 전송할 수 있다. 요청 모듈(1902)은, 기존의 또는 표준 인터페이스를 이용하여 데이터 요청을 인터셉트하거나 기타의 방식으로 수신할 수 있고, LD_PRELOAD를 이용하여 인터페이스를 오버로딩하며, IOCTL 명령을 이용해, 맞춤형 지속적 데이터 구조 인터페이스를 이용하는 등에 의해, 세그먼트화 오류를 인터셉트 또는 포착할 수 있다.
할당 모듈(1904)에 관하여 후술되는 바와 같이, 소정 실시예에서, 지속적 데이터 구조는 지속적 논리적 식별자와 연관될 수 있다. 따라서, 지속적 데이터 구조 요청은 연관된 지속적 데이터 구조의 지속적 논리적 식별자를 포함할 수 있다. 논리적 식별자는, 한 실시예에서, 명칭공간의 멤버이다. 여기서 사용될 때, 명칭공간은, 데이터, 데이터 위치들, 데이터 구조들 등을 인덱싱하거나 식별하는 컨테이너 또는 논리적이거나 물리적인 식별자들의 범위를 포함한다. 전술된 바와 같이, 명칭공간의 예로서는, 파일 시스템 명칭공간, LUN 명칭공간, 논리 주소 공간, 저장 명칭공간, 가상 메모리 명칭공간, 지속적 ACM 명칭공간, 휘발성 메모리 명칭공간, 객체 명칭공간, 네트워크 명칭공간, 전역적 또는 유니버설 명칭공간, BAR 명칭공간 등이 포함될 수 있다.
논리적 식별자는 데이터 구조가 속하는 명칭공간을 나타낼 수 있다. 한 실시예에서, 논리적 식별자는, 파일 명칭 또는 기타의 파일 식별자 및/또는 파일 시스템 명칭공간으로부터의 오프셋, LUN 명칭공간으로부터의 LUN ID 및 오프셋, 저장 명칭공간으로부터 LBA 또는 LBA 범위, 가상 메모리 명칭공간으로부터의 하나 이상의 가상 메모리 주소, 지속적 ACM 명칭공간으로부터의 ACM 주소, 호스트 디바이스(1014)의 휘발성 메모리 명칭공간으로부터의 휘발성 메모리 주소, 객체 식별자, 네트워크 주소, GUID, UUID 등, BAR 명칭공간으로부터의 BAR 주소 또는 주소 범위, 또는 다른 논리적 식별자를 포함할 수 있다. 추가 실시예에서, 논리적 식별자는, 디렉토리, 파일 경로, 디바이스 식별자 등의, 명칭공간에 대한 라벨이나 명칭을 포함할 수 있다. 또 다른 실시예에서, 논리적 식별자는 데이터 구조에 대한 물리적 주소나 장소를 포함할 수 있다. 전술된 바와 같이, 소정의 명칭공간, 및 그에 따라 명칭공간 식별자는, 임시적이거나 휘발성일 수 있고, 재시작 이벤트 후에 ACM 사용자(1016)나 기타의 클라이언트에게 이용가능하지 않을 수도 있다. 파일 시스템 명칭공간, LUN 명칭공간, 지속적 ACM 명칭공간 등의, 다른 명칭공간, 및 연관된 논리적 식별자는 지속적일 수 있고, 지속적 명칭공간과 연관된 데이터 구조는, 재시작 이벤트 후에 지속적 논리적 식별자를 이용하여 ACM 사용자(1016)나 기타의 클라이언트에 액세스가능할 수 있다.
요청 모듈(1902)은, 한 실시예에서 지속적 데이터 구조를 오픈하거나 초기화하기 위해 클라이언트로부터의 오픈 요청을 수신할 수 있다. 추가 실시예에서, 요청 모듈(1902)은 클라이언트로부터의 기입 요청(예를 들어, 트랜잭션 로그 데이터 구조의 경우, 추가 요청)을 수신하여 ACM 버퍼(1013) 등을 이용해 지속적 데이터 구조에 데이터를 기입 및/또는 추가할 수 있다. 요청 모듈(1902)은, 또 다른 실시예에서, 동기화 요청, 디스테이지 요청 등을 수신하여, ACM 버퍼(1013)로부터 비휘발성 메모리 매체(110)로의 데이터 구조의 복사, 디스테이징, 전송, 마이그레이팅, 또는 동기화를 트리거할 수 있다. 요청 모듈(1902)은, 한 실시예에서, 클라이언트로부터의 클로우즈 요청을 수신하여, 지속적 데이터 구조를, 클로우즈, 록, 삭제, 클리어, 또는 기타의 방식으로 종료할 수 있다. 추가 실시예에서, 요청 모듈(1902)은 ACM(1011)의 한 영역(예를 들어, 하나 이상의 ACM 버퍼(1013), 페이지들, 캐시 라인들, 메모리 장소, 메모리 장소들의 범위 등)을 호스트 디바이스(1014)의 클라이언트의 가상 메모리로 맵핑하라는 맵 요청을 수신할 수 있다. 요청 모듈(1902)은, 또 다른 실시예에서, 데이터 구조, 데이터 구조의 일부 등을 저장하기 위한 ACM(1011)의 하나 이상의 영역을 할당하라는 할당 요청을 수신할 수 있다.
요청 모듈(1902)은, 소정 실시예에서, 사용자-공간에서 지속적 데이터 구조 요청을 수신할 수 있다. 여기서 사용될 때, 커널-공간은, 호스트 컴퓨팅 디바이스(1014)의 메모리(예를 들어, 휘발성 메모리, 가상 메모리, 메인 메모리)의 영역; 한 세트의 특권, 라이브러리, 또는 함수; 실행의 레벨; 또는 커널, 운영 체제, 또는 기타의 특권의 또는 신뢰받는 프로세스나 애플리케이션을 위해 예약된 것 등을 포함할 수 있다. 사용자-공간은, 여기서 사용될 때, 호스트 컴퓨팅 디바이스(1014)의 메모리(예를 들어, 휘발성 메모리, 가상 메모리, 메인 메모리)의 영역; 한 세트의 특권, 라이브러리, 또는 함수; 실행의 레벨; 또는 비신뢰받는, 비특권의 프로세스나 애플리케이션에게 이용가능한 것 등을 포함할 수 있다.
커널 공간에 대한 액세스 제어 제약, 특권 요건 등으로 인해, 커널-공간에서 ACM(1011)에 대한 디바이스 드라이버, 라이브러리, API 등을 제공하는 것은 사용자-공간에서보다 큰 지연을 가질 수 있다. 또한, 커널이나 운영 체제의 저장 스택의 이용은, 소정 실시예에서, 추가 지연을 도입할 수 있다. 운영 체제 또는 커널 저장 스택은, 여기서 사용될 때, 디바이스 드라이버, 변환 층, 파일 시스템, 캐시, 및/또는 데이터 저장 디바이스에 액세스하기 위해 커널-공간에서 제공된 인터페이스들 중 하나 이상의 층을 포함할 수 있다. 지속적 데이터 구조 모듈(1009)은, 소정 실시예에서, 운영 체제 또는 커널 저장 스택의 하나 이상의 층을 바이패스 및/또는 교체함으로써 지속적 데이터 구조 및/또는 ACM(1011)으로의 직접적 액세스를 제공하여, ACM 버퍼(1013) 및/또는 비휘발성 메모리 매체(110)와 사용자-공간 등의 사이에서 직접 데이터 구조를 판독 및 기입할 수 있다. 추가 실시예에서, 요청 모듈(1902)은, 사용자-공간에서 사용자-공간 애플리케이션이나 기타의 클라이언트로부터의, 및 커널-공간에서 커널-공간 애플리케이션이나 기타의 클라이언트로부터의 지속적 데이터 구조 요청을 수신할 수 있다.
한 실시예에서, 할당 모듈(1904)은, 새로운 지속적 데이터 구조(예를 들어, 지속적 트랜잭션 로그)를 초기화 또는 오픈하도록 구성될 수 있다. 예를 들어, 할당 모듈(1904)은, 오픈 요청 등의, 요청 모듈(1902)에 의해 수신된 요청에 응답하여, 지속적 데이터 구조를 초기화 또는 오픈할 수 있다. 할당 모듈(1904)은, 소정 실시예에서, 논리적 식별자를 오픈된 또는 초기화된 지속적 데이터 구조와 연관시킬 수 있다. 예를 들어, 할당 모듈(1904)은 지속적 데이터 구조에 파일명칭을 할당하기 위해 파일 시스템 모듈(1558)과 협력할 수 있고, LBA 등의 논리적 식별자들의 범위를 지속적 데이터 구조에 할당하기 위해 저장 관리 모듈(1050)과 협력할 수 있고, 지속적 데이터 구조에 지속적 ACM 식별자를 할당하기 위해 자동-커밋 메모리 모듈(1011)과 협력할 수 있는 등등이다. 소정 실시예에서, 요청 모듈(1902)은, 지속적 데이터 구조에 대한 파일명칭, LBA들의 범위, LUN ID 등의 논리적 식별자를 오픈 요청 등에 대한 파라미터로서 수신할 수 있다. 추가 실시예에서, 할당 모듈(1904), 파일 시스템 모듈(1558), 저장 관리 모듈(1050), 자동-커밋 메모리 모듈(1011) 등은, 다음으로 이용가능한 논리적 식별자를 지속적 데이터 구조에 할당할 수 있거나 또 다른 미리 결정된 또는 공지된 방법을 이용하여 논리적 식별자를 할당할 수 있다.
할당 모듈(1904)은, 한 실시예에서, 지속적 데이터 구조를 저장하기 위한, 자동-커밋 메모리 모듈(1011)의 메모리의 영역을 할당할 수 있다. 여기서 사용될 때, 메모리의 영역은, 메모리 페이지, 메모리 버퍼, 메모리 주소들의 범위, 메모리 요소, 메모리 모듈, 및/또는 자동-커밋 메모리 모듈(1011)에게 이용가능한 하나 이상의 ACM 버퍼(1013)의 또 다른 서브셋을 포함할 수 있다. 한 실시예에서, 할당 모듈(1904)은 각각의 요청된 지속적 데이터 구조에 대해 ACM 버퍼(1013)의 메모리의 한 영역을 할당할 수 있다. 추가 실시예에서, 할당 모듈(1904)은 자동-커밋 메모리 모듈(1011)과 협력하여 ACM 버퍼(1013)의 가용 메모리를 동적으로 할당할 수 있어서, 지속적 데이터 구조들이 액세스될 때, 상이한 지속적 데이터 구조들에 대한 액세스의 빈도, 가장 최근의 액세스, 액세스 이력, 입력 레이트 또는 기입 레이트 등에 기초하여, 지속적 데이터 구조들에 메모리를 할당한다.
한 실시예에서, 기입 모듈(1906)은, 지속적 데이터 구조에 기입, 업데이트, 또는 부가하기 위한, 클라이언트로부터의 입력 데이터를, 수신, 회수, 전송, 또는 기타의 방식으로 처리하도록 구성된다. 예를 들어, 요청 모듈(1902)에 의해 수신된 기입 요청 또는 부가 요청은, 기입 모듈(1906)이 데이터를 ACM 버퍼(1013)에 기입하기 위해 이용할 수 있는, 요청에 의해 식별된 지속적 데이터 구조에 기입 또는 부가될 데이터를 포함하거나 참조할 수 있다. 한 실시예에서, 기입 모듈(1906)은 기입 요청의 데이터를 ACM 버퍼(1013) 자체에 기입할 수 있다. 또 다른 실시예에서, 기입 모듈(1906)은 ACM 버퍼(1013)의 하나 이상의 영역을 모니터링하거나, 클라이언트가 데이터를 ACM 버퍼(1013)의 하나 이상의 영역에 기입했다는 경고/통보 등을 수신할 수 있다.
지속적 데이터 구조의 유형에 따라, 상이한 데이터 동작들이 수락가능하거나 지원될 수 있다. 예를 들어, 소정 실시예에서, 지속적 트랜잭션 로그는 엄격하게 부가 전용일 수 있는 반면, 지속적 링크된-리스트 내의 엔트리들은 오버라이트될 수 있는 등이다. 한 실시예에서, 기입 요청은, 지속적 데이터 구조에서 연관된 데이터가 어디에 (예를 들어, 어느 노드, 필드, 행, 열, 엔트리 등에) 기입되려고 하는지를 나타낼 수 있다. 다른 실시예에서, 데이터에 대한 장소는, 부가-전용 지속적 트랜잭션 로그 등의, 지속적 데이터 구조의 유형에 대한 규칙, 정의, 또는 스키마(schema)에 의해 정의될 수 있다. 기입 요청, 부가 요청 등은, 한 실시예에서, 연관된 기입 데이터와 함께 기입될 데이터 구조 메타데이터(예를 들어, 타임스탬프, 시퀀스 번호, 라벨, 식별자, 포인터 등)를 포함할 수 있다. 또 다른 실시예에서, 기입 모듈(1906)은, 지속적 데이터 구조의 상태에 기초하여, 메타데이터 모듈(1912)로부터의 지속적 데이터 구조에 대한 메타데이터에 기초하여, 지속적 데이터 구조에 대한 포인터, 시퀀스 번호, 또는 식별자를 증가시킴으로써 등에 의해, 연관된 기입 데이터와 함께 기입될 데이터 구조 메타데이터를 판정할 수 있다.
기입 모듈(1906)은, 소정 실시예에서, ACM 버퍼(1013)의 영역에 데이터를 기입 또는 저장하여, 고장 조건이나 재시작 이벤트가 발생한다면 데이터의 지속성을 보증 또는 보장함으로써, 데이터 구조에 데이터를 기입하거나, 데이터 구조에 데이터를 저장하거나, 데이터 구조에 데이터를 부가하는 등을 할 수 있다. 소정 실시예에서, 지속적 데이터 구조가 ACM 버퍼(1013) 내의 메모리 영역을 할당받지 않았다면, 기입 모듈(1906)은 지속적 데이터 구조의 데이터를 비휘발성 메모리 매체(110, 1110, 1502)에 기입할 수 있다. 다른 실시예에서, 기입 모듈(1906)은, 지속적 데이터 구조에 대한 기입 요청, 부가 요청 등에 응답하여, 할당 모듈(1904) 및/또는 자동-커밋 메모리 모듈(1011)과 협력하여 ACM 버퍼(1013)의 메모리 영역을 지속적 데이터 구조에 할당할 수 있다.
기입 모듈(1906)은, 메타데이터 모듈(1912), 파일 시스템 모듈(1558), 저장 관리 모듈(1050), 및/또는 자동-커밋 메모리 모듈(1011)과 협력하여, 메타데이터 모듈(1912)에 관하여 이하에서 설명되는 바와 같이, 업데이트된 지속적 데이터 구조의 하나 이상의 논리적 식별자에 대한 논리적-대-물리적 맵핑, 파일 시스템 메타데이터 등을 업데이트할 수 있다. 예를 들어, 지속적 트랜잭션 로그에 대한 부가 요청에 응답하여, 기입 모듈(1906) 및/또는 메타데이터 모듈(1912)은, 파일 시스템 모듈(1558)에 의해 지속적 트랜잭션 로그의 파일과 연관된 파일 길이를 연장하고, 업데이트된 데이터에 대한 LBA들의 범위를 데이터를 저장하는 ACM 버퍼(1013) 내의 장소에 맵핑하는 논리-대-물리 맵핑 구조에 엔트리를 추가하고, 지속적 트랜잭션 로그의 부가 지점을 식별하는 포인터를 증가시키는 등을 할 수 있다.
ACM 버퍼(1013)의 비교적 작은 양 또는 용량으로도, 지속적 데이터 구조에 기입하는 애플리케이션이나 기타의 클라이언트에게 ACM 버퍼(1013)의 고속 기입 시간을 제공하기 위해, 한 실시예에서, 기입 모듈(1906)은 후술되는 디스테이지 모듈(1908)과 협력하여 ACM 버퍼(1013)의 메모리 영역들을, 링 버퍼, 핑-퐁 버퍼, 롤링 버퍼, 슬라이딩 윈도우 등으로서 이용함으로써, 디스테이지 모듈(1908)이 기입되고 있지 않는 메모리 영역으로부터 데이터를 디스테이징, 복사, 또는 전송하는 동안, 지속적 데이터 구조의 데이터를 기입하기 위한 ACM 버퍼(1013)의 상이한 메모리 영역들 사이에서 교대할 수 있다. 이런 방식으로, 기입 모듈(1906)은, 디스테이지 모듈(1908)이 이전에 기입된 데이터를 이미 디스테이징, 복사, 전송, 커밋, 또는 기타의 방식으로 지속시킨 이후에만, ACM 버퍼(1013)의 메모리의 영역을 재사용 또는 오버라이트할 수 있어서, 여전히 지속성을 보장하면서 ACM 버퍼(1013)의 효율적인 이용을 제공한다.
소정 실시예에서, 기입 모듈(1906)은, 디스테이지 모듈(1908)이 데이터를 비휘발성 메모리 매체(110, 1110, 1502)에 디스테이징, 복사, 또는 전송하는 레이트와는 상이한 레이트로, 클라이언트로부터 데이터를 수신하거나 및/또는 데이터를 기입할 수 있다. 여기서 사용될 때, 입력 레이트는, 기입 모듈(1906)이 하나 이상의 지속적 데이터 구조에 대한 데이터를 수신 및/또는 기입하는 레이트를 포함한다. 전송 레이트는, 여기서 사용될 때, 디스테이지 모듈(1908)이 하나 이상의 지속적 데이터 구조의 데이터를 비휘발성 메모리 매체(110, 1110, 1502)에 전송, 복사, 클리닝(clean), 이동, 동기화, 또는 기타의 방식으로 디스테이징하는 레이트를 포함한다. 기입 모듈(1906)은, 한 실시예에서, 디스테이지 모듈(1908)과 협력하여, 지속적 데이터 구조의 전송 레이트에 기초해 지속적 데이터 구조에 대한 입력 레이트를 제한하여, 기입 모듈(1906)이 지속적 데이터 구조에 할당된 메모리의 영역을 오버런(overrun)하지 않게 한다.
입력 레이트 및 전송 레이트는 일정하지 않을 수 있기 때문에, 소정 실시예에서, 기입 모듈(1906)은 입력 레이트를 제한하여, 미리정의된 기간에 걸쳐, 지속적 데이터 구조에 대한 입력 레이트가 전송 레이트 이하가 되게 할 수 있다. 그러나, 입력 레이트는, 소정 실시예에서, 기입 모듈(1906)이 지속적 데이터 구조에 할당된 메모리의 영역을 오버런하지 않는 한, 소정의 시점에서 전송 레이트를 초과할 수 있다. 예를 들어, 기입 모듈(1906)은, 순간 전송 레이트, 샘플링된 전송 레이트의 이동 평균, 할당된 메모리 영역에 남아 있는 메모리의 양 등에 기초하여, 입력 레이트를 제한할 수 있다. 기입 모듈(1906)은, 다양한 실시예에서, 데이터를 기입하는 클라이언트 프로세스를 차단, 지연, 쓰로틀링, 통제, 휴면, 또는 기타의 방식으로 제한하는 등에 의해 입력 레이트를 제한할 수 있다.
한 실시예에서, 디스테이지 모듈(1908)은, 기입 모듈(1906)이 전술된 바와 같이 ACM 버퍼(1013)에 기입했던 지속적 데이터 구조 데이터 등의, ACM 버퍼(1013)로부터의 데이터를 비휘발성 메모리 매체(110, 1110, 1502)에 디스테이징하도록 구성된다. 디스테이지 모듈(1908)은, 소정 실시예에서, 새로운 데이터, 업데이트된 데이터 등의, 비휘발성 메모리 매체(110, 1110, 1502)가 아직 저장하지 않은 ACM 버퍼(1013)의 데이터를 클리닝 또는 디스테이징한다. LBA, 물리적 주소 등의, 비휘발성 메모리 매체(110, 1110, 1502) 내의 데이터를 위한 장소는, 전술된 바와 같이 ACM 메타데이터(1015) 또는 기타의 트리거링된 커밋 메타데이터에 의해 표시될 수 있다. 디스테이지 모듈(1908)은, 소정 실시예에서, ACM 메타데이터(1015), 더티 데이터 비트맵, 메타데이터 모듈(1912)로부터의 지속적 데이터 구조 메타데이터 등에 기초하여, ACM 버퍼(1013)로부터의 데이터를 비휘발성 메모리 매체(110, 1110, 1502) 그 자체에 복사, 전송, 디스테이징, 이동, 또는 기입한다.
추가 실시예에서, 디스테이지 모듈(1908)은, 데이터에 대해 ACM 메타데이터(1015)에 의해 식별되거나 정의된 데이터에 대한 커밋 동작을 수행하도록 자동-커밋 메모리 모듈(1011), 커밋 관리 장치(1122), 커밋 에이전트(1020) 등을 트리거함으로써, 데이터가 ACM 버퍼(1013)로부터 비휘발성 메모리 매체(110, 1110, 1502)에 복사, 전송, 디스테이징, 이동, 또는 기입되게 할 수 있다. 예를 들어, 전술된 바와 같이, 자동-커밋 버퍼(1013)는, 저장된 데이터를 보존하거나 지속시키기 위해 커밋 동작을 수행하도록 ACM 메타데이터(1015)로 무장될 수 있다. 디스테이지 모듈(1908)은, 자동-커밋 버퍼(1013)로부터 비휘발성 메모리 매체(110, 1110, 1502)로 데이터를 디스테이징, 커밋, 또는 전송하기 위해 이 사전-무장을 이용할 수 있다. 디스테이지 모듈(1908)은, 소정 실시예에서, 자동-커밋 메모리 모듈(1011), 커밋 관리 장치(1122), 커밋 에이전트(1020) 등을 포함하거나, 이들과 협력하거나, 이들과 통합될 수 있다.
기입 모듈(1906)은, 소정 실시예에서, 포그라운드에서 데이터를 ACM 버퍼(1013)에 기입하거나 데이터가 ACM 버퍼(1013)에 기입되는 허용하는 포그라운드 프로세스로서 동작할 수 있지만, 디스테이지 모듈(1908)은, 소정 실시예에서, 백그라운드 프로세스서 동작할 수 있다. 예를 들어, 한 실시예에서, 디스테이지 모듈(1908)은, 시스템 다운시간 동안에, 낮은 트래픽 기간 동안에 등등에, 데이터를 주기적으로, 천천히, 디스테이징, 복사, 전송, 이동 또는 동기화할 수 있다. 한 실시예에서, 디스테이지 모듈(1908)은, 트리거에 응답하여 데이터를 디스테이징, 복사, 전송, 이동, 또는 동기화할 수 있다. 트리거는, ACM 메타데이터(1015)에 관하여 전술된 커밋 동작에 대한 트리거와 동일하거나 실질적으로 유사할 수 있다. 추가 실시예에서, 기입 모듈(1906)은, 입력 레이트에 기초해 디스테이지 모듈(1908)을 트리거하여, 디스테이지 모듈(1908)의 전송 레이트를 제어할 수 있다.
디스테이지 모듈(1908)은, 또 다른 실시예에서, 미리정의된 임계치를 초과하는 ACM 버퍼(1013)의 영역에 저장된 지속적 데이터 구조의 데이터량에 응답하여 트리거링될 수 있다. 예를 들어, ACM 버퍼(1013)가 4 KB 페이지들로 조직화된다면, 디스테이지 모듈(1908)은, 기입 모듈(1906)이 4 KB 페이지를 채우는 것에 응답하여 4 KB 페이지로부터 비휘발성 메모리 매체(110, 1110, 1502)로 데이터를 디스테이징, 복사, 전송, 또는 이동하도록 트리거링될 수 있다. 또 다른 실시예에서, 디스테이지 모듈(1908)은, 기입 모듈(1906)이 비휘발성 메모리 매체(1906)의 아키텍쳐 등에 기초하여 비휘발성 메모리 매체(1906)의 페이지 크기나 기타의 영역 크기와 동일한 데이터량을 기입하는 것에 응답하여 트리거링될 수도 있다. 추가 실시예에서, 디스테이지 모듈(1908)은, 이전 트리거 이후의 경과된 기간 등에 응답하여, 주기적으로 트리거링될 수도 있다. 한 실시예에서, 디스테이지 모듈(1908)은, 기입 모듈(1906), 자동-커밋 메모리 모듈(1011), 또는 다른 모듈 등의, ACM 버퍼(1013)의 메모리와 연관된 모니터링 디바이스나 모니터링 모듈에 의해 트리거링될 수도 있다. 추가 실시예에서, 디스테이지 모듈(1908)은, 요청 모듈(1902)이 클라이언트로부터 수신하는 동기화 요청, 디스테이지 요청 등에 의해 트리거링될 수도 있다. 디스테이지 모듈(1908)은, 추가 실시예에서, 또 다른 판정된 상태 변경, 하나 이상의 ACM 버퍼(1013)의 메모리의 조건, 인자, 또는 속성 변경에 의해 트리거링될 수도 있다.
디스테이지 모듈(1908)은, 한 실시예에서, ACM 버퍼(1013)로부터의 지속적 데이터 구조의 데이터를, 데이터가 ACM 버퍼(1013)에 더 이상 저장되지 않게 하는 방식으로 복사, 전송, 이동, 또는 디스테이징한다. 예를 들어, 디스테이지 모듈(1908)은, 비휘발성 메모리 매체(110, 1110, 1502)에 데이터를 저장하는 것에 응답하여 ACM 버퍼(1013)로부터 데이터를 소거 또는 삭제할 수 있다. 또 다른 실시예에서, 디스테이지 모듈(1908)은, 데이터의 사본이 ACM 버퍼(1013)에 남아 있게 하는 방식으로 ACM 버퍼(1013)로부터 데이터를 복사할 수 있다. 예를 들어, 디스테이지 모듈(1908)은, 일단 디스테이지 모듈(1908)이 비휘발성 메모리 매체(110, 1110, 1502)에 데이터를 저장했다면, 나중에, ACM 버퍼(1013)의 용량이 필요할 때, 기입 모듈(1906)이 ACM 버퍼(1013) 내의 데이터를 오버라이트하는 것을 허용할 수 있다.
한 실시예에서, 디스테이지 모듈(1908)은, ACM 버퍼(1013)의 메모리 영역으로부터 비휘발성 메모리 매체(110, 1110, 1502)로 데이터를, 데이터와 지속적 데이터 구조의 논리적 식별자와의 연관을 보존하는 방식으로, 복사, 디스테이징, 전송, 또는 기입할 수 있다. 예를 들어, 디스테이지 모듈(1908)은, 파일명칭, 논리적 주소들의 범위, 또는 다른 논리적 식별자를 비휘발성 메모리 매체(110, 1110, 1502)에 데이터와 함께 기입할 수 있고, 논리-대-물리 맵핑 구조를 데이터에 대한 새로운 물리적 장소로 업데이트할 수 있고, 데이터에 대한 새로운 물리적 장소를 메타데이터 모듈(1912)에 제공할 수 있고, 데이터가 비휘발성 메모리 매체(110, 1110, 1502)에 저장되어 있다는 것을 나타내는 파일 시스템 메타데이터를 업데이트할 수 있는 등등이다. 데이터가 지속적 논리적 식별자와 연관되어 머물도록 보장함으로써, 소정 실시예에서, 디스테이지 모듈(1908)은, 지속적 데이터 구조가 지속적 논리적 식별자를 이용하여 클라이언트에 액세스가능하게 머무는 것을 보장한다.
소정 실시예에서, 디스테이지 모듈(1908)은, 데이터의 일부가 비휘발성 메모리 매체(110, 1110, 1502)에 이미 저장되어 있을 수도 있는지에 관계없이 데이터의 전체 범위 또는 영역을 전송 또는 디스테이징한다. 또 다른 실시예에서, 디스테이지 모듈(1908)은, 비휘발성 메모리 매체(110, 1110, 1502)가 이미 저장하고 있는 클린 데이터(clean data)를 전송하거나 디스테이징하지 않고, 더티 데이터, 즉, 비휘발성 메모리 매체(110, 1110, 1502)에 아직 저장되지 않은 데이터만을 전송하거나 디스테이징할 수 있다. 소정 실시예에서, 디스테이지 모듈(1908)은, 자동-커밋 버퍼(1013)로부터의 데이터를, 하나 이상의 자동-커밋 버퍼(1013)보다 큰 용량, 느린 응답 시간 등을 가질 수도 있는, 비휘발성 메모리 매체(110, 1110, 1502) 등의 또 다른 장소에 전송, 복사, 또는 디스테이징한다.
디스테이지 모듈(1908)은, 동기화 또는 디스테이지 요청에 기초하여, ACM 메타데이터(1015) 등에 기초하여, 지속적 데이터 구조의 데이터에 대한 목적지가 비휘발성 저장 디바이스(1102) 내에 있는지, 비휘발성 메모리 매체(110, 1110, 1502) 등에 있는지를 판정할 수 있고, 비휘발성 저장 디바이스(1102) 내에서 내부적으로 데이터를 전송하거나 디스테이징할 수 있다. 예를 들어, 디스테이지 모듈(1908)은, 동기화 또는 디스테이지 요청의 데이터의 목적지 명칭공간 또는 주소 공간이 비휘발성 메모리 매체(110, 1110, 1502) 등의 비휘발성 저장 디바이스(1102)와 연관되어 있는지를 동기화 또는 디스테이지 요청의 데이터에 대한 목적지 논리적 식별자에 기초하여 판정할 수 있고, 목적지 명칭공간 또는 주소 공간이 비휘발성 저장 디바이스(1102)와 연관되어 있다면(예를 들어, 데이터는, 비휘발성 저장 디바이스(1102) 내에서 ACM(1011, 1111) 내의 또 다른 장소에, 비휘발성 메모리 매체(110, 1110, 1502) 등에 전송, 복사, 또는 이동 중에 있다면), 비휘발성 저장 디바이스(1102) 내에서 내부적으로 ACM 버퍼(1013)로부터 데이터를 전송 또는 디스테이징할 수 있다.
동기화 또는 디스테이지 요청의 데이터에 대한 목적지, ACM 메타데이터(1015)에 의해 표시된 커밋 장소 등이 비휘발성 저장 디바이스(1102)에 위치해 있지 않다면, 디스테이지 모듈(1908)은, PIO 동작, DMA 동작, 제3자 DMA 동작, RDMA 동작, 블록 디바이스 인터페이스, 운영 체제 저장 스택 등을 이용하여, ACM(1011, 1111)으로부터 비휘발성 저장 디바이스(1102) 외부의 장소에 데이터를 전송 또는 디스테이징함으로써, 데이터를 호스트 디바이스(1014)의 프로세서(1012) 등을 이용해 통신 버스(1040)를 통해 전송한다. ACM(1011, 1111)의 하나 이상의 자동-커밋 버퍼(1013)로부터 ACM(1011, 1111)으로의 디스테이징 요청의 데이터를 전송 또는 디스테이징하는 것에 응답하여, 디스테이지 모듈(1908)은, ACM(1011)으로부터의 데이터를 삭제, 이동, 트림(trim), 무효화, 소거 또는 기타의 방식으로 클리어하고 하나 이상의 자동-커밋 버퍼(1013) 내의 데이터와 연관된 저장 용량을 재사용할 수 있다.
한 실시예에서, ACM(1011)으로부터의 데이터를 전송하거나 디스테이징하기 이전에, 디스테이지 모듈(1908)은 데이터의 일관성(즉, 데이터가 호스트 디바이스(1014)의 프로세서 복합체(1012)로부터 하나 이상의 자동-커밋 버퍼(1013)로 플러시된다는 것)을 보장할 수 있다. 예를 들어, 디스테이지 모듈(1908)은, 프로세서 복합체(1012)로부터의 데이터를 하나 이상의 자동-커밋 버퍼(1013)에 플러시하는 직렬화 명령을 내리고, 비휘발성 저장 디바이스(1102)와 연관된 프로세서 복합체(1012) 내에 디스테이지 식별자 또는 기타의 마커를 배치하고(예를 들어, 비휘발성 저장 디바이스(1102) 내의 제어 상태 레지스터나 기타의 미리정의된 장소에 맵핑된 가상 메모리 주소에 디스테이지 식별자 또는 기타의 마커를 저장), 프로세서 복합체(1012)로부터 디스테이지 식별자나 기타의 마커를 플러시하는 제2 직렬화 명령을 내릴 수 있는 등등이다. 디스테이지 모듈(1908)은, 제1 직렬화 명령의 성공적 완료와 디스테이징될 데이터의 일관성을 나타내는, 비휘발성 저장 디바이스(1102) 내의 디스테이지 식별자나 기타의 마커의 수신에 응답하여 ACM 버퍼(1013)로부터 목적지 장소에 데이터를 전송, 디스테이징, 또는 기타의 방식으로 기입할 수 있다.
기입 모듈(1906)에 관하여 전술된 바와 같이, 디스테이지 모듈(1908)과 기입 모듈(1906)은 협력하여 ACM 버퍼(1013)의 2개 이상의 영역을, 링 버퍼, 핑-퐁 버퍼, 롤링 버퍼, 슬라이딩 윈도우 등으로서 이용할 수 있어서, 디스테이지 모듈(1908)이 현재 데이터를 디스테이징하고 있지 않은 메모리 영역에 기입 모듈(1906)이 데이터를 기입하는 동안 지속적 데이터 구조의 데이터를 디스테이징하기 위한 ACM 버퍼(1013)의 상이한 메모리 영역들 사이에서 교대함으로써, 지속성을 여전히 보장하면서 ACM 버퍼(1013)를 효율적으로 이용한다.
디스테이지 모듈(1908)은, 전술된 바와 같이 기입 모듈(1906)과 협력하여, 지속적 데이터 구조, ACM 버퍼(1013) 등에 대한 적어도 평균적인 또는 시간에 따른 전송 레이트가, 지속적 데이터 구조, ACM 버퍼(1013) 등에 대한 입력 레이트와 정합하거나 이를 초과하는 것을 보장할 수 있다. 기입 모듈(1906)은, 다양한 실시예에서, 전술된 바와 같이 입력 레이트를 제한할 수 있다. 소정 실시예에서, 기입 모듈(1906)이 입력 레이트를 제한하는 것에 추가하여 또는 그 대신에, 디스테이지 모듈(1908)은, 지속적 데이터 구조에 대한 입력 레이트의 증가 등에 응답하여, 지속적 데이터 구조에 대한 전송 레이트를 증가시킬 수 있다. 기입 모듈(1906) 및/또는 디스테이지 모듈(1908)은, 개별 지속적 데이터 구조에 대한, 한 세트의 지속적 데이터 구조에 대한, ACM 버퍼(1013)의 하나 이상의 영역에 대한, 전체의 ACM(1011)에 대한, 또는 다른 입도에서의, 입력 레이트 및/또는 전송 레이트를 관리할 수 있다.
한 실시예에서, 디스테이지 모듈(1908)은, 단일의 트랜잭션에서 ACM 버퍼(1013)로부터 비휘발성 메모리 매체(110, 1110, 1502)로 한번에 복사되거나, 전송되거나, 디스테이징되는 데이터의 양 또는 크기를 증가시킴으로써 전송 레이트를 증가시킬 수 있다. 예를 들어, 디스테이지 모듈(1908)은, 초기에, 한 번에 한 페이지씩 데이터를 복사, 전송, 또는 디스테이징할 수 있고, 증가하는 입력 레이트에 응답하여 시간에 따라, 데이터의 양 또는 크기를 2 페이지, 3 페이지, 4 페이지 등으로 증가시킬 수 있다. 추가 실시예에서, 디스테이지 모듈(1908)은, 데이터를 복사, 전송 또는 디스테이징하기 위해 한 번에 실행되는 병렬 디스테이지 프로세스 또는 쓰레드의 수를 증가시킴으로써 전송 레이트를 증가시킬 수 있다. 소정 실시예에서, 디스테이지 모듈(1908)은, 전송 레이트를 증가시키기 위해 병렬 디스테이지 프로세스 또는 쓰레드의 수와 전송 크기 양쪽 모두를 증가시킬 수 있다.
디스테이지 모듈(1908)이 전송 레이트를 증가시키는 방식은, 소정 실시예에서, 디스테이지 모듈(1908)이 추적 또는 정합하려고 하는 입력 레이트의 크기에 의존할 수 있다. 예를 들어, 전송 동작당 비휘발성 메모리 매체(110, 1110, 1502)에 복사되는 데이터의 크기량을 증가시키는 것은, 임계 입력 레이트, 전송 레이트 또는 디스테이지 크기 아래의 디스테이지 모듈(1908)에 대해서는 더 효과적일 수 있지만, 데이터를 복사하는 병렬 전송 프로세스의 수를 증가시키는 것은, 임계 입력 레이트, 전송 레이트, 또는 디스테이지 크기 위의 디스테이지 모듈(1908)에 대해 더 효과적일 수 있다.
소정 실시예에서, 디스테이지 모듈(1908) 및/또는 기입 모듈(1906)은 입력 레이트 및/또는 전송 레이트를 관리하여, 적어도 미리정의된 양의 잉여 또는 여분 메모리 용량이 지속적 데이터 구조를 위해 남아 있도록 함으로써, 기입 모듈(1906)과 디스테이징 모듈(1908) 사이의 패딩 또는 버퍼로서 역할한다. 예를 들어, 기입 모듈(1906) 및/또는 디스테이지 모듈(1908)은 입력 레이트와 전송 레이트를 관리하여, 할당된 메모리 용량의 약 1/3이 패딩 또는 버퍼로서 남아 있는 한편, 할당된 메모리 용량의 약 1/3은 기입 모듈(1906)에 의해 이용되고 할당된 메모리 용량의 1/3은 디스테이지 모듈(1908)에 의해 이용되도록 한다. ACM 버퍼(1013), 비휘발성 메모리 매체(110, 1110, 1502) 등의 아키텍쳐 및 전송 속도에 따라, 다른 비율들이 다소 최적일 수도 있고 기입 모듈(1906) 및/또는 디스테이지 모듈(1908)은 그에 따라 입력 레이트 및/또는 전송 레이트를 관리할 수 있다.
소정 실시예에서, 지속적 데이터 구조에 대한 입력 레이트 및/또는 전송 레이트를 관리하는 것 대신에, 디스테이지 모듈(1908)은, 소유자나 기타의 클라이언트가 동기화 요청을 요청 모듈(1902)에 내릴 때까지, 지속적 데이터 구조가 동기화가 어긋나거나 트랜잭션적으로 불일치하게 되는 것을 허용할 수 있다. 이러한 실시예에서, 디스테이지 모듈(1908)은 또한, 지속적 데이터 구조의 소유자 또는 클라이언트가 동기화 요청을 전송하지 않은 경우에도, ACM 버퍼(1013)의 가용 저장 용량을 관리하기 위해 데이터를 디스테이징, 복사, 또는 전송할 수도 있다. 이런 방식으로, 소정 실시예에서, 애플리케이션 또는 기타의 클라이언트는, 기입 모듈(1906)이 입력 레이트를 제한하지 않고도, ACM 버퍼(1013)의 아키텍쳐나 물리적 제약에 이르기까지, 원하는 만큼 빨리 지속적 데이터 구조에 데이터를 기입할 수 있고, 단순히 동기화 요청을 요청 모듈(1902)에 보내 원하는대로 지속적 데이터 구조를 동기화하거나 체크포인팅할 수 있다.
도 10b는 지속적 데이터 구조 모듈(1009)의 또 다른 실시예를 도시한다. 한 실시예에서, 지속적 데이터 구조 모듈(1009)은 전술된 지속적 데이터 구조 모듈(1009)들 중 하나 이상과 실질적으로 유사할 수 있다. 도시된 실시예에서, 도 10b의 지속적 데이터 구조 모듈(1009)은, 요청 모듈(1902), 기입 모듈(1906), 디스테이지 모듈(1908)을 포함하고, 집행 모듈(1910), 메타데이터 모듈(1912), 판독 모듈(1914), 클로우즈 모듈(1916), 및 맵 모듈(1918)을 더 포함한다.
한 실시예에서, 집행 모듈(1910)은, 지속적 데이터 구조 및/또는 지속적 데이터 구조 유형에 대한 하나 이상의 규칙을 집행하도록 구성된다. 예를 들어, 각각의 상이한 유형의 데이터 구조는, 한 세트의 하나 이상의 규칙, 제약, 정의 등에 의해 정의되거나 구조화될 수 있다. 규칙은 데이터 구조에 대한 하나 이상의 허용된 또는 수락될 수 있는 데이터 동작을 정의할 수 있다. 트랜잭션 로그에 대해, 집행 모듈(1910)은, 엔트리들이 순차적이어야 하고, 데이터 엔트리들은 일단 기입되고 나면 오버라이트 또는 업데이트될 수 없다는 것 등의 하나 이상의 규칙을 집행할 수 있다. 집행 모듈(1910)은 상이한 유형의 데이터 구조에 대해 상이한 규칙을 집행할 수도 있다. 예를 들어, 집행 모듈(1910)은 지속적 큐 데이터 구조에 대해 엄격한 FIFO 규칙을 집행하고, 지속적 스택 데이터 구조에 대해 엄격한 LIFO 규칙을 집행하고, 지속적 트리 데이터 구조에 대해 데이터 엔트리들에 대한 엄격한 순서나 계층구조를 집행할 수 있고, 소정의 지속적 데이터 구조에 대해 소정의 데이터 유형이나 요구되는 필드 또는 엔트리들을 요구하는 규칙을 집행할 수 있는 등등이다.
집행 모듈(1910)은, 한 실시예에서, 요청 모듈(1902)과 협력하여, 지속적 데이터 구조에 대한 하나 이상의 규칙의 만족을 집행하거나 요구하는, API, 공유된 라이브러리, 통신 프로토콜 등의 인터페이스를 제공한다. 예를 들어, 집행 모듈(1910)과 요청 모듈(1902)은, 논리적 식별자와 그 논리적 식별자에 관해 데이터가 기입되는 오프셋에 대한 파라미터들을 갖는 기입 요청을 지원하는 것 대신에, 논리적 식별자 파라미터를 갖지만 오프셋이나 주소 파라미터를 갖지 않는 지속적 트랜잭션 로그에 대한 부가 요청(append request)을 지원하여, 기입 모듈(1906)이 데이터를 식별된 지속적 트랜잭션 로그에 추가하게 할 수 있고, 지속적 트랜잭션 로그 내의 어떠한 오프셋이나 주소도 명시되지 않게 함으로써, 지속적 트랜잭션 로그의 규칙들을 집행할 수 있다. 이런 방식으로, 집행 모듈(1910)은, 인터페이스를 통해, 수동적으로 지속적 데이터 구조에 대한 하나 이상의 규칙을 집행할 수 있다.
소정 실시예에서, 집행 모듈(1910)은, 하나 이상의 규칙을 침해하는 요청이나 동작의 실행을 적극적으로 차단, 인터셉트, 또는 정지시킴으로써, 지속적 데이터 구조에 대한 하나 이상의 규칙을 집행할 수 있다. 예를 들어, 집행 모듈(1910)은 지속적 트랜잭션 로그에 할당된 메모리의 영역을 적극적으로 모니터링할 수 있고, 부가 지점의 장소를 제외한 임의의 장소로의 기입을 적극적으로 차단하거나 기타의 방식으로 방지하여, 데이터가 오버라이트되지 않게 할 수 있다. 한 실시예에서, 집행 모듈(1910)은 수동적 인터페이스 정의와 적극적 차단 양쪽 모두의 조합을 이용하여 지속적 데이터 구조에 대한 하나 이상의 규칙이나 정의를 집행할 수 있다. 예를 들어, 집행 모듈(1910)은 요청 모듈(1902)과 협력하여 지속적 트랜잭션 로그에 대한 부가-전용 인터페이스를 제공할 수 있고, 블록 디바이스 인터페이스(1520), 메모리 시멘틱 인터페이스(1522) 등의 상이한 인터페이스를 이용하여 지속적 트랜잭션 로그의 데이터를 오버라이트하는 것을 적극적으로 차단 또는 방지할 수 있다. 이런 방식으로, 집행 모듈(1910)은, 애플리케이션이나 다른 클라이언트가 부주의로 또는 우연히 지속적 데이터 구조를 오버라이트하거나 기타의 방식으로 그 무결성을 침해하지 못하게 할 수 있어서, 지속적 데이터 구조가 데이터 구조의 엄격한 정의, 규칙 등을 만족하는 것을 보장한다.
한 실시예에서, 메타데이터 모듈(1912)은, 하나 이상의 지속적 데이터 구조 중 어느 데이터가 ACM 버퍼(1013)의 휘발성 메모리에 저장되어 있거나 이에 존재하는지 및 어느 데이터가 비휘발성 메모리 매체(110, 1110, 1502)에 저장되어 있거나 이에 존재하는지를 추적하는 메타데이터를 유지하거나 및/또는 이에 대한 액세스를 제공한다. 예를 들어, 메타데이터 모듈(1912)은, 어느 데이터가 ACM 버퍼(1013)에 저장되어 있고 아직 비휘발성 메모리 매체(110, 1110, 1502)에 의해 저장되지 않았는지를, 연관된 데이터의 상태를 나타내는 플래그나 기타의 표시를 이용하여 나타내는 클린/더티 비트맵, 테이블, 또는 기타의 데이터 구조를 유지할 수 있다. 추가 실시예에서, 메타데이터 모듈(1912)은, 어느 데이터가 ACM 버퍼(1013)에 저장되어 있는지 및 어느 데이터가 비휘발성 메모리 매체(110, 1110, 1502)에 저장되어 있는지를, 지속적 데이터 구조에 대한 논리적 식별자를 ACM 버퍼(1013)나 비휘발성 메모리 매체(110, 1110, 1502) 중 어느 하나의 물리적 장소에 맵핑하는, 하나 이상의 논리-대-물리 맵핑 구조를 이용하여 추적할 수 있다. 예를 들어, 메타데이터 모듈(1912)은 파일 시스템 모듈(1558)과 협력하여 ACM 버퍼(1013)와 비휘발성 메모리 매체(110, 1110, 1502) 중 하나 이상의 장소들에 대한 파일명칭과 오프셋을 추적하거나 맵핑하는 파일 시스템 메타데이터를 유지할 수 있고, 저장 관리 모듈(1050)과 협력하여 ACM 버퍼(1013)와 비휘발성 메모리 매체(110, 1110, 1502) 중 하나 이상의 물리적 장소에 대한 LBA 등의 논리적 주소를 추적하거나 맵핑하는 논리-대-물리 맵핑 구조를 유지할 수 있다.
메타데이터 모듈(1912)은, 기입 모듈(1906), 클라이언트 등이 ACM 버퍼(1013)에 기입하는 것에 응답하여, 디스테이지 모듈(1908)이 ACM 버퍼(1013)로부터 비휘발성 메모리 매체(110, 1110, 1502)에 데이터를 디스테이징, 클리닝, 복사, 기입, 또는 기타의 방식으로 저장하는 것 등에 응답하여, 메타데이터를 업데이트할 수 있다. 메타데이터 모듈(1912)은, 소정 실시예에서, 재시작 이벤트, 고장 조건 등으로부터의 복구 동안에 비휘발성 메모리 매체(110, 1110, 1502) 내의 데이터를 스캔 또는 처리하여 소실된 메타데이터를 재구축하고, 손상된 메타데이터를 수리하는 등을 하여, 논리-대-물리 맵핑이 정확하게 하고, 재시작 이벤트, 고장 조건, 또는 다른 트리거의 검출에 응답하여 비휘발성 메모리 매체(110, 1110, 1502)에 커밋되거나 플러싱된 ACM(1011)의 데이터를 이용하여, 요청 모듈(1902), 기입 모듈(1906), 판독 모듈(1914), 파일 시스템 모듈(1558), 및/또는 저장 관리 모듈(1050)이 재시작 이벤트 후에 지속적 데이터 구조로의 액세스를 제공할 수 있게 한다.
할당 모듈(1904), 기입 모듈(1906), 디스테이지 모듈(1908), 판독 모듈(1914), 클로우즈 모듈(1916), 맵 모듈(1918), 파일 시스템 모듈(1558), 및/또는 저장 관리 모듈(1050)은, 지속적 데이터 구조가 ACM 버퍼(1013)의 휘발성 메모리에 및 비휘발성 메모리 매체(110, 1110, 1502) 양쪽 모두에 저장된 데이터를 포함하는 경우에도, 데이터와 연관된 논리적 식별자에 기초하여 지속적 데이터 구조에 대한 하나 이상의 장소를 나타내는 메타데이터 모듈(1912)로부터의 메타데이터에 기초해, 지속적 데이터 구조에 대한 하나 이상의 요청을 만족하거나 충족하도록 구성될 수 있다.
한 실시예에서, 판독 모듈(1914)은 지속적 데이터 구조의 데이터를 요청 클라이언트에 제공한다. 판독 모듈(1914)은, 지속적 데이터 구조 또는 지속적 데이터 구조의 요청된 부분을, 호스트 디바이스(1014) 그 자체의 휘발성 메모리에 직접 맵핑된, 호스트 디바이스(1014)의 클라이언트의 가상 메모리에 맵핑된 ACM 버퍼(1013) 내에 복사하거나 로딩할 수 있고, 지속적 데이터 구조 또는 그 일부를, 블록 디바이스 인터페이스(1520), 메모리 시멘틱 인터페이스(1522), SML API(1019), 지속적 데이터 구조 인터페이스 등을 통해 제공할 수 있다. 판독 모듈(1914)은, 소정 실시예에서, 메타데이터 모듈(1912)로부터의 메타데이터 내의 지속적 데이터 구조에 대한 논리적 식별자를 조회하고 지속적 데이터 구조의 상이한 부분들을 회수하여 요청 클라이언트에 제공함으로써, ACM 버퍼(1013)의 휘발성 메모리와 비휘발성 메모리 매체(110, 1110, 1502) 양쪽 모두에 존재하는 지속적 데이터 구조로의 액세스를 제공할 수 있다.
한 실시예에서, 클로우즈 모듈(1916)은, 요청 모듈(1902)이 클라이언트로부터 지속적 데이터 구조에 대한 클로우즈 요청을 수신하는 것에 응답하여 지속적 데이터 구조를 클로우즈하도록 구성된다. 지속적 데이터 구조를 클로우즈하는 것은, 한 실시예에서, 지속적 데이터 구조를 록킹하여, 판독 전용으로 하는 것을 포함한다. 또 다른 실시예에서, 클로우즈 모듈(1916)은, ACM 버퍼(1013) 및/또는 비휘발성 메모리 매체(110, 1110, 1502)로부터의 지속적 데이터 구조의 데이터를 무효화, 삭제, 소거, 트리밍, 제거, 또는 기타의 방식으로 클리어함으로써, 지속적 데이터 구조를 클로우즈할 수 있다. 클로우즈 모듈(1916)은, 지속적 데이터 구조에 대한 클로우즈 요청으로부터의 논리적 식별자를 이용하여 메타데이터 모듈(1912)에 의해 유지된 메타데이터를 검사해, 지속적 데이터 구조가 ACM 버퍼(1013) 및/또는 비휘발성 메모리 매체(110, 1110, 1502)에서 클로우즈되어 있는지를 판정할 수 있다. 클로우즈 모듈(1916)이 클로우즈된 지속적 데이터 구조의 데이터를 무효화하거나 삭제를 위해 마킹하는 실시예에서, 나중에, 별도의 쓰레기 수집 또는 저장 용량 복구 프로세스가 클로우즈된 지속적 데이터 구조의 저장 용량을 되찾을 수 있다.
한 실시예에서, 맵 모듈(1918)은, 요청 모듈(1902)이 클라이언트로부터 맵 요청을 수신하는 것에 응답하여, ACM 버퍼(1013)의 하나 이상의 영역을 호스트 디바이스(1014) 상의 클라이언트의 가상 메모리로 맵핑하도록 구성된다. 소정 실시예에서, 맵 모듈(1918)은, 지속적 데이터 구조와 연관된 ACM 버퍼(1013)의 영역을 가상 메모리에 맵핑하여 지속적 데이터 구조로의 액세스를 제공할 수 있다. 소정 실시예에서, 맵 모듈(1918)은, 지속적 데이터 구조에 대한 파일 명칭이나 기타의 논리적 식별자를 갖는 클라이언트로부터의 맵 요청에 응답하여, 파일 시스템 모듈(1558) 등과 협력하여, 메모리 맵핑된 파일 I/O를 이용해, 지속적 데이터 구조의 파일을 가상 메모리에 맵핑할 수 있다. ACM(1011)이 액세스하기 위해 이용할 수 있는, MMIO, 포트 I/O, PMIO, 메모리 맵핑된 파일 I/O 등의 다양한 메모리 맵핑 기술이 설명되었다. 맵 모듈(1918)은 이들 중 하나 이상 또는 기타의 메모리 맵핑 기술을 이용하여 지속적 데이터 구조로의 메모리 시멘틱 액세스를 제공할 수 있다.
전술된 바와 같이, 일단 데이터가 자동-커밋 버퍼(1013)에 저장되고 나면, ACM(1011)은 비휘발성 메모리 매체(110, 1110, 1110, 1502) 내에 데이터를 보존하거나 지속시키고, 재시작 이벤트로부터의 복구 이후에, 비휘발성 메모리 매체(110, 1110, 1502) 내의 데이터를 ACM 사용자(1016) 등의 클라이언트에 제공한다. 전술된 지속적 데이터 구조 모듈(1009)과 그 다양한 서브모듈(1902, 1904, 1906, 1908, 1910, 1912, 1914, 1916, 1918)은, 저장 관리 모듈(1050) 등의 호스트 디바이스(1014)의 프로세서(1012) 상에서 실행되는 ACM(1011)에 대한 디바이스 드라이버에 배치되거나, ACM(1011)에 대한 저장 제어기(104, 1004, 1104, 1304)에 배치되거나, 및/또는 디바이스 드라이버와 저장 제어기(104, 1004, 1104, 1304) 각각의 부분들을 포함할 수도 있다.
도 11은, 주소 맵핑 구조(2000), 논리적 주소 공간(2120), 및 순차적, 로그-기반의, 부가-전용의 기입 구조(2140)의 한 실시예를 도시한다. 주소 맵핑 구조(2000)는, 한 실시예에서, 메타데이터 모듈(1912), 저장 제어기(104, 1004, 1104, 1304), 저장 관리층(1050), 논리-대-물리 변환층 또는 주소 맵핑 구조 등에 의해 유지되어, LBA 또는 기타의 논리적 주소를 ACM(1011) 등 내의 비휘발성 저장 매체(1110) 상의 물리적 장소에 맵핑한다. 예를 들어, 한 실시예에서, 메타데이터 모듈(1912)은, 주소 맵핑 구조(2000)를 이용하여 지속적 데이터 구조의 어느 부분들이 휘발성 ACM 버퍼(1013)에 저장되어 있는지 및 지속적 데이터 구조의 어느 부분들이 비휘발성 메모리 매체(1110)에 저장되어 있는지를 판정 및 추적할 수 있고, 여기서, 지속적 데이터 구조의 각각의 별개 부분은 논리 주소들의 범위와 연관되어 있다.
도시된 실시예가 주로 비휘발성 저장 매체(1110)와 관련하여 설명되었지만, 다른 실시예에서는, 주소 맵핑 구조(2000)는 지속적 데이터 구조의 다른 논리적 식별자를 자동-커밋 버퍼(1013) 및/또는 비휘발성 저장 매체(110) 등의 장소에 맵핑할 수도 있다. 주소 맵핑 구조(2000)는, 도시된 실시예에서, 수 개의 엔트리를 갖는 B-트리이다. 도시된 실시예에서, 주소 맵핑 구조(2000)의 노드는, 비휘발성 저장 디바이스(1102) 내의 물리적 장소에 대한 직접적 참조를 포함한다. 다른 실시예에서, 주소 맵핑 구조(2000)는, 역방향 맵 내의 엔트리들 등으로 맵핑되는 링크들을 포함할 수 있다. 주소 맵핑 구조(2000)는, 다양한 실시예에서, 역방향 맵과 함께 또는 역방향 맵 없이 이용될 수 있다. 다른 실시예에서, 주소 맵핑 구조(2000) 내의 참조들은, 영숫자 캐릭터, 16진 캐릭터, 포인터, 링크 등을 포함할 수 있다.
주소 맵핑 구조(2000)는, 도시된 실시예에서, 복수의 노드를 포함한다. 각 노드는, 도시된 실시예에서, 2개의 엔트리를 저장할 수 있다. 다른 실시예에서, 각 노드는 더 많은 수의 엔트리를 저장할 수 있고, 각 레벨의 엔트리들의 수는, 주소 맵핑 구조(2000)가 이용 등을 통해 성장하거나 줄어듦에 따라 변할 수도 있다.
각각의 엔트리는, 도시된 실시예에서, 비휘발성 저장 디바이스(1102)의 가변 길이 범위의 LBA들을 비휘발성 저장 디바이스(1102)에 대한 저장 매체(1110) 내의 물리적 장소로 맵핑한다. 또한, 가변 길이 범위의 LBA들이, 도시된 실시예에서, 시작 주소와 끝 주소로 표현되고 있지만, 다른 실시예에서, 가변 길이 범위의 LBA들은 시작 주소와 길이 등으로 표현될 수도 있다. 한 실시예에서, 대문자 'A' 내지 'M'은 대응하는 범위의 LBA들의 데이터를 저장하고 있는 비휘발성 저장 디바이스(1102)의 물리적 저장 매체(1110) 내의 논리적 또는 물리적 소거 블록을 나타낸다. 다른 실시예에서, 이 대문자는 비휘발성 저장 디바이스(1102)의 다른 물리적 주소나 장소를 나타낼 수도 있다. 도시된 실시예에서, 대문자 'A' 내지 'M'은 또한, 비휘발성 저장 디바이스(1102)의 물리적 저장 매체(1110)를 나타내는 로그-기반의 기입 구조(2140)에도 역시 도시되어 있다.
도시된 실시예에서, 주소 맵핑 구조(2000) 내의 멤버쉽은 비휘발성 저장 디바이스(1102) 내의 멤버쉽(또는 저장)을 나타낸다. 또 다른 실시예에서, 엔트리는, 비휘발성 저장 디바이스(1102)가 LBA들의 범위 내의 논리적 블록에 대응하는 데이터, 역방향 맵의 데이터, 및/또는 기타의 데이터를 저장하고 있는지의 표시자를 더 포함할 수 있다.
도시된 실시예에서, 루트 노드(2008)는, 불연속 범위들의 LBA들을 갖는 엔트리들(2102, 2104)을 포함한다. "홀(hole)"은 루트 노드의 2개의 엔트리(2102, 2104) 사이의 LBA("208")에 존재한다. 한 실시예에서, "홀"은, 비휘발성 저장 디바이스(1102)가 "홀"에 대응하는 하나 이상의 LBA에 대응하는 데이터를 저장하지 않는다는 것을 나타낸다. 한 실시예에서, 비휘발성 저장 디바이스(1102)는 복수의 연속 및/또는 불연속 범위들(예를 들어, 내부에 하나 이상의 "홀"을 포함하는 범위들)의 LBA들을 수반한 블록 I/O 요청(판독, 기입, 트림 등)을 지원한다. "홀"은, 한 실시예에서, 2개 이상의 불연속 범위들의 LBA들을 수반한 단일의 블록 I/O 요청의 결과일 수 있다. 추가 실시예에서, "홀"은 "홀"과 경계를 이루는 LBA 범위들을 갖는 수 개의 상이한 블록 I/O 요청들의 결과일 수 있다.
도시된 실시예에서, 유사한 "홀" 또는 불연속 범위들의 LBA들이, 노드(2014)의 엔트리들(2106, 2108) 사이에, 노드(2014)의 좌측 자노드의 엔트리들(2110, 2112) 사이에, 노드(2018)의 엔트리들(2114, 2116) 사이에, 및 노드(2118)의 엔트리들 사이에 존재한다. 한 실시예에서, 유사한 "홀"이 부모 노드와 자노드 내의 엔트리들 사이에 존재할 수 있다. 예를 들어, 도시된 실시예에서, LBA들 "060-071"의 "홀"은, 노드(2014)의 좌측 엔트리(2106)와 노드(2014)의 좌측 자노드의 우측 엔트리(2112) 사이에 존재한다.
LBA "003"에서의 "홀"은, 도시된 실시예에서, 논리 주소 "003"(2130)에 있는 비휘발성 저장 디바이스(1102)의 논리적 주소 공간(2120)에서 역시 볼 수 있다. LBA "003"(2140)에서의 해시 마크는, 빈 장소, 또는 비휘발성 저장 디바이스(1102)가 데이터를 저장하고 있지 않은 장소를 나타낸다. 논리적 주소 공간(2120) 내의 LBA(2134)에서의 "홀"은, 불연속 범위들을 수반한 하나 이상의 블록 I/O 요청, 비휘발성 저장 디바이스(1102)에 대한 트림 또는 기타의 할당해제 명령 등에 기인한 것이다. 주소 맵핑 구조(2000)는, 논리적 주소 공간(2120)의 성긴 및/또는 드문드문하게 제공된 성질로 인한, "홀", 불연속 범위들의 LBA들 등을 지원한다.
비휘발성 저장 디바이스(1102)의 논리적 주소 공간(2120)은, 도시된 실시예에서, 성긴 및/또는 드문드문하게 제공되고, 비휘발성 저장 디바이스(1102)의 물리적 저장 용량 및 대응하는 저장 디바이스 주소 공간보다 크다. 도시된 실시예에서, 비휘발성 저장 디바이스(1102)는, 논리적 주소 "0"(2122)에서 시작하고, 논리적 주소 "264-1"(2126)까지 연장되는 64비트 논리적 주소 공간(2120)을 가진다. 저장 디바이스는, 비휘발성 저장 디바이스(1102)의 논리적 주소 공간(2120)의 서브셋만에 대응하기 때문에, 논리적 주소 공간(2120)의 나머지는, 비휘발성 저장 디바이스(1102)의 다른 기능들을 위해 할당, 맵핑, 및 이용될 수 있다.
순차적, 로그-기반의, 부가-전용 기입 구조(2140)은, 도시된 실시예에서, 비휘발성 저장 디바이스(1102)의 물리적 저장 매체(1110)의 논리적 표현이다. 소정 실시예에서, 비휘발성 저장 디바이스(1102)는 데이터를 순차적으로 저장함으로써, 부가 지점(2144)에서 로그-기반의 기입 구조(2140)에 데이터를 부가한다. 비휘발성 저장 디바이스(1102)는, 추가 실시예에서, 할당해제된/미사용된 논리적 블록들을 저장하고 있는 비휘발성 저장 매체(1110)를 재사용하는 쓰레기 수집 모듈(garbage collection module) 또는 기타의 저장 공간 복구 모듈 등의, 저장 공간 복구 프로세스를 이용한다. 할당해제된/미사용된 논리적 블록을 저장하는 비휘발성 저장 매체(1110)는, 도시된 실시예에서, 비휘발성 저장 디바이스(1102)에 대한 가용 저장 푸울(available storage pool)(2146)에 추가된다. 전술된 바와 같이 비휘발성 저장 디바이스(1102)로부터 무효한 데이터를 클리어함으로써, 및 클리어된 데이터에 대응하는 물리적 저장 용량을 가용 저장 푸울(2146)에 다시 추가함으로써, 한 실시예에서, 로그-기반의 기입 구조(2140)는 순환적, 링형이고, 이론적으로 무한의 용량을 가진다.
도시된 실시예에서, 부가 지점(2144)은, 로그-기반의, 부가-전용의 기입 구조(2140)를 원형 패턴(2142)으로 진행한다. 한 실시예에서, 원형 패턴(2142)은 비휘발성 저장 매체(122)를 마모 밸런싱하여, 비휘발성 저장 매체(1110)의 가용 수명을 증가시킨다. 도시된 실시예에서, 쓰레기 수집 모듈 또는 기타의 저장 용량 복구 프로세스는 수개의 블록들(2148, 2150, 2152, 2154)을, 그 블록들(2148, 2150, 2152, 2154) 상의 "X" 마킹으로 표시된 바와 같이, 무효한 것으로 마킹했다. 쓰레기 수집 모듈은, 한 실시예에서, 무효한 블록들(2148, 2150, 2152, 2154)의 물리적 저장 용량을 복구하고 복구된 용량을 가용 저장 푸울(2146)에 추가할 것이다. 도시된 실시예에서, 블록들(2148, 2150, 2152, 2154)의 수정된 버전이 판독, 수정, 기입 동작 등에서, 로그-기반의 기입 구조(2140)에 새로운 블록들(2156, 2158, 2160, 2162)로서 부가되어, 원래의 블록들(2148, 2150, 2152, 2154)이 복구되는 것을 허용하였다.
도 12는 지속적 데이터 구조를 위한 방법(2200)의 한 실시예를 도시한다. 방법(2200)은 시작되어, 할당 모듈(1904)가 논리적 식별자를 데이터 구조와 연관시킨다(2202). 기입 모듈(1906)은, 전술된 바와 같이, 트리거에 응답하여 데이터가 보존되게끔 보장하도록 구성된, 휘발성 메모리 모듈(1013)의 제1 영역에 데이터 구조의 데이터를 기입한다(2204). 디스테이지 모듈(1908)은 휘발성 메모리 모듈(1013)로부터의 데이터 구조의 데이터를 비휘발성 저장 매체(110, 1110, 1502)에 복사하여(2206), 데이터 구조의 데이터가 논리적 식별자와 연관되어 머물게 하고(2202), 방법(2200)이 종료한다.
도 13은 지속적 데이터 구조를 위한 방법(2300)의 또 다른 실시예를 도시한다. 방법(2300)이 시작되어, 요청 모듈(1902)은 지속적 데이터 구조 요청이 수신되었는지를 판정한다(2302). 어떠한 지속적 데이터 구조 요청도 수신되지 않았다면, 요청 모듈(1902)은 요청을 계속 모니터링한다(2302). 요청 모듈(1902)이 오픈 요청을 수신했다면(2304), 할당 모듈(1904)은 지속적 데이터 구조를 초기화 및/또는 오픈하여, 초기화된(2308) 지속적 데이터 구조를 논리적 식별자 등과 연관시킨다. 요청 모듈(1902)이 기입 요청을 수신했다면(2306), 기입 모듈(1906)은 수신된 기입 요청(2306)의 데이터를 ACM 버퍼(1013)의 할당된 영역에 기입하고, 여기서, 디스테이지 모듈(1908)은 데이터를 비휘발성 메모리 매체(110, 1110, 1502)에 복사할 수 있다. 요청 모듈(1902)이 상이한 유형의 요청을 수신했다면(2302), 연관된 모듈은 수신된(2302) 지속적 데이터 구조 요청을 만족시키고(2312)(예를 들어, 디스테이지 모듈(1908)은 데이터를 디스테이징하여 동기화 또는 디스테이지 요청을 만족시키고(2312), 판독 모듈(1914)은 지속적 데이터 구조의 데이터를 제공하여 판독 요청을 만족시키고(2312), 클로우즈 모듈(1916)은 지속적 데이터 구조를 클로우즈하여 클로우즈 요청을 만족시키고, 맵 모듈(1918)은, ACM(1013)의 영역, 지속적 데이터 구조 등을 호스트 디바이스(1014) 상의 클라이언트의 가상 메모리에 맵핑하여 맵 요청을 만족시키는 등등이다), 방법(2300)은 계속된다.
휘발성 버퍼(1013)에 저장된 데이터와 비휘발성 기록 매체(110, 1110, 1502)에 저장된 데이터를 포함하는 지속적 데이터 구조에 대한 하나 이상의 요청을 만족시키기 위한 수단은, 다양한 실시예에서, 지속적 데이터 구조 모듈(1009), 요청 모듈(1902), 할당 모듈(1904), 기입 모듈(1906), 디스테이지 모듈(1908), 판독 모듈(1914), 클로우즈 모듈(1916), 맵 모듈(1918), 파일 시스템 모듈(1558), 저장 관리 모듈(1050), 자동-커밋 메모리 모듈(1011), 블록 디바이스 인터페이스(1520), 메모리 시멘틱 인터페이스(1522), SML API(1019), 디바이스 드라이버, 저장 제어기(104, 1004, 1104, 1304), 프로세서(1012), 기타의 로직 하드웨어, 및/또는 컴퓨터 판독가능한 저장 매체 상에 저장된 기타의 실행가능한 코드를 포함할 수 있다. 다른 실시예에서, 지속적 데이터 구조에 대한 하나 이상의 요청을 만족시키기 위한 유사하거나 동등한 수단을 포함할 수 있다.
휘발성 버퍼(1013)에 저장된 데이터를 비휘발성 기록 매체(110, 1110, 1502)에 커밋하기 위한 수단은, 다양한 실시예에서, 디스테이지 모듈(1908), 자동-커밋 메모리 모듈(1011), 자동-커밋 버퍼(1013), 커밋 관리 장치(1122), 커밋 에이전트(1020), 기입 데이터 파이프라인(106), 저장 제어기(104, 1004, 1104, 1304), 프로세서(1012), 기타의 로직 하드웨어, 및/또는 컴퓨터 판독가능한 저장 매체 상에 저장된 기타의 실행가능한 코드를 포함할 수 있다. 다른 실시예는 데이터를 커밋하기 위한 유사하거나 동등한 수단을 포함할 수 있다.
재시작 이벤트 후에, 지속적 데이터 구조와 연관된 논리적 식별자를 이용하여, 비휘발성 기록 매체(110, 1110, 1502)로부터의 지속적 데이터 구조로의 액세스를 제공하기 위한 수단은, 다양한 실시예에서, 지속적 데이터 구조 모듈(1009), 요청 모듈(1902), 판독 모듈(1914), 맵 모듈(1918), 파일 시스템 모듈(1558), 저장 관리 모듈(1050), 자동-커밋 메모리 모듈(1011), 블록 디바이스 인터페이스(1520), 메모리 시멘틱 인터페이스(1522), SML API(1019), 디바이스 드라이버, 저장 제어기(104, 1004, 1104, 1304), 프로세서(1012), 기타의 로직 하드웨어, 및/또는 컴퓨터 판독가능한 저장 매체 상에 저장된 기타의 실행가능한 코드를 포함할 수 있다. 다른 실시예는 지속적 데이터 구조에 대한 액세스를 제공하기 위한 유사하거나 동등한 수단을 포함할 수 있다.
지속적 데이터 구조에 대한 부가-전용 규칙을 집행하여 데이터 구조의 데이터가 오버라이트되지 않게 하기 위한 수단은, 다양한 실시예에서, 지속적 데이터 구조 모듈(1009), 집행 모듈(1910), 요청 모듈(1902), 파일 시스템 모듈(1558), 저장 관리 모듈(1050), 자동-커밋 메모리 모듈(1011), 블록 디바이스 인터페이스(1520), 메모리 시멘틱 인터페이스(1522), SML API(1019), 디바이스 드라이버, 저장 제어기(104, 1004, 1104, 1304), 프로세서(1012), 기타의 로직 하드웨어, 및/또는 컴퓨터 판독가능한 저장 매체 상에 저장된 기타의 실행가능한 코드를 포함할 수 있다. 다른 실시예는 부가-전용 규칙을 집행하기 위한 유사하거나 동등한 수단을 포함할 수 있다.
본 개시내용은 그 사상 또는 본질적 특성으로부터 벗어나지 않고 다른 특정한 형태로 구현될 수도 있다. 설명된 실시예들은 모든 면에서 예시적인 것일 뿐이고 제한적인 것은 아니라고 간주되어야 한다. 따라서, 본 개시내용의 범위는 상기의 설명이 아니라 첨부된 청구항들에 의해 표시된다. 청구항들의 균등물들의 의미와 범위 내에 드는 모든 변경은 청구항들의 범위 내에 포함되어야 한다.

Claims (19)

  1. 방법으로서,
    논리적 식별자를 데이터 구조와 연관시키는 단계;
    트리거에 응답하여 데이터가 보존되게끔 보장하도록 구성된 휘발성 메모리 모듈의 제1 영역에 상기 데이터 구조의 데이터를 기입하는 단계;
    상기 데이터 구조의 데이터가 상기 논리적 식별자와 연관되어 머무르도록 상기 데이터 구조의 데이터를 상기 휘발성 메모리 모듈로부터 비휘발성 저장 매체에 복사하는 단계; 및
    상기 논리적 식별자를 이용하여 상기 휘발성 메모리 모듈에 존재하는 상기 데이터 구조의 데이터와 상기 비휘발성 저장 매체에 저장된 상기 데이터 구조의 데이터로의 액세스를 제공하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서, 상기 휘발성 메모리 모듈의 상기 제1 영역으로부터의 데이터를 복사하면서 상기 데이터 구조의 추가 데이터를 상기 휘발성 메모리 모듈의 제2 영역에 기입하는 단계를 더 포함하는 방법.
  3. 제2항에 있어서, 상기 데이터 구조의 데이터를 상기 제1 영역과 상기 제2 영역에 기입하는 것을 교대로 하면서, 상기 제1 영역과 상기 제2 영역 중 다른 하나의 영역으로부터의 데이터를 복사하는 단계를 더 포함하는 방법.
  4. 제1항에 있어서, 상기 데이터 구조에 대한 하나 이상의 규칙을 집행(enforcing)하는 단계를 더 포함하는 방법.
  5. 제4항에 있어서, 상기 데이터 구조는 로그 데이터 구조(log data structure)를 포함하고, 상기 하나 이상의 규칙은 상기 로그 데이터 구조를 순차적 및 부가-전용(sequential and append-only)으로서 정의하며, 상기 하나 이상의 규칙을 집행하는 단계는, 부가 동작들 이외의 상기 로그 데이터 구조에 대한 기입들을 방지하는 단계를 포함하는, 방법.
  6. 제1항에 있어서, 상기 데이터 구조의 어느 데이터가 상기 휘발성 메모리 모듈에 존재하고, 상기 데이터 구조의 어느 데이터가 상기 비휘발성 저장 매체에 저장되어 있는지를 추적하는 단계를 더 포함하는 방법.
  7. 제1항에 있어서, 상기 데이터 구조의 데이터가 상기 휘발성 메모리 모듈에 기입되는 레이트를 제한하되, 상기 레이트가 상기 데이터 구조의 데이터가 상기 비휘발성 저장 매체에 복사되는 레이트 이하가 되게 하는 단계를 더 포함하는 방법.
  8. 제1항에 있어서, 입력 레이트의 증가에 응답하여 전송 레이트를 증가시키는 단계를 더 포함하고, 상기 입력 레이트는 상기 데이터 구조의 데이터가 상기 휘발성 메모리 모듈에 기입되는 레이트를 포함하고, 상기 전송 레이트는 상기 데이터 구조의 데이터가 상기 비휘발성 저장 매체에 복사되는 레이트를 포함하는, 방법.
  9. 제8항에 있어서, 상기 전송 레이트는 임계치 아래의 상기 입력 레이트에 응답하여 전송 동작당 상기 비휘발성 저장 매체에 복사되는 데이터의 양을 증가시킴으로써 증가되고, 상기 전송 레이트는 상기 임계치 위의 상기 입력 레이트에 응답하여 데이터를 복사하는 병렬 프로세스들의 수를 증가시킴으로써 증가되는, 방법.
  10. 제1항에 있어서, 상기 데이터 구조의 데이터를 상기 휘발성 메모리 모듈로부터 상기 비휘발성 저장 매체에 복사하는 단계는, 임계치를 만족하는 상기 휘발성 메모리 모듈에 기입되는 상기 데이터 구조의 데이터의 양, 경과된 기간, 상기 휘발성 메모리 모듈과 연관된 모니터링 디바이스에 의해 제공되는 통보, 및 클라이언트로부터의 요청 중 하나 이상에 응답하는, 방법.
  11. 제1항에 있어서, 상기 데이터 구조는, 로그(log), 큐(queue), 스택(stack), 트리(tree), 링크된-리스트(linked-list), 해시(hash), 어레이(array), 힙(heap), 및 그래프 데이터 구조(graph data structure) 중 적어도 하나를 포함하는, 방법.
  12. 제1항에 있어서,
    클라이언트로부터의 오픈 요청(open request)에 응답하여 상기 데이터 구조를 오픈하는 단계;
    클라이언트로부터의 기입 요청에 응답하여 상기 휘발성 메모리 모듈에 상기 데이터 구조의 데이터를 기입하는 단계;
    클라이언트로부터의 동기화 요청에 응답하여 상기 데이터 구조의 데이터를 상기 휘발성 메모리 모듈로부터 상기 비휘발성 저장 매체에 복사하는 단계;
    클라이언트로부터의 클로우즈 요청(close request)에 응답하여 상기 데이터 구조를 클로우즈하는 단계;
    클라이언트로부터의 맵 요청(map request)에 응답하여 상기 휘발성 메모리 모듈의 상기 제1 영역을 클라이언트의 가상 메모리에 맵핑하는 단계; 및
    클라이언트로부터의 할당 요청에 응답하여 상기 데이터 구조를 위해 상기 휘발성 메모리 모듈의 상기 제1 영역을 할당하는 단계
    중 하나 이상을 더 포함하는 방법.
  13. 제1항에 있어서, 상기 논리적 식별자는 파일 시스템의 파일명칭을 포함하고, 상기 데이터 구조는 상기 파일 시스템의 파일로서 액세스가능한, 방법.
  14. 제1항에 있어서, 상기 휘발성 메모리 모듈은 바이트 어드레싱가능한 제위치 기입 메모리 디바이스(byte addressable write-in-place memory device)를 포함하고, 상기 비휘발성 저장 매체는 블록 어드레싱가능한 저장 디바이스(block addressable storage device)를 포함하는, 방법.
  15. 장치로서,
    요청에 응답하여 지속적 트랜잭션 로그(persistent transaction log)를 초기화하도록 구성된 할당 모듈;
    데이터의 지속성(persistence)을 보장하도록 구성된 휘발성 메모리에 부가된 데이터를 기입함으로써 상기 지속적 트랜잭션 로그에 데이터를 부가하도록 구성된 기입 모듈; 및
    상기 지속적 트랜잭션 로그에서 데이터가 오버라이트(overwrite)되는 것을 방지하는 하나 이상의 규칙을 집행하도록 구성된 집행 모듈
    을 포함하는 장치.
  16. 제15항에 있어서, 상기 부가된 데이터가 상기 휘발성 메모리를 오버런(overrun)하지 않는 레이트로 상기 부가된 데이터를 상기 휘발성 메모리로부터 비휘발성 메모리 매체에 기입하도록 구성된 디스테이지 모듈(destage module)을 더 포함하는 장치.
  17. 제16항에 있어서, 상기 휘발성 메모리는, 부가된 데이터를 저장하기 위한 2개 이상의 메모리 버퍼들 사이에서 교대하도록 구성되고, 상기 디스테이지 모듈은 데이터가 현재 기입되고 있지 않은 메모리 버퍼로부터 상기 비휘발성 메모리 매체로 부가된 데이터를 기입하도록 구성된, 장치.
  18. 장치로서,
    휘발성 버퍼에 저장된 데이터와 비휘발성 기록 매체에 저장된 데이터를 포함하는 지속적 데이터 구조에 대한 하나 이상의 요청을 만족시키기 위한 수단;
    상기 휘발성 버퍼에 저장된 데이터를 상기 비휘발성 기록 매체에 커밋(commit)하기 위한 수단; 및
    상기 지속적 데이터 구조와 연관된 논리적 식별자를 이용하여 재시작 이벤트 후에 상기 비휘발성 기록 매체로부터의 상기 지속적 데이터 구조로의 액세스를 제공하기 위한 수단
    을 포함하는 장치.
  19. 제18항에 있어서, 상기 데이터 구조의 데이터가 오버라이트되지 않도록 상기 데이터 구조에 대한 부가-전용 규칙(append-only rule)을 집행하기 위한 수단을 더 포함하는 장치.
KR1020167006218A 2013-08-09 2014-07-25 지속적 데이터 구조 KR20160048814A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201361864514P 2013-08-09 2013-08-09
US61/864,514 2013-08-09
US201361878031P 2013-09-15 2013-09-15
US61/878,031 2013-09-15
PCT/US2014/048129 WO2015020811A1 (en) 2013-08-09 2014-07-25 Persistent data structures

Publications (1)

Publication Number Publication Date
KR20160048814A true KR20160048814A (ko) 2016-05-04

Family

ID=52461838

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167006218A KR20160048814A (ko) 2013-08-09 2014-07-25 지속적 데이터 구조

Country Status (3)

Country Link
KR (1) KR20160048814A (ko)
CN (1) CN105612503B (ko)
WO (1) WO2015020811A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190001303A (ko) * 2017-06-27 2019-01-04 주식회사 케이티 원격 백업 디바이스

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10817502B2 (en) 2010-12-13 2020-10-27 Sandisk Technologies Llc Persistent memory management
US10817421B2 (en) 2010-12-13 2020-10-27 Sandisk Technologies Llc Persistent data structures
US10509770B2 (en) 2015-07-13 2019-12-17 Samsung Electronics Co., Ltd. Heuristic interface for enabling a computer device to utilize data property-based data placement inside a nonvolatile memory device
US11461010B2 (en) 2015-07-13 2022-10-04 Samsung Electronics Co., Ltd. Data property-based data placement in a nonvolatile memory device
US10282324B2 (en) 2015-07-13 2019-05-07 Samsung Electronics Co., Ltd. Smart I/O stream detection based on multiple attributes
US9841921B2 (en) * 2016-04-27 2017-12-12 Pure Storage, Inc. Migrating data in a storage array that includes a plurality of storage devices
CN108173665B (zh) * 2016-12-07 2021-02-23 北京云中融信网络科技有限公司 一种备份数据的方法及装置
TWI613652B (zh) * 2017-03-27 2018-02-01 慧榮科技股份有限公司 資料儲存裝置以及其操作方法
CN109144885B (zh) * 2017-06-27 2022-04-29 北京忆恒创源科技股份有限公司 固态存储设备的垃圾回收方法与固态存储设备
KR20190004094A (ko) * 2017-07-03 2019-01-11 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작방법
US11294743B2 (en) * 2017-10-26 2022-04-05 SK Hynix Inc. Firmware event tracking for NAND-based storage devices, and methods and instruction sets for performing the same
US11327857B2 (en) * 2018-04-04 2022-05-10 Netapp Inc. Faster replay of metadata and data operations using inode number based dependency graph
KR20200014964A (ko) * 2018-08-02 2020-02-12 삼성전자주식회사 버츄얼 메모리 영역을 제공하는 스토리지 장치, 이를 포함하는 전자 시스템 및 전자 시스템의 동작 방법
CN110837499B (zh) * 2018-08-16 2023-08-22 阿里巴巴集团控股有限公司 数据访问处理方法、装置、电子设备和存储介质
US11301331B2 (en) * 2018-09-20 2022-04-12 Samsung Electronics Co., Ltd. Storage device and operating method of storage device
CN109768996A (zh) * 2019-03-07 2019-05-17 北京德普视讯科技有限公司 基于业务模块应用逻辑构建的云拼接大屏显示系统
CN110047537B (zh) * 2019-04-09 2020-07-03 无锡科技职业学院 一种半导体存储装置及计算机系统
US10929301B1 (en) * 2019-08-22 2021-02-23 Micron Technology, Inc. Hierarchical memory systems
CN110968530B (zh) * 2019-11-19 2021-12-03 华中科技大学 一种基于非易失性内存的键值存储系统和内存访问方法
CN111221474B (zh) * 2020-01-02 2023-05-26 广州虎牙科技有限公司 一种数据的存储方法、装置、设备和存储介质
CN111241010B (zh) * 2020-01-17 2022-08-02 中国科学院计算技术研究所 一种基于缓存划分及回滚的处理器瞬态攻击防御方法
US20220171656A1 (en) * 2020-12-02 2022-06-02 Unifabrix Ltd. Adjustable-precision multidimensional memory entropy sampling for optimizing memory resource allocation
WO2022177561A1 (en) * 2021-02-18 2022-08-25 Futurewei Technologies, Inc. Data access processing agnostic to mapping unit size
TWI768982B (zh) * 2021-06-23 2022-06-21 鼎新電腦股份有限公司 表格佈署系統和其方法
CN113721839B (zh) * 2021-07-23 2024-04-19 阿里巴巴达摩院(杭州)科技有限公司 用于处理图数据的计算系统和存储分层方法
CN113946152A (zh) * 2021-11-22 2022-01-18 中国重汽集团济南动力有限公司 一种全局路径规划方法、系统及低速商用无人车
CN115277123B (zh) * 2022-07-12 2024-01-19 上海交通大学 车用can总线注入攻击异常检测方法及系统

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0320142D0 (en) * 2003-08-28 2003-10-01 Ibm Data storage systems
US7392429B2 (en) * 2004-12-22 2008-06-24 Microsoft Corporation System and method for maintaining persistent state data
US7457928B2 (en) * 2005-10-28 2008-11-25 International Business Machines Corporation Mirroring system memory in non-volatile random access memory (NVRAM) for fast power on/off cycling
US20110035562A1 (en) * 2009-08-10 2011-02-10 Hewlett-Packard Development Company, L.P. Providing mirroring write data
US20120239860A1 (en) * 2010-12-17 2012-09-20 Fusion-Io, Inc. Apparatus, system, and method for persistent data management on a non-volatile storage media
CN102193846B (zh) * 2011-06-13 2012-10-24 锐骐(厦门)电子科技有限公司 一种非易失性数据的备份和恢复方法
CN102567146B (zh) * 2011-12-29 2014-01-22 北京握奇数据系统有限公司 一种实现日志备份的方法及其装置、智能卡

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190001303A (ko) * 2017-06-27 2019-01-04 주식회사 케이티 원격 백업 디바이스

Also Published As

Publication number Publication date
CN105612503B (zh) 2018-10-23
CN105612503A (zh) 2016-05-25
WO2015020811A1 (en) 2015-02-12

Similar Documents

Publication Publication Date Title
US11907200B2 (en) Persistent memory management
US10834224B2 (en) Transaction log acceleration
US10817421B2 (en) Persistent data structures
US9767017B2 (en) Memory device with volatile and non-volatile media
KR20160048814A (ko) 지속적 데이터 구조
US9218278B2 (en) Auto-commit memory
US11762817B2 (en) Time sequence data management
US10289545B2 (en) Hybrid checkpointed memory
US10235066B1 (en) Journal destage relay for online system checkpoint creation
US9047178B2 (en) Auto-commit memory synchronization
US10073656B2 (en) Systems and methods for storage virtualization
US10509776B2 (en) Time sequence data management
US9842053B2 (en) Systems and methods for persistent cache logging
US9405680B2 (en) Communication-link-attached persistent memory system
US9047351B2 (en) Cluster of processing nodes with distributed global flash memory using commodity server technology
US9990150B2 (en) Method to provide transactional semantics for updates to data structures stored in a non-volatile memory
US7640410B2 (en) Instant copy of data through pointers interchanging
US20070068061A1 (en) Instant copy of data in a cache memory via an atomic command
US7552297B2 (en) Instant copy of data in a cache memory via an atomic command
WO2015130799A1 (en) System and method for storage virtualization

Legal Events

Date Code Title Description
WITN Withdrawal due to no request for examination