KR20130139883A - Offload reads and writes - Google Patents

Offload reads and writes 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
Korean (ko)
Inventor
닐 알 크리스티안센
라지브 나가르
더스틴 엘 그린
블래드미르 사도브스키
말콤 제임스 스미스
카란 메라
Original Assignee
마이크로소프트 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20130139883A publication Critical patent/KR20130139883A/en

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

본 명세서에 설명된 발명 대상의 양태는 오프로드 판독 및 기록에 관한 것이다. 양태에서, 데이터를 전송하고자 하는 요청자는 데이터의 표현을 위한 요청을 전송한다. 응답에서, 요청자는 데이터를 나타내는 하나 이상의 토큰을 수신한다. 그 후, 요청자는 하나 이상의 토큰에 의해 나타낸 데이터를 기록하기 위한 요청을 가진 구성 요소에 이러한 토큰 중 하나 이상을 제공할 수 있다. 일부 예시적인 애플리케이션에서, 이러한 구성 요소는 데이터를 식별하기 위해 하나 이상의 토큰을 이용하여, 요청자와의 추가적인 상호 작용 없이 데이터를 판독하거나 데이터를 논리적으로 기록할 수 있다. 토큰은 요청에 의해 무효화되거나 다른 요인에 기초할 수 있다.Aspects of the subject matter described herein relate to offload reading and writing. In an aspect, a requestor wishing to send data sends a request for representation of the data. In response, the requester receives one or more tokens representing the data. The requestor may then provide one or more of these tokens to the component having a request to record the data represented by one or more tokens. In some example applications, such components may use one or more tokens to identify the data, reading the data or logically writing the data without further interaction with the requestor. Tokens may be invalidated by request or based on other factors.

Figure pct00001
Figure pct00001

Description

오프로드 판독 및 기록{OFFLOAD READS AND WRITES}OFFLOAD READS AND WRITES}

데이터를 전송하기 위한 하나의 메커니즘은 소스 위치(source location)의 파일로부터의 데이터를 메인 메모리로 판독하고 이 메인 메모리로부터 목적지 위치(destination location)로 데이터를 기록하는 것이다. 일부 환경에서, 이것은 비교적 적은 데이터에 대해 만족스럽게 동작할 수 있지만, 데이터가 증가함에 따라 데이터를 판독하며 데이터를 다른 위치로 전송하는 데 걸리는 시간은 증가한다. 게다가, 데이터가 네트워크를 통해 액세스될 경우, 네트워크는 데이터를 소스 위치에서 목적지 위치로 전송할 때 추가적인 지연을 부과할 수 있다. 더욱이, 저장 장치의 복잡성과 결합된 보안 문제가 데이터 전송을 복잡하게 할 수 있다.One mechanism for transferring data is to read data from a file at a source location into main memory and write data from this main memory to a destination location. In some circumstances, this may work satisfactorily for relatively little data, but as the data increases, the time taken to read the data and transfer the data to another location increases. In addition, when data is accessed over the network, the network may impose additional delays when transferring data from the source location to the destination location. Moreover, security issues combined with the complexity of storage devices can complicate data transmission.

본 명세서에 청구된 발명 대상은 어떤 단점을 해결하거나 상술한 것과 같은 환경에서만 동작하는 실시예로 제한되지 않는다. 오히려, 이러한 배경은 본 명세서에 설명된 일부 실시예가 실시될 수 있는 예시적인 기술 영역을 예시하기 위해 제공될 뿐이다.
The subject matter claimed in this specification is not limited to embodiments that solve any shortcomings or operate only in environments as described above. Rather, these backgrounds are merely provided to illustrate exemplary technical areas in which some embodiments described herein may be practiced.

간단히 말하면, 본 명세서에 설명된 발명 대상의 양태는 오프로드 판독 및 기록에 관한 것이다. 양태에서, 데이터를 전송하고자 하는 요청자는 데이터의 표현(representation of the data)에 대한 요청을 전송한다. 응답에서, 요청자는 데이터를 나타내는 하나 이상의 토큰을 수신한다. 그 후, 요청자는 하나 이상의 토큰에 의해 나타낸 데이터를 기록하도록 요청하는 구성 요소에 이러한 토큰 중 하나 이상을 제공할 수 있다. 일부 예시적 애플리케이션에서, 이러한 구성 요소는 하나 이상의 토큰을 이용하여 데이터를 식별할 수 있으며 그 후 요청자와의 추가적인 상호 작용 없이 데이터를 판독하거나 데이터를 논리적으로 기록할 수 있다. 토큰은 요청에 의해 또는 다른 요인에 기초하여 무효화될 수 있다.In short, aspects of the subject matter described herein relate to offload reading and writing. In an aspect, a requestor wishing to send data sends a request for a representation of the data. In response, the requester receives one or more tokens representing the data. The requestor can then provide one or more of these tokens to the component requesting to record the data represented by the one or more tokens. In some example applications, these components may use one or more tokens to identify the data and then read or logically write the data without further interaction with the requestor. Tokens can be invalidated by request or based on other factors.

이러한 요약은 아래에 상세한 설명에서 추가로 설명되는 발명 대상의 일부 양태를 간단히 식별하도록 제공된다. 이러한 요약은 청구된 발명 대상의 중요 또는 필수 특징(features)을 식별하도록 의도되지 않으며, 또한 청구된 발명 대상의 범위를 제한하는데 이용되도록 의도되지 않는다. This summary is provided to simply identify some aspects of the subject matter described further in the detailed description below. This Summary is not intended to identify key or essential features of the claimed subject matter, nor is it intended to be used to limit the scope of the claimed subject matter.

문구 "본 명세서에 설명된 발명 대상(subject matter described herein)"은 문맥이 명확하게 달리 나타내지 않으면 상세한 설명에 설명된 발명 대상을 나타낸다. 용어 "양태(aspects)"는 "적어도 하나의 양태"로 판독되어야 한다. 상세한 설명에 설명된 발명 대상의 양태의 식별은 청구된 발명 대상의 중요 또는 필수 특징을 식별하도록 의도되지 않는다.The phrase “subject matter described herein” refers to the subject matter described in the detailed description unless the context clearly indicates otherwise. The term "aspects" should be read as "at least one aspect". The identification of aspects of the subject matter described in the detailed description is not intended to identify key or essential features of the claimed subject matter.

본 명세서에 설명된 발명 대상의 상술한 양태 및 다른 양태는 동일한 참조 번호가 유사한 요소를 나타내는 첨부한 도면에서 제한되지 않고 예로서 예시된다.
The foregoing and other aspects of the subject matter described in this specification are illustrated by way of example and not by way of limitation in the figures of the accompanying drawings in which like references indicate similar elements.

도 1은 본 명세서에 설명된 발명 대상의 양태가 통합될 수 있는 예시적인 범용 컴퓨팅 환경을 나타내는 블록도이다.
도 2-5는 본 명세서에 설명된 발명 대상의 양태가 동작할 수 있는 시스템의 구성 요소의 예시적인 배치를 나타내는 블록도이다.
도 6-8은 일반적으로 본 명세서에 설명된 발명 대상의 양태에 따라 일어날 수 있는 예시적인 동작을 나타내는 흐름도이다.
1 is a block diagram illustrating an exemplary general-purpose computing environment in which aspects of the subject matter described herein may be incorporated.
2-5 are block diagrams illustrating an exemplary arrangement of components of a system in which aspects of the subject matter described herein may operate.
6-8 are flow diagrams illustrating exemplary operations that may generally occur in accordance with aspects of the subject matter described herein.

정의Justice

본 명세서에 사용되는 바와 같이, 용어 "포함한다(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)"로 이해되어야 한다. 다른 명시적 및 암시적 정의는 아래에 포함될 수 있다.As used herein, the term "includes" and variations thereof is an open-ended term meaning "includes, but is not limited to." Should be read as The term "or" is to be understood as "and / or" unless the context clearly dictates otherwise. The term "based on" should be understood as "based at least in part on." The terms "one embodiment" and "an embodiment" are to be understood as "at least one embodiment". The term "another embodiment" should be understood as "at least one other embodiment". Other explicit and implicit definitions may be included below.

여기서 때때로 용어 "제 1(first)", "제 2(second)", "제 3(third)" 등이 사용된다. 특히 청구범위에서 이러한 용어의 사용은 순서를 의미하도록 의도되지 않으며 사실은 식별의 목적으로 사용된다. 예를 들면, 문구 "제 1 데이터" 및 "제 2 데이터"는 반드시 제 1 데이터가 제 2 데이터 전에 물리적 또는 논리적으로 위치한다거나 제 1 데이터가 제 2 데이터 전에 요청되거나 운영된다는 것을 의미하는 것은 아니다. 오히려, 이러한 문구는 별개이거나 별개가 아닐 수 있는 데이터의 세트를 식별하는데 사용된다. 즉, 제 1 데이터 및 제 2 데이터는 서로 다른 데이터, 동일한 데이터, 동일한 데이터 및 일부 서로 다른 데이터의 일부 등을 나타낼 수 있다. 제 1 데이터는 제 2 데이터의 서브세트, 잠재적으로 적절한 서브세트일 수 있거나 그 반대일 수 있다.The terms "first", "second", "third" and the like are sometimes used here. In particular, the use of these terms in the claims is not intended to be in the order and in fact are used for identification purposes. For example, the phrases "first data" and "second data" do not necessarily mean that the first data is physically or logically located before the second data or that the first data is requested or operated before the second data. Rather, such phrases are used to identify sets of data that may or may not be distinct. That is, the first data and the second data may represent different data, the same data, the same data, a part of some different data, and the like. The first data may be a subset of the second data, potentially an appropriate subset, or vice versa.

문구 "저장 장치의 데이터(data of the store)" 및 "저장 장치 내의 데이터(data in the store)"가 때때로 본 명세서에 사용되지만, 상술한 데이터를 저장 장치에 물리적으로 저장된 데이터로 제한하는데 이러한 문구를 사용할 의도가 없다. 오히려, 이러한 문구는 데이터가 저장 장치에 물리적으로 있지 않을 경우에도 데이터를 저장 장치에 논리적으로 있는 데이터로 제한하기 위한 것이다. 예를 들면, (아래에 설명되는) 저장 추상화(storage abstraction)는 상당수의 0(또는 다른 데이터 값)이 실제로 기본 저장 매체에 저장되는 것이 아니라 오히려 0을 나타내는 단축된 데이터(예를 들어, 값 및 길이)로 나타내는 최적화를 수행할 수 있다. 다른 예는 아래에 제공된다.The phrases "data of the store" and "data in the store" are sometimes used herein, but limit the above data to data physically stored on the storage device. There is no intention to use it. Rather, the phrase is to limit the data to data logically on the storage device even if the data is not physically on the storage device. For example, storage abstraction (described below) does not mean that a significant number of zeros (or other data values) are actually stored on the underlying storage medium, but rather shortened data (e.g., values and Length) can be performed. Another example is provided below.

예시적인 운영 환경Exemplary operating environment

도 1은 본 명세서에 설명된 발명 대상의 양태가 구현될 수 있는 적절한 컴퓨팅 시스템 환경(100)의 예를 예시한다. 컴퓨팅 시스템 환경(100)은 적절한 컴퓨팅 환경의 일례일 뿐이며, 본 명세서에 설명된 발명 대상의 양태의 사용 또는 기능의 범위에 관해 어떠한 제한을 제안하기 위한 것이 아니다. 어느 쪽도 컴퓨팅 환경(100)이 예시적인 운영 환경(100)에 예시된 구성 요소 중 어느 하나 또는 조합에 관한 의존성 또는 요구 사항을 갖는 것으로 해석되지 않아야 한다.1 illustrates an example of a suitable computing system environment 100 in which aspects of the subject matter described herein may be implemented. The computing system environment 100 is only one example of a suitable computing environment and is not intended to suggest any limitation as to the scope of use or functionality of aspects of the subject matter described herein. Neither side should be interpreted that the computing environment 100 has dependencies or requirements on any one or combination of components illustrated in the exemplary operating environment 100.

본 명세서에 설명된 발명 대상의 양태는 수많은 다른 범용 또는 특수 목적 컴퓨팅 시스템 환경 또는 구성으로 운영한다. 본 명세서에 설명된 발명 대상의 양태와 함께 사용하는데 적절할 수 있는 잘 알려진 컴퓨팅 시스템, 환경 또는 구성의 예는 개인용 컴퓨터, 서버 컴퓨터, 핸드헬드 또는 랩톱 장치, 멀티프로세서 시스템, 마이크로 제어기 기반 시스템, 셋톱 박스, 프로그램 가능한 가전 제품, 네트워크 PC, 미니컴퓨터, 메인 프레임 컴퓨터, 개인 휴대 단말기(PDA), 게임 장치, 프린터, 셋톱, 미디어 센터 또는 다른 기기(appliance)를 포함하는 기기, 자동차 내장 또는 부착된 컴퓨팅 장치, 다른 모바일 장치, 상기 시스템 또는 장치 중 어느 하나를 포함하는 분산 컴퓨팅 환경 등을 포함한다.Aspects of the subject matter described herein operate in numerous other general purpose or special purpose computing system environments or configurations. Examples of well-known computing systems, environments or configurations that may be suitable for use with aspects of the subject matter described herein include personal computers, server computers, handheld or laptop devices, multiprocessor systems, microcontroller based systems, set top boxes Programmable appliances, programmable consumer electronics, networked PCs, minicomputers, mainframe computers, personal digital assistants (PDAs), gaming devices, printers, set-tops, media centers or other appliances, in-vehicle or attached computing devices , Other mobile devices, distributed computing environments including any of the above systems or devices, and the like.

본 명세서에 설명된 발명 대상의 양태는 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행 가능 명령어의 일반적인 맥락에서 설명될 수 있다. 일반적으로, 프로그램 모듈은 루틴, 프로그램, 객체, 구성 요소, 데이터 구조 등을 포함하며, 이는 특정 태스크를 수행하거나 특정 추상 데이터(abstract data) 타입을 구현한다. 본 명세서에 설명된 발명 대상의 양태는 또한 태스크가 통신 네트워크를 통해 링크되는 원격 처리 장치에 의해 수행되는 분산 컴퓨팅에서 실시될 수 있다. 분산 컴퓨팅 환경에서, 프로그램 모듈은 메모리 저장 장치를 포함하는 로컬 및 원격 컴퓨터 저장 매체 양자에 위치될 수 있다.Aspects of the subject matter described in this specification may be described in the general context of computer-executable instructions, such as program modules, being executed by a computer. Generally, program modules include routines, programs, objects, components, data structures, etc., which perform particular tasks or implement particular abstract data types. Aspects of the subject matter described herein may also be practiced in distributed computing where tasks are performed by remote processing devices that are linked through a communications network. In a distributed computing environment, program modules may be located in both local and remote computer storage media including memory storage devices.

도 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)를 포함한다. Referring to FIG. 1, an exemplary system for implementing aspects of the subject matter described herein includes a general purpose computing device in the form of a computer 110. The computer may include any electronic device capable of executing instructions. Components of the computer 110 may include a processing unit 120, a system memory 130, and a system bus 121, and the system bus 121 may process various system components, including system memory. ) The system bus 121 may be any one of various types of bus structures including a memory bus or a memory controller, a peripheral bus, and a local bus using any of a variety of bus architectures. As a non-limiting example, this architecture is a Peripheral PCI, also known as an Industry Standard Architecture (ISA) bus, a Micro Channel Architecture (MCA) bus, an Enhanced ISA (EISA) bus, a Video Electronics Standards Association (VESA) local bus, and also a Mezzanine bus. Component Interconnect (PCI) bus, Peripheral Component Interconnect Extended (PCI-X) bus, Advanced Graphics Port (AGP) and PCI Express (PCIe).

컴퓨터(110)는 전형적으로 다양한 컴퓨터 판독 가능한 매체를 포함한다. 컴퓨터 판독 가능한 매체는 컴퓨터(110)에 의해 액세스될 수 있는 어떤 이용 가능한 매체일 수 있고, 휘발성 및 비휘발성 매체, 및 이동식 및 비이동식 매체 양자를 포함한다. 제한이 아닌 예로서, 컴퓨터 판독 가능한 매체는 컴퓨터 저장 매체 및 통신 매체를 포함할 수 있다.Computer 110 typically includes a variety of computer readable media. Computer readable media can be any available media that can be accessed by computer 110 and includes both volatile and nonvolatile media, and removable and non-removable media. By way of example, and not limitation, computer readable media may comprise computer storage media and communication media.

컴퓨터 저장 매체는 컴퓨터 판독 가능한 명령어, 데이터 구조, 프로그램 모듈 또는 다른 데이터와 같은 정보의 저장을 위한 어떤 방법 또는 기술로 구현되는 휘발성 및 비휘발성, 이동식 및 비이동식 매체 양자를 포함한다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 다른 메모리 기술, CD-ROM, 디지털 다용도 디스크(DVD) 또는 다른 광 디스크 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 또는 다른 자기 저장 장치, 또는 원하는 정보를 저장하는데 이용될 수 있고, 컴퓨터(110)에 의해 액세스될 수 있는 어떤 다른 매체를 포함한다.Computer storage media includes both volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information such as computer readable instructions, data structures, program modules or other data. Computer storage media may include RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disk (DVD) or other optical disk storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or And any other medium that can be used to store desired information and can be accessed by computer 110.

통신 매체는 전형적으로 컴퓨터 판독 가능한 명령어, 데이터 구조, 프로그램 모듈, 또는 반송파 또는 다른 전송 메커니즘과 같이 변조된 데이터 신호의 다른 데이터를 실시하고, 어떤 정보 전달 매체를 포함한다. 용어 "변조된 데이터 신호"는 하나 이상의 이의 특성 세트를 가지거나 신호의 정보를 인코딩하는 방식으로 변경하는 신호를 의미한다. 제한이 아닌 예로서, 통신 매체는 유선 네트워크 또는 직접 유선 연결과 같은 유선 매체, 및 음향, RF, 적외선 및 다른 무선 매체와 같은 무선 매체를 포함한다. 어느 상술한 것의 조합은 또한 컴퓨터 판독 가능한 매체의 범위 내에 포함되어야 한다.Communication media typically embody computer readable instructions, data structures, program modules, or other data in a modulated data signal, such as carrier waves or other transmission mechanisms, and include any information delivery media. The term "modulated data signal" means a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal. By way of example, and not limitation, communication media includes wired media such as a wired network or direct wired connection, and wireless media such as acoustic, RF, infrared, and other wireless media. Combinations of any of the above should also be included within the scope of computer readable media.

시스템 메모리(130)는 판독 전용 메모리(ROM)(131) 및 랜덤 액세스 메모리(RAM)(132)와 같은 휘발성 및/또는 비휘발성 메모리의 형태의 컴퓨터 저장 매체를 포함한다. 시동 중에서와 같이 컴퓨터(110) 내의 요소 사이로 정보를 전송하는데 도움을 주는 기본 루틴을 포함하는 기본 입력/출력 시스템(133)(BIOS)은 전형적으로 ROM(131)에 저장된다. RAM(132)은 전형적으로 처리 유닛(120)에 바로 액세스할 수 있고, 또는 처리 유닛(120)에 의해 현재 동작되는 데이터 및/또는 프로그램 모듈을 포함한다. 제한이 아닌 예로서, 도 1은 운영 체제(134), 애플리케이션 프로그램(135), 다른 프로그램 모듈(136) 및 프로그램 데이터(137)를 예시한다.System memory 130 includes computer storage media in the form of volatile and / or nonvolatile memory, such as read only memory (ROM) 131 and random access memory (RAM) 132. Basic input / output system 133 (BIOS), which includes basic routines that help transfer information between elements within computer 110, such as during startup, is typically stored in ROM 131. The RAM 132 typically has direct access to the processing unit 120, or contains data and / or program modules currently operated by the processing unit 120. As a non-limiting example, FIG. 1 illustrates an operating system 134, an application program 135, another program module 136, and program data 137.

컴퓨터(110)는 또한 다른 이동식/비이동식, 휘발성/비휘발성 컴퓨터 저장 매체를 포함할 수 있다. 단지 예로서, 도 1은 비이동식, 비휘발성 자기 매체로부터 판독하거나 이러한 매체에 기록하는 하드 디스크 드라이브(141), 이동식, 비휘발성 자기 디스크(152)로부터 판독하거나 이러한 디스크에 기록하는 자기 디스크 드라이브(151), 및 CD ROM 또는 다른 광학 매체와 같이 이동식, 비휘발성 광 디스크(156)로부터 판독하거나 이러한 광 디스크에 기록하는 광 디스크 드라이브(155)를 도시한다. 예시적인 운영 환경에서 이용될 수 있는 다른 이동식/비이동식, 휘발성/비 휘발성 컴퓨터 저장 매체는 자기 테이프 카세트, 플래시 메모리 카드, 디지털 다목적 디스크, 다른 광 디스크, 디지털 비디오 테이프, 고체 상태(solid state) RAM, 고체 상태 ROM 등을 포함한다. 하드 디스크 드라이브(141)는 인터페이스(140)를 통해 시스템 버스(121)에 연결될 수 있으며, 자기 디스크 드라이브(151) 및 광 디스크 드라이브(155)는 인터페이스(150)와 같은 이동식 비휘발성 메모리에 대한 인터페이스에 의해 시스템 버스(121)에 연결될 수 있다.Computer 110 may also include other removable / non-removable, volatile / nonvolatile computer storage media. By way of example only, FIG. 1 illustrates a hard disk drive 141 that reads from or writes to non-removable, nonvolatile magnetic media, and a magnetic disk drive that reads from or writes to a removable, nonvolatile magnetic disk 152 (see FIG. 151 and an optical disk drive 155 that reads from or writes to a removable, nonvolatile optical disk 156, such as a CD ROM or other optical medium. Other removable / non-removable, volatile / nonvolatile computer storage media that can be used in the exemplary operating environment include magnetic tape cassettes, flash memory cards, digital general purpose disks, other optical disks, digital video tapes, solid state RAM. , Solid state ROM, and the like. The hard disk drive 141 may be connected to the system bus 121 through the interface 140, and the magnetic disk drive 151 and the optical disk drive 155 may interface to a removable nonvolatile memory such as the interface 150. It may be connected to the system bus 121 by.

상술하고 도 1에 예시된 드라이브 및 관련된 컴퓨터 저장 매체는 컴퓨터 판독 가능한 명령어, 데이터 구조, 프로그램 모듈 및 컴퓨터(110)에 대한 다른 데이터를 저장한다. 도 1에서, 예를 들어, 하드 디스크 드라이브(141)는 운영 체제(144), 애플리케이션 프로그램(145), 다른 프로그램 모듈(146) 및 프로그램 데이터(147)를 저장하는 것으로 예시된다. 이러한 구성 요소는 운영 체제(134), 애플리케이션 프로그램(135), 다른 프로그램 모듈(136) 및 프로그램 데이터(137)와 동일하거나 다를 수 있다는 것을 주목한다. 운영 체제(144), 애플리케이션 프로그램(145), 다른 프로그램 모듈(146) 및 프로그램 데이터(147)에는 최소한 이들이 서로 다른 사본임을 예시하기 위해 RAM(132)의 상응하는 대응물(counterpart)과 다른 번호가 부여된다.The drive and associated computer storage media described above and illustrated in FIG. 1 store computer readable instructions, data structures, program modules, and other data for the computer 110. In FIG. 1, for example, hard disk drive 141 is illustrated as storing operating system 144, application program 145, other program module 146, and program data 147. Note that these components may be the same as or different from operating system 134, application program 135, other program modules 136, and program data 137. Operating system 144, application program 145, other program module 146, and program data 147 have at least a different counterpart and corresponding number in RAM 132 to illustrate that they are different copies. Is given.

사용자는 보통 마우스, 트랙볼 또는 터치 패드로 지칭되는 포인팅 장치(161) 및 키보드(162)와 같은 입력 장치를 통해 명령 및 정보를 컴퓨터(110)에 입력할 수 있다. (도시되지 않은) 다른 입력 장치는 마이크로폰, 조이스틱, 게임 패드, 위성 안테나(satellite dish), 스캐너, 터치 스크린(touch-sensitive screen), 기록 태블릿 등을 포함할 수 있다. 이러한 및 다른 입력 장치는 종종 시스템 버스에 결합되는 사용자 입력 인터페이스(160)를 통해 처리 유닛(120)에 연결되지만, 병렬 포트, 게임 포트 또는 범용 직렬 버스(USB)와 같은 다른 인터페이스 및 버스 구조에 의해 연결될 수 있다. A user may enter commands and information into the computer 110 through input devices such as a keyboard 162 and pointing device 161, commonly referred to as a mouse, trackball or touch pad. Other input devices (not shown) may include a microphone, joystick, game pad, satellite dish, scanner, touch-sensitive screen, recording tablet, and the like. These and other input devices are often connected to the processing unit 120 via a user input interface 160 coupled to the system bus, but by other interfaces and bus structures such as parallel ports, game ports or universal serial buses (USB). Can be connected.

모니터(191) 또는 다른 타입의 디스플레이 장치는 또한 비디오 인터페이스(190)와 같은 인터페이스를 통해 시스템 버스(121)에 연결된다. 모니터 외에, 컴퓨터는 또한 출력 주변 인터페이스(195)를 통해 연결될 수 있는 스피커(197) 및 프린터(196)와 같은 다른 주변 출력 장치를 포함할 수 있다.The monitor 191 or other type of display device is also connected to the system bus 121 via an interface such as a video interface 190. In addition to the monitor, the computer may also include other peripheral output devices, such as speakers 197 and printer 196, which may be connected via an output peripheral interface 195.

컴퓨터(110)는 원격 컴퓨터(180)와 같은 하나 이상의 원격 컴퓨터에 대한 논리적 연결을 이용하여 네트워크 환경에서 동작할 수 있다. 원격 컴퓨터(180)는 개인용 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 장치 또는 다른 공동 네트워크 노드일 수 있으며, 메모리 저장 장치(181)만이 도 1에 도시되었지만, 전형적으로 컴퓨터(110)에 대해 상술한 많은 또는 모든 요소를 포함한다. 도 1에 도시된 논리적 연결은 근거리 통신망(LAN)(171) 및 광역 통신망(WAN)(173)을 포함하지만, 다른 네트워크도 포함할 수 있다. 이러한 네트워크 환경은 사무소, 전사적(enterprise-wide) 컴퓨터 네트워크, 인트라넷 및 인터넷에서 흔하다.Computer 110 may operate in a network environment using logical connections to one or more remote computers, such as remote computer 180. Remote computer 180 may be a personal computer, server, router, network PC, peer device, or other common network node, and only memory storage 181 is shown in FIG. 1, but is typically described above with respect to computer 110. Include many or all elements. The logical connection shown in FIG. 1 includes a local area network (LAN) 171 and a wide area network (WAN) 173, but may also include other networks. Such network environments are commonplace in offices, enterprise-wide computer networks, intranets and the Internet.

LAN 네트워크 환경에 이용되면, 컴퓨터(110)는 네트워크 인터페이스 또는 어댑터(170)를 통해 LAN(171)에 연결된다. WAN 네트워크 환경에 이용되면, 컴퓨터(110)는 인터넷과 같이 WAN(173)을 통해 통신을 확립하기 위한 모뎀(172) 또는 다른 수단을 포함할 수 있다. 내부적 또는 외부적일 수 있는 모뎀(172)은 사용자 입력 인터페이스(160) 또는 다른 적절한 메커니즘을 통해 시스템 버스(121)에 연결될 수 있다. 네트워크 환경에서, 컴퓨터(110) 또는 이의 부분에 대해 도시된 프로그램 모듈은 원격 메모리 저장 장치에 저장될 수 있다. 제한이 아닌 예로서, 도 1은 메모리 장치(181)에 상주하는 원격 애플리케이션 프로그램(185)을 예시한다. 도시된 네트워크 연결은 예시적이고, 컴퓨터 사이에 통신 링크를 확립하는 다른 수단이 이용될 수 있다는 것이 이해될 것이다.When used in a LAN network environment, computer 110 is connected to LAN 171 via a network interface or adapter 170. When used in a WAN network environment, computer 110 may include a modem 172 or other means for establishing communications over WAN 173, such as the Internet. Modem 172, which may be internal or external, may be coupled to system bus 121 via user input interface 160 or other suitable mechanism. In a networked environment, program modules depicted for the computer 110 or portions thereof may be stored in the remote memory storage device. As a non-limiting example, FIG. 1 illustrates a remote application program 185 residing in the memory device 181. It will be appreciated that the network connections shown are exemplary and other means of establishing a communications link between the computers can be used.

오프로드Off road 판독 및 기록 Read and write

상술한 바와 같이, 일부 전통적인 데이터 전송 동작은 효율적이지 않을 수 있거나 심지어 오늘날의 저장 환경에서 작업하지 않을 수 있다. As mentioned above, some traditional data transfer operations may not be efficient or may not even work in today's storage environment.

도 2-5는 본 명세서에 설명된 발명 대상의 양태가 동작할 수 있는 시스템의 구성 요소의 예시적인 배치를 나타내는 블록도이다. 도 2-5에 예시된 구성 요소는 예시적이고, 필요하거나 포함될 수 있는 구성 요소를 모두 포함하는 것으로 의미되지 않는다. 다른 실시예에서, 도 2-5에 관련하여 설명된 구성 요소 및/또는 기능은 본 명세서에 설명된 발명 대상의 양태의 사상 또는 범위를 벗어나지 않고 (도시되거나 도시되지 않은) 다른 구성 요소에 포함될 수 있거나 하위 구성 요소(subcomponents)에 배치될 수 있다. 일부 실시예에서, 도 2-5에 관련하여 설명된 구성 요소 및/또는 기능은 다수의 장치에 걸쳐 분산될 수 있다.2-5 are block diagrams illustrating an exemplary arrangement of components of a system in which aspects of the subject matter described herein may operate. The components illustrated in FIGS. 2-5 are illustrative and are not meant to include all of the components that may be necessary or included. In other embodiments, components and / or functions described in connection with FIGS. 2-5 may be included in other components (not shown or not shown) without departing from the spirit or scope of aspects of the subject matter described herein. Or may be placed in subcomponents. In some embodiments, the components and / or functions described in connection with FIGS. 2-5 may be distributed across multiple devices.

도 2를 참조하면, 시스템(205)은 요청자(210), 데이터 액세스 구성 요소(215), 토큰 관리자(225), 저장 장치(220) 및 (도시되지 않은) 다른 구성 요소를 포함할 수 있다. 시스템(205)은 하나 이상의 컴퓨팅 장치를 통해 구현될 수 있다. 이러한 장치는, 예를 들어, 개인용 컴퓨터, 서버 컴퓨터, 핸드헬드 또는 랩톱 장치, 멀티프로세서 시스템, 마이크로 제어기 기반 시스템, 셋톱 박스, 프로그램 가능한 가전 제품, 네트워크 PC, 미니컴퓨터, 메인 프레임 컴퓨터, 셀 전화, 개인 휴대 단말기(PDA), 게임 장치, 프린터, 셋톱, 미디어 센터 또는 다른 기기를 포함하는 기기, 자동차 내장 또는 부착된 컴퓨팅 장치, 다른 모바일 장치, 상기 시스템 또는 장치 중 어느 하나를 포함하는 분산 컴퓨팅 환경 등을 포함한다.Referring to FIG. 2, system 205 may include requestor 210, data access component 215, token manager 225, storage 220, and other components (not shown). System 205 may be implemented via one or more computing devices. Such devices may include, for example, personal computers, server computers, handheld or laptop devices, multiprocessor systems, microcontroller based systems, set top boxes, programmable consumer electronics, network PCs, minicomputers, mainframe computers, cell phones, Devices including personal digital assistants (PDAs), gaming devices, printers, set tops, media centers or other devices, in-vehicle or attached computing devices, other mobile devices, distributed computing environments including any of the above systems or devices, and the like. It includes.

시스템(205)이 단일의 장치를 포함하는 경우, 시스템(205)의 역할을 하도록 구성될 수 있는 예시적인 장치는 도 1의 컴퓨터(110)를 포함한다. 시스템(205)이 다수의 장치를 포함하는 경우, 다수의 장치 중 하나 이상은 도 1의 유사하거나 상이하게 구성된 컴퓨터(110)를 포함할 수 있다.If system 205 includes a single device, an example device that may be configured to act as system 205 includes computer 110 of FIG. 1. If system 205 includes multiple devices, one or more of the multiple devices may include similar or differently configured computer 110 of FIG. 1.

데이터 액세스 구성 요소(215)는 데이터를 저장 장치(220)로 전송하며 저장 장치(220)로부터 데이터를 전송하는데 이용될 수 있다. 데이터 액세스 구성 요소(215)는 예를 들어 I/O 관리자, 필터, 드라이버, 파일 서버 구성 요소, 저장 영역 네트워크(SAN) 또는 다른 저장 장치상의 구성 요소, 및 (도시되지 않은) 다른 구성 요소 중 하나 이상을 포함할 수 있다. SAN은 예를 들어 논리적 저장 타겟을 노출시키는 장치, 이러한 장치를 포함하는 통신 네트워크 등으로 구현될 수 있다.The data access component 215 transfers data to the storage device 220 and can be used to transfer data from the storage device 220. The data access component 215 is, for example, one of an I / O manager, a filter, a driver, a file server component, a component on a storage area network (SAN) or other storage device, and other components (not shown). It may contain the above. A SAN can be implemented with, for example, devices exposing logical storage targets, communication networks including such devices, and the like.

일 실시예에서, 데이터 액세스 구성 요소는 요청자(210)와 저장 장치(220) 사이의 I/O를 조사할 기회가 제공되며 I/O를 변경, 완료 또는 실패할 수 있거나 이에 기초하여 다른 것을 수행하거나 전혀 동작하지 않을 수 있는 어떤 구성 요소를 포함할 수 있다. 예를 들면, 시스템(205)이 단일의 장치에 상주하는 경우, 데이터 액세스 구성 요소(215)는 요청자(210)와 저장 장치(220) 사이의 I/O 스택의 어떤 객체를 포함할 수 있다. 시스템(205)이 다수의 장치로 구현되는 경우, 데이터 액세스 구성 요소(215)는 요청자(210)를 호스팅하는 장치상의 구성 요소, 저장 장치(220)로의 액세스를 제공하는 장치상의 구성 요소, 및/또는 다른 장치상의 구성 요소 등을 포함할 수 있다. 다른 실시예에서, 데이터 액세스 구성 요소(215)는 데이터가 이용된 구성 요소를 통해 이동하지 않을 경우에도 I/O가 통과하는 구성 요소에 의해 이용되는 (예를 들어, 서비스, 데이터베이스 등과 같은) 어떤 구성 요소를 포함할 수 있다.In one embodiment, the data access component is provided with an opportunity to examine the I / O between the requestor 210 and the storage device 220 and may change, complete or fail the I / O or perform something else based thereon. It may contain any component that may or may not work at all. For example, if system 205 resides on a single device, data access component 215 may include any object in the I / O stack between requestor 210 and storage 220. When system 205 is implemented with multiple devices, data access component 215 may be a component on a device hosting requestor 210, a component on a device providing access to storage device 220, and / or Or components on other devices. In other embodiments, data access component 215 may be used by components that I / O passes through (eg, services, databases, etc.) even when data does not travel through the components used. It may include components.

본 명세서에 이용된 바와 같이, 용어 구성 요소는 장치의 모두 또는 일부, 하나 이상의 소프트웨어 모듈 또는 이의 부분의 집합체, 하나 이상의 소프트웨어 모듈 또는 이의 부분 및 하나 이상의 장치 또는 이의 부분의 일부 조합 등을 포함하는 것으로 판독되어야 한다. As used herein, the term component is intended to include all or part of a device, a collection of one or more software modules or portions thereof, one or more software modules or portions thereof and some combination of one or more devices or portions thereof, and the like. Should be read.

일 실시예에서, 저장 장치(220)는 데이터를 저장할 수 있는 어떤 저장 매체이다. 이러한 저장 장치(220)는 휘발성 메모리(예를 들어, 캐시) 및 비휘발성 메모리(예를 들어, 영구적 저장 장치)를 포함할 수 있다. 용어 데이터는 하나 이상의 컴퓨터 저장 요소에 의해 나타낼 수 있는 어떤 것을 포함하는 것으로 광범하게 판독되어야 한다. 논리적으로, 데이터는 휘발성 또는 비휘발성 메모리의 일련의 1 및 0으로 나타낼 수 있다. 비바이너리(non-binary) 저장 매체를 가진 컴퓨터에서, 데이터는 저장 매체의 능력에 따라 나타낼 수 있다. 데이터는 숫자, 문자 등과 같은 간단한 데이터 타입, 계층, 링크 또는 다른 관련된 데이터 타입을 포함하는 데이터 구조, 다수의 다른 데이터 구조 또는 간단한 데이터 타입을 포함하는 데이터 구조 등의 여러 타입으로 구성될 수 있다. 데이터의 일부 예는 정보, 프로그램 코드, 프로그램 상태, 프로그램 데이터, 명령, 다른 데이터 등을 포함한다.In one embodiment, storage device 220 is any storage medium capable of storing data. Such storage device 220 may include volatile memory (eg, cache) and nonvolatile memory (eg, persistent storage). The term data should be read broadly to include anything that may be represented by one or more computer storage elements. Logically, data can be represented by a series of ones and zeros of volatile or nonvolatile memory. In computers with non-binary storage media, data may be represented according to the capabilities of the storage media. The data may be composed of several types, such as simple data types such as numbers, characters, etc., data structures including hierarchies, links, or other related data types, data structures including many other data structures, or simple data types. Some examples of data include information, program code, program status, program data, instructions, other data, and the like.

저장 장치(220)는 하드 디스크 저장 장치, 고체 상태 저장 장치, 또는 다른 비휘발성 저장 장치, RAM과 같은 휘발성 메모리, 다른 저장 장치, 이의 일부 조합 등을 포함할 수 있고, 다수의 장치(예를 들어, 다수의 SAN, 다수의 파일 서버, 이기종 장치의 조합 등)에 걸쳐 분산될 수 있다. 저장 장치(220)를 구현하는데 이용되는 장치 (예를 들어, 단일 장치, 데이터 센터 등에서) 물리적으로 함께 위치되거나 지리적으로 분산될 수 있다. 저장 장치(220)는 계층 저장 장치 또는 비계층 저장 장치에 배치될 수 있다. 저장 장치(220)는 외부 장치, 내부 장치일 수 있거나, 시스템(205)을 구현하는 하나 이상의 장치에 양자 모두 내부 및 외부적인 구성 요소를 포함할 수 있다. 저장 장치(220)는 (예를 들어, 파일 시스템으로) 포맷되거나 비포맷(예를 들어, 원시)될 수 있다.Storage device 220 may include hard disk storage, solid state storage, or other non-volatile storage, volatile memory such as RAM, other storage, some combination thereof, and the like, and may include multiple devices (eg, , Multiple SANs, multiple file servers, combinations of heterogeneous devices, and the like. The devices used to implement the storage device 220 may be physically located together or geographically distributed (eg, in a single device, data center, etc.). The storage device 220 can be located in a hierarchical storage or a non-hierarchical storage device. Storage device 220 may be an external device, an internal device, or may include components both internal and external to one or more devices implementing system 205. Storage device 220 may be formatted (eg, into a file system) or unformatted (eg, native).

다른 실시예에서, 저장 장치(220)는 직접 물리적 저장보다는 저장 추상화로 구현될 수 있다. 저장 추상화는 예를 들어 파일, 볼륨, 디스크, 가상 디스크, 논리 유닛, 데이터 스트림, 대안적 데이터 스트림, 메타 데이터 스트림 등을 포함할 수 있다. 예를 들면, 저장 장치(220)는 다수의 물리적 저장 장치를 갖는 서버에 의해 구현될 수 있다. 이러한 예에서, 서버는 데이터 액세스 구성 요소가 서버의 물리적 저장 장치 또는 이의 부분 중 하나 이상을 이용하여 구현되는 저장 장치의 데이터에 액세스하도록 허용하는 인터페이스를 제공할 수 있다.In another embodiment, storage device 220 may be implemented with a storage abstraction rather than direct physical storage. Storage abstractions may include, for example, files, volumes, disks, virtual disks, logical units, data streams, alternative data streams, metadata streams, and the like. For example, storage device 220 may be implemented by a server having multiple physical storage devices. In such an example, the server may provide an interface that allows data access components to access data on storage devices that are implemented using one or more of the server's physical storage devices or portions thereof.

이러한 추상화의 레벨은 어떤 임의의 깊이로 반복될 수 있다. 예를 들면, 저장 추상화를 데이터 액세스 구성 요소(215)에 제공하는 서버는 또한 데이터에 액세스하여 데이터를 저장하도록 저장 추상화에 의존할 수 있다.This level of abstraction can be repeated at any arbitrary depth. For example, a server that provides a storage abstraction to the data access component 215 may also rely on the storage abstraction to access and store the data.

다른 실시예에서, 저장 장치(220)는 비휘발성 저장 장치에 지속되거나 비지속될 수 있는 데이터로 뷰(view)를 제공하는 구성 요소를 포함할 수 있다.In another embodiment, storage device 220 may include a component that provides a view with data that may be persistent or nonpersistent to nonvolatile storage.

데이터 액세스 구성 요소(215) 중 하나 이상은 요청자(210)를 호스팅하는 장치에 상주할 수 있지만, 데이터 액세스 구성 요소(215) 중 다른 하나 이상은 저장 장치(220)를 호스팅하거나 저장 장치(220)로의 액세스를 제공하는 장치에 상주할 수 있다. 예를 들면, 요청자(210)가 개인용 컴퓨터상에서 실행하는 애플리케이션이면, 데이터 액세스 구성 요소(215) 중 하나 이상은 개인용 컴퓨터상에서 호스팅되는 운영 체제에 상주할 수 있다. 다른 예로서, 저장 장치(220)가 저장 영역 네트워크(SAN)에 의해 구현되면, 데이터 액세스 구성 요소(215) 중 하나 이상은 저장 장치(220)를 관리하거나 저장 장치(220)로의 액세스를 제공하는 저장 운영 체제를 구현할 수 있다. 요청자(210) 및 저장 장치(220)가 단일의 장치에서 호스팅될 때, 모두 또는 많은 데이터 액세스 구성 요소(215)는 또한 장치에 상주할 수 있다.One or more of the data access components 215 may reside on the device hosting the requestor 210, while the other one or more of the data access components 215 may host the storage device 220 or the storage device 220. Can reside in a device that provides access to the network. For example, if the requestor 210 is an application running on a personal computer, one or more of the data access components 215 may reside in an operating system hosted on the personal computer. As another example, if the storage device 220 is implemented by a storage area network (SAN), one or more of the data access components 215 manages or provides access to the storage device 220. A storage operating system can be implemented. When requestor 210 and storage device 220 are hosted on a single device, all or many data access components 215 may also reside on the device.

저장 장치(220)의 데이터의 (아래에 설명되는) 오프로드 판독을 시작하기 위해, 요청자(210)는 (예를 들어, API를 통해) 미리 정의된 명령을 이용하여 데이터를 나타내는 토큰을 획득하기 위한 요청을 전송할 수 있다. 응답에서, 데이터 액세스 구성 요소(215) 중 하나 이상은 데이터 또는 이의 서브세트를 나타내는 하나 이상의 토큰을 제공하여 요청자(210)에 응답할 수 있다.In order to begin an offload reading (described below) of data in storage 220, requestor 210 may acquire a token representing the data using a predefined command (eg, via an API). Request can be sent. In response, one or more of the data access components 215 may respond to the requestor 210 by providing one or more tokens representing the data or a subset thereof.

예를 들면, 다양한 이유로, 원래 요청된 데이터보다 적은 데이터를 나타내는 토큰을 반환하는 것이 바람직할 수 있다. 토큰이 반환될 때, 토큰이 나타내는 데이터의 길이 또는 심지어 다수의 데이터 범위를 갖고 반환될 수 있다. 그 길이는 원래 요청된 데이터의 길이보다 작을 수 있다.For example, for various reasons, it may be desirable to return a token that represents less data than the original requested data. When a token is returned, it can be returned with the length of data the token represents or even multiple data ranges. The length may be less than the length of the originally requested data.

데이터 액세스 구성 요소(215) 중 하나 이상은 오프로드 판독 또는 오프로드 기록 중 어느 하나에서 토큰과 관련된 요청된 길이보다 작은 것을 사용할 수 있다. 실제로 사용되는 데이터의 길이를 본 명세서에서는 흔히 "유효 길이(effective length)"로 지칭한다. 요청된 길이보다 작은 길이를 사용하는 것은 여러 가지 이유로 바람직할 수 있다. 유효 길이는 요청자 또는 다른 데이터 액세스 구성 요소가 실제로 명령에 의해 얼마나 많은 바이트가 사용되었는가를 인식하도록 반환될 수 있다.One or more of the data access components 215 may use less than the requested length associated with the token in either the offload read or the offload write. The length of data actually used is often referred to herein as the "effective length." Using a length less than the requested length may be desirable for various reasons. The effective length may be returned to the requestor or other data access component to recognize how many bytes were actually used by the command.

데이터 액세스 구성 요소(215)는 예를 들어 다음을 포함하는 오프로드 판독 또는 기록에 응답하여 다양한 방식으로 작용할 수 있다.The data access component 215 can act in a variety of ways in response to offload reads or writes, including for example.

1. 분할(partitioning) 데이터 액세스 구성 요소는 오프로드 판독 또는 기록 요청을 다음 하위 데이터 액세스 구성 요소로 전송하기 전에 이러한 요청의 오프셋을 조정할 수 있다.1. Partitioning The data access component can adjust the offset of such a request before sending an offload read or write request to the next lower data access component.

2. RAID 데이터 액세스 구성 요소는 오프로드 판독 또는 기록 요청을 분할하고, 그 부분들(pieces)을 동일하거나 서로 다른 데이터 액세스 구성요소로 전송할 수 있다. RAID-0의 경우에, 수신된 요청은 (짧은 유효 길이를 생성하는) 스트라이프 경계(stripe boundary)를 따라 분할할 수 있는 반면에, RAID-1의 경우에는 전체 요청이 둘 이상의 데이터 액세스 구성 요소로 전송될 수 있다(그 결과 동일한 데이터에 대해 다수의 토큰이 생성된다).2. The RAID data access component can split offload read or write requests and send the pieces to the same or different data access components. In the case of RAID-0, the received request can split along a stripe boundary (which produces a short effective length), whereas in the case of RAID-1, the entire request is directed to more than one data access component. May be sent (as a result of which multiple tokens are generated for the same data).

3. 캐싱 데이터 액세스 구성 요소는 오프로드 판독 요청에 의해 획득되려고 하는 데이터를 포함하는 캐시의 부분을 기록할 수 있다.3. The caching data access component may write the portion of the cache that contains the data that is to be obtained by the offload read request.

4. 캐싱 데이터 액세스 구성 요소는 오프로드 기록 요청에 의해 겹쳐쓰기되려고 하는 데이터를 포함하는 캐시의 부분을 무효로 할 수 있다.4. The caching data access component may invalidate the portion of the cache that contains the data that is about to be overwritten by the offload write request.

5. 데이터 검증 데이터 액세스 구성 요소는 오프로드 기록 요청에 의해 겹쳐쓰기되려고 하는 데이터의 임의의 캐시된 체크섬(cached checksum)을 무효화할 수 있다.5. Data Verification The data access component may invalidate any cached checksums of data that are about to be overwritten by an offload write request.

6. 암호화 데이터 액세스 구성 요소는 오프로드 판독 또는 기록 요청을 실패시킬 수 있다.6. The encrypted data access component may fail the offload read or write request.

7. 스냅샷 데이터 액세스 구성 요소는 오프로드 기록 요청에 의해 겹쳐쓰기되려고 하는 위치의 데이터를 복사할 수 있다. 이것은 사용자가 나중에 필요하다면 그 파일의 '이전의 버전'으로 '돌아갈(go back)' 수 있도록 부분적으로 행해질 수 있다. 스냅샷 데이터 액세스 구성 요소는 그 자신이 (겹쳐쓰기되려고 하는) 위치의 데이터를 백업 위치에 복사하기 위해 오프로드 판독 및 기록 명령을 이용할 수 있다. 이러한 예에서, 스냅샷 데이터 액세스 구성 요소는 (아래에서 설명되는) "다운스트림 요청자"로 간주될 수 있다.7. Snapshot data access components can copy data where it is about to be overwritten by an offload write request. This can be done in part so that the user can 'go back' to the 'old version' of the file later if necessary. The snapshot data access component can use offload read and write commands to copy the data of the location it is trying to overwrite to the backup location. In this example, the snapshot data access component may be considered a "downstream requester" (described below).

상기 예는 모두를 포함하거나 모든 것을 망라하도록 의도되지 않는다. 본원의 요지에 기초하여, 당업자는 본원의 요지가 본원에 설명된 발명 대상의 양태의 사상 또는 범위를 벗어나지 않고 적용될 수 있다는 다른 시나리오를 인식할 수 있다.The above examples are not intended to be all or all inclusive. Based on the subject matter herein, one skilled in the art can recognize other scenarios in which the subject matter can be applied without departing from the spirit or scope of the aspects of the subject matter described herein.

데이터 액세스 구성 요소(215)가 오프로드 판독 또는 기록에 실패하면, 다른 데이터 액세스 구성 요소 또는 요청자가 데이터를 판독하거나 기록하기 위해 다른 메커니즘을 시도하도록 하는 오류 코드가 반환될 수 있다. 능력 탐색(capability discovery)이 예를 들어 초기화 동안에 수행될 수 있다. 저장 장치 또는 심지어 하위 계층 데이터 액세스 구성 요소가 특정 동작을 지원하지 않을 때, 상위 데이터 액세스 구성 요소 또는 요청자에 의해 동일한 결과를 달성하기 위해 다른 동작이 수행될 수 있다. 예를 들면, (아래에 설명되는) 저장 시스템이 오프로드 판독 및 기록을 지원하지 않는 경우, 데이터 액세스 구성 요소가 토큰을 관리하고 데이터의 보기(view)를 유지할 수 있으며, 따라서 상위 데이터 액세스 구성 요소는 저장 장치 또는 하위 데이터 액세스 구성 요소가 이러한 능력을 제공하지 않는다는 것을 인식하지 못한다.If the data access component 215 fails to offload read or write, an error code may be returned that causes another data access component or requester to try another mechanism to read or write data. Capability discovery may be performed, for example, during initialization. When a storage device or even lower layer data access component does not support a particular operation, other operations may be performed by the higher data access component or requestor to achieve the same result. For example, if the storage system (described below) does not support offload reading and writing, the data access component can manage tokens and maintain a view of the data, and thus the parent data access component. Does not recognize that the storage device or sub-data access component does not provide this capability.

요청자는 발신(originating) 요청자 또는 다운스트림 요청자를 포함할 수 있다. 예를 들면, 요청자는 애플리케이션이 오프로드 기록을 수행할 수 있도록 토큰을 요청하는 애플리케이션을 포함할 수 있다. 이러한 타입의 요청자는 발신 요청자로 지칭될 수 있다. 다른 예로서, 요청자는 클라이언트로부터 복사 명령을 수신한 (예를 들어, 서버 메시지 블록(SMB) 서버와 같은) 서버 애플리케이션을 포함할 수 있다. 클라이언트는 데이터를 소스(source) 저장 장치에서 복사 명령을 통해 목적지(destination) 저장 장치에 복사할 것을 요청할 수 있다. SMB 서버는 이러한 요청을 수신하여 결과적으로 복사를 수행하기 위해 오프로드 판독 및 기록을 이용할 수 있다. 이 경우에, 요청자는 다운스트림 요청자로 지칭될 수 있다.The requestor may include an originating requestor or a downstream requestor. For example, the requestor may include an application that requests a token so that the application can perform offload writing. This type of requestor may be referred to as an originating requester. As another example, the requestor may include a server application (eg, a server message block (SMB) server) that receives a copy command from a client. The client may request to copy the data from the source storage device to the destination storage device through a copy command. The SMB server can use this offload read and write to receive this request and consequently perform the copy. In this case, the requestor may be referred to as a downstream requestor.

본원에 이용된 바와 같이, 문맥에서 달리 특정되거나 명확히 하지 않았다면, 용어 요청자(requestor)는 발신 요청자 및 다운스트림 요청자 양자를 포함하는 것으로 이해되어야 한다. 발신 요청자는 최초로 오프로드 판독 또는 기록에 대한 요청을 전송하는 요청자이다. 다시 말하면, 용어 요청자는 요청자가 오프로드 판독 또는 기록을 자발적으로 발신하는 경우 뿐만 아니라 요청자가 오프로드 판독의 시작에 응답하는 요청자 외의 추가 구성 요소가 있는 경우를 포괄하도록 의도된다.As used herein, unless otherwise specified or otherwise specified in the context, the term requestor should be understood to include both originating requesters and downstream requestors. The originating requester is the first requestor sending a request for offload reading or writing. In other words, the term requestor is intended to cover not only when the requester voluntarily sends offload reads or writes, but also when the requester has additional components other than the requestor responding to the start of the offload read.

예를 들면, 발신 요청자는 데이터를 소스에서 목적지로 전송하고자 하는 애플리케이션일 수 있다. 이러한 타입의 발신 요청자는 데이터를 전송하기 위해 하나 이상의 오프로드 판독 및 기록 요청을 데이터 액세스 구성 요소(215)로 보낼 수 있다.For example, the originating requester may be an application that wants to transfer data from a source to a destination. This type of originating requester may send one or more offload read and write requests to data access component 215 to send data.

다운스트림 요청자는 다른 요청자로부터의 요청을 만족시키도록 하나 이상의 오프로드 판독 또는 기록을 하는 요청자이다. 예를 들면, 하나 이상의 데이터 액세스 구성 요소(215)가 다운스트림 요청자 역할을 할 수도 있고, 다른 요청자로부터 행해진 요청을 충족시키도록 하나 이상의 오프로드 판독 또는 기록을 시작할 수도 있다. 다운스트림 요청자에 대한 일부 예는 이러한 예가 모두를 포함하거나 모든 것을 망라하도록 의도되지 않지만 RAID-0, 분할 및 스냅샷 데이터 액세스 구성 요소와 관련하여 상술되었다.A downstream requestor is a requestor who makes one or more offload reads or writes to satisfy a request from another requestor. For example, one or more data access components 215 may serve as a downstream requestor and may initiate one or more offload reads or writes to satisfy a request made from another requestor. Some examples of downstream requestors have been described above with respect to RAID-0, partitioning, and snapshot data access components although these examples are not intended to be all or all inclusive.

일 실시예에서, 토큰은 추측하기 어려운 난수 또는 의사 난수를 포함한다. 숫자를 추측하는 어려움은 숫자를 생성하는데 이용되는 메커니즘 뿐만 아니라 숫자의 크기에 의해서도 선택될 수 있다. 숫자는 저장 장치(220) 상의 데이터를 나타내지만, 데이터보다 훨씬 작을 수 있다. 예를 들면, 요청자는 100 기가바이트 파일의 토큰을 요청할 수 있다. 응답에서, 요청자는 예를 들어 512 바이트 또는 다른 크기의 토큰을 수신할 수 있다.In one embodiment, the token contains random or pseudorandom numbers that are difficult to guess. The difficulty of guessing numbers can be chosen by the size of the numbers as well as the mechanism used to generate them. The numbers represent data on storage device 220 but may be much smaller than the data. For example, the requestor can request a token of a 100 gigabyte file. In the response, the requestor may receive a token of 512 bytes or other size, for example.

토큰이 유효하기만 한다면, 토큰은 데이터를 나타낸다. 일부 구현에서, 토큰은 토큰이 데이터에 바인딩(binding)되었을 때에 논리적으로 존재한 데이터를 나타낼 수 있다. 용어 논리적으로는 데이터가 모두 저장 장치에 있지 않거나 심지어 지속될 수 없을 때에 사용된다. 예를 들면, 데이터의 일부는 토큰이 제공될 수 있기 전에 플러시(flush)될 필요가 있는 캐시 내에 있을 수 있다. 다른 예로서, 데이터의 일부는 다른 데이터에서 도출될 수 있다. 다른 예로서, 서로 전혀 다른 소스로부터의 데이터는 조합되거나 토큰으로 나타낸 데이터를 생성하도록 조작될 필요가 있을 수 있다. 토큰에 대한 요청이 수신된 후와 토큰이 반환되기 전이나 반환되는 시간에 바인딩이 발생할 수 있다.As long as the token is valid, the token represents data. In some implementations, the token can represent data that was logically present when the token was bound to the data. The term logically is used when data is not all on the storage device or even cannot be persisted. For example, some of the data may be in a cache that needs to be flushed before the token can be provided. As another example, some of the data may be derived from other data. As another example, data from completely different sources may need to be manipulated to produce data that is combined or represented in tokens. The binding may occur after a request for the token is received and before or at the time the token is returned.

다른 구현에서, 토큰으로 나타낸 데이터는 변경될 수 있다. 데이터가 토큰의 유효 기간 동안 변경될 수 있는지의 동작은 요청자와 협상될 수 있거나 구성 요소 사이에 협상될 수 있다. 이것은 아래에 더욱 상세히 설명된다.In other implementations, the data represented by the token can be changed. The operation of whether data can be changed during the validity period of the token can be negotiated with the requestor or can be negotiated between the components. This is explained in more detail below.

토큰이 만료되어 무효화되거나 명시적으로 만료되기 전에 무효화될 수 있다. 예를 들면, 토큰으로 나타낸 파일이 닫히거나, 요청자(210)를 호스팅하는 컴퓨터가 꺼지거나, 토큰으로 나타낸 데이터를 가진 볼륨이 분리되거나, 토큰의 의도된 사용이 완료되는 등의 동작이 발생하면, 토큰을 명시적으로 무효화하기 위한 메시지가 전송될 수 있다.Tokens can be invalidated by expiration or invalidated before they expire explicitly. For example, if the file represented by the token is closed, the computer hosting the requestor 210 is turned off, the volume with the data represented by the token is detached, or the intended use of the token is completed, A message may be sent to explicitly invalidate the token.

일부 구현에서, 토큰을 무효화하는 메시지는 강제적이고 따라야하는 것으로 처리될 수 있다. 다른 구현에서는, 토큰을 무효화하는 메시지는 어느 것을 따라야하는지 또는 따르지 말아야 하는지에 대한 힌트(hint)로 처리될 수 있다. 토큰이 무효화된 후, 그것은 더 이상 데이터에 액세스하는데 이용될 수 없다.In some implementations, messages that invalidate tokens can be treated as mandatory and follow. In other implementations, a message invalidating a token can be treated as a hint as to which to follow or not to follow. After the token is invalidated, it can no longer be used to access data.

토큰은 토큰이 나타내는 데이터를 보호하는 동일한 보안 메커니즘에 의해 보호될 수 있다. 예를 들면, 사용자가 파일을 개방하여 판독할 수 있는 권한을 가지면, 이것은 사용자가 다른 곳에서 파일을 복사하도록 하는 토큰을 사용자가 획득하게 할 수 있다. 파일을 판독하기 위한 채널이 확보되면, 토큰은 확보된 채널을 통해 전달될 수 있다. 데이터가 다른 엔티티에 제공될 수 있는 경우, 토큰은 마치 데이터가 다른 엔티티에 전달될 수 있는 것처럼 다른 엔티티에 전달될 수 있다. 수신 엔티티는 그 데이터 자체가 수신 엔티티로 전송된 데이터 자체인 것을 이용한 것처럼 수신 엔티티는 데이터를 획득하기 위해 토큰을 이용할 수 있다.Tokens may be protected by the same security mechanism that protects the data represented by the token. For example, if a user has permission to open and read a file, this may allow the user to obtain a token that allows the user to copy the file elsewhere. Once the channel for reading the file is reserved, the token can be passed over the reserved channel. If data can be provided to another entity, the token can be passed to another entity as if the data can be delivered to another entity. The receiving entity can use the token to obtain the data as if the receiving entity used that data itself is the data itself sent to the receiving entity.

토큰은 변경되지 않을 수 있다. 즉, 토큰이 어떤 방식으로 변경되면, 그것은 토큰을 나타낸 데이터에 더 이상 액세스하는데 이용될 수 없다.Tokens may not be changed. That is, if a token is changed in any way, it can no longer be used to access the data representing the token.

일 실시예에서는 데이터를 나타내는 하나의 토큰만이 제공된다. 그러나, 다른 실시예에서는 각각 데이터의 부분을 나타내는 다수의 토큰이 제공될 수 있다. 또 다른 실시예에서는 데이터의 부분 또는 전부가 다수의 토큰으로 표현될 수 있다. 이러한 토큰은 다른 데이터 구조에 캡슐화될 수 있거나 별도로 제공될 수 있다.In one embodiment, only one token representing data is provided. However, in other embodiments, multiple tokens may be provided, each representing a portion of data. In another embodiment, some or all of the data may be represented by multiple tokens. Such tokens may be encapsulated in other data structures or provided separately.

캡슐화된 경우, 요청자가 데이터에 대한 동작(예를 들어, 오프로드 기록, 토큰 무효화)을 수행하고자 할 때에 비고급(non-advanced) 요청자는 단순히 데이터 구조를 데이터 액세스 구성 요소로 전달할 수 있다. 더 고급 요청자(210)는 캡슐화된 데이터 구조에 토큰을 재배치할 수 있고, 데이터 동작을 수행하기 위해 다른 토큰에서 별도로 개별 토큰을 이용하거나 다수의 토큰이 다시 전달될 때에 다른 동작을 취할 수 있다.If encapsulated, a non-advanced requester may simply pass the data structure to the data access component when the requestor wishes to perform an action on the data (eg, offload write, token invalidation). The more advanced requestor 210 may relocate the token to an encapsulated data structure and may use separate tokens separately from other tokens to perform data operations, or take other actions when multiple tokens are passed back.

토큰을 수신한 후, 요청자(210)는 토큰으로 나타낸 데이터의 전부 또는 부분이 논리적으로 기록되어야 할 것을 요청할 수 있다. 여기서 때때로 이러한 동작은 오프로드 기록이라 한다. 요청자(210)는 하나 이상의 오프셋 및 길이와 함께 토큰을 데이터 액세스 구성 요소(215)로 전송하여 이러한 동작을 행할 수 있다.After receiving the token, requestor 210 may request that all or part of the data represented by the token be logically recorded. Sometimes this operation is referred to as offload writing here. Requestor 210 may perform this operation by sending a token to data access component 215 along with one or more offsets and lengths.

오프로드 기록의 경우, 관련된 각 토큰에 대해, 목적지 관련 오프셋(destination-relative offset)뿐만 아니라 토큰 관련 오프셋이 표시될 수 있다. 어느 하나 또는 양자의 오프셋은 암시적이거나 명시적일 수 있다. 토큰 관련 오프셋은 예를 들어 토큰으로 나타낸 데이터의 시작으로부터의 바이트(또는 다른 단위)의 수를 나타낼 수 있다. 목적지 관련 오프셋은 목적지에 대한 데이터의 시작으로부터의 바이트(또는 다른 단위)의 수를 나타낼 수 있다. 길이는 오프셋에서 시작을 복사하기 위해 바이트(또는 다른 단위)의 수를 표시할 수 있다.In the case of offload recording, for each relevant token, a token-related offset as well as a destination-relative offset may be indicated. Either or both offsets may be implicit or explicit. The token related offset may indicate the number of bytes (or other units), for example, from the beginning of the data represented by the token. The destination-related offset may indicate the number of bytes (or other units) from the start of data for the destination. The length can indicate the number of bytes (or other units) to copy the start at offset.

데이터 액세스 구성 요소(215) 중 하나 이상은 토큰을 수신하고, 토큰이 저장 장치에 데이터를 나타내는지를 검증할 수 있으며, 만일 그렇다면, 상기 구성 요소는 기본 저장 장치(220)를 호스팅하는 저장 시스템의 능력에 따라 토큰으로 나타내는 데이터의 부분을 논리적으로 기록할 수 있다. 기본 저장 장치(220)를 호스팅하는 저장 시스템은 하나 이상의 SAN, 전용 파일 서버, 일반 서버 또는 다른 컴퓨터, 네트워크 기기(network appliance), 도 1의 컴퓨터(110)를 구현하는데 적절한 어떤 다른 장치 등을 포함할 수 있다.One or more of the data access components 215 may receive a token and verify that the token represents data on the storage device, and if so, the component has the ability of the storage system to host the underlying storage device 220. As a result, the portion of data represented by the token can be logically recorded. The storage system hosting basic storage device 220 includes one or more SANs, dedicated file servers, general servers or other computers, network appliances, any other device suitable for implementing the computer 110 of FIG. can do.

예를 들면, 저장 장치(220)가 SAN과 같은 저장 시스템을 통해 호스팅되고, 요청자(210)가 SAN에 존재하는 데이터를 나타내는 토큰을 이용하여 SAN에 오프로드 기록을 요청하는 경우, SAN은 데이터의 다른 물리적 복사를 하지 않고 데이터를 논리적으로 기록하도록 SAN의 독점적인 메커니즘을 활용할 수 있다. 예를 들면, 참조 카운팅(reference counting) 또는 다른 메커니즘은 데이터의 논리적 복사의 수를 표시하는데 이용될 수 있다. 예를 들면, 참조 카운트는 블록의 참조 카운트를 증가시켜 블록이 SAN에서 논리적으로 중복될 수 있는 블록 레벨에서 이용될 수 있다.For example, if the storage device 220 is hosted through a storage system such as a SAN, and the requestor 210 requests an offload write to the SAN using a token representing the data present on the SAN, the SAN can You can take advantage of SAN's proprietary mechanism to log data logically without making other physical copies. For example, reference counting or other mechanism can be used to indicate the number of logical copies of the data. For example, the reference count may be used at the block level where the block may be logically duplicated in the SAN by incrementing the reference count of the block.

다른 예로서, 저장 장치(220)는 오프로드 기록이 데이터를 물리적으로 복사하는 것을 포함하지 않도록 오프로드 기록을 수행하는데 유용한 다른 메커니즘을 가질 수 있는 파일 서버와 같은 저장 시스템을 통해 호스팅될 수 있다.As another example, storage device 220 may be hosted through a storage system, such as a file server, which may have other mechanisms useful for performing offload writing such that offload writing does not involve physically copying data.

또 다른 예로서, 저장 장치(220)는 오프로드 기록에 응답하여 저장 시스템의 한 위치에서 다른 위치에 데이터를 물리적으로 복사하는 "덤(dumb)" 저장 시스템을 통해 호스팅될 수 있다.As another example, storage device 220 may be hosted through a “dumb” storage system that physically copies data from one location to another in the storage system in response to offload writing.

상기 예는 모두를 포함하거나 모든 것을 망라하도록 의도되지 않는다. 실제로, 요청자의 관점에서, 그것은 저장 시스템이 오프로드 기록에 상응하는 데이터 전송을 구현하는 방법과는 무관할 수 있다.The above examples are not intended to be all or all inclusive. In fact, from the requester's point of view, it may be irrelevant to how the storage system implements data transfer corresponding to offload writing.

상술한 바와 같이, 저장 시스템의 데이터 전송 동작은 시간이 지연될 수 있다. 일부 시나리오에서는 데이터 전송 동작이 전혀 발생하지 않을 수 있다. 예를 들면, 저장 시스템은 오프로드 기록이 완료되었다고 신속하게 응답할 수 있지만, 저장 시스템이 실제로 데이터 전송을 시작하기 전에 기본 저장을 트림(trim)하는 명령을 수신할 수 있다. 이 경우에, 저장 시스템에서의 데이터 전송 동작은 취소될 수 있다.As described above, the data transfer operation of the storage system may be delayed. In some scenarios, no data transfer operation can occur at all. For example, the storage system may quickly respond that the offload write is complete, but may receive a command to trim the basic store before the storage system actually starts transmitting data. In this case, the data transfer operation in the storage system can be canceled.

요청자(210)는 토큰을 하나 이상의 다른 엔티티와 공유할 수 있다. 예를 들면, 요청자는 요청자(210)가 호스팅되는 장치 외부의 장치에 호스팅된 애플리케이션으로 토큰을 전송할 수 있다. 그 후, 이러한 애플리케이션은 요청자(210)가 가질 수 있는 방식과 동일한 방식으로 데이터를 기록하기 위해 토큰을 이용할 수 있다. 이러한 시나리오는 도 5에 예시된다.The requestor 210 can share the token with one or more other entities. For example, the requestor may send the token to an application hosted on a device outside the device on which the requestor 210 is hosted. This application can then use the token to record data in the same way that requestor 210 may have. This scenario is illustrated in FIG. 5.

도 5를 참조하면, 데이터 액세스 구성 요소(215)를 이용하여 요청자(210)는 저장 장치(220)에서 데이터를 나타내는 토큰을 요청하여 획득한다. 그 후, 요청자(210)는 이러한 토큰을 요청자(510)로 전달한다. 그 다음, 요청자(510)는 데이터 액세스 구성 요소(515)를 통해 토큰을 전송하여 데이터를 기록할 수 있다.Referring to FIG. 5, using the data access component 215, the requestor 210 requests and obtains a token representing data from the storage device 220. The requestor 210 then passes this token to the requestor 510. The requestor 510 may then send the token through the data access component 515 to record the data.

하나 이상의 데이터 액세스 구성 요소(215 및 515)는 동일할 수 있다. 예를 들면, 요청자(210 및 510)가 동일한 장치에 호스팅되는 경우, 모든 데이터 액세스 구성 요소(215 및 515)는 양자의 요청자에 대해 동일할 수 있다. 요청자(210 및 510)가 서로 다른 장치에 호스팅되는 경우, 일부 구성 요소(예를 들어, 저장 장치(220)에 호스팅하거나 저장 장치(220)로의 액세스를 제공하는 장치를 구현하는 구성 요소)는 동일할 수 있지만, 다른 구성 요소(예를 들어, 서로 다른 장치의 구성 요소)는 다를 수 있다. One or more data access components 215 and 515 may be identical. For example, if requestors 210 and 510 are hosted on the same device, all data access components 215 and 515 may be the same for both requestors. If the requestor 210 and 510 are hosted on different devices, some components (e.g., components that implement the device hosting or providing access to storage 220) are the same. However, other components (eg components of different devices) may be different.

도 2로 돌아가면, 일 실시예에서, 데이터 액세스 구성 요소(215) 중 하나 이상은 (예를 들어, 토큰 관리자(225)와 같은) 토큰 관리자를 포함하거나 토큰 관리자와 협의할 수 있다. 토큰 관리자는 저장 장치(220)에 데이터를 나타내는 토큰을 생성하거나 획득하고, 이러한 토큰을 허가된 요청자에 제공하고, 토큰을 이용하여 데이터를 기록하도록 요청에 응답하며, 토큰을 무효화할 시기를 결정할 수 있는 하나 이상의 구성 요소를 포함할 수 있다. 아래에 더욱 상세히 설명되는 바와 같이, 토큰 관리자가 논리적으로 동일한 토큰 관리자가 오프로드 판독에서 토큰을 획득하고, 오프로드 기록에서 토큰을 사용하기 위해 양자 모두 이용되도록 다수의 장치에 걸쳐 분산될 수 있다. 이 경우에, 토큰 관리자의 분산된 구성 요소는 필요에 따라 토큰에 관한 정보를 획득하기 위해 서로 통신할 수 있다. 일 실시예에서, 토큰 관리자는 토큰을 생성하고, 토큰을 저장 장치(220)의 데이터와 관련시키는 토큰 저장 장치에 토큰을 저장하며, 요청자로부터 수신된 토큰이 토큰 저장 장치에서 발견되는지를 검증할 수 있다.Returning to FIG. 2, in one embodiment, one or more of the data access components 215 may include or consult with a token manager (eg, such as token manager 225). Token managers can generate or obtain tokens representing data in storage 220, provide these tokens to authorized requesters, respond to requests to record data using tokens, and determine when to invalidate tokens. It can include one or more components. As described in more detail below, token managers may be distributed across multiple devices such that token managers that are logically identical acquire both tokens in offload reads and both are used to use tokens in offload writes. In this case, the distributed components of the token managers can communicate with each other to obtain information about the tokens as needed. In one embodiment, the token manager may generate a token, store the token in a token storage device that associates the token with data in storage device 220, and verify that the token received from the requester is found in the token storage device. have.

토큰 관리자(225)는 데이터가 발견될 수 있는 곳을 식별하는 데이터와 토큰을 관련시킬 수 있다. 이러한 데이터는 또한 토큰 관리자(225)의 분산된 구성 요소로부터 토큰 정보(토큰이 나타내는 어떤 데이터, 토큰이 만료된 경우, 다른 데이터 등)를 획득하기 위해 다수의 장치 사이로 토큰 관리자(225)가 분산되는 경우에 이용될 수 있다. 토큰 관리자(225)는 또한 부분적으로 요청자가 토큰과 관련된 데이터의 끝을 지나 데이터를 획득할 수 없다는 것을 보장하도록 토큰을 데이터의 길이와 관련시킬 수 있다.Token manager 225 may associate the token with data that identifies where the data may be found. Such data may also be distributed among multiple devices to obtain token information (what data the token represents, other data if the token has expired, other data, etc.) from the distributed components of the token manager 225. Can be used in the case. Token manager 225 may also partially associate the token with the length of the data to ensure that the requestor cannot obtain data past the end of the data associated with the token.

저장 장치(220)의 데이터가 변경되거나 삭제된 경우, 토큰 관리자(225)는 토큰 관리자(225)가 구성되는 방법에 따라 다양한 동작을 취할 수 있다. 예를 들면, 토큰으로 나타낸 데이터를 보존하기 위해 구성되는 경우, 토큰 관리자(225)는 토큰이 생성된 시간에 존재하는 데이터의 사본이 유지되는 것을 보장할 수 있다. 일부 저장 시스템은 데이터가 변경될 때에도 이러한 사본을 유지하기 위한 정교한 메커니즘을 가질 수 있다. 이 경우에, 토큰 관리자(225)는 한동안 또는 달리 지시될 때까지 원본 데이터의 사본을 유지하기 위해 (저장 장치(220)가 부분일 수 있는) 저장 시스템에 지시할 수 있다.When the data of the storage device 220 is changed or deleted, the token manager 225 may take various actions depending on how the token manager 225 is configured. For example, when configured to preserve the data represented by the token, token manager 225 may ensure that a copy of the data that exists at the time the token was created is maintained. Some storage systems may have sophisticated mechanisms to maintain these copies even when data changes. In this case, token manager 225 may instruct the storage system (where storage device 220 may be part of) to maintain a copy of the original data for a while or until otherwise indicated.

다른 경우에, 저장 시스템은 원본 데이터의 사본을 유지하기 위한 메커니즘을 구현하지 않을 수 있다. 이 경우에, 토큰 관리자(225) 또는 다른 데이터 액세스 구성 요소(215)는 한동안 또는 달리 지시될 때까지 원본 데이터의 사본을 유지할 수 있다.In other cases, the storage system may not implement a mechanism for maintaining a copy of the original data. In this case, token manager 225 or other data access component 215 may keep a copy of the original data for a while or until otherwise indicated.

원본 데이터의 사본을 유지하는 것은 원본 데이터의 복제 사본(duplicate copy)보다는 논리적 사본을 유지하는 것을 포함할 수 있다는 것을 주목한다. 논리적 사본은 정확한 사본을 생성하는데 이용될 수 있는 데이터를 포함한다. 예를 들면, 논리적 사본은 데이터의 현재 상태와 함께 변경 로그(changelog)를 포함할 수 있다. 역으로 변경 로그를 현재 상태에 적용함으로써, 원본 사본이 획득될 수 있다. 다른 예로서, 원본 데이터를 재구성하는데 이용될 수 있는 논리적 사본을 유지하기 위해 COW(Copy-on-Write) 기술이 이용될 수 있다. 상기 예는 논리적 사본이 본 명세서에 설명된 발명 대상의 양태의 사상 또는 범위를 벗어나지 않고 구현될 수 있는 많은 방식이 있다는 것을 당업자가 이해하는 것으로 제한하도록 의도되지 않는다.Note that maintaining a copy of the original data may include maintaining a logical copy rather than a duplicate copy of the original data. The logical copy contains data that can be used to create an exact copy. For example, the logical copy may include a changelog with the current state of the data. Conversely, by applying the change log to the current state, an original copy can be obtained. As another example, copy-on-write techniques may be used to maintain a logical copy that may be used to reconstruct original data. The above examples are not intended to limit the skilled person's understanding that there are many ways in which logical copies can be implemented without departing from the spirit or scope of the aspects of the subject matter described herein.

토큰 관리자(225)는 데이터가 변경될 때에 토큰을 무효화하도록 구성될 수 있다. 이 경우에, 토큰과 관련된 데이터가 변하도록 하는 것과 관련하여, 토큰 관리자(225)는 토큰이 더 이상 유효하지 않다는 것을 나타낼 수 있다. 이것은 예를 들어 토큰을 삭제하거나 토큰을 토큰 저장 장치에서 무효인 것으로 표시함으로써 행해질 수 있다. 토큰 관리자(225)가 저장 시스템의 구성 요소에 의해 구현되는 경우, 하나 이상의 장애 코드(failure code)가 하나 이상의 다른 데이터 액세스 구성 요소로 전달되고, 요청자(210)로 전달될 수 있다.Token manager 225 may be configured to invalidate tokens when data changes. In this case, with respect to causing the data associated with the token to change, token manager 225 may indicate that the token is no longer valid. This can be done, for example, by deleting the token or marking the token as invalid in the token storage. When token manager 225 is implemented by a component of the storage system, one or more failure codes may be passed to one or more other data access components and passed to requestor 210.

토큰 관리자(225)는 토큰의 만료를 관리할 수 있다. 예를 들면, 토큰은 TTL(time to live)을 가질 수 있다. TTL이 만료된 후, 토큰은 무효화될 수 있다. 다른 실시예에서, 토큰은 다음의 것을 포함하는 다양한 요인에 따라 유효성을 유지할 수 있다.Token manager 225 may manage the expiration of tokens. For example, a token can have a time to live (TTL). After the TTL expires, the token can be invalidated. In other embodiments, the token may remain valid according to various factors, including the following.

1. 저장 제약 조건(constraint). 데이터의 원본 사본을 유지하는 것은 임계 값 이상의 공간을 소비할 수 있다. 그 점에서, 하나 이상의 토큰은 메모리 공간을 확보하기 위해 무효화될 수 있다.1. Storage constraints. Maintaining the original copy of the data can consume space above the threshold. In that regard, one or more tokens may be invalidated to free memory space.

2. 메모리 제약 조건. 다수의 토큰을 유지하여 소비되는 메모리는 임계값을 초과할 수 있다. 그 점에서, 하나 이상의 토큰은 메모리 공간을 확보하기 위해 무효화될 수 있다.2. Memory constraints. Memory consumed by maintaining multiple tokens may exceed a threshold. In that regard, one or more tokens may be invalidated to free memory space.

3. 토큰의 수. 시스템은 설정된 수의 활성화된 토큰을 허용할 수 있다. 최대 수의 토큰에 도달된 후, 토큰 관리자는 다른 토큰을 제공하기 전에 기존의 토큰을 무효화할 수 있다.3. Number of tokens. The system may allow a set number of activated tokens. After the maximum number of tokens has been reached, the token manager can invalidate existing tokens before providing another token.

4. 입력/출력(IO) 오버헤드. 너무 많은 토큰을 갖는 IO 오버헤드는 토큰 관리자가 IO 오버헤드를 줄이기 위해 하나 이상의 토큰을 무효화할 수 있도록 할 수 있다.4. Input / output (IO) overhead. IO overhead with too many tokens may allow token managers to invalidate one or more tokens to reduce IO overhead.

5. IO 비용/대기 시간(latency). 토큰은 소스에서 목적지로의 데이터 전송의 비용 및/또는 대기 시간에 기초하여 무효화될 수 있다. 예를 들면, 비용이 임계값을 초과하면, 토큰은 무효화될 수 있다. 마찬가지로, 대기 시간이 임계값을 초과하면, 토큰은 무효화될 수 있습니다.5. IO cost / latency. Tokens may be invalidated based on the cost and / or latency of data transfer from source to destination. For example, if the cost exceeds a threshold, the token can be invalidated. Similarly, if the wait time exceeds the threshold, the token can be invalidated.

6. 우선 순위. 어떤 토큰은 다른 토큰보다 우선 순위를 가질 수 있다. 토큰이 무효화되면, 낮은 우선 순위 토큰은 무효화될 수 있다. 토큰의 우선 순위는 다양한 정책(예를 들어, 용도, 토큰에 관한 명시적 또는 암시적 지식, 요청자에 의한 요청, 다른 정책 등)에 기초하여 조정될 수 있다.6. Priority. Some tokens may have priority over other tokens. If the token is invalidated, the low priority token may be invalidated. The priority of a token may be adjusted based on various policies (eg, usage, explicit or implicit knowledge of the token, request by the requestor, other policies, etc.).

7. 저장 제공자 요청. 저장 제공자(예를 들어, SAN)는 활성화된 토큰의 수의 감축을 요청할 수 있다. 응답에서, 토큰 관리자는 적절한 하나 이상의 토큰을 무효화할 수 있다.7. Storage Provider Request. The storage provider (eg, SAN) may request to reduce the number of activated tokens. In response, the token manager may invalidate one or more tokens as appropriate.

토큰에 기초하여 하나 이상의 오프로드 기록이 성공하기 전이나 후에도 토큰은 언제라도 무효화될 수 있다.Based on the token, the token may be invalidated at any time, even before or after one or more offload records are successful.

일 실시예에서, 토큰은 데이터를 나타내는 값만을 포함한다. 다른 실시예에서, 토큰은 또한 다른 데이터를 포함하거나 다른 데이터와 관련될 수 있다. 이러한 다른 데이터는 예를 들어 저장 장치, 저장 시스템, 또는 데이터를 획득할 수 있는 다른 엔티티를 결정하는데 이용될 수 있는 데이터, 네트워크 저장 시스템의 식별 정보, 라우팅 데이터 및 힌트, 액세스 제어 메커니즘에 관한 정보, 토큰으로 나타낸 데이터에 관한 체크섬, 테이터의 타입(예를 들어, 시스템, 메타데이터, 데이터베이스, 가상 하드 드라이브 등), 데이터의 액세스 패턴(예를 들어, 순차, 임의), 사용 패턴(예를 들어, 종종, 때때로, 드문 액세스 등), 데이터의 원하는 정렬, (예를 들어, 서로 다른 타입의 저장 장치를 가진 하이브리드 환경에서) 오프로드 기록 동안에 데이터의 배치를 최적화하기 위한 데이터 등을 포함할 수 있다.In one embodiment, the token only contains a value representing the data. In other embodiments, the token may also include or be associated with other data. Such other data may include, for example, data that may be used to determine storage devices, storage systems, or other entities from which data may be obtained, identification information of network storage systems, routing data and hints, information about access control mechanisms, Checksums about the data represented by the token, type of data (e.g., system, metadata, database, virtual hard drive, etc.), data access pattern (e.g., sequential, arbitrary), usage pattern (e.g., Often, sometimes, such as rare access, etc.), desired alignment of data, data to optimize the placement of data during offload writing (eg, in a hybrid environment with different types of storage), and so forth.

상기 예는 토큰에 포함될 수 있거나 토큰과 관련될 수 있는 다른 데이터 모두를 포함하거나 모든 것을 망라하도록 의도되지 않는다. 실제로 본원의 요지에 기초하여, 당업자는 본 명세서에 설명된 발명 대상의 양태의 사상 또는 범위를 벗어나지 않고 토큰으로 전달될 수 있는 다른 데이터를 인식할 수 있다.The above examples are not intended to include all or encompass all of the other data that may be included in or associated with a token. Indeed, based on the subject matter herein, those skilled in the art can recognize other data that can be conveyed in a token without departing from the spirit or scope of the aspects of the subject matter described herein.

저장 장치로의 판독/기록 요청은 내부적으로 파일 단편(file fragment) 경계, RAID 스트라이프 경계, 볼륨 스패닝 경계 등과 마주칠 때 저장 스택의 하위 계층으로의 판독 요청을 스플리팅(splitting)할 수 있다. 이러한 스플리팅은 소스/목적지가 스플리팅된 부분(split)에 걸쳐 다르기 때문에 발생할 수 있다. 이러한 스플리팅은 생성된 스플리팅된 IO가 모두 완료될 때까지 스플리팅될 필요가 있는 요청을 완료하지 않음으로써 스플리터에 의해 숨겨질 수 있다.The read / write request to the storage device may split a read request to a lower layer of the storage stack when it encounters a file fragment boundary, a RAID stripe boundary, a volume spanning boundary, and the like internally. Such splitting can occur because the source / destination differs over the split. Such splitting can be hidden by the splitter by not completing requests that need to be split until all generated split IO is complete.

저장 스택의 스플리팅 계층 내에서의 스플리팅의 이러한 숨겨짐은 저장 스택의 상기 계층이 스플리팅에 대해 알 필요가 없다는 점에서 편리하다. 일 실시예에서, 본 명세서에 설명된 토큰 기반의 접근 방식으로, 스플리팅이 시각적일 수 있다. 특히, 스플리팅이 스플리팅된 부분에 걸쳐 다른 소스/목적지로 인해 발생하면, (아래에 설명되는) 오프로드 제공자는 스플리팅된 부분에 걸쳐 다를 수 있다. 예를 들면, 데이터가 중복되는 경우(또는 중복되지 않는 경우에도), 데이터로의 액세스를 제공하는 다수의 오프로드 제공자가 있을 수 있다. 다른 예로서, SAN으로 향한 다수의 파일 서버가 있을 수 있다. SAN 이외에, 하나 이상의 서버 또는 다른 데이터 액세스 구성 요소는 오프로드 제공자로 간주될 수 있다.This hiding of splitting within the splitting layer of the storage stack is convenient in that the layer of the storage stack does not need to know about splitting. In one embodiment, with the token-based approach described herein, splitting can be visual. In particular, if splitting occurs due to a different source / destination over the splitted portion, the offload provider (described below) may differ across the splitted portion. For example, if data is duplicated (or not duplicated), there may be multiple offload providers that provide access to the data. As another example, there may be multiple file servers destined for the SAN. In addition to a SAN, one or more servers or other data access components may be considered offload providers.

오프로드 제공자는 저장 장치 소스 또는 목적지와 관련된 데이터로의 액세스를 제공하는 (아마도 다수의 장치에 걸쳐 분산된 다수의 구성 요소를 포함하는) 논리적 엔티티이다. 본 명세서에 사용된 액세스는 데이터 판독, 데이터 기록, 데이터 삭제, 데이터 업데이트, 이 중 둘 이상을 포함하는 조합 등을 포함할 수 있다. 논리적으로, 오프로드 제공자는 오프로드 판독 또는 기록을 수행할 수 있다. 물리적으로, 오프로드 제공자는 하나 이상의 데이터 액세스 구성 요소(215)를 포함할 수 있고, 또한 토큰 관리자(225)를 포함할 수 있다.An offload provider is a logical entity (perhaps including a number of components distributed across multiple devices) that provides access to data associated with a storage source or destination. As used herein, access can include reading data, writing data, deleting data, updating data, a combination including two or more of these, and the like. Logically, the offload provider can perform an offload read or write. Physically, the offload provider may include one or more data access components 215 and may also include a token manager 225.

오프로드 제공자는 소스 저장 장치에서 데이터를 전송하고, 데이터를 목적지 저장 장치에 기록하며, 데이터와 관련된 토큰을 수신할 시에 제공되도록 데이터를 유지할 수 있다. 일부 구현에서, 오프로드 제공자는 데이터가 논리적으로 목적지 저장 장치에 기록된 후 오프로드 기록 명령이 완료된다는 것을 나타낼 수 있다. 게다가, 오프로드 제공자는 오프로드 기록 명령이 완료된다는 것을 나타낼 수 있지만, 편리할 때까지 오프로드 기록과 관련된 데이터를 물리적으로 기록하는 것을 연기할 수 있다.The offload provider may send data from the source storage device, write the data to the destination storage device, and maintain the data to be provided upon receipt of a token associated with the data. In some implementations, the offload provider can indicate that the offload write command is complete after the data has been logically written to the destination storage device. In addition, the offload provider may indicate that the offload write command is complete, but may postpone physically recording data associated with the offload write until convenient.

데이터가 스플리팅될 때, 오프로드 제공자는 요청된 데이터의 일부로의 액세스를 제공하지만, 요청된 데이터의 다른 부분으로는 액세스를 제공하지 않을 수 있다. 이 경우에, 분리 토큰은 스플리팅된 포인트 전의 부분과 스플리팅된 포인트 후의 부분에 제공될 수 있다. 저장 스택의 계층 또는 오프로드 제공자에서의 다른 구현 의존 제약 조건은 토큰이 다른 이유로 스플리팅된 범위에 걸쳐 미치지 못하게 할 수 있다. 이러한 실시예에서, 요청자가 판독에서 반환된 토큰을 볼 수 있기 때문에, 스플리팅은 요청자에게 가시적일 수 있다.When data is split, the offload provider may provide access to a portion of the requested data, but may not provide access to other portions of the requested data. In this case, the separation token may be provided in the part before the split point and in the part after the split point. Other implementation dependent constraints at the storage stack's layer or offload provider may prevent the token from spanning the split range for other reasons. In such an embodiment, splitting may be visible to the requestor because the requestor may see the token returned in the read.

다음은 스플리팅을 다루는 두 가지 예시적인 접근 방식이다.The following are two example approaches to dealing with splitting.

1. 판독 요청은 각 토큰이 요청된 데이터의 다른 범위와 관련되는 둘 이상의 토큰을 반환할 수 있다. 상술한 바와 같이 이러한 다수의 토큰은 단일의 데이터 구조로 반환될 수 있다. 요청자가 데이터를 기록하고자 할 때, 그것은 데이터 구조 전체를 전달할 수 있거나, 개선된 방식으로 행하는 경우에는 데이터 구조의 하나 이상의 토큰을 전달할 수 있다.1. The read request may return more than one token, with each token associated with a different range of requested data. As noted above, these multiple tokens may be returned in a single data structure. When a requestor wants to record data, it can pass the entire data structure or, if done in an improved manner, pass one or more tokens of the data structure.

2. 단일의 토큰이 반환되면, 토큰은 원래 요청된 데이터의 단축 범위를 나타낼 수 있다. 그 후, 요청자는 단축 범위의 길이 한도 내에서 하나 이상의 오프로드 기록을 수행하기 위해 토큰을 이용할 수 있다. 오프로드 기록이 요청되면, 요청된 기록의 길이는 또한 절단될 수 있다. 판독 및 기록의 양자에 대해, 요청자는 이전의 요청에 의해 처리되지 않은 오프셋에서 시작하는 다른 범위에 대한 요청을 할 수 있다. 이러한 방식으로, 요청자는 요청자의 전체 필요한 범위를 통해 작업할 수 있다.2. If a single token is returned, the token may indicate a short range of the original requested data. The requestor can then use the token to perform one or more offload writes within the length limit of the shortened range. If offload writing is requested, the length of the requested recording can also be truncated. For both read and write, the requestor can make a request for another range starting at an offset that was not processed by the previous request. In this way, the requestor can work through the entire required scope of the requestor.

상기 접근 방식은 예시적일 뿐이다. 본원의 요지에 기초하여, 당업자는 본 명세서에 설명된 발명 대상의 양태의 사상 또는 범위를 벗어나지 않고 활용될 수 있는 스플리팅을 다루기 위한 다른 접근 방식을 인식할 수 있다.The approach is illustrative only. Based on the subject matter herein, those skilled in the art can recognize other approaches for dealing with splitting that can be utilized without departing from the spirit or scope of the aspects of the subject matter described herein.

동일한 스택에는 다수의 오프로드 제공자가 있을 수 있다. 오프로드 판독 요청에서 반환된 소정의 범위(범위 절단의 경우에 가능한 유일한 범위)의 경우, 토큰을 기꺼이 제공하는 다수의 오프로드 제공자가 있을 수 있다. 일 실시예에서, 동일한 데이터에 대해 이러한 다수의 토큰이 요청으로 반환될 수 있고, 오프로드 기록에서 요청자에 의해 이용될 수 있다.There can be multiple offload providers in the same stack. For the given range returned in the offload read request (the only range possible in case of range truncation), there may be multiple offload providers who are willing to provide tokens. In one embodiment, multiple such tokens may be returned in the request for the same data and used by the requestor in the offload record.

예를 들면, 요청자는 오프로드 기록에 이용하기 위해 토큰 중 하나를 선택할 수 있다. 하나의 토큰만을 오프로드 제공자에 전달함으로써, 요청자는 이러한 방식으로 데이터를 획득하는데 이용되는 소스 오프로드 제공자를 결정할 수 있다. 다른 예에서, 요청자는 둘 이상의 토큰을 목적지 오프로드 제공자에 전달할 수 있다. 그 후, 목적지 오프로드 제공자는 토큰으로 나타내는 데이터를 획득하기 위해 토큰과 관련된 하나 이상의 소스 오프로드 제공자를 선택할 수 있다.For example, the requestor may select one of the tokens for use in offload recording. By passing only one token to the offload provider, the requestor can determine the source offload provider used to obtain the data in this manner. In another example, the requestor may pass more than one token to the destination offload provider. The destination offload provider can then select one or more source offload providers associated with the token to obtain the data represented by the token.

다른 예에서, 다수의 토큰은 대량의 데이터(bulk data)의 오프로드된 복사, 및 대량의 데이터 이외에 다른 보조 데이터를 오프로드된 복사를 가능하게 하도록 반환될 수 있다. 보조 데이터의 일례는 데이터에 관한 메타데이터이다. 예를 들면, 전체 오프로드 사본이 성공하도록 하기 위해 파일 시스템 오프로드 제공자는 오프로드 기록 요청이 목적지 스택에서 성공적으로 이용되도록 두 토큰(예를 들어, 기본 데이터 토큰 및 메타데이터 토큰)을 포함하는 것을 특정할 수 있다.In another example, multiple tokens may be returned to enable offloaded copies of bulk data, and offloaded copies of auxiliary data other than the bulk data. One example of auxiliary data is metadata about the data. For example, to ensure that the full offload copy is successful, the file system offload provider might include two tokens (eg, base data token and metadata token) to ensure that the offload write request is successfully used on the destination stack. It can be specified.

대조적으로, 스택에서 다수의 대량의 데이터 오프로드 제공자를 지원하기 위해 이용되는 다수의 토큰은 오프로드 기록이 성공하도록 하기 위해 하나의 토큰만이 목적지 스택에 이용되는 것을 필요로 할 수 있다.In contrast, multiple tokens used to support multiple large data offload providers in the stack may require that only one token be used on the destination stack in order for offload writes to succeed.

다수의 오프로드 제공자가 데이터를 소스에서 목적지로 전송할 수 있을 때, 요청자는 이용 가능한 하나 이상의 특정 오프로드 제공자를 선택할 수 있다. 일 실시예에서, 이것은 "스킵 N"이 제 1 N 오프로드 제공자를 스킵하는 것을 지시하는 스킵 N 명령을 사용하는 것을 포함할 수 있다. 다른 실시예에서, 특정 오프로드 제공자를 식별하는데 이용되는 다른 메커니즘(예를 들어, 오프로드 제공자의 ID)이 있을 수 있다. 또 다른 실시예에서, 많은 토큰 중 하나를 선택하는 것은 일부 오프로드 제공자가 토큰으로 나타낸 데이터를 복사할 수 없지만, 다른 오프로드 제공자가 그렇게 할 수 있을 때에 데이터를 복사하기 위해 오프로드 제공자를 선택하는데 이용될 수 있다.When multiple offload providers can transfer data from source to destination, the requestor can select one or more specific offload providers available. In one embodiment, this may include using a skip N instruction indicating that "skip N" skips the first N offload provider. In other embodiments, there may be other mechanisms used to identify a particular offload provider (eg, the offload provider's ID). In another embodiment, selecting one of the many tokens does not allow some offload providers to copy the data represented by the token, but selects an offload provider to copy the data when another offload provider can do so. Can be used.

일부 실시예에서, 둘 이상의 오프로드 제공자가 토큰으로 나타낸 데이터를 복사할 수 있는 경우, 최초, 마지막, 임의의, 적어도 로드된, 가장 효율적, 저 대기 시간, 또는 달리 결정된 오프로드 제공자는 자동으로 선택될 수 있다.In some embodiments, if more than one offload provider can copy the data represented by the token, the first, last, any, at least loaded, most efficient, low latency, or otherwise determined offload provider is automatically selected. Can be.

토큰은 하드 디스크 또는 다른 저장 매체의 어떤 섹터에서 시작하는 데이터를 나타낼 수 있다. 토큰이 나타내는 데이터는 정확히 다수의 섹터일 수 있지만, 대부분의 경우에는 아닐 수 있다. 토큰이 길이의 끝을 지난 데이터에 대한 파일 동작 시에 이용되는 경우, 반환된 데이터는 널(null), 0, 또는 데이터 없음(no data)의 일부 다른 표시일 수 있다. 따라서, 요청자가 토큰으로 나타낸 데이터의 끝을 지나 복사하려고 시도하는 경우, 요청자는 이러한 메커니즘을 통해서는 물리적으로 데이터의 끝을 지나 있는 데이터를 획득할 수 없다.Tokens can represent data starting from any sector of a hard disk or other storage medium. The data represented by the token may be exactly a number of sectors, but in most cases it may not. If the token is used in a file operation on data that is beyond the end of length, the data returned may be null, zero, or some other indication of no data. Thus, if a requestor attempts to copy past the end of the data represented by the token, the requestor cannot physically obtain data past the end of the data through this mechanism.

토큰은 큰 파일의 제로화(zeroing)를 오프로드하는데 이용될 수 있다. 예를 들면, 토큰은 널, 0, 또는 다른 "데이터 없음(no data)" 파일을 나타낼 수 있다. 오프로드 기록에서 이러한 토큰을 이용함으로써, 토큰은 파일 또는 다른 데이터를 초기화하는데 이용될 수 있다.Tokens can be used to offload large files. For example, the token can represent a null, zero, or other "no data" file. By using this token in offload writing, the token can be used to initialize a file or other data.

도 3은 일반적으로 토큰 관리자가 저장 장치를 호스팅하는 장치에 의해 호스팅되는 시스템의 구성 요소의 예시적 배치를 나타내는 블록도이다. 예시된 바와 같이, 시스템(305)은 도 2의 요청자(210) 및 저장 장치(220)를 포함한다. 도 3의 데이터 액세스 구성 요소(215)는 요청자(210)를 호스팅하는 장치(330)에 있는 데이터 액세스 구성 요소(310)와 저장 장치(220)를 호스팅하는 장치(335)에 있는 데이터 액세스 구성 요소(315) 사이에서 분할된다. 다른 실시예에서, 저장 장치(220)가 장치(335) 외부에 있을 경우에는 저장 장치(220)로의 액세스를 제공하는 추가적인 데이터 액세스 구성 요소가 있을 수 있다.3 is a block diagram generally illustrating an exemplary arrangement of components of a system hosted by a device where a token manager hosts the storage device. As illustrated, the system 305 includes the requestor 210 and storage 220 of FIG. 2. The data access component 215 of FIG. 3 is the data access component 310 in the device 330 hosting the requestor 210 and the data access component in the device 335 hosting the storage device 220. Divided between 315. In other embodiments, there may be additional data access components that provide access to storage device 220 when storage device 220 is external to device 335.

장치(335)는 이러한 장치가 토큰을 제공하고, 토큰이 주어진 데이터를 기록하기 위한 필요한 구성 요소를 포함할 때에 오프로드 제공자인 것으로 간주될 수 있다.Device 335 may be considered to be an offload provider when such device provides a token and the token contains the necessary components for recording the given data.

토큰 관리자(320)는 상술한 바와 같이 토큰을 생성하고 확인할 수 있다. 예를 들면, 요청자(210)가 저장 장치(220)에서 데이터에 대한 토큰을 요청하면, 토큰 관리자(320)는 데이터를 나타내는 토큰을 생성할 수 있다. 그 후, 이러한 토큰은 데이터 액세스 구성 요소(310 및 315)를 통해 요청자(210)로 다시 전송될 수 있다.The token manager 320 may generate and verify a token as described above. For example, when the requestor 210 requests a token for data from the storage device 220, the token manager 320 may generate a token representing the data. This token can then be sent back to the requestor 210 via the data access components 310 and 315.

토큰을 생성하는 것과 관련하여, 토큰 관리자(320)는 토큰 저장 장치(325)에서 엔트리를 생성할 수 있다. 이러한 엔트리는 저장 장치(220)에서 토큰으로 나타내는 데이터가 발견될 수 있는 곳을 나타내는 데이터와 토큰을 관련시킬 수 있다. 엔트리는 또한 토큰, 토큰에 대한 TTL, 다른 데이터 등을 무효화할 때와 같이 토큰을 관리할 시에 이용되는 다른 데이터를 포함할 수 있다.In connection with generating a token, token manager 320 may generate an entry in token storage 325. Such an entry may associate the token with data indicating where in the storage device 220 the data represented by the token may be found. The entry may also include other data used in managing the token, such as when invalidating a token, TTL for the token, other data, and the like.

요청자(210) 또는 어떤 다른 엔티티가 토큰을 토큰 관리자(320)에 제공하면, 토큰 관리자는 토큰이 존재하는지를 판단하기 위해 토큰 저장 장치(325)에서 조회(lookup)를 수행할 수 있다. 토큰이 존재하고 유효한 경우, 토큰 관리자(320)는 데이터 액세스 구성 요소(315)가 요청받은 대로 데이터를 논리적으로 기록할 수 있도록 위치 정보를 이러한 구성 요소에 제공할 수 있다.When the requestor 210 or some other entity provides the token to the token manager 320, the token manager may perform a lookup on the token storage 325 to determine if the token exists. If the token exists and is valid, token manager 320 may provide location information to such component so that data access component 315 may logically record the data as requested.

다수의 물리적 장치가 저장 장치(220)로의 액세스를 제공하는 경우, 토큰 관리자(320) 및/또는 토큰 저장 장치(325)는 하나 이상의 물리적 장치에 의해 호스팅되는 구성 요소를 가질 수 있다. 예를 들면, 토큰 관리자(320)는 장치에 걸쳐 토큰 상태를 복제할 수 있고, 다른 토큰 구성 요소가 참고하는 중앙 집중식 토큰 구성 요소를 가질 수 있으며, 필요한 기준에 따라 피어 토큰 관리자로부터 토큰 상태가 제공되는 분산 시스템 등을 가질 수 있다.If multiple physical devices provide access to storage device 220, token manager 320 and / or token storage device 325 may have components hosted by one or more physical devices. For example, token manager 320 can replicate token status across devices, have a centralized token component referenced by other token components, and provide token status from peer token managers as needed. Distributed systems, and the like.

논리적으로, 토큰 관리자(320)는 토큰을 관리한다. 물리적으로, 토큰 관리자(320)는 단일 장치에 의해 호스팅될 수 있거나 둘 이상의 장치를 통해 분산된 구성 요소를 가질 수 있다. 토큰 관리자(320)는 저장 장치(220)를 호스팅하는 어떤 장치에서 분리되는 장치에 호스팅될 수 있다. 예를 들면, 토큰 관리자(320)는 데이터 액세스 구성 요소(315)가 토큰을 생성하고 확인하기 위해 호출하고, 이와 관련된 위치 정보를 제공할 수 있는 서비스로 존재할 수 있다.Logically, token manager 320 manages tokens. Physically, token manager 320 may be hosted by a single device or may have components distributed across more than one device. Token manager 320 may be hosted on a device that is separate from any device that hosts storage device 220. For example, token manager 320 may exist as a service that data access component 315 may call to generate and verify a token and provide location information associated therewith.

일 실시예에서, 토큰 저장 장치(325)는 저장 장치(220)에 저장될 수 있다. 다른 실시예에서, 토큰 저장 장치(325)는 저장 장치(220)로부터 분리될 수 있다.In one embodiment, token storage device 325 may be stored in storage device 220. In other embodiments, token storage 325 may be separate from storage 220.

도 4는 일반적으로 본 명세서에 설명된 발명 대상의 양태에 따라 동작하는 시스템의 구성 요소의 다른 예시적 배치를 나타내는 블록도이다. 예시된 바와 같이, 장치(405)는 요청자(210) 뿐만 아니라 데이터 액세스 구성 요소(310) 및 가상화 계층(430)을 호스팅한다. 데이터 액세스 구성 요소(310)는 스택된 방식으로 배치되고, 구성 요소(415, 420, 425) 및 (도시되지 않은) 다른 구성 요소를 포함하는 N 구성 요소를 포함한다. 수 N은 변수이며, 장치 간에 다를 수 있다.4 is a block diagram illustrating another exemplary arrangement of components of a system operating generally in accordance with aspects of the subject matter described herein. As illustrated, the device 405 hosts the data access component 310 and the virtualization layer 430 as well as the requestor 210. Data access component 310 is arranged in a stacked manner and includes N components including components 415, 420, 425 and other components (not shown). The number N is variable and can vary between devices.

요청자(210)는 애플리케이션 프로그래밍 인터페이스(API)(410)를 통해 하나 이상의 데이터 액세스 구성 요소(310)에 액세스한다. 가상화 계층(430)은 요청자 또는 어느 하나의 데이터 액세스 구성 요소가 가상 환경에 있을 수 있음을 나타낸다.The requestor 210 accesses one or more data access components 310 through an application programming interface (API) 410. The virtualization layer 430 indicates that the requestor or either data access component can be in a virtual environment.

가상 환경은 컴퓨터에 의해 시뮬레이션되거나 에뮬레이션되는 환경이다. 가상 환경은 물리적 머신, 운영 체제, 하나 이상의 인터페이스의 세트, 이의 부분, 이의 조합 등을 시뮬레이션하거나 에뮬레이션할 수 있다. 머신이 시뮬레이션되거나 에뮬레이션되면, 머신은 때때로 가상 머신이라 한다. 가상 머신은 가상 머신에서 실행하는 소프트웨어에 대해 물리적 머신인 것으로 보이는 머신이다. 소프트웨어는 가상 하드 드라이브, 가상 플로피 디스크 등과 같은 가상 저장 장치에 파일을 저장할 수 있고, 가상 CD로부터 파일을 판독할 수 있으며, 가상 네트워크 어댑터 등을 통해 통신할 수 있다.A virtual environment is an environment that is simulated or emulated by a computer. The virtual environment can simulate or emulate a physical machine, an operating system, a set of one or more interfaces, portions thereof, combinations thereof, and the like. When a machine is simulated or emulated, it is sometimes called a virtual machine. A virtual machine is a machine that appears to be a physical machine for the software running on the virtual machine. The software can store files in virtual storage devices such as virtual hard drives, virtual floppy disks, and the like, can read files from virtual CDs, and communicate via virtual network adapters and the like.

가상 하드 드라이브, 플로피, CD 또는 다른 가상 저장 장치에서의 파일은 장치(405)에 로컬 또는 원격적일 수 있는 물리적 매체로 지원될 수 있다. 가상화 계층(430)은 데이터를 물리적 매체에 배치하며, 데이터에 액세스하는 하나 이상의 구성 요소가 가상 환경에서 데이터에 액세스하는 것을 인식하지 못하는 방식으로 데이터를 가상 환경에 제공할 수 있다.Files on a virtual hard drive, floppy, CD or other virtual storage device may be supported by physical media, which may be local or remote to device 405. The virtualization layer 430 places the data on a physical medium and can provide the data to the virtual environment in a manner that does not recognize that one or more components that access the data access the data in the virtual environment.

둘 이상의 가상 환경은 단일 컴퓨터에서 호스팅될 수 있다. 즉, 둘 이상의 가상 환경은 단일의 물리적 컴퓨터에서 실행할 수 있다. 각 가상 환경에서 실행하는 소프트웨어에 대해, 단일 컴퓨터에서 호스팅되는 가상 환경이 물리적으로 하나 이상의 물리적 장치를 서로 공유하고 호스팅 운영 체제와 공유할 수 있을지라도 가상 환경은 자신의 자원(예를 들어, 하드웨어)을 갖는 것으로 보인다.More than one virtual environment can be hosted on a single computer. That is, two or more virtual environments can run on a single physical computer. For software running in each virtual environment, the virtual environment is a resource of its own (for example, hardware), even though a virtual environment hosted on a single computer can physically share one or more physical devices with each other and with the hosting operating system. Seems to have

소스 저장 장치(435)는 요청자(210)가 토큰을 요청하는 저장 장치를 나타낸다. 목적지 저장 장치(440)는 요청자가 토큰을 이용하여 데이터를 기록할 것을 요청하는 저장 장치를 나타낸다. 구현에서, 소스 저장 장치(435) 및 목적지 저장 장치(440)는 단일 저장 장치(예를 들어, 다수의 볼륨을 가진 SAN) 또는 둘 이상의 저장 장치로 구현될 수 있다. 소스 저장 장치(435)가 원본 데이터의 사본을 유지하는 것을 지원하지 않는 경우, 하나 이상의 구성 요소(415-425)는 토큰의 수명 동안에 원본 데이터의 사본을 유지하기 위해 동작할 수 있다.Source storage 435 represents a storage device from which requestor 210 requests a token. Destination storage 440 represents a storage device that requests the requester to record data using a token. In an implementation, source storage 435 and destination storage 440 may be implemented as a single storage device (eg, a SAN with multiple volumes) or two or more storage devices. If source storage 435 does not support maintaining a copy of the original data, one or more components 415-425 may operate to maintain a copy of the original data during the lifetime of the token.

소스 저장 장치(435) 및 목적지 저장 장치(440)가 두 개의 별도의 저장 장치로 구현되면, 추가적 구성 요소(예를 들어, 저장 서버 또는 다른 구성 요소)는 장치(405)를 포함하지 않고 데이터를 소스 저장 장치(435)에서 목적지 저장 장치(440)로 전송할 수 있다. 그러나, 일 실시예에서, 소스 저장 장치(435) 및 목적지 저장 장치(440)가 두 개의 별도의 저장 장치로 구현되면, 하나 이상의 데이터 액세스 구성 요소(310)는 데이터를 소스 저장 장치(435)에서 목적지 저장 장치(440)로 복사하는 역할을 할 수 있다. 요청자(210)는 기본 복사를 수행하는 방법을 인식하거나 인식하지 못하고, 알거나 알지 못할 수 있다.If the source storage device 435 and the destination storage device 440 are implemented as two separate storage devices, additional components (eg, storage server or other component) do not include the device 405 and store data. The source storage device 435 may transfer the data from the source storage device 435 to the destination storage device 440. However, in one embodiment, if the source storage device 435 and the destination storage device 440 are implemented as two separate storage devices, the one or more data access components 310 store data in the source storage device 435. It may serve to copy to the destination storage device 440. The requestor 210 may or may not recognize, or may not know, how to perform the basic copy.

요청자(210)와 소스 저장 장치(435) 및/또는 목적지 저장 장치(440) 사이에는 다수의 경로가 있을 수 있다. 일 실시예에서, 본 명세서에 설명된 토큰 방법은 (예를 들어, 토큰 관리자를 통해 이용 가능한) 데이터를 나타내는 정보가 이용할 수 있는 경우에 제공되는 경로와 무관하다. 다시 말하면, 요청자(210)가 가상화 계층(430)을 통과하는 경로, 가상화 계층(430)을 통과하지 못하는 네트워크 경로, SMB 경로, 또는 소스 또는 목적지 저장 장치에 대한 어떤 다른 경로를 갖는 경우, 요청자(210)는 오프로드 기록을 목적지 저장 장치(440)에 행하기 위해 이러한 경로 중 하나 이상을 이용할 수 있다. 다시 말하면, 소스 저장 장치에 대한 경로 및 목적지 저장 장치에 대한 경로는 동일하거나 다를 수 있다.There may be multiple paths between requestor 210 and source storage 435 and / or destination storage 440. In one embodiment, the token method described herein is independent of the path provided where information indicative of data (eg, available through the token manager) is available. In other words, if the requestor 210 has a path through the virtualization layer 430, a network path that does not pass through the virtualization layer 430, an SMB path, or some other path to the source or destination storage device, the requestor ( 210 may use one or more of these paths to perform offload writing to destination storage 440. In other words, the path to the source storage device and the path to the destination storage device may be the same or different.

오프로드 기록에서, 토큰은 기록할 데이터의 하나 이상의 오프셋 및 길이와 함께 목적지 저장 장치(440)로 전달된다. (반드시 데이터 액세스 구성 요소(310) 중 하나인 것은 아닌) 데이터 액세스 구성 요소는 토큰을 수신하고, 토큰 관리자로부터 위치 정보를 획득하기 위해 토큰을 이용하며, 데이터를 소스 저장 장치(435)에서 목적지 저장 장치(440)에 논리적으로 기록하는 것을 시작할 수 있다.In offloaded recording, the token is passed to the destination storage device 440 along with one or more offsets and lengths of the data to write. The data access component (not necessarily one of the data access component 310) receives the token, uses the token to obtain location information from the token manager, and stores the data in the source storage device 435. Logically recording to device 440 may begin.

하나 이상의 구성 요소(415-425) 또는 (도시되지 않은) 다른 구성 요소는 토큰 관리자를 구현할 수 있다.One or more components 415-425 or other components (not shown) may implement a token manager.

다음은 본 명세서에 설명된 발명 대상의 양태와 함께 이용될 수 있는 일부 데이터 구조의 일부 예시적 정의이다.The following are some example definitions of some data structures that may be used with aspects of the subject matter described herein.

#define FSCTL_OFFLOAD_READ #define FSCTL _ OFFLOAD _ READ

CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 153, METHOD_BUFFERED, CTL_CODE (FILE_DEVICE_FILE_SYSTEM, 153, METHOD _ BUFFERED,

FILE_READ_ACCESS)//153은 오프로드 판독을 나타내는데 이용된다FILE _ READ _ ACCESS) // 153 is used to indicate an offload read.

typedef struct_FSCTL_OFFLOAD_READ_INPUT { typedef struct _ FSCTL _ OFFLOAD _ READ _ INPUT {

ULONG Size;    ULONG Size;

ULONG Flags;    ULONG Flags;

ULONG TokenTimeToLive; // (예를 들어, 밀리초)    ULONG TokenTimeToLive; // (for example, milliseconds)

ULONG Reserved;    ULONG Reserved;

ULONGLONG FileOffset;    ULONGLONG FileOffset;

ULONGLONG CopyLength;    ULONGLONG CopyLength;

} FSCTL_OFFLOAD_READ_INPUT, *PFSCTL_OFFLOAD_READ_INPUT;} FSCTL _ OFFLOAD _ READ _ INPUT, * PFSCTL_OFFLOAD_READ _ INPUT;

typedef struct_FSCTL_OFFLOAD_READ_OUTPUT { typedef struct _ FSCTL _ OFFLOAD _ READ _ OUTPUT {

ULONG Size;    ULONG Size;

ULONG Flags;    ULONG Flags;

ULONGLONG TransferLength;    ULONGLONG TransferLength;

UCHAR Token[512]; // 512보다 크거나 작을 수 있다   UCHAR Token [512]; // can be greater than or less than 512

} FSCTL_OFFLOAD_READ_OUTPUT, } FSCTL _ OFFLOAD _ READ _ OUTPUT,

*PFSCTL_OFFLOAD_READ_OUTPUT; * PFSCTL_OFFLOAD_READ_OUTPUT;

#define FSCTL_OFFLOAD_WRITE #define FSCTL _ OFFLOAD _ WRITE

CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 154, METHOD_BUFFERED, CTL_CODE (FILE_DEVICE_FILE_SYSTEM, 154, METHOD _ BUFFERED,

FILE_WRITE_ACCESS) // 154는 오프로드 기록을 나타내는데 이용된다FILE _ WRITE _ ACCESS) // 154 is used to indicate offload records

typedef struct_FSCTL_OFFLOAD_WRITE_INPUT { typedef struct _ FSCTL _ OFFLOAD _ WRITE _ INPUT {

ULONG Size;    ULONG Size;

ULONG Flags;    ULONG Flags;

ULONGLONG FileOffset;    ULONGLONG FileOffset;

ULONGLONG CopyLength;    ULONGLONG CopyLength;

ULONGLONG TransferOffset;    ULONGLONG TransferOffset;

UCHAR Token[512];    UCHAR Token [512];

} FSCTL_OFFLOAD_WRITE_INPUT, *PFSCTL_OFFLOAD_WPJTE_INPUT; } FSCTL _ OFFLOAD _ WRITE _ INPUT, * PFSCTL_OFFLOAD_WPJTE _ INPUT;

typedef struct_FSCTL_OFFLOAD_WRITE_OUTPUT { typedef struct _ FSCTL _ OFFLOAD _ WRITE _ OUTPUT {

ULONG Size;    ULONG Size;

ULONG Flags;    ULONG Flags;

ULONGLONG Length Written;    ULONGLONG Length Written;

} FSCTL_OFFLOAD_WRITE_OUTPUT, } FSCTL _ OFFLOAD _ WRITE _ OUTPUT,

*PFSCTL_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) // 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)// 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 DeviceDsmActionFlag _ NonDestructive 0x80000000

#define IsDsmActionNonDestructive(_Action)((BOOLEAN)((_Action & #define IsDsmActionNonDestructive ( _ Action) ((BOOLEAN) ((_ Action &

DeviceDsmActionFlag_NonDestructive) != 0)) DeviceDsmActionFlag _ NonDestructive)! = 0))

typedef ULONG DEVICE_DATA_MANAGEMENT_SET_ACTION; typedef ULONG DEVICE _ DATA _ MANAGEMENT _ SET _ ACTION;

#define DeviceDsmAction_OffloadRead (3 |    #define DeviceDsmAction_OffloadRead (3 |

DeviceDsmActionFlag_NonDestructive) DeviceDsmActionFlag _ NonDestructive)

#define DeviceDsmAction_OffloadWrite 4 #define DeviceDsmAction _ OffloadWrite 4

// //

// 모든 동작에 걸쳐 글로벌한 플래그(Flags that are global across all actions)// Flags that are global across all actions

// //

typedef struct_DEVICE DATA SET RANGE { typedef struct _ DEVICE DATA SET RANGE {

LONGLONG StartingOffset; // 예를 들어, 바이트    LONGLONG Starting Offset; // for example, bytes

ULONGLONG LengthlnBytes; // 예를 들어, 다수의 섹터 크기    ULONGLONG LengthlnBytes; // for example, multiple sector sizes

} DEVICE_DATA_SET_RANGE, *PDEVICE_DATA_SET_RANGE; } DEVICE _ DATA _ SET _ RANGE, * PDEVICE_DATA_SET_RANGE;

본 명세서에 설명된 발명 대상의 양태를 구현하기 위한 예시적인 IOCTL 데이터 구조는 다음과 같이 정의될 수 있다.Exemplary IOCTL data structures for implementing aspects of the subject matter described herein may be defined as follows.

// //

// IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES에 대한 입력 구조// input structure for IOCTL _ STORAGE _ MANAGE _ DATA _ SET _ ATTRIBUTES

//1. ParameterBlockOffset 또는 ParameterBlockLength의 값은 0이며, 이는 Parameter Block이 존재하지 않음을 나타낸다.//One. ParameterBlockOffset or ParameterBlockLength has a value of 0, which indicates that a parameter block does not exist.

////

//2. DataSetRangesOffset 또는 DataSetRangesLength의 값은 0이며, 이는 DataSetRanges Block이 존재하지 않음을 나타낸다. //2. The value of DataSetRangesOffset or DataSetRangesLength is 0, indicating that the DataSetRanges Block does not exist.

// DataSetRanges Block이 존재하면, 그것은 다음을 포함한다// If DataSetRanges Block exists, it contains

// 연속적인 DEVICE_DATA_SET_RANGE 구조. // Continuous DEVICE _ DATA _ SET _ RANGE structure.

//3. 버퍼의 총 크기는 적어도 다음과 같다.// 3. The total size of the buffer is at least

// sizeof // sizeof

(DEVICE_MANAGE_DATA_SET_ATTRIBUTES)+ParameterBlockLength+(DEVICE_MANAGE_DATA_SET_ATTRIBUTES) + ParameterBlockLength +

DataSetRangesLength      DataSetRangesLength

typedef struct_DEVICE_MANAGE_DATA_SET_ATTRIBUTES { typedef struct _ DEVICE _ MANAGE _ DATA _ SET _ ATTRIBUTES {

ULONG Size; // Size of structure    ULONG Size; // Size of structure

//                        //

DEVICE_MANAGE_DATA_SET_ATTRIBUTESDEVICE _ MANAGE _ DATA _ SET _ ATTRIBUTES

DEVICE_DATA_MANAGEMENT_SET_ACTION Action; DEVICE _ DATA _ MANAGEMENT _ SET _ ACTION Action;

ULONG Flags; // 모든 동작에 걸친 글로벌 플래그   ULONG Flags; // global flags across all actions

ULONG ParameterBlockOffset; // 상응하는 구조 정렬로 정렬된다.   ULONG ParameterBlockOffset; // sorted by corresponding structure order

ULONG ParameterBlockLength; // 0은 Parameter Block이 존재하지 않음을 의미한다.   ULONG ParameterBlockLength; // 0 means no parameter block exists.

ULONG DataSetRangesOffset; // DEVICE_DATA_SET_RANGE 구조 정렬로 정렬된다.ULONG DataSetRangesOffset; // Sort by DEVICE _ DATA _ SET _ RANGE structure alignment.

ULONG DataSetRangesLength; // 0은 DataSetRanges Block이 존재하지 않음을 의미한다.    ULONG DataSetRangesLength; // 0 means that the DataSetRanges Block does not exist.

} DEVICE_MANAGE_DATA_SET_ATTRIBUTES, } DEVICE _ MANAGE _ DATA _ SET _ ATTRIBUTES,

*PDEVICE_MANAGE_DATA_SET_ATTRIBUTES; * PDEVICE_MANAGE_DATA_SET_ATTRIBUTES;

// //

// 복사 오프로드 동작에 대한 매개 변수 구조 정의// Define Parameter Structure For Copy Offload Behavior

// //

// 오프로드 복사 인터페이스가 2 단계: 오프로드 판독 및 오프로드 기록으로 동작한다.// The offload copy interface operates with phase 2: offload read and offload write.

// //

// OffloadRead 동작에 대한 입력은 DSM 구조의 익스텐트(extent)의 세트이다// Input to OffloadRead operation is a set of extents in DSM structure

// OffloadRead의 출력 매개 변수는 타겟에 의해 취해지는 익스텐트의 "시점(point in time)" 스냅샷을 식별하는 타겟에 의해 반환된 토큰이다.// The output parameter of OffloadRead is a token returned by the target that identifies a "point in time" snapshot of the extent taken by the target.

////

// 토큰의 포맷은 요청자에게 불명료하고, 타겟에 명확하다.// The format of the token is unclear to the requestor and is clear to the target.

// //

// 주석: 512의 토큰 길이는 예시적이다. OffloadCopy에 대한 SCSI 인터페이스는 크기를 절충 가능하게 할 수 있다.// Note: The token length of 512 is exemplary. The SCSI interface to OffloadCopy can be negotiable in size.

// 새로운 동작은 가변 크기의 토큰에 대해 생성될 수 있다.// New behavior can be created for tokens of variable size.

#define DSM_OFFLOAD_MAX_TOKEN_LENGTH 512 #define DSM _ OFFLOAD _ MAX _ TOKEN _ LENGTH 512

// Keep as ULONG multiple          // Keep as ULONG multiple

typedef struct DEVICE DSM OFFLOAD READ PARAMETERS { typedef struct DEVICE DSM OFFLOAD READ PARAMETERS {

ULONG Flags;    ULONG Flags;

ULONG TimeToLive; // 토큰 TTL(예를 들어, 밀리초)는 요청자에 의해 요청될 수 있다.   ULONG TimeToLive; // token TTL (eg, milliseconds) may be requested by the requestor.

} DEVICE_DSM_OFFLOAD_READ_PARAMETERS, } DEVICE _ DSM _ OFFLOAD _ READ _ PARAMETERS,

*PDEVICE_DSM_OFFLOAD_READ_PARAMETERS; * PDEVICE_DSM_OFFLOAD_READ_PARAMETERS;

typedef struct_DEVICE_DSM_OFFLOAD_WRITE_PARAMETERS { typedef struct _ DEVICE _ DSM _ OFFLOAD _ WRITE _ PARAMETERS {

ULONG Flags;    ULONG Flags;

ULONG Reserved; // 미래 사용을 위해 예약   ULONG Reserved; // reserved for future use

ULONGLONG TokenOffset; // 토큰으로 나타내는 데이터로부터 복사하는 시작 오프셋  ULONGLONG TokenOffset; // start offset from the data represented by the token

UCHAR Token[DSM_OFFLOAD_MAX_TOKEN_LENGTH] ; // 토큰   UCHAR Token [DSM_OFFLOAD_MAX_TOKEN_LENGTH]; // token

} DEVICE_DSM_OFFLOAD_WRITE_PARAMETERS, } DEVICE _ DSM _ OFFLOAD _ WRITE _ PARAMETERS,

*PDEVICE_DSM_OFFLOAD_WRITE_PARAMETERS; * PDEVICE_DSM_OFFLOAD_WRITE_PARAMETERS;

typedef struct_STORAGE_OFFLOAD_READ_OUTPUT { typedef struct _ STORAGE _ OFFLOAD _ READ _ OUTPUT {

ULONG OffloadReadFlags; // Outbound flags    ULONG OffloadReadFlags; // Outbound flags

ULONG Reserved;    ULONG Reserved;

ULONGLONG LengthProtected; // 최저 StartingOffset으로부터 토큰으로 나타낸 데이터의 길이  ULONGLONG LengthProtected; // Length of data represented by token from lowest StartingOffset

ULONG TokenLength; // 바이트의 토큰의 길이.    ULONG TokenLength; // Length of token in bytes.

UCHAR Token[DSM_OFFLOAD_MAX_TOKEN_LENGTH] ;    UCHAR Token [DSM_OFFLOAD_MAX_TOKEN_LENGTH];

// 연속하여 생성된 토큰.          // consecutively generated tokens.

} STORAGE_OFFLOAD_READ_OUTPUT, } STORAGE _ OFFLOAD _ READ _ OUTPUT,

*PSTORAGE_OFFLOAD_READ_OUTPUT; * PSTORAGE_OFFLOAD_READ_OUTPUT;

// //

// STORAGE OFFLOAD READ OUTPUT 플래그 정의// Define STORAGE OFFLOAD READ OUTPUT Flag

// //

#define STORAGE_OFFLOAD_READ_RANGE_TRUNCATED (0x0001) #define STORAGE _ OFFLOAD _ READ _ RANGE _ TRUNCATED (0x0001)

typedef struct_STORAGE_OFFLOAD_WRITE_OUTPUT { typedef struct _ STORAGE _ OFFLOAD _ WRITE _ OUTPUT {

ULONG OffloadWriteFlags; // 출력 플래그    ULONG OffloadWriteFlags; // output flag

ULONG Reserved; // 미래 사용을 위해 예약    ULONG Reserved; // reserved for future use

ULONGLONG LengthCopied; // 출력 매개 변수 : 토큰으로 나타낸 데이터의 시작으로부터 복사되는 콘텐츠의 길이   ULONGLONG LengthCopied; // output parameter: the length of the content copied from the beginning of the data represented by the token

} STORAGE_OFFLOAD_WRITE_OUTPUT, } STORAGE _ OFFLOAD _ WRITE _ OUTPUT,

*PSTORAGE_OFFLOAD_WRITE_OUTPUT; * PSTORAGE_OFFLOAD_WRITE_OUTPUT;

// //

// STORAGE OFFLOAD WRITE OUTPUT flag definitions - used in // STORAGE OFFLOAD WRITE OUTPUT flag definitions-used in

OffloadWriteFlags mask OffloadWriteFlags mask

// //

// 기록이 수행되지만, 잘려진 범위에서 수행된다// recording is performed, but in truncated range

#define STORAGE_OFFLOAD_WRITE_RANGE_TRUNCATED (0x0001) #define STORAGE_OFFLOAD _ WRITE _ RANGE _ TRUNCATED (0x0001)

// //

// 양방향 동작을 위한 DSM 출력 구조. // DSM output structure for bidirectional operation.

// //

// 출력 매개 변수 블록은 OutputBlockOffset 필드에 포함된 오프셋에서 생성된 버퍼에 위치된다.// The output parameter block is placed in the buffer created at the offset contained in the OutputBlockOffset field.

// 오프셋은 버퍼의 시초에서 계산되고,// offset is calculated from the beginning of the buffer,

// 피호출자(callee)는 동작 특정 구조 템플릿의 요구 사항에 따라 그것을 정렬한다.// The callee sorts it according to the requirements of the action-specific structure template.

// 예: OffloadRead 동작이 포인터를 출력 구조에 획득하도록 하기 위해, 호출자는 다음을 한다// example: In order for the OffloadRead operation to obtain a pointer to the output structure, the caller does the following:

// //

// PSTORAGE_OFFLOAD_READ_OUTPUT pReadOut = // PSTORAGE _ OFFLOAD _ READ _ OUTPUT pReadOut =

// (PSTORAGE_OFFLOAD_READ_OUTPUT)((UCHAR*)pOutputBuffer +// (PSTORAGE _ OFFLOAD _ READ _ OUTPUT) ((UCHAR *) pOutputBuffer +

// //

((PDEVICE_MANAGE_DATA_SET_ATTRIBUTES_OUTPUT)pOutputBuffer) ((PDEVICE_MANAGE_DATA_SET_ATTRIBUTES_OUTPUT) pOutputBuffer)

// ->OutputBlockOffset) //-> OutputBlockOffset)

// //

typedef struct_DEVICE_MANAGE_DATA_SET_ATTRIBUTES_OUTPUT { typedef struct _ DEVICE _ MANAGE _ DATA _ SET _ ATTRIBUTES _ OUTPUT {

ULONG Size; // 구조의 크기   ULONG Size; // size of the structure

DEVICE_DATA_MANAGEMENT_SET_ACTION Action; DEVICE _ DATA _ MANAGEMENT _ SET _ ACTION Action;

// 동작이 요청되고 수행된다          // action is requested and performed

ULONG Flags; // DSM 동작에 대한 공통 출력 플래그   ULONG Flags; // common output flags for DSM behavior

ULONG OperationStatus; // 오프로드 동작에 이용된 동작 상태  ULONG OperationStatus; // operation state used for offload operation

// (PENDING처럼 다양한 의미의 플레이스홀더(placeholder))                               // (placeholder in various meanings like PENDING)

ULONG ExtendedError; // 확장 오류 정보    ULONG ExtendedError; // extended error information

ULONG TargetDetailedError; // 타겟 특정 오류는 오프로드 동작에 이용될 수 있다.   ULONG TargetDetailedError; // Target specific error can be used for offload operation.

// (SCSI sense code)                             // (SCSI sense code)

ULONG ReservedStatus; // 예약 필드   ULONG ReservedStatus; // reserved field

ULONG OutputBlockOffset; // 특정 동작은 상응하는 구조 정렬로 정렬된다.   ULONG OutputBlockOffset; // certain actions are sorted by corresponding structure alignment

ULONG OutputBlockLength; // 0은 Output Parameter Block이 존재하지 않음을 의미한다.    ULONG OutputBlockLength; // 0 means that there is no output parameter block.

} DEVICE_MANAGE_DATA_SET_ATTRIBUTES_OUTPUT, } DEVICE _ MANAGE _ DATA _ SET _ ATTRIBUTES _ OUTPUT,

*PDEVICE_MANAGE_DATA_SET_ATTRIBUTES_OUTPUT; * PDEVICE _ MANAGE _ DATA _ SET _ ATTRIBUTES _ OUTPUT;

도 6-8은 일반적으로 본 명세서에 설명된 발명 대상의 양태에 따라 발생할 수 있는 예시적인 동작을 나타내는 흐름도이다. 설명의 단순함을 위해, 도 6-8에 관련하여 설명된 방법은 일련의 행위(act)로서 묘사되고 설명된다. 본 명세서에 설명된 발명 대상의 양태는 예시된 행위 및/또는 행위의 순서에 의해 제한되지 않는다는 것이 이해되어야 한다. 일 실시예에서, 행위는 아래에 설명된 순서로 발생한다. 그러나, 다른 실시예에서, 행위는 다른 순서에서 병렬로 발생하고, 본 명세서에 제시되며 설명되지 않은 다른 행위와 함께 발생할 수 있다. 더욱이, 본 명세서에 설명된 발명 대상의 양태에 따른 방법을 구현하기 위해 예시된 모든 행위가 필요하지는 않을 수 있다. 게다가, 당업자는 이러한 방법이 대안적으로 상태 다이어그램을 통해 일련의 상관 상태 또는 이벤트로 나타낼 수 있다는 것을 이해하고 인식할 것이다.6-8 are flow diagrams illustrating exemplary operations that may generally occur in accordance with aspects of the subject matter described herein. For simplicity of explanation, the method described in connection with FIGS. 6-8 is depicted and described as a series of acts. It is to be understood that aspects of the subject matter described herein are not limited by the illustrated acts and / or order of acts. In one embodiment, the actions occur in the order described below. However, in other embodiments, the actions may occur in parallel in different orders and may occur with other actions not presented and described herein. Moreover, not all illustrated acts may be required to implement a methodology in accordance with aspects of the subject matter described herein. In addition, those skilled in the art will understand and appreciate that such methods may alternatively be represented by a series of correlation states or events via state diagrams.

도 6을 참조하면, 블록(605)에서, 동작이 시작된다. 블록(610)에서, 저장 장치의 데이터의 표현을 위한 요청이 수신된다. 요청은 저장 장치의 부분을 식별하는 설명(예를 들어, 위치 및 길이)과 함께 전달된다. 여기서, 단어 "부분(portion)"은 모든 저장 장치 이하의 저장 장치일 수 있다. 예를 들면, 도 2를 참조하면, 요청자(210)는 저장 장치(220)에서 데이터에 대한 토큰을 요청할 수 있다. 요청할 시에, 요청자(210)는 길이와 함께 데이터의 위치(예를 들어, 파일 이름, 개방 파일에 대한 핸들, 파일로의 물리적 오프셋, 볼륨 또는 로우 디스크(raw disk) 등)를 전송할 수 있다.Referring to FIG. 6, at block 605, operation begins. At block 610, a request for representation of data on a storage device is received. The request is conveyed with a description (eg, location and length) that identifies a portion of the storage device. Here, the word "portion" may be a storage device of all storage devices or less. For example, referring to FIG. 2, the requestor 210 may request a token for data from the storage device 220. Upon request, requestor 210 may send the location of the data (eg, file name, handle to open file, physical offset to file, volume or raw disk, etc.) along with the length.

블록(615)에서, 요청에 응답하여, 토큰이 데이터에 바인딩될 때에 논리적으로 저장 장치의 부분에 저장된 데이터를 나타내는 토큰이 수신된다. 상술한 바와 같이, 토큰은 요청된 것보다 적은 데이터를 나타낼 수 있다. 예를 들면, 도 2를 참조하면, 데이터 액세스 구성 요소(215) 중 하나 이상이 요청된 데이터 또는 이의 서브세트를 나타내는 요청자(210)로 토큰을 반환할 수 있다. 토큰은 토큰으로 나타내는 데이터의 크기와 무관한 크기(예를 들어, 소정 수의 비트 또는 바이트)일 수 있다. 이러한 토큰은 데이터 구조의 각 토큰이 데이터의 다른 부분과 관련되거나 둘 이상의 토큰이 데이터의 동일한 부분과 관련되는 데이터 구조의 다른 토큰과 함께 수신될 수 있다.At block 615, in response to the request, a token is received that logically represents data stored in a portion of the storage device when the token is bound to data. As mentioned above, the token may represent less data than requested. For example, referring to FIG. 2, one or more of the data access components 215 may return a token to the requestor 210 representing the requested data or a subset thereof. The token may be a size (eg, a predetermined number of bits or bytes) independent of the size of the data represented by the token. Such tokens may be received with other tokens in the data structure where each token of the data structure is associated with a different part of the data or more than one token is associated with the same part of the data.

토큰을 수신하는 것은 토큰이 요청된 데이터의 서브세트인 데이터를 나타내는 표시(indication)를 동반할 수 있다. 이러한 표시는 예를 들어 토큰으로 나타내는 데이터의 길이의 형식을 취할 수 있다.Receiving a token may be accompanied by an indication that the data represents data in which the token is a subset of the requested data. Such an indication may take the form of the length of the data, for example represented by a token.

블록(620)에서, 오프로드 기록을 수행하기 위해 토큰이 제공된다. 토큰은 오프로드 제공자를 통해 데이터의 전부 또는 부분을 논리적으로 기록하는지를 나타내는 정보와 함께 제공될 수 있다. 이러한 정보는 예를 들어 목적지 관련 오프셋, 토큰 관련 오프셋 및 길이를 포함할 수 있다. 0의 토큰 관련 오프셋, 및 토큰으로 나타내는 데이터의 전체 길이와 동일한 길이의 토큰 관련 오프셋은 모든 데이터를 복사하도록 나타낼 수 있지만, 데이터의 전체 길이보다 작은 길이를 가진 어떤 오프셋은 전체 데이터보다 적은 데이터를 복사하도록 나타낼 수 있다.At block 620, a token is provided to perform offload writing. The token may be provided with information indicating whether to logically record all or part of the data via the offload provider. Such information may include, for example, a destination related offset, a token related offset, and a length. A token-related offset of zero, and a token-related offset of length equal to the full length of the data represented by the token, may indicate that all data is to be copied, but any offset with a length less than the full length of the data copies less than the full data. Can be shown.

예를 들어, 도 2를 참조하면, 요청자는 나타낸 데이터의 위치를 획득하기 위해 토큰을 토큰 관리자(225)로 전달할 수 있는 데이터 액세스 구성 요소(215)로 토큰을 전달할 수 있다. 토큰 관리자(225)가 (예를 들어, SAN에서) 저장 장치(220)로의 액세스를 제공하는 저장 시스템의 부분인 경우, 토큰은 데이터를 식별하고, 요청에 의해 나타낸 데이터를 논리적으로 기록하기 위해 토큰을 이용할 수 있는 SAN의 데이터 액세스 구성 요소에 제공될 수 있다.For example, referring to FIG. 2, the requestor may pass the token to data access component 215, which may pass the token to token manager 225 to obtain the location of the indicated data. If token manager 225 is part of a storage system that provides access to storage device 220 (eg, in a SAN), the token identifies the data and tokens to logically record the data indicated by the request. May be provided to a data access component of a SAN that may utilize.

상술한 바와 같이, 오프로드 제공자는 요청을 전송하는 장치의 외부에 있을 수 있다. 게다가, 오프로드 제공자가 요청을 수신하면, 오프로드 제공자는 요청을 전송하는 장치의 어떤 구성 요소와의 추가적인 상호 작용과 무관하게 데이터를 논리적으로 기록할 수 있다. 예를 들면, 도 3을 참조하면, 기록할 토큰 및 요청이 데이터 액세스 구성 요소(315)에 도달하면, 장치(335)의 구성 요소는 장치(330)로부터 어떤 추가적인 도움없이 요청되는대로 데이터를 논리적으로 기록할 수 있다.As mentioned above, the offload provider may be external to the device sending the request. In addition, when the offload provider receives the request, the offload provider can logically record the data regardless of any further interaction with any component of the device sending the request. For example, referring to FIG. 3, when a token to be written and a request arrive at the data access component 315, the component of the device 335 logically logs the data as requested without any further assistance from the device 330. Can record

블록(625)에서, 만일 있다면, 다른 동작이 수행될 수 있다. 블록(630)에서, 토큰이 생성된 후에는 언제라도, 요청자(또는 다른 데이터 액세스 구성 요소)는 토큰을 무효화할 것을 명시적으로 요청할 수 있다. 일 실시예에서, 이러한 요청이 복사 동작의 중간에 전송되면, 복사는 완료하도록 허용될 수 있다. 다른 구현에서는, 복사가 중단될 수 있고, 오류가 발생될 수 있으며, 다른 동작이 발생할 수 있다.At block 625, other operations may be performed, if any. At block 630, at any time after the token is generated, the requestor (or other data access component) may explicitly request to invalidate the token. In one embodiment, if such a request is sent in the middle of a copy operation, the copy may be allowed to complete. In other implementations, copying may be aborted, errors may occur, and other operations may occur.

도 7을 참조하면, 블록(705)에서, 동작이 시작된다. 블록(710)에서, 저장 장치의 데이터의 표현을 위한 요청이 수신된다. 요청은 데이터가 위치되는 저장 장치의 부분을 식별하는 설명과 함께 전달된다. 요청은 저장 영역 네트워크의 구성 요소 또는 다른 데이터 액세스 구성 요소에서 수신될 수 있다. 예를 들면, 도 3을 참조하면, 하나 이상의 데이터 액세스 구성 요소(315)는 저장 장치(220)에서 데이터를 식별하는 오프셋, 길이, 논리 단위 번호, 파일 핸들 등과 함께 토큰에 대한 요청을 수신할 수 있다.Referring to FIG. 7, at block 705, operation begins. At block 710, a request for representation of data in storage is received. The request is conveyed with a description identifying the portion of the storage device where the data is located. The request may be received at a component of the storage area network or at another data access component. For example, referring to FIG. 3, one or more data access components 315 may receive a request for a token along with an offset, length, logical unit number, file handle, etc. that identifies data in storage 220. have.

블록(715)에서는 토큰이 생성된다. 생성된 토큰은 (예를 들어, 도 3의 저장 장치(220) 내에) 논리적으로 저장된 데이터를 나타낼 수 있다. 상술한 바와 같이,이러한 데이터는 구현에 따라 토큰의 유효 기간 동안 변경되지 않거나 변경될 수 있다. 토큰은 이전에 나타낸 바와 같이 요청된 데이터의 서브세트를 나타낼 수 있다. 예를 들면, 도 3을 참조하면, 토큰 관리자(320)는 저장 장치(220)에서 요청자(210)에 의해 요청된 데이터를 나타내도록 토큰을 생성할 수 있다.At block 715 a token is generated. The generated token may represent data that is logically stored (eg, in storage device 220 of FIG. 3). As mentioned above, such data may or may not change during the validity period of the token, depending on the implementation. The token may represent a subset of the requested data as indicated previously. For example, referring to FIG. 3, the token manager 320 may generate a token to represent data requested by the requestor 210 in the storage device 220.

블록(720)에서, 토큰은 데이터 구조를 통해 나타낸 데이터와 관련된다. 예를 들면, 도 3을 참조하면, 토큰 관리자(320)는 나타낸 데이터와 생성된 토큰을 관련시키는 어소시에이션(association)을 토큰 저장 장치(325)에 저장할 수 있다.At block 720, the token is associated with the data represented through the data structure. For example, referring to FIG. 3, the token manager 320 may store an association in the token storage device 325 that associates the indicated data with the generated token.

블록(725)에서는 토큰이 요청자에 제공된다. 예를 들면, 도 3을 참조하면, 토큰 관리자 또는 하나의 데이터 액세스 구성 요소(315)는 요청자(210)에 제공하기 위해 토큰을 데이터 액세스 구성 요소(310)에 제공할 수 있다. 토큰은 토큰으로 나타내는 데이터의 크기를 나타내는 길이로 반환될 수 있다.In block 725 a token is provided to the requestor. For example, referring to FIG. 3, token manager or one data access component 315 may provide a token to data access component 310 for providing to requestor 210. The token may be returned in length indicating the size of the data represented by the token.

블록(730)에서, 만일 있다면, 다른 동작이 수행될 수 있다. 블록(735)에서, 토큰이 생성된 후에는 언제라도, 토큰 관리자가 상술한 바와 같이 여러 요인에 따라 토큰을 무효화할 수 있다는 것을 주목한다. 일 구현에서, 토큰이 데이터에 영향을 미치는 기록 동작 중에 무효화되면, 기록은 완료하도록 허용될 수 있다. 다른 구현에서는, 기록이 중단될 수 있고, 오류가 발생될 수 있거나, 다른 동작이 발생할 수 있다.At block 730, other operations may be performed, if any. At block 735, note that at any time after the token has been generated, the token manager may invalidate the token according to various factors as described above. In one implementation, if the token is invalidated during a write operation that affects the data, the write may be allowed to complete. In other implementations, recording may be interrupted, errors may occur, or other operations may occur.

도 8은 일반적으로 오프로드 기록이 본 명세서에 설명된 발명 대상의 다양한 양태에 따라 오프로드 제공자에서 수신될 때 발생할 수 있는 예시적인 동작을 나타내는 블록도이다. 블록(805)에서, 동작이 시작된다.8 is a block diagram generally illustrating exemplary operations that may occur when offload recording is received at an offload provider in accordance with various aspects of the subject matter described herein. At block 805, operation begins.

블록(810)에서, 토큰이 수신된다. 토큰은 토큰으로 나타낸 모든 또는 일부 데이터를 논리적으로 기록할지 여부를 나타내는 데이터와 함께 수신될 수 있다. 예를 들어, 도 3을 참조하면, 하나의 데이터 액세스 구성 요소(315)는 도 3의 하나의 데이터 액세스 구성 요소(310)에서 토큰을 수신할 수 있다.At block 810, a token is received. The token may be received with data indicating whether to logically record all or some of the data represented by the token. For example, referring to FIG. 3, one data access component 315 may receive a token at one data access component 310 of FIG. 3.

블록(815)에서, 토큰이 유효한지에 대해 판단이 행해진다. 예를 들어, 도 3을 참조하면, 토큰 관리자(320)는 토큰 저장 장치(325)에 문의하여 수신된 토큰이 유효한지를 판단할 수 있다. 토큰이 유효하면, 동작은 블록(820)에서 계속하고, 그렇지 않으면, 요청이 실패될 수 있고, 동작은 블록(817)에서 계속한다.At block 815, a determination is made as to whether the token is valid. For example, referring to FIG. 3, the token manager 320 may query the token storage device 325 to determine whether the received token is valid. If the token is valid, operation continues at block 820; otherwise, the request may fail, and operation continues at block 817.

블록(817)에서는 요청이 실패된다. 예를 들어, 도 3을 참조하면, 데이터 액세스 구성 요소(315)는 복사가 실패되었다는 것을 나타낼 수 있다.In block 817 the request fails. For example, referring to FIG. 3, data access component 315 may indicate that the copy has failed.

블록(820)에서, 오프로드 사본의 요청된 데이터가 식별된다. 예를 들어, 도 3을 참조하면, 토큰 관리자(320)는 토큰과 관련된 데이터의 위치 또는 다른 식별자를 획득하기 위해 토큰 저장 장치(325)에 문의할 수 있다. 토큰은 토큰으로 나타내는 데이터를 호스팅하는 장치를 나타내는 데이터를 포함하거나 데이터와 관련될 수 있다.At block 820, requested data of the offload copy is identified. For example, referring to FIG. 3, token manager 320 may query token storage 325 to obtain a location or other identifier of data associated with the token. The token may include or be associated with data representing a device hosting the data represented by the token.

블록(825)에서, 토큰으로 나타내는 데이터의 논리적 기록이 수행된다. 예를 들어, 도 3을 참조하면, 장치(335)는 토큰으로 나타낸 데이터를 논리적으로 기록할 수 있다.In block 825, a logical recording of the data represented by the token is performed. For example, referring to FIG. 3, the device 335 may logically record the data represented by the token.

블록(830)에서, 만일 있다면, 다른 동작이 수행될 수 있다.At block 830, other operations may be performed, if any.

상술한 상세한 설명에서 알 수 있는 바와 같이, 오프로드 판독 및 기록에 관한 양태가 설명되었다. 본 명세서에 설명된 발명 대상의 양태가 다양한 수정 및 대안적 구성을 허용하지만, 이의 특정 예시 실시예가 도면에 도시되고 상세히 상술되었다. 그러나, 청구된 발명 대상의 양태를 개시된 특정 형태로 제한할 의도는 없지만, 반면에, 그 의도는 본 명세서에 설명된 발명 대상의 여러 양태의 사상 및 범위 내에서 모든 수정, 대안적 구성 및 등가물을 포괄하는 것이라는 점이 이해되어야 한다. As can be seen from the above detailed description, aspects relating to offload reading and writing have been described. While aspects of the subject matter described herein allow for various modifications and alternative configurations, certain illustrative embodiments thereof are shown in the drawings and described in detail above. However, there is no intention to limit aspects of the claimed subject matter to the specific forms disclosed, while the intent is to limit all modifications, alternative configurations, and equivalents within the spirit and scope of the various aspects of the subject matter described herein. It should be understood that it is encompassing.

Claims (15)

컴퓨터에 의해 적어도 부분적으로 구현되는 방법으로서,
저장 장치의 제 1 데이터의 표현에 대한 요청을 전송하는 단계- 상기 요청은 상기 저장 장치의 부분을 식별하는 설명과 함께 전달됨 -,
상기 요청에 응답하여, 상기 저장 장치의 상기 부분에 논리적으로 저장된 제 2 데이터를 나타내는 토큰을 수신하는 단계- 상기 제 2 데이터는 상기 제 1 데이터의 서브세트, 즉 잠재적으로 적절한 서브세트임 -, 및
적어도 제 3 데이터를 찾아내기 위해 상기 토큰을 이용하도록 동작 가능한 오프로드 제공자를 통해 상기 제 3 데이터를 논리적으로 기록하도록 지시하는 정보와 함께 상기 토큰을 제공하는 단계- 상기 제 3 데이터는 제 2 데이터의 서브세트, 즉 잠재적으로 적절한 서브세트임 -를 포함하는
방법.
CLAIMS What is claimed is: 1. A method implemented at least in part by a computer,
Sending a request for a representation of the first data of the storage device, the request carried with a description identifying a portion of the storage device,
In response to said request, receiving a token representing second data logically stored in said portion of said storage device, said second data being a subset of said first data, ie a potentially appropriate subset, and
Providing the token with information instructing to logically record the third data via an offload provider operable to use the token to retrieve at least third data, the third data being a portion of the second data. Subset, that is, a potentially appropriate subset
Way.
제 1 항에 있어서,
상기 저장 장치의 부분의 설명을 포함하는 요청을 전송하는 단계는 오프셋 및 길이를 전송하는 단계- 상기 오프셋은 상기 저장 장치 내의 상기 제 1 데이터의 위치를 나타내며 상기 길이는 상기 제 1 데이터의 크기를 나타냄 -를 포함하는
방법.
The method of claim 1,
Sending a request comprising a description of the portion of the storage device transmitting an offset and a length, wherein the offset indicates the position of the first data in the storage device and the length indicates the size of the first data. Containing
Way.
제 1 항에 있어서,
상기 토큰을 수신하는 단계는 상기 제 2 데이터를 상기 토큰이 상기 제 2 데이터에 바인딩될 때 존재하는 상기 제 2 데이터로 획득하도록 이용 가능한 번호를 수신하는 단계- 상기 번호는 상기 제 2 데이터를 식별하도록 상기 오프로드 제공자에 의해 이용 가능하며 상기 번호는 난수 또는 의사 랜덤 메커니즘에 의해 생성됨 -를 포함하는
방법.
The method of claim 1,
Receiving the token comprises receiving a number available to obtain the second data with the second data present when the token is bound to the second data, the number identifying the second data. Available by the offload provider and wherein the number is generated by a random number or pseudo random mechanism
Way.
제 1 항에 있어서,
상기 토큰을 수신하는 단계는 상기 토큰을 데이터 구조 내의 다른 토큰과 함께 수신하는 단계- 상기 데이터 구조 내의 각 토큰은 상기 제 2 데이터의 다른 부분을 상기 토큰이 상기 다른 부분에 바인딩될 때 존재하는 상기 다른 부분으로 획득하도록 이용 가능함 -를 포함하는
방법.
The method of claim 1,
Receiving the token comprises receiving the token along with another token in a data structure, wherein each token in the data structure has a different portion of the second data present when the token is bound to the other portion. Available to obtain as part
Way.
제 1 항에 있어서,
각각이 또한 상기 제 2 데이터를 나타내는 하나 이상의 다른 토큰을 수신하는 단계, 및 상기 토큰을 제공하는 것과 함께 상기 다른 토큰 중 하나 이상을 제공하는 단계를 더 포함하는
방법.
The method of claim 1,
Receiving one or more other tokens, each also representing the second data, and providing one or more of the other tokens in conjunction with providing the token;
Way.
컴퓨터 실행 가능 명령어를 가진 컴퓨터 저장 매체로서,
상기 컴퓨터 실행 가능 명령어는 실행될 때에
요청자로부터, 저장 장치에 논리적으로 저장된 제 1 데이터의 표현에 대한 요청을 수신하는 동작- 상기 요청은 상기 제 1 데이터가 위치되는 상기 저장 장치의 부분을 식별하는 설명과 함께 전달됨 -,
상기 저장 장치의 상기 부분에 논리적으로 저장된 제 2 데이터를 나타내는 토큰을 생성하는 동작- 상기 제 2 데이터는 제 1 데이터의 서브세트, 즉 잠재적으로 적절한 서브세트임 -,
상기 토큰을 데이터 구조를 통해 상기 제 2 데이터와 관련시키는 동작- 상기 토큰은 상기 제 2 데이터를 상기 토큰이 상기 제 2 데이터에 바인딩될 때 존재하는 상기 제 2 데이터로 획득하도록 이용 가능함 -, 및
상기 토큰을 상기 요청자에 제공하는 동작을 포함하는 동작을 수행하는
컴퓨터 저장 매체.
A computer storage medium with computer executable instructions,
The computer executable instructions, when executed
Receiving a request from a requestor for a representation of first data logically stored on a storage device, the request being conveyed with a description identifying the portion of the storage device where the first data is located;
Generating a token representing second data logically stored in the portion of the storage device, the second data being a subset of the first data, ie a potentially appropriate subset;
Associating the token with the second data via a data structure, the token being available to obtain the second data as the second data present when the token is bound to the second data, and
Performing an operation including providing the token to the requestor
Computer storage media.
제 6 항에 있어서,
상기 컴퓨터 실행 가능 명령어는
상기 제 2 데이터 전부 또는 일부를 기록하는지를 나타내는 제 3 데이터와 함께 상기 토큰을 수신하는 동작,
상기 토큰이 유효한지를 판단하는 동작,
상기 토큰이 유효하지 않을 경우, 상기 요청을 실패시키는 동작을 더 수행하는
컴퓨터 저장 매체.
The method according to claim 6,
The computer executable instructions are
Receiving the token with third data indicating whether to record all or part of the second data,
Determining whether the token is valid,
If the token is invalid, further performing the operation of failing the request.
Computer storage media.
제 6 항에 있어서,
저장 장치에 논리적으로 저장된 제 1 데이터의 표현에 대한 요청을 수신하는 동작은 저장 영역 네트워크 장치의 데이터 액세스 구성 요소에서 상기 요청을 수신하는 동작을 포함하고,
상기 제 2 데이터를 나타내는 토큰을 생성하는 동작은 상기 저장 영역 네트워크 장치의 데이터 액세스 구성 요소에 의해 값을 생성하는 동작을 포함하며,
상기 토큰을 데이터 구조를 통해 상기 제 2 데이터와 관련시키는 동작은 테이블에 엔트리를 배치하는 동작을 포함하되, 상기 엔트리는 상기 토큰, 및 상기 요청이 상기 데이터 액세스 구성 요소에서 수신될 시에나 후, 및 상기 토큰이 상기 요청자로 반환되기 전이나 반환될 때 존재하는 상기 제 2 데이터로서 상기 제 2 데이터의 식별자를 포함하는
컴퓨터 저장 매체.
The method according to claim 6,
Receiving a request for a representation of first data logically stored on a storage device comprises receiving the request at a data access component of a storage area network device,
Generating a token representing the second data comprises generating a value by a data access component of the storage area network device,
Associating the token with the second data via a data structure includes placing an entry in a table, wherein the entry is before or after the token and the request are received at the data access component, and the Including an identifier of the second data as the second data present before or when a token is returned to the requestor
Computer storage media.
제 6 항에 있어서,
상기 컴퓨터 실행 가능 명령어는
상기 제 1 데이터를 변경하기 위한 요청을 수신하며, 이에 응답하여 상기 토큰을 무효화화는 동작을 더 수행하는
컴퓨터 저장 매체.
The method according to claim 6,
The computer executable instructions are
Receive a request to change the first data, and further perform an operation to invalidate the token in response.
Computer storage media.
제 6 항에 있어서,
상기 컴퓨터 실행 가능 명령어는
메모리 제약 조건, 기록 활동도(write activity), 디스크 제약 조건, 네트워크 대역폭 제약 조건, 대기 시간 제약 조건 및 TTL(time to live) 중 하나 이상에 기초하여 상기 토큰을 무효화하는 동작을 더 수행하는
컴퓨터 저장 매체.
The method according to claim 6,
The computer executable instructions are
Further invalidating the token based on one or more of memory constraints, write activity, disk constraints, network bandwidth constraints, latency constraints, and time to live (TTL)
Computer storage media.
제 6 항에 있어서,
상기 컴퓨터 실행 가능 명령어는
상기 제 1 데이터를 변경하기 위한 요청을 수신하고, 이에 응답하여 상기 변경을 행하며, 상기 토큰이 상기 제 2 데이터에 바인딩될 때 존재하는 상기 제 2 데이터의 논리적 사본을 유지하는 동작을 더 수행하는
컴퓨터 저장 매체.
The method according to claim 6,
The computer executable instructions are
Receiving a request to change the first data, making the change in response, and further performing maintaining a logical copy of the second data present when the token is bound to the second data;
Computer storage media.
컴퓨팅 환경에서,
저장 장치의 제 1 데이터의 표현에 대한 요청을 전송하도록 동작 가능하고, 상기 제 1 데이터의 서브세트, 즉 잠재적으로 적절한 서브세트인 제 2 데이터를 나타내는 토큰을 수신하도록 더 동작 가능하고, 상기 제 2 데이터 전부 또는 일부를 논리적으로 기록하도록 지시하는 제 3 데이터와 함께 상기 토큰을 제공하도록 더 동작 가능한 요청자,
상기 토큰을 생성하며 상기 토큰을 데이터 구조를 통해 상기 제 2 데이터 토큰과 관련시키도록 동작 가능한 토큰 관리자, 및
상기 제 3 데이터와 함께 상기 토큰을 수신하도록 동작 가능하되, 상기 토큰이 유효한지를 판단하기 위해 상기 토큰 관리자에게 문의하도록 더 동작 가능하며, 상기 제 2 데이터는 적어도 상기 토큰이 유효할 동안에 논리적으로 비변경으로 유지되는 오프로드 제공자를 포함하는
시스템.
In a computing environment,
Operable to send a request for a representation of the first data of the storage device, and further operable to receive a token representing the subset of the first data, that is, the second data, which is a potentially appropriate subset; A requestor further operable to provide the token with third data instructing to logically record all or part of the data,
A token manager operable to generate the token and associate the token with the second data token via a data structure, and
Operable to receive the token with the third data, further operable to contact the token manager to determine if the token is valid, the second data being logically unaltered while at least the token is valid Including offload providers maintained
system.
제 12 항에 있어서,
상기 오프로드 제공자는 상기 토큰이 유효한 경우에 상기 제 3 데이터에 의해 지시된 대로 상기 제 2 데이터 전부 또는 일부를 논리적으로 기록하도록 더 동작 가능하며, 상기 제 3 데이터는 또한 기록된 데이터를 입력하는 목적지를 포함하는
시스템.
13. The method of claim 12,
The offload provider is further operable to logically record all or part of the second data as indicated by the third data if the token is valid, the third data also being a destination for entering the recorded data. Containing
system.
제 12 항에 있어서,
상기 요청자는 상기 오프로드 제공자를 호스팅하는 장치의 외부에 있는 장치의 구성 요소를 포함하는
시스템.
13. The method of claim 12,
The requestor includes components of a device external to the device hosting the offload provider.
system.
제 12 항에 있어서,
상기 토큰 관리자 및 상기 오프로드 제공자는 양자 모두 저장 영역 네트워크의 장치에 호스팅되는
시스템.
13. The method of claim 12,
The token manager and the offload provider are both hosted on a device in a storage area network.
system.
KR1020137007387A 2010-09-23 2011-09-07 Offload reads and writes KR20130139883A (en)

Applications Claiming Priority (3)

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

Publications (1)

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

Family

ID=45872084

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137007387A KR20130139883A (en) 2010-09-23 2011-09-07 Offload reads and writes

Country Status (12)

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

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
US9521418B2 (en) 2011-07-22 2016-12-13 Qualcomm Incorporated Slice header three-dimensional video extension for slice header prediction
US11496760B2 (en) 2011-07-22 2022-11-08 Qualcomm Incorporated Slice header prediction for depth maps in three-dimensional video codecs
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 (en) * 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
US9582206B2 (en) * 2014-06-16 2017-02-28 Netapp, Inc. Methods and systems for a copy-offload operation
US9514210B2 (en) * 2014-06-16 2016-12-06 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 (en) * 2017-08-01 2018-12-11 英業達股份有限公司 Method for partitioning memory area of non-volatile memory
CN110287148B (en) * 2019-07-01 2021-10-29 中原银行股份有限公司 Data interaction method and device
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
US20080140724A1 (en) * 2006-12-06 2008-06-12 David Flynn Apparatus, system, and method for servicing object requests within a storage controller
TWI405211B (en) * 2008-11-04 2013-08-11 Phison Electronics Corp Flash memory storage system, controller and data protecting method thereof

Also Published As

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

Similar Documents

Publication Publication Date Title
KR20130139883A (en) Offload reads and writes
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 (en) File data access method and apparatus, and computer-readable storage medium
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