KR20130139883A - 오프로드 판독 및 기록 - Google Patents

오프로드 판독 및 기록 Download PDF

Info

Publication number
KR20130139883A
KR20130139883A KR1020137007387A KR20137007387A KR20130139883A KR 20130139883 A KR20130139883 A KR 20130139883A KR 1020137007387 A KR1020137007387 A KR 1020137007387A KR 20137007387 A KR20137007387 A KR 20137007387A KR 20130139883 A KR20130139883 A KR 20130139883A
Authority
KR
South Korea
Prior art keywords
data
token
offload
request
requestor
Prior art date
Application number
KR1020137007387A
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 KR20130139883A publication Critical patent/KR20130139883A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0617Improving the reliability of storage systems in relation to availability
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

본 명세서에 설명된 발명 대상의 양태는 오프로드 판독 및 기록에 관한 것이다. 양태에서, 데이터를 전송하고자 하는 요청자는 데이터의 표현을 위한 요청을 전송한다. 응답에서, 요청자는 데이터를 나타내는 하나 이상의 토큰을 수신한다. 그 후, 요청자는 하나 이상의 토큰에 의해 나타낸 데이터를 기록하기 위한 요청을 가진 구성 요소에 이러한 토큰 중 하나 이상을 제공할 수 있다. 일부 예시적인 애플리케이션에서, 이러한 구성 요소는 데이터를 식별하기 위해 하나 이상의 토큰을 이용하여, 요청자와의 추가적인 상호 작용 없이 데이터를 판독하거나 데이터를 논리적으로 기록할 수 있다. 토큰은 요청에 의해 무효화되거나 다른 요인에 기초할 수 있다.

Description

오프로드 판독 및 기록{OFFLOAD READS AND WRITES}
데이터를 전송하기 위한 하나의 메커니즘은 소스 위치(source location)의 파일로부터의 데이터를 메인 메모리로 판독하고 이 메인 메모리로부터 목적지 위치(destination location)로 데이터를 기록하는 것이다. 일부 환경에서, 이것은 비교적 적은 데이터에 대해 만족스럽게 동작할 수 있지만, 데이터가 증가함에 따라 데이터를 판독하며 데이터를 다른 위치로 전송하는 데 걸리는 시간은 증가한다. 게다가, 데이터가 네트워크를 통해 액세스될 경우, 네트워크는 데이터를 소스 위치에서 목적지 위치로 전송할 때 추가적인 지연을 부과할 수 있다. 더욱이, 저장 장치의 복잡성과 결합된 보안 문제가 데이터 전송을 복잡하게 할 수 있다.
본 명세서에 청구된 발명 대상은 어떤 단점을 해결하거나 상술한 것과 같은 환경에서만 동작하는 실시예로 제한되지 않는다. 오히려, 이러한 배경은 본 명세서에 설명된 일부 실시예가 실시될 수 있는 예시적인 기술 영역을 예시하기 위해 제공될 뿐이다.
간단히 말하면, 본 명세서에 설명된 발명 대상의 양태는 오프로드 판독 및 기록에 관한 것이다. 양태에서, 데이터를 전송하고자 하는 요청자는 데이터의 표현(representation of the data)에 대한 요청을 전송한다. 응답에서, 요청자는 데이터를 나타내는 하나 이상의 토큰을 수신한다. 그 후, 요청자는 하나 이상의 토큰에 의해 나타낸 데이터를 기록하도록 요청하는 구성 요소에 이러한 토큰 중 하나 이상을 제공할 수 있다. 일부 예시적 애플리케이션에서, 이러한 구성 요소는 하나 이상의 토큰을 이용하여 데이터를 식별할 수 있으며 그 후 요청자와의 추가적인 상호 작용 없이 데이터를 판독하거나 데이터를 논리적으로 기록할 수 있다. 토큰은 요청에 의해 또는 다른 요인에 기초하여 무효화될 수 있다.
이러한 요약은 아래에 상세한 설명에서 추가로 설명되는 발명 대상의 일부 양태를 간단히 식별하도록 제공된다. 이러한 요약은 청구된 발명 대상의 중요 또는 필수 특징(features)을 식별하도록 의도되지 않으며, 또한 청구된 발명 대상의 범위를 제한하는데 이용되도록 의도되지 않는다.
문구 "본 명세서에 설명된 발명 대상(subject matter described herein)"은 문맥이 명확하게 달리 나타내지 않으면 상세한 설명에 설명된 발명 대상을 나타낸다. 용어 "양태(aspects)"는 "적어도 하나의 양태"로 판독되어야 한다. 상세한 설명에 설명된 발명 대상의 양태의 식별은 청구된 발명 대상의 중요 또는 필수 특징을 식별하도록 의도되지 않는다.
본 명세서에 설명된 발명 대상의 상술한 양태 및 다른 양태는 동일한 참조 번호가 유사한 요소를 나타내는 첨부한 도면에서 제한되지 않고 예로서 예시된다.
도 1은 본 명세서에 설명된 발명 대상의 양태가 통합될 수 있는 예시적인 범용 컴퓨팅 환경을 나타내는 블록도이다.
도 2-5는 본 명세서에 설명된 발명 대상의 양태가 동작할 수 있는 시스템의 구성 요소의 예시적인 배치를 나타내는 블록도이다.
도 6-8은 일반적으로 본 명세서에 설명된 발명 대상의 양태에 따라 일어날 수 있는 예시적인 동작을 나타내는 흐름도이다.
정의
본 명세서에 사용되는 바와 같이, 용어 "포함한다(includes)" 및 이의 변형은 "포함하지만 제한되지 않는(includes, but is not limited to)"을 의미하는 제한을 두지 않은 용어(open-ended terms)로 판독되어야 한다. 용어 "또는(or)"은 문맥이 명백히 달리 지시하지 않으면 "및/또는(and/or)"으로 이해되어야 한다. 용어 "기초하여(based on)"는 "적어도 부분적으로 기초하여(based at least in part on)"로 이해되어야 한다. 용어 "일 실시예(one embodiment)" 및 "실시예(an embodiment)"는 "적어도 하나의 실시예(at least one embodiment)"로 이해되어야 한다. 용어 "다른 실시예(another embodiment)"는 "적어도 하나의 다른 실시예(at least one other embodiment)"로 이해되어야 한다. 다른 명시적 및 암시적 정의는 아래에 포함될 수 있다.
여기서 때때로 용어 "제 1(first)", "제 2(second)", "제 3(third)" 등이 사용된다. 특히 청구범위에서 이러한 용어의 사용은 순서를 의미하도록 의도되지 않으며 사실은 식별의 목적으로 사용된다. 예를 들면, 문구 "제 1 데이터" 및 "제 2 데이터"는 반드시 제 1 데이터가 제 2 데이터 전에 물리적 또는 논리적으로 위치한다거나 제 1 데이터가 제 2 데이터 전에 요청되거나 운영된다는 것을 의미하는 것은 아니다. 오히려, 이러한 문구는 별개이거나 별개가 아닐 수 있는 데이터의 세트를 식별하는데 사용된다. 즉, 제 1 데이터 및 제 2 데이터는 서로 다른 데이터, 동일한 데이터, 동일한 데이터 및 일부 서로 다른 데이터의 일부 등을 나타낼 수 있다. 제 1 데이터는 제 2 데이터의 서브세트, 잠재적으로 적절한 서브세트일 수 있거나 그 반대일 수 있다.
문구 "저장 장치의 데이터(data of the store)" 및 "저장 장치 내의 데이터(data in the store)"가 때때로 본 명세서에 사용되지만, 상술한 데이터를 저장 장치에 물리적으로 저장된 데이터로 제한하는데 이러한 문구를 사용할 의도가 없다. 오히려, 이러한 문구는 데이터가 저장 장치에 물리적으로 있지 않을 경우에도 데이터를 저장 장치에 논리적으로 있는 데이터로 제한하기 위한 것이다. 예를 들면, (아래에 설명되는) 저장 추상화(storage abstraction)는 상당수의 0(또는 다른 데이터 값)이 실제로 기본 저장 매체에 저장되는 것이 아니라 오히려 0을 나타내는 단축된 데이터(예를 들어, 값 및 길이)로 나타내는 최적화를 수행할 수 있다. 다른 예는 아래에 제공된다.
예시적인 운영 환경
도 1은 본 명세서에 설명된 발명 대상의 양태가 구현될 수 있는 적절한 컴퓨팅 시스템 환경(100)의 예를 예시한다. 컴퓨팅 시스템 환경(100)은 적절한 컴퓨팅 환경의 일례일 뿐이며, 본 명세서에 설명된 발명 대상의 양태의 사용 또는 기능의 범위에 관해 어떠한 제한을 제안하기 위한 것이 아니다. 어느 쪽도 컴퓨팅 환경(100)이 예시적인 운영 환경(100)에 예시된 구성 요소 중 어느 하나 또는 조합에 관한 의존성 또는 요구 사항을 갖는 것으로 해석되지 않아야 한다.
본 명세서에 설명된 발명 대상의 양태는 수많은 다른 범용 또는 특수 목적 컴퓨팅 시스템 환경 또는 구성으로 운영한다. 본 명세서에 설명된 발명 대상의 양태와 함께 사용하는데 적절할 수 있는 잘 알려진 컴퓨팅 시스템, 환경 또는 구성의 예는 개인용 컴퓨터, 서버 컴퓨터, 핸드헬드 또는 랩톱 장치, 멀티프로세서 시스템, 마이크로 제어기 기반 시스템, 셋톱 박스, 프로그램 가능한 가전 제품, 네트워크 PC, 미니컴퓨터, 메인 프레임 컴퓨터, 개인 휴대 단말기(PDA), 게임 장치, 프린터, 셋톱, 미디어 센터 또는 다른 기기(appliance)를 포함하는 기기, 자동차 내장 또는 부착된 컴퓨팅 장치, 다른 모바일 장치, 상기 시스템 또는 장치 중 어느 하나를 포함하는 분산 컴퓨팅 환경 등을 포함한다.
본 명세서에 설명된 발명 대상의 양태는 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행 가능 명령어의 일반적인 맥락에서 설명될 수 있다. 일반적으로, 프로그램 모듈은 루틴, 프로그램, 객체, 구성 요소, 데이터 구조 등을 포함하며, 이는 특정 태스크를 수행하거나 특정 추상 데이터(abstract data) 타입을 구현한다. 본 명세서에 설명된 발명 대상의 양태는 또한 태스크가 통신 네트워크를 통해 링크되는 원격 처리 장치에 의해 수행되는 분산 컴퓨팅에서 실시될 수 있다. 분산 컴퓨팅 환경에서, 프로그램 모듈은 메모리 저장 장치를 포함하는 로컬 및 원격 컴퓨터 저장 매체 양자에 위치될 수 있다.
도 1을 참조하면, 본 명세서에 설명된 발명 대상의 양태를 구현하기 위한 예시적인 시스템은 컴퓨터(110)의 형태의 범용 컴퓨팅 장치를 포함한다. 컴퓨터는 명령을 실행할 수 있는 어떤 전자 장치를 포함할 수 있다. 컴퓨터(110)의 구성 요소는 처리 유닛(120), 시스템 메모리(130) 및 시스템 버스(121)를 포함할 수 있으며, 시스템 버스(121)는 시스템 메모리를 포함한 다양한 시스템 구성 요소를 처리 유닛(120)에 결합한다. 시스템 버스(121)는 메모리 버스 또는 메모리 제어기, 주변 버스, 및 다양한 버스 아키텍처 중 어느 하나를 이용하는 로컬 버스를 포함하는 다양한 타입의 버스 구조 중 어느 하나일 수 있다. 제한이 아닌 예로서, 이러한 아키텍처는 ISA(Industry Standard Architecture) 버스, MCA(Micro Channel Architecture) 버스, EISA(Enhanced ISA) 버스, VESA(Video Electronics Standards Association) 로컬 버스, 또한 Mezzanine 버스로 알려진 PCI(Peripheral Component Interconnect) 버스, PCI-X(Peripheral Component Interconnect Extended) 버스, AGP(Advanced Graphics Port) 및 PCIe(PCI express)를 포함한다.
컴퓨터(110)는 전형적으로 다양한 컴퓨터 판독 가능한 매체를 포함한다. 컴퓨터 판독 가능한 매체는 컴퓨터(110)에 의해 액세스될 수 있는 어떤 이용 가능한 매체일 수 있고, 휘발성 및 비휘발성 매체, 및 이동식 및 비이동식 매체 양자를 포함한다. 제한이 아닌 예로서, 컴퓨터 판독 가능한 매체는 컴퓨터 저장 매체 및 통신 매체를 포함할 수 있다.
컴퓨터 저장 매체는 컴퓨터 판독 가능한 명령어, 데이터 구조, 프로그램 모듈 또는 다른 데이터와 같은 정보의 저장을 위한 어떤 방법 또는 기술로 구현되는 휘발성 및 비휘발성, 이동식 및 비이동식 매체 양자를 포함한다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 다른 메모리 기술, CD-ROM, 디지털 다용도 디스크(DVD) 또는 다른 광 디스크 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 또는 다른 자기 저장 장치, 또는 원하는 정보를 저장하는데 이용될 수 있고, 컴퓨터(110)에 의해 액세스될 수 있는 어떤 다른 매체를 포함한다.
통신 매체는 전형적으로 컴퓨터 판독 가능한 명령어, 데이터 구조, 프로그램 모듈, 또는 반송파 또는 다른 전송 메커니즘과 같이 변조된 데이터 신호의 다른 데이터를 실시하고, 어떤 정보 전달 매체를 포함한다. 용어 "변조된 데이터 신호"는 하나 이상의 이의 특성 세트를 가지거나 신호의 정보를 인코딩하는 방식으로 변경하는 신호를 의미한다. 제한이 아닌 예로서, 통신 매체는 유선 네트워크 또는 직접 유선 연결과 같은 유선 매체, 및 음향, RF, 적외선 및 다른 무선 매체와 같은 무선 매체를 포함한다. 어느 상술한 것의 조합은 또한 컴퓨터 판독 가능한 매체의 범위 내에 포함되어야 한다.
시스템 메모리(130)는 판독 전용 메모리(ROM)(131) 및 랜덤 액세스 메모리(RAM)(132)와 같은 휘발성 및/또는 비휘발성 메모리의 형태의 컴퓨터 저장 매체를 포함한다. 시동 중에서와 같이 컴퓨터(110) 내의 요소 사이로 정보를 전송하는데 도움을 주는 기본 루틴을 포함하는 기본 입력/출력 시스템(133)(BIOS)은 전형적으로 ROM(131)에 저장된다. RAM(132)은 전형적으로 처리 유닛(120)에 바로 액세스할 수 있고, 또는 처리 유닛(120)에 의해 현재 동작되는 데이터 및/또는 프로그램 모듈을 포함한다. 제한이 아닌 예로서, 도 1은 운영 체제(134), 애플리케이션 프로그램(135), 다른 프로그램 모듈(136) 및 프로그램 데이터(137)를 예시한다.
컴퓨터(110)는 또한 다른 이동식/비이동식, 휘발성/비휘발성 컴퓨터 저장 매체를 포함할 수 있다. 단지 예로서, 도 1은 비이동식, 비휘발성 자기 매체로부터 판독하거나 이러한 매체에 기록하는 하드 디스크 드라이브(141), 이동식, 비휘발성 자기 디스크(152)로부터 판독하거나 이러한 디스크에 기록하는 자기 디스크 드라이브(151), 및 CD ROM 또는 다른 광학 매체와 같이 이동식, 비휘발성 광 디스크(156)로부터 판독하거나 이러한 광 디스크에 기록하는 광 디스크 드라이브(155)를 도시한다. 예시적인 운영 환경에서 이용될 수 있는 다른 이동식/비이동식, 휘발성/비 휘발성 컴퓨터 저장 매체는 자기 테이프 카세트, 플래시 메모리 카드, 디지털 다목적 디스크, 다른 광 디스크, 디지털 비디오 테이프, 고체 상태(solid state) RAM, 고체 상태 ROM 등을 포함한다. 하드 디스크 드라이브(141)는 인터페이스(140)를 통해 시스템 버스(121)에 연결될 수 있으며, 자기 디스크 드라이브(151) 및 광 디스크 드라이브(155)는 인터페이스(150)와 같은 이동식 비휘발성 메모리에 대한 인터페이스에 의해 시스템 버스(121)에 연결될 수 있다.
상술하고 도 1에 예시된 드라이브 및 관련된 컴퓨터 저장 매체는 컴퓨터 판독 가능한 명령어, 데이터 구조, 프로그램 모듈 및 컴퓨터(110)에 대한 다른 데이터를 저장한다. 도 1에서, 예를 들어, 하드 디스크 드라이브(141)는 운영 체제(144), 애플리케이션 프로그램(145), 다른 프로그램 모듈(146) 및 프로그램 데이터(147)를 저장하는 것으로 예시된다. 이러한 구성 요소는 운영 체제(134), 애플리케이션 프로그램(135), 다른 프로그램 모듈(136) 및 프로그램 데이터(137)와 동일하거나 다를 수 있다는 것을 주목한다. 운영 체제(144), 애플리케이션 프로그램(145), 다른 프로그램 모듈(146) 및 프로그램 데이터(147)에는 최소한 이들이 서로 다른 사본임을 예시하기 위해 RAM(132)의 상응하는 대응물(counterpart)과 다른 번호가 부여된다.
사용자는 보통 마우스, 트랙볼 또는 터치 패드로 지칭되는 포인팅 장치(161) 및 키보드(162)와 같은 입력 장치를 통해 명령 및 정보를 컴퓨터(110)에 입력할 수 있다. (도시되지 않은) 다른 입력 장치는 마이크로폰, 조이스틱, 게임 패드, 위성 안테나(satellite dish), 스캐너, 터치 스크린(touch-sensitive screen), 기록 태블릿 등을 포함할 수 있다. 이러한 및 다른 입력 장치는 종종 시스템 버스에 결합되는 사용자 입력 인터페이스(160)를 통해 처리 유닛(120)에 연결되지만, 병렬 포트, 게임 포트 또는 범용 직렬 버스(USB)와 같은 다른 인터페이스 및 버스 구조에 의해 연결될 수 있다.
모니터(191) 또는 다른 타입의 디스플레이 장치는 또한 비디오 인터페이스(190)와 같은 인터페이스를 통해 시스템 버스(121)에 연결된다. 모니터 외에, 컴퓨터는 또한 출력 주변 인터페이스(195)를 통해 연결될 수 있는 스피커(197) 및 프린터(196)와 같은 다른 주변 출력 장치를 포함할 수 있다.
컴퓨터(110)는 원격 컴퓨터(180)와 같은 하나 이상의 원격 컴퓨터에 대한 논리적 연결을 이용하여 네트워크 환경에서 동작할 수 있다. 원격 컴퓨터(180)는 개인용 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 장치 또는 다른 공동 네트워크 노드일 수 있으며, 메모리 저장 장치(181)만이 도 1에 도시되었지만, 전형적으로 컴퓨터(110)에 대해 상술한 많은 또는 모든 요소를 포함한다. 도 1에 도시된 논리적 연결은 근거리 통신망(LAN)(171) 및 광역 통신망(WAN)(173)을 포함하지만, 다른 네트워크도 포함할 수 있다. 이러한 네트워크 환경은 사무소, 전사적(enterprise-wide) 컴퓨터 네트워크, 인트라넷 및 인터넷에서 흔하다.
LAN 네트워크 환경에 이용되면, 컴퓨터(110)는 네트워크 인터페이스 또는 어댑터(170)를 통해 LAN(171)에 연결된다. WAN 네트워크 환경에 이용되면, 컴퓨터(110)는 인터넷과 같이 WAN(173)을 통해 통신을 확립하기 위한 모뎀(172) 또는 다른 수단을 포함할 수 있다. 내부적 또는 외부적일 수 있는 모뎀(172)은 사용자 입력 인터페이스(160) 또는 다른 적절한 메커니즘을 통해 시스템 버스(121)에 연결될 수 있다. 네트워크 환경에서, 컴퓨터(110) 또는 이의 부분에 대해 도시된 프로그램 모듈은 원격 메모리 저장 장치에 저장될 수 있다. 제한이 아닌 예로서, 도 1은 메모리 장치(181)에 상주하는 원격 애플리케이션 프로그램(185)을 예시한다. 도시된 네트워크 연결은 예시적이고, 컴퓨터 사이에 통신 링크를 확립하는 다른 수단이 이용될 수 있다는 것이 이해될 것이다.
오프로드 판독 및 기록
상술한 바와 같이, 일부 전통적인 데이터 전송 동작은 효율적이지 않을 수 있거나 심지어 오늘날의 저장 환경에서 작업하지 않을 수 있다.
도 2-5는 본 명세서에 설명된 발명 대상의 양태가 동작할 수 있는 시스템의 구성 요소의 예시적인 배치를 나타내는 블록도이다. 도 2-5에 예시된 구성 요소는 예시적이고, 필요하거나 포함될 수 있는 구성 요소를 모두 포함하는 것으로 의미되지 않는다. 다른 실시예에서, 도 2-5에 관련하여 설명된 구성 요소 및/또는 기능은 본 명세서에 설명된 발명 대상의 양태의 사상 또는 범위를 벗어나지 않고 (도시되거나 도시되지 않은) 다른 구성 요소에 포함될 수 있거나 하위 구성 요소(subcomponents)에 배치될 수 있다. 일부 실시예에서, 도 2-5에 관련하여 설명된 구성 요소 및/또는 기능은 다수의 장치에 걸쳐 분산될 수 있다.
도 2를 참조하면, 시스템(205)은 요청자(210), 데이터 액세스 구성 요소(215), 토큰 관리자(225), 저장 장치(220) 및 (도시되지 않은) 다른 구성 요소를 포함할 수 있다. 시스템(205)은 하나 이상의 컴퓨팅 장치를 통해 구현될 수 있다. 이러한 장치는, 예를 들어, 개인용 컴퓨터, 서버 컴퓨터, 핸드헬드 또는 랩톱 장치, 멀티프로세서 시스템, 마이크로 제어기 기반 시스템, 셋톱 박스, 프로그램 가능한 가전 제품, 네트워크 PC, 미니컴퓨터, 메인 프레임 컴퓨터, 셀 전화, 개인 휴대 단말기(PDA), 게임 장치, 프린터, 셋톱, 미디어 센터 또는 다른 기기를 포함하는 기기, 자동차 내장 또는 부착된 컴퓨팅 장치, 다른 모바일 장치, 상기 시스템 또는 장치 중 어느 하나를 포함하는 분산 컴퓨팅 환경 등을 포함한다.
시스템(205)이 단일의 장치를 포함하는 경우, 시스템(205)의 역할을 하도록 구성될 수 있는 예시적인 장치는 도 1의 컴퓨터(110)를 포함한다. 시스템(205)이 다수의 장치를 포함하는 경우, 다수의 장치 중 하나 이상은 도 1의 유사하거나 상이하게 구성된 컴퓨터(110)를 포함할 수 있다.
데이터 액세스 구성 요소(215)는 데이터를 저장 장치(220)로 전송하며 저장 장치(220)로부터 데이터를 전송하는데 이용될 수 있다. 데이터 액세스 구성 요소(215)는 예를 들어 I/O 관리자, 필터, 드라이버, 파일 서버 구성 요소, 저장 영역 네트워크(SAN) 또는 다른 저장 장치상의 구성 요소, 및 (도시되지 않은) 다른 구성 요소 중 하나 이상을 포함할 수 있다. SAN은 예를 들어 논리적 저장 타겟을 노출시키는 장치, 이러한 장치를 포함하는 통신 네트워크 등으로 구현될 수 있다.
일 실시예에서, 데이터 액세스 구성 요소는 요청자(210)와 저장 장치(220) 사이의 I/O를 조사할 기회가 제공되며 I/O를 변경, 완료 또는 실패할 수 있거나 이에 기초하여 다른 것을 수행하거나 전혀 동작하지 않을 수 있는 어떤 구성 요소를 포함할 수 있다. 예를 들면, 시스템(205)이 단일의 장치에 상주하는 경우, 데이터 액세스 구성 요소(215)는 요청자(210)와 저장 장치(220) 사이의 I/O 스택의 어떤 객체를 포함할 수 있다. 시스템(205)이 다수의 장치로 구현되는 경우, 데이터 액세스 구성 요소(215)는 요청자(210)를 호스팅하는 장치상의 구성 요소, 저장 장치(220)로의 액세스를 제공하는 장치상의 구성 요소, 및/또는 다른 장치상의 구성 요소 등을 포함할 수 있다. 다른 실시예에서, 데이터 액세스 구성 요소(215)는 데이터가 이용된 구성 요소를 통해 이동하지 않을 경우에도 I/O가 통과하는 구성 요소에 의해 이용되는 (예를 들어, 서비스, 데이터베이스 등과 같은) 어떤 구성 요소를 포함할 수 있다.
본 명세서에 이용된 바와 같이, 용어 구성 요소는 장치의 모두 또는 일부, 하나 이상의 소프트웨어 모듈 또는 이의 부분의 집합체, 하나 이상의 소프트웨어 모듈 또는 이의 부분 및 하나 이상의 장치 또는 이의 부분의 일부 조합 등을 포함하는 것으로 판독되어야 한다.
일 실시예에서, 저장 장치(220)는 데이터를 저장할 수 있는 어떤 저장 매체이다. 이러한 저장 장치(220)는 휘발성 메모리(예를 들어, 캐시) 및 비휘발성 메모리(예를 들어, 영구적 저장 장치)를 포함할 수 있다. 용어 데이터는 하나 이상의 컴퓨터 저장 요소에 의해 나타낼 수 있는 어떤 것을 포함하는 것으로 광범하게 판독되어야 한다. 논리적으로, 데이터는 휘발성 또는 비휘발성 메모리의 일련의 1 및 0으로 나타낼 수 있다. 비바이너리(non-binary) 저장 매체를 가진 컴퓨터에서, 데이터는 저장 매체의 능력에 따라 나타낼 수 있다. 데이터는 숫자, 문자 등과 같은 간단한 데이터 타입, 계층, 링크 또는 다른 관련된 데이터 타입을 포함하는 데이터 구조, 다수의 다른 데이터 구조 또는 간단한 데이터 타입을 포함하는 데이터 구조 등의 여러 타입으로 구성될 수 있다. 데이터의 일부 예는 정보, 프로그램 코드, 프로그램 상태, 프로그램 데이터, 명령, 다른 데이터 등을 포함한다.
저장 장치(220)는 하드 디스크 저장 장치, 고체 상태 저장 장치, 또는 다른 비휘발성 저장 장치, RAM과 같은 휘발성 메모리, 다른 저장 장치, 이의 일부 조합 등을 포함할 수 있고, 다수의 장치(예를 들어, 다수의 SAN, 다수의 파일 서버, 이기종 장치의 조합 등)에 걸쳐 분산될 수 있다. 저장 장치(220)를 구현하는데 이용되는 장치 (예를 들어, 단일 장치, 데이터 센터 등에서) 물리적으로 함께 위치되거나 지리적으로 분산될 수 있다. 저장 장치(220)는 계층 저장 장치 또는 비계층 저장 장치에 배치될 수 있다. 저장 장치(220)는 외부 장치, 내부 장치일 수 있거나, 시스템(205)을 구현하는 하나 이상의 장치에 양자 모두 내부 및 외부적인 구성 요소를 포함할 수 있다. 저장 장치(220)는 (예를 들어, 파일 시스템으로) 포맷되거나 비포맷(예를 들어, 원시)될 수 있다.
다른 실시예에서, 저장 장치(220)는 직접 물리적 저장보다는 저장 추상화로 구현될 수 있다. 저장 추상화는 예를 들어 파일, 볼륨, 디스크, 가상 디스크, 논리 유닛, 데이터 스트림, 대안적 데이터 스트림, 메타 데이터 스트림 등을 포함할 수 있다. 예를 들면, 저장 장치(220)는 다수의 물리적 저장 장치를 갖는 서버에 의해 구현될 수 있다. 이러한 예에서, 서버는 데이터 액세스 구성 요소가 서버의 물리적 저장 장치 또는 이의 부분 중 하나 이상을 이용하여 구현되는 저장 장치의 데이터에 액세스하도록 허용하는 인터페이스를 제공할 수 있다.
이러한 추상화의 레벨은 어떤 임의의 깊이로 반복될 수 있다. 예를 들면, 저장 추상화를 데이터 액세스 구성 요소(215)에 제공하는 서버는 또한 데이터에 액세스하여 데이터를 저장하도록 저장 추상화에 의존할 수 있다.
다른 실시예에서, 저장 장치(220)는 비휘발성 저장 장치에 지속되거나 비지속될 수 있는 데이터로 뷰(view)를 제공하는 구성 요소를 포함할 수 있다.
데이터 액세스 구성 요소(215) 중 하나 이상은 요청자(210)를 호스팅하는 장치에 상주할 수 있지만, 데이터 액세스 구성 요소(215) 중 다른 하나 이상은 저장 장치(220)를 호스팅하거나 저장 장치(220)로의 액세스를 제공하는 장치에 상주할 수 있다. 예를 들면, 요청자(210)가 개인용 컴퓨터상에서 실행하는 애플리케이션이면, 데이터 액세스 구성 요소(215) 중 하나 이상은 개인용 컴퓨터상에서 호스팅되는 운영 체제에 상주할 수 있다. 다른 예로서, 저장 장치(220)가 저장 영역 네트워크(SAN)에 의해 구현되면, 데이터 액세스 구성 요소(215) 중 하나 이상은 저장 장치(220)를 관리하거나 저장 장치(220)로의 액세스를 제공하는 저장 운영 체제를 구현할 수 있다. 요청자(210) 및 저장 장치(220)가 단일의 장치에서 호스팅될 때, 모두 또는 많은 데이터 액세스 구성 요소(215)는 또한 장치에 상주할 수 있다.
저장 장치(220)의 데이터의 (아래에 설명되는) 오프로드 판독을 시작하기 위해, 요청자(210)는 (예를 들어, API를 통해) 미리 정의된 명령을 이용하여 데이터를 나타내는 토큰을 획득하기 위한 요청을 전송할 수 있다. 응답에서, 데이터 액세스 구성 요소(215) 중 하나 이상은 데이터 또는 이의 서브세트를 나타내는 하나 이상의 토큰을 제공하여 요청자(210)에 응답할 수 있다.
예를 들면, 다양한 이유로, 원래 요청된 데이터보다 적은 데이터를 나타내는 토큰을 반환하는 것이 바람직할 수 있다. 토큰이 반환될 때, 토큰이 나타내는 데이터의 길이 또는 심지어 다수의 데이터 범위를 갖고 반환될 수 있다. 그 길이는 원래 요청된 데이터의 길이보다 작을 수 있다.
데이터 액세스 구성 요소(215) 중 하나 이상은 오프로드 판독 또는 오프로드 기록 중 어느 하나에서 토큰과 관련된 요청된 길이보다 작은 것을 사용할 수 있다. 실제로 사용되는 데이터의 길이를 본 명세서에서는 흔히 "유효 길이(effective length)"로 지칭한다. 요청된 길이보다 작은 길이를 사용하는 것은 여러 가지 이유로 바람직할 수 있다. 유효 길이는 요청자 또는 다른 데이터 액세스 구성 요소가 실제로 명령에 의해 얼마나 많은 바이트가 사용되었는가를 인식하도록 반환될 수 있다.
데이터 액세스 구성 요소(215)는 예를 들어 다음을 포함하는 오프로드 판독 또는 기록에 응답하여 다양한 방식으로 작용할 수 있다.
1. 분할(partitioning) 데이터 액세스 구성 요소는 오프로드 판독 또는 기록 요청을 다음 하위 데이터 액세스 구성 요소로 전송하기 전에 이러한 요청의 오프셋을 조정할 수 있다.
2. RAID 데이터 액세스 구성 요소는 오프로드 판독 또는 기록 요청을 분할하고, 그 부분들(pieces)을 동일하거나 서로 다른 데이터 액세스 구성요소로 전송할 수 있다. RAID-0의 경우에, 수신된 요청은 (짧은 유효 길이를 생성하는) 스트라이프 경계(stripe boundary)를 따라 분할할 수 있는 반면에, RAID-1의 경우에는 전체 요청이 둘 이상의 데이터 액세스 구성 요소로 전송될 수 있다(그 결과 동일한 데이터에 대해 다수의 토큰이 생성된다).
3. 캐싱 데이터 액세스 구성 요소는 오프로드 판독 요청에 의해 획득되려고 하는 데이터를 포함하는 캐시의 부분을 기록할 수 있다.
4. 캐싱 데이터 액세스 구성 요소는 오프로드 기록 요청에 의해 겹쳐쓰기되려고 하는 데이터를 포함하는 캐시의 부분을 무효로 할 수 있다.
5. 데이터 검증 데이터 액세스 구성 요소는 오프로드 기록 요청에 의해 겹쳐쓰기되려고 하는 데이터의 임의의 캐시된 체크섬(cached checksum)을 무효화할 수 있다.
6. 암호화 데이터 액세스 구성 요소는 오프로드 판독 또는 기록 요청을 실패시킬 수 있다.
7. 스냅샷 데이터 액세스 구성 요소는 오프로드 기록 요청에 의해 겹쳐쓰기되려고 하는 위치의 데이터를 복사할 수 있다. 이것은 사용자가 나중에 필요하다면 그 파일의 '이전의 버전'으로 '돌아갈(go back)' 수 있도록 부분적으로 행해질 수 있다. 스냅샷 데이터 액세스 구성 요소는 그 자신이 (겹쳐쓰기되려고 하는) 위치의 데이터를 백업 위치에 복사하기 위해 오프로드 판독 및 기록 명령을 이용할 수 있다. 이러한 예에서, 스냅샷 데이터 액세스 구성 요소는 (아래에서 설명되는) "다운스트림 요청자"로 간주될 수 있다.
상기 예는 모두를 포함하거나 모든 것을 망라하도록 의도되지 않는다. 본원의 요지에 기초하여, 당업자는 본원의 요지가 본원에 설명된 발명 대상의 양태의 사상 또는 범위를 벗어나지 않고 적용될 수 있다는 다른 시나리오를 인식할 수 있다.
데이터 액세스 구성 요소(215)가 오프로드 판독 또는 기록에 실패하면, 다른 데이터 액세스 구성 요소 또는 요청자가 데이터를 판독하거나 기록하기 위해 다른 메커니즘을 시도하도록 하는 오류 코드가 반환될 수 있다. 능력 탐색(capability discovery)이 예를 들어 초기화 동안에 수행될 수 있다. 저장 장치 또는 심지어 하위 계층 데이터 액세스 구성 요소가 특정 동작을 지원하지 않을 때, 상위 데이터 액세스 구성 요소 또는 요청자에 의해 동일한 결과를 달성하기 위해 다른 동작이 수행될 수 있다. 예를 들면, (아래에 설명되는) 저장 시스템이 오프로드 판독 및 기록을 지원하지 않는 경우, 데이터 액세스 구성 요소가 토큰을 관리하고 데이터의 보기(view)를 유지할 수 있으며, 따라서 상위 데이터 액세스 구성 요소는 저장 장치 또는 하위 데이터 액세스 구성 요소가 이러한 능력을 제공하지 않는다는 것을 인식하지 못한다.
요청자는 발신(originating) 요청자 또는 다운스트림 요청자를 포함할 수 있다. 예를 들면, 요청자는 애플리케이션이 오프로드 기록을 수행할 수 있도록 토큰을 요청하는 애플리케이션을 포함할 수 있다. 이러한 타입의 요청자는 발신 요청자로 지칭될 수 있다. 다른 예로서, 요청자는 클라이언트로부터 복사 명령을 수신한 (예를 들어, 서버 메시지 블록(SMB) 서버와 같은) 서버 애플리케이션을 포함할 수 있다. 클라이언트는 데이터를 소스(source) 저장 장치에서 복사 명령을 통해 목적지(destination) 저장 장치에 복사할 것을 요청할 수 있다. SMB 서버는 이러한 요청을 수신하여 결과적으로 복사를 수행하기 위해 오프로드 판독 및 기록을 이용할 수 있다. 이 경우에, 요청자는 다운스트림 요청자로 지칭될 수 있다.
본원에 이용된 바와 같이, 문맥에서 달리 특정되거나 명확히 하지 않았다면, 용어 요청자(requestor)는 발신 요청자 및 다운스트림 요청자 양자를 포함하는 것으로 이해되어야 한다. 발신 요청자는 최초로 오프로드 판독 또는 기록에 대한 요청을 전송하는 요청자이다. 다시 말하면, 용어 요청자는 요청자가 오프로드 판독 또는 기록을 자발적으로 발신하는 경우 뿐만 아니라 요청자가 오프로드 판독의 시작에 응답하는 요청자 외의 추가 구성 요소가 있는 경우를 포괄하도록 의도된다.
예를 들면, 발신 요청자는 데이터를 소스에서 목적지로 전송하고자 하는 애플리케이션일 수 있다. 이러한 타입의 발신 요청자는 데이터를 전송하기 위해 하나 이상의 오프로드 판독 및 기록 요청을 데이터 액세스 구성 요소(215)로 보낼 수 있다.
다운스트림 요청자는 다른 요청자로부터의 요청을 만족시키도록 하나 이상의 오프로드 판독 또는 기록을 하는 요청자이다. 예를 들면, 하나 이상의 데이터 액세스 구성 요소(215)가 다운스트림 요청자 역할을 할 수도 있고, 다른 요청자로부터 행해진 요청을 충족시키도록 하나 이상의 오프로드 판독 또는 기록을 시작할 수도 있다. 다운스트림 요청자에 대한 일부 예는 이러한 예가 모두를 포함하거나 모든 것을 망라하도록 의도되지 않지만 RAID-0, 분할 및 스냅샷 데이터 액세스 구성 요소와 관련하여 상술되었다.
일 실시예에서, 토큰은 추측하기 어려운 난수 또는 의사 난수를 포함한다. 숫자를 추측하는 어려움은 숫자를 생성하는데 이용되는 메커니즘 뿐만 아니라 숫자의 크기에 의해서도 선택될 수 있다. 숫자는 저장 장치(220) 상의 데이터를 나타내지만, 데이터보다 훨씬 작을 수 있다. 예를 들면, 요청자는 100 기가바이트 파일의 토큰을 요청할 수 있다. 응답에서, 요청자는 예를 들어 512 바이트 또는 다른 크기의 토큰을 수신할 수 있다.
토큰이 유효하기만 한다면, 토큰은 데이터를 나타낸다. 일부 구현에서, 토큰은 토큰이 데이터에 바인딩(binding)되었을 때에 논리적으로 존재한 데이터를 나타낼 수 있다. 용어 논리적으로는 데이터가 모두 저장 장치에 있지 않거나 심지어 지속될 수 없을 때에 사용된다. 예를 들면, 데이터의 일부는 토큰이 제공될 수 있기 전에 플러시(flush)될 필요가 있는 캐시 내에 있을 수 있다. 다른 예로서, 데이터의 일부는 다른 데이터에서 도출될 수 있다. 다른 예로서, 서로 전혀 다른 소스로부터의 데이터는 조합되거나 토큰으로 나타낸 데이터를 생성하도록 조작될 필요가 있을 수 있다. 토큰에 대한 요청이 수신된 후와 토큰이 반환되기 전이나 반환되는 시간에 바인딩이 발생할 수 있다.
다른 구현에서, 토큰으로 나타낸 데이터는 변경될 수 있다. 데이터가 토큰의 유효 기간 동안 변경될 수 있는지의 동작은 요청자와 협상될 수 있거나 구성 요소 사이에 협상될 수 있다. 이것은 아래에 더욱 상세히 설명된다.
토큰이 만료되어 무효화되거나 명시적으로 만료되기 전에 무효화될 수 있다. 예를 들면, 토큰으로 나타낸 파일이 닫히거나, 요청자(210)를 호스팅하는 컴퓨터가 꺼지거나, 토큰으로 나타낸 데이터를 가진 볼륨이 분리되거나, 토큰의 의도된 사용이 완료되는 등의 동작이 발생하면, 토큰을 명시적으로 무효화하기 위한 메시지가 전송될 수 있다.
일부 구현에서, 토큰을 무효화하는 메시지는 강제적이고 따라야하는 것으로 처리될 수 있다. 다른 구현에서는, 토큰을 무효화하는 메시지는 어느 것을 따라야하는지 또는 따르지 말아야 하는지에 대한 힌트(hint)로 처리될 수 있다. 토큰이 무효화된 후, 그것은 더 이상 데이터에 액세스하는데 이용될 수 없다.
토큰은 토큰이 나타내는 데이터를 보호하는 동일한 보안 메커니즘에 의해 보호될 수 있다. 예를 들면, 사용자가 파일을 개방하여 판독할 수 있는 권한을 가지면, 이것은 사용자가 다른 곳에서 파일을 복사하도록 하는 토큰을 사용자가 획득하게 할 수 있다. 파일을 판독하기 위한 채널이 확보되면, 토큰은 확보된 채널을 통해 전달될 수 있다. 데이터가 다른 엔티티에 제공될 수 있는 경우, 토큰은 마치 데이터가 다른 엔티티에 전달될 수 있는 것처럼 다른 엔티티에 전달될 수 있다. 수신 엔티티는 그 데이터 자체가 수신 엔티티로 전송된 데이터 자체인 것을 이용한 것처럼 수신 엔티티는 데이터를 획득하기 위해 토큰을 이용할 수 있다.
토큰은 변경되지 않을 수 있다. 즉, 토큰이 어떤 방식으로 변경되면, 그것은 토큰을 나타낸 데이터에 더 이상 액세스하는데 이용될 수 없다.
일 실시예에서는 데이터를 나타내는 하나의 토큰만이 제공된다. 그러나, 다른 실시예에서는 각각 데이터의 부분을 나타내는 다수의 토큰이 제공될 수 있다. 또 다른 실시예에서는 데이터의 부분 또는 전부가 다수의 토큰으로 표현될 수 있다. 이러한 토큰은 다른 데이터 구조에 캡슐화될 수 있거나 별도로 제공될 수 있다.
캡슐화된 경우, 요청자가 데이터에 대한 동작(예를 들어, 오프로드 기록, 토큰 무효화)을 수행하고자 할 때에 비고급(non-advanced) 요청자는 단순히 데이터 구조를 데이터 액세스 구성 요소로 전달할 수 있다. 더 고급 요청자(210)는 캡슐화된 데이터 구조에 토큰을 재배치할 수 있고, 데이터 동작을 수행하기 위해 다른 토큰에서 별도로 개별 토큰을 이용하거나 다수의 토큰이 다시 전달될 때에 다른 동작을 취할 수 있다.
토큰을 수신한 후, 요청자(210)는 토큰으로 나타낸 데이터의 전부 또는 부분이 논리적으로 기록되어야 할 것을 요청할 수 있다. 여기서 때때로 이러한 동작은 오프로드 기록이라 한다. 요청자(210)는 하나 이상의 오프셋 및 길이와 함께 토큰을 데이터 액세스 구성 요소(215)로 전송하여 이러한 동작을 행할 수 있다.
오프로드 기록의 경우, 관련된 각 토큰에 대해, 목적지 관련 오프셋(destination-relative offset)뿐만 아니라 토큰 관련 오프셋이 표시될 수 있다. 어느 하나 또는 양자의 오프셋은 암시적이거나 명시적일 수 있다. 토큰 관련 오프셋은 예를 들어 토큰으로 나타낸 데이터의 시작으로부터의 바이트(또는 다른 단위)의 수를 나타낼 수 있다. 목적지 관련 오프셋은 목적지에 대한 데이터의 시작으로부터의 바이트(또는 다른 단위)의 수를 나타낼 수 있다. 길이는 오프셋에서 시작을 복사하기 위해 바이트(또는 다른 단위)의 수를 표시할 수 있다.
데이터 액세스 구성 요소(215) 중 하나 이상은 토큰을 수신하고, 토큰이 저장 장치에 데이터를 나타내는지를 검증할 수 있으며, 만일 그렇다면, 상기 구성 요소는 기본 저장 장치(220)를 호스팅하는 저장 시스템의 능력에 따라 토큰으로 나타내는 데이터의 부분을 논리적으로 기록할 수 있다. 기본 저장 장치(220)를 호스팅하는 저장 시스템은 하나 이상의 SAN, 전용 파일 서버, 일반 서버 또는 다른 컴퓨터, 네트워크 기기(network appliance), 도 1의 컴퓨터(110)를 구현하는데 적절한 어떤 다른 장치 등을 포함할 수 있다.
예를 들면, 저장 장치(220)가 SAN과 같은 저장 시스템을 통해 호스팅되고, 요청자(210)가 SAN에 존재하는 데이터를 나타내는 토큰을 이용하여 SAN에 오프로드 기록을 요청하는 경우, SAN은 데이터의 다른 물리적 복사를 하지 않고 데이터를 논리적으로 기록하도록 SAN의 독점적인 메커니즘을 활용할 수 있다. 예를 들면, 참조 카운팅(reference counting) 또는 다른 메커니즘은 데이터의 논리적 복사의 수를 표시하는데 이용될 수 있다. 예를 들면, 참조 카운트는 블록의 참조 카운트를 증가시켜 블록이 SAN에서 논리적으로 중복될 수 있는 블록 레벨에서 이용될 수 있다.
다른 예로서, 저장 장치(220)는 오프로드 기록이 데이터를 물리적으로 복사하는 것을 포함하지 않도록 오프로드 기록을 수행하는데 유용한 다른 메커니즘을 가질 수 있는 파일 서버와 같은 저장 시스템을 통해 호스팅될 수 있다.
또 다른 예로서, 저장 장치(220)는 오프로드 기록에 응답하여 저장 시스템의 한 위치에서 다른 위치에 데이터를 물리적으로 복사하는 "덤(dumb)" 저장 시스템을 통해 호스팅될 수 있다.
상기 예는 모두를 포함하거나 모든 것을 망라하도록 의도되지 않는다. 실제로, 요청자의 관점에서, 그것은 저장 시스템이 오프로드 기록에 상응하는 데이터 전송을 구현하는 방법과는 무관할 수 있다.
상술한 바와 같이, 저장 시스템의 데이터 전송 동작은 시간이 지연될 수 있다. 일부 시나리오에서는 데이터 전송 동작이 전혀 발생하지 않을 수 있다. 예를 들면, 저장 시스템은 오프로드 기록이 완료되었다고 신속하게 응답할 수 있지만, 저장 시스템이 실제로 데이터 전송을 시작하기 전에 기본 저장을 트림(trim)하는 명령을 수신할 수 있다. 이 경우에, 저장 시스템에서의 데이터 전송 동작은 취소될 수 있다.
요청자(210)는 토큰을 하나 이상의 다른 엔티티와 공유할 수 있다. 예를 들면, 요청자는 요청자(210)가 호스팅되는 장치 외부의 장치에 호스팅된 애플리케이션으로 토큰을 전송할 수 있다. 그 후, 이러한 애플리케이션은 요청자(210)가 가질 수 있는 방식과 동일한 방식으로 데이터를 기록하기 위해 토큰을 이용할 수 있다. 이러한 시나리오는 도 5에 예시된다.
도 5를 참조하면, 데이터 액세스 구성 요소(215)를 이용하여 요청자(210)는 저장 장치(220)에서 데이터를 나타내는 토큰을 요청하여 획득한다. 그 후, 요청자(210)는 이러한 토큰을 요청자(510)로 전달한다. 그 다음, 요청자(510)는 데이터 액세스 구성 요소(515)를 통해 토큰을 전송하여 데이터를 기록할 수 있다.
하나 이상의 데이터 액세스 구성 요소(215 및 515)는 동일할 수 있다. 예를 들면, 요청자(210 및 510)가 동일한 장치에 호스팅되는 경우, 모든 데이터 액세스 구성 요소(215 및 515)는 양자의 요청자에 대해 동일할 수 있다. 요청자(210 및 510)가 서로 다른 장치에 호스팅되는 경우, 일부 구성 요소(예를 들어, 저장 장치(220)에 호스팅하거나 저장 장치(220)로의 액세스를 제공하는 장치를 구현하는 구성 요소)는 동일할 수 있지만, 다른 구성 요소(예를 들어, 서로 다른 장치의 구성 요소)는 다를 수 있다.
도 2로 돌아가면, 일 실시예에서, 데이터 액세스 구성 요소(215) 중 하나 이상은 (예를 들어, 토큰 관리자(225)와 같은) 토큰 관리자를 포함하거나 토큰 관리자와 협의할 수 있다. 토큰 관리자는 저장 장치(220)에 데이터를 나타내는 토큰을 생성하거나 획득하고, 이러한 토큰을 허가된 요청자에 제공하고, 토큰을 이용하여 데이터를 기록하도록 요청에 응답하며, 토큰을 무효화할 시기를 결정할 수 있는 하나 이상의 구성 요소를 포함할 수 있다. 아래에 더욱 상세히 설명되는 바와 같이, 토큰 관리자가 논리적으로 동일한 토큰 관리자가 오프로드 판독에서 토큰을 획득하고, 오프로드 기록에서 토큰을 사용하기 위해 양자 모두 이용되도록 다수의 장치에 걸쳐 분산될 수 있다. 이 경우에, 토큰 관리자의 분산된 구성 요소는 필요에 따라 토큰에 관한 정보를 획득하기 위해 서로 통신할 수 있다. 일 실시예에서, 토큰 관리자는 토큰을 생성하고, 토큰을 저장 장치(220)의 데이터와 관련시키는 토큰 저장 장치에 토큰을 저장하며, 요청자로부터 수신된 토큰이 토큰 저장 장치에서 발견되는지를 검증할 수 있다.
토큰 관리자(225)는 데이터가 발견될 수 있는 곳을 식별하는 데이터와 토큰을 관련시킬 수 있다. 이러한 데이터는 또한 토큰 관리자(225)의 분산된 구성 요소로부터 토큰 정보(토큰이 나타내는 어떤 데이터, 토큰이 만료된 경우, 다른 데이터 등)를 획득하기 위해 다수의 장치 사이로 토큰 관리자(225)가 분산되는 경우에 이용될 수 있다. 토큰 관리자(225)는 또한 부분적으로 요청자가 토큰과 관련된 데이터의 끝을 지나 데이터를 획득할 수 없다는 것을 보장하도록 토큰을 데이터의 길이와 관련시킬 수 있다.
저장 장치(220)의 데이터가 변경되거나 삭제된 경우, 토큰 관리자(225)는 토큰 관리자(225)가 구성되는 방법에 따라 다양한 동작을 취할 수 있다. 예를 들면, 토큰으로 나타낸 데이터를 보존하기 위해 구성되는 경우, 토큰 관리자(225)는 토큰이 생성된 시간에 존재하는 데이터의 사본이 유지되는 것을 보장할 수 있다. 일부 저장 시스템은 데이터가 변경될 때에도 이러한 사본을 유지하기 위한 정교한 메커니즘을 가질 수 있다. 이 경우에, 토큰 관리자(225)는 한동안 또는 달리 지시될 때까지 원본 데이터의 사본을 유지하기 위해 (저장 장치(220)가 부분일 수 있는) 저장 시스템에 지시할 수 있다.
다른 경우에, 저장 시스템은 원본 데이터의 사본을 유지하기 위한 메커니즘을 구현하지 않을 수 있다. 이 경우에, 토큰 관리자(225) 또는 다른 데이터 액세스 구성 요소(215)는 한동안 또는 달리 지시될 때까지 원본 데이터의 사본을 유지할 수 있다.
원본 데이터의 사본을 유지하는 것은 원본 데이터의 복제 사본(duplicate copy)보다는 논리적 사본을 유지하는 것을 포함할 수 있다는 것을 주목한다. 논리적 사본은 정확한 사본을 생성하는데 이용될 수 있는 데이터를 포함한다. 예를 들면, 논리적 사본은 데이터의 현재 상태와 함께 변경 로그(changelog)를 포함할 수 있다. 역으로 변경 로그를 현재 상태에 적용함으로써, 원본 사본이 획득될 수 있다. 다른 예로서, 원본 데이터를 재구성하는데 이용될 수 있는 논리적 사본을 유지하기 위해 COW(Copy-on-Write) 기술이 이용될 수 있다. 상기 예는 논리적 사본이 본 명세서에 설명된 발명 대상의 양태의 사상 또는 범위를 벗어나지 않고 구현될 수 있는 많은 방식이 있다는 것을 당업자가 이해하는 것으로 제한하도록 의도되지 않는다.
토큰 관리자(225)는 데이터가 변경될 때에 토큰을 무효화하도록 구성될 수 있다. 이 경우에, 토큰과 관련된 데이터가 변하도록 하는 것과 관련하여, 토큰 관리자(225)는 토큰이 더 이상 유효하지 않다는 것을 나타낼 수 있다. 이것은 예를 들어 토큰을 삭제하거나 토큰을 토큰 저장 장치에서 무효인 것으로 표시함으로써 행해질 수 있다. 토큰 관리자(225)가 저장 시스템의 구성 요소에 의해 구현되는 경우, 하나 이상의 장애 코드(failure code)가 하나 이상의 다른 데이터 액세스 구성 요소로 전달되고, 요청자(210)로 전달될 수 있다.
토큰 관리자(225)는 토큰의 만료를 관리할 수 있다. 예를 들면, 토큰은 TTL(time to live)을 가질 수 있다. TTL이 만료된 후, 토큰은 무효화될 수 있다. 다른 실시예에서, 토큰은 다음의 것을 포함하는 다양한 요인에 따라 유효성을 유지할 수 있다.
1. 저장 제약 조건(constraint). 데이터의 원본 사본을 유지하는 것은 임계 값 이상의 공간을 소비할 수 있다. 그 점에서, 하나 이상의 토큰은 메모리 공간을 확보하기 위해 무효화될 수 있다.
2. 메모리 제약 조건. 다수의 토큰을 유지하여 소비되는 메모리는 임계값을 초과할 수 있다. 그 점에서, 하나 이상의 토큰은 메모리 공간을 확보하기 위해 무효화될 수 있다.
3. 토큰의 수. 시스템은 설정된 수의 활성화된 토큰을 허용할 수 있다. 최대 수의 토큰에 도달된 후, 토큰 관리자는 다른 토큰을 제공하기 전에 기존의 토큰을 무효화할 수 있다.
4. 입력/출력(IO) 오버헤드. 너무 많은 토큰을 갖는 IO 오버헤드는 토큰 관리자가 IO 오버헤드를 줄이기 위해 하나 이상의 토큰을 무효화할 수 있도록 할 수 있다.
5. IO 비용/대기 시간(latency). 토큰은 소스에서 목적지로의 데이터 전송의 비용 및/또는 대기 시간에 기초하여 무효화될 수 있다. 예를 들면, 비용이 임계값을 초과하면, 토큰은 무효화될 수 있다. 마찬가지로, 대기 시간이 임계값을 초과하면, 토큰은 무효화될 수 있습니다.
6. 우선 순위. 어떤 토큰은 다른 토큰보다 우선 순위를 가질 수 있다. 토큰이 무효화되면, 낮은 우선 순위 토큰은 무효화될 수 있다. 토큰의 우선 순위는 다양한 정책(예를 들어, 용도, 토큰에 관한 명시적 또는 암시적 지식, 요청자에 의한 요청, 다른 정책 등)에 기초하여 조정될 수 있다.
7. 저장 제공자 요청. 저장 제공자(예를 들어, SAN)는 활성화된 토큰의 수의 감축을 요청할 수 있다. 응답에서, 토큰 관리자는 적절한 하나 이상의 토큰을 무효화할 수 있다.
토큰에 기초하여 하나 이상의 오프로드 기록이 성공하기 전이나 후에도 토큰은 언제라도 무효화될 수 있다.
일 실시예에서, 토큰은 데이터를 나타내는 값만을 포함한다. 다른 실시예에서, 토큰은 또한 다른 데이터를 포함하거나 다른 데이터와 관련될 수 있다. 이러한 다른 데이터는 예를 들어 저장 장치, 저장 시스템, 또는 데이터를 획득할 수 있는 다른 엔티티를 결정하는데 이용될 수 있는 데이터, 네트워크 저장 시스템의 식별 정보, 라우팅 데이터 및 힌트, 액세스 제어 메커니즘에 관한 정보, 토큰으로 나타낸 데이터에 관한 체크섬, 테이터의 타입(예를 들어, 시스템, 메타데이터, 데이터베이스, 가상 하드 드라이브 등), 데이터의 액세스 패턴(예를 들어, 순차, 임의), 사용 패턴(예를 들어, 종종, 때때로, 드문 액세스 등), 데이터의 원하는 정렬, (예를 들어, 서로 다른 타입의 저장 장치를 가진 하이브리드 환경에서) 오프로드 기록 동안에 데이터의 배치를 최적화하기 위한 데이터 등을 포함할 수 있다.
상기 예는 토큰에 포함될 수 있거나 토큰과 관련될 수 있는 다른 데이터 모두를 포함하거나 모든 것을 망라하도록 의도되지 않는다. 실제로 본원의 요지에 기초하여, 당업자는 본 명세서에 설명된 발명 대상의 양태의 사상 또는 범위를 벗어나지 않고 토큰으로 전달될 수 있는 다른 데이터를 인식할 수 있다.
저장 장치로의 판독/기록 요청은 내부적으로 파일 단편(file fragment) 경계, RAID 스트라이프 경계, 볼륨 스패닝 경계 등과 마주칠 때 저장 스택의 하위 계층으로의 판독 요청을 스플리팅(splitting)할 수 있다. 이러한 스플리팅은 소스/목적지가 스플리팅된 부분(split)에 걸쳐 다르기 때문에 발생할 수 있다. 이러한 스플리팅은 생성된 스플리팅된 IO가 모두 완료될 때까지 스플리팅될 필요가 있는 요청을 완료하지 않음으로써 스플리터에 의해 숨겨질 수 있다.
저장 스택의 스플리팅 계층 내에서의 스플리팅의 이러한 숨겨짐은 저장 스택의 상기 계층이 스플리팅에 대해 알 필요가 없다는 점에서 편리하다. 일 실시예에서, 본 명세서에 설명된 토큰 기반의 접근 방식으로, 스플리팅이 시각적일 수 있다. 특히, 스플리팅이 스플리팅된 부분에 걸쳐 다른 소스/목적지로 인해 발생하면, (아래에 설명되는) 오프로드 제공자는 스플리팅된 부분에 걸쳐 다를 수 있다. 예를 들면, 데이터가 중복되는 경우(또는 중복되지 않는 경우에도), 데이터로의 액세스를 제공하는 다수의 오프로드 제공자가 있을 수 있다. 다른 예로서, SAN으로 향한 다수의 파일 서버가 있을 수 있다. SAN 이외에, 하나 이상의 서버 또는 다른 데이터 액세스 구성 요소는 오프로드 제공자로 간주될 수 있다.
오프로드 제공자는 저장 장치 소스 또는 목적지와 관련된 데이터로의 액세스를 제공하는 (아마도 다수의 장치에 걸쳐 분산된 다수의 구성 요소를 포함하는) 논리적 엔티티이다. 본 명세서에 사용된 액세스는 데이터 판독, 데이터 기록, 데이터 삭제, 데이터 업데이트, 이 중 둘 이상을 포함하는 조합 등을 포함할 수 있다. 논리적으로, 오프로드 제공자는 오프로드 판독 또는 기록을 수행할 수 있다. 물리적으로, 오프로드 제공자는 하나 이상의 데이터 액세스 구성 요소(215)를 포함할 수 있고, 또한 토큰 관리자(225)를 포함할 수 있다.
오프로드 제공자는 소스 저장 장치에서 데이터를 전송하고, 데이터를 목적지 저장 장치에 기록하며, 데이터와 관련된 토큰을 수신할 시에 제공되도록 데이터를 유지할 수 있다. 일부 구현에서, 오프로드 제공자는 데이터가 논리적으로 목적지 저장 장치에 기록된 후 오프로드 기록 명령이 완료된다는 것을 나타낼 수 있다. 게다가, 오프로드 제공자는 오프로드 기록 명령이 완료된다는 것을 나타낼 수 있지만, 편리할 때까지 오프로드 기록과 관련된 데이터를 물리적으로 기록하는 것을 연기할 수 있다.
데이터가 스플리팅될 때, 오프로드 제공자는 요청된 데이터의 일부로의 액세스를 제공하지만, 요청된 데이터의 다른 부분으로는 액세스를 제공하지 않을 수 있다. 이 경우에, 분리 토큰은 스플리팅된 포인트 전의 부분과 스플리팅된 포인트 후의 부분에 제공될 수 있다. 저장 스택의 계층 또는 오프로드 제공자에서의 다른 구현 의존 제약 조건은 토큰이 다른 이유로 스플리팅된 범위에 걸쳐 미치지 못하게 할 수 있다. 이러한 실시예에서, 요청자가 판독에서 반환된 토큰을 볼 수 있기 때문에, 스플리팅은 요청자에게 가시적일 수 있다.
다음은 스플리팅을 다루는 두 가지 예시적인 접근 방식이다.
1. 판독 요청은 각 토큰이 요청된 데이터의 다른 범위와 관련되는 둘 이상의 토큰을 반환할 수 있다. 상술한 바와 같이 이러한 다수의 토큰은 단일의 데이터 구조로 반환될 수 있다. 요청자가 데이터를 기록하고자 할 때, 그것은 데이터 구조 전체를 전달할 수 있거나, 개선된 방식으로 행하는 경우에는 데이터 구조의 하나 이상의 토큰을 전달할 수 있다.
2. 단일의 토큰이 반환되면, 토큰은 원래 요청된 데이터의 단축 범위를 나타낼 수 있다. 그 후, 요청자는 단축 범위의 길이 한도 내에서 하나 이상의 오프로드 기록을 수행하기 위해 토큰을 이용할 수 있다. 오프로드 기록이 요청되면, 요청된 기록의 길이는 또한 절단될 수 있다. 판독 및 기록의 양자에 대해, 요청자는 이전의 요청에 의해 처리되지 않은 오프셋에서 시작하는 다른 범위에 대한 요청을 할 수 있다. 이러한 방식으로, 요청자는 요청자의 전체 필요한 범위를 통해 작업할 수 있다.
상기 접근 방식은 예시적일 뿐이다. 본원의 요지에 기초하여, 당업자는 본 명세서에 설명된 발명 대상의 양태의 사상 또는 범위를 벗어나지 않고 활용될 수 있는 스플리팅을 다루기 위한 다른 접근 방식을 인식할 수 있다.
동일한 스택에는 다수의 오프로드 제공자가 있을 수 있다. 오프로드 판독 요청에서 반환된 소정의 범위(범위 절단의 경우에 가능한 유일한 범위)의 경우, 토큰을 기꺼이 제공하는 다수의 오프로드 제공자가 있을 수 있다. 일 실시예에서, 동일한 데이터에 대해 이러한 다수의 토큰이 요청으로 반환될 수 있고, 오프로드 기록에서 요청자에 의해 이용될 수 있다.
예를 들면, 요청자는 오프로드 기록에 이용하기 위해 토큰 중 하나를 선택할 수 있다. 하나의 토큰만을 오프로드 제공자에 전달함으로써, 요청자는 이러한 방식으로 데이터를 획득하는데 이용되는 소스 오프로드 제공자를 결정할 수 있다. 다른 예에서, 요청자는 둘 이상의 토큰을 목적지 오프로드 제공자에 전달할 수 있다. 그 후, 목적지 오프로드 제공자는 토큰으로 나타내는 데이터를 획득하기 위해 토큰과 관련된 하나 이상의 소스 오프로드 제공자를 선택할 수 있다.
다른 예에서, 다수의 토큰은 대량의 데이터(bulk data)의 오프로드된 복사, 및 대량의 데이터 이외에 다른 보조 데이터를 오프로드된 복사를 가능하게 하도록 반환될 수 있다. 보조 데이터의 일례는 데이터에 관한 메타데이터이다. 예를 들면, 전체 오프로드 사본이 성공하도록 하기 위해 파일 시스템 오프로드 제공자는 오프로드 기록 요청이 목적지 스택에서 성공적으로 이용되도록 두 토큰(예를 들어, 기본 데이터 토큰 및 메타데이터 토큰)을 포함하는 것을 특정할 수 있다.
대조적으로, 스택에서 다수의 대량의 데이터 오프로드 제공자를 지원하기 위해 이용되는 다수의 토큰은 오프로드 기록이 성공하도록 하기 위해 하나의 토큰만이 목적지 스택에 이용되는 것을 필요로 할 수 있다.
다수의 오프로드 제공자가 데이터를 소스에서 목적지로 전송할 수 있을 때, 요청자는 이용 가능한 하나 이상의 특정 오프로드 제공자를 선택할 수 있다. 일 실시예에서, 이것은 "스킵 N"이 제 1 N 오프로드 제공자를 스킵하는 것을 지시하는 스킵 N 명령을 사용하는 것을 포함할 수 있다. 다른 실시예에서, 특정 오프로드 제공자를 식별하는데 이용되는 다른 메커니즘(예를 들어, 오프로드 제공자의 ID)이 있을 수 있다. 또 다른 실시예에서, 많은 토큰 중 하나를 선택하는 것은 일부 오프로드 제공자가 토큰으로 나타낸 데이터를 복사할 수 없지만, 다른 오프로드 제공자가 그렇게 할 수 있을 때에 데이터를 복사하기 위해 오프로드 제공자를 선택하는데 이용될 수 있다.
일부 실시예에서, 둘 이상의 오프로드 제공자가 토큰으로 나타낸 데이터를 복사할 수 있는 경우, 최초, 마지막, 임의의, 적어도 로드된, 가장 효율적, 저 대기 시간, 또는 달리 결정된 오프로드 제공자는 자동으로 선택될 수 있다.
토큰은 하드 디스크 또는 다른 저장 매체의 어떤 섹터에서 시작하는 데이터를 나타낼 수 있다. 토큰이 나타내는 데이터는 정확히 다수의 섹터일 수 있지만, 대부분의 경우에는 아닐 수 있다. 토큰이 길이의 끝을 지난 데이터에 대한 파일 동작 시에 이용되는 경우, 반환된 데이터는 널(null), 0, 또는 데이터 없음(no data)의 일부 다른 표시일 수 있다. 따라서, 요청자가 토큰으로 나타낸 데이터의 끝을 지나 복사하려고 시도하는 경우, 요청자는 이러한 메커니즘을 통해서는 물리적으로 데이터의 끝을 지나 있는 데이터를 획득할 수 없다.
토큰은 큰 파일의 제로화(zeroing)를 오프로드하는데 이용될 수 있다. 예를 들면, 토큰은 널, 0, 또는 다른 "데이터 없음(no data)" 파일을 나타낼 수 있다. 오프로드 기록에서 이러한 토큰을 이용함으로써, 토큰은 파일 또는 다른 데이터를 초기화하는데 이용될 수 있다.
도 3은 일반적으로 토큰 관리자가 저장 장치를 호스팅하는 장치에 의해 호스팅되는 시스템의 구성 요소의 예시적 배치를 나타내는 블록도이다. 예시된 바와 같이, 시스템(305)은 도 2의 요청자(210) 및 저장 장치(220)를 포함한다. 도 3의 데이터 액세스 구성 요소(215)는 요청자(210)를 호스팅하는 장치(330)에 있는 데이터 액세스 구성 요소(310)와 저장 장치(220)를 호스팅하는 장치(335)에 있는 데이터 액세스 구성 요소(315) 사이에서 분할된다. 다른 실시예에서, 저장 장치(220)가 장치(335) 외부에 있을 경우에는 저장 장치(220)로의 액세스를 제공하는 추가적인 데이터 액세스 구성 요소가 있을 수 있다.
장치(335)는 이러한 장치가 토큰을 제공하고, 토큰이 주어진 데이터를 기록하기 위한 필요한 구성 요소를 포함할 때에 오프로드 제공자인 것으로 간주될 수 있다.
토큰 관리자(320)는 상술한 바와 같이 토큰을 생성하고 확인할 수 있다. 예를 들면, 요청자(210)가 저장 장치(220)에서 데이터에 대한 토큰을 요청하면, 토큰 관리자(320)는 데이터를 나타내는 토큰을 생성할 수 있다. 그 후, 이러한 토큰은 데이터 액세스 구성 요소(310 및 315)를 통해 요청자(210)로 다시 전송될 수 있다.
토큰을 생성하는 것과 관련하여, 토큰 관리자(320)는 토큰 저장 장치(325)에서 엔트리를 생성할 수 있다. 이러한 엔트리는 저장 장치(220)에서 토큰으로 나타내는 데이터가 발견될 수 있는 곳을 나타내는 데이터와 토큰을 관련시킬 수 있다. 엔트리는 또한 토큰, 토큰에 대한 TTL, 다른 데이터 등을 무효화할 때와 같이 토큰을 관리할 시에 이용되는 다른 데이터를 포함할 수 있다.
요청자(210) 또는 어떤 다른 엔티티가 토큰을 토큰 관리자(320)에 제공하면, 토큰 관리자는 토큰이 존재하는지를 판단하기 위해 토큰 저장 장치(325)에서 조회(lookup)를 수행할 수 있다. 토큰이 존재하고 유효한 경우, 토큰 관리자(320)는 데이터 액세스 구성 요소(315)가 요청받은 대로 데이터를 논리적으로 기록할 수 있도록 위치 정보를 이러한 구성 요소에 제공할 수 있다.
다수의 물리적 장치가 저장 장치(220)로의 액세스를 제공하는 경우, 토큰 관리자(320) 및/또는 토큰 저장 장치(325)는 하나 이상의 물리적 장치에 의해 호스팅되는 구성 요소를 가질 수 있다. 예를 들면, 토큰 관리자(320)는 장치에 걸쳐 토큰 상태를 복제할 수 있고, 다른 토큰 구성 요소가 참고하는 중앙 집중식 토큰 구성 요소를 가질 수 있으며, 필요한 기준에 따라 피어 토큰 관리자로부터 토큰 상태가 제공되는 분산 시스템 등을 가질 수 있다.
논리적으로, 토큰 관리자(320)는 토큰을 관리한다. 물리적으로, 토큰 관리자(320)는 단일 장치에 의해 호스팅될 수 있거나 둘 이상의 장치를 통해 분산된 구성 요소를 가질 수 있다. 토큰 관리자(320)는 저장 장치(220)를 호스팅하는 어떤 장치에서 분리되는 장치에 호스팅될 수 있다. 예를 들면, 토큰 관리자(320)는 데이터 액세스 구성 요소(315)가 토큰을 생성하고 확인하기 위해 호출하고, 이와 관련된 위치 정보를 제공할 수 있는 서비스로 존재할 수 있다.
일 실시예에서, 토큰 저장 장치(325)는 저장 장치(220)에 저장될 수 있다. 다른 실시예에서, 토큰 저장 장치(325)는 저장 장치(220)로부터 분리될 수 있다.
도 4는 일반적으로 본 명세서에 설명된 발명 대상의 양태에 따라 동작하는 시스템의 구성 요소의 다른 예시적 배치를 나타내는 블록도이다. 예시된 바와 같이, 장치(405)는 요청자(210) 뿐만 아니라 데이터 액세스 구성 요소(310) 및 가상화 계층(430)을 호스팅한다. 데이터 액세스 구성 요소(310)는 스택된 방식으로 배치되고, 구성 요소(415, 420, 425) 및 (도시되지 않은) 다른 구성 요소를 포함하는 N 구성 요소를 포함한다. 수 N은 변수이며, 장치 간에 다를 수 있다.
요청자(210)는 애플리케이션 프로그래밍 인터페이스(API)(410)를 통해 하나 이상의 데이터 액세스 구성 요소(310)에 액세스한다. 가상화 계층(430)은 요청자 또는 어느 하나의 데이터 액세스 구성 요소가 가상 환경에 있을 수 있음을 나타낸다.
가상 환경은 컴퓨터에 의해 시뮬레이션되거나 에뮬레이션되는 환경이다. 가상 환경은 물리적 머신, 운영 체제, 하나 이상의 인터페이스의 세트, 이의 부분, 이의 조합 등을 시뮬레이션하거나 에뮬레이션할 수 있다. 머신이 시뮬레이션되거나 에뮬레이션되면, 머신은 때때로 가상 머신이라 한다. 가상 머신은 가상 머신에서 실행하는 소프트웨어에 대해 물리적 머신인 것으로 보이는 머신이다. 소프트웨어는 가상 하드 드라이브, 가상 플로피 디스크 등과 같은 가상 저장 장치에 파일을 저장할 수 있고, 가상 CD로부터 파일을 판독할 수 있으며, 가상 네트워크 어댑터 등을 통해 통신할 수 있다.
가상 하드 드라이브, 플로피, CD 또는 다른 가상 저장 장치에서의 파일은 장치(405)에 로컬 또는 원격적일 수 있는 물리적 매체로 지원될 수 있다. 가상화 계층(430)은 데이터를 물리적 매체에 배치하며, 데이터에 액세스하는 하나 이상의 구성 요소가 가상 환경에서 데이터에 액세스하는 것을 인식하지 못하는 방식으로 데이터를 가상 환경에 제공할 수 있다.
둘 이상의 가상 환경은 단일 컴퓨터에서 호스팅될 수 있다. 즉, 둘 이상의 가상 환경은 단일의 물리적 컴퓨터에서 실행할 수 있다. 각 가상 환경에서 실행하는 소프트웨어에 대해, 단일 컴퓨터에서 호스팅되는 가상 환경이 물리적으로 하나 이상의 물리적 장치를 서로 공유하고 호스팅 운영 체제와 공유할 수 있을지라도 가상 환경은 자신의 자원(예를 들어, 하드웨어)을 갖는 것으로 보인다.
소스 저장 장치(435)는 요청자(210)가 토큰을 요청하는 저장 장치를 나타낸다. 목적지 저장 장치(440)는 요청자가 토큰을 이용하여 데이터를 기록할 것을 요청하는 저장 장치를 나타낸다. 구현에서, 소스 저장 장치(435) 및 목적지 저장 장치(440)는 단일 저장 장치(예를 들어, 다수의 볼륨을 가진 SAN) 또는 둘 이상의 저장 장치로 구현될 수 있다. 소스 저장 장치(435)가 원본 데이터의 사본을 유지하는 것을 지원하지 않는 경우, 하나 이상의 구성 요소(415-425)는 토큰의 수명 동안에 원본 데이터의 사본을 유지하기 위해 동작할 수 있다.
소스 저장 장치(435) 및 목적지 저장 장치(440)가 두 개의 별도의 저장 장치로 구현되면, 추가적 구성 요소(예를 들어, 저장 서버 또는 다른 구성 요소)는 장치(405)를 포함하지 않고 데이터를 소스 저장 장치(435)에서 목적지 저장 장치(440)로 전송할 수 있다. 그러나, 일 실시예에서, 소스 저장 장치(435) 및 목적지 저장 장치(440)가 두 개의 별도의 저장 장치로 구현되면, 하나 이상의 데이터 액세스 구성 요소(310)는 데이터를 소스 저장 장치(435)에서 목적지 저장 장치(440)로 복사하는 역할을 할 수 있다. 요청자(210)는 기본 복사를 수행하는 방법을 인식하거나 인식하지 못하고, 알거나 알지 못할 수 있다.
요청자(210)와 소스 저장 장치(435) 및/또는 목적지 저장 장치(440) 사이에는 다수의 경로가 있을 수 있다. 일 실시예에서, 본 명세서에 설명된 토큰 방법은 (예를 들어, 토큰 관리자를 통해 이용 가능한) 데이터를 나타내는 정보가 이용할 수 있는 경우에 제공되는 경로와 무관하다. 다시 말하면, 요청자(210)가 가상화 계층(430)을 통과하는 경로, 가상화 계층(430)을 통과하지 못하는 네트워크 경로, SMB 경로, 또는 소스 또는 목적지 저장 장치에 대한 어떤 다른 경로를 갖는 경우, 요청자(210)는 오프로드 기록을 목적지 저장 장치(440)에 행하기 위해 이러한 경로 중 하나 이상을 이용할 수 있다. 다시 말하면, 소스 저장 장치에 대한 경로 및 목적지 저장 장치에 대한 경로는 동일하거나 다를 수 있다.
오프로드 기록에서, 토큰은 기록할 데이터의 하나 이상의 오프셋 및 길이와 함께 목적지 저장 장치(440)로 전달된다. (반드시 데이터 액세스 구성 요소(310) 중 하나인 것은 아닌) 데이터 액세스 구성 요소는 토큰을 수신하고, 토큰 관리자로부터 위치 정보를 획득하기 위해 토큰을 이용하며, 데이터를 소스 저장 장치(435)에서 목적지 저장 장치(440)에 논리적으로 기록하는 것을 시작할 수 있다.
하나 이상의 구성 요소(415-425) 또는 (도시되지 않은) 다른 구성 요소는 토큰 관리자를 구현할 수 있다.
다음은 본 명세서에 설명된 발명 대상의 양태와 함께 이용될 수 있는 일부 데이터 구조의 일부 예시적 정의이다.
#define FSCTL_OFFLOAD_READ
CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 153, METHOD_BUFFERED,
FILE_READ_ACCESS)//153은 오프로드 판독을 나타내는데 이용된다
typedef struct_FSCTL_OFFLOAD_READ_INPUT {
ULONG Size;
ULONG Flags;
ULONG TokenTimeToLive; // (예를 들어, 밀리초)
ULONG Reserved;
ULONGLONG FileOffset;
ULONGLONG CopyLength;
} FSCTL_OFFLOAD_READ_INPUT, *PFSCTL_OFFLOAD_READ_INPUT;
typedef struct_FSCTL_OFFLOAD_READ_OUTPUT {
ULONG Size;
ULONG Flags;
ULONGLONG TransferLength;
UCHAR Token[512]; // 512보다 크거나 작을 수 있다
} FSCTL_OFFLOAD_READ_OUTPUT,
*PFSCTL_OFFLOAD_READ_OUTPUT;
#define FSCTL_OFFLOAD_WRITE
CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 154, METHOD_BUFFERED,
FILE_WRITE_ACCESS) // 154는 오프로드 기록을 나타내는데 이용된다
typedef struct_FSCTL_OFFLOAD_WRITE_INPUT {
ULONG Size;
ULONG Flags;
ULONGLONG FileOffset;
ULONGLONG CopyLength;
ULONGLONG TransferOffset;
UCHAR Token[512];
} FSCTL_OFFLOAD_WRITE_INPUT, *PFSCTL_OFFLOAD_WPJTE_INPUT;
typedef struct_FSCTL_OFFLOAD_WRITE_OUTPUT {
ULONG Size;
ULONG Flags;
ULONGLONG Length Written;
} FSCTL_OFFLOAD_WRITE_OUTPUT,
*PFSCTL_OFFLOAD_WRITE_OUTPUT;
//
// 이러한 플래그, 동작으로의 OR'd이 주어진 동작이 비파괴적임을 나타낼 때(This flag, when OR'd into an action indicates that the given action is non-destructive)
// 이러한 플래그가 이때 동작이 주어진 요청을 전송하여야 함을 이해하지 못하는 저장 스택 구성 요소를 설정할 경우(If this flag is set then storage stack components which do not understand the action should forward the given request)
//
#define DeviceDsmActionFlag_NonDestructive 0x80000000
#define IsDsmActionNonDestructive(_Action)((BOOLEAN)((_Action &
DeviceDsmActionFlag_NonDestructive) != 0))
typedef ULONG DEVICE_DATA_MANAGEMENT_SET_ACTION;
#define DeviceDsmAction_OffloadRead (3 |
DeviceDsmActionFlag_NonDestructive)
#define DeviceDsmAction_OffloadWrite 4
//
// 모든 동작에 걸쳐 글로벌한 플래그(Flags that are global across all actions)
//
typedef struct_DEVICE DATA SET RANGE {
LONGLONG StartingOffset; // 예를 들어, 바이트
ULONGLONG LengthlnBytes; // 예를 들어, 다수의 섹터 크기
} DEVICE_DATA_SET_RANGE, *PDEVICE_DATA_SET_RANGE;
본 명세서에 설명된 발명 대상의 양태를 구현하기 위한 예시적인 IOCTL 데이터 구조는 다음과 같이 정의될 수 있다.
//
// IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES에 대한 입력 구조
//1. ParameterBlockOffset 또는 ParameterBlockLength의 값은 0이며, 이는 Parameter Block이 존재하지 않음을 나타낸다.
//
//2. DataSetRangesOffset 또는 DataSetRangesLength의 값은 0이며, 이는 DataSetRanges Block이 존재하지 않음을 나타낸다.
// DataSetRanges Block이 존재하면, 그것은 다음을 포함한다
// 연속적인 DEVICE_DATA_SET_RANGE 구조.
//3. 버퍼의 총 크기는 적어도 다음과 같다.
// sizeof
(DEVICE_MANAGE_DATA_SET_ATTRIBUTES)+ParameterBlockLength+
DataSetRangesLength
typedef struct_DEVICE_MANAGE_DATA_SET_ATTRIBUTES {
ULONG Size; // Size of structure
//
DEVICE_MANAGE_DATA_SET_ATTRIBUTES
DEVICE_DATA_MANAGEMENT_SET_ACTION Action;
ULONG Flags; // 모든 동작에 걸친 글로벌 플래그
ULONG ParameterBlockOffset; // 상응하는 구조 정렬로 정렬된다.
ULONG ParameterBlockLength; // 0은 Parameter Block이 존재하지 않음을 의미한다.
ULONG DataSetRangesOffset; // DEVICE_DATA_SET_RANGE 구조 정렬로 정렬된다.
ULONG DataSetRangesLength; // 0은 DataSetRanges Block이 존재하지 않음을 의미한다.
} DEVICE_MANAGE_DATA_SET_ATTRIBUTES,
*PDEVICE_MANAGE_DATA_SET_ATTRIBUTES;
//
// 복사 오프로드 동작에 대한 매개 변수 구조 정의
//
// 오프로드 복사 인터페이스가 2 단계: 오프로드 판독 및 오프로드 기록으로 동작한다.
//
// OffloadRead 동작에 대한 입력은 DSM 구조의 익스텐트(extent)의 세트이다
// OffloadRead의 출력 매개 변수는 타겟에 의해 취해지는 익스텐트의 "시점(point in time)" 스냅샷을 식별하는 타겟에 의해 반환된 토큰이다.
//
// 토큰의 포맷은 요청자에게 불명료하고, 타겟에 명확하다.
//
// 주석: 512의 토큰 길이는 예시적이다. OffloadCopy에 대한 SCSI 인터페이스는 크기를 절충 가능하게 할 수 있다.
// 새로운 동작은 가변 크기의 토큰에 대해 생성될 수 있다.
#define DSM_OFFLOAD_MAX_TOKEN_LENGTH 512
// Keep as ULONG multiple
typedef struct DEVICE DSM OFFLOAD READ PARAMETERS {
ULONG Flags;
ULONG TimeToLive; // 토큰 TTL(예를 들어, 밀리초)는 요청자에 의해 요청될 수 있다.
} DEVICE_DSM_OFFLOAD_READ_PARAMETERS,
*PDEVICE_DSM_OFFLOAD_READ_PARAMETERS;
typedef struct_DEVICE_DSM_OFFLOAD_WRITE_PARAMETERS {
ULONG Flags;
ULONG Reserved; // 미래 사용을 위해 예약
ULONGLONG TokenOffset; // 토큰으로 나타내는 데이터로부터 복사하는 시작 오프셋
UCHAR Token[DSM_OFFLOAD_MAX_TOKEN_LENGTH] ; // 토큰
} DEVICE_DSM_OFFLOAD_WRITE_PARAMETERS,
*PDEVICE_DSM_OFFLOAD_WRITE_PARAMETERS;
typedef struct_STORAGE_OFFLOAD_READ_OUTPUT {
ULONG OffloadReadFlags; // Outbound flags
ULONG Reserved;
ULONGLONG LengthProtected; // 최저 StartingOffset으로부터 토큰으로 나타낸 데이터의 길이
ULONG TokenLength; // 바이트의 토큰의 길이.
UCHAR Token[DSM_OFFLOAD_MAX_TOKEN_LENGTH] ;
// 연속하여 생성된 토큰.
} STORAGE_OFFLOAD_READ_OUTPUT,
*PSTORAGE_OFFLOAD_READ_OUTPUT;
//
// STORAGE OFFLOAD READ OUTPUT 플래그 정의
//
#define STORAGE_OFFLOAD_READ_RANGE_TRUNCATED (0x0001)
typedef struct_STORAGE_OFFLOAD_WRITE_OUTPUT {
ULONG OffloadWriteFlags; // 출력 플래그
ULONG Reserved; // 미래 사용을 위해 예약
ULONGLONG LengthCopied; // 출력 매개 변수 : 토큰으로 나타낸 데이터의 시작으로부터 복사되는 콘텐츠의 길이
} STORAGE_OFFLOAD_WRITE_OUTPUT,
*PSTORAGE_OFFLOAD_WRITE_OUTPUT;
//
// STORAGE OFFLOAD WRITE OUTPUT flag definitions - used in
OffloadWriteFlags mask
//
// 기록이 수행되지만, 잘려진 범위에서 수행된다
#define STORAGE_OFFLOAD_WRITE_RANGE_TRUNCATED (0x0001)
//
// 양방향 동작을 위한 DSM 출력 구조.
//
// 출력 매개 변수 블록은 OutputBlockOffset 필드에 포함된 오프셋에서 생성된 버퍼에 위치된다.
// 오프셋은 버퍼의 시초에서 계산되고,
// 피호출자(callee)는 동작 특정 구조 템플릿의 요구 사항에 따라 그것을 정렬한다.
// 예: OffloadRead 동작이 포인터를 출력 구조에 획득하도록 하기 위해, 호출자는 다음을 한다
//
// PSTORAGE_OFFLOAD_READ_OUTPUT pReadOut =
// (PSTORAGE_OFFLOAD_READ_OUTPUT)((UCHAR*)pOutputBuffer +
//
((PDEVICE_MANAGE_DATA_SET_ATTRIBUTES_OUTPUT)pOutputBuffer)
// ->OutputBlockOffset)
//
typedef struct_DEVICE_MANAGE_DATA_SET_ATTRIBUTES_OUTPUT {
ULONG Size; // 구조의 크기
DEVICE_DATA_MANAGEMENT_SET_ACTION Action;
// 동작이 요청되고 수행된다
ULONG Flags; // DSM 동작에 대한 공통 출력 플래그
ULONG OperationStatus; // 오프로드 동작에 이용된 동작 상태
// (PENDING처럼 다양한 의미의 플레이스홀더(placeholder))
ULONG ExtendedError; // 확장 오류 정보
ULONG TargetDetailedError; // 타겟 특정 오류는 오프로드 동작에 이용될 수 있다.
// (SCSI sense code)
ULONG ReservedStatus; // 예약 필드
ULONG OutputBlockOffset; // 특정 동작은 상응하는 구조 정렬로 정렬된다.
ULONG OutputBlockLength; // 0은 Output Parameter Block이 존재하지 않음을 의미한다.
} DEVICE_MANAGE_DATA_SET_ATTRIBUTES_OUTPUT,
*PDEVICE_MANAGE_DATA_SET_ATTRIBUTES_OUTPUT;
도 6-8은 일반적으로 본 명세서에 설명된 발명 대상의 양태에 따라 발생할 수 있는 예시적인 동작을 나타내는 흐름도이다. 설명의 단순함을 위해, 도 6-8에 관련하여 설명된 방법은 일련의 행위(act)로서 묘사되고 설명된다. 본 명세서에 설명된 발명 대상의 양태는 예시된 행위 및/또는 행위의 순서에 의해 제한되지 않는다는 것이 이해되어야 한다. 일 실시예에서, 행위는 아래에 설명된 순서로 발생한다. 그러나, 다른 실시예에서, 행위는 다른 순서에서 병렬로 발생하고, 본 명세서에 제시되며 설명되지 않은 다른 행위와 함께 발생할 수 있다. 더욱이, 본 명세서에 설명된 발명 대상의 양태에 따른 방법을 구현하기 위해 예시된 모든 행위가 필요하지는 않을 수 있다. 게다가, 당업자는 이러한 방법이 대안적으로 상태 다이어그램을 통해 일련의 상관 상태 또는 이벤트로 나타낼 수 있다는 것을 이해하고 인식할 것이다.
도 6을 참조하면, 블록(605)에서, 동작이 시작된다. 블록(610)에서, 저장 장치의 데이터의 표현을 위한 요청이 수신된다. 요청은 저장 장치의 부분을 식별하는 설명(예를 들어, 위치 및 길이)과 함께 전달된다. 여기서, 단어 "부분(portion)"은 모든 저장 장치 이하의 저장 장치일 수 있다. 예를 들면, 도 2를 참조하면, 요청자(210)는 저장 장치(220)에서 데이터에 대한 토큰을 요청할 수 있다. 요청할 시에, 요청자(210)는 길이와 함께 데이터의 위치(예를 들어, 파일 이름, 개방 파일에 대한 핸들, 파일로의 물리적 오프셋, 볼륨 또는 로우 디스크(raw disk) 등)를 전송할 수 있다.
블록(615)에서, 요청에 응답하여, 토큰이 데이터에 바인딩될 때에 논리적으로 저장 장치의 부분에 저장된 데이터를 나타내는 토큰이 수신된다. 상술한 바와 같이, 토큰은 요청된 것보다 적은 데이터를 나타낼 수 있다. 예를 들면, 도 2를 참조하면, 데이터 액세스 구성 요소(215) 중 하나 이상이 요청된 데이터 또는 이의 서브세트를 나타내는 요청자(210)로 토큰을 반환할 수 있다. 토큰은 토큰으로 나타내는 데이터의 크기와 무관한 크기(예를 들어, 소정 수의 비트 또는 바이트)일 수 있다. 이러한 토큰은 데이터 구조의 각 토큰이 데이터의 다른 부분과 관련되거나 둘 이상의 토큰이 데이터의 동일한 부분과 관련되는 데이터 구조의 다른 토큰과 함께 수신될 수 있다.
토큰을 수신하는 것은 토큰이 요청된 데이터의 서브세트인 데이터를 나타내는 표시(indication)를 동반할 수 있다. 이러한 표시는 예를 들어 토큰으로 나타내는 데이터의 길이의 형식을 취할 수 있다.
블록(620)에서, 오프로드 기록을 수행하기 위해 토큰이 제공된다. 토큰은 오프로드 제공자를 통해 데이터의 전부 또는 부분을 논리적으로 기록하는지를 나타내는 정보와 함께 제공될 수 있다. 이러한 정보는 예를 들어 목적지 관련 오프셋, 토큰 관련 오프셋 및 길이를 포함할 수 있다. 0의 토큰 관련 오프셋, 및 토큰으로 나타내는 데이터의 전체 길이와 동일한 길이의 토큰 관련 오프셋은 모든 데이터를 복사하도록 나타낼 수 있지만, 데이터의 전체 길이보다 작은 길이를 가진 어떤 오프셋은 전체 데이터보다 적은 데이터를 복사하도록 나타낼 수 있다.
예를 들어, 도 2를 참조하면, 요청자는 나타낸 데이터의 위치를 획득하기 위해 토큰을 토큰 관리자(225)로 전달할 수 있는 데이터 액세스 구성 요소(215)로 토큰을 전달할 수 있다. 토큰 관리자(225)가 (예를 들어, SAN에서) 저장 장치(220)로의 액세스를 제공하는 저장 시스템의 부분인 경우, 토큰은 데이터를 식별하고, 요청에 의해 나타낸 데이터를 논리적으로 기록하기 위해 토큰을 이용할 수 있는 SAN의 데이터 액세스 구성 요소에 제공될 수 있다.
상술한 바와 같이, 오프로드 제공자는 요청을 전송하는 장치의 외부에 있을 수 있다. 게다가, 오프로드 제공자가 요청을 수신하면, 오프로드 제공자는 요청을 전송하는 장치의 어떤 구성 요소와의 추가적인 상호 작용과 무관하게 데이터를 논리적으로 기록할 수 있다. 예를 들면, 도 3을 참조하면, 기록할 토큰 및 요청이 데이터 액세스 구성 요소(315)에 도달하면, 장치(335)의 구성 요소는 장치(330)로부터 어떤 추가적인 도움없이 요청되는대로 데이터를 논리적으로 기록할 수 있다.
블록(625)에서, 만일 있다면, 다른 동작이 수행될 수 있다. 블록(630)에서, 토큰이 생성된 후에는 언제라도, 요청자(또는 다른 데이터 액세스 구성 요소)는 토큰을 무효화할 것을 명시적으로 요청할 수 있다. 일 실시예에서, 이러한 요청이 복사 동작의 중간에 전송되면, 복사는 완료하도록 허용될 수 있다. 다른 구현에서는, 복사가 중단될 수 있고, 오류가 발생될 수 있으며, 다른 동작이 발생할 수 있다.
도 7을 참조하면, 블록(705)에서, 동작이 시작된다. 블록(710)에서, 저장 장치의 데이터의 표현을 위한 요청이 수신된다. 요청은 데이터가 위치되는 저장 장치의 부분을 식별하는 설명과 함께 전달된다. 요청은 저장 영역 네트워크의 구성 요소 또는 다른 데이터 액세스 구성 요소에서 수신될 수 있다. 예를 들면, 도 3을 참조하면, 하나 이상의 데이터 액세스 구성 요소(315)는 저장 장치(220)에서 데이터를 식별하는 오프셋, 길이, 논리 단위 번호, 파일 핸들 등과 함께 토큰에 대한 요청을 수신할 수 있다.
블록(715)에서는 토큰이 생성된다. 생성된 토큰은 (예를 들어, 도 3의 저장 장치(220) 내에) 논리적으로 저장된 데이터를 나타낼 수 있다. 상술한 바와 같이,이러한 데이터는 구현에 따라 토큰의 유효 기간 동안 변경되지 않거나 변경될 수 있다. 토큰은 이전에 나타낸 바와 같이 요청된 데이터의 서브세트를 나타낼 수 있다. 예를 들면, 도 3을 참조하면, 토큰 관리자(320)는 저장 장치(220)에서 요청자(210)에 의해 요청된 데이터를 나타내도록 토큰을 생성할 수 있다.
블록(720)에서, 토큰은 데이터 구조를 통해 나타낸 데이터와 관련된다. 예를 들면, 도 3을 참조하면, 토큰 관리자(320)는 나타낸 데이터와 생성된 토큰을 관련시키는 어소시에이션(association)을 토큰 저장 장치(325)에 저장할 수 있다.
블록(725)에서는 토큰이 요청자에 제공된다. 예를 들면, 도 3을 참조하면, 토큰 관리자 또는 하나의 데이터 액세스 구성 요소(315)는 요청자(210)에 제공하기 위해 토큰을 데이터 액세스 구성 요소(310)에 제공할 수 있다. 토큰은 토큰으로 나타내는 데이터의 크기를 나타내는 길이로 반환될 수 있다.
블록(730)에서, 만일 있다면, 다른 동작이 수행될 수 있다. 블록(735)에서, 토큰이 생성된 후에는 언제라도, 토큰 관리자가 상술한 바와 같이 여러 요인에 따라 토큰을 무효화할 수 있다는 것을 주목한다. 일 구현에서, 토큰이 데이터에 영향을 미치는 기록 동작 중에 무효화되면, 기록은 완료하도록 허용될 수 있다. 다른 구현에서는, 기록이 중단될 수 있고, 오류가 발생될 수 있거나, 다른 동작이 발생할 수 있다.
도 8은 일반적으로 오프로드 기록이 본 명세서에 설명된 발명 대상의 다양한 양태에 따라 오프로드 제공자에서 수신될 때 발생할 수 있는 예시적인 동작을 나타내는 블록도이다. 블록(805)에서, 동작이 시작된다.
블록(810)에서, 토큰이 수신된다. 토큰은 토큰으로 나타낸 모든 또는 일부 데이터를 논리적으로 기록할지 여부를 나타내는 데이터와 함께 수신될 수 있다. 예를 들어, 도 3을 참조하면, 하나의 데이터 액세스 구성 요소(315)는 도 3의 하나의 데이터 액세스 구성 요소(310)에서 토큰을 수신할 수 있다.
블록(815)에서, 토큰이 유효한지에 대해 판단이 행해진다. 예를 들어, 도 3을 참조하면, 토큰 관리자(320)는 토큰 저장 장치(325)에 문의하여 수신된 토큰이 유효한지를 판단할 수 있다. 토큰이 유효하면, 동작은 블록(820)에서 계속하고, 그렇지 않으면, 요청이 실패될 수 있고, 동작은 블록(817)에서 계속한다.
블록(817)에서는 요청이 실패된다. 예를 들어, 도 3을 참조하면, 데이터 액세스 구성 요소(315)는 복사가 실패되었다는 것을 나타낼 수 있다.
블록(820)에서, 오프로드 사본의 요청된 데이터가 식별된다. 예를 들어, 도 3을 참조하면, 토큰 관리자(320)는 토큰과 관련된 데이터의 위치 또는 다른 식별자를 획득하기 위해 토큰 저장 장치(325)에 문의할 수 있다. 토큰은 토큰으로 나타내는 데이터를 호스팅하는 장치를 나타내는 데이터를 포함하거나 데이터와 관련될 수 있다.
블록(825)에서, 토큰으로 나타내는 데이터의 논리적 기록이 수행된다. 예를 들어, 도 3을 참조하면, 장치(335)는 토큰으로 나타낸 데이터를 논리적으로 기록할 수 있다.
블록(830)에서, 만일 있다면, 다른 동작이 수행될 수 있다.
상술한 상세한 설명에서 알 수 있는 바와 같이, 오프로드 판독 및 기록에 관한 양태가 설명되었다. 본 명세서에 설명된 발명 대상의 양태가 다양한 수정 및 대안적 구성을 허용하지만, 이의 특정 예시 실시예가 도면에 도시되고 상세히 상술되었다. 그러나, 청구된 발명 대상의 양태를 개시된 특정 형태로 제한할 의도는 없지만, 반면에, 그 의도는 본 명세서에 설명된 발명 대상의 여러 양태의 사상 및 범위 내에서 모든 수정, 대안적 구성 및 등가물을 포괄하는 것이라는 점이 이해되어야 한다.

Claims (15)

  1. 컴퓨터에 의해 적어도 부분적으로 구현되는 방법으로서,
    저장 장치의 제 1 데이터의 표현에 대한 요청을 전송하는 단계- 상기 요청은 상기 저장 장치의 부분을 식별하는 설명과 함께 전달됨 -,
    상기 요청에 응답하여, 상기 저장 장치의 상기 부분에 논리적으로 저장된 제 2 데이터를 나타내는 토큰을 수신하는 단계- 상기 제 2 데이터는 상기 제 1 데이터의 서브세트, 즉 잠재적으로 적절한 서브세트임 -, 및
    적어도 제 3 데이터를 찾아내기 위해 상기 토큰을 이용하도록 동작 가능한 오프로드 제공자를 통해 상기 제 3 데이터를 논리적으로 기록하도록 지시하는 정보와 함께 상기 토큰을 제공하는 단계- 상기 제 3 데이터는 제 2 데이터의 서브세트, 즉 잠재적으로 적절한 서브세트임 -를 포함하는
    방법.
  2. 제 1 항에 있어서,
    상기 저장 장치의 부분의 설명을 포함하는 요청을 전송하는 단계는 오프셋 및 길이를 전송하는 단계- 상기 오프셋은 상기 저장 장치 내의 상기 제 1 데이터의 위치를 나타내며 상기 길이는 상기 제 1 데이터의 크기를 나타냄 -를 포함하는
    방법.
  3. 제 1 항에 있어서,
    상기 토큰을 수신하는 단계는 상기 제 2 데이터를 상기 토큰이 상기 제 2 데이터에 바인딩될 때 존재하는 상기 제 2 데이터로 획득하도록 이용 가능한 번호를 수신하는 단계- 상기 번호는 상기 제 2 데이터를 식별하도록 상기 오프로드 제공자에 의해 이용 가능하며 상기 번호는 난수 또는 의사 랜덤 메커니즘에 의해 생성됨 -를 포함하는
    방법.
  4. 제 1 항에 있어서,
    상기 토큰을 수신하는 단계는 상기 토큰을 데이터 구조 내의 다른 토큰과 함께 수신하는 단계- 상기 데이터 구조 내의 각 토큰은 상기 제 2 데이터의 다른 부분을 상기 토큰이 상기 다른 부분에 바인딩될 때 존재하는 상기 다른 부분으로 획득하도록 이용 가능함 -를 포함하는
    방법.
  5. 제 1 항에 있어서,
    각각이 또한 상기 제 2 데이터를 나타내는 하나 이상의 다른 토큰을 수신하는 단계, 및 상기 토큰을 제공하는 것과 함께 상기 다른 토큰 중 하나 이상을 제공하는 단계를 더 포함하는
    방법.
  6. 컴퓨터 실행 가능 명령어를 가진 컴퓨터 저장 매체로서,
    상기 컴퓨터 실행 가능 명령어는 실행될 때에
    요청자로부터, 저장 장치에 논리적으로 저장된 제 1 데이터의 표현에 대한 요청을 수신하는 동작- 상기 요청은 상기 제 1 데이터가 위치되는 상기 저장 장치의 부분을 식별하는 설명과 함께 전달됨 -,
    상기 저장 장치의 상기 부분에 논리적으로 저장된 제 2 데이터를 나타내는 토큰을 생성하는 동작- 상기 제 2 데이터는 제 1 데이터의 서브세트, 즉 잠재적으로 적절한 서브세트임 -,
    상기 토큰을 데이터 구조를 통해 상기 제 2 데이터와 관련시키는 동작- 상기 토큰은 상기 제 2 데이터를 상기 토큰이 상기 제 2 데이터에 바인딩될 때 존재하는 상기 제 2 데이터로 획득하도록 이용 가능함 -, 및
    상기 토큰을 상기 요청자에 제공하는 동작을 포함하는 동작을 수행하는
    컴퓨터 저장 매체.
  7. 제 6 항에 있어서,
    상기 컴퓨터 실행 가능 명령어는
    상기 제 2 데이터 전부 또는 일부를 기록하는지를 나타내는 제 3 데이터와 함께 상기 토큰을 수신하는 동작,
    상기 토큰이 유효한지를 판단하는 동작,
    상기 토큰이 유효하지 않을 경우, 상기 요청을 실패시키는 동작을 더 수행하는
    컴퓨터 저장 매체.
  8. 제 6 항에 있어서,
    저장 장치에 논리적으로 저장된 제 1 데이터의 표현에 대한 요청을 수신하는 동작은 저장 영역 네트워크 장치의 데이터 액세스 구성 요소에서 상기 요청을 수신하는 동작을 포함하고,
    상기 제 2 데이터를 나타내는 토큰을 생성하는 동작은 상기 저장 영역 네트워크 장치의 데이터 액세스 구성 요소에 의해 값을 생성하는 동작을 포함하며,
    상기 토큰을 데이터 구조를 통해 상기 제 2 데이터와 관련시키는 동작은 테이블에 엔트리를 배치하는 동작을 포함하되, 상기 엔트리는 상기 토큰, 및 상기 요청이 상기 데이터 액세스 구성 요소에서 수신될 시에나 후, 및 상기 토큰이 상기 요청자로 반환되기 전이나 반환될 때 존재하는 상기 제 2 데이터로서 상기 제 2 데이터의 식별자를 포함하는
    컴퓨터 저장 매체.
  9. 제 6 항에 있어서,
    상기 컴퓨터 실행 가능 명령어는
    상기 제 1 데이터를 변경하기 위한 요청을 수신하며, 이에 응답하여 상기 토큰을 무효화화는 동작을 더 수행하는
    컴퓨터 저장 매체.
  10. 제 6 항에 있어서,
    상기 컴퓨터 실행 가능 명령어는
    메모리 제약 조건, 기록 활동도(write activity), 디스크 제약 조건, 네트워크 대역폭 제약 조건, 대기 시간 제약 조건 및 TTL(time to live) 중 하나 이상에 기초하여 상기 토큰을 무효화하는 동작을 더 수행하는
    컴퓨터 저장 매체.
  11. 제 6 항에 있어서,
    상기 컴퓨터 실행 가능 명령어는
    상기 제 1 데이터를 변경하기 위한 요청을 수신하고, 이에 응답하여 상기 변경을 행하며, 상기 토큰이 상기 제 2 데이터에 바인딩될 때 존재하는 상기 제 2 데이터의 논리적 사본을 유지하는 동작을 더 수행하는
    컴퓨터 저장 매체.
  12. 컴퓨팅 환경에서,
    저장 장치의 제 1 데이터의 표현에 대한 요청을 전송하도록 동작 가능하고, 상기 제 1 데이터의 서브세트, 즉 잠재적으로 적절한 서브세트인 제 2 데이터를 나타내는 토큰을 수신하도록 더 동작 가능하고, 상기 제 2 데이터 전부 또는 일부를 논리적으로 기록하도록 지시하는 제 3 데이터와 함께 상기 토큰을 제공하도록 더 동작 가능한 요청자,
    상기 토큰을 생성하며 상기 토큰을 데이터 구조를 통해 상기 제 2 데이터 토큰과 관련시키도록 동작 가능한 토큰 관리자, 및
    상기 제 3 데이터와 함께 상기 토큰을 수신하도록 동작 가능하되, 상기 토큰이 유효한지를 판단하기 위해 상기 토큰 관리자에게 문의하도록 더 동작 가능하며, 상기 제 2 데이터는 적어도 상기 토큰이 유효할 동안에 논리적으로 비변경으로 유지되는 오프로드 제공자를 포함하는
    시스템.
  13. 제 12 항에 있어서,
    상기 오프로드 제공자는 상기 토큰이 유효한 경우에 상기 제 3 데이터에 의해 지시된 대로 상기 제 2 데이터 전부 또는 일부를 논리적으로 기록하도록 더 동작 가능하며, 상기 제 3 데이터는 또한 기록된 데이터를 입력하는 목적지를 포함하는
    시스템.
  14. 제 12 항에 있어서,
    상기 요청자는 상기 오프로드 제공자를 호스팅하는 장치의 외부에 있는 장치의 구성 요소를 포함하는
    시스템.
  15. 제 12 항에 있어서,
    상기 토큰 관리자 및 상기 오프로드 제공자는 양자 모두 저장 영역 네트워크의 장치에 호스팅되는
    시스템.
KR1020137007387A 2010-09-23 2011-09-07 오프로드 판독 및 기록 KR20130139883A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/888,433 US20120079583A1 (en) 2010-09-23 2010-09-23 Offload reads and writes
US12/888,433 2010-09-23
PCT/US2011/050739 WO2012039939A2 (en) 2010-09-23 2011-09-07 Offload reads and writes

Publications (1)

Publication Number Publication Date
KR20130139883A true KR20130139883A (ko) 2013-12-23

Family

ID=45872084

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137007387A KR20130139883A (ko) 2010-09-23 2011-09-07 오프로드 판독 및 기록

Country Status (12)

Country Link
US (1) US20120079583A1 (ko)
EP (1) EP2619652A2 (ko)
JP (1) JP2013539119A (ko)
KR (1) KR20130139883A (ko)
CN (1) CN102520877A (ko)
AR (1) AR083102A1 (ko)
AU (1) AU2011305839A1 (ko)
BR (1) BR112013006516A2 (ko)
CA (1) CA2810833A1 (ko)
RU (1) RU2013112868A (ko)
TW (1) TW201224914A (ko)
WO (1) WO2012039939A2 (ko)

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9092149B2 (en) 2010-11-03 2015-07-28 Microsoft Technology Licensing, Llc Virtualization and offload reads and writes
US9146765B2 (en) 2011-03-11 2015-09-29 Microsoft Technology Licensing, Llc Virtual disk storage techniques
US8725782B2 (en) 2011-04-25 2014-05-13 Microsoft Corporation Virtual disk storage techniques
US9519496B2 (en) 2011-04-26 2016-12-13 Microsoft Technology Licensing, Llc Detecting and preventing virtual disk storage linkage faults
US11496760B2 (en) 2011-07-22 2022-11-08 Qualcomm Incorporated Slice header prediction for depth maps in three-dimensional video codecs
US9521418B2 (en) 2011-07-22 2016-12-13 Qualcomm Incorporated Slice header three-dimensional video extension for slice header prediction
US20130041985A1 (en) * 2011-08-10 2013-02-14 Microsoft Corporation Token based file operations
US9288505B2 (en) 2011-08-11 2016-03-15 Qualcomm Incorporated Three-dimensional video with asymmetric spatial resolution
US9485503B2 (en) 2011-11-18 2016-11-01 Qualcomm Incorporated Inside view motion prediction among texture and depth view components
US9817582B2 (en) 2012-01-09 2017-11-14 Microsoft Technology Licensing, Llc Offload read and write offload provider
US9778860B2 (en) 2012-09-12 2017-10-03 Microsoft Technology Licensing, Llc Re-TRIM of free space within VHDX
US8886882B2 (en) 2012-09-14 2014-11-11 Hitachi, Ltd. Method and apparatus of storage tier and cache management
US8832024B2 (en) * 2012-10-26 2014-09-09 Netapp, Inc. Simplified copy offload
US9208168B2 (en) 2012-11-19 2015-12-08 Netapp, Inc. Inter-protocol copy offload
TWI494884B (zh) * 2012-11-23 2015-08-01 Chunghwa Telecom Co Ltd A method and system for obtaining a single number that has not yet been opened
US9071585B2 (en) 2012-12-12 2015-06-30 Microsoft Technology Licensing, Llc Copy offload for disparate offload providers
US9251201B2 (en) * 2012-12-14 2016-02-02 Microsoft Technology Licensing, Llc Compatibly extending offload token size
US9558232B1 (en) * 2013-06-21 2017-01-31 EMC IP Holding Company LLC Data movement bulk copy operation
US9380114B1 (en) * 2013-06-27 2016-06-28 Emc Corporation Techniques for peer messaging across multiple storage processors of a data storage array
US9514210B2 (en) * 2014-06-16 2016-12-06 Netapp, Inc. Methods and systems for a copy-offload operation
US9582206B2 (en) * 2014-06-16 2017-02-28 Netapp, Inc. Methods and systems for a copy-offload operation
US9715351B2 (en) 2015-02-13 2017-07-25 Red Hat, Inc. Copy-offload on a device stack
US10459664B1 (en) 2017-04-10 2019-10-29 Pure Storage, Inc. Virtualized copy-by-reference
US10616076B2 (en) * 2017-05-30 2020-04-07 International Business Machines Corporation Network asset management
TWI644204B (zh) * 2017-08-01 2018-12-11 英業達股份有限公司 非揮發性記憶體磁區規劃方法
CN110287148B (zh) * 2019-07-01 2021-10-29 中原银行股份有限公司 一种数据交互方法及装置
US11593021B2 (en) * 2020-11-06 2023-02-28 Hewlett Packard Enterprise Development Lp Writing a container index to persistent storage

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6161145A (en) * 1997-05-08 2000-12-12 International Business Machines Corporation Updating server-related data at a client
US6938002B2 (en) * 2001-06-20 2005-08-30 International Business Machines Corporation System and method for product evaluation
US7121456B2 (en) * 2002-09-13 2006-10-17 Visa U.S.A. Inc. Method and system for managing token image replacement
US7194462B2 (en) * 2003-02-27 2007-03-20 Bea Systems, Inc. Systems and methods for implementing an XML query language
US20040267672A1 (en) * 2003-06-26 2004-12-30 Gray William J. System and method for conducting secure electronic transactions
US7464124B2 (en) * 2004-11-19 2008-12-09 International Business Machines Corporation Method for autonomic data caching and copying on a storage area network aware file system using copy services
US20080065835A1 (en) * 2006-09-11 2008-03-13 Sun Microsystems, Inc. Offloading operations for maintaining data coherence across a plurality of nodes
JP2010512584A (ja) * 2006-12-06 2010-04-22 フュージョン マルチシステムズ,インク.(ディービイエイ フュージョン−アイオー) 空データトークン指令を有する要求デバイスからのデータを管理する装置、システムおよび方法
TWI405211B (zh) * 2008-11-04 2013-08-11 Phison Electronics Corp 快閃記憶體儲存系統、控制器與資料保護方法

Also Published As

Publication number Publication date
TW201224914A (en) 2012-06-16
WO2012039939A3 (en) 2012-05-31
JP2013539119A (ja) 2013-10-17
BR112013006516A2 (pt) 2016-07-12
CA2810833A1 (en) 2012-03-29
RU2013112868A (ru) 2014-09-27
AR083102A1 (es) 2013-01-30
CN102520877A (zh) 2012-06-27
WO2012039939A2 (en) 2012-03-29
US20120079583A1 (en) 2012-03-29
EP2619652A2 (en) 2013-07-31
AU2011305839A1 (en) 2013-03-21

Similar Documents

Publication Publication Date Title
KR20130139883A (ko) 오프로드 판독 및 기록
US9092149B2 (en) Virtualization and offload reads and writes
US9817582B2 (en) Offload read and write offload provider
US9811662B2 (en) Performing anti-virus checks for a distributed filesystem
US9811532B2 (en) Executing a cloud command for a distributed filesystem
US6938136B2 (en) Method, system, and program for performing an input/output operation with respect to a logical storage device
US20090150462A1 (en) Data migration operations in a distributed file system
US9430160B2 (en) Consistency without ordering dependency
US8812677B2 (en) Data processing method and apparatus for remote storage system
US9069779B2 (en) Open file migration operations in a distributed file system
EP2718825A2 (en) Storage architecture for backup application
US20090150533A1 (en) Detecting need to access metadata during directory operations
WO2021169163A1 (zh) 一种文件数据存取方法、装置和计算机可读存储介质
US7877553B2 (en) Sharing volume data via shadow copies using differential areas
US20130179959A1 (en) Zero Token
US10346077B2 (en) Region-integrated data deduplication
Nagle et al. The ANSI T10 object-based storage standard and current implementations
US20090150414A1 (en) Detecting need to access metadata during file operations
Ousterhout The role of distributed state

Legal Events

Date Code Title Description
N231 Notification of change of applicant
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid