KR102581374B1 - 분산 계산 가능한 스토리지 그룹을 구비하는 컴퓨팅 시스템 및 그것의 동작 방법 - Google Patents

분산 계산 가능한 스토리지 그룹을 구비하는 컴퓨팅 시스템 및 그것의 동작 방법 Download PDF

Info

Publication number
KR102581374B1
KR102581374B1 KR1020150190827A KR20150190827A KR102581374B1 KR 102581374 B1 KR102581374 B1 KR 102581374B1 KR 1020150190827 A KR1020150190827 A KR 1020150190827A KR 20150190827 A KR20150190827 A KR 20150190827A KR 102581374 B1 KR102581374 B1 KR 102581374B1
Authority
KR
South Korea
Prior art keywords
data
application
storage
computing system
storage processing
Prior art date
Application number
KR1020150190827A
Other languages
English (en)
Other versions
KR20160081851A (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 KR20160081851A publication Critical patent/KR20160081851A/ko
Application granted granted Critical
Publication of KR102581374B1 publication Critical patent/KR102581374B1/ko

Links

Images

Classifications

    • 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
    • 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/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • 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
    • G06F3/0613Improving I/O performance in relation to throughput
    • 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
    • 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/0625Power saving in storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]

Abstract

본 발명은 분산 계산 가능한 스토리지 그룹을 구비하는 컴퓨팅 시스템에 관한 것으로, 컴퓨팅 시스템은 어플리케이션 데이터에 기초하여 포맷된 데이터와 함께 인-스토리지 프로세싱(in-storage processing)을 수행하고, 그리고 연속된 실행을 위해 인-스토리지 프로세싱 출력을 어플리케이션으로 리턴하도록 구성되는 스토리지 장치를 포함한다.

Description

분산 계산 가능한 스토리지 그룹을 구비하는 컴퓨팅 시스템 및 그것의 동작 방법{COMPUTING SYSTEM WITH DISTRIBUTED COMPUTE-ENABLED STORAGE GROUP AND OPERATING METHOD THEREOF}
본 발명은 컴퓨팅 시스템에 관한 것으로, 보다 구체적으로 분산 계산 가능한 스토리지 그룹을 구비하는 컴퓨팅 시스템에 관한 것이다.
현대의 소비자 및 컴퓨팅 시스템, 서버, 어플라이언스, 텔레비젼, 셀룰러 폰, 자동차, 위성, 및 조합 장치들과 같은, 산업 전자 기기는 현대 생활을 지원하기 위한 증가하는 레벨의 기능성을 제공한다. 이러한 장치들은 상호간에 더욱더 연결된다. 정보의 저장의 필요성은 더 커지고 있다.
현존하는 기술들에 대한 연구 및 개발은 무수히 다른 방향들을 취하고 있다. 부분적으로 또는 분산 네트워크를 통해 정보를 저장하는 것은 더욱 중요해지고 있다. 처리 효율성 및 저장 장치와 컴퓨팅 자원들 사이의 입/출력은 데이터의 양, 계산, 및 스토리지 증가들 때문에 더욱 문제가 되고 있다.
따라서, 데이터의 소스 또는 데이터에 대한 요청에 관계없이 정보의 저장 및 검색의 편재성을 위해 분산 계산 가능한 스토리지 그룹을 가지는 컴퓨팅 시스템의 필요성은 여전히 있다. 증가하는 소비자의 기대와 시장에서의 유의미한 차별성이 있는 제품의 시장 출시 기회의 감소와 더불어, 증가하는 상업적인 경쟁 압력의 관점에서, 이러한 문제점들에 대한 정답을 찾는 것은 점점 중요해지고 있다. 게다가, 비용의 감소, 효율 및 성능의 개선, 및 경쟁적인 압력들을 만족하기 위한 요구에 이러한 문제점들에 대한 정답을 찾기 위한 중요한 필요성에 대한 더 큰 긴급성이 더해진다.
이러한 문제점들에 대한 해답을 오랜 시간 찾고자 하였으나 선행 연구들은 더 효율적인 해답에 대한 시사나 암시를 하지 못하였고, 따라서, 이러한 문제들에 대한 해답은 기술분야에서 통상의 지식을 가진 자에게 오랜 시간 동안 풀리지 않았다.
본 발명은 분산 계산이 가능한 스토리지 그룹을 구비하는 컴퓨팅 시스템 및 그것의 동작 방법을 제공하는데 있다.
본 발명에 따른 컴퓨팅 시스템은 어플리케이션 데이터에 기초하여 포맷된 데이터와 함께 인-스토리지 프로세싱(in-storage processing)을 수행하고, 그리고 연속된 실행을 위해 인-스토리지 프로세싱 출력을 어플리케이션으로 리턴하도록 구성되는 스토리지 장치를 포함한다.
실시 예로서, 상기 스토리지 장치는 인-스토리지 프로세싱을 수행하기 위해 어플리케이션으로부터의 어플리케이션 요청에 기초하여 서브-어플리케이션 요청을 수신하도록 구성된다.
실시 예로서, 상기 스토리지 장치는 하나 이상의 다른 스토리지 장치들로부터의 인-스토리지 프로세싱 출력들로부터 집합된 출력을 생성하고 그리고 상기 집합된 출력을 연속된 실행을 위해 상기 어플리케이션으로 리턴하도록 구성된다.
실시 예로서, 상기 스토리지 장치는 상기 어플리케이션으로부터의 어플리케이션 요청에 기초하여 장치 요청을 적어도 하나의 다른 스토리지 장치들로 발행하도록 구성된다.
실시 예로서, 상기 스토리지 장치는 장치 요청을 발행하도록 구성되고, 상기 컴퓨팅 시스템은 상기 장치 요청을 수신하고, 또 다른 장치 요청을 생성하도록 구성되는 다른 스토리지 장치, 그리고 상기 또 다른 장치 요청을 수신하도록 구성되는 또 다른 스토리지 장치를 더 포함한다.
실시 예로서, 인-스토리지 프로세싱 출력들을 집합하기 위해 전송하고 그리고 집합된 출력을 상기 어플리케이션으로 전송하도록 구성되는 상기 스토리지 장치를 포함하는 스토리지 그룹을 더 포함한다.
실시 예로서, 상기 스토리지 장치는 어플리케이션으로 리턴될 부분적으로 집합된 출력으로서 인-스토리지 프로세싱 출력을 집합하도록 구성된다.
실시 예로서, 상기 스토리지 장치는 어플리케이션 데이터로부터 포맷된 데이터를 생성한다.
실시 예로서, 상기 스토리지 장치는 상기 어플리케이션 데이터의 어플리케이션 유닛 및 데이터 패드와 함께 상기 포맷된 데이터의 포맷된 유닛을 생성하도록 구성된다.
실시 예로서, 상기 스토리지 장치는 어플리케이션 데이터의 비정렬된 어플리케이션 유닛들 및 데이터 패드와 함께 상기 포맷된 데이터의 포맷된 유닛을 생성하도록 구성된다.
본 발명에 따른 컴퓨팅 시스템의 동작 방법은 어플리케이션으로부터의 어플리케이션 데이터에 기초하여 포맷된 데이터와 함께 스토리지 장치에서 인-스토리지 프로세싱을 수행하는 단계, 그리고 연속된 실행을 위해 인-스토리지 프로세싱 출력을 상기 스토리지 장치에서 상기 어플리케이션으로 리턴하는 단계를 포함한다.
실시 예로서, 인-스토리지 프로세싱을 수행하기 위해 상기 어플리케이션으로부터의 어플리케이션 요청에 기초하여 상기 스토리지 장치에서 서브-어플리케이션 요청을 수신하는 단계를 더 포함한다.
실시 예로서, 상기 스토리지 장치를 포함하는 스토리지 그룹으로부터의 인-스토리지 프로세싱 출력들을 분류하는 단계를 더 포함한다.
실시 예로서, 상기 어플리케이션으로부터 어플리케이션 요청에 기초하여 장치 요청을 상기 스토리지 장치를 포함하는 스토리지 그룹에 발행하는 단계를 더 포함한다.
실시 예로서, 상기 스토리지 장치로부터 장치 요청을 발행하는 단계, 다른 스토리지 장치에서 상기 장치 요청을 수신하는 단계, 상기 다른 스토리지 장치에서 다른 장치 요청을 생성하는 단계, 그리고 또 다른 스토리지 장치에서 상기 다른 장치 요청을 수신하는 단계를 더 포함한다.
실시 예로서, 집합되고 상기 어플리케이션으로 전송될 인-스토리지 프로세싱 출력들을 상기 스토리지 장치를 포함하는 스토리지 그룹에 의해 전송하는 단계를 더 포함한다.
실시 예로서, 상기 어플리케이션으로 리턴될 부분적으로 집합된 출력으로서 인-스토리지 프로세싱 출력을 집합하는 단계를 더 포함한다.
실시 예로서, 상기 어플리케이션 데이터에 기초하여 상기 포맷된 데이터를 생성하는 단계를 더 포함한다.
실시 예로서, 상기 어플리케이션 데이터의 어플리케이션 유닛 및 데이터 패드와 함께 상기 포맷된 데이터의 포맷된 유닛을 생성하는 단계를 더 포함한다.
실시 예로서, 상기 어플리케이션 데이터의 비-정렬된 어플리케이션 유닛들 및 데이터 패드와 함께 상기 포맷된 데이터의 포맷된 유닛을 생성하는 단계를 더 포함한다.
본 발명에 따르면, 컴퓨팅 시스템의 분산 프로세싱의 효율성이 개선될 수 있고 컴퓨팅 시스템의 전체 소비 전력이 감소될 수 있다.
도 1은 본 발명의 실시 예에 따른 분산 계산 가능한 스토리지 그룹을 구비하는 컴퓨팅 장치를 보여주는 도면이다.
도 2는 분산 계산 가능한 스토리지 장치를 구비하는 컴퓨팅 시스템의 예시적인 구성도를 보여주는 도면이다.
도 3은 데이터 프리프로세서의 스플릿 기능에 대한 예시적인 동작도를 보여주는 도면이다.
도 4는 데이터 프리프로세서의 스플릿+패딩 기능에 대한 예시적인 동작도를 보여주는 도면이다.
도 5는 데이터 프리프로세서의 스플릿+리던던시 기능에 대한 예시적인 동작도를 보여주는 도면이다.
도 6은 데이터 프리프로세서의 미러링 기능에 대한 예시적인 동작도를 보여주는 도면이다.
도 7은 출력 코디네이터의 예시적인 구성도를 보여주는 도면이다.
도 8a 및 도 8b는 스플릿 및 스플릿+패딩 기능들의 보다 자세한 예시적인 동작도를 보여주는 도면이다.
도 9는 본 발명의 실시 예에 따른 컴퓨팅 시스템의 예시적인 구성도를 보여주는 도면이다.
도 10은 본 발명의 다른 실시 예에 따른 컴퓨팅 시스템의 예시적인 구성도를 보여주는 도면이다.
도 11은 본 발명의 또 다른 실시 예에 따른 컴퓨팅 시스템의 예시적인 구성도를 보여주는 도면이다.
도 12는 집중 코디네이션 모델에서 인-스토리지 프로세싱을 위해 장치 요청들을 발행하는 컴퓨팅 시스템의 예시적인 동작도를 보여주는 도면이다.
도 13은 분산 코디네이션 모델에서 인-스토리지 프로세싱을 위해 장치 요청들을 발행하는 컴퓨팅 시스템의 예시적이 동작도를 보여주는 도면이다.
도 14는 집중 코디네이션 모델의 컴퓨팅 시스템에 대한 동작도를 보여주는 도면이다.
도 15는 하나의 출력 코디네이터를 구비하는 분산 모델에 있어서 컴퓨팅 시스템의 동작도를 보여주는 도면이다.
도 16은 복수의 출력 코디네이터를 구비하는 분산 모델에 있어서 컴퓨팅 시스템의 동작도를 보여주는 도면이다.
도 17은 요청 분배기 및 데이터 프리프로세서에 대한 예시적인 흐름도를 보여주는 도면이다.
도 18은 집중 및 분산 실시 예들에 대한 미러링 기능에 대한 예시적인 흐름도를 보여주는 도면이다.
도 19는 본 발명의 실시 예에 따른 컴퓨팅 시스템의 동작 방법의 흐름도를 보여주는 도면이다.
아래에서는 도면들을 이용하여 본 발명의 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있을 정도로 본 발명의 내용을 명확하고 상세하게 기재할 것이다.
다양한 실시 예들은 어플리케이션 데이터의 인-스토리지 프로세싱(in-storage processing)을 수행하기 위한 기능을 가지는 복수의 스토리지 장치들에서 인-스토리지 프로세싱을 수행하기 위한 방법들 및 장치들을 제공하여 효율적인 분산 프로세싱을 위한 컴퓨팅 시스템을 제공한다. 어플리케이션의 실행은 다양한 스토리지 장치들 사이에서 실행을 분산하는 것에 의해 공유될 수 있다. 각 스토리지 장치들은 어플리케이션 요청에 의해 요청된 어플리케이션 데이터와 함께 인-스토리지 프로세싱을 수행할 수 있다.
다양한 실시 예들은 어플리케이션 실행과 스토리지 장치들 사이의 입출력 횟수를 감소시키는 것에 의해 시스템의 전체적인 소비 전력을 감소시키는 컴퓨팅 시스템을 제공한다. 이러한 소비 전력의 감소는 단지 어플리케이션에 의한 저장, 읽기, 및 재저장 대신에 인-스토리지 프로세싱을 스토리지 장치가 수행하는 것에 의해 달성된다. 대신에, 인-스토리지 프로세싱 출력들은 인-스토리지 프로세싱이 수행되는 다양한 스토리지 장치들로부터 집합된 출력으로서 어플리케이션으로 되돌아간다. 어플리케이션은 인-스토리지 프로세싱 출력들, 집합된 출력, 또는 그것들의 조합을 계속 실행하고 그리고 계속 사용할 수 있다.
다양한 실시 예들은 스토리지 장치들의 서로 다른 구성들 또는 구조들에 대한 어플리케이션 데이터를 위한 포맷 및 변환 기능들을 제공하는 것에 의해 총 소유 비용(total cost of ownership)을 감소시킨다. 게다가, 컴퓨팅 시스템은 또한 스토리지 그룹의 일부로서 다양한 스토리지 장치들에 의해 수행될 인-스토리지 프로세싱을 위한 변환을 제공한다. 변환 또는 포맷의 예시적인 종류들은 스플릿, 스플릿+패딩, 스플릿+리던던시, 및 미러링을 포함한다.
다양한 실시 예들은 스토리지 장치가 호스트 실행 어플리케이션에 의해 덜 완료되게 하고, 오히려 인-스토리지 프로세싱 코디네이션 기능들을 더 처리하도록 허용하는 것에 의해 통합을 최소화하는 컴퓨팅 시스템을 제공한다. 다른 실시 예는 인-스토리지 프로세싱 코디네이션이 갈수록 더 호스트 및 스토리지 장치의 외부에 위치하도록 하고 그리고 그 외부에서 동작하도록 허용한다.
다양한 실시 예들은 스토리지 장치들로부터의 인-스토리지 프로세싱의 출력들을 조정함에 따라 어플리케이션에 대한 인터럽트가 덜 발생하는 더 효율적으로 어플리케이션을 실행할 수 있는 컴퓨팅 시스템을 제공한다. 출력 조정은 인-스토리지 프로세싱 출력들을 버퍼할 수 있고 그리고 또한 집합된 출력이 어플리케이션으로 리턴되기 전에 각 인-스토리지 프로세싱 출력들을 순서대로 분류할 수 있다. 어플리케이션은 실행을 계속할 수 있고 그리고 인-스토리지 출력들, 집합된 출력, 또는 그것들의 조합을 이용할 수 있다.
다양한 실시 예들은 스토리지 그룹의 스토리지 장치가 서로 다른 또는 동일한 기능들을 가지는 것을 허용하는 것에 의해 통합 방해물들을 최소화하는 컴퓨팅 시스템을 제공한다. 예시로서, 스토리지 장치들 중 하나는 다른 스토리지 장치들로부터의 모든 인-스토리지 프로세싱 출력들에 대한 단지 출력 코디네이터로서 기능할 수 있다. 다른 예시로서, 집합 기능은 스토리지 장치들 사이에서 분산될 수 있고, 스토리지 장치들 중 마지막 하나가 완전히 집합된 출력을 어플리케이션으로 리턴 할 때까지 스토리지 장치에서 스토리지 장치로 지나가고 그리고 각 스토리지 장치에서 부분 집합을 수행함으로써 집합 기능은 스토리지 장치들 사이에서 분산될 수 있다. 어플리케이션은 실행을 계속할 수 있고 그리고 인-스토리지 출력들, 집합된 출력, 또는 그것들의 조합을 이용할 수 있다.
아래의 실시 예들은 기술분야에서 통상의 지식을 가진 자가 본 발명을 만들고 사용할 수 있도록 충분히 상세하게 설명된다. 본 발명의 범위를 벗어나지 않고 본 개시에 기초하여 시스템, 프로세스, 구조, 또는 기계적인 변경을 통해 다른 실시 예들이 만들어질 수 있음을 이해할 수 있을 것이다.
아래의 설명에서, 많은 특정한 디테일들은 발명의 명확한 이해를 제공하기 위해 제공된다. 그러나 발명 및 다양한 실시 예들은 이러한 특정한 디테일들 없이 실시될 수 있음을 알 수 있을 것이다. 본 발명의 실시 예를 모호하게 하는 것을 방지하기 위해, 일부 잘 알려진 회로들, 시스템 구성들, 및 프로세스 단계들은 구체적으로 설명되지 않은 것이다.
시스템의 실시 예들을 보여주는 도면들은 반-도식식이고, 그리고 특히, 일부 치수는 표현의 명확성을 위해 축적적이지 않고 도면에서 과장되게 도시되었다. 유사하게, 설명의 편의를 위해 도면에서 대체로 유사한 뷰 방향을 표시하더라도 도면의 이러한 묘사는 대부분 임의적이다. 일반적으로, 실시 예는 임의의 방향으로 조작될 수 있다. 실시 예는 설명의 편의를 위해 제 1 실시, 예 2 실시 등으로 넘버링 되었지만, 이것이 어떤 다른 의미가 있거나 또는 실시 예에 대한 제한을 제공하는 것은 아니다.
본 명세서에서 언급된 용어 '모듈'은 용어가 사용된 문맥에 따라 본 명세서에서 설명된 실시 예에서 소프트웨어, 하드웨어, 또는 그것들의 조합으로서 구현될 수 있거나, 또는 소프트웨어, 하드웨어, 또는 그것들의 조합을 포함할 수 있다. 예시적으로, 소프트웨어는 기계코드, 펌웨어, 임베디드 코드, 및 어플리케이션 소프트웨어일 수 있다. 소프트웨어는 또한 함수, 함수 호출, 코드 블록, 또는 그것들의 조합을 포함할 수 있다. 또한, 예시적으로, 하드웨어는 게이트들, 회로망, 프로세서, 컴퓨터, 집적회로, 집적회로 코어들, 압력 센서, 관성 센서, 마이크로전자역학 시스템(microelectromechanical system, MEMS), 수동 장치들, 소프트웨어 함수를 수행하기 위한 명령어를 가지는 물리적 비-일시적 메모리 미디어, 그 안의 일부, 또는 그것들의 조합일 수 있다. 하드웨어 회로망의 추가적인 예시들은 디지털 회로 또는 로직, 아날로그 회로, 혼합 모드 회로, 광학 회로, 또는 그것들의 조합일 수 있다. 또한, 모듈이 장치 클레임들에 기술된 경우, 모듈들은 장치 클레임들의 목적 및 범위를 위해 하드웨어 회로망을 포함하는 것으로 간주 된다.
실시 예들의 아래의 설명에서의 모듈들은 기술된 또는 도시된 바와 같이 서로 연결될 수 있다. 연결은 연결되는 아이템들 사이에 매개체를 가지고 또는 매개체 없이 직접 또는 간접적으로 연결될 수 있다. 연결은 물리적인 접촉일 수 있고 또는 아이템들 사이의 통신에 의할 수 있다.
도 1을 참조하면, 본 발명의 실시 예에 따른 데이터 보호 메커니즘을 구비하는 컴퓨팅 시스템(100)이 도시되었다. 컴퓨팅 시스템(100)은 데이터 스토리지 시스템(101)을 구비하는 컴퓨팅 시스템(100)의 기능 블록도로서 도 1에 도시되었다. 기능 블록도는 호스트 시스템(102)에 설치된 데이터 스토리지 시스템(101)을 도시한다.
다양한 실시 예들은 예컨대, 솔리드 스테이트 디스크(110), 불휘발성 메모리(112), 하드 디스크 드라이브(116), 메모리 장치들(117), 및 스토리지(122)에 부착된 네트워크와 같은, 저장을 위한 장치들을 구비하는 컴퓨팅 시스템(100)을 포함할 수 있다. 저장을 위한 이러한 장치들은 인-스토리지 프로세싱, 즉 통상의 시스템 CPU의 외부 위치에서 상대적으로 복잡한 계산들을 독립적으로 수행하는 기능을 포함할 수 있다. 인-스토리지 프로세싱 패러다임의 일부로서, 본 발명의 다양한 실시 예들은 데이터의 분배, 데이터의 위치, 및 인-스토리지 프로세싱을 위한 프로세싱 작업의 위치를 관리한다. 게다가, 이러한 스토리지 장치에서 수행할 수 있는 인-스토리지 컴퓨팅은 어레이들로 그룹화 또는 클러스터화될 수 있다. 다양한 실시 예들은 이러한 장치들 또는 어레이들의 구조 또는 능력들에 기초하여 데이터 및/또는 프로세싱의 할당을 관리한다. 인-스토리지 프로세싱은 이후에 더 설명될 것이다.
예시로서, 호스트 컴퓨터(102)는 서버 또는 워크스테인션일 수 있다. 호스트 컴퓨터(102)는 적어도 중앙 처리 유닛(104), 중앙 처리 유닛(104)과 연결되는 호스트 메모리(106), 및 호스트 버스 컨트롤러(108)를 포함할 수 있다. 호스트 버스 컨트롤러(108)는 호스트 컴퓨터(102)가 데이터 스토리지 시스템(101)을 이용할 수 있도록 하는 호스트 인터페이스 버스(114)를 제공한다.
호스트 버스 컨트롤러(108)의 기능은 일부 구현 예들에서 중앙 처리 유닛(104)에 의해 제공될 수 있음을 이해할 수 있을 것이다. 중앙 처리 유닛(104)은 수많은 다른 방식의 하드웨어 회로망으로 구현될 수 있다. 예시로서, 중앙 처리 유닛(104)은 프로세서, 프로세서에 임베디드된 ASIC(application specific integrated circuit), 마이크로프로세서, 하드웨어 제어 로직, FSM(hardware finite state machine), DSP(digital signal processor), FPGA(field programmable gate array), 또는 그것들의 조합일 수 있다.
데이터 스토리지 시스템(101)은 주변 인터페이스 시스템, 또는 확대되거나 또는 확장되는 불휘발성 시스템 메모리를 위한 내부 메모리 카드와 같은, 불휘발성 메모리(112)를 가지는 불휘발성 메모리 기반 스토리지 그룹과 같은, 솔리드 스테이트 디스크(110)와 연결될 수 있다.
데이터 스토리지 시스템(101)은 또한 호스트 컴퓨터(102)에, 호스트 컴퓨터(102)의 외부에, 또는 그것들의 조합에 장착될 수 있는 하드 디스크 드라이브(HDD)와 연결될 수 있다. 솔리드 스테이트 디스크(110), 불휘발성 메모리(112), 및 하드 디스크 드라이브(116)는 예시로서, DAS(direct attached storage) 장치들로서 고려될 수 있다.
데이터 스토리지 시스템(101)은 또한 네트워크와 연결하기 위한 네트워크 부착 포트(network attach port, 118)를 지원할 수 있다. 네트워크(120)의 예시들은 PAN(personal area network), LAN(local area network), SAN(storage area network), WAN(wide area network), 또는 그것들의 조합을 포함할 수 있다. 네트워크 부착 포트(118)는 NAS(network attached storage, 122)에 액세스를 제공할 수 있다. 네트워크 부착 포트(118)는 또한 호스트 버스 컨트롤러(108)와의 연결을 제공하고 그리고 호스트 버스 컨트롤러(108)로부터의 연결을 제공할 수 있다.
NAS(122)가 하드 디스크 드라이브로 도시되지만, 이것은 단지 예시이다. NAS(122)는 네트워크 부착 포트(118)를 통해 액세스되는 자기 테입 스토리지(미도시), 솔리드 스테이트 디스크(100)와 유사한 스토리지 장치들, 불휘발성 메모리(112), 또는 하드 디스크 드라이브(116)와 같은, 모든 불휘발성 스토리지 기술을 포함할 수 있음을 이해할 수 있을 것이다. 또한, NAS(122)는 다른 NAS(122)뿐만 아니라 JBOD(just a bunch of disks) 시스템들 또는 RAID(redundant array of intelligent disks) 시스템들과 같은, 집합된 자원들을 포함할 수 있다.
데이터 스토리지 시스템(101)은 SATA(Serial Advanced Technology Attachment), SAS(Serial Attached SCSI), 또는 PCI-e(Peripheral Component Interconnect-Express) 부착 스토리지 장치들과 같은, 스토리지 인터페이스를 위한 케이블(124)을 통해 복수의 DAS(direct attached storage) 장치들에 액세스를 제공하고 그리고 인터페이싱을 위한 호스트 인터페이스 버스(114)에 부착될 수 있다.
데이터 스토리지 시스템(101)은 스토리지 엔진(115) 및 메모리 캐시(117)를 포함할 수 있다. 스토리지 엔진(115)은 다양한 방식으로 하드웨어 회로망, 소프트웨어, 또는 그것들의 조합과 함께 구현될 수 있다. 예를 들어, 스토리지 엔진(115)은 프로세서, ASIC(application specific integrated circuit), 임베디드 프로세서, 마이크로프로세서, 하드웨어 제어 로직, 하드웨어 FSM(finite state machine), DSP(digital signal processor), FPGA, 또는 그것들의 조합으로 구현될 수 있다.
중앙 처리 유닛(104) 또는 스토리지 엔진(115)은 호스트 컴퓨터(102)로/로부터, 그리고 DAS 장치들, NAS(122), 또는 그것들의 조합으로부터/으로 데이터의 흐름 및 관리를 제어할 수 있다. 스토리지 엔진(115)은 또한 이후에 더 자세하게 논의될, 데이터 신뢰성 확인 및 정정을 수행할 수 있다. 스토리지 엔진(115)은 또한 DAS 장치들과 네트워크 부착 스토리지(122) 사이에 그리고 그것들 사이에서의 데이터의 흐름을 제어 및 관리할 수 있다. 스토리지 엔진(115)은 하드웨어 회로망, 프로세서 구동 소프트웨어, 또는 그것들의 조합으로 구현될 수 있다.
도식적인 목적을 위해, 스토리지 엔진(115)은 비록 스토리지 엔진(115)이 다르게 구현 및 구분될 수 있지만, 데이터 스토리지 시스템(101)의 일부로서 도시되었다. 예를 들어, 스토리지 엔진(115)은 호스트 컴퓨터(102)의 일부로서 구현되거나, 소프트웨어로 구현되거나, 하드웨어로 구현되거나, 또는 그것들의 조합으로 구현될 수 있다. 스토리지 엔진(115)은 데이터 스토리지 시스템(101)의 외부에 위치할 수 있다. 예시로서, 스토리지 엔진(115)은 상술한 DAS 장치들, 네트워크 부착 스토리지(122), 또는 그것들의 조합의 일부일 수 있다. 스토리지 엔진(115)의 기능들은 호스트 컴퓨터(102), DAS 장치들, 네트워크 부착 스토리지(122), 또는 그것들의 조합의 일부로서 분산될 수 있다. 중앙 처리 유닛(104) 또는 그것의 일부는 또한 데이터 스토리지 시스템(101), DAS 장치들, 네트워크 부착 스토리지(122), 또는 그것들의 조합에 위치할 수 있다.
메모리 장치들(117)은 데이터 스토리지 시스템(101), 컴퓨팅 시스템(100), 또는 그것들의 조합에 대한 로컬 캐시로 기능할 수 있다. 메모리 장치들(117)은 휘발성 메모리 또는 불휘발성 메모리일 수 있다. 휘발성 메모리의 예시들은 SRAM(static random access memory) 또는 DRAM(dynamic random access memory)를 포함할 수 있다.
스토리지 엔진(115) 및 메모리 장치들(117)은 데이터 스토리지 시스템(101)이 호스트 컴퓨터(102)에 의해 제공되는 데이터의 성능 요구들을 만족시키고 그리고 그 데이터들을 솔리드 스테이트 디스크(110), 불휘발성 메모리(112), 하드 디스크 드라이브(116), 또는 네트워크 부착 메모리(122)에 저장할 수 있도록 한다.
도식적인 목적을 위해, 데이터 스토리지 시스템(101)은 비록 데이터 스토리지 시스템(101)이 다르게 구현 및 구분될 수 있지만, 호스트 컴퓨터(102)의 일부로서 도시되었다. 예를 들어, 데이터 스토리지 시스템(101)은 호스트 컴퓨터(102)의 플러그-인 카드로서, 호스트 컴퓨터(102)의 칩 또는 칩셋의 일부로서, 호스트 컴퓨터(102)에서 부분적으로는 소프트웨어로 그리고 부분적으로는 하드웨어로 구현되거나, 또는 그것들의 조합으로서 구현될 수 있다. 데이터 스토리지 시스템(101)은 호스트 컴퓨터(102)의 외부에 위치할 수 있다. 예시로서, 데이터 스토리지 시스템(101)은 상술한 DAS 장치들, 네트워크 부착 스토리지(122), 또는 그것들의 조합의 일부일 수 있다. 데이터 스토리지 시스템(101)은 호스트 컴퓨터(102), DAS 장치들, 네트워크 부착 스토리지(122), 또는 그것들의 조합의 일부로서 분산될 수 있다.
도 2를 참조하면, 분산 계산 가능한 스토리지 장치를 구비하는 컴퓨팅 시스템의 구성도가 도시되었다. 구성도는 컴퓨팅 시스템(100)의 일 부분들 사이의 관계들의 예들을 도시할 수 있다. 예시로서, 구성도는 어플리케이션(202), 인-스토리지 프로세싱 코디네이터(204), 및 스토리지 그룹(206)을 포함하도록 컴퓨팅 시스템(100)을 도시할 수 있다.
예시로서, 스토리지 그룹(206)은 다양한 방식으로 도 1의 컴퓨팅 시스템(100)에 분배될 수 있다. 예를 들어, 스토리지 그룹(206)은 도 1의 데이터 스토리지 시스템(101), 도 1의 솔리드 스테이트 디스크(110), 도 1의 불휘발성 메모리(112), 또는 그것들의 조합의 일부거나 또는 그 사이에서 분산될 수 있다.
어플리케이션(202)은 기능을 실행하는 프로세스이다. 어플리케이션(202)은 엔드-유저(미도시) 기능 또는 컴퓨팅 시스템(100)의 동작, 제어, 사용, 또는 통신과 관련된 다른 기능을 제공할 수 있다. 예시로서, 어플리케이션(202)은 프로세서, 중앙 처리 유닛(CPU), 프로그램가능 하드웨어 상태 머신, 또는 소프트웨어 어플리케이션으로부터의 소프트웨어 코드를 실행할 수 있는 다른 하드웨어 회로망에 의해 실행되는 소프트웨어 어플리케이션일 수 있다. 또 다른 예시로서, 어플리케이션(202)은 로직 게이트들, FSM(finite state machine), 트랜지스터, 또는 그것들의 조합과 같은, 완전한 하드웨어 회로망에 의해 실행되는 기능일 수 있다. 어플리케이션(202)은 도 1의 중앙 처리 유닛(104) 상에서 실행될 수 있다.
인-스토리지 프로세싱 코디네이터(204)는 어플리케이션(202)과 스토리지 그룹(206) 사이의 통신 및 활동들을 관리한다. 인-스토리지 프로세싱 코디네이터(204)는 어플리케이션(202)과 스토리지 그룹(206) 사이의 동작들을 관리할 수 있다. 예시로서, 인-스토리지 프로세싱 코디네이터(204)는 어플리케이션(202)과 스토리지 그룹(206) 사이의 정보를 변환할 수 있다. 또 다른 예시로서, 인-스토리지 프로세싱 코디네이터(204)는 어플리케이션(202)과 스토리지 그룹(206) 사이에서 직접 정보 흐름 및 할당들을 할 수 있다. 예시로서, 인-스토리지 프로세싱 코디네이터(204)는 데이터 프리프로세서(208), 요청 분배기(210), 및 출력 코디네이터(212)를 포함할 수 있다.
예시로서, 인-스토리지 프로세싱 코디네이터(204) 또는 그것의 일부들은 중앙 처리 유닛(104) 또는 호스트 컴퓨터(102)의 다른 부분들에 의해 실행될 수 있다. 인-스토리지 프로세싱 코디네이터(204) 또는 그것의 일부들은 또한 데이터 스토리지 시스템(101)에 의해 실행될 수 있다. 구체적인 예시로서, 도 1의 스토리지 엔진(115)은 인-스토리지 프로세싱 코디네이터(204) 또는 그것의 일부들을 실행할 수 있다. 도 1의 하드 디스크 드라이브(116), 도 1의 네트워크 부착 스토리지(122), 도 1의 솔리드 스테이트 디스크(110), 도 1의 불휘발성 메모리(112), 또는 그것들의 조합은 인-스토리지 프로세싱 코디네이터(204) 또는 그것의 일부들을 실행할 수 있다.
데이터 프리프로세서(208)는 어플리케이션 데이터(214)의 데이터 포맷 및 포맷된 데이터(216)의 배치를 수행한다. 어플리케이션 데이터(214)는 어플리케이션(202)에 의해 생성된 데이터 또는 그 정보이다. 포맷은 스토리지 그룹(206)에 저장될 인-스토리지 프로세싱을 위해 복수의 스토리지 장치들(218)을 교차하여 포맷된 데이터(216)로서의 어플리케이션 데이터를 저장할 수 있도록 한다.
인-스토리지 프로세싱은 어플리케이션(202) 또는 어플리케이션(202)을 실행하는 시스템으로 다시 전송될 포맷된 데이터(216)의 처리 또는 조작을 나타낸다. 인-스토리지 프로세싱은 단지 포맷된 데이터를 저장하고 및 검색하는 것 이상을 의미한다. 인-스토리지 프로세싱의 일부로서의 조작 또는 처리의 예시들은 정수 또는 부동소수점 수학 연산, 부울 연산, 데이터 비트 또는 심볼의 재편성, 또는 그것들의 조합을 포함할 수 있다. 인-스토리지 프로세싱의 일부로서의 조작 또는 처리의 다른 예시들은 검색, 분류, 비교, 필터링, 포맷된 데이터(216), 어플리케이션 데이터(214), 또는 그것들의 조합의 결합을 포함한다.
다른 예시로서, 데이터 프리프로세서(208)는 어플리케이션(202)로부터의 어플리케이션 데이터(214)를 포맷하고 그리고 어플리케이션(202)의 외부 또는 어플리케이션(202)과 독립적으로 처리될 포맷된 데이터(216)를 생성할 수 있다. 이 독립적인 프로세싱은 인-스토리지 프로세싱과 함께 수행될 수 있다. 어플리케이션 데이터(214)는 스토리지 그룹(206)에 저장된 그것들에 독립적일 수 있고 그리고 그것들과 반드시 동일한 포맷이 아닐 수 있다. 어플리케이션 데이터(214)의 포맷은 아래에서 설명될, 포맷된 데이터(216)와는 다를 수 있다.
어플리케이션 데이터(214)의 타입, 스토리지 그룹(206)의 어레이 배열들, 또는 사용자 정의 정책들(user-defined policies)에 의존하기 때문에, 어플리케이션 데이터(214)는 다양한 방식으로 처리될 수 있다. 예시로서, 정책들은 미러링과 같은, 스토리지 그룹(206)의 어레이 배열에 영향을 주기 위하여 유효성 요청들을 나타낼 수 있다. 또 다른 예시로서, 정책들은 스트라이핑(striping)과 같은, 스토리지 그룹(206)의 어레이 배열에 추가로 영향을 주기 위하여 성능 요청들을 나타낼 수 있다. 변환의 예시로서, 어플리케이션 데이터(214)는 스플릿, 스플릿+패딩, 스플릿+리던던시, 및 미러링과 같은 다양한 방법들을 사용하여 포맷된 데이터(216)로 변환될 수 있다. 이러한 방법들은 인-스토리지 프로세싱을 병행(concurrent)하는 것을 허용하는, 복수의 스토리지 장치들(218)로 분산될 수 있는 포맷된 데이터(216)의 독립 데이터 집합들을 생성할 수 있다. 동시 발생하는 인-스토리지 프로세싱은 포맷된 데이터(216), 어플리케이션 데이터(214), 또는 그것들의 조합을 독립적으로 처리할 수 있는 스토리지 그룹(206)에 있는 각 스토리지 장치들(218)을 나타낸다. 이 독립적인 처리 또는 동작은 어플리케이션(202)의 실행, 어플리케이션 데이터(214)로부터 포맷된 데이터(216)의 일부가 수신되는 스토리지 그룹(206)의 다른 스토리지 장치들(218), 또는 그것들의 조합과 독립적일 수 있다.
요청 분배기(210)는 어플리케이션(202)과 스토리지 그룹(206) 사이의 어플리케이션 요청들(220)을 관리한다. 구체적인 예시로서, 요청 분배기(210)는 어플리케이션(202)으로부터 어플리케이션 요청들(220)을 수용하고 그리고 그것들을 분배한다. 어플리케이션 요청들(220)은 인-스토리지 프로세싱에 기초하는 어플리케이션(202)과 스토리지 그룹(206) 사이의 동작들이다. 예를 들어, 어플리케이션 요청들(220)은 인-스토리지 프로세싱을 위해 스토리지 그룹(206)으로부터 오프-로드될 어플리케이션(202)으로부터의 정보를 제공할 수 있다. 다른 예시로서, 인-스토리지 프로세싱의 결과들은 어플리케이션 요청들(220)에 기초하여 어플리케이션(202)으로 리턴될 수 있다.
예시로서, 요청 분배기(210)는 인-스토리지 프로세싱, 쓰기 또는 저장, 또는 출력을 위해 어플리케이션(202)으로부터의 어플리케이션 요청들(220)을 관리한다. 요청 분백(210)는 또한 어플리케이션(202)으로부터의 어플리케이션 요청들(220)을스토리지 그룹(206)의 복수의 스토리지 장치들(218)을 가로질러 분배한다.
또 다른 예시로서, 인-스토리지 프로세싱을 위해 입력되는 어플리케이션 요청들(220)은 포맷된 데이터(216)의 분배, 스토리지 그룹(206)의 구성, 또는 다른 정책들에 따라 인-스토리지 프로세싱을 수행하기 위해 복수의 서브-어플리케이션 요청들(222)로 스플릿될 수 있다. 요청 분배기(210)는 어플리케이션 데이터(214), 포맷된 데이터(216), 또는 그것들의 조합에 대한 배치 기법에 기초하는 인-스토리지 프로세싱을 위해 어플리케이션 요청(220)의 스플릿을 수행할 수 있다.
데이터 배치 기법들의 예시적인 타입들은 도 9 내지 11에서 논의되는, 집중 기법(centralized scheme) 및 분산 기법(decentralized scheme)을 포함할 수 있다. 집중 기법의 다양한 실시 예들에 있어서, 데이터 프리프로세서(208)는 인-스토리지 프로세싱 코디네이터(204)의 내부에 위치하는 반면, 분산 모델은 스토리지 그룹(206) 내부에 데이터 프리프로세서(208)를 배치한다.
집중 기법을 가지는 실시 예들에 대해, 인-스토리지 프로세싱 코디네이터(204)가 어플리케이션(202)으로부터 어드레스, 데이터, 데이터 길이, 및 논리 바운더리와 같은, 요청된 정보를 구비하는 데이터 쓰기 요청과 같은 어플리케이션 요청(220)을 수신하면, 요청 분배기(210)는 데이터, 데이터 길이, 및 논리 바운더리와 같은, 요청된 정보를 데이터 프리프로세서(208)에 제공한다. 그 다음, 데이터 프리프로세서(208)는 데이터를 저장 유닛 정보에 기초하여 적절한 크기의 복수의 데이터 청크들로 나눈다. 그 다음, 요청 분배기(210)는 복수의 서브-어플리케이션 요청들(222)을 가지는 각 스토리지 장치들(218)에 대응하는 데이터 청크들을 분배한다. 스토리지 그룹(206), 스토리지 장치들(218), 또는 그것들의 조합은 어플리케이션 요청들(220), 서브-어플리케이션 요청들(222), 또는 그것들이 조합을 수신할 수 있다. 반면에, 분산 모델의 요청 분배기(210)는 예를 들어, 데이터 크기/N(여기에서, N은 스토리지 장치들의 수)인 미리 정의된 크기의 청크들로 데이터를 나누고, 그리고 어드레스, 데이터 크기, 및 논리 바운더리와 같은 요청된 정보와 결합되는 서브-어플리케이션 요청들(222)을 가지는 스토리지 장치들(218) 각각에 데이터의 청크들을 분배한다. 그 다음, 스토리지 장치들(206) 내부의 데이터 프리프로세서(208)는 저장 유닛 정보에 기초하여 할당된 데이터를 더 작은 청크들로 나눈다.
더 구체적인 예시로서, 어플리케이션 데이터(214), 제공된 기입될 어플리케이션 데이터, 그것의 길이, 및 어플리케이션 데이터의 선택적인 논리 바운더리에 대한 쓰기 요청에 대하여, 요청 분배기(210)는 어플리케이션 데이터(214)를 어떻게 분배할지를 결정할 수 있도록 쓰기 요청을 데이터 프리프로세서(208)로 전송할 수 있다. 일단 데이터 분배가 결정되면, 요청 분배기(2100는 스토리지 그룹(206)의 스토리지 장치들(218)에 쓰기 요청을 발행할 수 있다. 도 8의 호스트 버스 컨트롤러(108) 또는 도 1의 네트워크 부착 포트는 요청 분배기(210)를 실행하고 그리고 어플리케이션 요청들(220)을 발생하는데 사용될 수 있다.
계속하여, 스토리지 장치들(218)은 포맷된 데이터(216)에 대한 인-스토리지 프로세싱을 수행할 수 있다. 요청 분배기(210)는 인-스토리지 프로세싱 출력들(224)을 어플리케이션(202) 또는 어플리케이션(202)을 실행하는 시스템으로 다시 전송하기 위해, 인-스토리지 프로세싱 코디네이터(204), 또는 구체적인 예시로서 출력 코디네이터(212)로 출력 요청을 포워딩하는 것에 따라 출력하기 위해 그 요청을 처리할 수 있다. 어플리케이션은 인-스토리지 프로세싱 출력들(224)과 함께 실행을 계속할 수 있다. 인-스토리지 프로세싱 출력들(224)은 포맷된 데이터(216)의 스토리지 그룹(206)에 의한 인-스토리지 프로세싱의 결과들일 수 있다. 인-스토리지 프로세싱 출력들(224)은 스토리지 그룹(206)에 저장된 포맷된 데이터(216)의 단순한 리드-백(read-back) 또는 리드(read)가 아니다.
출력 코디네이터(212)는 스토리지 그룹(206)의 복수의 스토리지 장치들(218) 각각으로부터 생성된 처리된 데이터를 관리하고 그리고 그것을 어플리케이션(202)으로 다시 전송할 수 있다. 예시로서, 출력 코디네이터(212)는 결과들 또는 인-스토리지 프로세싱 출력들(224)을 수집하고 그리고 그것들을 어플리케이션(202) 또는 다양한 어플리케이션들(202) 또는 어플리케이션(202)을 실행하는 시스템에 제공한다. 출력 코디네이터(212)는 후술될 것이다.
컴퓨팅 시스템(100)은 또한 에러 처리 능력을 제공할 수 있다. 예를 들어, 스토리지 그룹(206)의 스토리지 장치들(218) 중 하나 이상이 접근 불가능하거나 또는 느린 성능을 가지는 경우, 어플리케이션 요청들(220)은 타임-아웃 또는 비-완료와 같은, 실패를 할 수 있다. 더 나은 유효성을 위해, 컴퓨팅 시스템(100)은 다양한 동작들을 수행할 수 있다.
아래는 스토리지 그룹(206)에 대한 쓰기들을 위한 어플리케이션 요청들(220)에 대한 예시들이다. 인-스토리지 프로세싱 코디네이터(204), 또는 더 구체적인 예시로서 요청 분배기(210)는 실패되거나 또는 완료되지 못한 어플리케이션 요청들(220)에 대한 재시도를 발행하는데 사용될 수 있는 요청 로그를 유지할 수 있다. 또한 예시로서, 인-스토리지 프로세싱 코디네이터(204)는 어플리케이션 데이터(214)를 쓰기 위해 어플리케이션 요청들(220)을 재시도하는 것을 계속할 수 있다. 또 다른 예시로서, 인-스토리지 프로세싱 코디네이터(204)는 어플리케이션 요청들(220)의 상태를 어플리케이션(202)에 보고할 수 있다.
아래는 스토리지 그룹(206)에서 인-스토리지 프로세싱을 위한 어플리케이션 요청들(220)에 대한 예시들이다. 스토리지 그룹(206)의 어느 한 스토리지 장치(218)가 접근할 수 없는 스토리지 장치에 관한 어플리케이션 데이터(214), 포맷된 데이터(216), 또는 그것들의 조합을 포함하는 경우, 이러한 어플리케이션 요청들(220)은 레플리카를 가지는 스토리지 장치(218)로 재전송될 수 있다. 만약 에러 복구가 가능하다면, 에러 복구 프로세스가 실패된 어플리케이션 요청들(220)이 복구된 스토리지 장치(218)로 재발행되기 전에 실행될 수 있다. 에러 복구 기법의 예시는 스트라이프된 스토리지 장치(218)의 리빌딩을 가지는 RAID 복구일 수 있다. 다른 예시로서, 인-스토리지 프로세싱 코디네이터(204)는 또한 어플리케이션 요청들(220)이 재전송, 재시도, 그리고 결국에는 성공적이더라도 실패들의 보고를 생성할 수 있다.
인-스토리지 프로세싱 코디네이터(204) 또는 그것의 적어도 일부는 다양한 방식으로 구현될 수 있다. 예시로서, 인-스토리지 프로세싱 코디네이터(204)는 소프트웨어, 하드웨어 회로, 또는 그것들의 조합과 함께 구현될 수 있다. 하드웨어 회로의 예시들은 프로세서, 프로세서에 임베디드된 ASIC(application specific integrated circuit), 마이크로프로세서, 하드웨어 제어 로직, FSM(hardware finite state machine), DSP(digital signal processror), FPGA, 또는 그것들의 조합을 포함할 수 있다.
도 3은 도 2의 데이터 프리프로세서(208)의 스필릿 기능에 대한 예시적인 동작도를 보여준다. 도 3은 데이터 프리프로세서(208) 또는 더 일반적으로 도 2의 인-스토리지 프로세싱 코디네이터(204)의 입력으로서의 어플리케이션 데이터(214)를 보여준다. 도 3은 도 2에서 언급된 데이터 프리프로세서(208)에 의해 수행되는 데이터 포맷의 예시적인 한 방법을 보여준다. 이 예시에서, 데이터 포맷은 스플릿 기능 또는 스플릿 기법이다. 도 3은 또한 데이터 프리프로세서(208)의 출력으로서의 포맷된 데이터를 보여준다.
이 예시에서, 어플리케이션 데이터(214)의 양은 전송 길이(302)로 늘어날 수 있는 것으로 도시되었다. 전송 길이(302)는 어플리케이션(202)에 의해 데이터 프리프로세서(208) 또는 그 반대로 전송되는 데이터의 또는 정보의 양을 나타낸다. 전송 길이(302)는 고정된 크기이거나 또는 인-스토리지 프로세싱을 위해 전송되는 어플리케이션(202)에 따라 가변적일 수 있다.
이 예시에서, 어플리케이션 데이터(214)는 어플리케이션 유닛(304)을 포함할 수 있다. 어플리케이션 유닛들(304)은 어플리케이션 데이터(214) 내의 필드들이거나 또는 어플리케이션 데이터(214)의 부분들일 수 있다. 각 어플리케이션 유닛들(304)은 크기가 고정되거나 또는 가변적일 수 있다. 예시로서, 어플리케이션 유닛들(304)은 어플리케이션 데이터(214)의 청크들 또는 분할된 부분을 나타낼 수 있다.
예시로서, 어플리케이션 유닛들(304) 각각의 크기는 어플리케이션 데이터(214)에 걸쳐 동일할 수 있다. 또한, 예시로서, 어플리케이션 데이터(214)에 걸쳐 어플리케이션 유닛들(304) 각각의 크기는 어플리케이션 데이터(214)의 다른 전송들을 위해 다를 수 있다. 또 다른 예시로서, 어플리케이션 유닛들(304) 각각의 크기는 동일한 전송 또는 가로지르는 전송들 내에서 변할 수 있다. 어플리케이션 유닛들(304)은 또한 어플리케이션 데이터(214)를 전송하는 다른 어플리케이션들(202)에 따라 크기가 변할 수 있다. 어플리케이션 유닛들(304)의 수는 변하거나 또는 고정될 수 있다. 어플리케이션 유닛들(304)의 수는 어플리케이션 데이터(214)를 전송하는 동일한 어플리케이션에 대해 또는 다른 어플리케이션들(202) 사이에서 변할 수 있다.
도 3은 데이터 프리프로세서(208)의 출력으로서의 포맷된 데이터(216)를 보여준다. 포맷된 데이터(216)는 포맷된 유닛들(306, FUs)을 포함할 수 있다. 포맷된 유닛들(306)은 포맷된 데이터(216) 내의 필드들이다. 이 예시에서, 각 포맷된 유닛들(306)은 크기가 고정되거나 또는 가변적일 수 있다. 포맷된 유닛들(306)의 크기는 포맷된 데이터(216)에 대해 동일 또는 포맷된 데이터(216)의 전송들에 대해 다를 수 있고, 또는 동일한 전송 또는 가로지르는 전송들 내에서 변할 수 있다. 포맷된 유닛들(306)은 또한 포맷된 데이터(216)를 전송하는 다른 어플리케이션들(202)에 따라 크기가 변할 수 있다. 포맷된 유닛들(306)의 수는 변하거나 또는 고정될 수 있다. 포맷된 유닛들(306)의 수는 포맷된 데이터(216)를 전송하는 동일한 어플리케이션에 대해 또는 다른 어플리케이션들(202) 사이에서 변할 수 있다.
도 3은 어플리케이션 유닛들(304)과 시각적으로 오버레이(overlay)된 포맷된 유닛들(306)과 함께 스플릿 포맷팅한 후의 포맷된 데이터(216)를 보여준다. 이 스플릿 포맷팅 또는 스플릿 기법에 대한 예시적인 스토리지 어플리케이션은 스토리지 그룹(206)으로서의 RAID 시스템들, 또는 스토리지 그룹(206)의 복수의 스토리지 장치들(218) 중 적어도 일부를 구비할 수 있다. 인-스토리지 프로세싱, 또는 어플리케이션 데이터(214)의 단순한 저장조차도 스토리지 그룹(206)의 다른 목적 장치들로의 어플리케이션 유닛들(304)의 스플리팅(splitting)을 적어도 포함할 수 있다.
설명을 계속하여, 데이터 프리프로세서(208)는 어플리케이션 데이터(214)를 포맷된 유닛들(306)로서 나타낸 미리 정의된 고정된 길이의 블록들로 스플릿할 수 있고 그리고 각 블록을 예를 들어, 라운드 로빈 방식(round robin fashion)으로 인-스토리지 프로세싱의 하나 이상의 복수의 스토리지 장치들(218)로 제공할 수 있다. 스플릿 기법은 어플리케션 데이터(214)와 포맷된 데이터(216) 사이에 비-정렬된 데이터 집합들을 생성할 수 있다. 구체적인 예시로서, 데이터 프리프로세서(208)는 포맷된 유닛들(306)에 대한 바운더리들에 관하여 어플리케이션 유닛들(304) 사이에 비-정렬을 생성할 수 있다.
이 예시에 추가로, 도 3은 스토리지 그룹(206)의 다른 장치들에 대한 어플리케이션 유닛들(304)의 대안적인 포맷팅 또는 할당을 보여준다. 이 예시에서, 어플리케이션 유닛들(304)은 "Data 1", "Data 2", "Data 3", 내지 "Data K"로 도시되었다. 포맷된 유닛들(306)은 "FU1", "FU2", 내지 "FU N"으로 도시되었다.
더 구체적인 예시로서, 포맷된 데이터(216)는 스토리지 그룹(206)의 한 장치 또는 또 다른 장치에 대해 목적된 대안적인 예들을 가질 수 있다. 즉, 예를 들어, 홀수번들의 "FU"들은 1을 구동하기 위한 것일 수 있고 그리고 짝수번들의 "FU"들은 0을 구동하기 위한 것일 수 있다. "Data"로서 어플리케이션 유닛들(304)의 오버레이(overlay)는 "FU'의 바운더리들과 정렬되지 않은 것으로 도시되었고 그리고 도 3은 FU 1(1을 구동)과 FU 2(0을 구동) 사이에 스플릿되는 "Data 2" 및 "Data K"를 이 예시를 위해 다시 도시한다.
추가적인 예시로서, 포맷된 데이터(216)는 또한 스토리지 그룹(206)의 스토리지 장치들(218)의 다른 예들에 파티션되거나 또는 할당되는 것이 아니라 스토리지 장치(218) 중 하나에 저장될 수 있다. 이 예시에서, 포맷된 유닛들(306)은 하드 디스크 드라이브 또는 솔리드 스테이트 드라이브와 같은 스토리지 장치들 중 하나의 물리 블록 어드레스 또는 논리 블록 어드레스에 기초하는 섹터에 대한 크기일 수 있다.
스플릿 기능에 대한 구체적인 예시로서, 요청 분배기(210)는 스토리지 그룹(206)의 스토리지 장치들(218)로 제 N 번째까지의 인-스토리지 프로세싱 어플리케이션 요청들(220)을 처음에 전송할 수 있다. 여기에서, N은 정수이다. "Data 2" 및 "Data K"와 같은, 포맷된 유닛들(306)과 정렬되지 않은 어플리케이션 유닛들(304)은 인-스토리지 프로세싱과 함께 스토리지 장치들(218)에서 추가적인 프로세싱을 겪는다.
예를 들어, 비-정렬된 어플리케이션 유닛들(304)은 도 1의 호스트 컴퓨터(102), 요청 분배기(210), 또는 다른 스토리지 장치들(218)에 의한 어플리케이션 데이터(214)의 초기 프로세싱 후 결정될 수 있다. 비-정렬된 어플리케이션 유닛들(304)은 비-정렬된 어플리케이션 유닛들(304)이 호스트 컴퓨터(102), 요청 분배기(210), 스토리지 그룹(206)의 스토리지 장치들(218), 또는 그것들의 조합에 의해 동시에 처리될 수 있도록 하기 위해 호스트 컴퓨터(102) 또는 요청 분배기(210)에 의해 페치될 수 있다. 비-정렬된 어플리케이션 유닛들(304)은 또한 이러한 비-정렬된 어플리케이션 유닛들(304)이 인-스토리지 프로세싱을 위해 그 장치들에 다시 쓰여질 수 있도록 호스트 컴퓨터(102) 또는 요청 분배기(210)에 의해 페치될 수 있다. 각 스토리지 장치들(218)은 호스트 컴퓨터(102) 또는 다른 스토리지 장치들(218)이 어플리케이션 데이터(214)의 처리를 계속할 수 있도록 처리된 비-정렬된 어플리케이션 유닛들(304)의 결과들을 호스트 컴퓨터(102), 요청 분배기(210), 또는 다른 스토리지 장치들(218)로 전송할 수 있다.
도 4는 도 2의 데이터 프리프로세서(208)의 스플릿+패딩 기능에 대한 예시적인 동작도를 보여준다. 도 4는 도 3에서 설명된 것과 유사하게 데이터 프리프로세서(208)로의 입력으로서의 어플리케이션 데이터(214)를 도시한다. 도 4는 또한 데이터 프리프로세서(208)의 출력으로서 포맷된 데이터(216)를 도시한다. 도 4는 도 2에서 언급된 것과 같이 데이터 프리프로세서(208)에 의해 수행되는 데이터 포맷 방법의 일 예시를 도시한다. 이 예시에서, 데이터 포맷팅은 스플릿+패딩 기능 또는 스플릿+패딩 기법이다.
이 예시에서, 데이터 프리프로세서(208)에 의한 스플릿+패딩 기능은 어플리케이션 유닛들(304)을 포맷된 유닛들(306)에 정렬시키기 위해 데이터 패드들(402)을 더한다. 어플리케이션 유닛들(304) 및 포맷된 유닛들(306)의 정렬은 도 2의 요청 분배기(210)가 K 번째까지의 독립적인 인-스토리지 프로세싱 어플리케이션 요청들(220)을 도 2의 스토리지 그룹(206)의 복수의 스토리지 장치들(218)에 전송하는 것을 허용한다. 여기에서, K는 정수이다. 즉, 이러한 정렬은 복수의 스토리지 장치들(218) 각각이 포맷된 데이터(216)에 요구되는 추가적인 포맷팅 또는 프로세싱을 요구하지 않고 어플리케이션 유닛들(304), 포맷된 유닛들(306), 또는 그것들의 조합의 인-스토리지 프로세싱을 독립적으로 수행하도록 허용한다.
구체적인 예시로서, 포맷된 유닛들(306) 각각은 어플리케이션 유닛들(304) 중 하나와 데이터 패드들(402)들 중 하나를 포함한다. 데이터 패드들(402) 각각은 어플리케이션 유닛들(304) 각각을 포맷된 유닛들(306) 각각의 바운더리들에 정렬시킨다. 데이터 패드들(402)은 또한 다른 기능들을 제공하거나 또는 다른 정보를 포함할 수 있다. 예를 들어, 데이터 패드들(402)은 패리티, ECC 보호, 메타-데이터, 등과 같은, 에러 탐지 또는 에러 정정 정보를 포함할 수 있다.
데이터 패드들(402)은 포맷된 유닛들(306) 내의 수많은 다른 위치들에 배치되거나 또는 위치할 수 있다. 예를 들어, 데이터 패드들(402) 중 하나는 도 4에서 도시된 바와 같이 어플리케이션 유닛들(304) 중 하나의 끝에 위치할 수 있다. 예를 들어, 데이터 패드들(402) 각각은 또한 포맷된 유닛들(306) 각각의 시작 그리고 각 어플리케이션 유닛들(304) 전에 위치할 수 있다. 예를 들어, 각 데이터 패드들(402)은 각 포맷된 유닛들(306)을 가로지르고 그리고 각 어플리케이션 유닛들(304) 내에서 균일하게 또는 불균일하게 분산될 수 있다.
예시로서, 각 데이터 패드들(402)의 크기는 각 어플리케이션 유닛들(304) 및 각 포맷된 유닛들(306) 사이의 크기 차이에 의존할 수 있다. 데이터 패드들(402)은 각 포맷된 유닛들(306)에 대해 동일할 수 있거나 또는 변할 수 있다. 예를 들어, 용어 크기는 포맷된 유닛들(306), 어플리케이션 유닛들(304), 또는 그것들의 조합에 대한 비트들 또는 심볼들의 수를 나타낼 수 있다. 용어 크기는 또한 포맷된 유닛들(306), 어플리케이션 유닛들(304), 또는 그것들의 조합에 대한 전송 시간, 기록 시간, 또는 그것들의 조합을 나타낼 수 있다.
이 예시에서, 어플리케이션 데이터(214)의 크기는 도 3에서 설명된 바와 유사하게 전송 길이(302)를 측정하기 위해 도시되었다. 이 예시에서, 어플리케이션 유닛들(304)은 "Data 1", "Data 2", "Data 3", 내지 "Data K"로 도시되었다. 이 예시에서, 포맷된 유닛들(306)은 "FU 1", FU 2", 내지 "FU N"으로 도시되었다.
도 4는 어플리케이션 유닛들(304) 및 데이터 패드들(402)과 시각적으로 오버레이된 포맷된 유닛들(306)과 함께 스플릿+패딩 포맷팅 후의 포맷된 데이터(216)를 도시한다. 이 스플릿+패딩 포맷팅 또는 기법에 대한 스토리지 어플리케이션의 예시는 스토리지 그룹으로서의 RAID(redundant array of inexpecsive disk) 시스템 또는 스토리지 그룹(206)의 복수의 스토리지 장치들(218)의 적어도 일부와 함께 사용될 수 있다. 인-스토리지 프로세싱 또는 심지어 어플리케이션 데이터(214)의 단순한 저장은 어플리케이션 유닛들(304)을 스토리지 그룹(206)의 다른 목적지 장치들에 스플릿+패딩하는 것을 적어도 포함할 수 있다.
이 예시에 대한 설명을 계속하여, 데이터 프리프로세서(208)는 어플리케이션 데이터(214)를 데이터 패드들(402)과 함께 미리 정의된 길이로 스플릿할 수 있고, 그리고 인-스토리지 프로세싱을 위해 하나 이상의 스토리지 장치들(218)에 각각의 길이를 줄 수 있다. 길이는 어플리케이션 유닛들(304)의 어떠한 수를 포함할 수 있다. 구체적인 예시로서, 어떠한 길이의 포맷된 데이터(216)는 스토리지 그룹(206)의 복수의 스토리지 장치들(218) 중 하나 이상의 장치들에 타겟될 수 있다.
도 5는 도 2의 데이터 프리프로세서의 스플릿+리던던시 기능에 대한 예시적인 동작도를 보여주는 도면이다. 도 5는 도 3에서의 설명과 유사하게 어플리케이션 데이터(214)를 데이터 프리프로세서(208)에 대한 입력으로 도시한다. 어플리케이션 데이터(214)는 어플리케이션 유닛들(304)을 포함할 수 있다.
도 4는 또한 도 3에서의 설명과 유사하게 포맷된 데이터(216)를 데이터 프리프로세서(208)의 출력으로 도시한다. 포맷된 데이터(216)는 포맷된 유닛들(306)을 포함할 수 있다.
이 예시에서, 스플릿+리던던시 기능은 정렬된 그리고 비정렬된 어플리케이션 유닛들(304)을 처리할 수 있다. 도 2의 스토리지 그룹(206)에 있는 스토리지 장치들(218) 각각에서의 인-스토리지 프로세싱은 정렬된 어플리케이션 유닛들(304)을 개별적으로 처리하거나, 비정렬된 어플리케이션 유닛들(304)을 개별적으로 처리하거나, 또는 동시에 그 모두를 처리할 수 있다.
이 예시에서, 데이터 프리프로세서(208)는 스플릿+리던던시 기능 또는 스플릿+리던던시 기법을 수행할 수 있다. 이 기능의 일부로서, 스플릿+패딩 기능은 어플리케이션 데이터(214)를 고정된 길이, 가변 길이, 또는 그것들의 조합의 포맷된 데이터(216)로 스플릿할 수 있다.
또한 스플릿+리던던시 기능의 일부는 리던던시 기능이다. 예시로서의 리던던시 기능에 대해, 데이터 프리프로세서(208)는 도 3에서 기술된 스플릿 기능으로서 포맷된 유닛들(306)에 비정렬되는 어플리케이션 데이터(214), 어플리케이션 유닛들(304), 또는 그것들의 조합을 조작할 필요가 없다. 이것은 도 5의 포맷된 데이터(216)의 리던던시 데이터(502)인 첫번째 열로서 도시되었다. 스플릿+리던던시 기능으로부터 생성된 포맷된 데이터(216)는 리던던시 데이터(502)를 포함한다.
예시로서, 리던던시 데이터(502)는 어플리케이션 데이터(214)를 맵핑하는 데이터 프리프로세서(208)의 출력이거나, 또는 더 구체적인 예시로서 포맷된 데이터(216)에 대한 어플리케이션 유닛들(304) 그리고 심지어 포맷된 유닛들(306)에 비정렬된 어플리케이션 유닛들(304)의 일부를 가지는 포맷된 유닛들(306)을 가로지르는 어플리케이션 dslt들(304)의 출력일 수 있다. 즉, 어플리케이션 유닛들(304)의 일부는 포맷된 유닛들(306) 중 하나의 바운더리 내에 떨어지고 그리고 이러한 어플리케이션 유닛들(304)은 정렬된 것으로 간주된다. 어플리케이션 유닛들(304)의 다른 예시들은 포맷된 유닛들(306)의 복수의 예시들을 가로지르고 그리고 이러한 어플리케이션 유닛들(304)은 비정렬된 것으로 간주된다. 구체적인 예시로서, 어플리케이션 유닛들(304)은 각 스팬(span)이 2 및 포맷된 유닛들(306)의 인접한 예시들을 가로지르는 "데이터 2" 및 "데이터 K"로서 도시되었다.
또한 예시로서, 스플릿+리던던시 기능은 어플리케이션 유닛들(304)의 일부에 대해 스플릿+패딩 기능을 수행할 수 있다. 데이터 프리프로세서(208)는 포맷된 유닛들(306)에 정렬되지 않은 어플리케이션 유닛들(304)을 저장한다. 이것은 도 5의 포맷된 데이터(216)의 두번째 열로 도시되었고 그리고 이것은 정렬된 데이터(504)이다. 이러한 특정한 것에 대해, 비정렬된 어플리케이션 유닛들(304), 데이터 프리프로세서(208)은 정렬된 데이터(504)를 형성하기 위해 도 4에서 기술된 바와 같은 스플릿+패딩 기능을 수행할 수 있다. 도 5에서 도시된 예시에서, 어플리케이션 유닛들(304) "데이터 2" 및 "데이터 K"는 포맷된 유닛들(306)의 복수의 예들에 대해 정렬되지 않거나 또는 가로지르지 않는다. 데이터 프리프로세서(208)에 의해 생성된 정렬된 데이터(504)는 리던던시 데이터(502)에 있는 비정렬된 어플리케이션 유닛들(304)의 이러한 예들에 위한 데이터 패드들(402)을 포함한다.
이 예시에서, 스플릿+리던던시 기능은 인-스토리지 프로세싱 코디네이터(204)가 스토리지 그룹(206)의 스토리지 장치들(218)로 N+M 요청들을 전송하도록 한다. 여기에서 N은 러던던시 데이터(502)에 있는 포맷된 유닛들(306)의 수를 나타낸다. 또한 M은 정렬된 데이터(504)에 있는 추가적인 포맷된 유닛들(306)을 나타낸다. 스토리지 장치들(218) 각각에서의 인-스토리지 프로세싱을 위해, 리던던시 데이터(502)의 비정렬된 어플리케이션 유닛들(304)은 무시될 수 있다.
도 6은 도 2의 데이터 프리프로세서의 미러링 기능에 대한 예시적인 동작도를 보여주는 도면이다. 도 6은 도 3에서 기술된 바와 유사하게 포맷된 데이터(216)를 데이터 프리프로세서(208)의 출력으로 도시한다. 도 2의 포맷된 데이터(216)는 도 3의 포맷된 유닛들(306)을 포함할 수 있다. 도 3의 어플리케이션 데이터(214)는 데이터 프리프로세서(208)에 의해 처리될 수 있다.
어플리케이션 데이터(214)가 이 예시에서 미러링되는 경우, 도 2의 스토리지 장치들(218)의 적어도 일부는 복제된, 또는 미러링된 것으로 언급되는 어플리케이션 데이터(214)의 전부를 수신할 수 있다. 복제된 어플리케이션 데이터(214)는 복제 데이터(602)로 언급된다. 도 6은 복수의 스토리지 장치들(218)을 복제 데이터(602)에 대해 "장치 1" 내지 "장치 r"로 도시한다. 복제된 유닛들(604)은 복제된 도 3의 어플리케이션 유닛들(304)이고 그리고 그것들은 "장치 1`" 내지 "장치 r" 상의 "데이터 1", "데이터 2", "데이터 3" 내지 "데이터 K"로 도시되었다. 스토지리 장치들(218) 중 하나는 그 스토리지 장치(218)에 대한 포맷된 데이터(216)로서 어플리케이션 데이터(214)를 저장할 수 있다. 다른 스토리지 장치들(218) 중 일부는 복제 데이터(602) 및 복제된 유닛들(604)을 저장할 수 있다.
이 예시에서, 데이터 프리프로세서(208)는 전체로서 어플리케이션 유닛들(304) 또는 어플리케이션 데이터(214)를 조작하지 않는다. 그러나, 데이터 프리프로세서(208)는 미러링 정보 및 어플리케이션 유닛들(304)을 수집 또는 저장할 수 있다. 또한, 인-스토리지 프로세싱 코디네이터(204)는 효율적이고 동시 인-스토리지 프로세싱을 위한 프로세싱의 경우 어플리케이션 데이터(214) 또는 어플리케이션 유닛들(304)을 어플리케이션(202)으로부터 수신할 수 있다.
인-스토리지 프로세싱 코디네이터(204) 또는 데이터 프리프로세서(208)는 다양한 방식으로 미러링 기능을 수행할 수 있다. 예시로서, 인-스토리지 프로세싱 코디네이터(204) 또는 데이터 프리프로세서(208)는 어플리케이션 데이터(214)를 포맷된 데이터(216)에 미러링하기 위한 팩터들에 대해 고려할 수 있다. 한 팩터는 복수의 스토리지 장치들(218)로부터의 타겟 장치들의 수이다. 다른 팩터는 어플리케이션 데이터(214), 도 3의 어플리케이션 유닛들(304), 또는 그것들의 조합의 크기이다. 또 다른 팩터는 포맷된 데이터(216), 포맷된 유닛들(306), 또는 그것들의 조합의 크기이다.
도 7은 출력 코디네이터의 예시적인 구성도를 보여주는 도면이다. 앞서 설명한 바와 같이, 출력 코디네이터(212)는 스토리지 그룹(206)의 복수의 스토리지 장치들(218) 각각으로부터 생성된 인-스토리지 프로세싱 출력들(224)을 관리하고 그리고 그것을 어플리케이션(202)으로 다시 보낼 수 있다. 출력 코디네이터(212)는 다양한 방법으로 어플리케이션(202)과의 상호작용을 관리할 수 있다.
예시로서, 출력 코디네이터(212)의 기능은 출력 하베스트(havest)(702), 출력 관리(704), 및 출력 검색(706)으로서 기술될 수 있다. 출력 하베스트(702)는 인-스토리지 프로세싱 출력들(224)을 수집하기 위한 프로세스이다. 예를 들어, 출력 하베스트(702)는 스토리지 장치들(218) 각각으로부터 인-스토리지 프로세싱 출력들(224)을 수집할 수 있고 그리고 그것들을 저장할 수 있다. 저장은 출력 하베스트(72)가 실행된 곳에서 국지적으로 완료될 수 있다. 또한, 예시로서, 출력 하베스트(702)는 스토리지 장치들(218) 각각에서의 인-스토리지 프로세싱 출력들(224)의 위치들을 수집할 수 있다.
아래는 출력 코디네이터(212), 또는 출력 하베스트(702)의 더 구체적인 예시로서의 어떻게 인-스토리지 프로세싱 출력들(224)을 스토리지 장치들(218)로부터 수집하는지에 대한 다양한 실시 예들의 예시들이다. 예시로서, 출력 코디네이터(212)는 도 2의 어플리케이션 데이터(214), 도 2의 포맷된 데이터(216), 또는 그것들의 조합이 수행된 스토리지 장치들(218) 각각으로부터 인-스토리지 프로세싱 인-스토리지 프로세싱 출력들(224) 또는 그것들의 위치들을 페치할 수 있다.
예시로서, 출력 코디네이터(212)는 다양한 방법으로 인-스토리지 프로세싱 출력들(224)을 페치할 수 있다. 예를 들어, 출력 코디네이터(212)는 스토리지 장치들(218)와 함께 DMA(direct memory access)를 이용할 수 있다. DMA 전송은 일단 전송이 셋업되면 실제 전송을 관리하기 위해 프로세서 또는 컴퓨터 자원을 요구하지 않는 전송 메커니즘이다. 또 다른 예시로서, 출력 코디네이터(212)는 스토리지 장치들(218)과 함께 PIO(progamed input/output)를 이용할 수 있다. PIO 전송은 데이터의 실제 전송을 프로세서 또는 컴퓨팅 자원들이 관리하고 그리고 전송의 종료 시점에서 셋업 및 상태 수집을 하지 않는 전송 메커니즘이다. 추가적인 예시로서, 출력 코디네이터(212)는 SATA 벤더 특정 커맨드들, PCIe, DMA, 또는 이더넷 커맨드들과 같은, 인터페이스 프로토콜 커맨드들을 이용할 수 있다.
예시로서, 스토리지 장치들(218)은 다양한 방법으로 인-스토리지 프로세싱 출력들(224)을 출력 코디네이터(212)로 전송할 수 있다. 예를 들어, 출력 코디네이터(212)는 DMA 또는 PIO 메커니즘들을 이용할 수 있다. DMA는 전송이 한 컴퓨터(예컨대, 어플리케이션(202)을 실행하는 컴퓨터)의 메모리로부터 실제 전송을 위해 그것의 운영 시스템 또는 프로세서 간섭(intervention) 모두를 포함하지 않는 다른 컴퓨터(예컨대, 인-스토리지 프로세싱을 위한 스토리지 장치들(218) 중 하나)의 그것으로 DMA 프로세스인 원격 DMA(rDMA)일 수 있다. 또 다른 예시로서, 출력 코디네이터(212)는 백드라운드 SATA 연결 또는 이더넷과 같은, 인터페이스 프로토콜 프로세스들을 이용할 수 있다.
또한, 예를 들어, 스토리지 장치들(218)은 그것의 각각의 인-스토리지 프로세싱 출력들(224) 또는 그것들의 위치들을 어플리케이션(202)으로 전송할 수 있다. 이것은 인-스토리지 프로세싱 출력들(224)이 출력 코디네이터(212)를 통과하여 지나감이 없이 수행될 수 있다. 이 예시를 위해, 스토리지 장치들(218)은 DMA, rDMA, PIO, back SATA 연결, 또는 이더넷과 같은 다양한 방식으로 상호작용할 수 있다.
출력 관리(704)에 관해, 출력 코디네이터(212)는 스토리지 장치들(218)로부터의 출력들의 순서를 관리할 수 있다. 출력 관리(704)는 출력의 크기, 출력 코디네이터(212)의 저장 용량, 및 도 2의 어플리케이션 요청들(220)의 타입들과 같은, 복수의 제약들에 기초하여 출력들을 관리할 수 있다. 출력들은 인-스토리지 프로세싱 출력들(224)일 수 있다. 예시로서, 출력 관리(704)는 다양한 정책들에 기초하여 출력들을 처리할 수 있다.
구체적인 예시로서, 출력들 또는 인-스토리지 프로세싱을 위한 도 2의 서브-어플리케이션 요청들(222) 각각에 대한 인-스토리지 프로세싱 출력들(224)은 인-스토리지 프로세싱을 위한 요청 식별(710) 당(per) 서브-요청 식별(708)에 의해 분류된 순서로 저장될 수 있다. 요청 분배기(210)는 도 2의 어플리케이션 요청(220)을 포맷된 데이터(216)과 함께 복수의 서브-어플리케이션 요청들(222)로 변환할 수 있고 그리고 그것들을 스토리지 장치들(218)로 분배한다.
각 스토리지 장치들(218)에서의 데이터 프로세싱 후, 출력 코디네이터(212)는 인-스토리지 프로세싱 출력들(224)을 각 스토리지 장치들(218)로부터 모은다. 출력 코디네이터(212)는 비록 스토리지 장치들(218)의 데이터 프로세싱 시간이 다를 수 있기 때문에 임의의 순서로 스토리지 장치들(218)로부터의 인-스토리지 프로세싱 출력들(224)이 출력 코디네이터(212)로 전달될 수 있지만, 어플리케이션 요청들(220), 서브-어플리케이션 요청들(222), 또는 그것들의 조합의 발행 순서를 보전할 필요가 있다.
이 순서를 구현하기 위한 예시로서, 도 2의 스토리지 그룹(206)은 각 인-스토리지 프로세싱 출력들(224)에 순서 번호를 할당할 수 있다. 인-스토리지 프로세싱 출력들(224) 각각은 또한 복수의 서브-출력들로 구성될 수 있다. 이러한 서브-출력들에 대해, 스토리지 그룹(206)은 또한 순서 번호들 또는 순서 식별들을 할당할 수 있다. 일단 출력 코디네이터(212)가 인-스토리지 프로세싱 출력들(224) 각각 또는 서브-출력 데이터를 스토리지 장치들(218) 각각으로부터 수신하면, 그것은 순서 번호들 또는 식별에 의해 그것들을 분류하도록 각 출력들의 순서를 유지할 수 있다. 인-스토리지 프로세싱 출력들(224) 또는 서브-출력들의 순서가 어플리케이션(202)에 대해 중요하지 않다면, 출력 코디네이터(212)는 인-스토리지 프로세싱 출력들(224)을 무작위의 방법으로 전송할 수 있다.
요청 식별(710)은 어플리케이션 요청들(220) 중 하나를 다른 것으로부터 구별하기 위해 사용될 수 있는 정보를 의미한다. 서브-요청 식별(708)은 서브-어플리케이션 요청들(222) 중 하나를 다른 것으로부터 구별하기 위해 사용될 수 있는 정보를 의미한다.
예시로서, 서브-요청 식별(708)은 요청 식별(710)의 특정 예와 구별되거나 또는 연관될 수 있다. 또 다른 예시로서, 서브-요청 식별(708)은 요청 식별(710)의 특정 예에 비제한될 수 있다.
더 구체적인 예시로서, 출력 코디네이터(212)는 출력 버퍼(712)를 포함할 수 있다. 출력 버퍼(712)는 스토리지 장치들(218)로부터의 인-스토리지 프로세싱 출력들(224)을 저장할 수 있다. 출력 버퍼(712)는 다양한 방식으로 구현될 수 있다. 예를 들어, 출력 버퍼(712)는 FIFO(first-in first-out) 회로 또는 연결 리스트 구조(linked list structure)의 하드웨어 구현일 수 있다. 또한, 예를 들어, 출력 버퍼(712)는 포인터들, 상태 플래그들 등과 같은, FIFO 동작에 대한 지능을 제공하는 소프트웨어를 구비하는 메모리 회로망과 함께 구현될 수 있다.
또한, 구체적인 예시로서, 각 서브-어플리케이션 요청들(222)에 대한 출력들 또는 인-스토리지 프로세싱 출력들(224)은 출력 버퍼(712)에 추가될 수 있다. 인-스토리지 프로세싱 출력들(224)은 서브-어플리케이션 요청들(222)의 원하는 예가 출력 버퍼(712)에 있을때까지 출력 버퍼(712)로부터 페치될 수 있다.
서브-요청 식별(708)은 연관된 인-스토리지 프로세싱 출력(224)이 출력 버퍼(712)에 저장되었는지 여부를 결정하는데 이용될 수 있다. 요청 식별(710) 또한 초기 결정과 같이, 이용될 수 있다.
다양한 실시 예들에 대한 설명을 계속하여, 출력 코디네이터(212)는 스토리지 장치들(218)로부터 인-스토리지 프로세싱 출력(224)을 수집한다. 인-스토리지 프로세싱 출력들(224)의 데이터 무결성을 보장하기 위해, 출력 코디네이터(212)는 인-스토리지 프로세싱 출력들(224) 또는 서브-출력들 데이터를 정확한 순서로 유지할 수 있다. 이를 위해, 출력 코디네이터(212)는 서브-요청 식별(708) 또는 요청 시별(710)을 이용할 수 있다(예컨대, 스토리지 장치들(218) 각각의 인-스토리지 프로세싱 출력(224) 각각이 그것들의 출력 순서 번호 또는 출력 순서 식별로서 동일한 식별을 재사용하다면). 스토리지 장치들(218)의 각 프로세싱 시간들이 다를 수 있기 때문에, 출력 코디네이터(212)는 그것들을 모두 순차적(즉, 정확한 데이터 순서)으로 만들기 위해 인-스토리지 프로세싱 출력들(224) 또는 서브-출력 데이터를 출력 버퍼(712)에 일시적으로 저장할 수 있다. 만약, 어떠한 미싱(missing) 인-스토리지 프로세싱 출력(224) 또는 서브-출력(즉, 시퀀스 IDs에 있는 전부)이 존재한다면, 어플리케이션(202)은 모든 인-스토리지 프로세싱 출력들(224)이 출력 버퍼(712)에 정확하게 모일때까지 출력을 얻을 수 없을 것이다.
더 구체적인 예시로서, 서브-어플리케이션 요청들(222) 각각에 대한 출력들 또는 인-스토리지 프로세싱 출력들(224)은 출력 코디네이터(212) 또는 출력 코디네이터(212)의 출력 버퍼(712)를 통과하지 않고 어플리케이션(202)으로 전송될 수 있다. 이 예시에서, 인-스토리지 프로세싱 출력들(224)은 어플리케이션(202)에 도달하기 전에 저장되지 않고 스토리지 장치들(218)로부터 전송될 수 있다.
출력 검색(706)에 관해, 일단 출력 또는 인-스토리지 프로세싱 출력들(224)이 알려졌다면, 어플리케이션(202)은 다양한 방식으로 인-스토리지 프로세싱 출력들(224)을 검색할 수 있다. 일부 실시 예들에서, 출력 검색(706)은 출력 코디네이터(212)를 통하여 지나가는 인-스토리지 프로세싱 출력들(224)을 포함할 수 있다. 다른 실시 예들에서, 출력 검색(706)은 출력 버퍼(712)를 통하여 지나기지 않고 어플리케이션(202)으로 전송되는 인-스토리지 프로세싱 출력들(224)을 포함할 수 있다.
예시로서, 출력들 또는 인-스토리지 프로세싱 출력들(224)은 스토리지 장치들(218)에서 출력 코디네이터(212)로 지나갈 수 있다. 출력 코디네이터(212)는 인-스토리지 프로세싱 출력들(224)을 출력 버퍼(712)에 저장할 수 있다. 출력 코디네이터(212)는 그 다음 인-스토리지 프로세싱 출력들(224)을 어플리케이션(202)으로 전송할 수 있다.
또한, 예시로서, 출력들 또는 인-스토리지 프로세싱 출력들(224)은 스토리지 장치들(218)에서 출력 코디네이터(212)로 지나갈 수 있다. 출력 코디네이터(212)는 인-스토리지 프로세싱 출력들(224)을 요청 분배기(210)로 전송할 수 있다. 요청 분배기(210)는 인-스토리지 프로세싱 출력들(224)을 어플리케이션(202)으로 전송할 수 있다. 예시에서, 출력 버퍼(712)는 출력 코디네이터(212), 요청 분배기(210), 또는 그것들의 조합 내에 있을 수 있다.
또 다른 예시로서, 출력들 또는 인-스토리지 프로세싱 출력들(224)은 스토리지 장치들(218)에서 어플리케이션(202)을 지나갈 수 있다. 이 예시에서, 이 전송은 인-스토리지 프로세싱 출력들(224)이 출력 코디네이터(212), 요청 분배기(210), 또는 그것들의 조합을 통하여 지나가지 않고 직접적이다.
출력 코디네이터(212)는 다양한 방식으로 구현될 수 있다. 예를 들어, 출력 코디네이터(212)는 프로세서, ASIC(application specific integrated circuit) 임베디드 프로세서, 마이크로프로세서, 하드웨어 제어 로직, 하드웨어 FSM(finite state machine), DSP(digital signal processor), FPGA, 또는 그것들의 조합과 같은, 하드웨어 회로망으로 구현될 수 있다. 또한, 예를 들어, 출력 코디네이터(212)는 소프트웨어와 함께 구현될 수 있다. 추가적인 예로서, 출력 하베스트(702), 출력 관리(702), 출력 검색(706), 또는 그것들의 조합은 앞서 설명한 예시들과 함께 하드웨어 회로망으로 또는 소프트웨어에 의해 구현될 수 있다.
유사하게 요청 분배기(210)는 다양한 방식으로 구현될 수 있다. 예를 들어, 요청 분배기(210)는 프로세서, ASIC(application specific integrated circuit) 임베디드 프로세서, 마이크로프로세서, 하드웨어 제어 로직, 하드웨어 FSM(finite state machine), DSP(digital signal processor), FPGA, 또는 그것들의 조합과 같은, 하드웨어 회로망으로 구현될 수 있다. 또한, 예를 들어, 요청 분배기(210)는 소프트웨어와 함께 구현될 수 있다.
도 8a 및 도 8b는 스플릿 및 스플릿+패딩 기능들의 보다 자세한 예시적인 동작도를 보여주는 도면이다. 도 8a 및 8b는 인-스토리지 프로세싱(ISP)-어웨어(aware) RAID에 대한 실시 예들을 도시한다. 다양한 실시 예들이 도 2의 스토리지 장치들(218) 또는 도 2의 스토리지 그룹(206)에 대한 어레이 구성에 적용될 수 있다. RAID 기능들의 예들은 스트라이핑, 미러링, 또는 그것들의 조합을 포함한다.
도 8a 및 8b는 어플리케이션 데이터(214) 및 어플리케이션 유닛들(304)의 예들을 도시한다. 어플리케이션 유닛들(304)은 도 2의 인-프로세싱 코디네이터(204)에 의해 처리될 수 있다. 도 8a 및 8b 각각은 하나의 예를 도시한다.
도 8a의 예시는 도 3에서 기술된 하나와 유사하게, 스플릿 기능을 겪는 어플리케이션 데이터(214)를 도시한다. 이 도시는 또한 RAID 어플리케이션의 스트라이핑 기능을 나타낼 수 있다.
도 8b의 예시는 도 4에서 기술된 하나와 유사하게, 스플릿+패딩 기능을 겪는 어플리케이션 데이터(214)를 도시한다. 이 도시는 또한 RAID 어플리케이션의 스트라이핑 기능을 나타낼 수 있지만 스플릿+패딩 기능을 위한 인-스토리지 프로세싱을 제공하는 다양한 실시 예들을 나타낼 수 있다.
도 8a에 대한 설명에서, 이 부분은 포맷된 데이터(216) 및 포맷된 유닛들(306)을 도시한다. 이 예시에서, 포맷된 데이터(216)는 스플릿되고 그리고 스토리지 장치들(218) 중 2개의 장치들로 전송된다. 포맷된 유닛들(306) 각각은 AU0 및 AU1을 포함할 수 있는 DEV1의 FU0과 같은 하나 이상의 어플리케이션 유닛들(304)을 포함한다. AU0, AU1, AU2, AU4 등과 같은, 이러한 어플리케이션 유닛들(304)은 각각이 완전히 포맷된 유닛들(306) 중 하나에 포함될 있거나 또는 AU3, AU6, AU8, 등과 같은, 복수의 포맷된 유닛들(306)을 가로질러 트래버스(traverse) 또는 스팬(span)될 수 있다. 도 3에서 기술된 바와 같이, 어플리케이션 유닛들(304)의 일부는 그 나머지는 그렇지 않은 반면에 포맷된 유닛들(306)과 정렬된다.
이 예시에서, 스토리지 장치들(218) 중 2개의 장치들로 전송되는 포맷된 유닛들(306)로 스플릿되는 어플리케이션 유닛들(304) 중 10개를 보여준다. 이 예시에서, AU1, AU3, AU5, AU6, 및 AU8로 표시된 어플리케이션 유닛들(304)은 정렬되지 않는다. 이러한 비정렬된 어플리케이션 유닛들(304)은 인-스토리지 프로세싱과 함께 식별될 수 있고 그리고 호스트 시스템들에 의해 개별적으로 또는 다른 스토리지 장치들(218)과 협력적으로 처리될 수 있다. 따라서, 인-스토리지 프로세싱을 위한 도 4의 어플리케이션 요청들(220)은 직렬화(serialize)될 수 있고 그리고 더 복잡한 요청 코디네이션이 요구될 수 있다.
도 8b에 대한 설명에서, 이 부분은 도 8a에서와 같이, 포맷된 데이터(216) 및 포맷된 유닛들(306)을 도시한다. 도면의 좌측에서와 같이, 이 예시는 일부 형태로 스플릿되고 그리고 스토리지 장치들(218) 중 2개의 장치들로 전송되는 포맷된 데이터(216)를 도시한다. 이 예시에서, AU0, AU1, AU2, AU3, 등과 같은 어플리케이션 유닛들(304) 각각은 도 4에서 기술된 것과 유사하게 데이터 패드들(402) 중 하나를 가지는 포맷된 유닛들(306) 중 하나와 정렬될 수 있다.
이 예시에서, ISP-어웨어 RAID에서 사용하기 위해, 어플리케이션 유닛들(304)은 전처리되고 그리고 인-스토리지 프로세싱을 위한 어플리케이션 요청들(220) 각각이 독립적인 것을 허용하는 스플릿+패딩 정책에 의해 정렬된다. 이 독립성은 비정렬된 유닛들과 비교할 때, 정렬된 어플리케이션 유닛들(304)을 가지는 포맷된 유닛들(306)을 위해 요구되는 프로세싱의 추가적인 단계가 없기 때문에 효율성, 동시 처리에 대한 기회가 극대화될 수 있다.
도 9는 본 발명의 실시 예에 따른 컴퓨팅 시스템의 예시적인 구성도를 보여주는 도면이다. 컴퓨팅 시스템(900)은 도 1의 컴퓨팅 시스템(100)의 실시 예일 수 있다.
예시로서의 이 실시 예에서, 도 9는 집중 코디네이션 모델에서의 인-스토리지 프로세싱 코디네이터(904)를 도시한다. 이 모델에서, 인-스토리지 프로세싱 코디네이터(904)는 호스트 컴퓨터(102) 및 스토리지 장치들(218)과 분리되거나 또는 그것들의 외부에 있다. 용어 분리 또는 외부는 인-스토리지 프로세싱 코디네이터(904)가 호스트 컴퓨터(102) 및 별개의 시스템 하우징에 위치할 수 있는 스토리지 장치(218)와는 별개의 시스템에 있다.
이 예시에서, 호스트 컴퓨터(102)는 도 2의 어플리케이션(202)을 실행할 수 있다. 호스트 컴퓨터(102)는 또한 파일 및 객체 서비스들을 제공할 수 있다. 이 예시에 추가로, 인-스토리지 프로세싱 코디네이터(904)는 도 1의 네트워크(120), 도 1의 데이터 스토리지 시스템(101), 호스트 컴퓨터(102)의 외부에 구현되거나, 또는 그것들의 조합의 일부로서 포함될 수 있다. 도 2 및 앞선 다른 도면들에서 설명하였듯이, 인-스토리지 프로세싱 코디네이터(904)는 요청 분배기(910), 데이터 프리프로세서(908), 및 출력 코디네이터(912)를 포함할 수 있다.
이 예시에 대한 설명을 계속하여, 스토리지 장치들(218) 각각은 인-스토리지 프로세싱 기능들을 수행한다. 스토리지 장치들(218) 각각은 인-스토리지 프로세싱 엔진(922)을 포함할 수 있다. 인-스토리지 프로세싱 엔진(922)은 그것의 각각의 스토리지 장치(218)를 위해 인-스토리지 프로세싱을 수행할 수 있다.
스토리지 장치들(218)은 컴퓨팅 시스템(100) 내의 복수의 장소들에 위치할 수 있다. 예를 들어, 스토리지 장치들(218)은 도 1의 네트워크(120)의 일부로서 도 1의 데이터 스토리지 시스템(101) 내부에, 도 1의 하드 디스크 드라이브(116) 또는 호스트 컴퓨터(102)의 외부 스토리지 내부에, 또는 도 1의 네트워크 부착 스토리지(122)의 일부로 위치할 수 있다.
집중 코디네이션 모델의 다양한 실시 예들에서, 인-스토리지 프로세싱 코디네이터(904)는 다양한 방식으로 스토리지 장치들(218)과 함께 기능할 수 있다. 예를 들어, 스토리지 장치들(218)은 RAID 0, 1, 2, 3, 4, 5, 6 및 객체 저장과 같은, 다양한 기능들을 지원하기 위해 구성될 수 있다.
인-스토리지 프로세싱 엔진(922)은 다양한 방식으로 구현될 수 있다. 예를 들어, 인-스토리지 프로세싱 엔진(922)은 소프트웨어, 하드웨어 회로망, 또는 그것들의 조합과 함께 구현될 수 있다. 하드웨어 회로망의 예시들은 프로세서, ASIC 임베디드 프로세서, 마이크로프로세서, 하드웨어 제어 로직, 하드웨어 FSM, DSP, FPGA, 또는 그것들의 조합을 포함할 수 있다.
도 10은 본 발명의 다른 실시 예에 따른 컴퓨팅 시스템의 예시적인 구성도를 보여주는 도면이다. 컴퓨팅 시스템(1000)은 도 1의 컴퓨팅 시스템(100)의 실시 예일 수 있다.
예시로서의 이 실시 예에서, 도 10은 집중 코디네이션 모델의 인-스토리지 프로세싱 코디네이터(1004)를 도시한다. 이 모델에서, 인-스토리지 프로세싱 코디네이터(1004)는 호스트 컴퓨터(102)의 내부에 있을 수 있다. 용어 내부는 인-스토리지 프로세싱 코디네이터(1004)가 호스트 컴퓨터(102)과 동일한 시스템에 있고 그리고 일반적으로 호스트 컴퓨터(102)와 동일한 시스템 하우징 내에 하우징되는 것을 나타낸다. 이 실시 예는 또한 스토리지 장치(218)와 개별적이거나 또는 스토리지 장치(218)의 외부에 위치하는 인-스토리지 프로세싱 코디네이터(1004)를 가진다.
예시로서의 이 실시 예에서, 호스트 컴퓨터(102)는 파일 객체 서비스뿐만 아니라 인-스토리지 프로세싱 코디네이터(1004)를 포함할 수 있다. 이 예시에서, 호스트 컴퓨터(102)는 도 2의 어플리케이션(202)을 실행할 수 있다. 도 2 및 앞선 다른 도면들에서 설명하였듯이, 인-스토리지 프로세싱 코디네이터(1004)는 요청 분배기(1010), 데이터 프리프로세서(1008), 출력 코디네이터(1012)를 포함할 수 있다.
이 예시에 대한 설명을 계속하여, 스토리지 장치들(218) 각각은 인-스토리지 프로세싱 기능을 수행할 수 있다. 스토리지 장치들(218) 각각은 인-스토리지 프로세싱 엔진(1022)을 포함할 수 있다. 인-스토리지 프로세싱 엔진(1022)은 그것의 각각의 스토리지 장치들(218)을 위해 인-스토리지 프로세싱을 수행할 수 있다.
스토리지 장치들(218)은 컴퓨팅 시스템(100) 내의 복수의 장소들에 위치할 수 있다. 예를 들어, 스토리지 장치들(218)은 도 1의 네트워크(120)의 일부로서 도 1의 데이터 스토리지 시스템(101) 내부에, 도 1의 하드 디스크 드라이브(116) 또는 호스트 컴퓨터(102)의 외부 스토리지 내부에, 또는 도 1의 네트워크 부착 스토리지(122)의 일부로 위치할 수 있다.
집중 코디네이션 모델의 다양한 실시 예들에서, 인-스토리지 프로세싱 코디네이터(1004)는 다양한 방식으로 스토리지 장치들(218)과 함께 기능할 수 있다. 예를 들어, 스토리지 장치들(218)은 RAID 0, 1, 2, 3, 4, 5, 6 및 객체 저장과 같은, 다양한 기능들을 지원하기 위해 구성될 수 있다.
인-스토리지 프로세싱 엔진(1022)은 다양한 방식으로 구현될 수 있다. 예를 들어, 인-스토리지 프로세싱 엔진(1022)은 소프트웨어, 하드웨어 회로망, 또는 그것들의 조합과 함께 구현될 수 있다. 하드웨어 회로망의 예시들은 도 9에서의 그것들과 유사한 예시들을 포함할 수 있다. 이 실시 예에 대한 기능들은 이후에 더 자세하게 설명될 것이다.
도 11은 본 발명의 또 다른 실시 예에 따른 컴퓨팅 시스템의 예시적인 구성도를 보여주는 도면이다. 컴퓨팅 시스템(1100)은 도 1의 컴퓨팅 시스템(100)의 실시 예일 수 있다.
예시로서의 이 실시 예에서, 도 11은 집중 코디네이션 모델에서의 인-스토리지 프로세싱 코디네이터(1104)를 도시한다. 이 예시에서, 인-스토리지 프로세싱 코디네이터(1104)는 호스트 컴퓨터(102)와 스토리지 장치들(218) 사이에서 파티션된다. 이 모델에 대한 흐름도의 추가적인 예시들은 도 15 및 도 16에서 설명된다.
도 2 및 앞선 다른 도면들에서 설명되었듯이, 인-스토리지 프로세싱 코디네이터(1104)는 요청 분배기(1110), 데이터 프리프로세서(1108), 또는 그것들의 조합을 포함할 수 있다. 예시로서의 이 실시 예에서, 데이터 프리프로세서(1108) 및 요청 분배기(1110)의 적어도 일부는 호스트 컴퓨터(102)의 내부에 있다. 용어 내부는 요청 분배기(1110) 및 데이터 프리프로세서(1108)가 호스트 컴퓨터(102)과 동일한 시스템에 있고 그리고 일반적으로 호스트 컴퓨터(102)와 동일한 시스템 하우징 내에 하우징되는 것을 나타낸다.
또한, 이 실시 예는 호스트 컴퓨터(102)와는 개별적이거나 또는 호스트 컴퓨터(102)의 외부에 위치하는 출력 코디네이터(1112) 및 요청 분배기(1110)의 적어도 일부를 가진다. 더 구체적인 예시로서, 이 실시 예는 스토리지 장치들(218)의 내부로서 출력 코디네이터(1112) 및 요청 분배기(1110)의 적어도 일부를 가진다.
이 예시에서, 호스트 컴퓨터(102)는 도 2의 어플리케이션(202)을 실행할 수 있다. 이 예시에 대한 설명을 계속하여, 스토리지 장치들(218) 각각은 인-스토리지 프로세싱 기능을 수행할 수 있다. 스토리지 장치들(218) 각각은 인-스토리지 프로세싱 엔진(1122)을 포함할 수 있다. 인-스토리지 프로세싱 엔진(1122)은 그것의 각각의 스토리지 장치(218)을 위해 인-스토리지 프로세싱을 수행할 수 있다.
스토리지 장치들(218)은 컴퓨팅 시스템(100) 내의 복수의 장소들에 위치할 수 있다. 예를 들어, 스토리지 장치들(218)은 도 1의 네트워크(120)의 일부로서 도 1의 데이터 스토리지 시스템(101) 내부에, 도 1의 하드 디스크 드라이브(116) 또는 호스트 컴퓨터(102)의 외부 스토리지 내부에, 또는 도 1의 네트워크 부착 스토리지(122)의 일부로 위치할 수 있다.
집중 코디네이션 모델의 다양한 실시 예들에서, 인-스토리지 프로세싱 코디네이터(1104)의 이 부분은 다양한 방식으로 스토리지 장치들(218)과 함께 기능할 수 있다. 예를 들어, 스토리지 장치들(218)은 RAID 1 및 객체 저장과 같은, 다양한 기능들을 지원하기 위해 구성될 수 있다.
인-스토리지 프로세싱 엔진(1122)은 다양한 방식으로 구현될 수 있다. 예를 들어, 인-스토리지 프로세싱 엔진(1122)은 소프트웨어, 하드웨어 회로망, 또는 그것들의 조합과 함께 구현될 수 있다. 하드웨어 회로망의 예시들은 도 9에서의 그것들과 유사한 예시들을 포함할 수 있다.
도 12는 집중 코디네이션 모델에서 인-스토리지 프로세싱을 위해 장치 요청들을 발행하는 컴퓨팅 시스템의 예시적인 동작도를 보여주는 도면이다. 도 12는 도 9 및 도 10에서 설명된 집중 코디네이션 모델에 대한 실시 예들을 나타낼 수 있다.
도 12는 집중 코디네이션 모델에 대한 인-스토리지 프로세싱 코디네이터(204) 그리고 요청 분배기(210)와 데이터 프리프로세서(208) 사이의 상호작용을 도시한다. 도 12는 또한 출력 코디네이터(212)를 도시한다. 도 12는 또한 스토리지 장치들(218)과 상호작용하는 인-스토리지 프로세싱 코디네이터(204)를 도시한다.
동작의 예시로서, 도 12는 스토리지 장치들(218)에 대한 쓰기 요청들과 같은, 인-스토리지 프로세싱을 위한 장치 요청들(1202)을 발행하는 인-스토리지 프로세싱 코디네이터(204)를 도시한다. 요청 분배기(210)는 어플리케이션 데이터(214)를 기입하기 위해 도 2의 어플리케이션 요청들(220)을 수신할 수 있다. 요청 분배기(210)는 또한 전송 길이(302) 및 어플리케이션 유닛(304)의 논리 바운더리(1206)뿐만 아니라 데이터 어드레스를 수신할 수 있다. 데이터 어드레스(1204)는 어플리케이션 데이터(214)에 대한 어드레스를 나타낼 수 있다. 논리 바운더리(1206)는 어플리케이션 유닛(304) 각각의 길이 또는 크기를 나타낸다.
예시에 대한 설명을 계속하여, 요청 분배기(210)는 어플리케이션 데이터(214)를 포맷된 데이터(216)로 변환하기 위해 데이터 프리프로세서(208)로 정보를 전송할 수 있다. 요청 분배기(210)는 또한 어플리케이션 데이터(214)에 대한 전송 길이를 전송할 수 있다. 어플리케이션 데이터(214)는 어플리케이션 유닛들(304) 또는 어플리케이션 유닛들(304)에 대한 논리 바운더리로서 데이터 프리프로세서(208)로 전송될 수 있다.
추가적인 예시로서, 데이터 프리프로세서(208)는 도 3의 포맷된 데이터(216) 또는 포맷된 유닛들(306)을 생성하기 위해 어플리케이션 데이터(214) 또는 어플리케이션 유닛들(304)을 변환할 수 있다. 변환의 타입들의 예시들은 도 2 및 도 3 내지 도 6에서 설명된 방법들 중 하나일 수 있다. 데이터 프리프로세서(208)는 포맷된 데이터(216) 또는 포맷된 유닛들(306)을 요청 분배기(210)로 리턴할 수 있다. 요청 분배기(210)는 포맷팅 정책들 및 포맷된 데이터(216) 또는 포맷된 유닛들(306)의 저장 또는 인-스토리지 프로세싱을 위한 정책에 기초하여 스토리지 장치들(218)에 대한 쓰기를 위한 장치 요청들(1202)을 생성하고 발행할 수 있다. 장치 요청들(1202)은 어플리케이션 요청들(220)에 기반한다.
예시들에 대한 설명을 추가로 계속하여, 스토리지 장치들(218) 각각은 인-스토리지 프로세싱 기능 또는 어플리케이션 및 인-스토리지 프로세싱 엔진(922)을 포함할 수 있다. 스토리지 장치들(218) 각각은 장치 요청들(1202) 및 포맷된 데이터(216)의 적어도 일부를 수신할 수 있다.
도식적인 목적을 위해, 비록 도 12는 장치 요청들(1202)이 모든 스토리지 장치들(218)에 대해 발행되는 것으로 도시되었지만, 요청 분배기(210)가 다르게 동작할 수 있는 것으로 이해될 수 있을 것이다. 예를 들어, 장치 요청들(1202)은 스토리지 장치들(218) 중 일부에 대해 발행될 수 있고 그리고 그것들 모두에게 발행될 필요는 없다. 또한 예를 들어, 장치 요청들(1202)은 서로 다른 시점에 발행될 수 있거나 또는 도 2에서 설명된 바와 같은 에러 처리 예시들의 일부로서 발행될 수 있다.
집중 코디네이션 모델들에 대한 구체적인 예시로서, 인-스토리지 프로세싱 코디네이터(204)는 어플리케이션(202)으로부터 모든 어플리케이션 요청들(220)을 수신할 수 있거나, 스토리지 장치들(218)에게 모든 장치 요청들(1202)을 발행할 수 있거나, 또는 그것들의 조합한 동작을 수행할 수 있다. 요청 분배기(210)는 배치 스킴(placement scheme)에 기초하여 복수의 스토리지 장치들(218)에게 장치 요청들(1202)을 전송하거나 또는 분배할 수 있다. 출력 코디네이터(212)는 스토리지 장치들로부터(218)의 인-스토리지 프로세싱 출력들(224)을 수집하거나 또는 관리할 수 있다. 출력 코디네이터(212)는 그 후 도 7에서 설명된 것과 유사하게 도 2의 어플리케이션(202)으로 인-스토리지 프로세싱 출력들(224)을 전송할 수 있다.
도 13은 분산 코디네이션 모델에서 인-스토리지 프로세싱을 위해 장치 요청들을 발행하는 컴퓨팅 시스템의 예시적이 동작도를 보여주는 도면이다. 컴퓨팅 시스템(1300)은 도 11의 컴퓨팅 시스템(1100)과 유사한 것들을 포함할 수 있다. 도 13은 요청 분배기(1310) 및 데이터 프리프로세서(1308)을 포함하는 인-스토리지 프로세싱 코디네이터(1304)을 도시한다.
도 12 및 도 13 모두 스토리지 장치들(218)에 데이터를 저장하기 위한 관점에서의 컴퓨팅 시스템(1300)의 동작도의 예시를 도시한다. 즉, 도 12 및 도 13은 인-스토리지 프로세싱을 위해 스토리지 장치들(218)을 가로질러 얼마나 효율적으로데이터를 저장할 수 있는지에 대해 초점이 맞추어졌다.
도 13은 또한 장치들(1318) 각각에 있는 출력 코디네이터(1312) 및 요청 분배기(1310)의 일부를 도시한다. 도 13은 또한 장치들(1318)과 상호작용하는 인-스토리지 프로세싱 코디네이터(1304)를 도시한다.
예시적인 동작으로서, 도 13은 장치들(1318)로의 쓰기 요청들과 같은 장치 요청들(1302)을 발행하는 인-스토리지 프로세싱 코디네이터(1304)를 도시한다. 인-스토리지 프로세싱 코디네이터(1304)에 있는 요청 분배기(1310)는 도 2의 어플리케이션 데이터(214)를 쓰기위해 도 2의 어플리케이션 요청들(220)을 수신할 수 있다. 요청 분배기(1310)는 또한 도 3의 전송 길이 및 도 3의 어플리케이션 유닛들(304)의 논리 바운더리뿐만 아니라 데이터 어드레스(1204)도 수신할 수 있다. 데이터 어드레스(1204)는 어플리케이션 데이터(214)의 어드레스를 나타낼 수 있다.
예시에 대한 설명을 계속하여, 요청 분배기(1310)는 어플리케이션 데이터(214)를 도 2의 포맷된 데이터(216)로 변환하기 위해 정보를 데이터 프리프로세서(1308)에 전송할 수 있다. 요청 분배기(1310)는 또한 어플리케이션 데이터(214)에 대한 전송 길이를 전송할 수 있다. 어플리케이션 데이터(214)는 데이터 프리프로세서(1308)에 어플리케이션 유닛들(304) 또는 논리 바운더리처럼 전송될 수 있다.
예시에 대한 추가적인 설명으로, 데이터 프리프로세서(1308)는 포맷된 데이터(216) 또는 도 3의 포맷된 유닛들(306)을 생성하기 위해 어플리케이션 데이터(214) 또는 어플리케이션 유닛들(304)을 변환할 수 있다. 변환들의 타입들의 예시는 도 2 및 도 3 내지 도 6에서 설명된 방법들 중 하나일 수 있다. 데이터 프리프로세서(1308)는 포맷된 데이터(216) 또는 포맷된 유닛들(306)을 인-스토리지 프로세싱 코디네이터(1304)의 요청 분배기(1310)에 되돌려줄 수 있다. 요청 분배기(1310)는 포맷팅 정책들 및 포맷된 데이터(216) 또는 포맷된 유닛들(306)의 저장 또는 인-스토리지 프로세싱을 위한 정책에 기초하여 스토리지 장치들(218)에 대한 쓰기를 위한 장치 요청들(1202)을 생성하고 발행할 수 있다.
예시들에 대한 설명을 추가로 계속하여, 장치들(1318) 각각은 인-스토리지 프로세싱 기능 또는 어플리케이션 및 인-스토리지 프로세싱 엔진(1322)을 포함할 수 있다. 장치들(1318) 각각은 장치 요청들(1302) 및 포맷된 데이터(216)의 적어도 일부를 수신할 수 있다. 장치들(1318) 각각은 또한 출력 코디네이터(1312), 요청 분배기(1310)의 일부, 또는 그것들의 조합을 포함할 수 있다.
도식적인 목적을 위해, 비록 도 13은 장치 요청들(1302)이 모든 장치들(1318)에 대해 발행되는 것으로 도시되었지만, 요청 분배기(1310)가 다르게 동작할 수 있는 것으로 이해될 수 있을 것이다. 예를 들어, 장치 요청들(1302)은 장치들(1318) 중 일부에 대해 발행될 수 있고 그리고 그것들 모두에게 발행될 필요는 없다. 또한, 예를 들어, 장치 요청들(1302)은 서로 다른 시점에 발행될 수 있거나 또는 도 2에서 설명된 바와 같은 에러 처리 예시들의 일부로서 발행될 수 있다.
집중 코디네이션 모델들에 대한 구체적인 예시로서, 인-스토리지 프로세싱 코디네이터(1304)는 어플리케이션(202)으로부터 모든 어플리케이션 요청들(220)을 수신할 수 있거나, 장치들(1318)에게 모든 장치 요청들(1302)을 발행할 수 있거나, 또는 그것들의 조합한 동작을 수행할 수 있다. 요청 분배기(1310)는 배치 스킴(placement scheme)에 기초하여 복수의 장치들(1318)에게 장치 요청들(1302)을 전송하거나 또는 분배할 수 있다.
구체적인 예시에 대한 설명을 계속하여, 각 장치들(1318)에 있는 요청 분배기(1310)는 인-스토리지 프로세싱 코디네이터(1304)로부터 요청을 수신할 수 있다. 출력 코디네이터(1312)는 장치들(1318) 또는 장치들(1318) 중 하나로부터 인-스토리지 프로세싱 출력들(224)을 수집하거나 또는 관리할 수 있다.
또한, 집중 코디네이션 모델에 대한 구체적인 예시로서, 스토리지 그룹(206)의 구성에 따른 다양한 통신 방법들이 있다. 집중 코디네이션 모델의 장치들(1318)에 있는 요청 분배기(1310) 및 출력 코디네이터(1312)는 이후에 설명될 것이다.
도 14는 집중 코디네이션 모델의 컴퓨팅 시스템에 대한 동작도를 보여주는 도면이다. 도 14는 호스트 컴퓨터(102) 및 스토리지 장치들(218) 모두의 외부에 있는 인-스토리지 프로세싱 코디네이터(904)를 도시한다. 비록, 어플리케이션(202)이 호스트 컴퓨터(102)의 외부에 있는 것으로 도시되었지만, 어플리케이션(202)이 호스트 컴퓨터(102)의 외부뿐만 아니라 호스트 컴퓨터(102)에 의해서도 실행될 수 있음을 이해할 수 있을 것이다. 게다가, 비록 인-스토리지 프로세싱 코디네이터(904)가 도 14에서 호스트 컴퓨터(102)의 외부에 있지만, 인-스토리지 프로세싱 코디네이터(904)는 도 10과 같이, 호스트 컴퓨터(102)의 내부에 있을 수도 있음을 이해할 수 있을 것이다.
도 14, 15, 및 16은 스토리지 장치들(218)에서의 데이터 프로세싱의 관점에서의 도 13의 컴퓨팅 시스템(1300)의 예시적인 동작도를 도시한다. 즉, 도 14, 15, 및 16은 인-스토리지 프로세싱 기법과 함께 스토리지 장치들(218)에 저장된 데이터를 어떻게 효율적으로 처리/계산할지에 초점이 맞추어져 있다.
이 예시에서, 어플리케이션(202)은 인-스토리지 프로세싱을 위한 어플리케이션 요청들(220)을 호스트 컴퓨터(102)에 발행할 수 있다. 호스트 컴퓨터(102)는 어플리케이션(202)으로부터의 어플리케이션 요청들(202)에 기초하여 호스트 요청들(1402)을 발행할 수 있다. 호스트 요청들(1402)은 인-스토리지 프로세싱 코디네이터(904)로 전송될 수 있다.
인-스토리지 프로세싱 코디네이터(904)는 도 2의 포맷된 데이터(216) 및 도 3의 포맷된 유닛들(306)을 생성하기 위해 도 2의 어플리케이션 데이터(214) 및 도 3의 어플리케이션 유닛들(304)을 변환할 수 있다. 인-스토리지 프로세싱 코디네이터(904)는 또한 스토리지 장치들(218)에 대해 장치 요청들(1202)을 생성할 수 있다. 인-스토리지 프로세싱 코디네이터(904)는 또한 호스트 장치들(218)로부터 인-스토리지 프로세싱 출력들(224)을 수집 및 관리ㅎㄹ 수 있고, 그리고 집합된 출력들(1404)을 흐트 컴퓨터(102), 어플리케이션(202), 또는 그것들의 조합에 다시 전달해줄 수 있다. 집합된 출력(1404)은 스토리지 장치들(218)로부터의 인-스토리지 프로세싱 출력들(224)의 조합이다. 집합된 출력(1404)은 인-스토리지 프로세싱 출력들(224)의 연결(concantenation) 이상이다.
구체적인 예시로서, 인-스토리지 프로세싱 코디네이터(904)는 요청 분배기(910)를 포함할 수 있다. 요청 분배기(910)는 호스트 요청들(1402)처럼 어플리케이션 요청들(220)을 수신할 수 있다. 요청 분배기(910)는 호스트 요청들(1402)로부터 장치 요청들(1202)을 생성할 수 있다. 요청 분배기(910)는 또한 장치 요청들(1202)과 같은 도 7의 서브-어플리케이션 요청들(222)을 생성할 수 있다.
더 구체적인 예시로서, 인-스토리지 프로세싱 코디네이터(904)는 데이터 프리프로세서(908)를 포함할 수 있다. 데이터 프리프로세서(908)는 요청 분배기(910)를 통해 어플리케이션 요청들(220) 또는 호스트 요청들(1402)로부터 정보를 수신할 수 있다. 데이터 프리프로세서(908)는 스토리지 장치들(218) 상의 적당한 배치 스킴에 기초하여 어플리케이션 데이터(214)를 포맷할 수 있다.
또한, 구체적인 예시로서, 인-스토리지 프로세싱 코디네이터(904)는 출력 코디네이터(912)를 포함할 수 있다. 출력 코디네이터(912)는 스토리지 장치들(218)로부터 인-스토리지 프로세싱 출력들(224)을 수신할 수 있다. 출력 코디네이터(912)는 인-스토리지 프로세싱 출력들(224)을 가지고 집합된 출력(1404)을 생성할 수 있다. 이 예시에서, 출력 코디네이터(912)는 집합된 출력(1404)을 호스트 컴퓨터(102)로 되돌려줄 수 있다. 호스트 컴퓨터(102)는 또한 집합된 출력(1404)을 어플리케이션(202)으로 되돌려줄 수 있다. 어플리케이션(202)은 인-스토리지 프로세이 출력들(224), 집합된 출력(1404), 또는 그것들의 조합의 실행 및 사용을 계속할 수 있다.
이 예시에서, 스토리지 장치들(218) 각각은 인-스토리지 프로세싱 엔진(922)을 포함할 수 있다. 인-스토리지 프로세싱 엔진(922)은 장치 요청들(1202)의 특정 예를 수신하고 그리고 처리할 수 있다. 인-스토리지 프로세싱 엔진(922)은 인-스토리지 프로세싱 코디네이터(904) 또는 출력 코디네이터(912)에 대한 특정한 예시처럼 리턴될 인-프로세싱 출력(224)을 생성할 수 있다.
도 15는 하나의 출력 코디네이터를 구비하는 분산 모델에 있어서 컴퓨팅 시스템의 동작도를 보여주는 도면이다. 컴퓨팅 시스템(1500)은 도 11의 컴퓨팅 시스템(1100)일 수 있다.
이 실시 예의 동작적인 관점에서, 호스트 컴퓨터(102)는 인-스토리지 프로세싱을 위해 어플리케이션 요청(220)을 스토리지 장치들(218)에 발행할 수 있다. 호스트 컴퓨터(102) 및 스토리지 장치들(218)은 도 11에서 설명된 것과 유사하게 파티션될 수 있다. 스토리지 장치들(218) 각각은 인-스토리지 프로세싱을 수행할 수 있다. 스토리지 장치들(218) 각각은 그것의 인-스토리지 프로세싱 출력(224)을 호스트 컴퓨터(102)로부터 어플리케이션 요청(220)을 수신하는 스토리지 장치(218)로 제공할 수 있다. 이 스토리지 장치(218)는 그 다음 집합된 출력(1504)을 호스트 컴퓨터(102), 어플리케이션(202), 또는 그것들의 조합에 되돌려줄 수 있다. 어플리케이션(202)은 인-스토리지 출력들(224), 집합된 출력(1504), 또는 그것들의 조합의 실행 및 사용을 계속할 수 있다.
예시에 대한 설명을 계속하여, 어플리케이션 요청(220)은 스토리지 장치들(218) 중 하나에 발행될 수 있다. 한 스토리지 장치(218)는 어플리케이션 요청(220) 또는 장치 요청들(1202)을 다른 스토리지 장치들(218)에 발행할 수 있다. 예시로서, 어플리케이션 요청(220)을 수신하는 스토리지 장치(218)는 인-스토리지 프로세싱을 다른 스토리지 장치들(218)로 파티션하기 위해 어플리케이션 요청(220)을 분해할 수 있다. 장치 요청(1202)은 어플리케이션 요청(220) 그리고 앞선 스토리지 장치들(218)에 의한 인-스토리지 프로세싱 실행 기반의 그 파티션된 요청일 수 있다.
이 예시는 "DEV_1", "DEV_2", "DEV_3", 내지 "DEV_N"으로 표시된 많은 장치들을 도시한다. 도면에 있는 부호 "N"은 정수이다. 이 실시 예에서의 스토리지 장치들(218)은 인-스토리지 프로세싱을 수행할 수 있다. 스토리지 장치들(218) 각각은 인-스토리지 프로세싱 엔진(1522), 데이터 프리프로세서(1508), 및 출력 코디네이터(1512)를 포함하는 것으로 도시되었다.
도식적인 목적을 위해, 모든 스토리지 장치들(218)은 출력 코디네이터(1512)를 가지는 것으로 도시되었으나, 컴퓨팅 시스템(1500)이 다르게 나누어질 수 있음을 이해할 수 있을 것이다. 예를 들어, 스토리지 장치들(218)들 중 단지 하나만이 출력 코디네이터(1512)를 포함할 수 있다. 또한, 예를 들어, 각 스토리지 장치들(218)에 있는 출력 코디네이터(1512)는 서로 다르게 동작할 수 있다. 구체적인 예시로서, DEV_2 내지 DEV_N에 있는 출력 코디네이터(1512)는 다음 스토리지 장치(218)를 통과하는 경로로 동작하거나 또는 인-스토리지 프로세싱 출력(224)을 DEV_1으로 되돌려주는 경로로 동작할 수 있다. 스토리지 장치들(218) 각각은 도 7의 요청 식별(710), 도 7의 서브-요청 식별, 또는 그것들의 조합을 관리할 수 있다.
이 예시에서, 호스트 컴퓨터(102)는 DEV_1으로 표시된 스토리지 장치들(218) 중 하나에 어플리케이션 요청(220)을 전송할 수 있다. DEV_1에 있는 인-스토리지 프로세싱 엔진(1522)은 인-스토리지 프로세싱의 적절한 레벨을 수행하고 그리고 인-스토리지 프로세싱 출력(224)을 생성할 수 있다. 이 예시에서, DEV_1로부터의 인-스토리지 프로세싱 출력(224)은 제 1 출력(1524)으로 언급될 수 있다.
이 예시에 대한 설명을 계속하여, DEV_1에 있는 데이터 프리프로세서(1508)는 DEV_2, DEV_3 내지 DEV_N으로 전달될 어플리케이션 요청(220)으로부터의 정보를 포맷 또는 변환할 수 있다. DEV_2에 있는 인-스토리지 프로세싱 엔진(1522)은 인-스토리지 프로세싱 출력(224)을 생성하고 그리고 그것은 제 2 출력(1526)으로 언급될 수 있다. DEV_2에 있는 출력 코디네이터(1512)는 제 2 출력(1526)을 DEV_1로 전송할 수 있다. DEV_3에 있는 인-스토리지 프로세싱 엔진(1522)은 인-스토리지 프로세싱 출력(224)을 생성하고 그리고 그것은 제 3 출력(1528)으로 언급될 수 있다. DEV_3에 있는 출력 코디네이터(1512)는 제 3 출력(1528)을 DEV_1로 전송할 수 있다. DEV_N에 있는 인-스토리지 프로세싱 엔진(1522)은 인-스토리지 프로세싱 출력(224)을 생성하고 그리그 그것은 제 N 출력으로 언급될 수 있다. DEV_N에 있는 출력 코디네이터(1512)는 제 N 출력을 DEV_1로 전송할 수 있다. DEV_1에 있는 출력 코디네이터(1512)는 제 1 출력(1524), 제 2 출력(1526), 제 3 출력(1528) 내지 제 N 출력을 포함하는 집합된 출력(1504)을 생성한다.
도 16은 복수의 출력 코디네이터를 구비하는 분산 모델에 있어서 컴퓨팅 시스템의 동작도를 보여주는 도면이다. 컴퓨팅 시스템(1600)은 도 11의 컴퓨팅 시스템(1100)일 수 있다.
이 실시 예의 동작적인 관점에서, 호스트 컴퓨터(102)는 인-스토리지 프로셍을 위해 어플리케이션 요청(220)을 스토리지 장치들(218)에 발행할 수 있다. 호스트 컴퓨터(102) 및 스토리지 장치들(218)은 도 11에서 설명된 것과 유사하게 파티션될 수 있다. 어플리케이션 요청(220)은 스토리지 장치들(218) 중 하나에 발행될 수 있다. 스토리지 장치(218) 그 다음 인-스토리지 프로세싱을 수행할 수 있다. 어플리케이션 요청(220) 및 인-스토리지 프로세싱 결과들의 실행은 또 다른 스토리지 장치들(218)에 발행되거나 또는 전송될 수 있다. 이 프로세스는 모든 스토리지 장치들(218)에서 인-스토리지 프로세싱이 수행되고 그리고 마지막 스토리지 장치(218)가 첫 번째 스토리지 장치(218)로 결과를 리턴할 때까지 계속될 수 있다. 그 첫 번째 스토리지 장치들(218)은 그 다음 집합된 출력(1604)을 호스트 컴퓨터(102), 어플리케이션(202), 또는 그것들의 조합으로 다시 리턴한다. 어플리케이션(202)은 도 2의 인-스토리지 프로세싱 출력들(224), 집합된 출력들(1604), 또는 그것들의 조합을 실행하고 그리고 사용하는 것을 계속한다.
도식적인 목적을 위해, 이 실시 예는 집합된 출력(1604)을 호스트 컴퓨터(102)로 제공하는 DEV_1과 함께 설명되었으나, 이 실시 예가 다르게 동작할 수 있음을 이해할 수 있을 것이다. 예를 들어, 이 예시에 있는 마지막 장치 또는 DEV_N은 집합된 출력(1604)을 DEV_1 대신에 호스트 컴퓨터(102)로 다시 리턴할 수 있다.
이 예시는 "DEV_1", "DEV_2", "DEV_3", 내지 "DEV_N"으로 표시된 많은 장치들을 도시한다. 도면에 있는 부호 "N"은 정수이다. 이 실시 예에서의 스토리지 장치들(218)은 인-스토리지 프로세싱을 수행할 수 있다. 스토리지 장치들(218) 각각은 인-스토리지 프로세싱 엔진(1622), 데이터 프리프로세서(1608), 및 출력 코디네이터(1612)를 포함하는 것으로 도시되었다.
도식적인 목적을 위해, 모든 스토리지 장치들(218)은 출력 코디네이터(1612)를 가지는 것으로 도시되었으나, 컴퓨팅 시스템(1600)이 다르게 나누어질 수 있음을 이해할 수 있을 것이다. 예를 들어, 스토리지 장치들(218) 중 단지 하나만이 완전한 기능을 가지는 출력 코디네이터(1612)를 포함할 수 있다. 또한, 예를 들어, 각 스토리지 장치들(218)에 있는 출력 코디네이터(1612)는 서로 다르게 동작할 수 있다. 구체적인 예시로서, DEV_2 내지 DEV_N 에 있는 출력 코디네이터(1612)는 다음 스토리지 장치(218)를 통과하는 경로로 동작하거나 또는 집합된 출력(218)을 DEV_1으로 되돌려주는 경로로 동작할 수 있다.
이 예시에서, 호스트 컴퓨터(102)는 DEV_1로 표시된 스토리지 장치들(218) 중 하나에 어플리케이션 요청(220)을 전송할 수 있다. DEV_1에 있는 인-스토리지 프로세싱 엔진(1622)은 인-스토리지 프로세싱의 적절한 레벨을 수행하고 그리고 인-스토리지 프로세싱 출력(224)을 생성할 수 있다. 이 예시에서, DEV_1로부터의 인-스토리지 프로세싱 출력(224)은 제 1 출력(1524)으로 언급될 수 있다. 이 예시에서, DEV_1은 DEV_2에 인-스토리지 프로세싱을 파티션하기 위해 어플리케이션 요청(220)을 분해할 수 있다. 도 12의 장치 요청(1202)은 어플리케이션 요청(220) 그리고 앞선 스토리지 장치들(218)에 의한 인-스토리지 프로세싱 실행 기반의 그 파티션된 요청일 수 있다. 분해 및 파티션하는 이 프로세스는 DEV_N을 통해 계속할 수 있다.
이 예시에 대한 설명을 계속하여, DEV_1에 있는 데이터 프리프로세서(1608)는 DEV_2로 전달될 어플리케이션 요청(220)으로부터의 정보를 포맷 또는 변환할 수 있다. DEV_1에 있는 데이터 프리프로세서(1608)는 또한 DEV_1으로부터의 인-스토리지 프로세싱 출력(224) 또는 제 1 출력(1624)을 포맷 또는 변환할 수 있다.
이 예시에 대해 추가적으로, DEV_1에 있는 출력 코디네이터(1612)는 DEV_1에 있는 데이터 프리프로세서(1608)의 출력, 제 1 출력(1624), 어플리케이션 요청(220)의 일부, 또는 그것들의 조합을 DEV_2에 전송할 수 있다. DEV_2는 DEV_1로 전송되는 어플리케이션 요청(220)의 인-스토리지 프로세싱을 계속할 수 있다.
유사하게, DEV_2에 있는 인-스토리지 프로세싱 엔진(1622)은 제 1 출력(1624)에 기초하여 인-스토리지 프록세싱의 적절한 레벨을 수행할 수 있고 그리고 DEV_2로부터 인-스토리지 프로세싱 출력(224)을 생성할 수 있다. 이 예시에서, DEV_2로부터의 인-스토리지 프로세싱 출력(224)은 "부분적인 집합된 출력"으로서 제 2 출력(1626)으로 언급될 수 있다.
이 실시 예에 대한 설명을 계속하여, DEV_2에 있는 데이터 프리프로세서(1608)는 어플리케이션 요청(220)으로부터의 정보 또는 DEV_3으로 전송될 제 2 출력(1626)을 포맷 또는 변환할 수 있다. DEV_2에 있는 데이터 프리프로세서(1608)는 또한 DVE_2로부터의 인-스토리지 프로세싱 출력(224) 또는 제 2 출력(1626)을 포맷 또는 변환할 수 있다.
이 실시 예에 대해 추가로, DEV_2에 있는 출력 코디네이터(1612)는 DEV_2에 있는 데이터 프리프로세서(1608), 제 2 출력(1626), 어플리케이션 요청(220)의 일부, 또는 그것들의 조합을 DEV_3로 전송할 수 있다. DEV_3은 DEV_1로 전송되는 어플리케이션 요청(220)의 인-스토리지 프로세싱을 계속할 수 있다.
유사하게, DEV_3에 있는 인-스토리지 프로세싱 엔진(1622)은 제 2 출력(1626)에 기초하여 인-스토리지 프로세싱의 적절한 레벨을 수행할 수 있고 그리고 DEV_3으로부터 인-스토리지 프로세싱 출력(224)을 생성할 수 있다. 이 예시에서, DEV_3으로부터의 인-스토리지 프로세싱 출력(224)은 제 3 출력(1628)으로 언급될 수 있다.
이 실시 예에 대한 설명을 계속하여, DEV_3에 있는 데이터 프리프로세서(1608)는 어플리케이션 요청(220)으로부터의 정보 또는 DEV_1로 전송될 제 3 출력(1628)을 포맷 또는 변환할 수 있다. DEV_2에 있는 데이터 프리프로세서(1608)는 또한 DVE_3로부터의 인-스토리지 프로세싱 출력(224) 또는 제 3 출력(1628)을 포맷 또는 변환할 수 있다.
이 실시 예에 대해 추가로, DEV_3에 있는 출력 코디네이터(1612)는 DEV_3에 있는 데이터 프리프로세서(1608), 제 3 출력(1628), 어플리케이션 요청(220)의 일부, 또는 그것들의 조합을 DEV_1로 전송할 수 있다. DEV_1은 제 1 출력(1624), 제 2 출력(1626), 및 제 3 출력(1628)에 기초하는 집합된 출력(1604)을 호스트 컴퓨터(102) 또는 어플리케이션(202)으로 리턴할 수 있다.
이 예시에서, 이전의 스토리지 장치(218)를 따르는 스토리지 장치들(218) 중 하나에 의한 인-스토리지 프로세싱은 그것에 앞서는 스토리지 장치들(218)의 인-스토리지 프로세싱 출력들(224)을 집합할 수 있다. 즉, 제 2 출력(1626)은 제 1 출력(1624)뿐만 아니라 DEV_2로부터의 인-스토리지 프로세싱 출력(224)의 집합이다. 제 3 출력(1628)은 제 2 출력(1626)뿐만 아니라 DEV_3으로부터 인-스토리지 프로세싱 출력(224)의 집합이다.
도 17은 요청 분배기 및 데이터 프리프로세서에 대한 예시적인 흐름도를 보여주는 도면이다. 요청 분배기(210) 및 데이터 프리프로세서(208)는 예시로서 앞서 설명한 집중 또는 분산 모델에서 동작할 수 있다.
이 예시의 개관으로서, 이 흐름도는 스토리지 정책들에 기초하여 도 2의 어플리케이션 데이터(214)가 도 2의 포맷된 데이터(216)로 어떻게 변환되는지를 도시한다. 예시로서, 스토리지 정책들은 스플릿 정책, 스플릿+패딩 정책, 스플릿+리던던시 정책, 및 도 3의 포맷된 유닛들(306)에 도 3의 어플리케이션 유닛들(304)의 어떠한 청킹(chunking)도 없는 스토리지를 포함할 수 있다. 이 예시는 쓰기 요청으로서의 도 2의 어플리케이션 요청(220)을 나타낼 수 있다.
도 2의 요청 분배기(210)는 어플리케이션 요청(220)을 직접 수신하거나 또는 도 1의 호스트 컴퓨터(102)를 통해 어플리케이션 요청(220)의 일부 형태를 수신할 수 있다. 어플리케이션 요청(220)은 도 12의 데이터 어드레스, 어플리케이션 데이터(214), 도 3의 전송 길이(302), 도 12의 논리 바운더리, 또는 그것들의 조합과 같은 정보룰 포함할 수 있다.
예시로서, 요청 분배기(210)는 청크 비교(1702)를 실행할 수 있다. 청크 비교(1702)는 전송 길이를 이 실시 예에서는 RAID 시스템으로 동작하는, 스토리지 그룹(206)의 청크 크기(1704)와 비교한다. 청크 크기(1704)는 도 2의 스토리지 그룹(206)에 있는 도 2의 스토리지 장치들(218)에 저장될 저장 크기의 이산 단위(discrete unit)를 나타낸다. 예시로서, 청크 크기(1704)는 포맷된 유닛들(306) 중 하나의 크기를 나타낼 수 있다.
청크 비교(1702)는 전송 길이(302)가 청크 크기(1704)보다 더 큰지를 결정하고, 어플리케이션 요청(220)의 핸들링은 바운더리 쿼리(1706)를 계속할 수 있다. 만약 청크 비교(1702)가 전송 길이가 청크 크기(1702)보다 더 크지 않은 것으로 결정한다면, 어플리케이션 요청(220)의 핸들링은 장치 선택(1708)으로 진행할 것이다.
장치 선택(1708)과 함께 시작하는 흐름도의 브랜치는 어플리케이션 유닛들(304) 또는 어플리케이션 데이터(214)의 청킹 없는 어플리케이션 데이터(214)의 핸들링을 나타낸다. 이것의 예시는 도 6에서 설명된 미러링 기능일 수 있다.
흐름도의 이 브랜치에 대한 설명을 계속하여, 장치 선택(1708)은 스토리지 그룹(206)에 있는 어떤 스토리지 장치들(218)이 어플리케이션 요청(220)의 일부로서 어플리케이션 데이터(214)를 저장할 것인지를 결정한다. 요청 분배기(210)는 어플리케이션 요청(220)에 기초하여 적절하게 도 12의 장치 요청들(1202)을 생성할 수 있다.
어플리케이션 유닛들(304)에 대한 도 12의 논리 바운더리(1206)가 어플리케이션 요청(220)과 함께 포함되는 경우, 요청 분배기(210)는 어플리케이션 요청(220)을 도 2의 서브-어플리케이션 요청들(222)로 나누거나 또는 동일한 어플리케이션 요청들(220)을 복수의 스토리지 장치들(218)로 전송하는 것에 의해 어플리케이션 요청(220)을 분배할 수 있다.
서브-어플리케이션 요청들(222)의 예시에서, 서브-어플리케이션 요청들(222) 각각은 어플리케이션 유닛들(304)의 복수의 논리 바운더리(1206)가 되는 각 서브-어플리케이션 요청들(222)의 크기를 만들 수 있다. 서브-어플리케이션 요청들(222)은 스토리지 장치들(218)에 발행되는 장치 요청들(1202)일 수 있다.
동일한 어플리케이션 요청들(220)에 대한 예시에서, 복수의 스토리지 장치들(218)은 이러한 어플리케이션 요청들(220)을 수신할 수 있다. 도 2의 제 1 인-스토리지 프로세싱 출력(224)은 어플리케이션(202)으로 리턴되기 위해 도 2의 출력 코디네이터(212)에 의해 수용될 수 있다. 동일한 어플리케이션 요청들(220)은 스토리지 장치들(218)에 발행되는 장치 요청들(1202)일 수 있다.
어플리케이션 유닛들(304)에 대한 논리 바운더리(1206)가 포함되지 않은 경우, 요청 분배기(210)는 어플리케이션 요청(220)을 서브-어플리케이션 요청들(222)로 나눈다. 이러한 서브-어플리케이션 요청들(222)은 임의의 길이가 될 이러한 요청들 각각의 크기를 만든다. 요청들은 데이터 프리프로세서(208)에 의해 스플릿 기능으로 다루어질 수 있다. 서브-어플리케이션 요청들(222)은 스토지리 장치들(218)로 발행되는 장치 요청들(1202)일 수 있다.
요청 분배기(210), 데이터 프리프로세서(208), 또는 그것들의 조합은 장치 선택(1708)에서부터 어드레스 계산(1710)까지 계속할 수 있다. 어드레스 계산(1710)은 장치 요청들(1202)을 수신하는 스토리지 장치들(218)에 저장될 어플리케이션 데이터(214) 또는 포맷된 데이터(216)에 대한 어드레스를 계산할 수 있다. 도식적인 목적을 위해, 어드레스 계산(1710)은 요청 분배기(210) 또는 데이터 프리프로세서(208)에 의해 수행되는 것으로 설명되었지만, 어드레스 계산(1710)은 다른 곳에서도 수행될 수 있음을 이해할 수 있을 것이다. 예를 들어, 장치 요청들(1202)을 수신하는 스토리지 장치들(218)은 어드레스 계산(1710)을 수행할 수 있다. 또한, 예를 들어, 어드레스는 어드레스 계산(1710)이 도 2의 어플리케이션(202) 또는 호스트 컴퓨터(102)에 의해 수행될 수 있는 경우에 있어서의 어플리케이션 요청(220)으로부터의 패스-스루(pass-through)일 수 있다.
흐름도는 쓰기 비-청크 기능(write non-chunk function, 1712)으로 진행할 수 있다. 장치 요청(1202)을 수신하는 스토리지 장치들(218) 각각은 어플리케이션 데이터(214) 또는 포맷된 데이터(216)를 스토리지 장치(218)에 기입한다. 스토리지 장치들(218) 각각이 완전한 또는 비-청크된 형태의 어플리케이션 데이터(214)를 포함하기 때문에, 모든 어플리케이션 데이터(214) 또는 포맷된 데이터(216)는 어플리케이션 데이터(214)와 함께 스토리지 장치(218)에 의해 인-스토리지 프로세싱을 겪을 수 있다.
바운더리 쿼리(1706)로부터의 흐름도의 브랜치로 돌아와서, 바운더리 쿼리(1706)는 예시로서, 논리 바운더리(1206)가 어플리케이션 요청(220)에 제공되는지 여부를 결정한다. 만약 바운더리 쿼리(1706)가 논리 바운더리(1206)가 제공되었다고 결정한다면, 흐름도는 패딩 쿼리(1714)로 진행할 것이다. 만약 바운더리 쿼리(1706)가 논리 바운더리(1206)가 제공되지 않은 것으로 결정한다면, 흐름도는 노말 RAID 쿼리(1716)로 진행할 것이다.
노말 RAID 쿼리(1716)와 함께 시작하는 흐름도의 브랜치는 어플리케이션 유닛들(304)(또는 어플리케이션 유닛들(304)의 일부)의 청킹을 가지는 어플리케이션 데이터(214)의 핸들링을 나타낸다. 이것의 예시는 도 3에서 설명된 스플릿 기능일 수 있다. 예시로서, 흐름도의 브랜치는 비구조화된 어플리케이션 데이터(214) 또는 논리 바운더리(1206)를 가지지 않는 어플리케이션 데이터(214)를 위해 사용될 수 있다. 청크 크기(1704)는 고정된 크기 또는 가변 길이 크기일 수 있다.
흐름도의 이 브랜치에 대한 설명을 계속하여, 노말 RAID 쿼리(1716)는 어플리케이션 요청(220)이 인-스토리지 프로세싱과 같은 노말 RAID 기능을 위한 것인지 아닌지를 결정한다. 만약 그렇다면, 흐름도는 청크 기능(1718)로 진행할 것이다. 만약, 그렇지 않다면, 흐름도는 흐름도의 또 다른 부분으로 진행하거나 또는 에러 상태를 어플리케이션(202)으로 다시 리턴할 수 있다.
이 예시에서, 청크 기능(1718)은 어플리케이션 데이터(214)를 수신하기 위해 스토리지 장치들(218)에 대한 어플리케이션 데이터(214) 또는 어플리케이션 유닛들(304) 또는 그것들의 일부를 청크 크기(1704)로 스플릿할 수 있다. 예시로서, 데이터 프리프로세서(208)는 청크 크기(1704)로 변환된 어플리케이션 데이터(214)와 함께 포맷된 데이터(216) 또는 포맷된 유닛들(306)을 생성하기 위한 청크 기능(1718)을 수행할 수 있다. 데이터 프리프로세서(208)는 장치 요청들(1202)을 스토리지 장치들(218)에 발행하기 위해 요청 분배기(210)와 상호작용할 수 있다.
도식적인 목적을 위해, 청크 기능(1718)은 데이터 프리프로세서(208)에 의해 수행되는 것으로 설명되었으나, 청크 기능(1718)은 다르게 실행될 수도 있는 것으로 이해될 수 있을 것이다. 예를 들어, 장치 요청들(1202)을 수신하는 스토리지 장치들(218)은 스토리지 장치들(218)에서 인-스토리지 프로세싱의 일부로서 청크 기능(1718)을 수행할 수 있다.
이 예시에서, 흐름도는 쓰기 청크 기능(1719)으로 진행할 수 있다. 쓰기 청크 기능(1719)은 스토리지 장치들(218)에서 인-스토리지 프로세싱의 예시이다. 쓰기 청크 기능(1719)은 요청 분배기(210)으로부터 장치 요청들(1202)을 수신하는 스토리지 장치들(218)에 포맷된 데이터(216) 또는 포맷된 유닛들(306)을 기입한다.
패딩 쿼리(1714)로부터 흐름도의 브랜치로 돌아와서, 패딩 쿼리(1714) 아래의 브랜치는 데이터 패드들(402)과 함께 어플리케이션 데이터(214) 또는 어플리케이션 유닛들(304) 또는 그것들의 일부를 핸들링하는 것을 나타낸다. 이것의 예시는 도 4에서 설명된 스플릿+패딩 기능일 수 있다.
패딩 쿼리(1714)는 어플리케이션 데이터(214) 또는 어플리케이션 유닛들(304) 또는 그것들의 일부가 포맷된 데이터(216) 또는 포맷된 유닛들(306)을 생성하기 위해 패드되어야만 하는지를 결정한다. 데이터 프리프로세서(208)는 패딩 쿼리(1714)를 수행할 수 있다.
패딩 쿼리(1714)는 어플리케이션 유닛들(304)의 패딩이 필요한지를 결정하고, 흐름도는 어플리케이션 데이터 사이징(sizing, 1720)으로 진행하고, 어플리케이션 데이터 사이징(1720)은 스플릿 - 패딩 기능을 위해 어플리케이션 데이터(214)의 데이터 크기(1722)를 계산한다. 데이터 크기(1722)는 포맷된 데이터(216)를 위해 파티션될 어플리케이션 데이터(214)의 양이다. 예시로서, 어플리케이션 데이터 사이징(1720)은 포맷된 유닛들(306) 각각에 대한 어플리케이션 유닛(304) 또는 복수의 어플리케이션 유닛들(304)의 양에 대한 데이터 크기(1722)를 결정할 수 있다. 이 예시에서, 포맷된 유닛들(306) 각각은 청크 크기(1704)이고 그리고 데이터 크기(1722)는 청크 당(per) 이다.
구체적인 예시로서, 데이터 크기(1722)는 아래의 방정식 1로 계산될 수 있다.
데이터 크기(1722) = (플루어(floor)(청크 크기(1704)/논리 바운더리(1206)))×논리 바운더리(1206) (방정식 1)
즉, 데이터 크기는 논리 바운더리(1206)로 나누어지는 청크 크기(1704)의 플루어 기능을 가지고 계산될 수 있다. 플루어 기능의 결과는 그 다음 데이터 크기(1722)를 생성하기 위해 논리 바운더리(1206)에 의해 곱해진다.
흐름도는 패딩 사이징(1724)으로 진행할 수 있다. 패딩 사이징(1724)은 각 포맷된 유닛들(306)에 대해 데이터 패드들(402)에 대한 패드 크기(1726)를 계산한다. 예시로서, 패드 사이즈(1726)는 아래의 방정식 2로 계산될 수 있다.
패드 크기(1726) = 청크 크기(1704)-패드 크기(1722) (방정식 2)
즉, 청크당 또는 포맷된 유닛들(306)당 패드 크기(1726)는 청크 크기(1704)에서 청크당 또는 각 포맷된 유닛들(306)당 데이터 크기(1722)를 빼는 것에 의해 계산될 수 있다.
흐름도는 청크 수 계산(1728)으로 진행할 수 있다. 청크 수 계산(1728)은 청그 수(1730) 또는 어플리케이션 데이터(214)에 대해 포맷된 유닛들(306)의 수를 결정한다. 청크 수(1730)는 포맷된 데이터(216)의 크기 또는 길이를 결정하는데 사용될 수 있다. 데이터 프리프로세서(208)는 청크 수 계산(1728)를 수행할 수 있다.
흐름도는 스플릿 기능(1732)으로 진행할 수 있다. 스플릿 기능(1732)은 각 포맷된 유닛들(306)에 대해 어플리케이션 데이터(214)를 데이터 크기(1722)로 나눈다. 스플릿 기능(1732)은 어플리케이션 유닛들(304)이 청크 크기(1704) 또는 포맷된 유닛들(306)과 정렬되는 포맷된 데이터(216)를 생성하는 것의 일부이다. 데이터 프리프로세서(208)는 스플릿 기능(1732)을 수행할 수 있다.
흐름도는 쓰기 패드 기능(1734)으로 진행할 수 있다. 쓰기 패드 기능(1734)은 데이터 크기(1722)로 파티션된 어플리케이션 데이터(214) 및 데이터 패드들(402)을 가지는 포맷된 데이터(216)의 쓰기의 인-스토리지 프로세싱을 수행한다. 데이터 패드들(402)은 패리티, 메타데이터, 동기화 필드, 또는 식별 필드와 같은, 추가적인 정보를 포함할 수 있다. 요청 분배기(210)는 포맷된 데이터(216)의 쓰기 패드 기능(1734)을 수행하기 위해 스토리지 장치들(218)로 장치 요청들(1202)을 전송할 수 있다.
패딩 쿼리(1714)로 되돌아와서, 패딩 쿼리(1714)가 어플리케이션 유닛들(304)의 패딩이 불필요하다고 결정하는 경우, 흐름도는 리던던시 쿼리(1736)로 진행할 수 있다. 리던던시 쿼리(1736)가 어플리케이션 데이터(214)의 리던던시가 필요하다고 결정하는 경우, 흐름도의 이 브랜치는 리던던시 기능을 나타낸다. 예시로서, 리던던시 기능은 도 6에서 설명되었다.
흐름도는 리던던시 쿼리(1736)로부터 어플리케이션 데이터 사이징(1720)으로 진행할 수 있다. 예시로서, 도 17은 패딩 쿼리(1714) 아래의 어플리케이션 데이터 사이징(1720)과는 개별적인 기능인 리던던시 쿼리(1736) 아래의 어플리케이션 데이터 사이징(1720)을 도시하지만, 2개의 기능들은 동일한 동작들을 수행할 수 있고 그리고 또한 동일한 기능일 수 있다. 리던던시 쿼리(1736) 아래의 어플리케이션 데이터 사이징(1720)은 앞서 설명된 방정식 1에서의 표현을 사용하여 계산될 수 있다.
흐름도는 청크 기능(1718)으로 진행할 수 있다. 청크 기능(1718)은 도 6에서 설명된 바와 같이 어플리케이션 데이터(214)를 포맷된 데이터(216)로 나눈다. 데이터 프리프로세서(208)는 청크 기능(1718)을 수행할 수 있다. 예시로서, 도 17은 리던던시 쿼리(1736) 아래의 청크 기능(1718)과는 개별적인 기능인 노말 RAID 쿼리(1716) 아래의 청크 기능(1718)을 도시하지만, 2개의 기능들은 동일한 동작들을 수행할 수 있고 그리고 또한 동일한 기능일 수 있다.
흐름도는 리던던시 기능(1738)으로 진행할 수 있다. 각 청크 또는 각 포맷된 유닛들(306)에 대해, 리던던시 기능(1738)은 데이터 크기(1722) 및 청크 크기(1704)의 범위에 있는 그 어플리케이션 데이터(214)를 도 6의 복제 데이터(602)를 생성하기 위한 추가적인 청크들로 복사한다.
흐름도는 쓰기 리던던시 기능(1740)으로 진행할 수 있다. 쓰기 리던던시 기능은 어플리케이션 데이터(214) 및 복제 데이터(602)를 포함하는 포맷된 데이터(216)를 기입한다. 요청 분배기(210)는 쓰기 리던던시 기능(1740)을 수행하기 위해 스토리지 장치들(218)에 장치 요청들(1202)을 발행한다. 리던던시 쿼리(1736)을 가지는 브랜치로 되돌아와서, 리던던시 쿼리(1736)가 리던던시가 불필요한 것으로 결정하는 경우, 흐름도는 노말 RAID 쿼리(1716)로 진행할 수 있다.
도식적인 목적을 위해, 흐름도는 리던던시 기능과는 별개의 스플릿+패딩 기능과 함께 설명되었지만, 흐름도는 다른 동작들을 제공할 수 있음을 이해할 수 있을 것이다. 예를 들어, 흐름도는 도 5에서 설명된 스플릿+리던던시 기능을 제공하기 위해 배열될 수 있다. 예시로서, 이것은 쓰기 패드 기능(1734) 전에 위치하는 리던던시 쿼리(1736)와 함께 실행될 수 있다. 추가적인 예시로, 위의 리던던시 기능(1736)은 복제 데이터(602)와는 반대로 도 5의 정렬된 데이터(504)를 형성하기 위해 단지 비정렬된 어플리케이션 유닛들(304) 상에서 동작하도록 수정될 수 있다. 수정된 리던던시 기능은 추가적인 쓰기 기능이 따를 것이다. 추가적인 쓰기 기능은 쓰기 패드 기능(1734)의 일부와 쓰기 리던던시 기능(1740)의 일부를 조합할 것이다. 데이터 패드들(402) 및 쓰기 리던던시 기능(1740)을 가지는 포맷된 데이터(216)의 일부를 이용하는 쓰기 패드 기능(1734)은 복제 데이터(602)와는 반대로 정렬된 데이터(504)를 기입할 수 있다.
도 18은 집중 및 분산 실시 예들에 대한 미러링 기능에 대한 예시적인 흐름도를 보여주는 도면이다. 예시로서, 집중 실시 예는 도 9의 컴퓨팅 시스템(900) 또는 도 10의 컴퓨팅 시스템(1000)일 수 있다. 예시로서, 분산 실시 예는 도 11의 컴퓨팅 시스템(1100)일 수 있다.
도 18의 좌측편의 흐름도는 집중 실시 예에 대한 예시적인 흐름도를 나타낸다. 도 18의 우측편의 흐름도는 분산 실시 예에 대한 예시적인 흐름도를 나타낸다.
집중 실시 예를 시작하면, 도 2의 요청 분배기(210)는 도 2의 어플리케이션 요청(220)을 수신할 수 있다. 어플리케이션 요청(220)은 도 12의 데이터 어드레스, 도 2의 어플리케이션 데이터(214), 및 도 3의 전송 길이(302)를 포함할 수 있다.
예를 들어, 도 2의 데이터 프리프로세서(208)는 복제 쿼리(1802)를 실행할 수 있다. 복제 쿼리(1802)는 도 6의 복제 데이터(602)가 생성되어야만 하는지 여부를 결정한다. 예시로서, 복제 쿼리(1802)는 요청되는 복제 데이터(602)의 크기 수(1804)가 0(zero)보다 큰지를 비교하는 것에 의해 이 결정을 할 수 있다. 만약 그렇다면, 흐름도는 복제 생성(1806)으로 진행할 수 있다. 만약 그렇지 않다면, 흐름도는 장치 선택(1708)으로 진행할 수 있다.
예시로서, 장치 선택(1708)은 도 17에서 설명된 것과 동일한 기능일 수 있거나 또는 동일 또는 유사한 기능을 수행할 수 있다. 흐름도는 어드레스 계산(1710)으로 진행할 수 있다. 장치 선택(1708)을 가지는 것으로서, 어드레스 계산(1710)은 도 17에서 설명된 것과 동일한 기능일 수 있거나 또는 유사한 기능을 수행할 수 있다. 흐름도는 쓰기 비-청크 기능(1712)으로 진행할 수 있다. 어드레스 계산(1710)을 가지는 것으로서, 쓰기 비-청크 기능(1712)은 도 17에서 설명된 것과 동일한 기능일 수 있거나 또는 유사한 기능을 수행할 수 있다.
예시로서, 요청 분배기(210)는 도 12의 장치 요청(1202)의 일부로서의 이러한 동작들을 포함하는 장치 선택(1708), 어드레스 계산(1710), 또는 그것들의 조합을 실행할 수 있다. 쓰기 비-청크 기능(1712)은 어플리케이션 데이터(214)를 저장하기 위해 스토리지 장치들(218) 중 하나에 의해 수행될 수 있다.
복제 쿼리(1802)로 되돌아와서, 복제 쿼리(1802)가 도 6의 복제 데이터(602)가 생성되어야만 한다고 결정하면, 흐름도는 복제 생성(1806)으로 진행할 수 있다. 예시로서, 복제 쿼리(1802)는 검색된 복제의 수(1804)가 0보다 클때 이 결정이 만들어질 수 있다.
이 예시에서, 복제 생성(1806)은 어플리케이션 데이터(214)로부터 복제 데이터(602)를 생성할 수 있다. 복제 데이터(602)는 도 6에서 설명된 것일 수 있다. 예시로서, 데이터 프리프로세서(208)는 복제 생성(1806)을 수행할 수 있다. 복제 생성(1806)은 필요하고 그리고 단지 하나가 아닌 것으로의 복제 데이터(602)의 수(1804)를 생성할 수 있다.
흐름도는 복제 준비(1808)로 진행할 수 있다. 예시로서, 요청 분배기(210)는 장치 선택(1708)에 대해 각 복제 데이터(602)를 준비할 수 있다. 복제 데이터(602)는 이미 설명한 장치 선택(1708)으로부터의 흐름도를 따라 스토리지 장치들(218)에 기입될 수 있다.
도 18이 우측편의 분산 실시 예에 대한 흐름도로 돌아와서, 요청 분배기(210)는 어플리케이션 요청(220)을 수신할 수 있다. 어플리케이션 요청(220)은 데이터 어드레스(1204), 어플리케이션 데이터(214), 전송 길이(302), 및 복제 데이터(602)의 수(1804)를 포함할 수 있다.
요청 분배기(210)는 장치 요청들(1202) 중 하나를 스토리지 장치들(218) 중 하나에 전송할 수 있다. 스토리지 장치(218)는 어드레스 계산(1710)을 수행할 수 있다. 예시로서, 어드레스 계산(1710)은 도 17 및 집중 실시 예를 위한 것에서 설명된 것과 동일한 기능일 수 있거나 또는 동일하거나 유사한 기능의 수행일 수 있다.
이 예시에서, 동일한 스토리지 장치(218)는 또한 쓰기 비-청크 기능(1712)을 수행할 수 있다. 예시로서, 쓰기 비-청크 기능(1712)은 도 17 및 집중 실시 예를 위한 것에서 설명된 것과 동일한 기능일 수 있거나 또는 동일하거나 유사한 기능의 수행일 수 있다.
흐름도는 복제 쿼리(1802)로 진행할 수 있다. 예시로서, 복제 쿼리(1802)는 집중 실시 예를 위한 것에서 설명된 것과 동일한 기능일 수 있거나 또는 동일하거나 유사한 기능의 수행일 수 있다. 만약 복제 데이터(602)에 대한 수(1804)가 0보다 크지 않다면, 추가 데이터를 기입하기 위한 프로세스는 이 특정한 어플리케이션 요청(220)에 대해서 정지한다.
만약 복제 쿼리(1802)가 복제 데이터(602)에 대한 수(1804)가 0보다 큰 것으로 결정한다면, 흐름도는 그룹 선택(1810)으로 진행할 수 있다. 그룹 선택(1810)은 동일한 복제 그룹(1812)에 있는 스토리지 장치들(218) 중에서 하나를 선택할 수 있다. 복제 그룹(1812)은 복제 데이터(214) 및 인-스토리지 프로세싱에 대한 리던던시 기능의 일부로 지정된 도 2의 스토리지 그룹(206)에 있는 도 2의 스토리지 장치들(218)의 부분이다. 요청 분배기(210)는 복제 쿼리(1802), 그룹 선택(1810), 또는 그것들의 조합을 수행할 수 있다.
흐름도는 수 업데이트(1814)로 진행할 수 있다. 수 업데이트(1814)는 복제 그룹(1812)에 쓰여질 복제 데이터(602)에 대한 수(1804)를 감소시킬 수 있다. 감소량은 1과 같은, 정수값일 수 있다. 요청 분배기(210)는 수 업데이트(1814)를 수행할 수 있다.
흐름도는 요청 생성(1816)으로 진행할 수 있다. 요청 생성(1816)은 복제 데이터(602)를 기입하기 위해 복제 그룹(1812)에 있는 또 다른 스토리지 장치들(218)에 장치 요청들(1202) 중 하나를 생성한다. 요청 분배기(210)는 요청 생성(1816)을 수행할 수 있다.
흐름도는 복제 쿼리(1802)를 루프 백(loop back, 도 18에 미도시)할 수 있고 그리고 수(1804)가 0이 될 때까지 반복될 수 있다. 이 점에서, 복제 데이터(602)는 복제 그룹(1812)에 기입된다.
도식적인 목적을 위해, 분산 실시 예는 적절한 때에 스토리지 장치들(218) 중 하나에 직렬 방식으로 기입되는 것으로 동작하는 것으로 설명되었지만, 분산 실시 예는 다르게 동작할 수도 있음을 이해할 수 있을 것이다. 예를 들어, 요청 분배기(210)는 복제 그룹(1812)에 있는 스토리지 장치들(218)에 많은 장치 요청들(1202)을 발행할 수 있고 그리고 복제 그룹에 있는 다른 스토리지 장치들(218)가 쓰기를 완료하기 직전에 복수의 스토리지 장치들(218)에 기입되도록 할 수 있다.
컴퓨팅 시스템이 어플리케이션 데이터의 인-스토리지 프로세싱을 수행할 수 있는 복수의 스토리지 장치들과 함께 인-스토리지 프로세싱을 수행하기 위한 방법들 및 장치들을 제공하는 것에 의해 효율적인 분산 프로세싱을 제공하는 것을 알 수 있을 것이다. 어플리케이션의 실행은 스토리지 장치들에 있는 다양한 장치들 사이에서 실행을 분배하는 것에 의해 공유될 수 있다. 장치들 각각은 어플리케이션 요청에 의해 요청된 어플리케이션 데이터의 인-스토리지 프로세싱을 수행할 수 있다.
컴퓨팅 시스템이 어플리케이션 실행 및 스토리지 장치들 사이의 입/출력 횟수를 감소시키는 것에 의해 전체 시스템의 전력 소비를 감소시킬 수 있다. 이 감소는 단지 어플리케이션에 의해 저장, 읽기, 및 재저장하는 것 대신에 인-스토리지 프로세싱을 수행하는 장치들을 가지는 것에 의해 달성될 수 있다. 대신, 인-스토리지 프로세싱 출력들이 인-스토리지 프로세싱이 수행되는 다양한 장치들로부터 어플리케이션으로 집합된 출력으로서 리턴될 수 있다. 어플리케이션은 인-스토리지 출력들, 집합된 출력들, 또는 그것들의 조합의 실행 및 이용을 계속할 수 있다.
컴퓨팅 시스템이 서로 다른 구성 또는 조직의 스토리지 장치들을 위한 어플리케이션 데이터의 포맷 및 변환 기능을 제공하는 것에 의해 감소된 총 사용자 비용을 제공할 수 있음을 알 수 있을 것이다. 게다가, 컴퓨팅 시스템은 스토리지 장치들에 있는 장치들에 의해 수행될 인-스토리지 프로세싱의 형태를 위한 변환을 제공한다. 변환 또는 포맷의 형태의 예시는 스플릿, 스플릿+패딩, 스플릿+리던던시, 및 미러링을 포함한다.
컴퓨팅 시스템이 스토리지 장치들의 인-스토리지 프로세싱 출력들의 출력 코데네이션를 통해 감소된 인터럽트를 가지는 어플리케이션의 더 효율적인 실행을 제공할 수 있음을 알 수 있을 것이다. 출력 코디네이션은 인-스토리지 프로세싱 출력들을 버퍼할 수 있고 그리고 어플리케이션으로 집합된 출력들이 리턴되기 전에 인-스토리지 프로세싱 출력들 각각의 순서를 정할 수 있다. 어플리케이션은 인-스토리지 출력들, 집합된 출력들, 또는 그것들의 조합의 실행 및 이용을 계속할 수 있다.
컴퓨팅 시스템은 스토리지 그룹에 있는 장치들이 서로 다르거나 또는 동일한 기능들을 가지는 것을 허용함으로써 상호작용 방해를 더 최소화할 수 있다. 예시로서, 장치들 중 하나가 다른 장치들로부터의 모든 인-스토리지 프로세싱 출력들을 위한 단지 출력 코디네이터로 기능할 수도 있다. 추가적인 예시로서, 집합 기능은 장치들 중 하나가 완전한 집합된 출력을 어플리케이션으로 리턴할 때까지 장치에서 장치로 장치들을 따라 지나가고 부분적인 집합동작이 수행된다. 어플리케이션은 인-스토리지 출력들, 집합된 출력들, 또는 그것들의 조합의 실행 및 이용을 계속할 수 있다.
이 어플리케이션에서 설명된 모듈들은 하드웨어 구현들이거나 또는 컴퓨팅 시스템(100) 내의 하드웨어 가속기들일 수 있다. 모듈들은 또한 하드웨어 구현 또는 컴퓨팅 시스템(100) 내부 또는 외부의 하드웨어 가속기들일 수 있다.
이 어플리케이션에서 설명된 모듈들은 컴퓨팅 시스템(100)에 의해 실행행될 비-일시적 컴퓨터 판독가능 저장 매체에 저장된 명령어들로서 구현될 수 있다. 비-일시적 컴퓨터 판독가능 매체는 컴퓨팅 시스템(100)의 내부 또는 외부의 메모리를 포함할 수 있다. 비-일시적 컴퓨터 판독가능 매체는 하드 디스크, NVRAM(non-volatile random access memory), SSD(solid-state storage group), CD(compact disk), DVD(digital video disk), 또는 USB(universal serial bus) 플래시 메모리 장치들과 같은, 불휘발성 메모리를 포함할 수 있다. 비-일시적 컴퓨터 판독가능 매체는 컴퓨팅 시스템(100)의 일부로 통합될 수 있거나 또는 컴퓨팅 시스템(100)의 제거가능한 부분으로 설치될 수 있다.
도 19는 본 발명의 실시 예에 따른 컴퓨팅 시스템의 동작 방법의 흐름도를 보여주는 도면이다. 방법(1900)은 블록(1902)에서, 어플리케이션으로부터의 어플리케이션 데이터에 기초하여 포맷된 데이터를 스토리지 장치에서 인-스토리지 프로세싱을 수행하는 단계, 그리고 블록(1904)에서, 실행을 계속하기 위해 인-스토리지 프로세싱 출력을 스토리지 장치로부터 어플리케이션으로 리턴하는 단계를 포함한다.
방법(1900)은 인-스토리지 프로세싱을 수행하기 위해 어플리케이션으로부터의 어플리케이션 요청에 기초하여 스토리지 장치에서 서브-어플리케이션 요청을 수신하는 단계를 더 포함할 수 있다. 방법(1900)은 스토리지 장치를 포함하는 스토리지 그룹으로부터의 인-스토리지 프로세싱 출력들을 분류하는 단계를 더 포함할 수 있다. 방법(1900)은 스토리지 장치를 포함하는 스토리지 그룹에 어플리케이션으로부터의 어플리케이션 요청에 기초하여 장치 요청을 발행하는 단계를 더 포함할 수 있다.
방법(1900)은 스토리지 장치로부터 장치 요청을 발행하는 단계, 다른 스토리지 장치에서 장치 요청을 수신하는 단계, 또 다른 스토리지 장치에 의해 또 다른 장치 요청을 생성하는 단계, 또 다른 스토리지 장치와 다른 또 다른 장치에 의해 또 다른 장치 요청을 수신하는 단계를 더 포함할 수 있다.
방법(1900)은 집합되고 그리고 어플리케이션으로 전송될 스토리지 장치를 포함하는 스토리지 그룹에 의해 인-스토리지 프로세싱 출력들을 전송하는 단계를 더 포함할 수 있다. 방법(1900)은 어플리케이션으로 리턴될 부분적인 집합된 출력으로서 인-스토리지 프로세싱 출력을 집합하는 단계를 더 포함할 수 있다. 방법(1900)은 어플리케이션 데이터에 기초하여 포맷된 데이터를 생성하는 단계를 더 포함할 수 있다. 방법(1900)은 어플리케이션 데이터의 어플리케이션 유닛 및 데이터 패드와 함께 포맷된 데이터의 포맷된 유닛을 생성하는 단계를 더 포함할 수 있다. 방법(1900)은 어플리케이션 데이터의 어플리케이션 유닛들 및 데이터 패드들의 비정렬된 예들과 함께 포맷된 데이터의 포맷된 유닛을 생성하는 단계를 더 포함할 수 있다.
비록 상술한 발명은 이해의 명확성을 위해 자세하게 기술되었으나, 특정한 변경들 및 수정들이 첨부된 청구항들의 범위 내에서 실시될 수 있음이 분명할 것이다. 따라서, 본 실시 예들은 예시적인 것이며 제한적인 것이 아닌 것으로 간주되어야 하며, 발명은 주어진 명세서의 상세한 설명에 한정되는 것이 아니며, 첨부된 청구항들의 균등물 및 첨부된 청구항들의 범위 내에서 수정될 수 있을 것이다.
100: 컴퓨팅 시스템
102: 호스트 컴퓨터
202: 어플리케이션
204: 인-스토리지 프로세싱 코디네이터
206: 스토리지 그룹
208: 데이터 프리프로세서
210: 요청 분배기
212: 출력 코디네이터
218: 스토리지 장치

Claims (10)

  1. 컴퓨팅 시스템의 동작 방법으로서,
    어플리케이션으로부터의 어플리케이션 데이터를 포맷팅하여 포맷된 데이터를 생성하는 단계;
    상기 포맷된 데이터에 대하여 인-스토리지 프로세싱을 수행하는 단계; 그리고
    연속된 실행을 위해 인-스토리지 프로세싱 출력을 상기 어플리케이션으로 리턴하는 단계를 포함하고,
    상기 컴퓨팅 시스템은, 복수의 스토리지 장치들을 포함하는 스토리지 그룹을 포함하고,
    상기 컴퓨팅 시스템은, 집중 코디네이션 모델 및 분산 코디네이션 모델 중 하나에 따라 구성되고,
    상기 컴퓨팅 시스템이 상기 집중 코디네이션 모델에 따라 구성되는 경우, 상기 포맷된 데이터의 생성은 상기 스토리지 그룹의 외부에서 수행되고, 상기 인-스토리지 프로세싱은 상기 스토리지 그룹 내부에서 수행되고,
    상기 컴퓨팅 시스템이 상기 분산 코디네이션 모델에 따라 구성되는 경우, 상기 포맷된 데이터의 생성 및 상기 인-스토리지 프로세싱 모두 상기 스토리지 그룹 내부에서 수행되는 컴퓨팅 시스템의 동작 방법.
  2. 제 1 항에 있어서,
    상기 컴퓨팅 시스템은,
    요청 분배기를 구비하는 인-스토리지 프로세싱 코디네이터; 및
    상기 컴퓨팅 시스템이 구성되는 모델의 종류에 따라 상기 인-스토리지 프로세싱 코디네이터 및 상기 스토리지 그룹 중 하나에 배치되고, 상기 포맷된 데이터를 생성하는 데이터 프리프로세서를 더 포함하는 컴퓨팅 시스템의 동작 방법.
  3. 제 2 항에 있어서,
    상기 데이터 프리프로세서는,
    상기 컴퓨팅 시스템이 상기 집중 코디네이션 모델에 따라 구성되는 경우, 상기 인-스토리지 프로세싱 코디네이터에 배치되고,
    상기 컴퓨팅 시스템이 상기 분산 코디네이션 모델에 따라 구성되는 경우, 상기 스토리지 그룹에 배치되는 컴퓨팅 시스템의 동작 방법.
  4. 제 3 항에 있어서,
    상기 데이터 프리프로세서는,
    상기 컴퓨팅 시스템이 상기 집중 코디네이션 모델에 따라 구성되는 경우, 상기 어플리케이션 데이터를 각각이 가변적인 크기를 가지는 복수의 제 1 데이터 청크들로 나누고,
    상기 요청 분배기는,
    상기 컴퓨팅 시스템이 상기 분산 코디네이션 모델에 따라 구성되는 경우, 상기 어플리케이션 데이터를 각각이 고정된 크기를 가지는 복수의 제 2 데이터 청크들로 나누는 컴퓨팅 시스템의 동작 방법.
  5. 제 4 항에 있어서,
    상기 포맷된 데이터로의 상기 포맷팅은,
    상기 어플리케이션 데이터에 포함되는 어플리케이션 유닛들에 데이터 패드들을 부가하여 스플릿+패딩, 스플릿+리던던시 또는 이들의 조합, 및 비-정렬된 어플리케이션 유닛들을 정렬하는 것을 포함하는 컴퓨팅 시스템의 동작 방법.
  6. 제 1 항에 있어서,
    집합되고 상기 어플리케이션으로 전송될 인-스토리지 프로세싱 출력들을 상기 스토리지 장치를 포함하는 스토리지 그룹에 의해 전송하는 단계를 더 포함하는 컴퓨팅 시스템의 동작 방법.
  7. 제 1 항에 있어서,
    상기 어플리케이션으로 리턴될 부분적으로 집합된 출력으로서 인-스토리지 프로세싱 출력을 집합하는 단계를 더 포함하는 컴퓨팅 시스템의 동작 방법.
  8. 삭제
  9. 제 1 항에 있어서,
    상기 어플리케이션 데이터의 어플리케이션 유닛 및 데이터 패드와 함께 상기 포맷된 데이터의 포맷된 유닛을 생성하는 단계를 더 포함하는 컴퓨팅 시스템의 동작 방법.
  10. 제 1 항에 있어서,
    상기 어플리케이션 데이터의 비-정렬된 어플리케이션 유닛들 및 데이터 패드와 함께 상기 포맷된 데이터의 포맷된 유닛을 생성하는 단계를 더 포함하는 컴퓨팅 시스템의 동작 방법.
KR1020150190827A 2014-12-31 2015-12-31 분산 계산 가능한 스토리지 그룹을 구비하는 컴퓨팅 시스템 및 그것의 동작 방법 KR102581374B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201462098530P 2014-12-31 2014-12-31
US62/098,530 2014-12-31
US14/817,815 2015-08-04
US14/817,815 US20160191665A1 (en) 2014-12-31 2015-08-04 Computing system with distributed compute-enabled storage group and method of operation thereof

Publications (2)

Publication Number Publication Date
KR20160081851A KR20160081851A (ko) 2016-07-08
KR102581374B1 true KR102581374B1 (ko) 2023-09-21

Family

ID=56165750

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150190827A KR102581374B1 (ko) 2014-12-31 2015-12-31 분산 계산 가능한 스토리지 그룹을 구비하는 컴퓨팅 시스템 및 그것의 동작 방법

Country Status (2)

Country Link
US (2) US20160191665A1 (ko)
KR (1) KR102581374B1 (ko)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10089209B1 (en) * 2016-05-17 2018-10-02 United Services Automobile Association (Usaa) Systems and methods for locally streaming applications in a computing system
US20170344598A1 (en) * 2016-05-27 2017-11-30 International Business Machines Corporation De-Duplication Optimized Platform for Object Grouping
CN106598889A (zh) * 2016-08-18 2017-04-26 湖南省瞬渺通信技术有限公司 一种基于fpga夹层板的sata主控器
US20180278459A1 (en) * 2017-03-27 2018-09-27 Cisco Technology, Inc. Sharding Of Network Resources In A Network Policy Platform
US11755224B2 (en) * 2017-07-27 2023-09-12 EMC IP Holding Company LLC Storing data in slices of different sizes within different storage tiers
US11157356B2 (en) * 2018-03-05 2021-10-26 Samsung Electronics Co., Ltd. System and method for supporting data protection across FPGA SSDs
US11379246B2 (en) * 2019-07-24 2022-07-05 EMC IP Holding Company LLC Automatic configuration of multiple virtual storage processors
US11621798B2 (en) * 2021-02-02 2023-04-04 Cisco Technology, Inc. Signaling of preamble puncturing configuration in a non-high throughput RTS/CTS exchange
US20230280936A1 (en) * 2022-03-03 2023-09-07 Samsung Electronics Co., Ltd. Parallel processing in computational storage

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6145017A (en) * 1997-08-05 2000-11-07 Adaptec, Inc. Data alignment system for a hardware accelerated command interpreter engine
IL130029A (en) * 1998-06-17 2003-01-12 Ibm Method of increasing availability in clustered application servers
US6804676B1 (en) * 1999-08-31 2004-10-12 International Business Machines Corporation System and method in a data processing system for generating compressed affinity records from data records
US7418470B2 (en) * 2000-06-26 2008-08-26 Massively Parallel Technologies, Inc. Parallel processing systems and method
US20040066739A1 (en) * 2002-10-07 2004-04-08 Koninklijke Philips Electronics N.V. Simplified implementation of optimal decoding for COFDM transmitter diversity system
US7047359B1 (en) * 2002-12-17 2006-05-16 Storage Technology Corporation Method, system and product for managing a virtual storage system
US7146356B2 (en) * 2003-03-21 2006-12-05 International Business Machines Corporation Real-time aggregation of unstructured data into structured data for SQL processing by a relational database engine
US7334064B2 (en) * 2003-04-23 2008-02-19 Dot Hill Systems Corporation Application server blade for embedded storage appliance
US20050071546A1 (en) * 2003-09-25 2005-03-31 Delaney William P. Systems and methods for improving flexibility in scaling of a storage system
US7162571B2 (en) * 2003-12-09 2007-01-09 Emc Corporation Methods and apparatus for parsing a content address to facilitate selection of a physical storage location in a data storage system
US8578500B2 (en) * 2005-05-31 2013-11-05 Kurt James Long System and method of fraud and misuse detection
US7636801B1 (en) * 2005-06-20 2009-12-22 Symantec Operating Corporation Coordination of quality of service in a multi-layer virtualized storage environment
US8856104B2 (en) * 2009-06-16 2014-10-07 Oracle International Corporation Querying by concept classifications in an electronic data record system
US20110041005A1 (en) * 2009-08-11 2011-02-17 Selinger Robert D Controller and Method for Providing Read Status and Spare Block Management Information in a Flash Memory System
KR20110041005A (ko) * 2009-10-15 2011-04-21 아쿠아골드 주식회사 음료토출관 회동구조를 갖춘 음료토출밸브
US8892677B1 (en) * 2010-01-29 2014-11-18 Google Inc. Manipulating objects in hosted storage
US8824492B2 (en) * 2010-05-28 2014-09-02 Drc Computer Corporation Accelerator system for remote data storage
US9009569B2 (en) * 2010-10-18 2015-04-14 Xyratex Technology Limited Detection and correction of silent data corruption
US9213594B2 (en) * 2011-01-19 2015-12-15 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for managing out-of-service conditions
KR20120096329A (ko) * 2011-02-22 2012-08-30 삼성전자주식회사 신호 분석 회로를 포함하는 집적 시스템
WO2014107602A1 (en) * 2013-01-03 2014-07-10 Huawei Technologies Co., Ltd. An end-user carried location hint for content in information-centric networks
KR20150049772A (ko) * 2013-10-31 2015-05-08 에스케이하이닉스 주식회사 데이터 처리 시스템 및 그것의 동작 방법
CA2932402C (en) * 2013-12-02 2018-07-31 Qbase, LLC Design and implementation of clustered in-memory database
WO2015088416A1 (en) * 2013-12-11 2015-06-18 Telefonaktiebolaget L M Ericsson (Publ) Proxy interception
US9628107B2 (en) * 2014-04-07 2017-04-18 International Business Machines Corporation Compression of floating-point data by identifying a previous loss of precision
JP6330528B2 (ja) * 2014-07-04 2018-05-30 富士通株式会社 データ分割制御プログラム、データ分割制御方法、及び、データ分割制御装置

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
미국공개특허 제2005-0071546호(2005.03.31.) 1부.*
미국공개특허 제2005-0125625호(2005.06.09.) 1부.*
미국공개특허 제2011-0041005호(2011.02.17.) 1부.*
미국공개특허 제2012-0096329호(2012.04.19.) 1부.*
미국등록특허 제8892677호(2014.11.18.) 1부.*

Also Published As

Publication number Publication date
US20160191665A1 (en) 2016-06-30
US20230028569A1 (en) 2023-01-26
KR20160081851A (ko) 2016-07-08

Similar Documents

Publication Publication Date Title
KR102581374B1 (ko) 분산 계산 가능한 스토리지 그룹을 구비하는 컴퓨팅 시스템 및 그것의 동작 방법
US11636031B2 (en) Optimized inline deduplication
US11687423B2 (en) Prioritizing highly performant storage systems for servicing a synchronously replicated dataset
US11581943B2 (en) Queues reserved for direct access via a user application
US11438279B2 (en) Non-disruptive conversion of a clustered service from single-chassis to multi-chassis
US20220050858A1 (en) Snapshot-Based Hydration Of A Cloud-Based Storage System
US20180357019A1 (en) Recovering data within a unified storage element
US10915813B2 (en) Search acceleration for artificial intelligence
US10825477B2 (en) RAID storage system with logical data group priority
US11296944B2 (en) Updating path selection as paths between a computing device and a storage system change
US20190129818A1 (en) Calibration of flash channels in ssd
US9417964B2 (en) Destaging cache data using a distributed freezer
US8538929B2 (en) Archiving de-duplicated data on tape storage media using graph partitions
US9619404B2 (en) Backup cache with immediate availability
CN107003920B (zh) 用于处置灾难恢复群集中的多节点故障的系统和方法
US20230080046A1 (en) Online Resize of a Volume of a Distributed Storage System
US20140337667A1 (en) Managing errors in a raid
US9547616B2 (en) High bandwidth symmetrical storage controller
JP2014507028A (ja) コンピュータ・システムにおけるアプリケーション処理の管理のための方法、システム、コンピュータ・プログラム
US11513939B2 (en) Multi-core I/O trace analysis
US9298394B2 (en) Data arrangement method and data management system for improving performance using a logical storage volume
US20170017427A1 (en) Optical cold storage
US11609718B1 (en) Identifying valid data after a storage system recovery
US11256428B2 (en) Scaling raid-based storage by redistributing splits
US11513982B2 (en) Techniques for recommending configuration changes using a decision tree

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E90F Notification of reason for final refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant