KR20140060521A - 검증된 데이터 세트의 비휘발성 매체 저널링 기법 - Google Patents
검증된 데이터 세트의 비휘발성 매체 저널링 기법 Download PDFInfo
- Publication number
- KR20140060521A KR20140060521A KR1020147006372A KR20147006372A KR20140060521A KR 20140060521 A KR20140060521 A KR 20140060521A KR 1020147006372 A KR1020147006372 A KR 1020147006372A KR 20147006372 A KR20147006372 A KR 20147006372A KR 20140060521 A KR20140060521 A KR 20140060521A
- Authority
- KR
- South Korea
- Prior art keywords
- data set
- journal
- data
- repository
- stored
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1076—Parity data used in redundant arrays of independent storages, e.g. in RAID systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1471—Saving, restoring, recovering or retrying involving logging of persistent data for recovery
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0613—Improving I/O performance in relation to throughput
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
저장소 세트에 데이터 세트(가령, RAID 어레이를 포함하는 하드 디스크 장치로 써지는 데이터 세트)를 저장하는 것은, 특히, 저장 장치가 순차적으로 데이터 세트가 뒤 따르는 데이터 세트를 즉시 쓰는 경우, 비-순차적 쓰기에 의해 저장소 세트의 성능을 약화시킬 수 있다. 덧붙여, 저장소 세트가 데이터 세트 및 검증자(가령, 체크섬)의 비-원자적 쓰기와 중간 장애, 가령, RAID 쓰기 구멍의 발생으로 인한 불일치성을 보여줄 수 있다. 대신, 데이터 세트와 검증자가, 저장소 세트로 커밋되기 전에, 우선 저장 장치의 비휘발성 매체에 저장되도록 써질 수 있다. 저장소 세트 내 데이터 세트의 위치와 무관하게, 이러한 쓰기는 저널에 순차적으로 이뤄질 수 있고, 장애의 복구는 단순히 저널 내 일치하는 레코드를 재-커밋하여 저장소 세트로의 불완전한 쓰기를 정정할 수 있는 것과 관련된다.
Description
컴퓨팅의 분야에서, 많은 시나리오가 하나 이상의 비휘발성 저장 장치(가령, 플래터-기반 자성 및/또는 광 하드 디스크 드라이브, 솔리드-스테이트 저장 장치, 및 비휘발성 메모리 회로) 상에 데이터를 저장하는 것을 포함한다. 데이터 저장 장치의 많은 상세사항, 가령, 워드 크기, 주소지정 방법, 하나 이상의 파티션으로의 저장 장치의 저장 공간의 파티셔닝, 및 컴퓨팅 환경 내 하나 이상의 볼륨으로서 저장 장치 내 할당된 공간의 노출이 달라질 수 있다.
이러한 많은 저장 시나리오에서, 데이터의 의도치 않은 변경을 검출하기 위한 기법이 사용될 수 있다. 예를 들어, 장치의 읽기 또는 저장 로직의 에러, 버퍼 언더런 또는 오버런, 저장 매체의 결함(flaw), 또는 외부 혼란(가령, 우주선(cosmic ray))이 때때로 저장 매체 상에 저장된 데이터에 또는 상기 저장 매체로부터의 데이터 읽기에 의도치 않은 변경을 초래할 수 있다. 따라서 이러한 많은 시나리오에서, 각각의 데이터 세트(가령, 서로 다른 워드, 섹터, 영역, 또는 그 밖의 다른 데이터 세트)에 대해 계산된 검증자(verifier)(가령, 패리티 비트(parity bit) 또는 체크섬(checksum))을 포함하는 에러 검출 스킴에 따라 데이터가 저장 장치 상에 저장된다. 상기 검증자는 데이터 세트의 콘텐츠가 저장 장치 상에 유효하게(validly) 저장되었는지 및/또는 상기 저장 장치로부터 유효하게 읽혔는지를 확인하도록 사용될 수 있다. 한 가지 이러한 예를 들면, 비트의 세트를 포함하는 데이터 세트를 저장하는 맥락에서, 배타적 논리합(XOR) 연산이 상기 비트에 적용되어, 이들 데이터 세트와 연관되고 저장될 수 있는 패리티 비트를 도출할 수 있다. 추후 데이터 세트가 읽힐 때, 또 다른 XOR 연산이 상기 데이터 세트에 적용될 수 있고, 그 결과가 상기 패리티 비트와 비교될 수 있다. 임의의 하나의 비트의 변화라도 이들 XOR 계산들의 오정합을 초래하여, 데이터가 잘못 저장되었거나, 변경되었거나, 저장 장치로부터 잘못 읽혔음을 나타낸다. 많은 유형의 검증자가 식별될 수 있는데, 이들은 일부 특징이 다양할 수 있다(가령, 계산의 편의, 데이터 세트의 어느 비트가 변경됐는지를 식별하는 능력, 및 데이터의 잘못 읽힌 부분이 정정될 수 있게 하는 에러-정정 능력).
종종 에러 검출 스킴이 RAID(Redundant Array of Inexpensive Disk) 어레이, 가령, 다양한 집성된 속성, 가령, 개선된 처리율 및 자동 데이터 미러링(utomatic data mirroring)을 얻기 위해 모인 하드 디스크 드라이브의 세트에서 사용된다. 이러한 한 가지 예로서, RAID 4 어레이는 둘 이상의 디스크의 세트를 포함하며, 여기서 하나의 디스크는 사용자 데이터를 저장하지 않고 다른 디스크 상에 저장된 데이터의 검증자를 저장하도록 어레이에 포함된다. 예를 들어 각각 1테라바이트의 데이터를 저장하는 4개의 디스크와 관련된 RAID 4 어레이의 경우, 첫 3개의 디스크의 용량이 모아져서 사용자 데이터를 위한 3 테라바이트의 저장 공간을 형성할 수 있으며, 네 번째 디스크는 상기 첫 3개의 디스크 상에 저장된 데이터 세트에 대한 검증자를 보유하도록 어레이에 포함된다(가령, 나머지 3개의 디스크 상에 각각 저장된 3개의 64-비트 워드마다, 상기 네 번째 디스크는 3개의 64-비트 워드의 무결성을 검증하는 64-비트 검증자를 포함한다). 상기 RAID 어레이 제어기는 제공된 드라이브의 세트에 대해 선택된 RAID 레벨의 상세사항을 구현하도록 구성된 회로를 포함한다(가령, 데이터 세트를 수신하면, 자동으로 데이터를 3개의 사용자 데이터 디스크로 분배하고, 데이터 세트의 검증자를 계산하며, 상기 네 번째 디스크 상에 검증자를 저장한다). 사용되는 RAID 기법은 추가 보호 또는 특징을 가능하게 할 수 있는데, 가령, RAID 4 어레이 내 임의의 단일 저장 장치에 장애가 발생하고(fail), 상기 장애 장치 상에 저장된 데이터의 전체가 나머지 저장 장치의 사용을 통해 재구성될 수 있다.
개요
이 개요는 이하의 상세한 설명에서 추가로 제공될 개념들의 집합을 단순화된 형태로 소개하려는 것이다. 이 개요는 본 발명의 핵심 요인 또는 필수 특징을 식별하려는 것이 아니고, 본 발명의 범위를 제한하기 위한 것도 아니다.
저장 장치로의 데이터의 쓰기는 비효율성과 잠재적 문제의 몇 가지 원인을 제공할 수 있다. 제 1 예시로서, 저장 장치에 써지는 데이터 세트는 데이터 시퀀스가령, 저장 장치 상의 물리적 주소의 시퀀스에 써지는 데이터를 포함할 수 있다. 이 시퀀스에 따라서 (가령, 데이터의 연속 블록(contiguous block)의 순차 쓰기로서) 데이터 세트를 씀으로써, 저장 장치는 탐색 시간 및 쓰기 연산의 감소로 인해 더 빠른 탐색 시간(seek time), 더 높은 처리율, 및/또는 감소된 전력 소비량 및 물리적 마모를 얻을 수 있다. 그러나 다양한 환경 때문에, 저장 장치는 데이터의 시퀀스를 둘 이상의 서브-시퀀스로서 쓸 수 있고, 이들 효율을 얻지 못할 수 있다. 제 1 예시로서, 데이터 세트를 쓰기 위한 요청은 시퀀스의 일부분을 쓰기 위한 둘 이상의 요청(가령, 주소 1,000-1,015를 쓰기 위한 제 1 요청과 주소 1,016 내지 1,031를 쓰기 위한 제 2 요청)을 포함할 수 있고, 상기 저장 장치는 전체 시퀀스를 함께 커밋하는 대신 시퀀스의 각각의 부분을 개별적으로 커밋(commit)할 수 있다. 제 2 예시로서, 저장 장치가 복수의 쓰기 요청을 수신할 수 있고, 시퀀스의 제 1 부분과 시퀀스의 제 2 부분의 쓰기 사이에, 서로 다른 위치에 서로 다른 데이터 세트를 저장할 수 있음으로써, 상기 제 1 부분과 제 2 부분 사이에 2번의 추가 탐색을 야기할 수 있다. 이러한 그리고 그 밖의 다른 환경이 성능, 전력 효율, 및 저장 장치의 수명에서의 효율을 얻는 기회를 박탈하는 것으로 식별될 수 있다.
검증자 기반 저장 공간 세트를 저장하는 동안 발생할 수 있는 두 번째 문제는 데이터 세트를 저장하는 것과 이의 검증자를 저장하는 것 사이(또는 이의 역)의 딜레이와 관련된다. 제 1 예시로서, 많은 저장 장치가 한 번에 하나의 위치(가령, 하드 디스크 드라이브의 쓰기 헤드 아래에 있는 위치 또는 솔리드-스테이트 저장 장치 내 주소 레지스터에 의해 특정되는 위치)로의 쓰기만 지원하며, 데이터의 순차 저장은 데이터 세트를 검증자 전에, 또는 검증자를 데이터 세트 전에 쓰는 것과 관련된다. 제 2 예시로서, 데이터 세트와 검증자가 서로 다른 저장 장치에 저장되는 경우, 제 1 저장 장치가 데이터 세트를 저장하는 순간과 제 2 저장 장치가 데이터 세트의 검증자를 저장하는 순간을 동기화시키는 것이 어려울 수 있다. 이들 그리고 그 밖의 다른 예시에서, 데이터 세트와 이에 대응하는 검증자의 저장은 동기 방식이 아니라 순차 방식으로 이뤄질 수 있다. 그러나 저장 장치(들)의 장애, 가령, 전원 손실, 하드웨어 장애, 소프트웨어 충돌, 또는 어레이로부터의 저장 장치의 예기치 않은 제거가 데이터 세트를 저장한 후 및 검증자를 저장하기 전에 발생할 수 있다. 따라서 검증자는 자신이 나타내는 데이터와 정합(matching)되지 않는다. 비-원자적 쓰기(non-atomic write)에 의해 발생하는 이 문제는 때때로, RAID 쓰기 구멍(RAID write hole)이라고 지칭되며, 최종 결과에서 많이 나타날 수 있다. 예를들어, 저장 장치(들)이 이 에러를 보수하는 방식을 결정하는 것, 가령, 오정합이 잘못된 검증자를 나타내는지, 데이터 세트의 의도치 않은 변경(가령, 저장소 세트의 비트율(BER)의 발현)을 나타내는지, 또는 데이터 세트와 검증자 중 하나의 잘못된 읽기를 나타내는지를 결정하는 것이 어려울 수 있다. 이러한 정보의 부족이 종종 최근 써지지 않은 데이터 세트의 일부분의 정확도에 대한 신뢰도(confidence)를 약화시킬 수도 있다. 예를 들어, 저장 장치들 중 하나에 장애가 발생한 경우, (잘못된 검증자를 이용해) 나머지 저장 장치로부터 상기 저장 장치 상의 데이터를 복구하기 위한 시도가 잘못된 데이터 재구성을 초래할 수 있다. 예를 들어, 손실 또는 오염되어 보수 또는 대체 저장 장치로 교체된 특정 볼륨으로부터 데이터를 복구하기 위해, 빠진 저장 장치 상의 데이터의 각각의 워드는, 동일한 위치(가령, 타 장치 상의 동일한 물리적 또는 논리적 주소)에서의 워드를, 사기 주소에서의 워드의 세트에 대한 체크섬(checksum)과 함께 XOR 연산함으로써 계산되어, 빠진 워드를 도출할 수 있다. 그러나 체크섬이 의도치 않게 변경된 경우, XOR 연산은 잘못된 결과를 도출하고 교체된 볼륨 상의 워드가 잘못된 데이터로 대체되게 된다. 또 다른 예를 들면, 검증자 C가 부분 A 및 B를 포함하는 데이터 세트에 대해 저장되고, A와 C를 업데이트하는 동안 재난적 장애가 발생한 경우, 상기 컴퓨터는 데이터 세트 [A, B]와 검증자 C 간의 오정합을 식별할 수 있다. 이러한 불능 상태는 재난적 장애의 순간에 쓰기에 참여 중이었던 A 및 C에서뿐 아니라 장기간 액세스되지 않았을 수 있는 B에 대해서도 신뢰도를 약화시킬 수 있다.
문제, RAID 쓰기 구멍에 의해 야기되는 데이터 손실 및 연장되는 복구 시간의 위험을 감소시키고, 저장소 세트의 효율을 개선하기 위한 기법이 본원에 제공된다. 이들 기법에 따라, 저장소 세트의 하나 이상의 저장 장치 상에, 저장소 세트로 커밋될 데이터 세트를 저장하도록 구성된 저널이 생성될 수 있다. 저널은, 가령, 루프 배열(loop array)로서 구조화된 레코드의 시퀀스를 포함할 수 있으며, 여기서 각각의 레코드가 데이터 세트 및 상기 데이터 세트에 대해 계산된 검증자를 저장하기 위한 용량을 가진다. 저장소 세트로 써질 모든 데이터 세트가 우선, 수신된 순서(sequential order of receipt)로, 상기 데이터 세트에 대해 계산된 검증자와 함께 저널에 저장될 수 있다.
이들 기법은 저장소 세트 내 위치로 커밋되기 전에 비-원자적 쓰기가 저장 장치의 비휘발성 메모리 상에 저장될 수 있도록 하는 메커니즘을 제공함으로써, RAID 쓰기 구멍의 결과를 감소시킬 수 있다. 데이터 세트가 저널에 써지는 중에 장애가 발생한 경우, 저장소 세트에 저장된 데이터 세트의 버전이 온전하게 유지되고, 데이터 세트가 저장소 세트에 써지는 중에 장애가 발생한 경우, 저널에서 저장소 세트로의 데이터 세트의 쓰기를 재개함으로써, 장애는 복구될 수 있다. 덧붙여, 저널의 사용은 순차 쓰기를 촉진시킴으로써, 저장 장치의 성능을 개선할 수 있다. 제 1 예시로서, 비-순차적 데이터 세트가 우선 저널에 순차적으로 써져서, 비-순차적 데이터 세트에 대해서도 빠르고 순차적인 쓰기 처리가 제공될 수 있다. 제 2 예시로서, 저널은 쓰기 요청과 저장소 세트 사이에 쓰기 버퍼로서 동작하여, 저자 d장치의 연속 물리적 위치에 저장된 데이터의 시퀀스를 포함하는 쓰기 요청들의 병합을 가능하게 한다. 가령, 비휘발성 저장 장치 상에 저장된 저널의 휘발성 메모리 표현을 생성함으로써, 또 다른 성능 개선이 이뤄질 수 있으며, 여기서 휘발성 메모리 표현은 읽기 캐시 및/또는 쓰기 버퍼로서 기능한다. 본원에 제공된 기법을 이용함으로서 이러한 그리고 그 밖의 다른 이점이 얻어질 수 있다.
앞서 언급된 관련 목적을 달성하기 위해, 이하의 기재 및 도면에서 특정 예시적 양태 및 구현예가 제공된다. 이들은 하나 이상의 양태가 사용될 수 있는 다양한 방식 중 몇 가지에 불과하다. 본원의 그 밖의 다른 양태, 이점, 및 신규한 특징이, 첨부된 도면과 함께, 다음의 상세한 설명으로부터 자명해질 것이다.
도 1은 저장 장치 상의 저장소 세트를 포함하는 데이터 세트의 예시적 저장을 도시한다.
도 2는 저장소 세트 내에서의 쓰기 연산 동안의 장애의 결과를 도시하는 예시적 시나리오를 도시한다.
도 3은 본원에 제공된 기법에 따르는 저장 장치 상의 저장소 세트를 포함하는 데이터 세트의 예시적 저장을 도시한다.
도 4는 본원의 기법에 따르는 적어도 하나의 저장 장치 상의 저장소 세트를 포함하는 데이터 세트를 저장하는 제 1 예시적 방법을 도시하는 흐름도이다.
도 5는 본원의 기법에 따르는 적어도 하나의 저장 장치 상의 저장소 세트를 포함하는 데이터 세트를 저장하는 제 2 예시적 방법을 도시하는 흐름도이다.
도 6은 본원의 기법에 따르는 적어도 하나의 저장 장치 상의 저장소 세트를 포함하는 데이터 세트를 저장하도록 구성된 프로세서 실행형 명령을 포함하는 예시적 컴퓨터 판독형 저장 매체를 도시한다.
도 7은 데이터 세트의 검증자를 계산하기 위한 다양한 기법을 특징으로 하는 예시적 시나리오를 도시한다.
도 8은 저장 장치의 비휘발성 매체에 저장되는 저널의 휘발성 메모리 표현의 사용을 특징으로 하는 예시적 시나리오를 도시한다.
도 9는 저장 장치 상에 저장된 저널과 저널의 휘발성 메모리 표현 사이의 저장 장치의 쓰기 버퍼와의 상호대화를 특징으로 하는 제 1 예시적 시나리오를 도시한다.
도 10은 저장 장치 상에 저장된 저널과 저널의 휘발성 메모리 표현 사이의 저장 장치의 쓰기 버퍼와의 상호대화를 특징으로 하는 제 2 예시적 시나리오를 도시한다.
도 11은 본원의 프로비저닝 중 하나 이상이 구현될 수 있는 예시적 컴퓨팅 환경을 도시한다.
도 2는 저장소 세트 내에서의 쓰기 연산 동안의 장애의 결과를 도시하는 예시적 시나리오를 도시한다.
도 3은 본원에 제공된 기법에 따르는 저장 장치 상의 저장소 세트를 포함하는 데이터 세트의 예시적 저장을 도시한다.
도 4는 본원의 기법에 따르는 적어도 하나의 저장 장치 상의 저장소 세트를 포함하는 데이터 세트를 저장하는 제 1 예시적 방법을 도시하는 흐름도이다.
도 5는 본원의 기법에 따르는 적어도 하나의 저장 장치 상의 저장소 세트를 포함하는 데이터 세트를 저장하는 제 2 예시적 방법을 도시하는 흐름도이다.
도 6은 본원의 기법에 따르는 적어도 하나의 저장 장치 상의 저장소 세트를 포함하는 데이터 세트를 저장하도록 구성된 프로세서 실행형 명령을 포함하는 예시적 컴퓨터 판독형 저장 매체를 도시한다.
도 7은 데이터 세트의 검증자를 계산하기 위한 다양한 기법을 특징으로 하는 예시적 시나리오를 도시한다.
도 8은 저장 장치의 비휘발성 매체에 저장되는 저널의 휘발성 메모리 표현의 사용을 특징으로 하는 예시적 시나리오를 도시한다.
도 9는 저장 장치 상에 저장된 저널과 저널의 휘발성 메모리 표현 사이의 저장 장치의 쓰기 버퍼와의 상호대화를 특징으로 하는 제 1 예시적 시나리오를 도시한다.
도 10은 저장 장치 상에 저장된 저널과 저널의 휘발성 메모리 표현 사이의 저장 장치의 쓰기 버퍼와의 상호대화를 특징으로 하는 제 2 예시적 시나리오를 도시한다.
도 11은 본원의 프로비저닝 중 하나 이상이 구현될 수 있는 예시적 컴퓨팅 환경을 도시한다.
지금부터 청구되는 발명이 도면을 참조하여 기재되며, 전체에 걸쳐 유사한 도면부호가 유사한 요소를 지칭하도록 사용된다. 다음의 기재에서, 설명을 목적으로, 청구되는 발명의 완전한 이해를 제공하기 위해 많은 특정 상세사항이 제공된다. 그러나 청구되는 발명이 이들 특정 상세사항 없이도 실시될 수 있음이 자명할 수 있다. 그 밖의 다른 경우, 청구되는 발명의 기술을 촉진하기 위해, 블록도 형태로 구조와 장치가 도시된다.
A. 소개
컴퓨팅의 분야에서, 많은 시나리오가 하나 이상의 저장 장치의 세트 상의 일련의 데이터 세트를 포함하는 포함하는 저장소 세트(storage set)의 저장과 관련된다. 예를 들어, 사용자가 하드 디스크 드라이브의 세트에 걸쳐 하나의 아카이브(archive)를 생성하기를 원할 수 있고, 상기 아카이브 내에 하나 이상의 데이터 세트(가령, 바이트, 워드, 데이터의 블록 또는 시퀀스, 파일, 또는 레코드)를 저장할 수 있다. 일부 시나리오에서, 저장 장치(들)는 전체적으로 데이터의 저장을 위해 할당될 수 있는데, 가령, 2-테라바이트 하드 디스크 드라이브가 2-테라바이트 저장소 세트를 제공하도록 구성될 수 있다. 다른 시나리오에서, 상기 저장소 세트는 데이터 액세스가능성(accessibility) 및/또는 복구(복구)를 촉진하는 방식으로 저장 장치 상에 중복으로(redundantly) 저장될 수 있는데, 가령, 1-테라바이트 데이터 세트가 2개의 1-테라바이트 하드 디스크 드라이브 상에 동일하게 저장되어, 어느 한 카피가 오염된 경우 백업(backup)을 제공할 수 있다. 복수의 저장 장치가 저장소 세트를 저장하기 위해 다양한 방식으로 상호운용하도록 구성될 수 있다.
이러한 많은 저장 스킴 및 특징이 RAID(Redundant Array of Inexpensive Disk)의 변형에 포함된다. 두 번째 예로서, RAID 0 저장 스킴에서, 둘 이상의 하드 디스크 드라이브의 전체 저장 공간이 데이터의 저장에 할당될 수 있고, 이로써 제 1 하드 디스크 드라이브가 저장소 세트의 하나의 부분에 저장된 데이터로의 액세스를 제공할 수 있으며, 이와 병렬로, 제 2 하드 디스크 드라이브가 저장소 세트의 또 다른 부분에 저장된 데이터로의 액세스를 제공할 수 있어서, 효과적으로 데이터 세트로의 액세스의 속도가 두 배가 된다(doubling)(그리고 또 다른 하드 디스크 드라이브 상에 저장된 저장소 세트의 부분에 대해 추가 증배를 포함할 가능성이 있다). 두 번째 예로서, RAID 1 저장 스킴에서, 제 1 하드 디스크 드라이브 전체가 저장소 세트를 저장하도록 할당될 수 있고, 미러(mirror)로서 동작하는 추가 디스크 드라이버가 상기 저장소 세트의 동일한 카피를 저장할 수 있다. 서로 다른 하드 디스크 드라이브에 의해 제공되는 저장소 세트로의 동시 액세스를 통해 성능 개선이 이뤄질 수 있다. 덧붙여, 임의의 하드 디스크 드라이브 상에서 저장소 세트의 완전한 카피가 액세스될 수 있고, (가령, 오염(corruption), 무응답(unresponsiveness), 부재(absence) 또는 손상(damage)으로 인해) 장애가 발생한 임의의 하드 디스크 드라이브는, 여기에 포함된 데이터의 이용 가능성을 위태롭게 하지 않으면서, 대체될 수 있다. 그러나 RAID 1 스킴이 저장소 세트의 용량을 상당히 감소시킨다(가령, 하드 디스크 드라이브의 추가가 저장소 세트의 용량을 증가시키지 않는다). 추가 RAID 변형이 저장소 세트의 용량을 최대화하면서 RAID 0 어레이와 RAID 1 어레이의 액세스 가능성, 성능, 및 장애 복구 속성의 균형을 맞출 수 있다. 예를 들어, 특정 크기의 하드 디스크 드라이브의 세트를 포함하는 RAID 4 어레이에서, 하나를 제외한 모든 하드 디스크 드라이브의 전체 용량이 저장 공간을 제공할 수 있으며, 예약된 하드 디스크 드라이브가 패리티 정보(가령, 다른 하드 디스크 드라이브 상에 저장된 데이터 세트 각각에 대한 배타적 논리합(XOR) 계산)를 저장할 수 있다. 이 구성은 저장 공간을 최대화(가령, 4개의 1-테라바이트 하드 디스크 드라이브를 포함하는 RAID 4 어레이가 3 테라바이트의 저장 공간을 제공)하면서, 또한 1-드라이브 장애를 용인하는데, 가령, 하드 디스크 드라이브 중 임의의 하나에 완전히 장애가 발생한 경우, 대체 하드 디스크 드라이브에 의해 대체될 수 있고, 장애 하드 디스크 드라이브 상의 데이터는 나머지 하드 디스크 드라이브 상에 저장된 데이터를 이용해 재구성될 수 있다. 예를 들어, 하드 디스크 드라이브 상에 저장된 각각의 데이터 세트에 대해 XOR 값을 재계산함으로써 장애 패리티 하드 디스크 드라이브가 단순히 재구성될 수 있고, 나머지 하드 디스크 드라이브 중 장애 하드 디스크 드라이브 상에 저장된 데이터가 가용 데이터 세트 및 XOR 패리티 값을 이용함으로써 재구성될 수 있다.
그러나 하나 이상의 저장 장치 상의 다양한 데이터 세트를 포함하는 저장소 세트의 저장과 관련된 시나리오 내에서, 저장소 세트의 성능 및/또는 신뢰성에 영향을 미치는 다양한 비효율성 및 문제가 발생할 수 있다. 도 1 및 2는 본원에 기재된 기법에 의해 해결될 수 있는 두 가지 이러한 문제의 예시를 도시한다.
도 1의 예시적 시나리오(100)에서, 일련의 데이터 세트(104)(가령, 저장소 세트(102)의 다양한 바이트, 워드, 데이터 블록, 파일, 또는 레코드)를 포함하는 저장소 세트(102)가 저장 장치(106)(가령, 하드 디스크 드라이브) 상에 저장될 수 있다. 저장소 세트(102)를 생성하거나 액세스하는 프로세스가 다양한 데이터 세트(104)를 포함하는 읽기 및/또는 쓰기 요청의 세트를 생성할 수 있고 상기 저장 장치(106)에 의해 수신되고 수행될 수 있다. 예를 들어, 하드 디스크 드라이브는 읽기/쓰기 헤드(108)를 포함할 수 있으며, 상기 읽기/쓰기 헤드는 회전하는 물리적 매체 위에 매달려 있고, 읽기/쓰기 헤드(108) 아래에서 회전하는 물리적 매체의 임의의 섹터 하에 저장된 데이터(가령, 데이터의 방사 라인(radial line))를 읽을 수 있다. 따라서 저장소 세트(102) 내에 제 1 위치(110)에 저장된 제 1 데이터 세트(104)가 수신될 때, 저장소 세트(102) 내 위치(110)와 정합되는 물리적 위치가 읽기/쓰기 헤드(108) 아래로 회전될 때까지 상기 하드 디스크 드라이브가 물리적 매체를 회전시킬 수 있고, 그 후 데이터 세트(104)를 물리적 매체에 쓸 수 있다. 그러나 이러한 하드 디스크 드라이브의 성능은 종종, 물리적 매체를 적절한 위치까지로 회전시키는 동안의 딜레이에 의해 제한된다. 이 딜레이는 순차 액세스(sequential access)를 통해 완화될 수 있는데, 가령, 물리적 매체 상의 물리적 위치의 시퀀스를 포함하는 3개의 데이터 세트(104)가 잇따라 써질 수 있고, 이로써, 읽기/쓰기 헤드(108) 하의 위치로 올바르게 위치설정할 때의 회전 딜레이의 수가 3회에서 1회로 감소된다. 종종 회전 딜레이가 하드 디스크 드라이브의 처리율에서 속도-제한 요인이 되기 때문에, 순차 액세스가 저장 장치(10^)의 처리율을 상당히 개선시킬 수 있다. 덧붙여, 데이터 세트(104) 각각에 대해, (도 1의 예시적 시나리오(100)에서 4-바이트 데이터 세트(104) 각각에 대해 계산된 패리티 바이트로서 나타나는) 검증자(112)가 계산되고 데이터 세트(104)와 함께 저장되며, 상기 데이터 세트(104)의 무결성을 검증하기 위해 사용될 수 있다. 도 1의 예시적 시나리오(100)가 1회 회전 탐색(rotational seek) 및 쓰기(write) 요청을 수행함으로써 데이터 세트(104) 및 검증자(112)가 저장될 수 있도록 섹터 내에서 검증자(112)를 데이터 세트(104)에 첨부(appending)함으로써 개선되는 효율을 제공한다.
도 1은 저장소 세트(102)의 데이터 세트(104)를 저장 장치(106)로 저장하는 것을 특징으로 하는 예시적 시나리오(110)를 도시한다. 이 예시적 시나리오(100)에서, 4개의 데이터 세트(104)의 시퀀스가 저장 장치(106)에 의해 수신되고 처리된다. 제 1 시점(114)에서, 저장소 세트(102) 내 제 1 위치(110)에서의 저장을 위해 제 1 데이터 세트(104)가 수신되고, 저장 장치(106)는 읽기/쓰기 헤드(108)를 물리적 매체의 대응하는 위치 위로 위치설정하기 위해 제 1 회전 탐색을 수행하고 제 1 데이터 세트(104) 및 이의 검증자(112)를 상기 물리적 매체에 쓸 수 있다(write). 제 2 시점(116)에서, 저장소 세트(102) 내 제 1 위치(110)에서의 저장을 위해 제 2 데이터 세트(104)가 수신되고, 상기 저장 장치(106)가 물리적 매체 상의 대응하는 위치 위로 읽기/쓰기 헤드를 위치설정하도록 제 2 회전 탐색을 수행하며, 제 2 데이터 세트(104) 및 이의 검증자(112)를 물리적 매체에 쓴다. 제 3 시점(108) 및 제 4 시점(110)에서 각각 제 3 데이터 세트(104) 및 제 4 데이터 세트(104)를 저장하기 위해 추가 회전 탐색 동작이 수행된다.
그러나 도 1의 예시적 시나리오(100)가 데이터 세트를 저장소 세트(102)로 씀에 있어 비효율의 일부 원인을 도시한다. 첫 번째 예로서, 제 1 데이터 세트(104) 및 제 3 데이터 세트(104)가 시퀀스(가령, 저장소 세트(102) 내 연속 위치(110)에 저장된 데이터 세트(102))를 포함하고 제 2 데이터 세트(104)와 제 4 데이터 세트(104)도 마찬가지이다. 예를 들어, 제 1 프로세스가 저장소 세트(102)로의 제 1 쓰기 시퀀스를 요청하면서 동시에 제 2 프로세스가 저장소 세트(102)의 서로 다른 부분으로의 제 2 쓰기 시퀀스를 요청할 수 있고, 상기 저장 장치(106)는 인터리빙된 방식(interleaved manner)으로 요청을 수신할 수 있다. 그러나 이 예시적 시나리오(100)에서, 저장 장치(106)는 수신 순서로 데이터 세트(104)를 물리적 매체에 쓰고, 따라서 데이터 세트(104)를 물리적 매체에 쓰기 위해, 4번의 회전 탐색을 수행한다. 이 쓰기 프로세스가 쓰기 요청이 수신되는 순서를 엄격하게 보존할 수 있는 한, 제 1 데이터 세트(104) 및 제 3 데이터 세트(102)를 저장하기 위해 제 1 회전 탐색을 수행하고 제 2 데이터 세트(104) 및 제 4 데이터 세트(104)를 저장하기 위해 제 2 회전 탐색을 수행함으로써 처리율의 개선이 얻어질 수 있다.
도 1에 도시된 비효율의 또 다른 원인은 다음 번 기록에 의해 즉시 덮어 써지는 저장소 세트(102)로 데이터를 불필요하게 쓰는 것으로부터 야기된다. 첫 번째 예를 들면, 제 2 데이터 세트(104) 및 제 4 데이터 세트(104)가 모두 저장소 세트(102) 내 동일한 위치(110)에 써진다. (특히, 덮어 쓰기가 이전 쓰기와 동일한 데이터를 쓰는 경우) 최신 쓰기(202)만 씀으로써, 덮어 쓰기의 인식(recognition)이 저장 장치(106)의 성능을 향상시킬 기회를 제공할 수 있다. 그러나 이 예시적 시나리오(100)에서의 저장 장치(106)가 이러한 인식을 얻지 못하고, 동일한 데이터 세트(104)를 저장소 세트(102) 내 동일한 위치(110)에 2번 쓰기를 불필요하게 수행한다. 두 번째 예시에서, 제 1 데이터 세트(104) 및 제 3 데이터 세트(104)를 포함하는 데이터 세트들(104) 중 제 1 세트(가령, 위치 0x0044-0047)에 대해 제 1 검증자(112)가 계산될 수 있고, 제 2 데이터 세트(104)와 제 4 데이터 세트(104)를 포함하는 데이터 세트(104) 중 제 2 세트(가령, 위치 0xA0F0-A0F3)에 대해 제 2 검증자(112)가 계산될 수 있다. 쓰기 요청이 수신되는 시퀀스 때문에, 상기 저장 장치(106)는 각각의 검증자(110)를 두 번 계산하고 쓴다(가령, 제 1 검증자(110)의 제 1 계산이 제 1 데이터 세트(103)에 대해 수행되고 상기 제 1 데이터 세트(103)와 함게 저장되고, 제 2 검증자(110)의 제 1 계산이 제 2 데이터 세트(104)에 대해 수행되고 상기 제 2 데이터 세트(104)와 함께 저장되며, 제 1 검증자(110)의 재계산이 제 3 데이터 세트(104)에 대해 수행되고 상기 제 3 데이터 세트(104)와 함께 저장되며, 제 2 검증자(110)의 재계산이 제 4 데이터 세트(104)에 대해 수행되고 상기 제 4 데이터 세트(104)와 함께 저장된다). 이들 재계산이 피해져서, 제 1 데이터 세트(104) 및 제 3 데이터 세트(104)에 대해 제 1 검증자(112)를 1회 계산하고 제 2 데이터 세트(104)와 제 4 데이터 세트(104)에 대해 제 2 검증자(112)를 1회 계산함으로써, 계산 및 쓰기의 횟수가 감소됐을 수도 있다. 이러한 그리고 그 밖의 다른 비효율이 저장 장치(106)가 저장소 세트(102)에 순차적으로 저장되는 데이터 세트(104)에 대한 쓰기 요청에 대해 포함된 계산 및/또는 쓰기를 축소시킬 수 있는 기회를 식별할 수 없음으로부터 초래될 수 있다.
도 2는 저장소 세트(102)에서 발생할 수 있는 문제의 두 번째 유형을 도시하는 예시적 시나리오(200)를 도시한다. 이러한 예시적 시나리오(200)에서, 저장 장치의 세트(106)가 검증자의 세트(112)를 갖는 저장소 세트(102)를 저장하도록 상호운용된다. 특히, 저장 장치들(106) 중 3개의 저장 장치가 특정 위치(110)와 연관된 3개의 데이터 세트(104)를 저장하고 제 4 저장 장치(106)는 3개의 데이터 세트(104)에 대해 검증자(112)를 저장하는데, 가령, 각각의 데이터 세트(104)는 단일 비트를 포함하고, 검증자(112)는 3개의 비트들의 배타적 논리합을 구함으로써 계산될 수 있다. (도 2의 예시적 시나리오(200)는, 이하의 설명을 간결화하기 위해, 각각의 데이터 세트(104)를 단일 비트로 도시하지만, 데이터 세트(104)는 임의의 크기를 가질 수 있다.) 임의의 데이터 세트(104)가 써질 때, 업데이트된 데이터 세트(104)와 정합되도록 제 4 저장 장치(106) 상에 저장되는 검증자(112)가 업데이트된다. 그러나 이 예시적 시나리오(200)에서 도시된 바와 같이, 다양한 저장 장치(106)로의 쓰기가 원자 단위로 그리고 엄격하게 동시 방식으로 발생하지 않을 수 있고 여러 다른 시점에서 발생할 수 있는데, 가령, 저장 장치(106) 상에 저장된 데이터 세트(104)와 제 4 저장 장치(106) 상의 검증자 모두 업데이트하기 위한 요청이 수신될 수 있으며, 그 밖의 다른 장치(106)가 쓰기 연산 중인 동안 저장 장치(106)가 유휴 상태이지 않는 한, 제 1 저장 장치(106)는 제 2 저장 장치(106) 전에 이의 쓰기 연산을 개시 및/또는 완료할 수 있다. 성능(가령, 회전 속도) 및 환경(가령, 물리적 매체의 현재 회전 위치로부터 쓰기 위치까지의 거리)의 저장 장치(104) 들 간의 변동이 역시 저장 장치(106)들 간 타이밍 차이에 기여할 수 있다. 예를 들어, 제 1 시점(204)에서, 제 3 저장 장치(106) 상에 저장된 데이터 세트(104) 및 제 4 저장 장치(106) 상에 저장되는 대응하는 검증자(112)를 업데이트하기 위해 쓰기(202)가 요청될 수 있다. 그러나 제 3 저장 장치(106)는 제 1 시점(204)에서 쓰기(202)를 시작 및/또는 완료하며, 제 4 저장 장치(106)는 제 2 시점(206)에서 검증자(112)로의 쓰기(202)를 완료할 수 있다.
도 2의 예시적 시나리오(200)에 도시된 저장 장치(106)의 불완전한 동기성(synchrony)이 저장 서비스의 장애의 경우 불일치를 발생시킬 수 있다. 예를들어, 제 3 시점(208)에서, 제 3 저장 장치(106)에 의해 저장된 데이터 세트(104) 및 제 4 저장 장치(106)에 의해 저장되는 대응하는 검증자(112) 모두에 대해 또 다른 쓰기(202)가 요청될 수 있다. 그러나 이 쓰기 프로세스 동안 컴퓨팅 환경의 장애(210)(가령, 전원 장애 또는 하드웨어나 소프트웨어 장애)가 발생할 수 있다. 종종 저장 장치(106) 및 저장 어레이가 이러한 많은 장애(210)를 견디도록 설계되지만, 이 장애(210)는 제 3 저장 장치(106)가 업데이트된 데이터 세트(104)의 쓰기를 완료한 후, 그러나 제 4 저장 장치(106)가 업데이트된 검증자(112)를 덮어 쓰기 전에, 발생할 수 있다. 제 4 시점(212)에서, 저장 장치(106)가 다시 액세스 가능할 때(가령, 전원이 복구될 때), 제 3 저장 장치(106)에 의해 저장되는 데이터 세트(104)의 업데이트와 검증자(112)를 업데이트하기 위한 제 4 저장 장치(106)의 장애가 불일치를 나타낸다: 상기 검증자(112)가 대응하는 데이터에 더 이상 정합되지 않는다. 단일 저장 장치(106)가 사용되는 경우에 유사한 시나리오가 발생될 수 있는데, 가령, 데이터 세트(104)의 제 1 카피의 업데이트와 제 2 카피의 업데이트 사이에 장애(210)가 발생한 경우 단일 읽기/쓰기 헤드(108)를 갖는 저장 장치(106) 상에 저장되는 데이터 세트(104)의 중복 카피(redundant copy)가 불일치를 나타낼 수 있다.
때때로 "RAID 쓰기 구멍(write hole)"이라고 식별되는 이 불일치는 몇 가지 문제점을 초래할 수 있다. 첫 번째 예로서, 하나 이상의 데이터 세트(104) 및/또는 검증자(112) 중 어느 것이 잘못된 것인지를 식별하는 것이 불가능할 수 있어서(가령, 제 4 저장 장치(106)가 검증자(112)를 업데이트한 후 그러나 제 3 저장 장치(106)가 데이터 세트(104)의 업데이트를 완료하기 전에 장애가 유사하게 발생할 수 있다), 검증자(112)에 의해 표현되는 모든 데이터 세트(102)- 쓰기(202)와 관련되지 않은 제 1 및 제 2 저장 장치(106) 상에 저장된 데이터 세트(104)일지라도 - 의 무결성이 위태로워진다. 두 번째 예로서, 이 불일치는 즉시 발견되지 않을 수 있으며, 저장소 세트(102) 내에 오래 머물 수 있다. 따라서, 저장 장치(106)가 이용 불가능해지는 경우(가령, 제 1 저장 장치(106)에 완전히 장애가 발생하거나 제거된 경우), 제 1 저장 장치(106) 상에서 데이터를 재구성하기 위한 시도가 그 밖의 다른 저장 장치 상의 데이터를 이용할 수 있지만, 불일치가 데이터의 잘못된 재구성을 초래할 수 있다. 따라서 어레이가 단일 저장 장치(106)의 장애로부터 복구되기 위한 기대 능력을 제공하지 못한다. 이들 및 그 밖의 다른 문제가 관련 데이터 세트(104)를 저장소 세트(102)에 저장하는 동안 저장 장치(106)의 상호운용의 불완전한 동기성으로부터 초래될 수 있다.
B. 본 발명의 기법
도 1 및 도 2의 예시적 시나리오에서 도시된 것을 포함할 수 있는 저장 시나리오에서 발생할 수 있는 문제 및/또는 비효율성 중 일부를 해결하기 위한 기법이 본원에서 제공된다. 이들 기법에 따르면, 저장소 세트(102)를 저장하는 저장 장치(106) 중 하나 이상에서 저널(journal)이 생성될 수 있다. 저장소 세트(102)에 써질 데이터 세트(104) 및 검증자(112)가 상기 저널에 우선 써질 수 있다. 덧붙여, 상기 저널은 데이터 세트(104)의 쓰기 순서의 시퀀스로 구조화된 데이터 세트(104)의 시퀀스로서 구조화되어, 저장소 세트(102)의 다양한(비순차적) 위치(110)에 데이터 세트(104)를 쓰기 위한 요청의 스트림을 수신한 저장 장치(106)가 상기 데이터 세트(104)를 우선 저널에 순차적으로 저장할 수 있다. 덧붙여, 저장소 세트(102) 내 요청된 위치(110)로 데이터를 커밋(commit)하기 위해, 배치(batch)로 써질 수 있는 복수의 데이터 세트가 선택될 수 있다. 예를 들어, 저널은 저장소 세트(102)로 써질 데이터 세트(104)를 순차적으로 인큐잉(enqueue)할 수 있으며, 큐의 앞부분(front)에서 동일한 배치에서 써질 수 있는 데이터 세트(104)들 중 하나의 세트를 주기적으로 선택할 수 있다.
도 3은 저장 장치(106)의 비휘발성 매체 상에 저장된 저널(302)을 이용하여 저장소 세트(102)로의 데이터 세트(104) 및 대응하는 검증자(112)의 저장을 도시하는 예시적 시나리오(330)의 도시를 제공한다. 이 예시적 시나리오(300)에서, 저장소 세트(102)의 적어도 일부분을 포함하며 데이터 세트(104)를 저장하도록 구성된 저장 장치(106) 상에, 이러한 데이터가 저장소 세트(102)에서 커밋(commit)되기 전에, 데이터 세트(104) 및 이에 대응하는 검증자(112)를 저장하도록 구성된 저널(302)이 생성된다. 특히, 이 예시적 시나리오(300)에서 저널(302)은 데이터 세트(104), 저장소 세트(102) 내 데이터 세트(104)의 위치(110) 및 데이터 세트(104)에 대한 검증자(112)를 저장하는 레코드(304)의 시퀀스로서 구조화된다. 저널(302)의 레코드(304)는 큐의 시작부분(즉, 저널(304) 내에서 가장 오래된 데이터 세트(104))을 식별하는 테일 포인터(tail pointer)(306)와 큐의 끝부분(즉, 상기 저널(304)에 써진 가장 최신 데이터 세트(104))을 식별하는 헤드 포인터(head pointer)(308) 에 의해 큐로서 구조화된다. 제 1 시점(310)에서, 저널(302)은 초기에 비어 있고(즉, 헤드 포인터(308) 및 테일 포인터(306)가 동일한 레코드(304)를 가리킴), 저장소 세트(102) 내에 저장될 3개의 데이터 세트(104)의 시퀀스를 수신하면, (가령, 레코드(304)를 할당하기 위해 헤드 포인터(308)를 이동시키고, 그 후 데이터 세트(104)를 상기 레코드(304)에 씀으로써) 상기 저장 장치(106)는 3개의 데이터 세트(104)를 순차적으로 상기 저널(302)에 레코딩할 수 있다. 제 2 시점(312)에서, 3개의 추가 데이터 세트(104)를 쓰기 위한 요청의 시퀀스가 수신될 수 있고, 헤드 포인터(308)를 증분시키고 데이터 세트(104)를 저널(302)의 레코드(304)에 씀으로써, 저널(302)에 저장될 수 있다. 덧붙여, 제 3 시점(314)에서, 상기 저장 장치(106)는 데이터 세트(104) 각각에 대해 검증자(112)를 계산하고, (아마도 저널(302) 및/또는 저장소 세트(102)에 저장된 그 밖의 다른 데이터 세트(104)를 이용하여) 검증자(112) 각각을 저널(302)에 쓸 수 있다. 제 4 시점(316)에서, 가령, 저널(392)로부터 커밋될 데이터 세트(104)의 배치(318)를 선택하고 상기 데이터 세트(104) 및 이에 대응하는 검증자(112)를 상기 저장소 세트(102)에 씀으로써, 저장 장치(106)는 저장소 세트(102)로의 데이터 세트(104)의 배치(318)를 커밋할 수 있다. 그 후 (가령, 테일 포인터(306)를 레코드(302)를 지나 전진시킴으로써) 저장소 세트(102)로 커밋된 데이터 세트(104)에 대한 레코드(304)가 저널(302)로부터 제거될 수 있다. 이러한 방식으로, 본원에서 제공된 기법에 따라 데이터 세트(104)가 저장소 세트(102)로 커밋될 수 있다.
본원에 제공되는 기법들 중 일부의 예시적 사용에 대한 도 3의 도시는 획득될 수 있는 일부 잠재적인 이점을 보여준다. 첫 번째 예시로서, 시퀀스를 포함하는 데이터 세트(104)에 대한 쓰기 요청이 저장소 세트(102)의 다른 위치(110)에 저장될 다른 데이터 세트(104)와 인터리빙되는 경우, 이러한 데이터 세트(104)가 정확한 시퀀스 순서로 수신되지 않은 경우, 및/또는 데이터 세트(104)를 쓰기 위한 요청들 간에 짧은 딜레이가 발생하는 경우라도, 데이터 세트의 일괄처리(batching)가 저장소 세트(102) 내 위치(110)의 연속되는 시퀀스로 써질 수 있는 둘 이상의 데이터 세트(104)의 시퀀스를 합병할 수 있다. 두 번째 예시로서, 데이터 세트(104)의 일괄처리가 짧은 시간 프레임 내에 수신되는 동일한 데이터의 덮어 쓰기를 감소시킴으로써 저장 장치(106)의 효율을 향상시킬 수 있다. 예를 들어, 특정 데이터 세트(104)를 덮어 쓰기 위한 복수의 요청이 하나의 배치(batch)로 그룹화될 수 있고, 저장소 세트(102) 내 위치(110)로의 데이터 세트(104)의 단일 쓰기(single write)를 통해 수행될 수 있다. 예를 들어, 도 3의 예시적 시나리오(300)에서 배치(318)의 선택은 테일 포인터 근방에 있지만 저널(302)에 저장된 다음 번 쓰기(202)에 의해 덮어 써지는 데이터 세트(104)를 생략한다. 세 번째 예를 들면, 동일한 검증자(112)에 의해 표현되는 데이터 세트(104)를 쓰기 위한 개별 요청이, 동일한 배치로 그룹화되는 경우, 검증자(112)의 복수의 개별적인 업데이트 대신, 검증자(112)의 단일 계산 및 쓰기를 도출할 수 있다. 네 번째 예로서, 배치(318)를 보수적으로(conservatively) 선택함으로써(가령, 저널(302)을 적극적으로 비우지 않고, 일부 레코드(304)를 남겨둠으로써), 기법은 장래의 효율 이득에 대한 기회를 식별하고 얻을 수 있다. 예를 들어, 최근에 수신되었고 추가 데이터 세트(104)를 쓰기 위한 요청이 즉시 뒤따를 수 있기 때문에, 위치 0x03C0에 써질 데이터 세트(104)가 배치(318)에 대해 선택되지 않는다. 따라서 데이터 세트(104)를 위치0x03C1에 쓰기 위한 다음 번 요청이 수신되고 저널(302)에 저장될 수 있을 때, 두 데이터 세트(104) 모두 미래의 배치(318)에 대해 선택될 수 있고, 이로써, 두 개의 개별 쓰기(202)를 발행(issue)하기보다는 두 데이터 세트(104)를 함께 시퀀스로 커밋할 수 있다.
도 3의 예시적 시나리오(300)에 도시된 본원에서 개시된 기법의 두 번째 가능한 이점은 RAID 쓰기 구멍(RAID write hole)의 발생률과 결과의 감소이다. 데이터 세트(104)를 업데이트하기 위한 요청을 우선 저장 장치(106)의 비휘발성 매체 상의 저널에 커밋하고, 그 후, 상기 데이터 세트(104) 및 검증자(112)를 저장소 세트(102)로 이동시킴으로써, 이들 간의 불일치가 피해질 수 있다. 예를 들어, 데이터 세트(104) 및/또는 검증자(112)가 저널에 써지는 동안 장애(102)가 발생한 경우, 복구 프로세스가 상기 저널에 불완전하게 써졌음을 검출할 수 있고, 상기 저널의 불완전한 부분을 폐기할 수 있다. 이러한 폐기가 쓰기(202)의 손실을 초래할 수 있는 동안, 이러한 쓰기(202)는 저장소 세트(102)로 아직 커밋되지 않았고 이러한 쓰기(202)를 요청하는 프로세스로 확인되지 않았으며, 따라서 안전하게 소실될 수 있다. 덧붙여, RAID 쓰기 구멍과 관련된 불완전한 쓰기에 의해 저장소 세트(102)의 일치성(consistency)이 약화되지 않는다. 또한 저널의 콘텐츠가 저장소 세트(102)로 커밋되는 중에 장애(210)가 발생한 경우, 저널에 저장된 데이터 세트(104)를 저장소 세트(102)로 재-커밋(recommit)함으로써, 상기 저장 장치(106)가 장애(210)로부터 복구될 수 있다. 이러한 방식으로, 개선된 성능 및/또는 RAID 쓰기 구멍 같은 문제에 의해 초래되는 불일치의 감소된 발생율을 갖고, 저장소 세트(102)로의 쓰기(202)가 수행될 수 있다. 본원에 기재된 기법에 따라 저장소 세트(102)로의 데이터 세트(104)의 저장을 통해 이들 그리고 그 밖의 다른 이점이 얻어질 수 있다.
C. 예시적
실시예
도 4는 적어도 하나의 저장 장치(106)에 의해 제공되는 저장소 세트(102) 내에 데이터 세트(104)를 저장하는 제 1 예시적 방법(400)으로서, 이들 기법의 제 1 예시적 실시예를 도시한다. 상기 예시적 방법(400)은, 가령 장치의 메모리 컴포넌트(가령, 메모리 회로, 하드 디스크 드라이브의 플래터, 솔리드-스테이트 메모리 컴포넌트, 또는 자성 또는 광 디스크)에 저장되며, 장치의 프로세서에 의해 실행될 때, 장치가 본원에 제공된 기법을 수행하도록 하는 명령(instruction)의 세트로서 구현될 수 있다. 예시적 방법(400)은 단계(402)에서 시작되며 프로세서 상의 명령을 실행하는 단계(404)를 포함한다. 특히, 상기 명령은 적어도 하나의 저장 장치(106) 상에 검증자(112)와 각각 연관된 데이터 세트(104)를 저장하도록 구성된 저널(302)을 생성(406)하도록 구성된다. 또한 명령은, 저장소 세트(102) 내 위치(110)에서 데이터 세트(104)를 저장하기 위한 요청을 수신하면, 상기 저널(302)에 데이터 세트(104)를 저장(408)하도록 구성된다. 또한 명령은 상기 저널(302)에 저장되며, 저장소 세트(102)로 커밋될 데이터 세트의 배치(batch)(318)를 선택(410)하도록 구성된다. 상기 명령은 배치(318)의 데이터 세트(104) 각각에 대해(412), 검증자(112)를 계산(414)하고, 상기 검증자(112)를 저널(302)에 저장하며(416), 상기 데이터 세트(104) 및 데이터 세트(104)의 검증자(112)를 저장소 세트(102)에 저장(418)함으로써, 저장소 세트(102)로의 이러한 커밋을 이룰 수 있다. 또한 명령은, 데이터 세트(104) 및 상기 데이터 세트(104)의 검증자(112)를 저장소 세트(102)에 저장한 후, 상기 데이터 세트(104)를 저널(302)로부터 제거하도록 더 구성된다. 이러한 방식으로, 명령은 본원에 제공된 기법에 따라 상기 저장소 세트(102)에 데이터 세트(104)를 저장하는 것을 이루고, 예시적 방법(400)은 단계(420)에서 종료된다.
도 5는 적어도 하나의 저장 장치(106)에 의해 제공되는 저장소 세트(102)에 데이터 세트(104)를 저장하는 제 2 예시적 방법(500)으로서, 이들 기법의 제 2 실시예를 도시한다. 상기 예시적 방법(500)은, 가령 장치의 메모리 컴포넌트(가령, 메모리 회로, 하드 디스크 드라이브의 플래터, 솔리드-스테이트 메모리 컴포넌트, 또는 자성 또는 광 디스크)에 저장되며, 장치의 프로세서에 의해 실행될 때, 장치가 본원에 제공된 기법을 수행하도록 하는 명령의 세트로서 구현될 수 있다. 상기 예시적 방법(500)은 단계(502)에서 시작하고 장치로 명령을 전송하는 단계(504)를 포함한다. 구체적으로, 상기 명령은 저장 장치(106) 상에 레코드(304)의 시퀀스, 헤드 포인터(308), 및 테일 포인터(306)를 포함하는 저널(302)을 생성(506)하도록 구성된다. 상기 명령은 저장소 세트(102) 내의 위치(110)에 저장될 데이터 세트(104)를 수신(508)하면, 저널(302)의 헤드 포인터(308)를 새 레코드(304)를 지나 전진시키고(510), 데이터 세트(104)를 새 레코드(304)에 저장한다(512). 또한 명령은 저장소 세트(102)로의 커밋을 위해 저널(302)의 테일 포인터(306) 근처에 적어도 하나의 선택된 데이터 세트(104)를 선택(514)하도록 구성된다. 각각의 선택된 데이터 세트(104)에 대해(516), 명령은 선택된 데이터 세트(104)에 대해 검증자(112)를 계산하고(518), 상기 선택된 데이터 세트(104)의 검증자(112)를 저널(302)에 저장하며(520), 선택된 데이터 세트(104) 및 상기 데이터 세트(104)의 검증자를 상기 저장소 세트(102)로 커밋하도록(522) 구성된다. 상기 명령은 또한 저널(302)의 테일 포인터(306)를 적어도 하나의 선택된 데이터 세트(104)를 포함하는 레코드(304)를 지나 전진시키도록(524) 구성된다. 이러한 방식으로 명령은 본원에 제공된 기법에 따라 저장소 세트(102)에 데이터 세트(104)를 저장한느 것을 이루고, 상기 예시적 방법(500)은 단계(526)에서 종료된다.
도 6은 본원에서 제공되는 기법을 적용하도록 구성된 프로세서-실행형 명령(602)을 포함하는 예시적 컴퓨터 판독형 매체(600)로서 이들 기법의 제 3 예시적 실시예를 제공한다. 이러한 컴퓨터 판독형 매체는, 예를 들어, 유형의 장치(tangible device), 가령, 메모리 반도체(가령, 반도체 이용 정적 랜덤 액세스 메모리(SRAM), 동적 랜덤 액세스 메모리(DRAM) 및/또는 동기식 동적 랜덤 액세스 메모리(SDRAM) 기법), 하드 디스크 드라이브의 플래터, 플래시 메모리 장치, 또는 자성 또는 광 디스크(가령, CD-R, DVD-R, 또는 플로피 디스크)를 포함하는 컴퓨터 판독형 저장 매체이며, 장치(610), 가령 컴퓨터의 프로세서(612)에 의해 실행될 때 상기 장치(610)가 본원에서 제공된 기법을 구현하도록 하는 컴퓨터 판독형 명령의 세트를 인코딩한다. 이러한 컴퓨터 판독형 매체는 (컴퓨터 판독형 저장 매체와 구별되는 기법의 클래스로서) 다양한 유형의 통신 매체, 가령, 다양한 물리적 현상(가령, 전자기 신호, 음파 신호, 또는 광 신호)를 통해 다양한 유선 시나리오(가령, 이더넷 또는 광섬유 케이블) 및/또는 무선 시나리오(가령, 무선 로컬 영역 네트워크(WLAN), 가령 WiFi, 개인 영역 네트워크(PAN) 가령 블루투스(Blutooth) 또는 셀룰러 또는 라디오 네트워크)에서 전파될 수 있고, 장치의 프로세서에 의해 실행될 때 상기 장치가 본원에 제공된 기법을 구현하게 하는 컴퓨터 판독형 명령의 세트를 인코딩하는 신호를 포함할 수 있다. 이러한 하나의 실시예에서, 프로세서 실행형 명령(602)은 적어도 하나의 저장 장치(106)에 의해 제공되는 저장소 세트(102)에 데이터 세트(104)를 저장하는 방법, 가령, 도 4의 제 1 예시적 방법(400) 또는 도 6의 제 2 예시적 방법(500)을 수행하도록 구성될 수 있다. 이러한 많은 컴퓨터 판독형 매체는 해당 분야의 통상의 기술자에 의해서 고안될 수 있고 본원에 제공된 기법에 따라 동작하도록 구성된다.
D.
변형예
본원에 언급된 기법은 많은 양태로의 변형되어 고안될 수 있으며, 일부 변형예가 이들 그리고 그 밖의 다른 기법의 그 밖의 다른 변형예와 비교할 때 추가 이점을 제공할 수 있고 단점을 감소시킬 수 있다. 덧붙여, 일부 변형예들은 조합되어 구현될 수 있고, 일부 조합은 시너지 협업을 통해 추가 이점 및/또는 감소된 단점을 특징으로 가질 수 있다. 변형예들이 다양한 실시예(가령, 도 4의 제 1 예시적 방법(400) 및 도 5의 제 2 예시적 방법(500))에 포함되어 이러한 실시예에 개별적 및/또는 시너지 이점을 부여할 수 있다.
D1
. 시나리오
이들 기법의 실시예들 간에 변화할 수 있는 제 1 양태는 이러한 기법이 사용될 수 있는 시나리오와 관련된다. 제 1 변형예로서, 이들 기법은 각자의 주소에 저장되는 값의 세트를 각각 포함하는 하나 이상의 볼륨(volume), 파일의 세트를 각각 포함하는 파일 시스템, 레코드의 세트를 각각 포함하는 데이터베이스, 미디어 객체의 세트를 각각 포함하는 미디어 라이브러리, 애플리케이션의 세트를 각각 포함하는 애플리케이션 세트, 및 볼륨의 세트 및/또는 가상 머신의 메모리를 각각 포함하는 컴퓨팅 환경 서버를 포함하여, 많은 유형의 저장소 세트(102) 및 데이터 세트(104)를 관리하도록 사용될 수 있다. 덧붙여, 저장소 세트(102) 내의 데이터 세트(104)의 식별의 입도(granularity)가 서로 다른 시나리오 간에 달라질 수 있는데, 가령, 볼륨을 포함하는 저장소 세트(102)가 저널링(journal)하고 저장소 세트(102)로 비트, 바이트, 다양한 길이의 워드, 다양한 길이의 데이터 블록, 또는 섹터를 포함하는 데이터 세트(104)를 커밋(commit)하기 위한 기법을 이용할 수 있다.
제 2 변형예로서, 이들 기법은 저장소 세트(102) 및 데이터 세트(104)를 다양한 유형의 휘발성 및 비휘발성 저장 장치(106), 가령, 하드 디스크 드라이브, 솔리드-스테이트 저장 장치, 자성 또는 광 테이프 저장 장치, 및 자성 또는 광 디스크 상에 저장하는 것을 관리하도록 사용될 수 있다. 저장소 세트(102)를 저장하는 데 포함되는 저장 장치(106)의 개수도 달라질 수 있는데, 가령, 이들 기법은 단일 저장 장치(106), 저장 장치(106)의 소형의 강 집적(tightly integrated) 세트(가령, RAID 어레이), 또는 대형이거나 및/또는 넓게 분산될 수 있는 저장 장치(106)의 약 집적(loosely integrated) 세트(가령, 여러 다른 세계 지역에 배치되며 인터넷을 통해 통신하는 저장 장치(106)의 세트)상의 저장소 세트(102)의 저장을 관리하도록 사용될 수 있다. 하나의 예시로서, 이들 기법은 저장 장치(106)의 다양한 유형의 RAID 어레이에서 구현되는 서로 다른 RAID 레벨과 함께 사용되기에 적합할 수 있다. 덧붙여, 상기 저장소 세트(102)를 저장하는 저장 장치(106)는 또한 혼합된 유형일 수 있고, 다양한 계층구조적 배열(hierarchical arrangement)에 따라 조직될 수 있다(가령, 저장소 세트(102)는 우선, 비교적 고성능의 주 저장장치(106) 상에 저장될 수 있고, 상기 주 저장 장치가 비교적 저성능의 오프사이트 아카이브 저장 장치(106)로 백업된다). 또한 기법은, 저장소 세트(102)와 저장 장치(106)의 다양한 속성, 가령, 저장소 세트(102)에 적용되는 비용, 가용성, 신뢰도, 성능 수요, 및 감도 및 보안 척도, 및 저장 장치(106)의 능력의 관점에서 그리고 이들 속성에 맞춰 구현될 수 있다.
이 제 1 양태의 제 3 변형예는 특히, 저장소 세트(102)가 복수의 저장 장치(106)에 걸쳐 있는 경우, 저장 장치(106)와 저널(302)의 관계에 관한 것이다. 제 1 예시로서, 저널(302)은 하나 이상의 개별 저장 장치(106)들에 걸쳐 할당된 저장소 세트(102)에 대한 하나의 저장 장치(106) 상에 배타적으로(exclusively) 저장될 수 있다. 대안적으로, 저널(302)은 저장소 세트(102)의 부분 또는 전체로서 동일한 저장 장치(106) 상에 저장될 수 있다. 제 2 예시로서, 저장 장치(106)들 사이에 복수의 저널(302)이 생성될 수 있다. 예를 들어, 복수의 저장 장치(106)에 걸쳐 있는 하나의 저장소 세트(102)에 대해, 저널(302)이 각각의 저장 장치(106) 상에서, 상기 저장 장치(106) 상에 저장된 저장소 세트(102)의 일부분에서의 데이터 세트(104)의 저장을 위해 생성될 수 있다. 대안적으로, 개별 저장 장치(106) 상의 저널(302)은 저장소 세트(102) 내 특정 위치와 연관되지 않을 수 있는데, 가령, 상기 저장소 세트(102)에 써질 데이터 세트(104)가 저장소 세트(102)로 커밋되기 전에 임의의 저널에 저장될 수 있다. 이 변형예는 분산형 저널링 프로세스(decentralized journaling process)를 제공할 수 있는데, 가령, 데이터 세트(104)는 가장 짧은 I/O 큐를 갖는 저장 장치(106)의 저널(302)에 써질 수 있거나, 저장 장치(106)의 지리적으로 분산된 세트들 간에 공유되는 하나의 저장소 세트(102)에 대해, 쓰기 프로세스로의 가장 높은 액세스 가능성(accessibility)을 제시하는 저장 장치(106)(가령, 프로세스와 지리적으로 가장 가깝거나, 및/또는 쓰기 프로세스와 통신하는 동안 가장 낮은 대기시간(latency) 또는 가장 높은 대역폭을 특징으로 하는 저장 장치(106))에 써질 수 있다. 이러한 제 3 예시로서, 저널(302)은 동일한 저장 장치(106) 상에 둘 이상의 카피로서 중복(redundantly) 저장될 수 있거나, 둘 이상의 저장 장치(106) 상에 미러 카피(mirror copy)로서 저장될 수 있거나, (가령, 스트라이핑(striping)에 의해) 둘 이상의 저장 장치(106)에 걸쳐 분산될 수 있어서, 다양한 RAID 저장 스킴에 의해 제공되는 것과 유사한 결함-허용 특징(fault-tolerance)을 저널(302)에 부여할 수 있다.
이 제 1 양태의 제 4 변형예가 각각의 데이터 세트(104)의 무결성(integrity)을 검증하기 위해 사용되는 검증자(112)의 유형과 관련된다. 일부 시나리오에서, 비교적 단순한 검증자(112), 예컨대, 데이터 세트(102)의 XOR로서 계산된 패리티 비트, 또는 데이터 세트(104)의 합(sum) 또는 해시코드(hashcode)가 사용될 수 있다. 단순한 검증자(112)가 비교적 저가치(low-value)의 저장소 세트(102), 비교적 저전력 저장 장치(106)(가령, 비교적 느린 하드웨어, 제한된 능력 메모리, 및 제한된 배터리 수명을 갖는 휴대용 장치 상의 저장 장치), 및/또는 더 빠르게 계산될 수 있는 검증자(1120)가 바람직할 수 있도록 성능이 매우 중요한 저장소 세트(102)에 대해 적합할 수 있다. 그 밖의 다른 시나리오에서, 추가 데이터 보안 특징을 제공할 수 있는 비교적 복잡한 검증자(112)가 사용될 수 있다. 예를 들어, 에러-정정 검증자(112), 가령, 해밍 코드(Hamming code)가 데이터 세트(104)가 정확한지 여부뿐 아니라, 데이터 세트(104) 및/또는 검증자(112)의 변화로 인해 불일치(inconsistency)가 발생했는지 여부까지 결정하도록 사용될 수 있다. 덧붙여, 저장소 세트(102) 내 서로 다른 세트 또는 유형의 데이터 세트(104)에 대해 서로 다른 유형의 검증자(112)가 사용될 수 있다(가령, 더 복잡하지만 견고한(durable) 검증자(112)가 더 가치 있는 데이터에 대해 사용될 수 있다). 해당 분야의 통상의 기술자라면, 이들 그리고 그 밖의 다른 유형의 변형 및 세부사항을 갖는 다양한 시나리오에서 본원에 제공된 기법을 구현할 수 있다.
D2
. 요소
실시예들 간에 달라질 수 있는 제 2 양태는 이들 기법의 요소의 변형을 포함한다. 제 1 변형예로서, 저널(302)을 생성(406)하는 동안 많은 기법이 사용될 수 있다. 예를 들어, 저널(302)은 많은 유형의 데이터 구조, 가령, 배열(array), 링크드 리스트(linked list), 테이블, 데이터베이스, 스택(stack), 큐(queue), 힙(heap), 또는 2진 트리(binary tree)를 포함할 수 있다. 여러 다른 구현예가 다양한 이점 및 단점(가령, 성능, 업데이트의 편의, 공간 효율성, 컴퓨팅 경제(computing economy), 및 저장 장치(106) 및/또는 저장소 세트(102)의 특성과의 호환성)을 제시할 수 있다. 여러 다른 유형의 저널(302)이 또한 저장소 세트(102)를 저장하는 서로 다른 저장 장치(106) 상에서, 및/또는 서로 다른 유형의 데이터 세트(104)에 대해 구현될 수 있다. 예를 들어, 배열(array)로서 구조화된 저널(302), 헤드 포인터(308) 및 테일 포인터(306)를 포함하고, 저널(302)의 임의의 레코드(304)로의 빠른 인덱싱(가령, O(1) 액세스 시간), 헤드 포인터(308) 및 테일 포인터(306)의 조작을 통한 레코드(304)의 효율적인 할당 및 재-사용, 및 (가령, 새로운 데이터 세트(104)를 저널(302)을 포함하는 레코드(304)의 시퀀스에 단순히 첨부함으로써) 저널(302)로의 데이터 세트(104)의 효율적인 저장의 이점을 제공할 수 있다.
이 제 2 양태의 제 2 변형예로서, 저장소 세트(102)로 커밋될 배치(318)를 선택(410)하는 것이 여러 방식으로 수행될 수 있다. 제 1 예시로서, 선택(410)은 많은 유형의 이벤트에 의해 개시될 수 있다. 예를 들어, 장치(610), 저장 장치(106), 또는 이들 기법을 구현하는 그 밖의 다른 유형의 장치가, 여러 유형의 커밋 이벤트가 검출되면, 배치(318)의 선택(410)을 개시할 수 있다. 이러한 커밋 이벤트(예시적 커밋 이벤트 세트를 포함)의 일부 예시로는, 저널(302)의 용량과 관련된 저널 용량 이벤트(journal capacity event)(가령, 저널(302)이 가득 차게 되는 이벤트), 저널(302)에 저장된 데이터 세트(104)의 지속시간과 관련된 지속시간 이벤트(duration event)(가령, 특정 연령(age)보다 오래된 데이터 세트(104), 가령, 1분보다 더 전에 저널(302)에 저장된 데이터 세트(104)), 저널(302) 내 적어도 하나의 데이터 세트(104)를 저장소 세트(102)로 커밋하기 위한 요청과 관련된 커밋 요청 이벤트(commit request event)(가령, 데이터 세트(104)의 쓰기(202)를 요청한 프로세스가 저장소 세트(102)로의 데이터 세트(104)의 커밋을 요청할 수 있다), 및 저장소 세트(102)의 적어도 하나의 저장 장치(106)의 작업부하와 관련된 저장 장치 작업부하 이벤트(storage device workload event)(가령, 저장 장치(106)가 입/출력 작업의 유휴 순간(idle moment)을 검출할 수 있고, 상기 유휴 수간을 이용해 일부 데이터 세트(104)를 저널(302)로부터 플러시(flush)할 수 있다)가 있다. 그 밖의 다른 여러 유형의 이벤트가 데이터 세트(104)를 저장소 세트(102)로 커밋하는 프로세스의 개시를 촉진시킬 수 있다.
제 2 양태의 이러한 제 2 변형의 제 2 예시로서, 저장소 세트(102)로 커밋될 데이터 세트(104)의 배치(318)의 선택이 여러 방식으로 수행될 수 있다. 예를 들어, 다음 번 쓰기(202)가 제 1 데이터 세트(104)의 덮어 쓰기를 특정한 경우, 및/또는 제 1 데이터 세트(104)를 뒤 따르고 상기 저장소 세트(102)에 함께 써질 수 있는 추가 데이터 세트(104)를 제공하는 경우(가령, 도 3의 예시적 시나리오(300)에서 제 4 시점(316)으로 도시됨), 쓰기 요청을 수신한 후 짧은 지속시간 동안 제 1 데이터 세트(104)를 저장소 세트(102)로 커밋하는 것을 유예(defer)시키는 것이 바람직할 수 있다. 그러나 뒤 따르는 제 2 데이터 세트(104)를 임박하여 수신할 감소된 확률 값이 데이터 세트(104)를 저널(302)의 레코드(304)로서 저장하는 것과 관련된 비용 및 복잡도를 상회할 때, 데이터 세트(104)의 커밋을 긴 시간 동안 유예시키는 것은 바람직하지 않을 수 있다. 덧붙여, 저장소 세트(102)로의 커밋의 효율을 개선하기 위해, 배치(318)를 포함하는 데이터 세트(104)를 선택하는 것이 바람직할 수 있다. 이러한 제 1 예시로서, 저널(302)에 저장된 제 1 데이터 세트(104)가 저장소 세트(102) 내 제 1 위치(110)에 저장될 배치(318)에 포함되도록 선택될 때, 실시예는 또한 배치(318)에 포함되도록, 또한 저널(302)에 저장되어 있고 저장소 세트(102) 내 제 1 위치(110)와 가까운 제 2 위치(110)에 저장될 제 2 데이터 세트(104)(가령, 저장 장치(106)의 물리적 매체 상에 연속으로 또는 적어도 물리적으로 근방에 위치하며, 동일한 배치(318)로 함께 써지는 것이 효율적일 수 있는 데이터 세트(104))를 선택할 수 있다. 제 2 이러한 예시로서, 실시예가 저널(302)이 제 1 데이터 세트(104)보다 새롭고, 상기 저장소 세트(102)의 동일 위치(110)에 저장될(즉, 다음에 덮어 쓰기될) 제 2 데이터 세트(104)도 포함한다고 결정한 경우, 이들 기법의 실시예는 배치(318)로부터 저널(302)에 저장되고 저장소 세트(102) 내 위치(110)에 저장될 제 1 데이터 세트(104)를 생략시킬 수 있다. 데이터 세트(104)를 배치(318)에 포함시키는 것 대신, 실시예는 단순히 오래된 데이터 세트(104)를 저널(302)에서 제거할 수 있다.
이러한 제 2 양태의 제 3 변형예로서, 검증자(112)의 계산(414)이 여러 방식으로 발생할 수 있다. 제 1 양태의 알려진 변형으로서, 여러 유형의 검증자(112)가 이러한 시나리오에서 사용될 수 있지만, 추가로, 검증자(112)는 다양한 방식으로 이용 가능한 데이터로부터 계산되어질 수 있다. 제 1 예시로서, 검증자(112)가 자신에 의해 표현된 현재의 데이터 세트(104)를 기초로 완전히 재계산될 수 있다.그러나 제 2 예시로서, 검증자(112)가 몇 개의 데이터 세트(104)를 나타내고, 이들 중 데이터 세트(104)의 서브세트가 변경된 때, 오래된 데이터 세트(104)를 검증자(112)로부터 제거하고, 업데이트된 데이터 세트(104)를 검증자(112)에 포함시켜, 저장소 세트(102)로부터 데이터 세트(104)의 나머지 부분을 불러오는 것을 포함할 수 있는, 현재의 데이터 세트(104)로부터 검증자(112)를 재계산하는 것이 가능할 수 있으며, 때때로 더 효율적일 수 있다.
도 7은 검증자(112)를 계산하는 여러 다른 방식을 특징으로 하는 예시적 시나리오(700)를 도시한다. 제 1 시점(702)에서, 데이터 세트(104) 및 이에 대응하는 검증자(112)에 대해 저장소 세트(102) 내에 공간이 할당되었다. 그러나 데이터 세트(104와 검증자(112) 중 어느 부분도 저장소 세트(102)에 아직 써지지 않았다. 제 2 시점(704)에서, 데이터 세트(104)의 일부분이 수신되었고, 데이터 세트(104)를 저장소 세트(102)로 커밋하기 위한 요청이 개시되었다. 검증자(112)를 계산하기 위해, 이들 기법의 실시예에서, 데이터 세트(104)를 포함하는 나머지 데이터가 저널(302)과 저장소 세트(102) 모두에서도 존재하지 않음이 식별될 수 있다. 따라서, 상기 실시예에서, 데이터 세트(104)의 제공된 부분을 이용해 검증자(112)가 계산될 수 있고, 상기 데이터 세트(104)의 나머지 부분에 대해 디폴트 값(가령, 0(zero))이 추론되고 사용될 수 있다. 따라서 제 2 시점(704)에서, 상기 검증자(112)는 데이터 세트(104)의 기존 부분만 이용해 계산된다. 제 3 시점(706)에서, 상기 검증자(112)는 데이터 세트(104)에 대한 현재 데이터를 이용해 계산된다. 예를 들어, 데이터 세트(104)가 제공됐을 수 있음을 완전히 특정하는 새롭고 업데이트된 데이터 세트(가령, 전체 데이터 세트(104)를 포함하는 일련의 쓰기(202)가 저널(302) 내에 존재할 수 있거나, 저널(302)에 존재하지 않는 데이터 세트(104)의 일부분이 상기 저장소 세트(102)로부터 불러와질 수 있다) 및 검증자(112)가 데이터 세트(104)를 포함하는 현재 데이터를 이용해 완전히 재계산될 수 있다(가령, 현재 데이터 모두에 대한 XOR). 그러나 제 4 시점(708)에서, 검증자(112)가 원본 검증자(112)만, 그리고 데이터 세트(104)의 원본과 새로운 버전을 이용해 데이터 세트(104)의 변경의 관점에서 재계산된다. 예를 들어, 원본 검증자(112)를 데이터 세트(104)의 원본 버전과 XOR하고, 원본 검증자(112)로부터 데이터 세트(104)의 상기 일부분의 추가를 반전시키고(reverse), 그 후 이 값을 데이터 세트(104)와 XOR 연산함으로써, 새로운 검증자(112)가 계산될 수 있다. 이 재계산은 저널(302)에 완전히 저장되지 않은 데이터 세트(104)에 더 효율적일 수 있는데, 가령, 이 재계산은 저절(302)에 저장되지 않은 데이터 세트(104)의 일부분을 저장소 세트(102)에서 읽는 것을 생략시킬 수 있다. 덧붙여, 이들 재계산 기법들 중 선택은 데이터 세트의 이 일부분을 저장소 세트(102)로부터 불러오는 비교 비용(comparative cost)을 기초로 이뤄질 수 있다(가령, 더 큰 데이터 세트(104)를 나타내는 검증자의 경우 상기 데이터 세트(104)의 작은 부분을 제거하고 업데이트를 포함하며, 데이터 세트(104)의 큰 부분의 업데이트에 대해 현재 데이터로부터 검증자를 재계산하는 것이 더 효율적일 수 있다).
이러한 제 2 양태의 제 4 변형예로서, 저장소 세트(102)의 장애(210)(가령, 전원 장애 또는 소프트웨어 충돌) 및/또는 하나 이상의 저장 장치(106)의 장애(가령, 저장 장치(106)와의 통신의 단절, 상기 저장 장치(106)의 하드웨어, 펌웨어, 또는 드라이버 장애, 또는 저장 장치(106)의 제거나 손상 및 이에 뒤 따르는 저장 장치(106)의 통신의 재확립 또는 대체)의 경우, 이들 기법의 실시예는 장애(201)로부터 복구하기 위해 저널(302)을 여러 방식으로 이용할 수 있다. 이러한 제 2 양태의 제 4 변형예의 제 1 예시로서, 이들 기법의 실시예는 단순히 저널(302)을 검토하고 저널(302) 내 임의의 불완전하거나 불일치하는 레코드(304)(가령, 장애(210)의 순간에 불완전하게 써졌던 레코드)를 폐기하고, 그 후, 데이터 세트(104)의 저널(302)로부터 저장소 세트(102)로의 커밋을 재개할 수 있다. 상기 프로세스에서, 상기 저장소 세트(102)로 데이터 세트의 불완전한 쓰기를 검출하지 않고, 저장소 세트(102)에 불완전하게 써졌던 임의의 데이터 세트(104)가 복수 프로세스 동안 올바르고 다시 써질 수 있다.
이러한 제 2 양태의 제 4 변형예의 제 2 예시로서, 장애(210)로부터의 복구가 단계별 방식(phased manner)으로 수행될 수 있다. 예를 들어, 저장소 세트(102)로의 액세스가 유효하고 일치하는 데이터를 제공함을 보장하면서, (가령, 저장소 세트(102)를 이용하는 서비스의 다운타임을 감소시키기 위해) 가능한 빨리 장애(210)로부터 복구하는 것이 바람직할 수 있다. 따라서 복구의 제 1 단계 동안, 이들 기법의 실시예는 우선 저널(302)의 콘텐츠(가령, 데이터 세트(104)가 저널(302)에 저장된 저장소 세트(102) 내 위치(110))를 읽어, 저장소 세트(102)로의 액세스가 저널(302)로부터 또는 저장소 세트(102)로부터 수행될 것인지를 결정할 수 있다. 그 후 복구는, 장애(210)로 인해 야기된 불완전, 및/또는 불일치하게 써진 데이터 세트(104)를 정정하기 위해, 저널(302)로부터 저장소 세트(102)로의 데이터 세트(104)의 커밋을 재개하는 것과 관련된 제 2 단계로 진행될 수 있다. 따라서 실시예가 종료될 수 있다.
복구 프로세스의 추가 예시적 변형예는, 가령, 저장소 세트(102)의 일부 또는 전부를 스캐닝하여 이의 무결성을 검증하는 것, 장애와 관련된 저장 장치(106)에만 복수 프로세스를 적용하는 것(가령, 저널(302)로부터 일시적으로 제거된 저장 장치(106)로만 데이터 세트(104)를 다시 쓰기), 및 서로 다른 저장 장치(106) 및/또는 서로 다른 데이터 세트(104)에 대해 서로 다른 복구 프로세스를 적용하는 것(가령, 복구 프로세스를 제 2 저장 장치(106) 상에 저장된 제 2 저널(302)에 적용하기 전에, 제 1 저장 장치(106) 상에 저장된 제 1 저널(302)에 복구 프로세스를 적용하고 이의 복구를 완료하는 것)을 포함할 수 있다. 해당 분야의 통상의 기술자라면 서로 다른 시나리오에 적용되도록 본원에 제공된 기법의 요소들을 변화시키는 이러한 다양한 방식을 고안할 수 있다.
D3
. 저널의 휘발성 메모리 표현
이들 기법들 간에 다양할 수 있는 제 3 양태는, 이러한 기법을 구현하는 장치(610)의 휘발성 메모리에 저널(302)의 휘발성 메모리 표현을 생성하는 것을 포함한다. 예를 들어, 저장 장치(106)의 비휘발성 매체 상에서 생성된 저널(302)에 추가로, 이들 기법의 실시예는 저널(302)에 저장된 데이터 세트(104)를 저장하며, 저널(302)과 동기화를 유지하는 휘발성 메모리 표현(volatile memory representation)을 생성할 수 있다. 저널(302)로의 휘발성 메모리 표현의 생성 및 유지가 복잡도를 추가할 수 있고, 추가 컴퓨팅 자원을 소비할 수 있지만, 이들 기법의 실시예에서 휘발성 메모리 표현은 많은 잠재적 용도와 이점을 제공할 수 있다. 제 1 예시적 이점으로서, 휘발성 메모리 표현은 저널(302)의 쓰기 버퍼(write buffer)로서 기능할 수 있는데, 가령, 개별 데이터 세트(104)를 저널(302)에 쓰는 것 대신, 실시예에서, 초기에 데이터 세트(104)가 휘발성 메모리 표현으로 저장될 수 있고, 데이터 세트(104)의 블록을 저널(302)로 커밋할 수 있음으로써, 저널(302)로의 쓰기(202)의 일괄처리(batching)를 이용해 데이터 세트(104)의 저널(302)로의 순차 쓰기(202)의 효율 이득이 확장될 수 있다. 제 2 예시적 이점으로서, 휘발성 메모리 표현은, 최근에 써진 데이터 세트(104)의 읽기 캐시(read cache)로서 기능할 수 있는데, 가령, 최근 써진 데이터 세트(104)를 비교적 느린 저장 장치(106) 상에 저장된 저널(302)로부터 읽는 것 대신, 실시예에서, 휘발성 메모리 표현으로부터 데이터 세트(104)가 제공될 수 있다. 따라서 이들 기법의 하나의 실시예는 저널(302)과 휘발성 메모리 표현에서의 가용성에 따라 요청받은 데이터 세트(104)를 불러오려 시도할 수 있다. 예를 들어, 상기 실시예는, 데이터 세트(104)가 휘발성 메모리에 저널(302)의 휘발성 메모리 표현으로 저장되어 있다고 결정되면, 휘발성 메모리 표현으로 저장된 데이터 세트(104)를 불러오고 제공할 수 있고; 데이터 세트(104)가 저장 장치(106) 상의 저널(302)에 저장되어 있다고 결정되면, 저널(302)에 저장된 데이터 세트(104)를 불러오고 제공할 수 있으며; 그 밖의 다른 방식으로 저장 장치(106) 상의 저장소 세트(102)에 저장된 데이터 세트(104)를 불러오고 제공할 수 있다. 데이터 세트는 또한 이들 소스(source) 중 둘 이상에 걸여 있을 수 있은데, 가령, 요청된 데이터 세트(104)의 제 1 부분이 저널(302) 내에 존재하고 저널(302)로부터 불러와질 수 있으며, (요청된 데이터 세트(104)의 제 2 부분이 덜 액세스 가능한 저널(302) 및/또는 저장소 세트(102) 내에 존재하는지 여부와 무관하게) 요청된 데이터 세트(104)의 제 2 부분이 휘발성 메모리 표현 내에 있고 상기 휘발성 메모리 표현으로부터 불러와질 수 있다. 제 3 예시적 이점으로서, 저널(302)에 저장된 데이터 세트(104)와 관련된 결정, 가령, 배치(318)의 선택(410)이 휘발성 메모리 표현의 콘텐츠를 평가함으로써 더 효율적으로 수행될 수 있으며, 이는 저널(302)의 콘텐츠를 평가하는 것보다 더 빠른 액세스를 제공한다. 장치(610)의 빠른 그러나 휘발성 메모리에 저장된 데이터의 액세스 가능성의 이러한 이점이, 비휘발성 저장 장치(106) 상의 저널(302) 내 데이터 세트(104)의 저장을 통한 데이터 세트(104)의 내구성(durability)과 동시에 얻어질 수 있다.
이 제 3 양태의 제 1 변형예로서, 휘발성 메모리 표현이 저널(302)과 유사하게 구조화되거나, 상이한 방식으로 생성될 수 있다. 예를 들어, 저장 장치(106), 가령, 하드 디스크 드라이브 상에서의 순차 쓰기를 촉진하도록 저널(302)을 구조화하는 것이 바람직할 수 있지만, 이러한 이점은 비교적 동등한 순차 액세스와 랜덤 액세스를 제공하는 메모리 회로에서는 약화될 수 있기 때문에, 휘발성 메모리 표현이 또 다른 방식으로 생성될 수 있는데, 가령, 데이터 세트(104)가 저장될 저장소 세트(102) 내 위치(110)에 따라 인덱싱될 수 있으며, 예컨대, 해시테이블 또는 B-트리, 가령, AVL(Adelson-Velskii-Landis) 트리가 있다.
이러한 제 3 양태의 제 2 변형예로서, 휘발성 메모리 표현이 저널(302)에 저장된 것과 동일한 데이터 세트(104)를 저장하거나, 상이한 저장소 세트(102)를 저장할 수 있다. 이러한 제 1 예시로서, 휘발성 메모리 표현은 쓰기 버퍼 방식으로 저널(302)에 함께 써지도록 새로운 데이터 세트(104)를 임시적으로 누적할 수 있다. 이러한 제 2 예시로서, 휘발성 메모리 읽기 캐시로서의 휘발성 메모리 표현의 여분의 용량(excess capacity)의 사용을 증진하기 위해 휘발성 메모리 표현은 저널(302)로부터 제거된 데이터 세트(104)를 유지(retention)할 수 있다. 예를 들어, 데이터 세트(104)가 저장소 세트(102)로 커밋되고 저널(302)로부터 제거된 후(그리고 아마도 덮어쓰기까지 된 후), 프로세스가 최근 써진 데이터 세트(104)를 요청할 비교적 높은 확률 때문에, 휘발성 메모리 표현은 메모리 내 데이터 세트(104)를 유지할 수 있다. (데이터 세트(104)의 저널(302) 및/또는 저장소 세트(102)로의 커밋 후에) 데이터 세트(104)를 휘발성 메모리 표현에 이렇게 유지하는 것은 휘발성 메모리 표현 내에 용량이 남아 있는 한 계속될 수 있고, 새로 수신되었지만 아직 커밋되지 않은 데이터 세트(104)를 위한 용량을 제공하도록 휘발성 메모리 표현이 이전에 커밋된 데이터 세트(104)를 내보낼 수 있다. 이 시나리오에서, 휘발성 메모리 표현이 저널(302) 및/또는 저장소 세트(102)로 커밋된 데이터 세트(104)를 커밋되지 않은 데이터 세트(104)와 구별하는 것이 바람직할 수 있다. 예를 들어, 저널(302)에 데이터 세트(104)를 저장한 후, 하나의 실시예는 저널(302)의 휘발성 메모리 표현에 데이터 세트(104)를 저장하여, 데이터 세트(104)를 제거될 수 없음(unremovable)으로 마킹할 수 있으며, 저널(302)에 저장된 데이터 세트(104)를 저장소 세트(102)로 커밋한 후, 상기 실시예는 상기 휘발성 메모리 표현에 저장된 데이터 세트(104)를 제거될 수 있음(removable)으로 마킹할 수 있다. 따라서 휘발성 메모리 표현 내에 용량을 비우기 위해, 실시예는 저널(302)의 휘발성 메모리 표현으로부터 제거될 수 있음이라고 마킹된 데이터 세트(104)만 안전하게 제거할 수 있다. 이 변형예는 휘발성 메모리 표현의 예비 용량을 읽기 캐시로서 바람직하게 이용하면서, 저널(302)과 휘발성 메모리 표현의 동기성을 유지한다.
이와 달리, 그리고 이 제 3 양태의 제 3 변형예로서, 커밋된 또는 커밋되지 않은 데이터 세트(104)를 저장할 때 휘발성 메모리 표현의 용량을 다 쓰지(exhaust) 않고, 휘발성 메모리 내 휘발성 메모리 표현 내에, 유입되는 데이터 세트(104)를 저장하기 위해 충분한 용량을 예약(reserve)하는 것이 바람직할 수 있다. 특히, 다른 데이터 세트(104)를 저널(302)로 커밋함으로써 저널(302)이 점유되는 동안 데이터 세트(104)를 저장하도록 구성된 버퍼가 저장소 세트(102)에 저장되도록 충분한 용량이 예약될 수 있다. 이 변형예는 데이터 세트(104)를 저널(302)로부터 저장소 세트(102)로 커밋하는 작업을 하지 못하게 저장 장치(106)를 방해(interrupt)하지 않으면서, 유입되는 데이터 세트(104)를 수용하기 위해, 휘발성 메모리 표현을 쓰기 버퍼로서 더 이용한다.
이 제 3 양태의 제 4 변형예로서, 장애(210)의 복구가 저널(302)의 휘발성 메모리 표현의 재구축(rebuilding)을 포함할 수 있다. 예를 들어, 휘발성 메모리 표현(802)을 재생하기 위해 저널(302)을 읽음으로써, 복구 프로세스가 시작될 수 있다. 이러한 방식으로 가령, 휘발성 메모리 표현(802)의 읽기 캐시 및/또는 쓰기 버퍼 특징을 재확립하고, 이에 따라서 저널(302)을 저장하는 저장 장치(106)의 읽기/쓰기 작업부하를 감소시키고 저널(302) 내 데이터 세트(104)를 저장소 세트(102)로 커밋하는 작업을 촉진시켜 장애(210)에 의해 초래된 불완전하거나 불일치하는 쓰기(202)를 덮어 쓸 수 있음으로써, 재구축을 시작하는 것은 바람직할 수 있다.
도 8은 비휘발성 저장 장치(106) 상에서 생성되는 저널(302)이 장치(610)의 휘발성 메모리 내 저널(302)의 휘발성 메모리 표현(802)과 쌍을 이루는 예시적 시나리오(800)를 도시한다. 이 예시적 시나리오(800)에서, 휘발성 메모리 표현(802)은 저널(302)에 저장된 데이터 세트(104)의 위치(110)의 16진법 주소에 따라 조직된 B-트리로서 저장된다. 제 1 시점(804)에서, 상기 저널(302)과 휘발성 메모리 표현(802)은 데이터 세트(104)의 특정 세트를 저장할 수 있고, 제 2 시점(806)에서, 제 2 데이터 세트(104)가 상기 저널(302)로 써지도록 수신될 때, 상기 제 2 데이터 세트(104)는 휘발성 메모리 표현(802)에 저장될 수 있고, 그 후 (직접적으로 또는 쓰기 버퍼를 통해) 저널(302)에 써질 수 있다. 덧붙여, 제 3 시점(806)에서, 저널(302)에 저장된 하나 이상의 데이터 세트(104)가 저장 장치(106) 상에 저장된 저장소 세트(102)로 커밋될 때, (가령, 테일 포인터(306)를 커밋된 데이터 세트(104)를 포함하는 레코드를 지나 전진시킴으로써) 상기 데이터 세트(104)는 상기 저널(302)로부터 제거될 수 있지만, 휘발성 메모리 표현(802)의 예비 용량이 가용한 경우, 이들 데이터 세트(104)는 휘발성 메모리 표현(802) 내에 유지될 수 있으며, (도 8의 예시적 시나리오(800)에서 점선으로 표시되는 바와 같이) 제거 가능함으로 마킹될 수 있다. 따라서 상기 휘발성 메모리 표현(802)은 새로 수신된 데이터 세트(104)(가령, 제 4 시점(810)에서의 제 4 데이터 세트(104)의 수신)를 위해 용량을 제공할 수 있다. 따라서 읽기 요청이 휘발성 메모리 표현(802) 내 데이터 세트(104), 저널(302), 및 저장소 세트(102)의 가용성에 따라 수행될 수 있다. 예를 들어, 제 5 시점(812)에서, 3개의 데이터 세트(104)(104)에 대해 3개의 읽기 요청이 수신될 수 있고, 이들 중 제 1 데이터 세트(104)는 휘발성 메모리 표현(802)으로부터 제공될 수 있으며(저널(302)로부터 제거되었지만 휘발성 메모리 표현에 존재), 제 2 데이터 세트(104)는 저널(302)로부터 제공될 수 있고(저널(302)로 커밋된 후 휘발성 메모리 표현으로부터 제거됐음), (휘발성 메모리 표현(802)과 저널(302)로부터 제거된) 제 3 데이터 세트(104)는 저장소 세트(102)로부터 불러와지고 제공될 수 있다. 이러한 방식으로, 도 8의 예시적 시나리오(800)에 도시된 이들 기법의 실시예가 저널(302)의 휘발성 메모리 표현(802)의 구현을 통해 몇 가지 이점을 얻는다. 해당 분야의 통상의 기술자라면 본원에 제공된 기법에 따라 저널(302)의 이러한 휘발성 메모리 표현(802)을 이렇게 사용하는 것을 고안할 수 있다.
D4
. 쓰기 버퍼와의 상호운용
이들 기법의 다양한 실시예에 따라 변할 수 있는 제 4 양태는 저장소 세트(102)를 저장하는 저장 장치(106)에 쓰기 버퍼를 포함시키고 활용하는 것과 관련된다. 많은 경우, 저장 장치(106)는 가령, 플러시(flush) 요청이 개시되기 전까지 휘발성 메모리 내 데이터 세트(104)의 쓰기(202)를 일괄처리(batching)하고, 모든 데이터 세트(104)를 저장 장치(106) 상에 저장된 저장소 세트(102)로 커밋함으로써, 성능을 개선하기 위해, 쓰기 버퍼를 바람직하게 이용할 수 있다. 그러나 저장 장치(106) 상에서의 쓰기 버퍼의 연산은 본원에 제공된 기법의 성능을 약화시킬 수 있으며, 실제로, 일부 문제를 초래할 수도 있다. 예를 들어, 저널(302)에 데이터 세트(104)를 저장하기 위한 요청이 휘발성 쓰기 버퍼에서 딜레이된 경우, 장애(210)가 발생하면 데이터 세트(104)가 손실될 수 있다. 특히, 운영 체제나 프로세스가, (플러시 연산이 확정적으로 요청되고 완료된 것으로 검증되지 않는 한) 데이터 세트(104)가 실제로 저널(302)로 커밋되었는지 여부, 또는 심지어 쓰기 버퍼가 저장 장치(106)에 대해 존재하는지 여부를 결정하는 데 어려움을 가질 수 있도록, 쓰기 버퍼는 종종 투명한 방식으로 구현된다. 따라서 프로세스가 데이터 세트(104)를 저널(302)로 쓰도록 요청할 때, 쓰기가 저널(302)의 비휘발성 저장소 내가 아니라 휘발성 쓰기 버퍼에 저장된 경우라도, 저장 장치(106)는 상기 프로세스에게 상기 요청은 수행됐다고 즉시 알릴 수 있다. 따라서 데이터 세트(104)가 커밋된 것처럼 애플리케이션이 잘못 동작할 수 있고, 저장 장치(106)가 쓰기 버퍼로부터 데이터 세트(104)를 플러시하기 전에 장애가 발생한다면 불일치성과 기대되지 않은 데이터 손실이 발생할 수 있다. 마찬가지로, 저널(302)과 저장소 세트(102) 간의 쓰기 버퍼의 동작에 의해 저널(302)은, 데이터 세트(104)가 영속적으로(persistently) 저장된 것처럼 잘못 동작할 수 있는데, 가령, 저널(302)이 저장소 세트(102)에 아직 커밋되지 않은 데이터 세트(104)를 제거할 수 있어서, 쓰기 버퍼가 플러시되기 전에 발생하는 장애(210)의 경우, 불완전하고 불일치하는 데이터 세트(104)를 초래할 수 있다. 덧붙여, 쓰기 버퍼가 제안할 수 있는 이점(가령, 일괄처리되는 쓰기(202), 순차 쓰기(202)의 합병, 및 덮어 쓰기의 감소)이 이미, 본원에 기재된 기법의 다른 컴포넌트에 의해 제공된다. 따라서 쓰기 버퍼의 존재 및 동작에 의해 복잡도가 추가되고, 비용이 증가하며, 성능 저하의 가능성이 나타나고, 예기치 않은 결과가 초래되지만, 본 기법에 의해서 아직 얻어질 수 없는 이점은 거의 또는 전혀 제공하지 않는다.
이러한 잠재적인 단점의 관점에서, 이들 기법의 실시예가 쓰기 버퍼의 존재의 관점에서 조정될 수 있다. 이러한 제 4 양태의 제 1 변형예로서, 이들 기법의 하나의 실시예가 여러 가지 방식으로 쓰기 버퍼의 사용 및 영향을 피할 수 있다. 제 1 변형예의 제 1 예시로서, 데이터 세트(104) 및 검증자(112)를 저널(302)에 쓸 때, 가령, 저널(302)에의 쓰기를 연속-쓰기(write-through) 요청으로서 발행함으로써, 또는 단순히 저장 장치(106) 상의 쓰기 버퍼를 비활성화시킴으로써, 쓰기 필터를 우회(bypass)한다. 제 1 변형예의 제 2 예시로서, 상기 실시예는 저널(302) 및/또는 저장 장치(106) 상에 저장된 저장소 세트(102)로의 각각의 쓰기(202) 후에 플러시(flush) 요청을 발행함으로써, 쓰기 버퍼의 영향을 무효화할 수 있다. 플러시 요청의 빈번한 발행이 저장 장치(106)의 성능을 약화시킬 수 있어도, 성능의 손실이 다양한 방식으로 감소될 수 있는데, 가령, 저장소 세트(102) 및/또는 저널(302)이 쓰기 버퍼를 포함하거나 포함하지 않을 수 있는 저장 장치(106)들의 세트에 걸쳐 분사되는 경우, 이들 기법의 실시예는 플러시 요청을 최근 써진 데이터 세트(104)를 저장하는 저장 장치(106)로만 발행하도록 구성될 수 있다.
이러한 제 4 양태의 제 2 변형예로서, 이들 기법의 하나의 실시예는 쓰기 버퍼와 상호운용될 수 있고, 저널(302) 및/또는 저널(302)의 메모리-내 표현(in-memory representation)(802)의 동작에 따라 쓰기 버퍼의 동작을 조화(coordinate)시킬 수 있다. 이 제 2 변형예의 제 1 예시로서, 저널(302)을 저장하는 저장 장치(106)가 플러시될 때, (저널(302)로 쓰기 요청이 발행됐지만 쓰기 버퍼에 유지될 수 있는 데이터 세트(104)와 달리) 저널(302)로 플러시됐던 데이터 세트(104)를 나타내는 저널(302)의 플러시 포인트가 식별될 수 있다. 예를 들어, 저널(302)(302)의 휘발성 메모리 표현(802)을 특징 짓는 하나의 실시예에서, 휘발성 메모리 표현(802)에 저장된 데이터 세트(104)는 초기에 제거될 수 없음(unremovable)으로 마킹될 수 있고, 저널(302)의 플러시 포인트가 상기 데이터 세트(104)를 지나 이동할 때까지 그렇게 마킹된 채 유지될 수 있으며, 이 시점에서 휘발성 메모리 표현(802)은 데이터 세트(104)를 제거될 수 있음으로 마킹할 수 있다.
도 9는 저널(302)을 저장하는 저장 장치(106)의 쓰기 버퍼(902)와 상호운용되도록 휘발성 메모리 표현(802)을 적응시키는 것을 특징으로 하는 예시적 시나리오(900)를 도시한다. 이 예시적 시나리오(900)에서, 저장소 세트(102)로 써질 데이터 세트(104)는 우선 휘발성 메모리 표현(802)에 저장되고, 그 후 저장소 세트(102)로 커밋되기 전에 저널(302)로 써진다. 그러나 쓰기 버퍼(902)가 저널(302)을 저장하는 저장 장치(106) 상에 존재할 수 있으며, 가령, 데이터 세트(104)가 저널(302)에 써진다고 예측되지만, 대신 쓰기 버퍼(902)의 휘발성 메모리에 저장되고, 장애(210)에 의해 저널(302)에 써지지 않고 데이터 세트(104)가 손실되는 경우, 불일치성과 문제를 초래할 수 있다. 따라서 휘발성 메모리 표현(902)은 각각의 데이터 세트(104)(104)의 상태를 기록할 수 있다. 예를 들어, 제 1 시점(904)에서, 데이터 세트(104)들 중 하나의 세트를 저널(302)로 이동시키기 위한 요청이 개신되면, 휘발성 메모리 표현(902)이 데이터 세트(104)의 상태를 저장 장치(106)로 써지는 중으로(즉, 데이터 세트(104)를 저장 장치(106)로 쓰기 위한 요청이 개시되었다고 가리키지만, 상기 저장 장치(106)는 쓰기 요청이 수신됐다고 아직 가리키지 않도록) 기록할 수 있다. 제 2 시점(906)에서, 데이터 세트(104)가 수신됐다고 저장 장치(106)가 응답한다. 그러나 휘발성 메모리 표현은 데이터 세트(104)가 저널(302)로 커밋되었는지 여부 또는 데이터 세트(104)가 쓰기 버퍼(902) 내에 있는지 여부를 결정할 수 없다. 따라서 제 2 시점(906)에서, 휘발성 메모리 표현(902)은 데이터 세트(104)를 저장 장치(106)(106)에 의해 버퍼링됐다고 마킹한다. 반면에, 저장 장치(106)가 아직 완전히 수신했다고 확인 응답하지 않은 그 밖의 다른 데이터 세트(104)는 저장 장치(106)로 쓰기 중이라고 계속 마킹될 수 있다. 제 3 시점(908)에서, 휘발성 메모리 표현(802)은 쓰기 버퍼(902)를 플러시하기 위한 요청을 발행할 수 있고, 상기 쓰기 버퍼(902)는 완전히 수신된 데이터 세트(104)를 저널(302)을 포함하는 비휘발성 저장 매체로 커밋하는 것을 개시할 수 있다. 제 4 시점(910)에서, 상기 저장 장치(106)가 플러시 요청이 수행됐다고 가리킬 때, 휘발성 메모리 표현은 이전에 버퍼링됨으로 마킹된 모든 데이터 세트(104)(즉, 저장 장치(106)가 플러시 요청 전에 완전히 수신했다고 확인 응답한 모든 데이터 세트(104))를 완전히 저널링됨으로, 그리고 선택사항으로서, 제거 가능함으로 마킹할 수 있다. 제 5 시점(912)에서, 그 후 저장 장치(106)는 추가 데이터 세트(104)가 완전히 수신됐다고 가리킬 수 있고, 휘발성 메모리 표현(802)은 이들 데이터 세트(104)를 버퍼링됨 그리고 제 2 플러시 요청을 통해 저널(302)로 커밋될 준비가 됨으로 마킹할 수 있다. 이러한 방식으로, 휘발성 메모리 표현(802)은 저장 장치(106)의 쓰기 버퍼(902)와 관련해 데이터 세트(104)의 상태를 추적한다.
이러한 제 4 양태의 제 3 변형예로서, 쓰기 버퍼(902)는 데이터 세트(104)를 저널(302)로부터 저장소 세트(102)로 커밋하는 것을 중개(intermediate)할 수 있고, 방해할 수 있다. 이와 유사하게, 휘발성 메모리 표현(802) 및/또는 저널(302)에 저장된 데이터 세트(104)의 상태는 데이터 세트(104)가 저널(302)로부터 저장소 세트(102)로 플러시됐는지 여부를 가리킬 수 있다. 예를 들어, 이들 기법의 하나의 실시예가, 데이터 세트(104)의 쓰기 버퍼(902)로부터 저장소 세트(102)로의 커밋(가령, 플러시 요청의 확인응답)을 검출하면, 저널(302) 및/또는 휘발성 메모리 표현(902) 내 데이터 세트(104)를 커밋됨으로 마킹할 수 있고, 저널(302) 및/또는 휘발성 메모리 표현(902)으로부터 저장소 세트(102)로 커밋됨으로 마킹된 데이터 세트(104)만 제거할 수 있다.
도 10은 저장소 세트(102)를 저장하는 저장 장치(106)의 쓰기 버퍼(902)와 상호운용하도록 저널(302)을 조절하는 것을 특징으로 하는 예시적 시나리오(1000)를 도시한다. 이 예시적 시나리오(1000)에서, 저널(302)은 3개의 저장 장치(106)에 걸쳐 분산된 하나의 저장소 세트(102)로 커밋될 데이터 세트(104)를 저장하며, 상기 3개의 저장 장치(106) 각각은 쓰기 버퍼(902)를 포함한다. 데이터 세트(104)가 저장소 세트(102)(102)를 저장하는 저장 장치(106)의 물리적 매체에 완전히 커밋됨을 보장하기 위해, 상기 저널(302)은 저널(302)이 저장소 세트(102)로 쓰기 요청받은 데이터 세트(104)의 상태를 기록할 수 있다. 예를 들어, 제 1 시점(1002)에서, 커밋될 데이터 세트(104)의 배치(batch)(318)를 식별하면, 상기 저널(302)은 데이터 세트(104)를 저자하는 저장 장치(106)로 각각의 데이터 세트(104)에 대한 쓰기 요청을 전송할 수 있다. 그러나 저장 장치(106)가 데이터 세트(104)의 수신을 확인응답할 때, 상기 저널(302)은 데이터 세트(104)가 저장소 세트(102)로 커밋됐다고 추정할 수 없고, 각가의 장치(106) 상의 휘발성 쓰기 버퍼(902)에 저장될 수 있으며, 따라서 저널(302) 내 각각의 데이터 세트(104)를 버퍼링됨으로 마킹할 수 있다. 제 2 시점(1004)에서, 상기 저널(302)은 저장 장치(106)로 플러시 요청을 발행할 수 있다(특히, 버퍼링된 데이터 세트(104)를 저장하는 저장 장치(106)로만 플러시 요청을 발행할 수 있는데, 가령, 제 3 저장 장치(106)는 어떠한 최근 커밋된 데이터 세트(104)를 저장하지 않으며, 따라서 플러시 요청이 발행되지 않는다). 제 3 시점(1004)에서, 저장 장치(106)가 플러시 요청이 수행되었다고 가리킬 때, 상기 저널(302)은 데이터 세트(104)를 커밋됨으로 마킹할 수 있다. 상기 저널(302)은 또한, 플러시 포인트와 테일 테일 포인터(306) 사이의 모든 데이터 세트(104)가 저장소 세트(102)로 커밋되도록, 헤드 포인터(208)와 테일 포인터(306) 사이에 플러시 포인트(1008)를 식별할 수 있다. 제 4 시점(1010)에서, 저널(302)은 임의의 중간 데이터 세트(104)가 저장소 세트(102)로 완전히 커밋된 이후로, 테일 포인터(308)를 플러시 포인트(1008)로 이동시킴으로써 데이터 세트(104)를 내보낼 수 있다. 이러한 방식으로 저널(302)은 저장소 세트(102)를 저장하는 저장 장치(106)의 쓰기 버퍼(902)의 동작을 고려하도록 적합화될 수 있다. 해당 분야의 통상의 기술자라면 본원 기법을 구현하면서 쓰기 버퍼(902)의 존재 및 동작을 고려할 수 있는 다양한 방식을 고안할 수 있다.
E. 컴퓨팅 환경
도 11은 본원의 기법이 구현될 수 있는 컴퓨팅 장치(1102) 내의 예시적 컴퓨팅 환경을 도시한다. 예시적 컴퓨팅 장치의 비-제한적 예로는, 개인 컴퓨터, 서버 컴퓨터, 핸드-헬드 또는 랩톱 장치, 모바일 장치(가령 모바일 폰, PDA, 미디어 재생기 등), 멀티프로세서 시스템, 소비자 일렉트로닉스, 미니 컴퓨터, 메인프레임 컴퓨터, 및 상기의 시스템 또는 장치 중 임의의 것을 포함하는 분산 컴퓨팅 환경이 있다.
도 11은 본원에서 제공되는 하나 이상의 실시예를 구현하도록 구성된 컴퓨팅 장치(1102)를 포함하는 시스템(1100)의 예시를 도시한다. 하나의 구성에서, 컴퓨팅 장치(1102)는 적어도 하나의 프로세서(1106) 및 적어도 하나의 메모리 컴포넌트(1108)를 포함한다. 컴퓨팅 장치의 정확한 구성 및 유형에 따라서, 상기 메모리 컴포넌트(1108)는 휘발성(가령, RAM), 비휘발성(가령, ROM, 플래시 메모리 등) 또는 중간 또는 하이브리드 유형의 메모리 컴포넌트일 수 있다. 이 구성은 도 11에 점선(1104)으로 도시된다.
일부 실시예에서, 장치(1102)는 추가 특징부 및/또는 기능부를 포함할 수 있다. 예를 들어, 장치(1102)는 하나 이상의 추가 저장 컴포넌트(1110)를 포함할 수 있으며, 이의 비-제한적 예로는, 하드 디스크 드라이브, 솔리드-스테이트 저장 장치, 및/또는 그 밖의 다른 이동식 또는 비-이동식 자성 또는 광 매체가 있다. 하나의 실시예에서, 본원에서 제공되는 하나 이상의 실시예를 구현하는 컴퓨터 판독형 및 프로세서 실행형 명령은 저장 컴포넌트(1110)에 저장된다. 상기 저장 컴포넌트(1110)는 그 밖의 다른 데이터 객체, 가령, 운영 체제의 컴포넌트, 하나 이상의 애플리케이션을 포함하는 실행 가능한 바이너리, 프로그래밍 라이브러리(가령, 애플리케이션 프로그래밍 인터페이스(API)), 미디어 객체, 및 문서를 저장할 수 있다. 상기 컴퓨터 판독형 명령은 프로세서(1106)에 의해 실행되도록 메모리 컴포넌트(1108)에 로딩될 수 있다.
상기 컴퓨팅 장치(1102)는 또한, 컴퓨팅 장치(1102)가 타 장치와 통신할 수 있게 하는 하나 이상의 통신 컴포넌트(1116)를 포함할 수 있다. 하나 이상의 통신 컴포넌트(1116)는 (예컨대) 모뎀, 네트워크 인터페이스 카드(NIC), 무선주파수 송신기/수신기, 적외선 포트, 및 전역 직렬 버스(USB) 연결을 포함할 수 있다. 이러한 통신 컴포넌트(1116)는 유선 연결(네트워크를 물리적 코드, 케이블, 또는 선으로 연결함) 또는 무선 연결(가령, 가시광, 적외선, 또는 하나 이상의 무선주파수를 통해, 네트워크 장치와 무선 통신함)을 포함할 수 있다.
컴퓨팅 장치(1102)는 하나 이상의 입력 컴포넌트(1114), 가령, 키보드, 마우스, 펜, 음성 입력 장치, 터치 입력 장치, 적외선 카메라, 또는 비디오 입력 장치, 및/또는 하나 이상의 출력 구서요소(1112), 가령, 하나 이상의 디스플레이, 스피커, 및 프린터를 포함할 수 있다. 상기 입력 컴포넌트(1114) 및/또는 출력 컴포넌트(1112)는 유선 연결, 무선 연결, 또는 이들의 임의의 조합을 통해 컴퓨팅 장치(1102)로 연결될 수 있다. 하나의 실시예에서, 또 다른 컴퓨팅 장치로부터의 입력 컴포넌트(1114) 또는 출력 컴포넌트(1112)가 상기 컴퓨팅 장치(1102)의 입력 컴포넌트(1114) 및/또는 출력 컴포넌트(1112)로서 사용될 수 있다.
컴퓨팅 장치(1102)의 컴포넌트는 다양한 상호연결(interconnect), 가령, 버스에 의해 연결될 수 있다. 이러한 인터커넥트는 PCI(Peripheral Component Interconnect), 가령, PCI 익스프레스, USB, 파이어와이어(IEEE 1394), 광 버스 구조 등을 포함할 수 있다. 또 다른 실시예에서, 컴퓨팅 장치(1102)의 컴포넌트는 네트워크에 의해 상호연결될 수 있다. 예를 들어, 메모리 컴포넌트(1108)는 네트워크에 의해 상호연결되는 서로 다른 물리적 위치에 위치하는 복수의 물리적 메모리 유닛으로 구성될 수 있다.
해당 분야의 통상의 기술자라면, 컴퓨터 판독형 명령을 저장하기 위해 사용되는 저장 장치가 네트워크에 걸쳐 분산될 수 있음을 알 것이다. 예를 들어, 네트워크(1118)를 통해 액세스 가능한 컴퓨팅 장치(1120)가 본원에서 제공되는 하나 이상의 실시예를 구현하기 위해 컴퓨터 판독형 명령을 저장할 수 있다. 상기 컴퓨팅 장치(1102)는 컴퓨팅 장치(1120)를 액세스하고 상기 컴퓨터 판독형 명령 중 일부 또는 전부를 실행되도록 다운로드할 수 있다. 대안적으로, 컴퓨팅 장치(1102)가 필요에 따라 컴퓨터 판독형 명령의 일부를 다운로드하거나, 일부 명령이 컴퓨팅 장치(1102)에서 실행될 수 있고 일부는 컴퓨팅 장치(1120)에서 실행될 수 있다.
F. 용어 용례
본 발명이 구조적 특징 및/또는 방법적 동작에 특정된 언어로 기술되었지만, 이하의 특허청구범위에서 정의되는 발명은 앞서 기재된 특정 특징 또는 동작에 반드시 국한되는 것은 아니다. 오히려, 앞서 기재된 특정 특징 및 동작은 특허청구범위를 구현하는 예시적 형태로서 개시된 것이다.
본원에서 사용될 때, 용어 "컴포넌트(component)", "모듈", "시스템", "인터페이스" 등은 일반적으로, 컴퓨터 관련 개체, 즉 하드웨어, 또는 하드웨어와 소프트웨어의 조합, 소프트웨어, 또는 실행 중인 소프트웨어 중 하나를 지칭하도록 의도된 것이다. 예를 들어, 컴포넌트의 비-제한적 예로는, 프로세서 상에서 실행되는 프로세스, 프로세서, 객체, 실행파일(executable), 실행 스레드(thread of execution), 프로그램, 및/또는 컴퓨터가 있다. 설명을 위해, 제어기 상에서 실행되는 애플리케이션과 제어기 모두 컴포넌트일 수 있다. 하나 이상의 컴포넌트는 프로세스 및/또는 실행 스레드 내에 위치할 수 있고, 컴포넌트는 하나의 컴퓨터 상에서 로컬화되거나, 및/또는 둘 이상의 컴퓨터에 걸쳐 분산될 수 있다.
덧붙여, 청구되는 발명은 본 발명을 구현하도록 컴퓨터를 제어하기 위해 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 임의의 조합 표준 프로그래밍 및/또는 가공 기법을 이용하는 방법, 장치, 제조 물품으로서 구현될 수 있다. 본원에서 사용될 때 용어 "제조 물품"은 임의의 컴퓨터 판독형 장치, 캐리어, 또는 매체로부터 액세스될 수 있는 컴퓨터 프로그램을 포함하도록 의도된다. 물론, 해당 분야의 통상의 기술자라면 본 발명의 범위 내에서 이러한 구성에 여러 수정이 가해질 수 있음을 알 것이다.
본원에서 실시예의 다양한 동작이 제공된다. 하나의 실시예에서, 기재된 동작 중 하나 이상이 하나 이상의 컴퓨터 판독형 매체 상에 저장되며, 컴퓨팅 장치에 의해 실행될 때, 컴퓨팅 장치로 하여금, 기재된 동작을 수행하게 하는 컴퓨터 판독형 명령을 구성할 수 있다. 동작들 중 일부 또는 전부가 기재된 순서는 상기 동작들이 반드시 순서에 따라야 한다고 해석되어서는 안 된다. 본원을 읽은 해당 분야의 통상의 기술자라면 대안적 순서화가 가능함을 알 것이다. 또한, 모든 동작이 본원에 제공된 각각의 실시예에 포함되어야 함은 아님을 이해할 것이다.
덧붙여, "예시적"이라는 용어는 본원에서 사용될 때, 예, 사례, 또는 예시로서 기능함을 의미한다. 본원에 "예시"로서 기재된 어떠한 양태 또는 설계도 그 밖의 다른 양태 또는 설계에 비해 반드시 더 바람직한 것으로 해석되어서는 안 된다. 오히려, 예시라는 단어의 사용은 개념을 명확하게 제시하기 위한 것이다. 본원에서 사용될 때 "또는"이라는 용어는 배타적 "또는"이 아니라 포괄적 "또는"을 의미한다. 즉, 달리 언급되거나 문맥상 명백한 경우가 아니라면, "X는 A 또는 B를 사용한다"는 포괄적 순열 중 임의의 것을 포함하는 의도이다. 즉, X가 A를 포함하는 겨우, X가 B를 포함하는 경우, 또는 X가 A와 B를 모두 포함하는 경우, 상기의 사례 중 어느 하나에서, "X는 A 또는 B를 포함한다"가 만족된다. 덧붙이자면, 단수형 관사("a" 및 "an")이 본원과 이하의 특허청구범위에서 사용될 때, 달리 언급하거나 문맥상 단수 형이 명백한 경우가 아니라면, "하나 이상"을 의미하는 것을 해석될 수 있다.
또한, 본원이 하나 이상의 구현예와 관련해 도시되고 기재되었지만, 본 명세서와 첨부된 도면을 읽고 이해한 해당 업계의 통상의 기술자에게 균등한 변형 및 수정이 자명할 것이다. 본 발명은 모든 이러한 수정예 및 변형예를 포함하고, 이하의 특허청구범위에 의해서만 한정된다. 앞서 기재된 컴포넌트(가령, 요소, 자원 등)에 의해 수행되는 다양한 기능과 관련하여, 이러한 컴포넌트를 기재하기 위해 사용되는 용어는, 달리 지시되지 않는 한, 본 발명의 예시거 구현예의 기능을 수행하는 개신된 구조와 구조적으로 균등하지 않아도, 기재된 컴포넌트의 특정 기능을 수행하는 임의의 컴포넌트(가령, 기능적으로 균등한 컴포넌트)에 대응한다. 덧붙여, 본 발명의 특정 특징이 몇 가지 구현예들 중 단 하나와 관련하여 개시되었어도, 임의의 주어진 특정 적용예에서 바람직할 수 있는 한, 이러한 특징은 그 밖의 다른 구현예의 그 밖의 다른 하나 이상의 특징과 조합되어 사용될 수 있다. 덧붙여, 용어 "~를 포함하다(includes)", "~를 갖는(having)", "~를 가지다(has)", "~를 포함해(with)", 또는 이들의 변형형태가 상세한 설명 또는 청구항에서 사용되는 한, 이러한 용어는 용어 "~를 포함하는(comprising)"과 유사한 방식으로의 포함을 의미한다.
Claims (10)
- 적어도 하나의 저장 장치에 의해 제공되는 저장소 세트(storage set)에 데이터 세트를 저장하는 방법으로서, 상기 방법은 프로세서를 갖는 컴퓨터와 관련되며,
상기 프로세서 상에서,
저장 장치 상에서 검증자(verifier)와 각각 연관된 데이터 세트들을 저장하도록 구성된 저널(journal)을 생성하고,
상기 저장소 세트 내 하나의 위치에 데이터 세트를 저장하기 위한 요청을 수신하면, 상기 데이터 세트를 상기 저널에 저장하며,
상기 저널에 저장된 데이터 세트들의 배치(batch)를 선택하고,
상기 배치의 데이터 세트 각각에 대해,
상기 데이터 세트에 대한 검증자를 계산하며,
상기 저널에 상기 검증자를 저장하고,
상기 저장소 세트에 상기 데이터 세트와 상기 데이터 세트의 상기 검증자를 저장하고,
상기 데이터 세트와 상기 데이터 세트의 검증자를 상기 저장소 세트에 저장한 후 상기 데이터 세트를 상기 저널로부터 제거하도록 구성된 명령어를 실행시키는 단계를 포함하는
데이터 세트를 저장하는 방법.
- 제1항에 있어서,
상기 저널의 용량과 관련된 저널 용량 이벤트,
상기 저널에 저장되는 데이터 세트의 지속시간과 관련된 지속시간 이벤트,
상기 저널 내 적어도 하나의 데이터 세트를 저장소 세트로 커밋하기 위한 요청과 관련된 커밋 요청 이벤트, 및
상기 저장소 세트의 적어도 하나의 저장 장치의 작업부하와 관련된 저장 장치 작업부하 이벤트
를 포함하는 커밋 이벤트 세트(commit event set) 중에서 선택된 커밋 이벤트를 검출하면, 상기 저장소 세트에 저장될 데이터 세트의 배치를 선택하도록 구성되는 명령을 실행시키는 단계
를 포함하는 데이터 세트를 저장하는 방법.
- 제1항에 있어서,
상기 데이터 세트의 배치를 선택하는 것은,
상기 배치에, 상기 저널에 저장되어 있고 상기 저장소 세트 내 제 1 위치에 저장될 제 1 데이터 세트를 포함시키도록 선택하는 것, 및
상기 배치에, 상기 저널에 저장되어 있고 상기 저장소 세트 내 제 1위치와 가까운 제 2 위치에 저장될 제 2 데이터 세트를 포함시키도록 선택하는 것을 포함하는
데이터 세트를 저장하는 방법.
- 제1항에 있어서,
각각의 요청이 상기 데이터 세트를 위한 상기 저장소 세트 내 하나의 위치를 특정하고,
데이터 세트에 대한 검증자를 계산하는 것은
상기 저널에 완전히 기록된 데이터 세트에 대해, 상기 데이터 세트로부터 검증자를 계산하는 것, 및
상기 저널에 완전히 기록되지 않은 데이터 세트에 대해:
상기 저장소 세트 내 위치에서 상기 데이터 세트의 원본 버전을 읽는 것,
상기 데이터 세트의 원본 버전의 원본 검증자를 읽는 것,
상기 원본 검증자에서 상기 데이터 세트의 원본 버전을 제거하는 것, 및
상기 원본 검증자에 상기 데이터 세트를 포함시키는 것
을 포함하는 데이터 세트를 저장하는 방법.
- 제1항에 있어서,
상기 컴퓨터는 휘발성 메모리를 포함하고,
상기 명령어는
상기 저장 장치에 저장된 저널의 휘발성 메모리 표현을 휘발성 메모리에 생성하고,
상기 저널에 데이터 세트를 저장하면, 상기 저널의 휘발성 메모리 표현에 상기 데이터 세트를 저장하도록 구성되는
데이터 세트를 저장하는 방법.
- 제5항에 있어서,
상기 명령어는, 데이터 세트를 읽기 위한 요청을 수신하면,
상기 데이터 세트가 상기 휘발성 메모리 내 저널의 상기 휘발성 메모리 표현에 저장되어 있다고 판정되면, 상기 휘발성 메모리 표현에 저장된 데이터 세트를 제공하고,
상기 데이터 세트가 상기 저장 장치 상의 상기 저널에 저장되어 있다고 판정되면, 상기 저널에 저장된 데이터 세트를 제공하며,
상기 데이터 세트가 상기 저장 장치 상에 저장된 상기 저장소 세트에 저장되어 있다고 판정되면, 상기 저장 장치의 저장소 세트에 저장된 데이터 세트를 제공하도록 구성되는
데이터 세트를 저장하는 방법.
- 제5항에 있어서,
상기 명령어는 데이터 세트를 상기 저장소 세트에 저장한 후 상기 저널의 휘발성 메모리 표현으로부터 상기 데이터 세트를 제거하도록 구성되는
데이터 세트를 저장하는 방법.
- 제7항에 있어서,
상기 명령어는
데이터 세트를 상기 저널에 저장하면, 제거될 수 없음으로 마킹된 상기 저널의 휘발성 메모리 표현에 상기 데이터 세트를 저장하고,
데이터 세트를 상기 저장소 세트에 저장하면, 상기 저널의 휘발성 메모리 표현에 저장된 데이터 세트를 제거될 수 있음으로 마킹하도록 구성되며,
휘발성 메모리 내 상기 저널의 휘발성 메모리 표현으로부터 데이터 세트를 제거하는 것은, 제거될 수 있음으로 마킹된 데이터 세트만 상기 저널의 휘발성 메모리 표현으로부터 제거하는 것을 포함하는
데이터 세트를 저장하는 방법.
- 제5항에 있어서,
상기 저널의 상기 휘발성 메모리 표현은 데이터 세트의 용량을 갖고,
상기 휘발성 메모리 내에 상기 저널의 휘발성 메모리 표현을 생성하는 것은,
상기 휘발성 메모리 내 용량을,
상기 저널의 휘발성 메모리 표현 내 데이터 세트의 용량,
상기 저널의 휘발성 메모리 표현의 용량을 포함하는 데이터 세트의 검증자, 및
상기 저널에 저장된 데이터 세트가 상기 저장소 세트에 저장되는 동안 상기 저장소 세트에 저장될 데이터 세트를 저장하도록 구성된 버퍼를 저장하도록 예약하는 것을 포함하는
데이터 세트를 저장하는 방법.
- 장치의 프로세서 상에서 실행될 때, 저장소 세트 상에 데이터를 저장하는 명령을 포함하고 적어도 하나의 저장 장치를 포함하는 컴퓨터 판독형 저장 매체로서,
저장 장치 상에 레코드의 시퀀스, 헤드 포인터, 및 테일 포인터를 포함하는 저널을 생성하고,
상기 저장소 세트 내 하나의 위치에 저장될 데이터 세트를 수신하면:
상기 저널의 헤드 포인터를 새 레코드를 지나 전진시키고, 상기 새 레코드에 데이터 세트를 저장하며,
상기 저널의 테일 포인터 근방에서 적어도 하나의 선택된 데이터 세트를 선택하고,
각각의 선택된 데이터 세트에 대해,
상기 선택된 데이터 세트에 대해 검증자를 계산하며,
상기 선택된 데이터 세트의 검증자를 상기 저널에 저장하고,
상기 선택된 데이터 세트 및 상기 데이터 세트의 검증자를 상기 저장소 세트에 커밋(commit)하며,
상기 저널의 상기 테일 포인터를 적어도 하나의 상기 선택된 데이터 세트를 지나 전진시킴으로써, 저장소 세트 상에 데이터를 저장하는
컴퓨터 판독형 저장 매체.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/229,736 | 2011-09-11 | ||
US13/229,736 US9229809B2 (en) | 2011-09-11 | 2011-09-11 | Nonvolatile media journaling of verified data sets |
PCT/US2011/055818 WO2013036265A1 (en) | 2011-09-11 | 2011-10-11 | Nonvolatile media journaling of verified data sets |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20140060521A true KR20140060521A (ko) | 2014-05-20 |
KR101863406B1 KR101863406B1 (ko) | 2018-06-29 |
Family
ID=47728149
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020147006372A KR101863406B1 (ko) | 2011-09-11 | 2011-10-11 | 검증된 데이터 세트의 비휘발성 매체 저널링 기법 |
Country Status (6)
Country | Link |
---|---|
US (1) | US9229809B2 (ko) |
EP (1) | EP2754051B1 (ko) |
JP (1) | JP6026538B2 (ko) |
KR (1) | KR101863406B1 (ko) |
CN (1) | CN102945201B (ko) |
WO (1) | WO2013036265A1 (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20200035592A (ko) * | 2018-09-27 | 2020-04-06 | 삼성전자주식회사 | 스토리지 장치의 구동 방법, 이를 수행하는 스토리지 장치 및 이를 포함하는 스토리지 시스템 |
Families Citing this family (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9229809B2 (en) | 2011-09-11 | 2016-01-05 | Microsoft Technology Licensing Llc | Nonvolatile media journaling of verified data sets |
US8456972B2 (en) | 2011-09-12 | 2013-06-04 | Microsoft Corporation | Efficient access to storage devices with usage bitmaps |
US8977826B1 (en) * | 2011-12-28 | 2015-03-10 | Emc Corporation | Extent commands in replication |
CA2890041C (en) * | 2012-11-02 | 2016-12-20 | Vod2 Inc. | Data distribution methods and systems |
GB2503600B (en) * | 2012-12-21 | 2014-05-14 | Mobile Content Man Solutions Ltd | Digital memory imaging system and method |
CN103488433B (zh) * | 2013-09-18 | 2016-05-11 | 北京思特奇信息技术股份有限公司 | 一种基于分布式文件系统的批量文件操作方法及系统 |
TWI498902B (zh) * | 2013-11-28 | 2015-09-01 | Phison Electronics Corp | 資料管理方法、記憶體儲存裝置及記憶體控制電路單元 |
US9628333B2 (en) * | 2013-12-04 | 2017-04-18 | International Business Machines Corporation | Operating a dual chipset network interface controller (‘NIC’) that includes a high performance media access control chipset and a low performance media access control chipset |
CN104021049B (zh) * | 2014-05-16 | 2017-11-03 | 华为技术有限公司 | 分布式存储系统中数据统一的方法和以太接口硬盘 |
US9720774B2 (en) * | 2015-06-29 | 2017-08-01 | Sap Se | Adaptive recovery for SCM-enabled databases |
US20170031791A1 (en) * | 2015-07-27 | 2017-02-02 | Futurewei Technologies, Inc. | Maintaining a parity-inconsistent table to identify stripes affected by a write hole effect |
JP6734536B2 (ja) * | 2016-07-29 | 2020-08-05 | 富士通株式会社 | 情報処理装置及びメモリコントローラ |
CN106599046B (zh) * | 2016-11-09 | 2020-06-30 | 北京同有飞骥科技股份有限公司 | 分布式文件系统的写入方法及装置 |
US10496319B2 (en) | 2017-02-28 | 2019-12-03 | Sap Se | Lifecycle management for data in non-volatile memory including blocking creation of a database savepoint and associating non-volatile memory block identifiers with database column fragments |
CN114089915B (zh) * | 2017-03-27 | 2022-12-20 | 珠海极海半导体有限公司 | 基于flash存储器的文件追加写操作方法及装置 |
US10936206B1 (en) * | 2017-04-05 | 2021-03-02 | Tintri By Ddn, Inc. | Handling a device in a latency state in a redundant storage system |
CN107315616B (zh) * | 2017-06-30 | 2020-08-21 | 苏州浪潮智能科技有限公司 | 一种固件的加载方法、装置及电子设备 |
KR102441997B1 (ko) * | 2017-11-01 | 2022-09-08 | 한국전자통신연구원 | 네트워크에서 메타데이터의 동기화를 제어하는 장치 및 그 방법 |
CN110018783B (zh) * | 2018-01-09 | 2022-12-20 | 阿里巴巴集团控股有限公司 | 一种数据存储方法、装置及系统 |
CN108920094B (zh) * | 2018-06-01 | 2021-06-08 | 深圳忆联信息系统有限公司 | 擦除单元raid方法、装置、计算机设备及存储介质 |
US11347653B2 (en) * | 2018-08-31 | 2022-05-31 | Nyriad, Inc. | Persistent storage device management |
CN111208933B (zh) * | 2018-11-21 | 2023-06-30 | 昆仑芯(北京)科技有限公司 | 数据访问的方法、装置、设备和存储介质 |
CN112003815A (zh) * | 2019-05-27 | 2020-11-27 | 阿里巴巴集团控股有限公司 | 通信系统、方法和装置、定位系统、计算设备和存储介质 |
US10970170B2 (en) * | 2019-08-29 | 2021-04-06 | Micron Technology, Inc. | Shared parity protection |
CN113126887B (zh) * | 2020-01-15 | 2024-09-06 | 伊姆西Ip控股有限责任公司 | 用于重建盘阵列的方法、电子设备和计算机程序产品 |
US11429308B2 (en) * | 2020-03-18 | 2022-08-30 | Vmware, Inc. | Adaptive metadata batching based on input/output rate |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070174580A1 (en) * | 2003-05-09 | 2007-07-26 | Nikita Shulga | Scalable storage architecture |
US20090106334A1 (en) * | 2007-10-19 | 2009-04-23 | Apple Inc. | Method and apparatus for relocating an active file system journal |
Family Cites Families (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2888958B2 (ja) | 1990-10-20 | 1999-05-10 | 富士通株式会社 | 部分書き換え可能な記憶媒体におけるファイル管理方式 |
JP3250861B2 (ja) | 1993-03-09 | 2002-01-28 | 株式会社日立製作所 | ディスク装置システム |
JPH08147110A (ja) | 1994-11-18 | 1996-06-07 | Sony Corp | データ記録媒体管理方法、データ記録媒体管理装置およびデータ記録媒体 |
JP2000305860A (ja) | 1999-04-23 | 2000-11-02 | Toshiba Corp | 情報記憶システム及び同システムに於ける記憶制御方法 |
JP2001051806A (ja) | 1999-08-05 | 2001-02-23 | Fujitsu Ltd | ディスクアレイ装置 |
JP2001166993A (ja) | 1999-12-13 | 2001-06-22 | Hitachi Ltd | 記憶制御装置およびキャッシュメモリの制御方法 |
US6516380B2 (en) | 2001-02-05 | 2003-02-04 | International Business Machines Corporation | System and method for a log-based non-volatile write cache in a storage controller |
JP2003196032A (ja) | 2001-12-26 | 2003-07-11 | Nec Corp | ストレージ装置のライトキャッシュ制御方法及びストレージ装置 |
JP3788961B2 (ja) * | 2002-08-30 | 2006-06-21 | 株式会社東芝 | ディスクアレイ装置及び同装置におけるレイドレベル変更方法 |
US7035974B2 (en) | 2002-11-06 | 2006-04-25 | Synology Inc. | RAID-5 disk having cache memory implemented using non-volatile RAM |
US7675828B2 (en) | 2003-02-25 | 2010-03-09 | Lg Electronics Inc. | Recording medium having data structure for managing at least a data area of the recording medium and recording and reproducing methods and apparatuses |
JP4026517B2 (ja) | 2003-03-12 | 2007-12-26 | ソニー株式会社 | 記録媒体、記録装置、記録方法 |
US7162401B1 (en) | 2003-03-28 | 2007-01-09 | Applied Micro Circuits Corporation | Monitoring of resources that are being modeled by simulation or emulation |
JP2005032413A (ja) | 2003-06-19 | 2005-02-03 | Nec Corp | 光ディスクの未記録領域への記録方法、光デイスクの記録装置,光ディスク及び光ディスクのデータ記録用プログラム |
GB0318384D0 (en) | 2003-08-06 | 2003-09-10 | Ibm | A storage controller and a method for recording diagnostic information |
US7010721B2 (en) | 2003-09-29 | 2006-03-07 | International Business Machines Corporation | File system journal management |
US7197599B2 (en) * | 2003-12-29 | 2007-03-27 | Intel Corporation | Method, system, and program for managing data updates |
JP4144549B2 (ja) | 2004-03-31 | 2008-09-03 | 日本電気株式会社 | データ保存システムおよび該システムの制御方法 |
JP5128130B2 (ja) | 2004-05-10 | 2013-01-23 | パナソニック株式会社 | 追記形ディスクに対するデータ疑似書換え |
US7873782B2 (en) | 2004-11-05 | 2011-01-18 | Data Robotics, Inc. | Filesystem-aware block storage system, apparatus, and method |
JP4435705B2 (ja) * | 2005-03-14 | 2010-03-24 | 富士通株式会社 | 記憶装置、その制御方法及びプログラム |
US7562188B2 (en) | 2005-06-17 | 2009-07-14 | Intel Corporation | RAID power safe apparatus, systems, and methods |
TWI320139B (en) | 2005-08-01 | 2010-02-01 | Method for improving writing data efficiency and storage subsystem and system implementing the same | |
US7774346B2 (en) | 2005-08-26 | 2010-08-10 | Oracle International Corporation | Indexes that are based on bitmap values and that use summary bitmap values |
US7533298B2 (en) | 2005-09-07 | 2009-05-12 | Lsi Corporation | Write journaling using battery backed cache |
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 |
US7845008B2 (en) * | 2005-12-07 | 2010-11-30 | Lenovo (Singapore) Pte. Ltd. | Virus scanner for journaling file system |
US7574560B2 (en) | 2006-01-03 | 2009-08-11 | Emc Corporation | Methods, systems, and computer program products for dynamic mapping of logical units in a redundant array of inexpensive disks (RAID) environment |
JP4741371B2 (ja) | 2006-01-05 | 2011-08-03 | 株式会社日立製作所 | システム、サーバ装置及びスナップショットの形式変換方法 |
US7752402B2 (en) * | 2006-08-18 | 2010-07-06 | Isilon Systems, Inc. | Systems and methods for allowing incremental journaling |
JP2008225616A (ja) | 2007-03-09 | 2008-09-25 | Hitachi Ltd | ストレージシステム、リモートコピーシステム、及びデータ復元方法 |
KR101424782B1 (ko) | 2007-07-19 | 2014-08-04 | 삼성전자주식회사 | 솔리드 스테이트 디스크 컨트롤러 및 솔리드 스테이트디스크 컨트롤러의 데이터 처리 방법 |
US7877626B2 (en) | 2007-12-31 | 2011-01-25 | Datadirect Networks, Inc. | Method and system for disk storage devices rebuild in a data storage system |
JP5029513B2 (ja) * | 2008-06-30 | 2012-09-19 | ソニー株式会社 | 情報処理装置、情報処理装置の制御方法、およびプログラム |
JP5156518B2 (ja) | 2008-07-23 | 2013-03-06 | 株式会社日立製作所 | 記憶制御装置及び方法 |
US20100138603A1 (en) | 2008-12-03 | 2010-06-03 | Atul Mukker | System and method for preventing data corruption after power failure |
JP2010267164A (ja) * | 2009-05-15 | 2010-11-25 | Toshiba Storage Device Corp | 記憶装置、データ転送制御装置、データ転送方法およびデータ転送プログラム |
KR101562794B1 (ko) | 2009-08-04 | 2015-10-26 | 삼성전자주식회사 | 데이터 저장 장치 |
US9229809B2 (en) | 2011-09-11 | 2016-01-05 | Microsoft Technology Licensing Llc | Nonvolatile media journaling of verified data sets |
US8456972B2 (en) | 2011-09-12 | 2013-06-04 | Microsoft Corporation | Efficient access to storage devices with usage bitmaps |
-
2011
- 2011-09-11 US US13/229,736 patent/US9229809B2/en active Active
- 2011-10-11 JP JP2014529692A patent/JP6026538B2/ja active Active
- 2011-10-11 WO PCT/US2011/055818 patent/WO2013036265A1/en active Application Filing
- 2011-10-11 EP EP11872055.6A patent/EP2754051B1/en active Active
- 2011-10-11 KR KR1020147006372A patent/KR101863406B1/ko active IP Right Grant
-
2012
- 2012-09-11 CN CN201210333854.2A patent/CN102945201B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070174580A1 (en) * | 2003-05-09 | 2007-07-26 | Nikita Shulga | Scalable storage architecture |
US20090106334A1 (en) * | 2007-10-19 | 2009-04-23 | Apple Inc. | Method and apparatus for relocating an active file system journal |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20200035592A (ko) * | 2018-09-27 | 2020-04-06 | 삼성전자주식회사 | 스토리지 장치의 구동 방법, 이를 수행하는 스토리지 장치 및 이를 포함하는 스토리지 시스템 |
Also Published As
Publication number | Publication date |
---|---|
JP6026538B2 (ja) | 2016-11-16 |
EP2754051B1 (en) | 2020-01-01 |
EP2754051A4 (en) | 2015-11-25 |
KR101863406B1 (ko) | 2018-06-29 |
CN102945201A (zh) | 2013-02-27 |
US9229809B2 (en) | 2016-01-05 |
JP2014526735A (ja) | 2014-10-06 |
CN102945201B (zh) | 2016-02-17 |
WO2013036265A1 (en) | 2013-03-14 |
US20130067174A1 (en) | 2013-03-14 |
EP2754051A1 (en) | 2014-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101863406B1 (ko) | 검증된 데이터 세트의 비휘발성 매체 저널링 기법 | |
AU2017228544B2 (en) | Nonvolatile media dirty region tracking | |
US10936441B2 (en) | Write-ahead style logging in a persistent memory device | |
US9715521B2 (en) | Data scrubbing in cluster-based storage systems | |
JP6243028B2 (ja) | アトミック記憶操作のためのシステム及び方法 | |
US5819109A (en) | System for storing pending parity update log entries, calculating new parity, updating the parity block, and removing each entry from the log when update is complete | |
US8132044B1 (en) | Concurrent and incremental repair of a failed component in an object based storage system for high availability | |
JPH0642193B2 (ja) | Dasdアレイのための更新記録方法及び装置 | |
US20110154105A1 (en) | Redundant File System | |
US20230068214A1 (en) | Storage system | |
US10740189B2 (en) | Distributed storage system | |
WO2020088499A1 (en) | Journaling overhead reduction with remapping interface | |
US12079084B2 (en) | Distributed raid for parity-based flash storage devices | |
US8938594B2 (en) | Method and system for metadata-based resilvering |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
N231 | Notification of change of applicant | ||
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |