KR101466592B1 - 스케일러블 스토리지 디바이스들 - Google Patents

스케일러블 스토리지 디바이스들 Download PDF

Info

Publication number
KR101466592B1
KR101466592B1 KR1020147019871A KR20147019871A KR101466592B1 KR 101466592 B1 KR101466592 B1 KR 101466592B1 KR 1020147019871 A KR1020147019871 A KR 1020147019871A KR 20147019871 A KR20147019871 A KR 20147019871A KR 101466592 B1 KR101466592 B1 KR 101466592B1
Authority
KR
South Korea
Prior art keywords
host
storage
sub
request
interfacing
Prior art date
Application number
KR1020147019871A
Other languages
English (en)
Other versions
KR20140107487A (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 KR20140107487A publication Critical patent/KR20140107487A/ko
Application granted granted Critical
Publication of KR101466592B1 publication Critical patent/KR101466592B1/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
    • 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/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4022Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
    • 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/0626Reducing size or complexity 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/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to 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/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • 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/0662Virtualisation aspects
    • G06F3/0664Virtualisation aspects at device level, e.g. emulation of a storage device or system
    • 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
    • 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/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express

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)
  • Mathematical Physics (AREA)
  • Computer Hardware Design (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Computer And Data Communications (AREA)
  • Hardware Redundancy (AREA)

Abstract

스케일러블 스토리지 디바이스들을 이용하는 기술들은 복수의 호스트-액세스가능한 스토리지 디바이스들을 단일의 논리적 인터페이스로서 표현하여, 디바이스들에 의해 구현되는 스토리지를 개념적으로 집합화한다. 디바이스들의 1차 에이전트는 호스트-인터페이스 프로토콜을 이용하여 호스트로부터 스토리지 요청들을 수락하고, 이러한 요청들을 내부적으로 처리하고 및/또는, 피어-투-피어 프로토콜을 이용하여 스토리지 디바이스들의 2차 에이전트들에 이러한 요청들을 서브-요청들로서 포워딩한다. 2차 에이전트들은 서브-요청들을 수락 및 처리하고, 1차 에이전트 및/또는 호스트에 각각의 서브-요청들에 대해 서브-상태 정보를 보고한다. 1차 에이전트는 선택적으로 호스트에 제공하기 위해 서브-상태들을 전체 상태로 누적한다. 에이전트들 사이의 피어-투-피어 통신은 선택적으로 호스트 액세스들 및/또는 오동작 복구들 동안에 리던던시 정보를 통신하는데 이용된다. 다양한 오동작 복구 기술들은 스토리지를 재할당하거나, 에이전트들을 재할당하거나, 리던던시 정보를 통해 데이터를 복구하거나, 또는 이들의 임의의 조합을 수행한다.

Description

스케일러블 스토리지 디바이스들{SCALABLE STORAGE DEVICES}
관련 출원들에 대한 교차 참조
첨부되는 출원서, 요청서, 또는 송달장(존재한다면, 적합한 것으로)에서, 본 출원에 대한 우선권 권익 주장이 이루어진다. 본 출원의 유형에 의해 허용되는 한, 본 출원은 본 출원과 출원인이 모두 동일한 다음의 출원들을 모든 목적들을 위해 인용에 의해 포함한다:
제1 발명자가 "Timothy Lawrence Canepa"이고, 발명의 명칭이 "SCALABLE STORAGE DEVICES"이며, 2010년 6월 18일 출원된 미국 임시 출원 제61/356,443호(명부 제SF-10-05호); 및
제1 발명자가 Timothy Lawrence Canepa"이고, 발명의 명칭이 "SCALABLE STORAGE DEVICES"이며, 2011년 6월 16일 출원된 미국 임시 출원 제61/497,525호(명부 제SF-10-05B호).
성능, 효율 및 이용의 유용성에서의 개선들을 제공하기 위해, 스토리지 디바이스들의 액세스에 있어서의 발전들이 요구된다.
공개적으로 또는 잘 알려진 것으로 명시적으로 식별되지 않는 한, 맥락, 정의 또는 비교의 목적들을 포함하여, 본원에서 기술들 및 개념들을 언급하는 것은, 이러한 기술들 및 개념들이 이전에 공개적으로 알려지거나 또는 그렇지 않으면 종래 기술의 일부임을 인정하는 것으로 해석되어서는 안 된다. 특허들, 특허 출원들, 및 공개 특허들을 포함하여, (있다면) 본원에서 인용된 모든 참고자료들은, 명시적으로 통합되는지 여부와 관계없이, 모든 목적들을 위해 그들 전체가 인용에 의해 본원에 통합된다.
본 발명은 프로세스, 제조물, 장치, 시스템, 재료의 조성, 및 컴퓨터 판독가능 스토리지 매체와 같은 컴퓨터 판독가능 매체(예를 들어, 디스크와 같은 광학적 및/또는 자기적 대용량 스토리지 디바이스 매체, 또는 플래시 스토리지와 같은 비휘발성 스토리지를 갖는 집적 회로) 또는 프로그램 명령들이 광학적 또는 전자적 통신 링크들을 통해 전송되는 컴퓨터 네트워크를 포함하는 수많은 방식들로 구현될 수 있다. 본 명세서에서는, 이러한 구현들 또는 본 발명이 취할 수 있는 임의의 다른 형태가 기술들로 지칭될 수 있다. 상세한 설명은, 상기 식별된 분야에서의 성능, 효율 및 이용의 유용성에 있어서의 개선을 가능하게 하는 본 발명의 하나 또는 둘 이상의 실시예들에 대한 설명을 제공한다. 상세한 설명은 상세한 설명의 나머지에 대해 보다 신속한 이해를 돕기 위한 도입부를 포함한다. 도입부는 본원에서 기술되는 개념들에 따른 시스템들, 방법들, 제조물들, 및 컴퓨터 판독가능 매체 중 하나 또는 둘 이상의 예시적인 실시예들을 포함한다. 결론부들에서 보다 상세하게 논의되는 것처럼, 본 발명은 논의된 청구범위의 범주 내에서 가능한 모든 수정들 및 변형들을 포괄한다.
도 1a는 호스트, 각각의 1차 에이전트(primary agent)들로서 동작가능한 하나 또는 둘 이상의 스토리지 디바이스들을 갖는 호스트 가시(visible) 스토리지, 및 각각의 2차 에이전트(secondary agent)들로서 동작가능한 하나 또는 둘 이상의 스토리지 디바이스들을 갖는 호스트 비-가시(invisible) 스토리지를 포함하는 스케일러블 스토리지 디바이스들을 위한 기술의 일 실시예의 선택된 구조상의 세부사항들을 도시한다.
도 1b는 호스트, 각각의 1차 에이전트들로서 동작가능한 하나 또는 둘 이상의 스토리지 디바이스들을 갖는 호스트 가시 스토리지, 및 각각의 2차 에이전트들로서 동작가능한 하나 또는 둘 이상의 스토리지 디바이스들을 갖는 호스트 비-가시 스토리지를 포함하는 스케일러블 스토리지 디바이스들을 위한 기술의 다른 실시예의 선택된 구조상의 세부사항들을 도시한다.
도 2는 1차 에이전트 및 하나 또는 둘 이상의 2차 에이전트들에 의해 수행되는 동작들을 포함하여, 스케일러블 스토리지 디바이스들을 위한 기술의 일 실시예의 선택된 처리 세부사항들을 도시한다.
도 3은 스케일러블 스토리지 디바이스들을 위한 기술의 일 실시예에서 호스트, 1차 에이전트, 및 2차 에이전트 어드레싱에 대한 선택된 세부사항들을 도시한다.
도 4는 1차 에이전트로서 동작하도록 인에이블된 스케일러블 스토리지 디바이스의 일 실시예에 대한 선택된 구조상의 세부사항들을 도시한다.
도 5는 2차 에이전트로서 동작하도록 인에이블된 스케일러블 스토리지 디바이스의 일 실시예에 대한 선택된 구조상의 세부사항들을 도시한다.
본 발명의 하나 또는 둘 이상의 실시예들에 대한 상세한 설명이, 본 발명의 선택된 세부사항들을 도시하는 첨부된 도면들과 함께 아래에서 제공된다. 본 발명은 실시예들과 관련되어 기술된다. 본원의 실시예들은 단지 예시적인 것으로 이해되어야 하고, 본 발명은 명시적으로 본원의 임의의 실시예들 또는 모든 실시예들로도 제한되지 않으며, 본 발명은 수많은 대안들, 수정들, 및 동등물들을 포괄한다. 설명의 단조로움을 피하기 위해서, (제1, 마지막, 특정, 다양한, 추가적인, 다른, 특정한, 선택, 일부 및 주목할만한을 포함하나 이에 제한되지 않는) 다양한 단어 레이블들이 실시예들의 별개의 세트들에 적용될 수 있다; 본원에서 사용될 때, 이러한 레이블들은 명시적으로 품질, 또는 임의의 형태의 선호사항 또는 편견을 전달하려는 것이 아니고, 단지 별개의 세트들 사이에서 편리하게 구분하려는 의도에 불과하다. 개시된 프로세스들의 몇몇 동작들의 순서는 본 발명의 범주 내에서 변경가능하다. 다수의 실시예들이 프로세스, 방법, 및/또는 프로그램 명령 특징들의 변화들을 기술하는데 도움이 되는 경우마다, 미리결정되거나 동적으로 결정되는 기준에 따라, 복수의 다수 실시예들에 각각 대응하는 복수의 동작 모드들 중 하나의 정적 및/또는 동적 선택을 수행하는 다른 실시예들이 고려된다. 본 발명의 철저한 이해를 제공하기 위해서 다음의 설명에서는 수많은 특정 세부사항들이 제시된다. 이러한 세부사항들은 예시의 목적으로 제공되며, 본 발명은 이러한 세부사항들 중 일부 또는 이들 모두가 없이도 청구범위에 따라 실시될 수 있다. 명료함을 위해, 본 발명을 불필요하게 모호하지 않도록, 본 발명에 관련된 기술 분야들에서 알려진 기술 자료는 상세하게 기술되지 않는다.
도입부
본 도입부는 단지 상세한 설명에 대해 보다 신속한 이해를 돕기 위해서 포함되어 있다; 본 발명은 (존재한다면, 명시적인 예들을 포함하여) 도입부에서 제시되는 개념들로 제한되지 않는데, 그 이유는 임의의 도입부의 단락들은 필연적으로, 전체 주제에 대한 요약된 견해이며, 철저하거나 제한적인 설명인 것으로 의도되지는 않기 때문이다. 예를 들어, 뒤따르는 도입부는 공간 및 조직에 의해 단지 특정 실시예들로 제한되는 개괄적인 정보를 제공한다. 궁극적으로 청구범위에 귀결될 실시예들을 포함하여, 본 명세서의 균형을 통해 논의되는 많은 다른 실시예들이 존재한다.
약어들
본원에서 정의되는 다양한 약칭 축약들, 또는 약어들 중 적어도 일부는 본원에서 이용되는 특정 엘리먼트들을 지칭한다.
약어 설명
AHCI 어드밴스트 호스트 제어기 인터페이스
CF 컴팩트 플래시
DIF 데이터 무결성 필드
DIX 데이터 무결성 확장
DMA 직접 메모리 액세스
eNVMHCI 엔터프라이즈 비휘발성 메모리 호스트 제어기 인터페이스
eSATA 외장 직렬 ATA(Advanced Technology Attachment)
IC 집적 회로
IDE IDE(Integrated Drive Electronics)
IO 입력/출력
JBOD JBOD(Just a Bunch Of Disks)
LBA 논리 블록 어드레스
MMC 멀티미디어카드
MsgD 데이터 페이로드를 갖는 메시지 요청
PC 개인용 컴퓨터
PCIe PCI 익스프레스(Peripheral Component Interconnect express)
PDA 개인 휴대 정보 단말
RAID RAID(Redundant Array of Inexpensive/Independent Disks)
RMW 판독-수정-기록
ROM 판독 전용 메모리
SAS 직렬 SCSI(Serial Attached Small Computer System Interface)
SATA 직렬 ATA
SCSI SCSI(Small Computer System Interface)
SD SD(Secure Digital)
SSD SSD(솔리드-스테이트 디스크/드라이브)
USB USB(Universal Serial Bus)
스케일러블 스토리지 디바이스를 이용하는 기술들은 단일의 논리적 인터페이스로서 복수의 호스트-액세스가능한 스토리지 디바이스들을 표현하여, 디바이스들에 의해 구현되는 스토리지를 개념상으로 집합화(aggregating)한다. 디바이스들의 1차 에이전트는 호스트-인터페이스 프로토콜을 이용하여 호스트로부터 스토리지 요청들을 수락하고, 이러한 요청들을 내부적으로 처리하고 및/또는, 피어-투-피어 프로토콜을 이용하여 스토리지 디바이스들의 2차 에이전트들에 서브-요청들로서 이러한 요청들을 포워딩한다. 2차 에이전트들은 서브-요청들을 수락 및 처리하고, 1차 에이전트 및/또는 호스트에 서브-요청들 각각에 대한 서브-상태(sub-status) 정보를 보고한다. 1차 에이전트는 선택적으로, 호스트에 제공하기 위해 서브-상태들을 전체 상태(overall status)로 누적한다. 1차 에이전트는, 2차 에이전트들에 의해 구현되고 집합화에 할당되는 스토리지뿐만 아니라 1차 에이전트에 의해 구현되는 스토리지를 포함하는 이용가능한 스토리지를 호스트에 보고한다. 2차 에이전트들은 호스트에 제로(0)의 이용가능한 스토리지를 보고하거나 또는 대안적으로 집합화 할당 이후에 남아 있는 스토리지를 보고한다.
에이전트들 사이의 피어-투-피어 통신은 선택적으로, 호스트 액세스들 및/또는 오동작 복구들 동안 리던던시 정보를 통신하기 위해 이용된다. 다양한 오동작 복구 기술들은 스토리지를 재할당하고, 1차/2차/설정가능 에이전트들을 재지정하며, 리던던시 정보를 통해 데이터를 복구하거나, 이들의 임의의 조합을 수행한다.
PCIe 인터페이스들은 시스템에서 호스트에 대한 단수의 고유한 관계를 갖는다. 각각의 PCIe 인터페이스는, 디바이스의 기능이 스토리지인지, 네트워킹인지, 또는 어떤 다른 컴퓨팅 시스템 능력인지에 관계없이, 디바이스의 기능에 대한 단일의 포털을 나타낸다. 시스템 내의 각각의 PCIe 디바이스는 시스템 내의 각각의 별개의 엔티티를 나타낸다. 그러나, 피어-투-피어 트래픽을 통해, 몇몇 개별적인 PCIe 디바이스들은, 디바이스들이 호스트에 단일의 PCIe 디바이스로 보이도록 함께 그룹화된다. PCIe 피어-투-피어 능력을 레버리지(leverage)하는 것에 의해, 피어-투-피어 통신을 통해 복수의 PCIe 스토리지 디바이스들을 함께 집합화 및/또는 그룹화하여 이렇게 집합화/그룹화된 디바이스들이 호스트에게 단일의 스토리지 서브시스템으로 보이는 것을 가능하게 함으로써, 스케일러블 스토리지 아키텍처가 인에이블된다. 몇몇 실시예들에서, 요청들은 단지 LBA들에만 기초하여 PCIe 스토리지 디바이스들 사이에 분산된다. LBA-온리(LBA-only) 분산은, 그룹 내의 임의의 특정 디바이스의 스토리지가 이러한 특정 디바이스가 요청들을 라우팅하도록 요구하지 않으며, 따라서 이러한 스토리지를 단일의 오동작 포인트로서 제거한다.
몇몇 실시예들 및/또는 이용 시나리오들에서, 집합화/그룹화는 호스트에게 단일의 논리적 인터페이스로 보이면서 증가된 성능 및/또는 용량을 가능하게 한다. 몇몇 실시예들 및/또는 이용 시나리오들에서, 단일의 스토리지 오동작 포인트들 모두는 LBA-기반 요청 라우팅을 통해 제거된다. 몇몇 실시예들 및/또는 이용 시나리오들에서, 집합화/그룹화는 다수의 스토리지 디바이스들에 걸쳐 요청 부하를 분산시키고, 이에 의해 호스트에 투명하게 용량 및 성능을 스케일링하게 된다. 용량 및 성능 스케일링은, 용량 및 레이턴시 변화들 이외에, 호스트가 제어할 필요가 없고 집합화/그룹화에 대한 관측가능성을 요구하지 않는다는 의미에서, 호스트에 투명하다. 몇몇 실시예들 및/또는 이용 시나리오들에서, 집합화/그룹화는 대칭형 멀티-프로세서 스토리지 컴플렉스를 제공한다.
몇몇 실시예들 및/또는 이용 시나리오들에서, 집합화/그룹화는 호스트가 단일의 논리적 디바이스로서, 복수의 물리적 디바이스들에 걸쳐 분산되어 있는 자원들의 집합에 액세스하는 것을 가능하게 한다. 예를 들어, 집합화/그룹화는 호스트가 단일의 논리적 스토리지 디바이스로서, 복수의 물리적 스토리지 디바이스들에 걸쳐 분산되어 있는 복수의 스토리지 범위들의 집합에 액세스하는 것을 가능하게 한다. 요청의 일부로서 호스트에 의해 제공되는 것으로 LBA(및 선택적으로 길이)를 포워딩하는 것은, LBA(및 선택적인 길이) 정보를 보존한다. LBA(및 선택적인 길이) 정보를 보존하고 타겟 디바이스 상에서 변환하는 것은, 정확한 무결성 메타데이터(이를 테면, DIV/DIX 참조 무결성)를 유지하는 것을 가능하게 하고 및/또는 디바이스들의 독립적인(예를 들면, 병렬) 동작을 가능하게 한다.
몇몇 실시예들 및/또는 이용 시나리오들에서, 집합화/그룹화는, 다양한 RAID, 미러링, 및 대체 작동(fail-over) 구현들과 같은 스토리지 능력들과 관련된 투명한 리던던시 및/또는 복구를 가능하게 한다. 다양한 실시예들에서, 호스트 트래픽은 대부분 데이터 트래픽이지만, 피어-투-피어 트래픽은 대부분 제어 트래픽이다. 다양한 실시예들에서, 피어-투-피어 트래픽은 데이터를 포함한다(예를 들면, RAID 복구 동작 중에, 또는 누적된 패리티 정보의 전송 중에).
다양한 실시예들 및/또는 이용 시나리오들에서, 집합화/그룹화는 호스트가 SSD(들)에 커플링되는 시스템들을 가능하게 하고, 여기서 (각각 하나 또는 둘 이상의 레인들을 갖는) 호스트에 커플링되는 하나 또는 둘 이상의 PCIe 링크들의 대역폭들은 복수의 SSD들, 복수의 플래시 제어기들(이를 테면, SSD들에서 이용됨), 및/또는 복수의 플래시 칩들에 걸쳐 (호스트에 투명하게) 분산된다. 예를 들면, (예컨대, 8개의 레인들을 갖는) 하나의 호스트-커플링된 PCIe 링크의 대역폭은 4개의 SSD들 또는 대안적으로 8개의 플래시 제어기들에 걸쳐 분산된다(각 SSD 또는 플래시 제어기는 예컨대 8개보다 적은 레인들을 갖는 하나의 PCIe 링크를 가짐). 또 다른 예로서, 4개의 호스트-커플링된 PCIe 링크들의 대역폭은 64개의 SSD들 또는 대안적으로 256개의 플래시 제어기들에 걸쳐 분산된다. 또 다른 예로서, 하나의 호스트-커플링된 PCIe 링크의 대역폭은 32개의 플래시 칩들에 걸쳐 또는 대안적으로 64개의 플래시 칩들에 걸쳐 분산된다. 또 다른 예로서, 4개의 호스트-커플링된 PCIe 링크들의 대역폭은 128개의 플래시 칩들에 걸쳐 또는 대안적으로 256개의 플래시 칩들에 걸쳐 분산된다.
다양한 실시예들에서, 1차 에이전트는 호스트 대 2차 에이전트 스토리지 매핑을 결정한다(예를 들면, 어느 호스트 LBA 범위들이 어느 2차 에이전트들에 대응하는지를 결정). 예를 들어, 호스트 LBA들은 미리결정된 크기로(예컨대, 64KB) 물리적 드라이브들에 걸쳐 스트라이핑된다. 다른 예로서, 호스트 LBA들은 RAID 구현에 따라 스트라이핑된다(예컨대, RAID 0, RAID 1, 또는 RAID 5). 또 다른 예로서, 스트라이핑은 작업부하에 따라 동적으로 변경된다(예컨대, 제1 스트라이핑이 제1 작업부하에 대해 이용되고, 제2 스트라이핑이 제2 작업부하에 대해 이용됨).
몇몇 구현들에서, (하나 또는 둘 이상의 호스트들로부터 액세스가능한) PCIe 스토리지 디바이스들의 그룹은 서로 피어-투-피어 통신을 가능하게 하는 버스 토폴로지를 통해 커플링된다. PCIe 스토리지 디바이스들의 그룹은, 그룹 내의 단지 하나의 PCIe 디바이스가 특정 호스트 논리적 접속에 대한 요청들을 수신하도록 구성된다. 몇몇 실시예들에서는, 그룹에 대한 복수의 접속들이 존재하고, 이는 상이한 호스트 논리적 접속들이 그룹 내의 상이한 PCIe 스토리지 디바이스들에 의해 수신되는 요청들을 공급하는 것을 가능하게 한다.
PCIe 스토리지 디바이스들의 그룹의 구성은 디바이스들이 호스트(들)에 노출되는 방식에 의존한다. 그룹 내의 모든 디바이스들이, 예컨대 투명 스위치를 통해 호스트에 직접 노출되는 경우, 호스트 논리적 접속들을 가능하게 하는 것들을 제외한 모든 디바이스들이 호스트(들)에 제로 스토리지 용량을 역으로(back) 보고하는 한편, 호스트 논리적 접속들을 가능하게 하는 디바이스들은 특정 호스트 논리적 접속에 대해 이러한 그룹의 구성된 용량을 보고한다. 이러한 구성된 용량은, 그룹의 스토리지가 어떻게 구성 또는 조직되는지(이를 테면, JBOD 또는 RAID) 뿐만 아니라 그룹의 스토리지가 호스트 논리적 접속들에 걸쳐 어떻게 파티셔닝되는지에 의존한다. 디바이스들 중 몇몇이, 예컨대 브리지 또는 불투명 스위치 뒤에서, 호스트로부터 숨겨져 있는 경우, 제로 용량 보고는 호스트에 노출되어 있지 않은 디바이스들에 의해 수행되지 않는다. 호스트 논리적 접속은 단지, 단일의 PCIe 디바이스 인터페이스에 대해 직접적으로 요청들을 전송하고, 이러한 인터페이스가 그룹 내의 나머지 디바이스들에 대한 요청들을 분산 및 조정한다.
추가적인 실시예들에서, 각각의 호스트 논리적 접속들을 가능하게 하는 둘 또는 셋 이상의 디바이스들이 이러한 디바이스들 및/또는 다른 디바이스들의 스토리지 용량들 내에서 중첩되는 스토리지 용량을 보고한다. 예를 들면, 제1 호스트 논리적 접속을 가능하게 하는 제1 디바이스는 제1 디바이스의 전체 스토리지 용량 및 제2 디바이스의 전체 스토리지 용량과 동등한 집합적 스토리지 용량을 보고한다. 제2 호스트 논리적 접속을 가능하게 하는 제3 디바이스는 또한 집합적 스토리지 용량을 보고한다. 제1 호스트 논리적 접속을 통해 수신되거나 제2 호스트 논리적 접속을 통해 수신되는 호스트 요청들은 제1 디바이스의 그리고 제2 디바이스의 동일한 물리적 스토리지를 참조한다(선택적으로 및/또는 선별적으로 상이한 LBA들을 이용함).
스토리지 디바이스에 의해 구현되는 스토리지는 호스트에 직접 전적으로 노출될 필요는 없다(또는 노출되지 않는다). 예를 들면, 특정 스토리지 디바이스가, 부분적으로는 스토리지 디바이스들의 그룹에 할당되고(예를 들면, 호스트에 직접 노출되지 않음) 부분적으로는 호스트에 대해 직접 노출되도록 할당되는 스토리지를 구현한다. 이러한 특정 스토리지 디바이스는, 호스트에 제로 용량을 보고하는 대신에, 호스트에 대한 직접 노출을 위한 부분적인 할당에 대응하는 스토리지의 양을 보고한다.
몇몇 실시예들에서, 그룹의 디바이스들의 초기 구성은 호스트(들) 상에 상주하는 소프트웨어에 의해 및/또는 하나 또는 둘 이상의 옵션 ROM들에서 수행된다. 초기 구성의 예는, 디바이스들 중 어느 것이 호스트 논리적 접속들을 가능하게 하는지 그리고 어느 것이 그렇지 않은지이다. 초기 구성의 다른 예는, 호스트에 대한 직접 노출과 대조하여, 디바이스들의 그룹에 얼마나 많은 스토리지를 할당할지 이다.
몇몇 실시예들에서, 그룹의 디바이스들의 구성은, 시스템이 동작 중일 때, 이를 테면 "핫 스페어(hot spare)"가 삽입될 때, 또는 예컨대 오동작에 응답하여 디바이스가 동적으로 그룹에 부가되거나 또는 그룹으로부터 제거될 때 수행된다. 예를 들면, 핫 스페어 디바이스가 삽입될 때, 호스트 및 1차 에이전트 상에서 하나 또는 둘 이상의 디바이스 드라이버를 수반하는 디스커버리 프로세스가, 삽입된 디바이스를 인식하고, 이에 따라 삽입된 디바이스를 구성한다(이를 테면, 오동작 디바이스를 대체하기 위해). 디바이스의 삽입은 예를 들면 삽입된 디바이스로부터의 통지 및/또는 "핫플러그" 이벤트를 통해 표시된다.
호스트가 스토리지 판독/기록 요청(이를 테면, eNVMHCI 또는 AHCI-순응 요청)을 발신할 때, 이러한 요청을 수신하는 디바이스는 요청의 LBA(및 선택적으로 길이)를 이용하여, 요청된 스토리지를 구현하는 그룹의 디바이스(들)에 이러한 요청을 포워딩한다. 이러한 요청의 길이 및 그룹의 조직화(예컨대, JBOD 또는 RAID)에 따라, 이러한 요청은 예를 들면 복수의 서브-요청들로서 그룹의 하나보다 많은 수의 디바이스들에 라우팅된다.
다양한 실시예들에 따라, 그룹 내의 특정 디바이스가 서브-요청을 수신하는 경우, 이러한 특정 디바이스는 LBA(및 선택적으로 임의의 공급된 길이)를 로컬 LBA(및 길이)로 변환하고, 서브-요청을 처리한 다음, 서브-요청에 대한 데이터를 직접 호스트 메모리로/호스트 메모리로부터 전달한다. 호스트 메모리의 예는, 특정 어드레스에서 메모리에 데이터를 저장하는 명령의 실행을 통해 호스트에 의해 기록되는 데이터를 보유하도록 인에이블되고, 특정 어드레스에서 메모리로부터 데이터를 판독하는 명령의 실행을 통해 호스트로 하여금 기록된 데이터를 판독하게 하도록 인에이블된 엘리먼트이다. 이러한 특정 디바이스는 선택적으로 및/또는 선별적으로 다음 중 하나 또는 둘 이상으로부터, 데이터를 전달할 위치의 호스트 메모리 어드레스를 획득한다: (a) (포워딩된) 서브-요청으로부터, (b) 호스트 상주 변환 구조들(이를 테면, 스캐터/개더(scatter/gather) 리스트들)로부터, 및 (c) 호스트에 대한 제어 인터페이스로서 동작하는 디바이스에 프록시 요청들을 발신함으로써. 몇몇 실시예들에서, 프록시 요청들의 발신은 단지 IO 가상화에 대해서만 수행된다.
각 서브-요청에 대한 데이터 전달이 완료될 때, 전달하는 디바이스는 호스트에 대한 제어 인터페이스로서 동작하는 디바이스에 서브-상태를 보고한다. 그러면, 호스트에 대한 제어 인터페이스로서 동작하는 디바이스는, 요청과 관련된 디바이스들 모두가 서브-상태들을 보고할 때 호스트에 상태를 포스팅(post)한다.
비-데이터 명령들(예를 들면, SATA IDENTIFY DEVICE 명령)이 유사하게 처리된다. 비-데이터 명령이 호스트에 대한 제어 인터페이스로서 동작하는 특정 디바이스에 의해 수신되는 경우, 이러한 특정 디바이스는 (필요한 경우) 그룹 내의 다른 디바이스들에 질의(interrogate)하고, 그 후 질의의 요약 및/또는 집합화된 결과들을 호스트에 역으로 보고한다.
다양한 실시예들에서, 호스트는 복수의 디바이스들(이를 테면, 각각 x1 또는 x2 PCIe 접속을 갖는 디바이스들)의 집합을, 모든 디바이스들의 스토리지를 포괄하는 단일의 논리적 디바이스로서 보게 된다(예컨대, 이러한 디바이스들은 단일의 논리적 디바이스로 가상화됨). 다양한 실시예들에서, 호스트는 임의의 디바이스들 또는 모든 디바이스들이 전체 스토리지의 부분들을 갖는 것으로 보게 되고, 이에 의해 데이터 트래픽에 부가하여 제어 트래픽의 분할을 가능하게 한다.
서브미션 큐(submission queue)(이를 테면, 동작의 병렬적 스트림들에 대해 동시에 활성화된 복수의 서브미션 큐들 중 하나의 서브미션 큐)를 통한 호스트로부터의 요청이, 예를 들면 호스트가 알고 있는 디바이스들 중 특정한 디바이스에 의해 처리된다. 서브미션 큐 내의 개개의 요청은 선택적으로 및/또는 선별적으로, 요청에 의해 참조되는 모든 스토리지 또는 스토리지의 부분들을 구현하는 디바이스들에 서브-요청으로서 포워딩된다(이러한 특정 디바이스로부터의 피어-투-피어 요청들을 통해). 예를 들면, 스토리지는 개개의 LBA들에 의해 또는 LBA들의 그룹들에 의해 디바이스들 사이에서 스트라이핑된다. 몇몇 실시예들 및/또는 이용 시나리오들에서, LBA들의 그룹들 내에서의 스트라이핑은, 개개의 디바이스들에 대해 보다 큰 청크들의 집합화를 통해 성능상 이점들을 가능하게 한다. 복수의 서브미션 큐들을 갖는 몇몇 실시예들에서, 호스트는 디바이스들 중 특정 디바이스에 새로운 서브미션 큐들을 통지하고, 이러한 특정 디바이스는 새로운 서브미션 큐들의 서비스를 다른 디바이스들에 분배한다.
개개의 디바이스들은, 호스트로의/호스트로부터의 데이터 전달을 포함하여, 포워딩된 서브-요청들을 독립적으로 처리한다. 몇몇 프로토콜들(이를 테면, 몇몇 PCIe 호환가능 프로토콜들)은 각각의 서브미션 큐에 대해 각각의 완료 큐(completion queue)를 통해 제공되는 "완료(completion)들"을 이용한다. 서브미션 큐 내의 각각의 엔트리에 대하여, 대응하는 완료 통지가 각각의 완료 큐로 다시 전송된다. 디바이스들 중 임의의 하나 또는 둘 이상의 디바이스들은 선택적으로 및/또는 선별적으로, 주어진 요청에 대하여 완료 정보를 "집합화"하고 완료 큐를 업데이트하도록 인에이블된다. 다양한 실시예들에서, 원자화(atomicity)를 가능하게 하기 위해 완료 큐마다 하나의 디바이스가 할당된다. 몇몇 실시예들에서, 할당된 디바이스는 대응하는 서브미션 큐 내의 엔트리들을 처리하는 동일한 디바이스이지만, 다른 실시예들에서, 할당된 디바이스는 대응하는 서브미션 큐 내의 엔트리들을 처리하는 디바이스와는 상이하다.
예시적인 실시예들
상세한 설명에 대한 도입부를 마무리 지으면서, 명시적으로 "EC들(예시 조합들)"로서 열거되는 적어도 몇몇을 포함하고, 본원에서 기술되는 개념들에 따른 다양한 실시 유형들에 대한 부가적인 설명을 제공하는 예시적인 실시예들의 집합이 이하 기술되며; 이러한 예들은 상호 배타적이거나, 총망라되거나, 또는 제한적이도록 의도되지 않으며; 본 발명은 이러한 예시 실시예들로 제한되지 않고, 오히려 허여된 청구범위의 범주 내의 모든 가능한 수정들 및 변형들을 포함한다.
EC1) 시스템으로서,
어드레스에서 스토리지를 액세스하기 위한 호스트로부터의 요청을 수락하기 위한 수단;
적어도 부분적으로 상기 어드레스에 기초하여, 상기 요청이, 복수의 스토리지 디바이스들 중 하나 또는 둘 이상의 어느 스토리지 디바이스에 대응하는지를 결정하기 위한 수단;
적어도 부분적으로 상기 어드레스에 기초하여, 결정된 스토리지 디바이스들 각각에 대응하는 각각의 서브-요청을 결정하기 위한 수단;
서브-요청들을 대응하는 결정된 스토리지 디바이스들에 전송하기 위한 수단;
결정된 스토리지 디바이스들 각각으로부터 각각의 서브-상태를 수락하기 위한 수단;
각각의 서브-상태들 각각에 적어도 부분적으로 기초하여 전체 상태를 결정하기 위한 수단; 및
전체 상태를 호스트에 제공하기 위한 수단을 포함하고,
상기 요청을 수락하기 위한 수단은 호스트-인터페이스 프로토콜과 호환가능하고, 서브-요청들을 전송하기 위한 수단 및 서브-상태들을 수락하기 위한 수단은 호스트와는 독립적으로 동작가능한 피어-투-피어 프로토콜과 호환가능하며;
스토리지 디바이스들 중 적어도 하나는 서브-요청들 중 하나를 통해 액세스가능한 스토리지를 구현하고, 스토리지 디바이스들 중 적어도 하나는 호스트-인터페이스 프로토콜을 통한, 구현된 스토리지로의 액세스들을 디스에이블하는, 시스템.
EC2) EC1에 있어서, 상기 요청을 수락하기 위한 수단, 서브-요청들을 전송하기 위한 수단, 각각의 서브-상태를 수락하기 위한 수단, 및 전체 상태를 제공하기 위한 수단 중 둘 또는 셋 이상은 공유된 물리적 인터페이스 상에서 동작가능한, 시스템.
EC3) EC2에 있어서, PCI 익스프레스(PCIe) 토폴로지 및 인피니밴드(Infiniband) 토폴로지 중 적어도 하나는 상기 공유된 물리적 인터페이스를 포함하는, 시스템.
EC4) EC2에 있어서, PCI 익스프레스(PCIe) 인터페이스 및 인피니밴드 인터페이스 중 적어도 하나는 상기 공유된 물리적 인터페이스를 포함하는, 시스템.
EC5) EC1에 있어서, 상기 시스템은 요청을 수락하기 위한 수단, 스토리지 디바이스들을 결정하기 위한 수단, 서브-요청들을 결정하기 위한 수단, 서브-요청들을 전송하기 위한 수단, 서브-상태들을 수락하기 위한 수단, 전체 상태를 결정하기 위한 수단, 및 전체 상태를 제공하기 위한 수단을 포함하는, 스토리지 디바이스들 중 특정한 하나를 더 포함하는, 시스템.
EC6) EC1에 있어서, 스토리지 디바이스들 중 둘 또는 셋 이상은 호스트 인터페이스 프로토콜을 통해 호스트와 통신하도록 인에이블되는, 시스템.
EC7) EC6에 있어서, 스토리지 디바이스들 중 둘 또는 셋 이상은 스토리지 디바이스들 모두인, 시스템.
EC8) EC1에 있어서, 상기 어드레스는 시작 위치 및 길이를 포함하는, 시스템.
EC9) EC1에 있어서, 상기 어드레스는 논리 블록 어드레스(LBA)인, 시스템.
EC10) EC1에 있어서, 상기 수단들은 단일의 집적 회로(IC)로 집합적으로 구현되는, 시스템.
EC11) EC1에 있어서, 상기 수단들은 단일의 애드-인 카드로 집합적으로 구현되는, 시스템.
EC12) EC1에 있어서, 상기 수단들은 솔리드-스테이트 디스크(SSD) 내에 포함되는, 시스템.
EC13) EC1에 있어서, 상기 호스트-인터페이스 프로토콜은:
USB 인터페이스 표준,
컴팩트 플래시(CF) 인터페이스 표준,
멀티미디어카드(MMC) 인터페이스 표준,
SD(Secure Digital) 인터페이스 표준,
메모리 스틱 인터페이스 표준,
xD-픽쳐(xD-picture) 카드 인터페이스 표준,
IDE(Integrated Drive Electronics) 인터페이스 표준,
직렬 ATA(SATA) 인터페이스 표준,
외장 SATA(eSATA) 인터페이스 표준,
SCSI(Small Computer System Interface) 인터페이스 표준,
직렬 SCSI(SAS) 인터페이스 표준,
광섬유 채널 인터페이스 표준,
이더넷 인터페이스 표준, 및
PCI 익스프레스(PCIe) 인터페이스 표준 중 하나 또는 둘 이상과 호환가능한, 시스템.
EC14) EC1에 있어서, 호스트의 모두 또는 임의의 부분들을 더 포함하는, 시스템.
EC15) EC14에 있어서, 상기 호스트는:
컴퓨터,
워크스테이션 컴퓨터,
서버 컴퓨터,
스토리지 서버
개인용 컴퓨터(PC)
랩탑 컴퓨터,
노트북 컴퓨터,
넷북 컴퓨터,
개인 휴대 정보 단말(PDA),
미디어 플레이어,
미디어 레코더,
디지털 카메라,
셀룰러 핸드셋,
무선 전화 핸드셋, 및
전자 게임 중 하나 또는 둘 이상을 포함하는, 시스템.
EC16) EC1에 있어서, 상기 스토리지 디바이스들의 모두 또는 임의의 부분들을 더 포함하는, 시스템.
EC17) EC1에 있어서, 상기 스토리지 디바이스들 중 하나 또는 둘 이상에 포함되는 플래시 메모리를 더 포함하는, 시스템.
EC18) 내부에 명령들의 세트가 저장된 컴퓨터 판독가능 매체로서, 상기 명령들은 처리 엘리먼트에 의해 실행될 때 상기 처리 엘리먼트로 하여금:
어드레스에서 스토리지를 액세스하기 위한 호스트로부터의 요청을 수락하는 것의 관리;
적어도 부분적으로 상기 어드레스에 기초하여, 상기 요청이, 복수의 스토리지 디바이스들 중 하나 또는 둘 이상의 어느 스토리지 디바이스에 대응하는지를 결정하는 것의 관리;
적어도 부분적으로 상기 어드레스에 기초하여, 결정된 스토리지 디바이스들 각각에 대응하는 각각의 서브-요청을 결정하는 것의 관리;
서브-요청들을 대응하는 결정된 스토리지 디바이스들에 전송하는 것의 관리;
결정된 스토리지 디바이스들 각각으로부터 각각의 서브-상태를 수락하는 것의 관리;
각각의 서브-상태들 각각에 적어도 부분적으로 기초하여 전체 상태를 결정하는 것의 관리; 및
전체 상태를 호스트에 제공하는 것의 관리를 포함하는 동작들을 수행하도록 하고,
상기 요청을 수락하는 것은 호스트 인터페이스 프로토콜을 통해 이루어지고, 서브-요청들을 전송하는 것 및 서브-상태들을 수락하는 것은 호스트와는 독립적으로 동작가능한 피어-투-피어 프로토콜을 통해 이루어지며;
스토리지 디바이스들 중 적어도 하나는 서브-요청들 중 하나를 통해 액세스가능한 스토리지를 구현하고, 스토리지 디바이스들 중 적어도 하나는 호스트-인터페이스 프로토콜을 통한, 구현된 스토리지로의 액세스들을 디스에이블하는, 컴퓨터 판독가능 매체.
EC19) EC18에 있어서, 호스트-인터페이스 및 피어-투-피어 프로토콜들은 PCI 익스프레스(PCIe) 채널과 호환가능한, 컴퓨터 판독가능 매체.
EC20) 방법으로서,
어드레스에서 스토리지를 액세스하기 위한 호스트로부터의 요청을 수락하는 단계;
적어도 부분적으로 상기 어드레스에 기초하여, 상기 요청이, 복수의 스토리지 디바이스들 중 하나 또는 둘 이상의 어느 스토리지 디바이스에 대응하는지를 결정하는 단계;
적어도 부분적으로 상기 어드레스에 기초하여, 결정된 스토리지 디바이스들 각각에 대응하는 각각의 서브-요청을 결정하는 단계;
서브-요청들을 대응하는 결정된 스토리지 디바이스들에 전송하는 단계;
결정된 스토리지 디바이스들 각각으로부터 각각의 서브-상태를 수락하는 단계;
각각의 서브-상태들 각각에 적어도 부분적으로 기초하여 전체 상태를 결정하는 단계; 및
전체 상태를 호스트에 제공하는 단계를 포함하고,
상기 요청을 수락하는 단계는 호스트 인터페이스 프로토콜과 호환가능하고, 서브-요청들을 전송하는 단계 및 서브-상태들을 수락하는 단계는 호스트와는 독립적으로 동작가능한 피어-투-피어 프로토콜과 호환가능하며;
스토리지 디바이스들 중 적어도 하나는 서브-요청들 중 하나를 통해 액세스가능한 스토리지를 구현하고, 스토리지 디바이스들 중 적어도 하나는 호스트-인터페이스 프로토콜을 통한, 구현된 스토리지로의 액세스들을 디스에이블하는, 방법.
EC21) 시스템으로서,
어드레스에서 스토리지를 액세스하기 위한 호스트로부터의 요청을 수락하도록 인에이블된 호스트 인터페이스 로직 하드웨어; 및
제어 로직 하드웨어를 포함하고,
상기 제어 로직 하드웨어는:
적어도 부분적으로 상기 어드레스에 기초하여, 상기 요청이, 복수의 스토리지 디바이스들 중 하나 또는 둘 이상의 어느 스토리지 디바이스에 대응하는지를 결정하고, 결정된 스토리지 디바이스들 각각에 대응하는 각각의 서브-요청을 결정하고,
서브-요청들을 대응하는 결정된 스토리지 디바이스들에 전송하고,
결정된 스토리지 디바이스들 각각으로부터 각각의 서브-상태를 수락하며,
각각의 서브-상태들 각각에 적어도 부분적으로 기초하여 전체 상태를 결정하도록 인에이블되고,
상기 호스트 인터페이스 로직 하드웨어는 추가적으로 전체 상태를 호스트에 제공하도록 인에이블되며,
상기 요청을 수락하는 것은 호스트-인터페이스 프로토콜과 호환가능하고, 서브-요청들을 전송하는 것 및 서브-상태들을 수락하는 것은 호스트와는 독립적으로 동작가능한 피어-투-피어 프로토콜과 호환가능하며;
스토리지 디바이스들 중 적어도 하나는 서브-요청들 중 하나를 통해 액세스가능한 스토리지를 구현하고, 스토리지 디바이스들 중 적어도 하나는 호스트-인터페이스 프로토콜을 통한, 구현된 스토리지로의 액세스들을 디스에이블하는, 시스템.
EC22) 방법으로서,
제1 스토리지 디바이스가 복수의 호스트 요청 큐들 중 제1 큐로부터 제1 요청을 판독하는 단계;
제2 스토리지 디바이스가 호스트 요청 큐들 중 제2 큐로부터 제2 요청을 판독하는 단계 ― 제2 호스트 요청 큐는 제1 호스트 요청 큐와는 구별되고, 제2 스토리지 디바이스에 의한 판독은 제1 스토리지 디바이스에 의한 판독과는 독립적임 ―;
제1 스토리지 디바이스가 제1 요청 중 적어도 일부를 제2 스토리지 디바이스에 포워딩하는 단계;
제2 스토리지 디바이스가 제2 요청 중 적어도 일부를 제1 스토리지 디바이스에 포워딩하는 단계 ― 제2 스토리지 디바이스에 의한 포워딩은 제1 스토리지 디바이스에 의한 포워딩과 독립적임 ―;
제1 스토리지 디바이스가 제2 요청 중 적어도 일부에 따라 제1 스토리지 디바이스의 제1 스토리지를 액세스하고, 제1 스토리지 디바이스에 의한 액세스에 적어도 부분적으로 기초하여 제1 서브-상태를 제2 스토리지 디바이스에 전송하는 단계; 및
제2 스토리지 디바이스가 제1 요청 중 적어도 일부에 따라 제2 스토리지 디바이스의 제2 스토리지를 액세스하고, 제2 스토리지 디바이스에 의한 액세스에 적어도 부분적으로 기초하여 제2 서브-상태를 제1 스토리지 디바이스에 전송하는 단계를 포함하는, 방법.
EC23) 시스템으로서,
제1 스토리지 디바이스가 복수의 호스트 요청 큐들 중 제1 큐로부터 제1 요청을 판독하기 위한 수단;
제2 스토리지 디바이스가 호스트 요청 큐들 중 제2 큐로부터 제2 요청을 판독하기 위한 수단 ― 제2 호스트 요청 큐는 제1 호스트 요청 큐와는 구별되고, 제2 스토리지 디바이스에 의한 판독은 제1 스토리지 디바이스에 의한 판독과는 독립적임 ―;
제1 스토리지 디바이스가 제1 요청 중 적어도 일부를 제2 스토리지 디바이스에 포워딩하기 위한 수단;
제2 스토리지 디바이스가 제2 요청 중 적어도 일부를 제1 스토리지 디바이스에 포워딩하기 위한 수단 ― 제2 스토리지 디바이스에 의한 포워딩은 제1 스토리지 디바이스에 의한 포워딩과 독립적임 ―;
제1 스토리지 디바이스가 제2 요청 중 적어도 일부에 따라 제1 스토리지 디바이스의 제1 스토리지를 액세스하고, 제1 스토리지 디바이스에 의한 액세스에 적어도 부분적으로 기초하여 제1 서브-상태를 제2 스토리지 디바이스에 전송하기 위한 수단; 및
제2 스토리지 디바이스가 제1 요청 중 적어도 일부에 따라 제2 스토리지 디바이스의 제2 스토리지를 액세스하고, 제2 스토리지 디바이스에 의한 액세스에 적어도 부분적으로 기초하여 제2 서브-상태를 제1 스토리지 디바이스에 전송하기 위한 수단을 포함하는, 시스템.
EC24) 시스템으로서,
복수의 호스트 요청 큐들 중 제1 큐로부터 제1 요청을 판독하도록 인에이블된 제1 스토리지 디바이스의 호스트 인터페이스 로직 하드웨어;
호스트 요청 큐들 중 제2 큐로부터 제2 요청을 판독하도록 인에이블된 제2 스토리지 디바이스의 호스트 인터페이스 로직 하드웨어 ― 제2 호스트 요청 큐는 제1 호스트 요청 큐와는 구별되고, 제2 스토리지 디바이스에 의한 판독은 제1 스토리지 디바이스에 의한 판독과는 독립적임 ―;
제1 요청 중 적어도 일부를 제2 스토리지 디바이스에 포워딩하도록 인에이블된 제1 스토리지 디바이스의 요청 포워딩 로직 하드웨어;
제2 요청 중 적어도 일부를 제1 스토리지 디바이스에 포워딩하도록 인에이블된 제2 스토리지 디바이스의 요청 포워딩 로직 하드웨어 ― 제2 스토리지 디바이스에 의한 포워딩은 제1 스토리지 디바이스에 의한 포워딩과 독립적임 ―;
제2 요청 중 적어도 일부에 따라 제1 스토리지 디바이스의 제1 스토리지를 액세스하도록 인에이블된 제1 스토리지 디바이스의 스토리지 인터페이스 로직 하드웨어;
제1 스토리지 디바이스에 의한 액세스에 적어도 부분적으로 기초하여 제1 서브-상태를 결정하도록 인에이블된 제1 스토리지 디바이스의 서브-상태 생성 로직 하드웨어;
제1 서브-상태를 제2 스토리지 디바이스에 포워딩하도록 인에이블된 제1 스토리지 디바이스의 서브-상태 포워딩 로직 하드웨어;
제1 요청 중 적어도 일부에 따라 제2 스토리지 디바이스의 제2 스토리지를 액세스하도록 인에이블된 제2 스토리지 디바이스의 스토리지 인터페이스 로직 하드웨어;
제2 스토리지 디바이스에 의한 액세스에 적어도 부분적으로 기초하여 제2 서브-상태를 결정하도록 인에이블된 제2 스토리지 디바이스의 서브-상태 생성 로직 하드웨어; 및
제2 서브-상태를 제1 스토리지 디바이스에 포워딩하도록 인에이블된 제2 스토리지 디바이스의 서브-상태 포워딩 로직 하드웨어를 포함하는, 시스템.
EC25) 방법으로서,
*제1 스토리지 디바이스가 복수의 호스트 요청 큐들 중 제1 큐로부터 제1 요청을 판독하는 단계;
제2 스토리지 디바이스가 호스트 요청 큐들 중 제2 큐로부터 제2 요청을 판독하는 단계 ― 제2 호스트 요청 큐는 제1 호스트 요청 큐와는 구별되고, 제2 스토리지 디바이스에 의한 판독은 제1 스토리지 디바이스에 의한 판독과는 독립적임 ―;
제1 스토리지 디바이스가 제1 요청 중 적어도 일부를 제2 스토리지 디바이스에 포워딩하는 단계;
제2 스토리지 디바이스가 제2 요청 중 적어도 일부를 제1 스토리지 디바이스에 포워딩하는 단계 ― 제2 스토리지 디바이스에 의한 포워딩은 제1 스토리지 디바이스에 의한 포워딩과 독립적임 ―;
제1 스토리지 디바이스가 제2 요청 중 적어도 일부에 따라 제1 스토리지를 액세스하고, 제1 스토리지 디바이스에 의한 액세스에 적어도 부분적으로 기초하여 복수의 호스트 상태 큐들 중 제1 큐에 제1 상태를 기록하는 단계; 및
제2 스토리지 디바이스가 제1 요청 중 적어도 일부에 따라 제2 스토리지를 액세스하고, 제2 스토리지 디바이스에 의한 액세스에 적어도 부분적으로 기초하여 호스트 상태 큐들 중 제2 큐에 제2 상태를 기록하는 단계를 포함하고,
제2 스토리지 디바이스에 의한 액세스는 제1 스토리지 디바이스에 의한 액세스와 독립적이고, 제2 스토리지는 제1 스토리지와는 구별되는, 방법.
EC26) 시스템으로서,
제1 스토리지 디바이스가 복수의 호스트 요청 큐들 중 제1 큐로부터 제1 요청을 판독하기 위한 수단;
제2 스토리지 디바이스가 호스트 요청 큐들 중 제2 큐로부터 제2 요청을 판독하기 위한 수단 ― 제2 호스트 요청 큐는 제1 호스트 요청 큐와는 구별되고, 제2 스토리지 디바이스에 의한 판독은 제1 스토리지 디바이스에 의한 판독과는 독립적임 ―;
제1 스토리지 디바이스가 제1 요청 중 적어도 일부를 제2 스토리지 디바이스에 포워딩하기 위한 수단;
제2 스토리지 디바이스가 제2 요청 중 적어도 일부를 제1 스토리지 디바이스에 포워딩하기 위한 수단 ― 제2 스토리지 디바이스에 의한 포워딩은 제1 스토리지 디바이스에 의한 포워딩과 독립적임 ―;
제1 스토리지 디바이스가 제2 요청 중 적어도 일부에 따라 제1 스토리지를 액세스하고, 제1 스토리지 디바이스에 의한 액세스에 적어도 부분적으로 기초하여 복수의 호스트 상태 큐들 중 제1 큐에 제1 상태를 기록하기 위한 수단; 및
제2 스토리지 디바이스가 제1 요청 중 적어도 일부에 따라 제2 스토리지를 액세스하고, 제2 스토리지 디바이스에 의한 액세스에 적어도 부분적으로 기초하여 호스트 상태 큐들 중 제2 큐에 제2 상태를 기록하기 위한 수단을 포함하고,
제2 스토리지 디바이스에 의한 액세스는 제1 스토리지 디바이스에 의한 액세스와 독립적이고, 제2 스토리지는 제1 스토리지와는 구별되는, 시스템.
EC27) 시스템으로서,
복수의 호스트 요청 큐들 중 제1 큐로부터 제1 요청을 판독하도록 인에이블된 제1 스토리지 디바이스의 호스트 인터페이스 로직 하드웨어;
호스트 요청 큐들 중 제2 큐로부터 제2 요청을 판독하도록 인에이블된 제2 스토리지 디바이스의 호스트 인터페이스 로직 하드웨어 ― 제2 호스트 요청 큐는 제1 호스트 요청 큐와는 구별되고, 제2 스토리지 디바이스에 의한 판독은 제1 스토리지 디바이스에 의한 판독과는 독립적임 ―;
제1 요청 중 적어도 일부를 제2 스토리지 디바이스에 포워딩하도록 인에이블된 제1 스토리지 디바이스의 요청 포워딩 로직 하드웨어;
제2 요청 중 적어도 일부를 제1 스토리지 디바이스에 포워딩하도록 인에이블된 제2 스토리지 디바이스의 요청 포워딩 로직 하드웨어 ― 제2 스토리지 디바이스에 의한 포워딩은 제1 스토리지 디바이스에 의한 포워딩과 독립적임 ―;
제2 요청 중 적어도 일부에 따라 제1 스토리지를 액세스하도록 인에이블된 제1 스토리지 디바이스의 스토리지 인터페이스 로직 하드웨어;
제1 스토리지 디바이스에 의한 액세스에 적어도 부분적으로 기초하여 제1 상태를 결정하도록 인에이블되고, 추가적으로 복수의 호스트 상태 큐들 중 제1 큐에 기록되도록 제1 스토리지 디바이스의 호스트 인터페이스 로직 하드웨어에 제1 상태를 제공하도록 인에이블된 제1 스토리지 디바이스의 상태 생성 로직 하드웨어;
제1 요청 중 적어도 일부에 따라 제2 스토리지를 액세스하도록 인에이블된 제2 스토리지 디바이스의 스토리지 인터페이스 로직 하드웨어; 및
제2 스토리지 디바이스에 의한 액세스에 적어도 부분적으로 기초하여 제2 상태를 결정하도록 인에이블되고, 추가적으로 호스트 상태 큐들 중 제2 큐에 기록되도록 제2 스토리지 디바이스의 호스트 인터페이스 로직 하드웨어에 제2 상태를 제공하도록 인에이블된 제2 스토리지 디바이스의 상태 생성 로직 하드웨어를 포함하고,
제2 스토리지 디바이스에 의한 액세스는 제1 스토리지 디바이스에 의한 액세스와 독립적이고, 제2 스토리지는 제1 스토리지와는 구별되는, 시스템.
EC28) 시스템으로서,
호스트로 하여금, 단일의 논리적 인터페이스로서, 복수의 물리적 스토리지 디바이스들에 걸쳐 분산되어 있는 복수의 스토리지 범위들의 집합에 액세스하는 것을 가능하게 하기 위한 수단 ― 물리적 스토리지 디바이스들 중 하나는 1차 에이전트로서 동작하도록 인에이블되고, 물리적 스토리지 디바이스들 중 하나 또는 둘 이상은 2차 에이전트들로서 동작하도록 인에이블됨 ―; 및
1차 에이전트와 2차 에이전트들 중 적어도 하나 사이에서 피어-투-피어 트래픽을 통신하기 위한 수단을 포함하고,
1차 에이전트는 리던던트 데이터 스토리지를 위해 2차 에이전트들 중 적어도 일부를 관리하도록 인에이블되고,
피어-투-피어 트래픽은 리던던트 데이터 스토리지를 구현하기 위한 리던던시 트래픽을 포함하는, 시스템
EC29) EC28에 있어서, 리던던시 트래픽 중 적어도 일부는 누적된 패리티 정보를 포함하는, 시스템.
EC30) EC29에 있어서, 상기 적어도 일부는 1차 에이전트 및/또는 2차 에이전트들 중 하나로부터 포워딩되는, 시스템.
EC31) EC29에 있어서, 상기 적어도 일부는 누적된 패리티 정보에 대응하는 누적된 패티리 스토리지를 구현하는 2차 에이전트들 중 하나에 포워딩되는, 시스템.
EC32) EC28에 있어서, 리던던시 트래픽 중 적어도 일부는 1차 에이전트에 의해 2차 에이전트들 중 하나 또는 둘 이상에 제공되는, 시스템.
EC33) EC28에 있어서, 리던던시 트래픽 중 적어도 일부는 2차 에이전트들 중 하나 또는 둘 이상에 의해 1차 에이전트에 제공되는, 시스템.
EC34) EC28에 있어서, 리던던시 트래픽 중 적어도 일부는 복수의 2차 에이전트들 사이에서 이루어지는, 시스템.
EC35) EC28에 있어서, 리던던시 트래픽은 제어 정보, 미변환된(untransformed) 데이터, 및 변환된 데이터 중 하나 또는 둘 이상을 포함하는, 시스템.
EC36) EC35에 있어서, 상기 제어 정보는 특정 스토리지 어드레스에 대해 얼마나 많은 리던던시 업데이트들이 발생하는지에 대한 표시를 포함하는, 시스템.
EC37) EC36에 있어서, 1차 에이전트 및 2차 에이전트들 중 적어도 하나는 상기 특정 스토리지 어드레스에 대해 리던던시 업데이트들이 발생할 때까지 리던던시 업데이트들에 관한 정보를 캐싱하기 위해 상기 표시를 이용하도록 인에이블되는, 시스템.
EC38) EC35에 있어서, 미변환된 데이터는 호스트로부터의 기록 데이터 중 하나 또는 둘 이상의 부분들을 포함하는, 시스템.
EC39) EC38에 있어서, 상기 기록 데이터의 부분들은 적어도 부분적으로 미러링 동작에 기초하여 결정되는, 시스템.
EC40) EC35에 있어서, 변환된 데이터는:
호스트로부터의 기록 데이터에 적어도 부분적으로 기초하는 패리티 데이터,
호스트로부터의 기록 데이터에 적어도 부분적으로 기초하는 XOR(배타적-or) 데이터, 및
적어도 부분적으로 RAID(Redundant Array of Inexpensive/Independent Disks) 구현에 기초하는 리던던시 정보 중 하나 또는 둘 이상을 포함하는, 시스템.
EC41) EC28에 있어서, 리던던시 트래픽은 RMW(판독-수정-기록) 동작 제어 및/또는 데이터 리던던시 트래픽을 포함하는, 시스템.
EC42) EC41에 있어서, 상기 RMW 동작 데이터 리던던시 트래픽은 호스트로부터의 기록 데이터의 모두 또는 임의의 부분들의 카피인, 시스템.
EC43) EC41에 있어서, 상기 RMW 동작 데이터 리던던시 트래픽은 호스트로부터의 기록 데이터 중 일부에 적어도 부분적으로 기초하는 변환된 데이터인, 시스템.
EC44) EC41에 있어서, 상기 RMW 동작 제어 리던던시 트래픽은, 특정 어드레스에 대해 얼마나 많은 리던던시 업데이트들이 발생하는지에 대한 표시인, 시스템.
EC45) EC28에 있어서, 리던던시 트래픽은 데이터 복구 동작 제어 및/또는 데이터 리던던시 트래픽을 포함하는, 시스템.
EC46) EC28에 있어서, 리던던트 데이터 스토리지는 하나 또는 둘 이상의 RAID 기술들에 따르는, 시스템.
EC47) EC28에 있어서, 1차 에이전트는, 스토리지에 액세스하기 위한 호스트로부터의 요청을 수락하고, 2차 에이전트들의 모두 또는 임의의 부분들에 요청을 하나 또는 둘 이상의 서브-요청들로서 포워딩하며, 서브-요청들이 포워딩된 2차 에이전트들로부터 서브-요청들과 연관되는 서브-상태들을 수락하도록 인에이블되는, 시스템.
EC48) EC47에 있어서, 서브-요청들은 리던던트 데이터 스토리지가 따르는 리던던시 기술에 적어도 부분적으로 기초하여 결정되는, 시스템.
EC49) EC48에 있어서, 리던던시 기술은 RAID 구현에 따르는, 시스템.
EC50) EC47에 있어서, 서브-요청들 중 적어도 일부는 서브-요청들이 포워딩되는 물리적 디바이스들에 걸친 스트라이핑에 부분적으로 기초하는, 시스템.
EC51) EC50에 있어서, 상기 스트라이핑은 RAID 구현에 따르는, 시스템.
EC52) EC50에 있어서, 상기 스트라이핑은 작업부하에 따라 동적으로 변경되는, 시스템.
EC53) EC28에 있어서, 2차 에이전트들 각각은, 1차 에이전트로부터 하나 또는 둘 이상의 서브-요청들을 수락하고, 로컬 스토리지에 액세스하기 위해 상기 수락된 서브-요청들의 호스트-컨텍스트 어드레싱 정보를 변환하고, 적어도 부분적으로 로컬 액세스에 기초하여 1차 에이전트에 각각의 서브-상태들을 제공하도록 인에이블되는, 시스템.
EC54) EC28에 있어서, 2차 에이전트들 각각은 1차 에이전트로부터 하나 또는 둘 이상의 서브-요청들을 수락하고, 로컬 스토리지에 액세스하기 위해 상기 수락된 서브-요청들의 호스트-컨텍스트 어드레싱 정보를 변환하고, 로컬 스토리지에 액세스하며, 액세스의 판독/기록 데이터인 데이터를 호스트로 전달하도록 인에이블되는, 시스템.
EC55) EC28에 있어서, 호스트와 1차 에이전트 사이에 호스트 트래픽을 통신하기 위한 수단을 더 포함하는, 시스템.
EC56) EC55에 있어서, 피어-투-피어 트래픽을 통신하기 위한 수단은 호스트 트래픽을 통신하기 위한 수단의 논리적 채널들과는 구분되는 적어도 하나의 논리적 채널을 통하는, 시스템.
EC57) EC55에 있어서, 피어-투-피어 트래픽을 통신하기 위한 수단은 호스트 트래픽을 통신하기 위한 수단의 물리적 채널들과는 구분되는 적어도 하나의 물리적 채널을 통하는, 시스템.
EC58) EC55에 있어서, 피어-투-피어 트래픽을 통신하기 위한 수단 및 호스트 트래픽을 통신하기 위한 수단 중 하나 또는 둘 이상은 PCI 익스프레스(PCIe) 표준과 호환가능한, 시스템.
EC59) EC55에 있어서, 피어-투-피어 트래픽을 통신하기 위한 수단 및 호스트 트래픽을 통신하기 위한 수단 중 하나 또는 둘 이상은 인피니밴드 표준과 호환가능한, 시스템.
EC60) EC55에 있어서, 피어-투-피어 트래픽을 통신하기 위한 수단은 불투명 스위치의 모두 또는 임의의 부분들을 포함하는, 시스템.
EC61) EC55에 있어서, 호스트 트래픽을 통신하기 위한 수단은 투명 스위치의 모두 또는 임의의 부분들을 포함하는, 시스템.
EC62) 방법으로서,
호스트로 하여금, 단일의 논리적 인터페이스로서, 복수의 물리적 스토리지 디바이스들에 걸쳐 분산되어 있는 복수의 스토리지 범위들의 집합에 액세스하는 것을 가능하게 하는 단계 ― 물리적 스토리지 디바이스들 중 하나는 1차 에이전트로서 동작하도록 인에이블되고, 물리적 스토리지 디바이스들 중 하나 또는 둘 이상은 2차 에이전트들로서 동작하도록 인에이블됨 ―; 및
1차 에이전트와 2차 에이전트들 중 적어도 하나 사이에서 피어-투-피어 트래픽을 통신하는 단계를 포함하고,
1차 에이전트는 리던던트 데이터 스토리지를 위해 2차 에이전트들 중 적어도 일부를 관리하도록 인에이블되고,
피어-투-피어 트래픽은 리던던트 데이터 스토리지를 구현하기 위한 리던던시 트래픽을 포함하는, 방법.
EC63) 시스템으로서,
호스트 인터페이스 로직 하드웨어;
적어도 부분적으로 호스트 인터페이스 로직 하드웨어를 통해 호스트와 선택적으로 통신하도록 인에이블된 복수의 물리적 스토리지 디바이스들 ― 물리적 스토리지 디바이스들 중 적어도 하나는 1차 에이전트로서 동작하도록 인에이블되고, 물리적 스토리지 디바이스들 중 하나 또는 둘 이상은 각각의 2차 에이전트들로서 동작하도록 인에이블됨 ―; 및
1차 에이전트와 2차 에이전트들 중 적어도 하나 사이의 피어-투-피어 트래픽을 가능하게 하는 피어-투-피어 통신 로직 하드웨어를 포함하고,
물리적 스토리지 디바이스들은 물리적 스토리지 디바이스들에 걸쳐 분산되어 있는 복수의 스토리지 범위들의 집합을 구현하며,
1차 에이전트는 리던던트 데이터 스토리지를 구현하기 위해서 2차 에이전트들 중 적어도 일부를 관리하도록 인에이블되고,
피어-투-피어 트래픽은 리던던트 데이터 스토리지를 구현하기 위한 리던던시 트래픽을 포함하는, 시스템.
EC64) 시스템으로서,
피어-투-피어 프로토콜을 통해 복수의 스토리지 에이전트들 사이에서 인터페이싱하기 위한 수단;
스토리지 에이전트들 중 오동작하는 에이전트의 오동작을 검출하기 위한 수단 ― 상기 오동작은 오동작하는 스토리지 에이전트가 스토리지의 특정 부분을 더 이상 구현하지 않는 것임 ―; 및
상기 스토리지의 특정 부분을 구현하기 위해 재할당의 대상인 스토리지를 할당하기 위한 수단 ― 상기 재할당의 대상인 스토리지는 스토리지 에이전트들 중 오동작하지 않는 에이전트들에 의해 구현되는 스토리지의 임의의 조합을 포함함 ― 을 포함하는, 시스템.
EC65) EC64에 있어서, 스토리지 에이전트들은 2차 에이전트들을 포함하는, 시스템.
EC66) EC64에 있어서, 스토리지 에이전트들은 1차 에이전트들을 포함하는, 시스템.
EC67) EC64에 있어서, 상기 수단들은 1차 에이전트에 포함되고, 스토리지 에이전트들은 2차 에이전트들을 포함하는, 시스템.
EC68) EC64에 있어서, 스토리지 에이전트들 각각은 적어도 물리적 스토리지의 각각의 부분을 구현하는, 시스템.
EC69) EC68에 있어서, 상기 각각의 부분들은 하나 또는 둘 이상의 비-휘발성 메모리들을 포함하는, 시스템.
EC70) EC64에 있어서, 상기 시스템은 로컬 스토리지를 더 포함하고, 상기 할당의 대상인 스토리지는 로컬 스토리지를 더 포함하는, 시스템.
EC71) EC64에 있어서, 상기 오동작은 부분적인 오동작이고, 오동작하는 스토리지 에이전트는 부분적인 오동작 이후에 적어도 일부 스토리지를 계속해서 구현하는, 시스템.
EC72) EC71에 있어서, 상기 할당의 대상인 스토리지는 상기 적어도 일부 스토리지를 더 포함하는, 시스템.
EC73) EC64에 있어서, 상기 검출하기 위한 수단은 적어도 부분적으로 스토리지 에이전트들 중 하나를 통해 구현되는, 시스템.
EC74) EC64에 있어서, 상기 검출하기 위한 수단은 적어도 부분적으로 디바이스 드라이버를 통해 구현되는, 시스템.
EC75) EC64에 있어서, 하나 또는 둘 이상의 리던던시 기술들을 통해 데이터를 복구하기 위한 수단을 더 포함하는, 시스템.
EC76) EC75에 있어서, 리던던시 기술들은 미러링 기술을 포함하는, 시스템.
EC77) EC75에 있어서, 리던던시 기술들은 RAID 기술을 포함하는, 시스템.
EC78) 방법으로서,
피어-투-피어 프로토콜을 통해 복수의 스토리지 에이전트들 사이에서 인터페이싱하는 단계;
스토리지 에이전트들 중 오동작하는 에이전트의 오동작을 검출하는 단계 ― 상기 오동작은 오동작하는 스토리지 에이전트가 스토리지의 특정 부분을 더 이상 구현하지 않는 것임 ―; 및
상기 스토리지의 특정 부분을 구현하기 위해 재할당의 대상인 스토리지를 할당하는 단계 ― 상기 재할당의 대상인 스토리지는 스토리지 에이전트들 중 오동작하지 않는 에이전트들에 의해 구현되는 스토리지의 임의의 조합을 포함함 ― 를 포함하는, 방법.
EC79) 시스템으로서,
복수의 스토리지 에이전트들 사이에서 피어-투-피어 프로토콜 통신을 가능하게 하는 피어-투-피어 통신 로직 하드웨어;
스토리지 에이전트들 중 오동작하는 에이전트의 오동작을 검출하도록 인에이블된 오동작 검출 로직 하드웨어 ― 상기 오동작은 오동작하는 스토리지 에이전트가 스토리지의 특정 부분을 더 이상 구현하지 않는 것임 ―; 및
명령들을 실행하도록 인에이블된 프로세서로서, 상기 명령들은 프로세서에 의해 실행될 때 프로세서로 하여금 상기 스토리지의 특정 부분을 구현하기 위해 재할당의 대상인 스토리지를 할당하는 것을 포함하는 동작들을 수행하도록 하는, 프로세서 ― 상기 재할당의 대상인 스토리지는 스토리지 에이전트들 중 오동작하지 않는 에이전트들에 의해 구현되는 스토리지의 임의의 조합을 포함함 ― 를 포함하는, 시스템.
EC80) 내부에 명령들의 세트가 저장된 컴퓨터 판독가능 매체로서, 상기 명령들은 처리 엘리먼트에 의해 실행될 때 처리 엘리먼트로 하여금:
피어-투-피어 프로토콜을 통해 복수의 스토리지 에이전트들 사이에서 인터페이싱하는 것의 관리;
스토리지 에이전트들 중 오동작하는 에이전트의 오동작을 검출하는 것의 관리 ― 상기 오동작은 오동작하는 스토리지 에이전트가 스토리지의 특정 부분을 더 이상 구현하지 않는 것임 ―; 및
상기 스토리지의 특정 부분을 구현하기 위해 재할당의 대상인 스토리지를 할당하는 것의 관리 ― 상기 재할당의 대상인 스토리지는 스토리지 에이전트들 중 오동작하지 않는 에이전트들에 의해 구현되는 스토리지의 임의의 조합을 포함함 ― 를 포함하는 동작들을 수행하도록 하는, 컴퓨터 판독가능 매체.
EC81) 시스템으로서,
복수의 스토리지 에이전트들 중 오동작하는 에이전트의 오동작을 검출하기 위한 수단 ― 상기 오동작은 오동작하는 스토리지 에이전트가 더 이상 호스트로 하여금, 단일의 논리적 인터페이스로서, 스토리지 에이전트들에 걸쳐 분산되어 있는 복수의 스토리지 범위들의 집합에 액세스하는 것을 가능하지 않게 하는 것임 ―;
오동작하는 스토리지 에이전트를 대체하기 위해 대체 스토리지 에이전트를 식별하기 위한 수단; 및
단일의 논리적 인터페이스를 제공하도록 상기 대체 스토리지 에이전트를 구성하기 위한 수단을 포함하는, 시스템.
EC82) EC81에 있어서, 대체 스토리지 에이전트는 핫 스페어인, 시스템.
EC83) EC81에 있어서, 대체 스토리지 에이전트는 오동작하는 스토리지 에이전트 이외의 스토리지 에이전트들 중 하나인, 시스템.
EC84) EC83에 있어서, 대체 스토리지 에이전트는 1차 에이전트인, 시스템.
EC85) EC83에 있어서, 대체 스토리지 에이전트는 1차 에이전트 또는 2차 에이전트로서 선택적으로 동작가능한, 설정가능한 에이전트인, 시스템.
EC86) EC81에 있어서, 상기 검출하기 위한 수단은 적어도 부분적으로 스토리지 에이전트들 중 하나를 통해 구현되는, 시스템.
EC87) EC81에 있어서, 상기 검출하기 위한 수단은 적어도 부분적으로 호스트 상에서 실행되는 디바이스 드라이버를 통해 구현되는, 시스템.
EC88) EC81에 있어서, 상기 시스템은 서브미션 큐 내의 엔트리로부터 스토리지 요청을 판독하는 것을 포함하는 호스트 인터페이스 프로토콜을 통해 호스트에 인터페이싱하기 위한 수단을 더 포함하고, 상기 인터페이싱하기 위한 수단은 상기 단일의 논리적 인터페이스를 제공하는 것에 따르는, 시스템.
EC89) EC88에 있어서, 적어도 부분적으로 스토리지 요청의 어드레스 정보에 기초하여 하나 또는 둘 이상의 스토리지 서브-요청들을 결정하기 위한 수단을 더 포함하는, 시스템.
EC90) EC89에 있어서, 서브-요청들을 스토리지 에이전트들 중 2차 에이전트들에 포워딩하기 위한 수단을 더 포함하는, 시스템.
EC91) EC90에 있어서, 서브-요청들에 각각 대응하는 서브-상태 정보를 수신하고, 적어도 부분적으로 상기 수신된 서브-상태 정보에 기초하여 전체 상태를 호스트에 반환하기 위한 수단을 더 포함하는, 시스템.
EC92) EC81에 있어서, 스토리지 에이전트들 사이에서 피어-투-피어 트래픽을 통신하기 위한 수단을 더 포함하는, 시스템.
EC93) 방법으로서,
복수의 스토리지 에이전트들 중 오동작하는 에이전트의 오동작을 검출하는 단계 ― 상기 오동작은 오동작하는 스토리지 에이전트가 더 이상 호스트로 하여금, 단일의 논리적 인터페이스로서, 스토리지 에이전트들에 걸쳐 분산되어 있는 복수의 스토리지 범위들의 집합에 액세스하는 것을 가능하지 않게 하는 것임 ―
오동작하는 스토리지 에이전트를 대체하기 위해 대체 스토리지 에이전트를 식별하는 단계; 및
단일의 논리적 인터페이스를 제공하도록 상기 대체 스토리지 에이전트를 구성하는 단계를 포함하는, 방법.
EC94) 시스템으로서,
복수의 스토리지 에이전트들 중 오동작하는 에이전트의 오동작을 검출하도록 인에이블된 오동작 검출 로직 하드웨어 ― 상기 오동작은 오동작하는 스토리지 에이전트가 더 이상 호스트로 하여금, 단일의 논리적 인터페이스로서, 스토리지 에이전트들에 걸쳐 분산되어 있는 복수의 스토리지 범위들의 집합에 액세스하는 것을 가능하지 않게 하는 것임 ―; 및
명령들을 실행하도록 인에이블된 프로세서를 포함하고,
상기 명령들은 프로세서에 의해 실행될 때 프로세서로 하여금:
오동작하는 스토리지 에이전트를 대체하기 위해 대체 스토리지 에이전트를 식별하는 것; 및
단일의 논리적 인터페이스를 제공하도록 상기 대체 스토리지 에이전트를 구성하는 것을 포함하는 동작들을 수행하도록 하는, 시스템.
EC95) 내부에 명령들의 세트가 저장된 컴퓨터 판독가능 매체로서, 상기 명령들은 처리 엘리먼트에 의해 실행될 때 처리 엘리먼트로 하여금:
복수의 스토리지 에이전트들 중 오동작하는 에이전트의 오동작을 검출하는 것의 관리 ― 상기 오동작은 오동작하는 스토리지 에이전트가 더 이상 호스트로 하여금, 단일의 논리적 인터페이스로서, 스토리지 에이전트들에 걸쳐 분산되어 있는 복수의 스토리지 범위들의 집합에 액세스하는 것을 가능하지 않게 하는 것임 ―;
오동작하는 스토리지 에이전트를 대체하기 위해 대체 스토리지 에이전트를 식별하는 것의 관리; 및
단일의 논리적 인터페이스를 제공하도록 상기 대체 스토리지 에이전트를 구성하는 것의 관리를 포함하는 동작들을 수행하도록 하는, 컴퓨터 판독가능 매체.
EC96) 시스템으로서,
대용량 스토리지에 인터페이싱하기 위한 스토리지 인터페이스 수단;
호스트-인터페이스 프로토콜을 통해 호스트에 인터페이싱하기 위한 호스트 인터페이스 수단 ― 상기 호스트 인터페이스 수단은 서브미션 큐 내의 엔트리로부터 스토리지 요청을 판독하기 위한 수단을 포함함 ―;
피어-투-피어 프로토콜을 통해 1차 에이전트에 인터페이싱하기 위한 1차 에이전트 인터페이스 수단;
스토리지 인터페이스 수단을 통해 대용량 스토리지에 액세스하도록 적어도 하나의 어드레스를 결정하기 위한 어드레스 결정 수단 ― 상기 결정하는 수단은 적어도 부분적으로 스토리지 요청에 포함되는 어드레스 정보에 기초하여 동작가능함 ―; 및
제로(0) 스토리지 용량을 호스트에 역으로 보고하고 추가적으로 대용량 스토리지의 스토리지 용량에 따라 스토리지 용량을 1차 에이전트에 역으로 보고하기 위한 스토리지 용량 보고 수단을 포함하고,
호스트 인터페이스 수단 및 1차 에이전트 인터페이스 수단은 적어도 부분적으로 동일한 물리적 채널을 통해 구현되는, 시스템.
EC97) EC96에 있어서, 적어도 부분적으로 어드레스 정보에 기초하여, 누적된 패리티 데이터를 포워딩하게 될 적어도 하나의 목적지를 결정하기 위한 목적지 결정 수단을 더 포함하는, 시스템.
EC98) EC97에 있어서, 적어도 하나의 목적지는 피어-투-피어 프로토콜을 통해 도달가능한, 시스템.
EC99) EC98에 있어서, 적어도 하나의 목적지는 1차 에이전트인, 시스템.
EC100) EC98에 있어서, 적어도 하나의 목적지는 2차 에이전트인, 시스템.
EC101) EC96에 있어서, 어드레스 결정 수단은 하나 또는 둘 이상의 리던던시 기술들에 따라 동작하는, 시스템.
EC102) EC101에 있어서, 리던던시 기술들은 하나 또는 둘 이상의 미러링 기술들 및/또는 하나 또는 둘 이상의 RAID 기술들을 포함하는, 시스템.
EC103) EC96에 있어서, 호스트 인터페이스 수단은 호스트와 대용량 스토리지 사이에서 데이터를 전달하기 위한 수단을 더 포함하는, 시스템.
EC104) EC96에 있어서, 상기 동일한 물리적 채널은 PCI 익스프레스(PCIe) 표준과 호환가능한, 시스템.
EC105) EC96에 있어서, 상기 동일한 물리적 채널은 인피니밴드 표준과 호환가능한, 시스템.
EC106) EC96에 있어서, 상기 대용량 스토리지는 하나 또는 둘 이상의 비-휘발성 메모리들을 포함하는, 시스템.
EC107) 방법으로서,
대용량 스토리지에 인터페이싱하는 단계;
호스트-인터페이스 프로토콜을 통해 호스트에 인터페이싱하는 단계 ― 상기 호스트에 인터페이싱하는 단계는 서브미션 큐 내의 엔트리로부터 스토리지 요청을 판독하는 단계를 포함함 ―;
피어-투-피어 프로토콜을 통해 1차 에이전트에 인터페이싱하는 단계;
대용량 스토리지에 인터페이싱하는 것을 통해 대용량 스토리지에 액세스하도록 적어도 하나의 어드레스를 결정하는 단계 ― 상기 결정하는 단계는 적어도 부분적으로 스토리지 요청에 포함되는 어드레스 정보에 기초하여 동작가능함 ―; 및
제로(0) 스토리지 용량을 호스트에 역으로 보고하고 대용량 스토리지의 스토리지 용량에 따라 스토리지 용량을 1차 에이전트에 역으로 보고하는 단계를 포함하고,
호스트에 인터페이싱하는 단계 및 1차 에이전트에 인터페이싱하는 단계는 적어도 부분적으로 동일한 물리적 채널을 통해 구현되는, 방법.
EC108) 시스템으로서,
대용량 스토리지와 인터페이싱하도록 인에이블된 대용량 스토리지 하드웨어 인터페이스;
호스트와 인터페이싱하는 것을 가능하게 하고, 호스트-인터페이스 프로토콜과 호환가능하며, 서브미션 큐 내의 엔트리로부터 스토리지 요청을 판독하도록 인에이블된 호스트 인터페이스 로직 하드웨어;
피어-투-피어 프로토콜을 통해 1차 에이전트와 인터페이싱하는 것을 가능하게 하는 피어-투-피어 통신 로직 하드웨어;
대용량 스토리지 하드웨어 인터페이스를 통해 대용량 스토리지에 액세스하도록 적어도 하나의 어드레스를 결정하도록 인에이블된 액세스 어드레스 결정 로직 하드웨어 ― 상기 결정은 적어도 부분적으로 스토리지 요청에 포함되는 어드레스 정보에 기초하여 동작가능함 ―; 및
제로(0) 스토리지 용량을 호스트에 역으로 보고하도록 인에이블되고 추가적으로 대용량 스토리지의 스토리지 용량에 따라 스토리지 용량을 1차 에이전트에 역으로 보고하도록 인에이블된 스토리지 용량 보고 로직 하드웨어를 포함하고,
상기 호스트와 인터페이싱하는 것 및 1차 에이전트와 인터페이싱하는 것은 적어도 부분적으로 동일한 물리적 채널을 통해 구현되는, 시스템.
EC109) 내부에 명령들의 세트가 저장된 컴퓨터 판독가능 매체로서, 상기 명령들은 처리 엘리먼트에 의해 실행될 때 처리 엘리먼트로 하여금:
대용량 스토리지에 인터페이싱하는 것의 관리;
호스트-인터페이스 프로토콜을 통해 호스트에 인터페이싱하는 것의 관리 ― 상기 호스트에 인터페이싱하는 것은 서브미션 큐 내의 엔트리로부터 스토리지 요청을 판독하는 것을 포함함 ―;
피어-투-피어 프로토콜을 통해 1차 에이전트에 인터페이싱하는 것의 관리;
대용량 스토리지에 인터페이싱하는 것을 통해 대용량 스토리지에 액세스하도록 적어도 하나의 어드레스를 결정하는 것의 관리 ― 상기 결정하는 것은 적어도 부분적으로 스토리지 요청에 포함되는 어드레스 정보에 기초하여 동작가능함 ―; 및
제로(0) 스토리지 용량을 호스트에 역으로 보고하고 대용량 스토리지의 스토리지 용량에 따라 스토리지 용량을 1차 에이전트에 역으로 보고하는 것의 관리를 포함하는 동작들을 수행하도록 하고,
호스트에 인터페이싱하는 것 및 1차 에이전트에 인터페이싱하는 것은 적어도 부분적으로 동일한 물리적 채널을 통해 구현되는, 컴퓨터 판독가능 매체.
EC110) 시스템으로서,
대용량 스토리지에 인터페이싱하기 위한 스토리지 인터페이스 수단;
호스트-인터페이스 프로토콜을 통해 호스트에 인터페이싱하기 위한 호스트 인터페이스 수단 ― 상기 호스트 인터페이스 수단은 호스트와 대용량 스토리지 사이에서 데이터를 전달하기 위한 수단을 포함함 ―;
피어-투-피어 프로토콜을 통해 1차 에이전트에 인터페이싱하기 위한 1차 에이전트 인터페이스 수단 ― 1차 에이전트 인터페이스 수단은 1차 에이전트로부터 포워딩된 스토리지 요청을 수신하기 위한 수단을 포함함 ―; 및
대용량 스토리지에 액세스하도록 적어도 하나의 어드레스를 결정하기 위한 어드레스 결정 수단 ― 상기 결정하기 위한 수단은 적어도 부분적으로, 포워딩된 스토리지 요청에 포함되는 어드레스 정보에 기초하여 동작가능함 ― 을 포함하고,
포워딩된 스토리지 요청은 서브미션 큐로부터 획득된 요청에 대응하고, 상기 요청 및 포워딩된 요청은 동일한 하나 또는 둘 이상의 어드레스 범위들을 참조하며,
호스트 인터페이스 수단 및 1차 에이전트 인터페이스 수단은 적어도 부분적으로 동일한 물리적 채널을 통해 구현되는, 시스템.
EC111) EC110에 있어서, 적어도 부분적으로 어드레스 정보에 기초하여, 누적된 패리티 데이터를 포워딩하게 될 적어도 하나의 목적지를 결정하기 위한 목적지 결정 수단을 더 포함하는, 시스템.
EC112) EC111에 있어서, 적어도 하나의 목적지는 피어-투-피어 프로토콜을 통해 도달가능한, 시스템.
EC113) EC112에 있어서, 적어도 하나의 목적지는 1차 에이전트인, 시스템.
EC114) EC112에 있어서, 적어도 하나의 목적지는 2차 에이전트인, 시스템.
EC115) EC110에 있어서, 어드레스 결정 수단은 하나 또는 둘 이상의 리던던시 기술들에 따라 동작하는, 시스템.
EC116) EC115에 있어서, 리던던시 기술들은 하나 또는 둘 이상의 미러링 기술들 및/또는 하나 또는 둘 이상의 RAID 기술들을 포함하는, 시스템.
EC117) EC110에 있어서, 제로(0) 스토리지 용량을 호스트에 역으로 보고하고 추가적으로 대용량 스토리지의 스토리지 용량에 따라 스토리지 용량을 1차 에이전트에 역으로 보고하기 위한 스토리지 용량 보고 수단을 더 포함하는, 시스템.
EC118) EC110에 있어서, 상기 동일한 물리적 채널은 PCI 익스프레스(PCIe) 표준과 호환가능한, 시스템.
EC119) EC110에 있어서, 상기 동일한 물리적 채널은 인피니밴드 표준과 호환가능한, 시스템.
EC120) EC110에 있어서, 상기 대용량 스토리지는 하나 또는 둘 이상의 비-휘발성 메모리들을 포함하는, 시스템.
EC121) 방법으로서,
대용량 스토리지에 인터페이싱하는 단계;
호스트-인터페이스 프로토콜을 통해 호스트에 인터페이싱하는 단계 ― 상기 호스트에 인터페이싱하는 단계는 호스트와 대용량 스토리지 사이에서 데이터를 전달하는 것을 포함함 ―;
피어-투-피어 프로토콜을 통해 1차 에이전트에 인터페이싱하는 단계 ― 1차 에이전트에 인터페이싱하는 단계는 1차 에이전트로부터 포워딩된 스토리지 요청을 수신하는 것을 포함함 ―; 및
대용량 스토리지에 인터페이싱하는 것을 통해 대용량 스토리지에 액세스하도록 적어도 하나의 어드레스를 결정하는 단계 ― 상기 결정하는 단계는 적어도 부분적으로 스토리지 요청에 포함되는 어드레스 정보에 기초하여 동작가능함 ― 를 포함하고,
포워딩된 스토리지 요청은 서브미션 큐로부터 획득된 요청에 대응하고, 상기 요청 및 포워딩된 요청은 동일한 하나 또는 둘 이상의 어드레스 범위들을 참조하며,
호스트에 인터페이싱하는 단계 및 1차 에이전트에 인터페이싱하는 단계는 적어도 부분적으로 동일한 물리적 채널을 통해 구현되는, 방법.
EC122) 시스템으로서,
대용량 스토리지와 인터페이싱하도록 인에이블된 대용량 스토리지 하드웨어 인터페이스;
호스트와 인터페이싱하는 것을 가능하게 하고, 호스트-인터페이스 프로토콜과 호환가능하며, 적어도 부분적으로 대용량 스토리지 하드웨어 인터페이스를 통해 호스트와 대용량 스토리지 사이에서 데이터를 전달하도록 인에이블된 호스트 인터페이스 로직 하드웨어;
피어-투-피어 프로토콜을 통해 1차 에이전트와 인터페이싱하는 것을 가능하게 하는 피어-투-피어 통신 로직 하드웨어;
적어도 부분적으로 피어-투-피어 통신 로직 하드에어를 통해 1차 에이전트로부터 포워딩된 스토리지 요청을 수신하는 것을 가능하게 하는 스토리지 요청 수락 로직 하드웨어; 및
대용량 스토리지 하드웨어 인터페이스를 통해 대용량 스토리지에 액세스하도록 적어도 하나의 어드레스를 결정하도록 인에이블된 액세스 어드레스 결정 로직 하드웨어 ― 상기 결정은 적어도 부분적으로 스토리지 요청에 포함되는 어드레스 정보에 기초하여 동작가능함 ― 를 포함하고,
포워딩된 스토리지 요청은 서브미션 큐로부터 획득된 요청에 대응하고, 상기 요청 및 포워딩된 요청은 동일한 하나 또는 둘 이상의 어드레스 범위들을 참조하며,
호스트와 인터페이싱하는 것 및 1차 에이전트와 인터페이싱하는 것은 적어도 부분적으로 동일한 물리적 채널을 통해 구현되는, 시스템.
EC123) 내부에 명령들의 세트가 저장된 컴퓨터 판독가능 매체로서, 상기 명령들은 처리 엘리먼트에 의해 실행될 때 처리 엘리먼트로 하여금:
대용량 스토리지에 인터페이싱하는 것의 관리;
호스트-인터페이스 프로토콜을 통해 호스트에 인터페이싱하는 것의 관리 ― 상기 호스트에 인터페이싱하는 것은 호스트와 대용량 스토리지 사이에서 데이터를 전달하는 것을 포함함 ―;
피어-투-피어 프로토콜을 통해 1차 에이전트에 인터페이싱하는 것의 관리 ― 1차 에이전트에 인터페이싱하는 것은 1차 에이전트로부터 포워딩된 스토리지 요청을 수신하는 것을 포함함 ―; 및
대용량 스토리지에 인터페이싱하는 것을 통해 대용량 스토리지에 액세스하도록 적어도 하나의 어드레스를 결정하는 것의 관리 ― 상기 결정은 적어도 부분적으로 스토리지 요청에 포함되는 어드레스 정보에 기초하여 동작가능함 ― 를 포함하는 동작들을 수행하도록 하고,
포워딩된 스토리지 요청은 서브미션 큐로부터 획득된 요청에 대응하고, 상기 요청 및 포워딩된 요청은 동일한 하나 또는 둘 이상의 어드레스 범위들을 참조하며,
*호스트에 인터페이싱하는 것 및 1차 에이전트에 인터페이싱하는 것은 적어도 부분적으로 동일한 물리적 채널을 통해 구현되는, 컴퓨터 판독가능 매체.
EC124) 시스템으로서,
호스트-인터페이스 프로토콜을 통해 호스트에 인터페이싱하기 위한 호스트 인터페이스 수단 ― 호스트 인터페이스 수단은 서브미션 큐 내의 엔트리로부터 스토리지 요청을 판독하기 위한 수단을 포함함 ―;
피어-투-피어 프로토콜을 통해 2차 에이전트에 인터페이싱하기 위한 2차 에이전트 인터페이스 수단 ― 2차 에이전트 인터페이스 수단은 스토리지 서브-요청을 2차 에이전트에 포워딩하기 위한 수단을 포함함 ―;
스토리지 요청에 포함되는 어드레스 정보에 적어도 부분적으로 기초하여 서브-요청을 결정하기 위한 서브-요청 생성 수단; 및
전체 스토리지 용량을 호스트에 역으로 보고하기 위한 스토리지 용량 보고 수단 ― 전체 스토리지 용량은 적어도 부분적으로 2차 에이전트의 스토리지 용량에 기초함 ― 을 포함하고,
상기 호스트 인터페이스 수단 및 2차 에이전트 인터페이스 수단은 적어도 부분적으로 동일한 물리적 채널을 통해 구현되는, 시스템.
EC125) EC124에 있어서, 대용량 스토리지에 인터페이싱하기 위한 스토리지 인터페이스 수단을 더 포함하는, 시스템.
EC126) EC125에 있어서, 대용량 스토리지는 하나 또는 둘 이상의 비-휘발성 메모리들을 포함하는, 시스템.
EC127) 방법으로서,
호스트-인터페이스 프로토콜을 통해 호스트와 인터페이싱하는 단계 ― 상기 호스트와 인터페이싱하는 단계는 서브미션 큐 내의 엔트리로부터 스토리지 요청을 판독하는 단계를 포함함 ―;
피어-투-피어 프로토콜을 통해 2차 에이전트와 인터페이싱하는 단계 ― 상기 2차 에이전트와 인터페이싱하는 단계는 스토리지 서브-요청을 2차 에이전트에 포워딩하는 단계를 포함함 ―;
스토리지 요청에 포함되는 어드레스 정보에 적어도 부분적으로 기초하여 서브-요청을 결정하는 단계; 및
전체 스토리지 용량을 호스트에 역으로 보고하는 단계 ― 전체 스토리지 용량은 적어도 부분적으로 2차 에이전트의 스토리지 용량에 기초함 ― 를 포함하고,
상기 호스트와 인터페이싱하는 단계 및 2차 에이전트와 인터페이싱하는 단계는 적어도 부분적으로 동일한 물리적 채널을 통해 구현되는, 방법.
EC128) 시스템으로서,
호스트와의 인터페이싱을 가능하게 하고, 호스트-인터페이스 프로토콜과 호환가능하며, 서브미션 큐 내의 엔트리로부터 스토리지 요청을 판독하도록 인에이블된 호스트 인터페이스 로직 하드웨어;
피어-투-피어 프로토콜을 통해 2차 에이전트와의 인터페이싱을 가능하게 하는 피어-투-피어 통신 로직 하드웨어;
적어도 부분적으로 피어-투-피어 통신 로직 하드웨어를 통해 스토리지 서브-요청을 2차 에이전트에 포워딩하도록 인에이블된 요청 포워딩 로직 하드웨어;
스토리지 요청에 포함되는 어드레스 정보에 적어도 부분적으로 기초하여 서브-요청을 결정하도록 인에이블된 서브-요청 결정 로직 하드웨어; 및
전체 스토리지 용량을 호스트에 역으로 보고하도록 인에이블된 스토리지 용량 보고 로직 하드웨어 ― 전체 스토리지 용량은 적어도 부분적으로 2차 에이전트의 스토리지 용량에 기초함 ― 를 포함하고,
*상기 호스트와의 인터페이싱 및 2차 에이전트와의 인터페이싱은 적어도 부분적으로 동일한 물리적 채널을 통해 구현되는, 시스템.
EC129) 내부에 명령들의 세트가 저장된 컴퓨터 판독가능 매체로서, 상기 명령들은 처리 엘리먼트에 의해 실행될 때 처리 엘리먼트로 하여금:
호스트-인터페이스 프로토콜을 통해 호스트와 인터페이싱하는 것의 관리 ― 상기 호스트 인터페이싱은 서브미션 큐 내의 엔트리로부터 스토리지 요청을 판독하는 것을 포함함 ―;
피어-투-피어 프로토콜을 통해 2차 에이전트와 인터페이싱하는 것의 관리 ― 상기 2차 에이전트 인터페이싱은 스토리지 서브-요청을 2차 에이전트에 포워딩하는 것을 포함함 ―;
스토리지 요청에 포함되는 어드레스 정보에 적어도 부분적으로 기초하여 서브-요청을 결정하는 것의 관리; 및
전체 스토리지 용량을 호스트에 역으로 보고하는 것의 관리 ― 전체 스토리지 용량은 적어도 부분적으로 2차 에이전트의 스토리지 용량에 기초함 ― 를 포함하는 동작들을 수행하도록 하고,
상기 호스트와의 인터페이싱 및 2차 에이전트와의 인터페이싱은 적어도 부분적으로 동일한 물리적 채널을 통해 구현되는, 컴퓨터 판독가능 매체.
EC130) 시스템으로서,
대용량 스토리지에 인터페이싱하기 위한 스토리지 인터페이스 수단;
호스트-인터페이스 프로토콜을 통해 호스트에 인터페이싱하기 위한 호스트 인터페이스 수단 ― 상기 호스트 인터페이스 수단은 호스트와 대용량 스토리지 사이에 데이터를 전달하기 위한 수단을 포함함 ―;
피어-투-피어 프로토콜을 통해 1차 에이전트에 인터페이싱하기 위한 1차 에이전트 인터페이스 수단 ― 상기 1차 에이전트 인터페이스 수단은 1차 에이전트로부터 포워딩된 스토리지 서브-요청을 수신하기 위한 수단을 포함함 ―; 및
제로(0) 스토리지 용량을 호스트에 역으로 보고하고 추가적으로 대용량 스토리지의 스토리지 용량에 따라 스토리지 용량을 1차 에이전트에 역으로 보고하기 위한 스토리지 용량 보고 수단을 포함하고,
호스트 인터페이스 수단 및 1차 에이전트 인터페이스 수단은 적어도 부분적으로 동일한 물리적 채널을 통해 구현되는, 시스템.
EC131) EC130에 있어서, 대용량 스토리지는 하나 또는 둘 이상의 비-휘발성 메모리들을 포함하는, 시스템.
EC132) 방법으로서,
대용량 스토리지에 인터페이싱하는 단계;
호스트-인터페이스 프로토콜을 통해 호스트와 인터페이싱하는 단계 ― 상기 호스트와 인터페이싱하는 단계는 호스트와 대용량 스토리지 사이에 데이터를 전달하는 단계를 포함함 ―;
피어-투-피어 프로토콜을 통해 1차 에이전트와 인터페이싱하는 단계 ― 상기 1차 에이전트와 인터페이싱하는 단계는 1차 에이전트로부터 포워딩된 스토리지 서브-요청을 수신하는 단계를 포함함 ―; 및
제로(0) 스토리지 용량을 호스트에 역으로 보고하고 추가적으로 대용량 스토리지의 스토리지 용량에 따라 스토리지 용량을 1차 에이전트에 역으로 보고하는 단계를 포함하고,
상기 호스트와 인터페이싱하는 단계 및 1차 에이전트와 인터페이싱하는 단계는 적어도 부분적으로 동일한 물리적 채널을 통해 구현되는, 방법.
EC133) 시스템으로서,
대용량 스토리지와 인터페이싱하도록 인에이블된 대용량 스토리지 하드웨어 인터페이스;
호스트와의 인터페이싱을 가능하게 하고, 호스트-인터페이스 프로토콜과 호환가능하며, 적어도 부분적으로 대용량 스토리지 하드웨어 인터페이스를 통해 호스트와 대용량 스토리지 사이에 데이터를 전달하도록 인에이블된 호스트 인터페이스 로직 하드웨어;
피어-투-피어 프로토콜을 통해 1차 에이전트와 인터페이싱하는 것을 가능하게 하는 피어-투-피어 통신 로직 하드웨어;
적어도 부분적으로 피어-투-피어 통신 로직 하드웨어를 통해 1차 에이전트로부터 포워딩된 스토리지 서브-요청을 수신하도록 인에이블된 서브-요청 수신 로직 하드웨어; 및
제로(0) 스토리지 용량을 호스트에 역으로 보고하도록 인에이블되고 추가적으로 대용량 스토리지의 스토리지 용량에 따라 스토리지 용량을 1차 에이전트에 역으로 보고하도록 인에이블된 스토리지 용량 보고 로직 하드웨어를 포함하고,
상기 호스트와의 인터페이싱 및 1차 에이전트와의 인터페이싱은 적어도 부분적으로 동일한 물리적 채널을 통해 구현되는, 시스템.
EC134) 내부에 명령들의 세트가 저장된 컴퓨터 판독가능 매체로서, 상기 명령들은 처리 엘리먼트에 의해 실행될 때 처리 엘리먼트로 하여금:
대용량 스토리지에 인터페이싱하는 것의 관리;
호스트-인터페이스 프로토콜을 통해 호스트와 인터페이싱하는 것의 관리 ― 상기 호스트와 인터페이싱하는 것은 호스트와 대용량 스토리지 사이에 데이터를 전달하는 것을 포함함 ―;
피어-투-피어 프로토콜을 통해 1차 에이전트와 인터페이싱하는 것의 관리 ― 상기 1차 에이전트와 인터페이싱하는 것은 1차 에이전트로부터 포워딩된 스토리지 서브-요청을 수신하는 것을 포함함 ―; 및
제로(0) 스토리지 용량을 호스트에 역으로 보고하고 추가적으로 대용량 스토리지의 스토리지 용량에 따라 스토리지 용량을 1차 에이전트에 역으로 보고하는 것의 관리를 포함하는 동작들을 수행하도록 하고,
상기 호스트와 인터페이싱하는 것 및 1차 에이전트와 인터페이싱하는 것은 적어도 부분적으로 동일한 물리적 채널을 통해 구현되는, 컴퓨터 판독가능 매체.
EC135) 시스템으로서,
대용량 스토리지에 인터페이싱하기 위한 스토리지 인터페이스 수단;
호스트-인터페이스 프로토콜을 통해 호스트에 인터페이싱하기 위한 호스트 인터페이스 수단 ― 상기 호스트 인터페이스 수단은 호스트와 대용량 스토리지 사이에 데이터를 전달하기 위한 수단을 포함함 ―;
피어-투-피어 프로토콜을 통해 1차 에이전트에 인터페이싱하기 위한 1차 에이전트 인터페이스 수단 ― 상기 1차 에이전트 인터페이스 수단은 1차 에이전트로부터 서브-요청을 수신하기 위한 수단 및 서브-상태를 1차 에이전트에 전송하기 위한 수단을 포함하며, 상기 서브-상태는 서브-요청에 따라 대용량 스토리지에 액세스한 결과들에 적어도 부분적으로 기초함 ―; 및
제로(0) 스토리지 용량을 호스트에 역으로 보고하고 추가적으로 대용량 스토리지의 스토리지 용량에 따라 스토리지 용량을 1차 에이전트에 역으로 보고하기 위한 스토리지 용량 보고 수단을 포함하고,
호스트 인터페이스 수단 및 1차 에이전트 인터페이스 수단은 적어도 부분적으로 동일한 물리적 채널을 통해 구현되는, 시스템.
EC136) EC135에 있어서, 상기 1차 에이전트 인터페이스 수단은 1차 에이전트와 리던던시 정보를 통신하기 위한 수단을 더 포함하는, 시스템.
EC137) EC136에 있어서, 리던던시 정보는 하나 또는 둘 이상의 미러링 기술들 및/또는 하나 또는 둘 이상의 RAID 기술들과 호환가능한, 시스템.
EC138) EC135에 있어서, 상기 동일한 물리적 채널은 PCI 익스프레스(PCIe) 표준과 호환가능한, 시스템.
EC139) EC135에 있어서, 상기 동일한 물리적 채널은 인피니밴드 표준과 호환가능한, 시스템.
EC140) EC135에 있어서, 대용량 스토리지는 하나 또는 둘 이상의 비-휘발성 메모리들을 포함하는, 시스템.
EC141) 방법으로서,
대용량 스토리지에 인터페이싱하는 단계;
호스트-인터페이스 프로토콜을 통해 호스트와 인터페이싱하는 단계 ― 상기 호스트와 인터페이싱하는 단계는 호스트와 대용량 스토리지 사이에 데이터를 전달하는 단계를 포함함 ―;
피어-투-피어 프로토콜을 통해 1차 에이전트와 인터페이싱하는 단계 ― 상기 1차 에이전트와 인터페이싱하는 단계는 1차 에이전트로부터 서브-요청을 수신하고 서브-상태를 1차 에이전트에 전송하는 단계를 포함하며, 상기 서브-상태는 서브-요청에 따라 대용량 스토리지에 액세스한 결과들에 적어도 부분적으로 기초함 ―; 및
제로(0) 스토리지 용량을 호스트에 역으로 보고하고 추가적으로 대용량 스토리지의 스토리지 용량에 따라 스토리지 용량을 1차 에이전트에 역으로 보고하는 단계를 포함하고,
상기 호스트와 인터페이싱하는 단계 및 1차 에이전트와 인터페이싱하는 단계는 적어도 부분적으로 동일한 물리적 채널을 통해 구현되는, 방법.
EC142) 시스템으로서,
대용량 스토리지와 인터페이싱하도록 인에이블된 대용량 스토리지 하드웨어 인터페이스;
호스트와 인터페이싱하는 것을 가능하게 하고, 호스트-인터페이스 프로토콜과 호환가능하며, 적어도 부분적으로 대용량 스토리지 하드웨어 인터페이스를 통해 호스트와 대용량 스토리지 사이에 데이터를 전달하도록 인에이블된 호스트 인터페이스 로직 하드웨어;
피어-투-피어 프로토콜을 통해 1차 에이전트와 인터페이싱하는 것을 가능하게 하는 피어-투-피어 통신 로직 하드웨어;
적어도 부분적으로 피어-투-피어 통신 로직 하드웨어를 통해 1차 에이전트로부터 포워딩된 스토리지 서브-요청을 수신하도록 인에이블된 서브-요청 수신 로직 하드웨어;
서브-요청에 따라 그리고 대용량 스토리지 하드웨어 인터페이스를 통해 대용량 스토리지에 액세스하는 것에 적어도 부분적으로 기초하여, 서브-상태를 결정하도록 인에이블된 서브-상태 결정 로직 하드웨어;
적어도 부분적으로 피어-투-피어 통신 로직 하드웨어를 통해 서브-상태를 1차 에이전트에 포워딩하도록 인에이블된 서브-상태 포워딩 로직 하드웨어; 및
제로(0) 스토리지 용량을 호스트에 역으로 보고하도록 인에이블되고 추가적으로 대용량 스토리지의 스토리지 용량에 따라 스토리지 용량을 1차 에이전트에 역으로 보고하도록 인에이블된 스토리지 용량 보고 로직 하드웨어를 포함하고,
상기 호스트와 인터페이싱하는 것 및 1차 에이전트와 인터페이싱하는 것은 적어도 부분적으로 동일한 물리적 채널을 통해 구현되는, 시스템.
EC143) 내부에 명령들의 세트가 저장된 컴퓨터 판독가능 매체로서, 상기 명령들은 처리 엘리먼트에 의해 실행될 때 처리 엘리먼트로 하여금:
대용량 스토리지에 인터페이싱하는 것의 관리;
호스트-인터페이스 프로토콜을 통해 호스트와 인터페이싱하는 것의 관리 ― 상기 호스트와 인터페이싱하는 것은 호스트와 대용량 스토리지 사이에 데이터를 전달하는 것을 포함함 ―;
피어-투-피어 프로토콜을 통해 1차 에이전트와 인터페이싱하는 것의 관리 ― 상기 1차 에이전트와 인터페이싱하는 것은 1차 에이전트로부터 서브-요청을 수신하고 서브-상태를 1차 에이전트에 전송하는 것을 포함하며, 상기 서브-상태는 서브-요청에 따라 대용량 스토리지에 액세스한 결과들에 적어도 부분적으로 기초함 ―; 및
제로(0) 스토리지 용량을 호스트에 역으로 보고하는 것의 관리 및 추가적으로 대용량 스토리지의 스토리지 용량에 따라 스토리지 용량을 1차 에이전트에 역으로 보고하는 것의 관리를 포함하는 동작들을 수행하도록 하고,
상기 호스트와 인터페이싱하는 것 및 1차 에이전트와 인터페이싱하는 것은 적어도 부분적으로 동일한 물리적 채널을 통해 구현되는, 컴퓨터 판독가능 매체.
EC144) 방법으로서,
어드레스에서 스토리지에 액세스하기 위한 호스트로부터의 요청을 수락하는 단계;
적어도 부분적으로 상기 어드레스에 기초하여, 상기 요청이 복수의 스토리지 디바이스들 중 하나 또는 둘 이상의 어느 스토리지 디바이스들에 대응되는지를 결정하는 단계;
적어도 부분적으로 상기 어드레스에 기초하여, 결정된 스토리지 디바이스들 각각에 대응하는 각각의 서브-요청을 결정하는 단계;
서브-요청들을 대응하는 결정된 스토리지 디바이스들에 전송하는 단계;
결정된 스토리지 디바이스들 각각으로부터 각각의 서브-상태를 수락하는 단계;
각각의 서브-상태들 각각에 적어도 부분적으로 기초하여 전체 상태를 결정하는 단계; 및
전체 상태를 호스트에 제공하는 단계를 포함하고,
상기 요청을 수락하는 단계, 스토리지 디바이스들을 결정하는 단계, 서브-요청들을 결정하고 전송하는 단계, 서브-상태들을 수락하는 단계, 및 전체 상태를 결정하고 제공하는 단계는 스토리지 디바이스들 중 특정 스토리지 디바이스에 의해 수행되고,
상기 요청을 수락하는 단계는 호스트-인터페이스 프로토콜을 통해 이루어지며, 상기 서브-요청들을 전송하는 단계 및 상기 서브-상태들을 수락하는 단계는 호스트와 독립적으로 동작가능한 피어-투-피어 프로토콜을 통해 이루어지고,
스토리지 디바이스들 중 적어도 하나는 서브-요청들 중 하나를 통해 액세스가능한 스토리지를 구현하고, 스토리지 디바이스들 중 적어도 하나는 호스트-인터페이스 프로토콜을 통한, 구현된 스토리지로의 액세스들을 디스에이블하는, 방법.
EC145) EC144에 있어서, 상기 호스트-인터페이스 및 상기 피어-투-피어 프로토콜들은 PCI 익스프레스(PCIe) 채널과 호환가능한, 방법.
EC146) EC144에 있어서, 상기 요청을 수락하는 단계는 호스트 메모리에 보유되는 서브미션 큐 내의 엔트리를 판독하는 단계를 포함하는, 방법.
EC147) EC144에 있어서, 상기 전체 상태를 제공하는 단계는 호스트 메모리에 보유되는 완료 큐 내에 엔트리를 기록하는 단계를 포함하는, 방법.
EC148) EC144에 있어서, 상기 결정된 스토리지 디바이스들 각각에 의해, 대응되는 서브-요청의 데이터 전달 부분을 독립적으로 수행하는 단계를 더 포함하는, 방법.
EC149) EC148에 있어서, 상기 독립적인 수행은 호스트 메모리에 액세스하는 것을 포함하는, 방법.
EC150) 방법으로서,
제1 스토리지 디바이스가 복수의 호스트 요청 큐들 중 제1 큐로부터 제1 요청을 판독하는 단계;
제2 스토리지 디바이스가 호스트 요청 큐들 중 제2 큐로부터 제2 요청을 판독하는 단계 ― 제2 호스트 요청 큐는 제1 호스트 요청 큐와는 구별되고, 제2 스토리지 디바이스에 의한 판독은 제1 스토리지 디바이스에 의한 판독과는 독립적임 ―;
제1 스토리지 디바이스가 제1 요청 중 적어도 일부를 제2 스토리지 디바이스에 포워딩하는 단계;
제2 스토리지 디바이스가 제2 요청 중 적어도 일부를 제1 스토리지 디바이스에 포워딩하는 단계 ― 제2 스토리지 디바이스에 의한 포워딩은 제1 스토리지 디바이스에 의한 포워딩과 독립적임 ―;
제1 스토리지 디바이스가 제2 요청 중 적어도 일부에 따라 제1 스토리지를 액세스하고, 제1 스토리지 디바이스에 의한 액세스에 적어도 부분적으로 기초하여 제2 스토리지 디바이스에 제1 상태를 반환하는 단계;
제2 스토리지 디바이스가 제1 요청 중 적어도 일부에 따라 제2 스토리지를 액세스하고, 제2 스토리지 디바이스에 의한 액세스에 적어도 부분적으로 기초하여 제1 스토리지 디바이스에 제2 상태를 반환하는 단계를 포함하고,
제2 스토리지 디바이스에 의한 액세스는 제1 스토리지 디바이스에 의한 액세스와 독립적이고, 제2 스토리지는 제1 스토리지와는 구별되는, 방법.
EC151) EC150에 있어서, 호스트 요청 큐들은 호스트에 의해 액세스가능하고, 상기 방법은 제2 스토리지 디바이스가 적어도 부분적으로 제2 요청에 기초하여 호스트에 제3 상태를 반환하는 단계, 및 제1 스토리지 디바이스가 적어도 부분적으로 제1 요청에 기초하여 호스트에 제4 상태를 반환하는 단계를 더 포함하는, 방법.
EC152) EC150에 있어서, 상기 제2 요청 중 적어도 일부는 적어도 제1 부분이고, 상기 방법은 제2 스토리지 디바이스가 제2 요청 중 적어도 제2 부분에 따라 제3 스토리지에 액세스하는 단계를 더 포함하며, 상기 제2 요청 중 제1 부분 및 제2 부분은 제2 요청의 구분되는 부분들인, 방법.
EC153) EC150에 있어서, 호스트 요청 큐들은 호스트에 의해 액세스가능하고, 상기 제2 요청 중 적어도 일부는 적어도 제1 부분이고, 상기 방법은 제2 스토리지 디바이스가 제2 요청 중 적어도 제2 부분에 따라 제3 스토리지에 액세스하는 단계 및 제2 스토리지 디바이스가 적어도 부분적으로 제3 스토리지의 액세스에 기초하여 호스트에 제3 상태를 반환하는 단계를 더 포함하며, 상기 제2 요청 중 제1 부분 및 제2 부분은 제2 요청의 구분되는 부분들인, 방법.
EC154) 방법으로서,
복수의 물리적 스토리지 디바이스들에 대한 단일의 논리적 인터페이스를 호스트에 제공하는 단계를 포함하고,
상기 물리적 스토리지 디바이스들 중 하나는 1차 에이전트로서 동작하고, 상기 물리적 스토리지 디바이스들 중 하나 또는 둘 이상은 2차 에이전트들로서 동작하며,
상기 제공하는 단계는:
상기 1차 에이전트가 스토리지에 액세스하기 위한 호스트로부터의 요청을 수락하고, 2차 에이전트들의 모두 또는 임의의 부분들에 하나 또는 둘 이상의 서브-요청들로서 상기 요청을 포워딩하며, 서브-요청들이 포워딩된 2차 에이전트들로부터 서브-요청들과 연관된 서브-상태들을 수락하고, 적어도 서브-상태들에 기초하여 전체 상태를 호스트에 제공하는 단계, 및
상기 2차 에이전트들의 모두 또는 임의의 부분들이 서브-요청들을 수락하고, 서브-요청들의 호스트-컨텍스트 어드레싱 정보를 로컬-컨텍스트 어드레싱 정보로 변환하며, 적어도 부분적으로 로컬-컨텍스트 어드레싱 정보에 기초하여 로컬 스토리지에 액세스하고, 1차 에이전트에 서브-상태들을 제공하는 단계를 포함하고,
상기 1차 에이전트는, 스토리지 용량에 관하여 호스트가 질의하는 경우, 적어도 부분적으로 1차 에이전트에 의해 구현되는 스토리지 및 2차 에이전트들에 의해 구현되는 스토리지에 기초하여 스토리지 용량을 보고하고,
2차 에이전트들 각각은, 스토리지 용량에 관하여 호스트가 질의하는 경우, 적어도 부분적으로 1차 에이전트에 의해 보고되는 스토리지 용량에 기초하여 각각의 스토리지 용량을 보고하는, 방법.
EC155) EC154에 있어서, 1차 에이전트에 의해 보고되는 스토리지 용량은 2차 에이전트들 중 특정 2차 에이전트에 의해 구현되는 스토리지 중 적어도 일부에 따라 증가되고, 상기 방법은 상기 특정 2차 에이전트가 상기 특정 2차 에이전트의 스토리지 용량을 상기 특정 2차 에이전트에 의해 구현되는 스토리지 중 적어도 일부에 따라 감소되는 것으로 호스트에 보고하는 단계를 더 포함하는, 방법.
EC156) EC154에 있어서, 상기 2차 에이전트들 중 특정 2차 에이전트는, 스토리지 용량에 관하여 호스트가 질의할 때, 상기 특정 2차 에이전트에 의해 구현되는 스토리지 모두가 1차 에이전트에 의해 보고되는 스토리지 용량에 포함되는 경우 제로 스토리지 용량을 역으로 보고하는, 방법.
EC157) EC154에 있어서, 1차 에이전트는 호스트-인터페이스 프로토콜을 통해 호스트와 통신하도록 인에이블되는, 방법.
EC158) EC154에 있어서, 1차 에이전트 및 2차 에이전트들은 피어-투-피어 프로토콜을 통해 서로 통신하도록 인에이블되는, 방법.
EC158) EC154에 있어서, 1차 에이전트는 동일한 물리적 링크를 통해 호스트, 및 2차 에이전트들 중 적어도 하나와 통신하도록 인에이블되는, 방법.
EC160) 시스템으로서,
호스트-인터페이스 프로토콜을 통해 호스트에 인터페이싱하고 피어-투-피어 프로토콜을 통해 2차 에이전트에 인터페이싱하도록 인에이블된 호스트 인터페이스 로직 ― 상기 호스트에 인터페이싱하는 것은 서브미션 큐 내의 엔트리로부터 스토리지 요청을 판독하는 것을 포함하고, 상기 2차 에이전트에 인터페이싱하는 것은 스토리지 서브-요청을 2차 에이전트에 포워딩하는 것을 포함하며, 상기 호스트에 인터페이싱하는 것 및 2차 에이전트에 인터페이싱하는 것은 동일한 물리적 채널을 통해 이루어짐 ―;
적어도 부분적으로 스토리지 요청에 포함되는 어드레스 정보에 기초하여 서브-요청을 결정하도록 인에이블된 서브-요청 생성 로직; 및
전체 스토리지 용량을 호스트에 역으로 보고하도록 인에이블된 스토리지 용량 보고 로직을 포함하고,
상기 전체 스토리지 용량은 적어도 부분적으로 2차 에이전트의 스토리지 용량에 기초하는, 시스템.
EC161) EC160에 있어서, 상기 물리적 채널은 PCI 익스프레스(PCIe) 채널 및 인피니밴드 채널 중 적어도 하나와 호환가능한, 시스템.
EC162) EC160에 있어서, 호스트, 2차 에이전트, 및 호스트 인터페이스 로직 및/또는 2차 에이전트에 호스트를 커플링하는 스위치 중 하나 또는 둘 이상을 더 포함하는, 시스템.
EC163) EC160에 있어서, 상기 시스템은 스토리지 인터페이스 로직 및 대용량 스토리지를 더 포함하고, 상기 스토리지 인터페이스 로직은 대용량 스토리지에 인터페이싱하도록 인에이블되며, 전체 스토리지 용량은 추가적으로 대용량 스토리지의 스토리지 용량에 따르는, 시스템.
EC164) EC160에 있어서, 상기 호스트에 인터페이싱하는 것은 완료 큐 내의 엔트리에 전체 상태를 기록하는 것을 더 포함하고, 상기 2차 에이전트에 인터페이싱하는 것은, 전체 상태를 완료 큐에 기록하는 것을 통해서, 전체 상태의 적어도 일부로서 2차 에이전트로부터 호스트로 서브-상태를 포워딩하는 것을 더 포함하며, 상기 시스템은 적어도 부분적으로 서브-상태에 기초하여 전체 상태를 결정하도록 인에이블된 서브-상태 누적 로직을 더 포함하는, 시스템.
EC165) EC160에 있어서, 상기 시스템은 SSD(솔리드-스테이트 디스크)에 포함되는, 시스템.
EC166) 시스템으로서,
호스트-인터페이스 프로토콜을 통해 호스트에 인터페이싱하고 피어-투-피어 프로토콜을 통해 2차 에이전트에 인터페이싱하도록 인에이블된 호스트 인터페이스 로직 ― 상기 호스트에 인터페이싱하는 것은 서브미션 큐 내의 엔트리로부터 스토리지 요청을 판독하는 것을 포함하고, 상기 2차 에이전트에 인터페이싱하는 것은 스토리지 서브-요청을 2차 에이전트에 포워딩하는 것을 포함하며, 상기 호스트에 인터페이싱하는 것 및 2차 에이전트에 인터페이싱하는 것은 동일한 물리적 채널을 통해 이루어짐 ―;
적어도 부분적으로 스토리지 요청에 포함되는 어드레스 정보에 기초하여 서브-요청을 결정하도록 인에이블된 서브-요청 생성 로직; 및
전체 스토리지 용량을 호스트에 역으로 보고하도록 인에이블된 스토리지 용량 보고 로직을 포함하고,
상기 전체 스토리지 용량은 적어도 부분적으로 2차 에이전트의 스토리지 용량에 기초하는, 시스템.
EC167) EC166에 있어서, 상기 물리적 채널은 PCI 익스프레스(PCIe) 채널 및 인피니밴드 채널 중 적어도 하나와 호환가능한, 시스템.
EC168) EC166에 있어서, 호스트, 1차 에이전트, 호스트 인터페이스 로직 및/또는 1차 에이전트에 호스트를 커플링하는 스위치, 및 대용량 스토리지의 모두 또는 임의의 부분들 중 하나 또는 둘 이상을 더 포함하는, 시스템.
EC169) EC166에 있어서, 상기 대용량 스토리지는 복수의 플래시 스토리지 디바이스들을 포함하는, 시스템.
EC170) EC166에 있어서, 상기 시스템은 SSD에 포함되는, 시스템.
EC171) 시스템으로서,
복수의 포트들을 갖는 물리적 스위치부 및 복수의 물리적 스토리지 디바이스들을 포함하는 물리적 컴포넌트들을 갖는 스토리지 서브시스템; 및
전용화된(dedicated) 포인트-투-포인트 링크를 통해 상기 복수의 포트들 중 전용화된 포트에 커플링되는 호스트를 포함하고,
각각의 물리적 스토리지 디바이스는:
적어도 하나의 스토리지 범위(range of storage),
각각의 포인트-투-포인트 링크를 통해 상기 복수의 포트들의 각 포트에 커플링되도록 인에이블된 적어도 하나의 포트, 및
상기 물리적 스토리지 디바이스로 하여금, 상기 스토리지 서브시스템의 하나 또는 둘 이상의 1차 에이전트들 및 하나 또는 둘 이상의 2차 에이전트들 중 적어도 하나의 에이전트로서 동작하는 것을 가능하게 하는 에이전트 로직
을 포함하고,
각각의 1차 에이전트는 호스트-개시 스토리지 액세스 요청들을 수락하고, 서브-요청들을 생성하며 서브-상태들을 누적하도록 인에이블되고, 각각의 2차 에이전트는 상기 서브-요청들 중 적어도 하나를 수락하고 상기 서브-상태들 중 적어도 하나를 생성하도록 인에이블되며,
상기 스토리지 서브시스템은 하나 또는 둘 이상의 논리적 스토리지 디바이스들을 동작시키도록 인에이블되고, 각각의 논리적 스토리지 디바이스는 상기 호스트로 하여금, 단일의 논리적 인터페이스를 통해, 상기 1차 에이전트들 중 하나의 1차 에이전트 및 상기 2차 에이전트들 중 적어도 하나의 2차 에이전트에 대응하는 상기 스토리지 디바이스들에 걸쳐 분산된 상기 스토리지 범위들의 집합(aggregation)에 액세스하는 것을 가능하게 하는, 시스템.
EC172) EC171에 있어서, 상기 에이전트 로직은, 상기 물리적 스토리지 디바이스로 하여금, 적어도 때때로 상기 1차 에이전트들 중 적어도 하나로서 그리고 적어도 때때로 상기 2차 에이전트들 중 적어도 하나로서 동작하는 것을 가능하게 하는 설정가능(configurability) 로직을 포함하는 것을 더 포함하는, 시스템.
EC173) EC171에 있어서, 상기 에이전트 로직은, 상기 물리적 스토리지 디바이스로 하여금, 동시에 상기 1차 에이전트들 중 적어도 하나 및 상기 2차 에이전트들 중 적어도 하나로서 동작하는 것을 가능하게 하는 동기(concurrency) 로직을 포함하는 것을 더 포함하는, 시스템.
EC174) EC171에 있어서, 상기 에이전트 로직은, 상기 물리적 스토리지 디바이스로 하여금, 상기 1차 에이전트들 및 상기 2차 에이전트들 중 전용화된 하나의 에이전트로서 동작하는 것을 가능하게 하는 전용화된-에이전트 로직을 포함하는 것을 더 포함하는, 시스템.
EC175) EC171에 있어서,
상기 논리적 스토리지 디바이스들 중 제1의 논리적 스토리지 디바이스는 상기 1차 에이전트들 중 적어도 제1의 1차 에이전트 및 상기 2차 에이전트들 중 하나 또는 둘 이상을 포함하고,
상기 물리적 스위치부는 상기 제1의 1차 에이전트와 상기 2차 에이전트들 각각 사이의 호스트-폐색(host-occluded) 피어-투-피어 통신들을 가능하게 하는 것을 더 포함하는, 시스템.
EC176) EC171에 있어서,
복수의 포트들을 갖는 상기 물리적 스위치부는 제1의 복수의 포트들을 갖는 제1의 물리적 스위치부이고, 상기 물리적 컴포넌트들은 제2의 복수의 포트들을 갖는 제2의 물리적 스위치부를 더 포함하며,
각각의 물리적 스토리지 디바이스는 각각의 포인트-투-포인트 링크를 통해 상기 제2의 복수의 포트들의 각 포트에 커플링되도록 인에이블된 적어도 하나의 포트를 더 포함하는 것을 더 포함하는, 시스템.
EC177) EC176에 있어서, 상기 제2의 물리적 스위치부는, 상기 제1의 물리적 스위치부를 통한 통신들을 위해 이용가능한 대역폭에 미미한(inconsequential) 영향을 미치는 피어-투-피어 통신을 통해 구현되는 스토리지 리던던시 기술들을 가능하게 하는 것을 더 포함하는, 시스템.
EC178) EC177에 있어서, 상기 피어-투-피어 통신은 상기 제2의 물리적 스위치부를 통해 이루어지고, 제어 정보, 미변환된 리던던시 데이터, 및 변환된 리던던시 데이터 중 하나 또는 둘 이상을 포함하는 것을 더 포함하는, 시스템.
EC179) EC176에 있어서, 유니터리(unitary) 물리적 스위치가 상기 제1의 물리적 스위치부 및 상기 제2의 물리적 스위치부를 포함하는 것을 더 포함하는, 시스템.
EC180) EC171에 있어서, 상기 단일의 논리적 인터페이스는 상기 1차 및 2차 에이전트들 사이의 호스트-폐색 피어-투-피어 통신들을 통해 미러링, 스트라이핑, RAID 패리티, 및 대체 작동(fail-over) 중 하나 또는 둘 이상이 구현되는 것을 가능하게 하는 것을 더 포함하는, 시스템.
EC181) EC171에 있어서,
상기 1차 에이전트들은 제1의 1차 에이전트 및 제2의 1차 에이전트를 포함하고, 상기 2차 에이전트들은 제1의 2차 에이전트 및 제2의 2차 에이전트를 포함하며, 상기 물리적 스토리지 디바이스들은 제1의 물리적 스토리지 디바이스 및 제2의 물리적 스토리지 디바이스를 포함하고, 상기 논리적 스토리지 디바이스들은 제1의 논리적 스토리지 디바이스 및 제2의 논리적 스토리지 디바이스를 포함하며,
상기 요청들의 제1 서브세트에 대하여, 상기 제1의 물리적 스토리지 디바이스는 상기 제1의 1차 에이전트 및 상기 제1의 2차 에이전트로서 동작하고,
상기 요청들의 제2 서브세트에 대하여, 상기 제2의 물리적 스토리지 디바이스는 상기 제2의 1차 에이전트 및 상기 제2의 2차 에이전트로서 동작하며,
상기 제1의 논리적 스토리지 디바이스는 상기 제1의 1차 에이전트 및 상기 제2의 2차 에이전트를 포함하고, 상기 제2의 논리적 스토리지 디바이스는 상기 제2의 1차 에이전트 및 상기 제1의 2차 에이전트를 포함하며, 상기 제1의 논리적 스토리지 디바이스는 상기 제2의 논리적 스토리지 디바이스와 동시에 동작하는 것을 더 포함하는, 시스템.
EC182) EC181에 있어서, 상기 요청들의 상기 제1 서브세트는 제1의 호스트 요청 큐로부터 기인한 것이고, 상기 요청들의 상기 제2 서브세트는 제2의 호스트 요청 큐로부터 기인한 것인 것을 더 포함하는, 시스템.
EC183) EC181에 있어서, 상기 호스트는 제1 호스트이고, 상기 요청들의 상기 제1 서브세트는 상기 제1 호스트로부터 기인한 것이고, 상기 요청들의 상기 제2 서브세트는 제2 호스트로부터 기인한 것인 것을 더 포함하는, 시스템.
EC184) EC181에 있어서, 상기 요청들의 상기 제1 서브세트 및 상기 요청들의 상기 제2 서브세트는 동일한 호스트 요청 큐로부터 기인한 것인 것을 더 포함하는, 시스템.
EC185) EC171에 있어서,
*상기 논리적 스토리지 디바이스들 중 제1의 논리적 스토리지 디바이스는 상기 1차 에이전트들 중 적어도 제1의 1차 에이전트 및 상기 2차 에이전트들 중 적어도 제1의 2차 에이전트를 포함하고,
*상기 제1의 논리적 스토리지 디바이스의 에이전트들의 상기 스토리지 범위들의 집합은 제1의 논리적 스토리지 서브-공간이며,
상기 에이전트 로직은 스토리지-복구 로직을 포함하고, 상기 스토리지-복구 로직은, 상기 제1의 1차 에이전트로 하여금, 상기 에이전트들 중 하나 또는 둘 이상에 의해 제공되도록 이용가능한 빈(free) 스토리지를 식별하는 것을 가능하게 하며, 상기 제1의 논리적 스토리지 서브-공간 중 특정 부분이 상기 에이전트들 중 하나에 의해 더 이상 제공되지 않는다고 결정한 후, 이전에 제공된 특정 부분을 복원하기 위해 상기 빈 스토리지로부터 할당하는 것을 가능하게 하는 것을 더 포함하는, 시스템.
EC186) EC171에 있어서,
상기 논리적 스토리지 디바이스들 중 제1의 논리적 스토리지 디바이스는 상기 1차 에이전트들 중 적어도 제1의 1차 에이전트 및 상기 2차 에이전트들 중 적어도 제1의 2차 에이전트를 포함하고, 상기 물리적 스토리지 디바이스들은 제1의 물리적 스토리지 디바이스 및 제2의 물리적 스토리지 디바이스를 포함하며, 상기 제1의 물리적 스토리지 디바이스는 초기에 상기 제1의 1차 에이전트로서 동작하고,
상기 시스템은, 상기 제1의 1차 에이전트가 오동작(fail)한다고 결정하고, 다른 에이전트들 중 선택된 에이전트에 1차-에이전트-대체 요청을 송신하도록 인에이블된 모니터링 에이전트를 더 포함하며,
상기 제2의 물리적 스토리지 디바이스의 에이전트 로직은, 상기 모니터링 에이전트로부터 상기 1차-에이전트-대체 요청을 수신하는 것에 응답하여, 상기 제2의 물리적 스토리지 디바이스로 하여금 상기 제1의 1차 에이전트에 대한 대체물로서 동작하는 것을 가능하게 하는 1차-에이전트-대체 로직을 포함하는, 시스템.
EC187) 방법으로서,
1차 에이전트로서 제1의 스토리지 디바이스를 동작시키고 하나 또는 둘 이상의 2차 에이전트들로서 적어도 제2의 스토리지 디바이스를 동작시키는 단계 ― 상기 1차 및 2차 에이전트들의 각 스토리지 디바이스는 적어도 하나의 각각의 스토리지 범위를 가짐 ―;
상기 호스트로 하여금, 유니터리 논리적 디바이스로서, 상기 1차 및 2차 에이전트들의 스토리지 디바이스들에 걸쳐 분산된 상기 스토리지 범위들의 집합에 액세스하는 것을 가능하게 하는 논리적 인터페이스를 상기 1차 에이전트가 제공하는 단계 ― 상기 논리적 인터페이스를 통한 상기 호스트와의 1차 에이전트 통신들은, 상기 1차 에이전트에 의해 상기 호스트로부터 수락되는 스토리지 액세스 요청들, 및 상기 1차 에이전트에 의해 상기 호스트로 전송되는 전체 상태를 포함함 ―;
상기 1차 에이전트가, 하나 또는 둘 이상의 서브-요청들로서 수락되는 각 요청을 상기 2차 에이전트들의 모두 또는 임의의 부분들에 포워딩하고, 상기 서브-요청들이 포워딩된 상기 2차 에이전트들로부터 상기 서브-요청들과 연관되는 서브-상태들을 수락하며, 적어도 상기 서브-상태들에 기초하여 전송되는 각각의 전체 상태를 형식화하는(formulate) 단계; 및
상기 2차 에이전트들의 모두 또는 임의의 부분들이, 상기 서브-요청들을 수락하고, 상기 서브-요청들의 호스트-컨텍스트 어드레싱 정보를 로컬-컨텍스트 어드레싱 정보로 변환하며, 적어도 부분적으로 상기 로컬-컨텍스트 어드레싱 정보에 기초하여 로컬 스토리지에 액세스하고, 상기 서브-상태들을 상기 1차 에이전트에 제공하는 단계를 포함하는, 방법.
EC188) EC187에 있어서,
상기 1차 에이전트가, 적어도 부분적으로 상기 1차 및 2차 에이전트들의 상기 스토리지 범위들에 기초하여 상기 유니터리 논리적 디바이스의 집합화된 스토리지 용량을 결정하는 단계;
스토리지 용량에 관하여 상기 호스트가 상기 유니터리 논리적 디바이스에 질의하는 것에 응답하여, 상기 1차 에이전트가 상기 집합화된 스토리지 용량을 보고하는 단계; 및
스토리지 용량에 관하여 상기 호스트가 상기 2차 에이전트들에 질의하는 것에 응답하여, 각각의 상기 2차 에이전트들이, 상기 집합화된 스토리지 용량으로 표현되는 상기 2차 에이전트의 임의의 스토리지 범위의 표현(representation)을 배제하는 각각의 스토리지 용량을 보고하는 단계를 더 포함하는, 방법.
EC189) EC187에 있어서, 스토리지 용량에 관하여 상기 호스트가 상기 2차 에이전트들 중 특정 2차 에이전트에 질의하는 것에 응답하여, 상기 특정 2차 에이전트가, 상기 1차 에이전트에 의해 결정되는 집합화된 스토리지 용량으로 표현되는 상기 특정 2차 에이전트에 의해 구현된 스토리지의 그러한 부분들의 표현을 배제하는 특정 스토리지 용량을 역으로 보고하는 단계를 더 포함하는, 방법.
EC190) EC187에 있어서, 호스트-인터페이스 프로토콜에 따라 상기 호스트와 상기 1차 에이전트 통신들 중 적어도 일부를 수행하는 단계를 더 포함하는, 방법.
EC191) EC187에 있어서, 상기 방법은:
동일한 물리적 링크의 공유를 통해 상기 호스트와 상기 1차 에이전트 통신들 중 적어도 일부를 수행하고 상기 2차 에이전트들 중 적어도 하나와 적어도 일부의 1차 에이전트 통신들을 수행하는 단계를 더 포함하고,
상기 2차 에이전트들 중 적어도 하나와의 상기 1차 에이전트 통신들은 상기 1차 에이전트와 상기 2차 에이전트들 사이에서 교환되는 상기 서브-상태들 중 적어도 일부 및 상기 서브-요청들 중 적어도 일부를 포함하는, 방법.
EC192) EC187에 있어서, 상기 방법은:
피어-투-피어 프로토콜에 따라 상기 2차 에이전트들과 적어도 일부의 1차 에이전트 통신들을 수행하는 단계를 더 포함하고,
상기 2차 에이전트들과의 상기 1차 에이전트 통신들은 적어도 상기 1차 에이전트와 상기 2차 에이전트들 사이에서 교환되는 상기 서브-상태들 및 상기 서브-요청들을 포함하는, 방법.
EC193) EC192에 있어서, 상기 2차 에이전트들과의 상기 1차 에이전트 통신들은 상기 피어-투-피어 프로토콜을 통해 리던던시 정보를 교환하는 것을 더 포함하는, 방법.
EC194) 장치로서,
1차 에이전트로서 제1의 스토리지 디바이스를 동작시키고 하나 또는 둘 이상의 2차 에이전트들로서 적어도 제2의 스토리지 디바이스를 동작시키기 위한 수단 ― 상기 1차 및 2차 에이전트들의 각 스토리지 디바이스는 적어도 하나의 각각의 스토리지 범위를 가짐 ―;
상기 호스트로 하여금, 유니터리 논리적 디바이스로서, 상기 1차 및 2차 에이전트들의 스토리지 디바이스들에 걸쳐 분산된 상기 스토리지 범위들의 집합에 액세스하는 것을 가능하게 하는 논리적 인터페이스를 상기 1차 에이전트가 제공하기 위한 수단 ― 상기 논리적 인터페이스를 통한 상기 호스트와의 1차 에이전트 통신들은, 상기 1차 에이전트에 의해 상기 호스트로부터 수락되는 스토리지 액세스 요청들, 및 상기 1차 에이전트에 의해 상기 호스트로 전송되는 전체 상태를 포함함 ―;
상기 1차 에이전트가, 상기 2차 에이전트들의 모두 또는 임의의 부분들에 하나 또는 둘 이상의 서브-요청들로서 수락되는 각 요청을 포워딩하고, 상기 서브-요청들이 포워딩된 상기 2차 에이전트들로부터 상기 서브-요청들과 연관되는 서브-상태들을 수락하며, 적어도 상기 서브-상태들에 기초하여 전송되는 각각의 전체 상태를 형식화하기 위한 수단; 및
상기 2차 에이전트들의 모두 또는 임의의 부분들이, 상기 서브-요청들을 수락하고, 상기 서브-요청들의 호스트-컨텍스트 어드레싱 정보를 로컬-컨텍스트 어드레싱 정보로 변환하며, 적어도 부분적으로 상기 로컬-컨텍스트 어드레싱 정보에 기초하여 로컬 스토리지에 액세스하고, 상기 서브-상태들을 상기 1차 에이전트에 제공하기 위한 수단을 포함하는, 장치.
EC195) EC194에 있어서,
상기 1차 에이전트가, 적어도 부분적으로 상기 1차 및 2차 에이전트들의 상기 스토리지 범위들에 기초하여 상기 유니터리 논리적 디바이스의 집합화된 스토리지 용량을 결정하기 위한 수단;
스토리지 용량에 관하여 상기 호스트가 상기 유니터리 논리적 디바이스에 질의하는 것에 응답하여, 상기 1차 에이전트가 상기 집합화된 스토리지 용량을 보고하기 위한 수단; 및
스토리지 용량에 관하여 상기 호스트가 상기 2차 에이전트들에 질의하는 것에 응답하여, 각각의 상기 2차 에이전트들이, 상기 집합화된 스토리지 용량으로 표현되는 상기 2차 에이전트의 임의의 스토리지 범위의 표현을 배제하는 각각의 스토리지 용량을 보고하기 위한 수단을 더 포함하는, 장치.
EC196) EC194에 있어서, 스토리지 용량에 관하여 상기 호스트가 상기 2차 에이전트들 중 특정 2차 에이전트에 질의하는 것에 응답하여, 상기 특정 2차 에이전트가, 상기 1차 에이전트에 의해 결정되는 집합화된 스토리지 용량으로 표현되는 상기 특정 2차 에이전트에 의해 구현된 스토리지의 그러한 부분들의 표현을 배제하는 특정 스토리지 용량을 역으로 보고하기 위한 수단을 더 포함하는, 장치.
EC197) EC194에 있어서, 호스트-인터페이스 프로토콜에 따라 상기 호스트와 상기 1차 에이전트 통신들 중 적어도 일부를 수행하기 위한 수단을 더 포함하는, 장치.
EC198) EC194에 있어서, 상기 장치는:
동일한 물리적 링크의 공유를 통해 상기 호스트와 상기 1차 에이전트 통신들 중 적어도 일부를 수행하고 상기 2차 에이전트들 중 적어도 하나와 적어도 일부의 1차 에이전트 통신들을 수행하기 위한 수단을 더 포함하고,
상기 2차 에이전트들 중 적어도 하나와의 상기 1차 에이전트 통신들은 상기 1차 에이전트와 상기 2차 에이전트들 사이에서 교환되는 상기 서브-상태들 중 적어도 일부 및 상기 서브-요청들 중 적어도 일부를 포함하는, 장치.
EC199) EC194에 있어서, 상기 장치는:
피어-투-피어 프로토콜에 따라 상기 2차 에이전트들과 적어도 일부의 1차 에이전트 통신들을 수행하기 위한 수단을 더 포함하고,
상기 2차 에이전트들과의 상기 1차 에이전트 통신들은 적어도 상기 1차 에이전트와 상기 2차 에이전트들 사이에서 교환되는 상기 서브-상태들 및 상기 서브-요청들을 포함하는, 장치.
EC200) EC199에 있어서, 상기 2차 에이전트들과의 상기 1차 에이전트 통신들은 상기 피어-투-피어 프로토콜을 통해 교환된 리던던시 정보를 더 포함하는, 장치.
스케일러블 스토리지 시스템
도 1a는 호스트, 각각의 1차 에이전트들로서 동작가능한 하나 또는 둘 이상의 스토리지 디바이스들을 갖는 호스트 가시(visible) 스토리지, 및 각각의 2차 에이전트들로서 동작가능한 하나 또는 둘 이상의 스토리지 디바이스들을 갖는 호스트 비-가시(invisible) 스토리지를 포함하는 스케일러블 스토리지 디바이스들을 위한 기술의 일 실시예의 선택된 구조상의 세부사항들을 도시한다. 호스트(100)는 호스트-스토리지 디바이스 커플링(180)을 통해 호스트 가시 스토리지(110) 및 호스트 비-가시 스토리지(120)에 커플링된다. 호스트 가시 및 비-가시 스토리지들뿐만 아니라 호스트-스토리지 디바이스 커플링은 선택적으로 플러그형(pluggable) 모듈(애드-인 카드(190A)로 도시됨)로서 구현되고 및/또는 커플링(101)은 선택적으로 케이블로서 구현된다. 몇몇 실시예들에서, 애드-인 카드의 모두 또는 임의의 부분들은 SSD로서 구현된다. 호스트 가시 스토리지는 하나 또는 둘 이상의 스토리지 디바이스들(스토리지 디바이스(110.A) 및 스토리지 디바이스(110.N)로서 도시됨)을 갖는다. 유사하게, 호스트 비-가시 스토리지는 하나 또는 둘 이상의 스토리지 디바이스들(스토리지 디바이스(120.A) 및 스토리지 디바이스(120.N)로서 도시됨)을 갖는다. 다양한 실시예들에서, 스토리지 디바이스들 중 임의의 하나 또는 둘 이상은 SSD들과 같은 물리적 스토리지 디바이스들이다.
커플링들(101, 111.A, 111.N, 121.A, 및 121.N)은 호스트, 호스트 가시 스토리지, 및 호스트 비-가시 스토리지 사이의 요청, 상태 및 데이터 전달들을 가능하게 한다. 커플링들 중 하나 또는 둘 이상은 호스트-인터페이스 프로토콜을 통해 이러한 전송들을 가능하게 한다(이를 테면, 호스트는 마스터로서 동작하고 호스트 가시 스토리지의 엘리먼트들 중 하나가 슬레이브로서 동작함). 커플링들 중 하나 또는 둘 이상은 피어-투-피어 프로토콜을 통해 이러한 전송들을 가능하게 한다(이를 테면, 호스트 가시 스토리지의 엘리먼트들 중 하나가 1차 에이전트로서 동작하고, 호스트 비-가시 스토리지의 엘리먼트들 중 하나 또는 호스트 가시 스토리지의 나머지 엘리먼트들 중 하나가 2차 에이전트로서 동작함). 다양한 실시예들에서, 커플링들 중 하나 또는 둘 이상은 인터페이스 표준(이를 테면, PCIe 또는 인피니밴드)과 호환가능하다. 다양한 실시예들에서, 호스트-스토리지 디바이스 커플링(180)은 하나 또는 둘 이상의 PCIe 및/또는 인피니밴드 스위치들을 통해 구현된다. 몇몇 실시예들에서, 호스트-스토리지 디바이스 커플링(180)은 호스트 컴퓨팅 컴플렉스의 모두 또는 임의의 부분들로서, 호스트(100)와 통합된다.
호스트 가시 스토리지 엘리먼트들은 스토리지를 구현하고, 초기화 동안 이러한 엘리먼트들은 구현된 스토리지 중 적어도 일부의 호스트 액세스를 인에이블하도록 구성되어, 이를 테면 호스트-인터페이스 프로토콜을 통해 호스트에 '가시적인' 스토리지를 제공한다. 호스트 비-가시 스토리지 엘리먼트들은 또한 스토리지를 구현하지만, 초기화 동안 이러한 엘리먼트들은 구현된 스토리지 중 적어도 일부의 호스트 액세스를 디스에이블하도록 구성되어, 호스트에 '비가시적인' 스토리지를 제공한다. 그러나, 호스트에 비가시적인 스토리지는, 호스트 가시 스토리지의 엘리먼트들을 통해, 이를 테면 피어-투-피어 프로토콜을 통해 호스트에 의해 간접적으로 액세스가능하다.
점선 화살표(151)는 호스트(100)와 스토리지 디바이스(110.A) 사이의 정보 전달을 개념적으로 도시하고, 호스트와 호스트 가시 스토리지(110)의 엘리먼트들 중 임의의 엘리먼트 사이의 정보 전달을 나타낸다. 이러한 정보 전달들은 스토리지에 액세스하기 위한 호스트로부터 비롯되는 요청, 이러한 요청에 관한 상태 응답, 및 요청에 관한 데이터 전달 중 하나 또는 둘 이상을 포함한다. 이러한 요청은 어드레스(이를 테면, LBA) 및 길이(이를 테면, 바이트들 또는 LBA 양자(quanta) 단위) 중 하나 또는 둘 이상을 포함한다. 이러한 호스트로부터 스토리지 디바이스로의 정보 전달들은 커플링(101), 호스트-스토리지 디바이스 커플링(180), 그리고 그 다음으로 커플링(111.A)을 통해 통신되고, 스토리지 디바이스로부터 호스트로의 정보 전달들이 역으로 진행된다.
점선 화살표(152)는 스토리지 디바이스(110.A)와 스토리지 디바이스(120.A) 사이의 정보 전달을 개념적으로 도시하고, 호스트 가시 스토리지(110)의 엘리먼트들 중 임의의 엘리먼트와 호스트 비-가시 스토리지(120)의 엘리먼트들 중 임의의 엘리먼트 사이의 피어-투-피어 정보 전달을 나타낸다. 이러한 정보 전달들은, (1차 에이전트로 동작하는) 스토리지 디바이스(110.A)로부터 (2차 에이전트로 동작하는) 호스트 비-가시 스토리지(120)의 엘리먼트들 중 임의의 엘리먼트로의 서브-요청, 이러한 서브-요청에 관한 서브-상태 응답, 및 서브-요청에 관한 데이터 전달 중 하나 또는 둘 이상을 포함한다. 이러한 서브-요청은 어드레스(이를 테면, LBA) 및 길이(이를 테면, 바이트들 또는 LBA 양자 단위) 중 하나 또는 둘 이상을 포함한다. 이러한 1차 에이전트로부터 2차 에이전트로의 정보 전달들은 커플링(111.A), 호스트-스토리지 디바이스 커플링(180), 그리고 그 다음으로 커플링(121.A)을 통해 통신되고, 2차 에이전트로부터 1차 에이전트로의 정보 전달들이 역으로 진행된다.
점선 화살표(153)는 스토리지 디바이스(110.A)와 스토리지 디바이스(110.N) 사이의 정보 전달을 개념적으로 도시하고, 호스트 가시 스토리지(110)의 엘리먼트들 중 임의의 엘리먼트 사이의 피어-투-피어 정보 전달을 나타낸다. 이러한 정보 전달들은, (1차 에이전트로 동작하는) 스토리지 디바이스(110.A)로부터 (2차 에이전트로 동작하는) 호스트 가시 스토리지(110)의 다른 엘리먼트들 중 임의의 엘리먼트로의 서브-요청, 이러한 서브-요청에 관한 서브-상태 응답, 및 서브-요청에 관한 데이터 전달 중 하나 또는 둘 이상을 포함한다. 이러한 1차 에이전트로부터 2차 에이전트로의 정보 전달들은 커플링(111.A), 호스트-스토리지 디바이스 커플링(180), 그리고 그 다음으로 커플링(111.N)을 통해 통신되고, 2차 에이전트로부터 1차 에이전트로의 정보 전달들이 역으로 진행된다.
점선 화살표(154)는 호스트(100)와 스토리지 디바이스(120.A) 사이의 정보 전달을 개념적으로 도시하고, 호스트와 호스트 비-가시 스토리지(120)의 엘리먼트들 중 임의의 엘리먼트 사이의 정보 전달을 나타낸다. 이러한 정보 전달들은, 요청에 관한 전체 상태 응답 및 요청에 관한 데이터 전달 중 하나 또는 둘 이상을 포함한다. 도면에서는 명료함을 위해 도시되지 않았지만, 이러한 호스트로부터 스토리지 디바이스로의 정보 전달들은 커플링(101), 호스트-스토리지 디바이스 커플링(180), 그리고 그 다음으로 커플링(121.A)을 통해 통신되고, 스토리지 디바이스로부터 호스트로의 정보 전달들이 역으로 진행된다.
몇몇 실시예들에서, 호스트로부터 비롯되는 요청들은 커플링(101)을 통해 액세스가능한 호스트 메모리 내의 하나 또는 둘 이상의 서브미션 큐들을 통해 이루어진다(예컨대, 1차 에이전트가 하나 또는 둘 이상의 DMA 동작들을 통해 서브미션 큐 내의 엔트리들을 판독함으로써). 몇몇 실시예들에서, 호스트에 제공된 상태들은, 1차 및/또는 2차 에이전트들에 액세스가능한 호스트 메모리 내의 하나 또는 둘 이상의 완료 큐들을 통해 이루어진다(예컨대, 1차/2차 에이전트가 하나 또는 둘 이상의 DMA 동작들을 통해 완료 큐 내에 엔트리들을 기록함으로써). 몇몇 실시예들에서, 요청들 및/또는 상태들은 적어도 부분적으로 하나 또는 둘 이상의 도어벨(doorbell) 및/또는 테일 레지스터(tail register)들을 통해, 선택적으로 하나 또는 둘 이상의 서브미션 및/또는 완료 큐들과 함께 통신된다. 몇몇 실시예들에서, 요청들 및/또는 상태들은 적어도 부분적으로, 호스트에 의해 개시되는 프로그램된 IO 동작들을 통해 1차 에이전트들에 통신된다. 몇몇 실시예들에서, 서브미션 및/또는 완료 큐 디스크립터(descriptor)들은 적어도 부분적으로, 호스트에 의해 개시되는 프로그램된 IO 동작들을 통해 1차 에이전트들에 통신된다.
몇몇 실시예들에서, 호스트로부터 요청을 수락하는 것은, 서브미션 큐로부터 하나 또는 둘 이상의 엔트리들을 판독하는 것을 포함한다. 예를 들면 호스트가 호스트 메모리에 보유된 서브미션 큐에 특정 엔트리를 기록하고, 이에 따라 테일 레지스터를 수정하며, 대응하는 도어벨 레지스터(이를 테면, 1차 에이전트로 구현되고 및/또는 1차 에이전트에 의해 액세스가능한 도어벨 레지스터)를 설정한다. 도어벨 레지스터의 설정에 응답하여, 1차 에이전트는 테일 레지스터에 액세스하고, (이를 테면, 호스트 메모리로부터 DMA 판독을 통해) 특정 서브미션 큐 엔트리를 판독한다. 몇몇 실시예들에서, 호스트에 상태를 제공하는 것은 완료 큐에 하나 또는 둘 이상의 엔트리들을 기록하는 것을 포함한다. 예를 들면 1차 에이전트는 호스트 메모리에 보유된 완료 큐에 특정 엔트리를 기록하고(이를 테면, 호스트 메모리에 DMA 기록을 통해), 이에 따라 테일 레지스터를 수정하며, (예컨대, 대응하는 도어벨 레지스터를 설정하거나 또는 인터럽트를 제공함으로써) 완료된 동작을 호스트에 통지한다. 도어벨 레지스터의 설정에 응답하여, 호스트는 테일 레지스터에 액세스하고, 특정 완료 큐 엔트리를 판독한다.
몇몇 실시예들에서, 서브-요청들은 서브-요청들이 그로부터 결정되는 요청과는 상이한 라우팅, 어드레싱, 및/또는 캡슐화를 이용하여 2차 에이전트들에 전송되고, 서브-요청들은 요청과 동일한 커플링을 통해 전송된다. 예를 들면, 요청, 서브-요청, 및 서브-상태 트래픽 중 임의의 것 또는 이들 모두의 전송을 위해 PCIe 커플링들을 이용하는 예시적인 시스템에서, 요청은 판독 요청으로부터의 완료로서 1차 에이전트에 제공되지만, 서브-요청은 MsgD 요청으로 2차 에이전트에 포워딩된다. 몇몇 실시예들에서, 서브-요청은 서브-요청이 그로부터 결정되는 요청에 부가하여 정보를 포함하도록 다시 패키징(repackage)된다. 예를 들면, 다시 패키징된 서브-요청은 플로우 제어, 증강된(augmented) 라우팅 정보, 또는 요청의 내용들에 관한 다른 부가적인 정보와 같은 부가적인 정보를 포함한다. 몇몇 실시예들에서, 증강된 라우팅 정보는 하나 또는 둘 이상의 커플링들을 통해 원격의 2차 에이전트들에 서브-요청을 전송하는 것을 가능하게 한다.
몇몇 실시예들에서, 서브-상태들은 서브-상태들이 대응하는 요청과는 상이한 라우팅, 어드레싱, 및/또는 캡슐화를 이용하여 1차 에이전트들에 전송되고, 서브-상태들은 요청과 동일한 커플링을 통해 전송된다. 예를 들면, 요청, 서브-요청, 및 서브-상태 트래픽 중 임의의 것 또는 이들 모두의 전송을 위해 PCIe 커플링들을 이용하는 예시적인 시스템에서, 요청은 판독 요청으로부터의 완료로서 1차 에이전트에 제공되지만, 서브-상태는 MsgD 요청으로 2차 에이전트에 의해 1차 에이전트에 반환된다. 몇몇 실시예들에서, 서브-상태는 서브-상태 및/또는 서브-상태가 대응하는 요청에 부가하여 정보를 포함하도록 다시 패키징된다. 예를 들면, 다시 패키징된 서브-상태는 흐름 제어, 증강된 라우팅 정보, 또는 요청의 내용들에 관한 다른 부가적인 정보와 같은 부가적인 정보를 포함한다. 몇몇 실시예들에서, 증강된 라우팅 정보는 하나 또는 둘 이상의 커플링들을 통해 원격의 2차 에이전트들로부터 1차 에이전트들로 서브-상태를 전송하는 것을 가능하게 한다.
특정 예로서, 마스터로 동작하는 호스트(100)는 호스트-인터페이스 프로토콜을 통해 스토리지에 액세스하기 위한 요청을 스토리지 디바이스(110.A)에 제공한다(개념적으로 점선 화살표(151)로 도시됨). 이에 응답하여, 슬레이브로 동작하는 스토리지 디바이스(110.A)는 이러한 요청에 응답한다. 스토리지 디바이스(110.A)는 호스트-인터페이스 프로토콜을 통해 요청을 수락하고(이 또한 개념적으로 점선 화살표(151)로 도시됨), 그 다음으로 이러한 요청에 관한 스토리지가 스토리지 디바이스(110.A)에 의해 및/또는 호스트 비-가시 스토리지(120)의 엘리먼트들 중 하나 또는 둘 이상의 엘리먼트들 또는 호스트 가시 스토리지(110)의 나머지 엘리먼트들 중 임의의 엘리먼트에 의해 구현되는지를 결정한다. 그 다음으로, 스토리지 디바이스(110.A)는 (스토리지 중 적어도 일부가 스토리지 디바이스(110.A)에 의해 구현되는 경우) 이러한 요청을 내부적으로 처리하고 및/또는, 1차 에이전트로 동작하여 이러한 요청을 하나 또는 둘 이상의 피어-투-피어 서브-요청들로서, 피어-투-피어 프로토콜을 통해 스토리지 디바이스(120.A)에 포워딩한다(개념적으로 점선 화살표(152)로 도시됨). 2차 에이전트로 동작하는 스토리지 디바이스(120.A)는 피어-투-피어 프로토콜을 통해 서브-요청을 수락하고(이 또한 개념적으로 점선 화살표(152)로 도시됨), 그 다음으로 서브-요청을 내부적으로 처리한다. 그 다음으로, 스토리지 디바이스(120.A)는 서브-요청에 대응하는 서브-상태를 스토리지 디바이스(110.A)에 반환한다(이 또한 개념적으로 점선 화살표(152)로 도시됨). 그 다음으로, 스토리지 디바이스(110.A)는 요청에 대해 전체 상태를 결정하고, 전체 상태를 호스트에 제공한다(개념적으로 점선 화살표(151)로 도시됨). 대안적으로, 스토리지 디바이스(120.A)가 스토리지 디바이스(110.A)에 (그 다음으로 호스트(100)에 포워딩하기 위해) 서브-상태를 반환하는 대신에, 스토리지 디바이스(120.A)는 서브-상태를 호스트(100)에 직접 반환한다(개념적으로 점선 화살표(154)로 도시됨).
계속하여 이러한 특정 실시예에서는, 판독들을 위한 데이터는 상태와 유사하게 흐른다(flow). 스토리지 디바이스(120.A)는 서브-요청에 대응하는 데이터를 스토리지 디바이스(110.A)에 반환하고(개념적으로 점선 화살표(152)로 도시됨), 그 다음으로 스토리지 디바이스(110.A)는 이러한 데이터를 호스트에 제공한다(개념적으로 점선 화살표(151)로 도시됨). 대안적으로, 스토리지 디바이스(120.A)가 데이터를 스토리지 디바이스(110.A)에 (그 다음으로 호스트(100)에 포워딩하기 위해) 반환하는 대신에, 스토리지 디바이스(120.A)는 데이터를 호스트(100)에 직접 반환한다(개념적으로 점선 화살표(154)로 도시됨). 특정 요청에 대한 상태 및 데이터는 동일한 흐름으로 제한되지 않는다. 예를 들면, 하나의 요청에 대해서 상태 및 데이터는 모두 2차 디바이스(예컨대, 스토리지 디바이스(120.A))로부터 1차 에이전트(예컨대, 스토리지 디바이스(110.A))를 통해 호스트(100)로 흐른다. 다른 요청에 대해서, 상태는 2차 에이전트로부터 1차 에이전트를 통해서 호스트로 흐르고, 데이터는 2차 에이전트로부터 직접 호스트로 흐른다. 기록들을 위한 데이터는 호스트로부터 1차 에이전트를 통해 2차 에이전트로 흐르고(개념적으로 점선 화살표(151 및 152)로 도시됨), 또는 대안적으로 호스트로부터 직접 2차 에이전트로 흐른다(개념적으로 점선 화살표(154)로 도시됨).
다른 예들은 하나 또는 둘 이상의 1차 에이전트들로 동작하는 호스트 가시 스토리지(110)의 엘리먼트들 중 임의의 하나 또는 둘 이상의 엘리먼트들, 및 하나 또는 둘 이상의 2차 에이전트들로 동작하는 호스트 비-가시 스토리지(120)의 엘리먼트들 중 임의의 하나 또는 둘 이상의 엘리먼트들 또는 호스트 가시 스토리지(110)의 나머지 엘리먼트들 중 임의의 하나 또는 둘 이상의 엘리먼트들을 포함한다.
도 1b는 호스트, 각각의 1차 에이전트들로서 동작가능한 하나 또는 둘 이상의 스토리지 디바이스들을 갖는 호스트 가시 스토리지, 및 각각의 2차 에이전트들로서 동작가능한 하나 또는 둘 이상의 스토리지 디바이스들을 갖는 호스트 비-가시 스토리지를 포함하는 스케일러블 스토리지 디바이스들을 위한 기술의 다른 실시예의 선택된 구조상의 세부사항들을 도시한다. 이러한 기술은 도 1a에서 유사하게 식별되는 엘리먼트들(호스트(100), 호스트-스토리지 디바이스 커플링(180), 및 커플링들(101, 111.A, 111.N, 121.A, 및 121.N))과 동작 및 구조상에서 동일한 몇몇 엘리먼트들을 이용한다. 호스트 가시 스토리지(130)는, 그 안의 스토리지 디바이스들(스토리지 디바이스(130.A) 및 스토리지 디바이스(130.N))이 부가적인 커플링(각각 커플링들(131.A 및 131.N))을 통해 통신하도록 각각 인에이블된다는 점을 제외하고는 도 1a의 호스트 가시 스토리지(110)와 유사하다. 호스트 비-가시 스토리지(140)는, 그 안의 스토리지 디바이스들(스토리지 디바이스(140.A) 및 스토리지 디바이스(140.N))이 부가적인 커플링(각각 커플링들(141.A 및 141.N))을 통해 통신하도록 인에이블된다는 점을 제외하고는 도 1a의 호스트 비-가시 스토리지(120)와 유사하다. 디바이스-스토리지 디바이스 커플링(181)은 커플링들(131.A, 131.N, 141.A 및 141.N)에 커플링되고, 예를 들면 피어-투-피어 통신을 위해 유용한, 호스트 가시 스토리지(130) 및 호스트 비-가시 스토리지(140)의 엘리먼트들 중 임의의 엘리먼트 사이에 부가적인 통신 대역폭을 가능하게 한다. 예를 들면, 디바이스-스토리지 디바이스 커플링(181)은 스토리지 디바이스(130.A)와 호스트 비-가시 스토리지(140)의 엘리먼트들 중 임의의 엘리먼트 사이에 부가적인 통신 대역폭을 가능하게 한다. 또 다른 예로서, 디바이스-스토리지 디바이스 커플링(181)은 스토리지 디바이스(130.A)와 스토리지 디바이스(130.N) 사이에 부가적인 통신 대역폭을 가능하게 한다.
호스트 가시 및 호스트 비-가시 스토리지들뿐만 아니라 호스트-스토리지 디바이스 커플링 및 디바이스-스토리지 디바이스 커플링은 선택적으로 플러그형 모듈(애드-인 카드(190B)로 도시됨)로 구현되고 및/또는, 커플링(101)은 선택적으로 케이블로 구현된다. 몇몇 실시예들에서, 애드-인 카드의 모두 또는 임의의 부분들은 SSD로서 구현된다. 다양한 실시예들에서, 스토리지 디바이스들 중 임의의 하나 또는 둘 이상의 디바이스들은 SSD들이다.
몇몇 실시예들 및/또는 이용 시나리오들에서, 디바이스-스토리지 디바이스 커플링(181)에 의해 제공되는 부가적인 통신 대역폭은, 호스트와 스토리지 디바이스들 사이의 통신을 위해 이용가능한 대역폭에 거의 영향이 없거나 전혀 영향을 주지 않고, 피어-투-피어 통신을 통해 구현되는 스토리지 리던던시 기술들(이를 테면, RAID 5)을 가능하게 한다. 피어-투-피어 통신은 미변환된 데이터(이를 테면, RAID 미러링 동작 중에), 변환된 데이터(이를 테면, RAID 패리티 생성 및/또는 기록 중의 XOR 데이터), 및 제어 정보의 통신 중 하나 또는 둘 이상을 포함한다.
몇몇 실시예들에서, 이를 테면 (비-RAID) 데이터가 어떻게 분산되어 있는지와 무관하게, 복수의 스토리지 디바이스들에 걸쳐 스트라이핑되는 방식으로 RAID 데이터를 분산시킴으로써 RAID 리던던시가 가능해진다. 몇몇 상황들에서, 호스트 요청이 판독될 때, 정보는 스토리지 디바이스들 중 둘 또는 셋 이상의 스토리지 디바이스들로부터 판독된다. 호스트 요청이 기록인 경우, RAID 리던던시 정보의 유지는 선택적으로, 스토리지 디바이스들 중 둘 또는 셋 이상의 스토리지 디바이스들에 대하여 RMW 동작들을 수행하거나 또는 대안적으로 데이터 카피 동작들을 수행하는 것을 포함한다.
1차 에이전트 또는 2차 에이전트가 호스트 기록 요청의 결과로서 데이터를 검색(retrieve)할 때, 이러한 에이전트는 특정 RAID 데이터와 함께 피어-투-피어 요청을 (이를 테면, 디바이스-스토리지 디바이스 커플링(181)을 통해) 다른 에이전트(1차 에이전트 또는 2차 에이전트)에 통신한다. 몇몇 상황들에서(이를 테면, 미러 RAID), 특정 RAID 데이터는 기록 요청에 대한 데이터의 카피이다. 몇몇 상황들에서(이를 테면, RAID 5), 이러한 특정 RAID 데이터는 기록 요청에 대한 데이터, 및 기록 요청의 LBA에 대응하는 이전 데이터에 기초하여 계산된다(예컨대, 이전 데이터는 기록 요청에 대한 데이터와의 XOR과 같은 RMW 동작에서 이용된다).
예를 들면, 기록 요청에 대한 데이터를 수신하는 에이전트는 기록 요청의 LBA에 대응하는 이전 데이터와 기록 요청에 대한 데이터를 XOR 연산함으로써 RAID 델타를 계산한다. 이러한 에이전트는 LBA와 연관된 RAID 리던던시를 저장하는 에이전트들 중 하나에 RAID 델타를 전송한다. 그 다음으로, RAID 리던던시를 저장하는 에이전트는 RAID 델타를 이용하여 RAID 리던던시를 업데이트하기 위해 RMW를 수행한다. RAID 리던던시를 저장하는 에이전트가, RAID 리던던시에 대한 다수의 업데이트들이 예상된다고 통지받은 경우, RAID 리던던시를 저장하는 에이전트는 보다 높은 효율을 위해 선택적으로 및/또는 선별적으로 RMW 동작들을 결합한다.
몇몇 실시예들 및/또는 이용 시나리오들에서, 1차 에이전트는 거기서 얼마나 많은 RAID 업데이트들이 특정 LBA들에 대한 것일지를 다른 에이전트(다른 1차 에이전트 또는 2차 에이전트)에 통보한다. 다양한 실시예들에서, 통보받은 에이전트는 특정 LBA들에 대한 모든 업데이트들이 수행될 때까지 RAID 업데이트들에 관한 정보를 캐싱(cache)하는 것이 인에이블된다. 다양한 실시예들에서, RAID 업데이트들의 수가 암시적으로 또는 명시적으로 서브-요청의 일부로서 통신된다. RAID 업데이트들이 완료될 때, 통보받은 에이전트는 서브-상태를 1차 에이전트에 전송한다.
다양한 실시예들에서, 단일의 호스트 요청에 관한 복수의 데이터 전달들은 전적으로 또는 부분적으로 독립적으로 수행된다. 예를 들어, 몇몇 RAID RMW 시나리오들에서, 기록 데이터의 전달은 이전에 누적된 패리티 데이터의 전달과 독립적이다. 다양한 상황들에서, 기록 데이터는 1차 에이전트 및 복수의 2차 에이전트들 중 임의의 에이전트에 의해 호스트 메모리로부터 판독되고, 누적된 패리티 데이터는 1차 및 2차 에이전트들 중 임의의 에이전트에 의해 스토리지 디바이스로부터 판독되며, 그 다음으로 예를 들어, 누적된 패리티 데이터가 판독되었던 스토리지 디바이스에 새로운 패리티 데이터가 기록된다.
다양한 실시예들에서, 커플링들 중 하나 또는 둘 이상의 커플링들(131.A, 131.N, 141.A 및 141.N)은 도 1a의 커플링들(111.A, 111.N, 121.A, 및 121.N)과 동일하거나 또는 실질적으로 유사하다. 몇몇 실시예들에서, 디바이스-스토리지 커플링 및 디바이스-스토리지 디바이스 커플링(181)은 호스트-스토리지 디바이스 커플링(180)과 구현에 있어서 동일하거나 실질적으로 유사하다. 몇몇 실시예들에서, 호스트-스토리지 디바이스 커플링(180) 및 디바이스-스토리지 디바이스 커플링(181)은 단일의 엘리먼트로 결합된다. 몇몇 실시예들에서, 커플링들(131.A, 131.N, 141.A 및 141.N) 중 임의의 하나 또는 둘 이상의 커플링들은 디바이스-스토리지 디바이스 커플링(181) 대신에 호스트-스토리지 디바이스 커플링(180)의 변형의 부가적인 포트들에 커플링된다.
도 1a 또는 도 1b 중 어느 하나에 관한 몇몇 실시예들과 같은 다양한 실시예들에서, 호스트 가시 스토리지는 각각의 1차 에이전트들로서 동작가능한 하나 또는 둘 이상의 스토리지 디바이스들 및 2차 에이전트들로서 동작가능한 0개 또는 하나 이상의 스토리지 디바이스들을 갖지만, 호스트 비-가시 스토리지는 각각의 2차 에이전트들로서 동작가능한 0개 또는 하나 이상의 스토리지 디바이스들을 갖는다.
다양한 실시예들에서, 스토리지 디바이스는 물리적 스토리지 디바이스에 대응하고, 이러한 물리적 스토리지 디바이스는 하나 또는 둘 이상의 동작 모드들에 따라 호스트 가시 스토리지 및 호스트 비-가시 스토리지의 임의의 조합을 구현하도록 인에이블된다. 제1 동작 시나리오에서, 특정 물리적 디바이스는 단지 호스트 가시 스토리지만을 구현하도록 동작된다. 제2 동작 시나리오에서, 이러한 특정 물리적 디바이스는 단지 호스트 비-가시 스토리지만을 구현하도록 동작된다. 제3 동작 시나리오에서, 이러한 특정 물리적 디바이스는 호스트 가시 스토리지 및 호스트 비-가시 스토리지의 조합을 구현하도록 동작된다. 몇몇 상황들에서(이를 테면, 작업부하의 변화 및/또는 오동작에 응답하여), 동작 시나리오들 중 하나로부터 다른 하나로 동작이 동적으로 변화된다.
예를 들어, 도 1a와 관련하여, 도시된 것처럼 동작은, 호스트 가시 스토리지(110)가 스토리지 디바이스(110.A) 및 스토리지 디바이스(110.N)를 갖고, 호스트 비-가시 스토리지(120)가 스토리지 디바이스(120.A) 및 스토리지 디바이스(120.N)를 갖는 것으로 시작된다. 계속하여 이러한 예에서는, 스토리지 디바이스들(110.A, 110.N, 120.A 및 120.N) 각각은 각각의 물리적 스토리지 디바이스들에 대응한다. 작업부하의 변화에 응답하여, 스토리지 디바이스(110.N)는 호스트 가시 스토리지의 엘리먼트로 동작하는 것으로부터 호스트 비-가시 스토리지의 엘리먼트로 동작하는 것으로 동적으로 (재)구성된다. 이러한 동적 재구성 이후에, 호스트 가시 스토리지(110)는 스토리지 디바이스(110.A)를 갖고, 호스트 비-가시 스토리지(120)는 스토리지 디바이스(110.N), 스토리지 디바이스(120.A) 및 스토리지 디바이스(120.N)를 갖게 된다(미도시).
다른 예로서, 도 1b와 관련하여, 도시된 것처럼 동작은, 호스트 가시 스토리지(130)가 스토리지 디바이스(130.A) 및 스토리지 디바이스(130.N)를 갖고, 호스트 비-가시 스토리지(140)가 스토리지 디바이스(140.A) 및 스토리지 디바이스(140.N)를 갖는 것으로 시작된다. 계속하여 이러한 예에서는, 스토리지 디바이스들(130.A, 130.N, 140.A, 및 140.N) 각각은 각각의 물리적 스토리지 디바이스들에 대응한다. 스토리지 디바이스(130.A)의 오동작에 응답하여, 스토리지 디바이스(140.A)는 호스트 비-가시 스토리지의 엘리먼트로 계속하여 동작하는 것뿐만 아니라 호스트 가시 스토리지의 엘리먼트로 동작하도록 동적으로 (재)구성된다. 예를 들어, 스토리지 디바이스(140.A)에 의해 구현되는 스토리지는 오동작 이전에 스토리지 디바이스(130.A)에 의해 구현되는 스토리지의 모두 또는 임의의 부분들을 대체하는 것으로 이용되는 것과 호스트 비-가시 스토리지로서 계속 이용되는 것 사이에서 할당된다. 이러한 동적 재구성 이후에, 호스트 가시 스토리지(130)는 스토리지 디바이스(140.A) 및 스토리지 디바이스(130.N)에 의해 구현되는 스토리지의 부분을 갖고, 호스트 비-가시 스토리지(140)는 스토리지 디바이스(140.A)(스토리지 디바이스(130.A)를 대체하기 위해 이용되는 부분보다 작음), 및 스토리지 디바이스(140.N)를 갖게 된다(미도시).
다양한 실시예들에서, 호스트 가시 스토리지는 투명 스위치를 통해 호스트에 액세스가능한 스토리지이고 및/또는, 호스트 비-가시 스토리지는 불투명 스위치를 통해 호스트로부터 숨겨져 있는 스토리지이다. 호스트 가시 스토리지 및 호스트 비-가시 스토리지는, 예를 들어 투명 스위치 및/또는 불투명 스위치의 모두 또는 임의의 부분들을 통해, 피어-투-피어 통신을 위해 인에이블된다. 몇몇 실시예들에서, 통합형 스위치가, 상술된 투명 스위치 및 불투명 스위치에 각각 대응하는 투명한 부분 및 불투명한 부분을 제공한다. 예를 들어, 도 1b와 관련하여, 호스트(100), 커플링(101), 호스트-스토리지 디바이스 커플링(180), 및 디바이스-스토리지 디바이스 커플링(181)의 모두 또는 임의의 부분들의 하나 또는 둘 이상은 통합형 스위치를 구현한다. 이러한 통합형 스위치는 호스트 가시 스토리지(130)의 엘리먼트들 중 하나 또는 둘 이상의 엘리먼트들에 대하여 투명 스위치로 동작가능하고, 또한 동시에 호스트 비-가시 스토리지(140)의 엘리먼트들 중 하나 또는 둘 이상의 엘리먼트들에 대하여 불투명 스위치로 동작가능하다.
스케일러블 스토리지 시스템 동작
도 2는 스케일러블 스토리지 디바이스들을 위한 기술의 일 실시예에 대해 선택된 처리 세부사항들을 도시한다. "1차 동작들"(209)로서, (도 1a의 호스트 가시 스토리지(110)의 엘리먼트들 중 하나 또는 둘 이상의 엘리먼트들과 같이) 1차 에이전트로 동작하는 스토리지 디바이스에 의해 수행되는 동작들뿐만 아니라, "2차 동작들"(219)로서, (도 1a의 호스트 비-가시 스토리지(120)의 엘리먼트들 중 하나 또는 둘 이상의 엘리먼트들 및/또는 호스트 가시 스토리지(110)의 나머지 엘리먼트들 중 임의의 하나 또는 둘 이상의 엘리먼트들과 같이) 2차 에이전트로 동작하는 스토리지 디바이스에 의해 수행되는 동작들이 도시된다.
스토리지에 액세스하기 위한 요청이 단일의 응답하는 에이전트에 의해 충족되는 시나리오가 먼저 설명되고, 그 다음으로 단일의 요청이 하나보다 많은 수의 응답하는 에이전트에 의해 충족되는 시나리오들이 설명된다. 호스트(이를 테면, 도 1a의 호스트(100))는 스토리지에 액세스하기 위한 요청을 1차 에이전트로 동작하는 스토리지 디바이스에 제공한다(개념적으로 "시작"(201)으로 표시됨). 1차 에이전트는, 이를 테면 호스트 메모리에 보유된 서브미션 큐 엔트리를 판독함으로써, 호스트로부터 요청을 수락하고, 선택적으로 요청이 에러들 없이 수락되었음을 나타내기 위해 호스트와 핸드쉐이킹(handshaking)을 제공한다("호스트로부터 요청 수락"(202)). 그 다음으로, 1차 에이전트는 요청을 검사하여, 이러한 요청이 1차 에이전트에 의해 구현된 스토리지에 대한 것인지를 결정한다("로컬?"(203)). 만약 그런 경우("예"(203Y)), 1차 에이전트가 요청이 구비된 어드레스 정보를 처리하여, 어드레스 정보를, 요청과 연관된 (호스트) 컨텍스트로부터 1차 에이전트에 의해 구현되는 대응하는 스토리지와 연관된 (1차 에이전트) 컨텍스트로 변환하도록 흐름이 진행된다("로컬 LBA들로의 Xlate"(204)). 예를 들면, 요청은 LBA 100을 특정하고, 1차 에이전트는 1차 에이전트에 의해 구현되는 (로컬) 스토리지의 시작 위치에 대응하여, LBA 100으로부터 LBA 0으로 변환한다. 그 다음으로 1차 에이전트는, 요청을 수행하고("로컬로 처리"(205)), 이를 테면 호스트 메모리에 보유된 완료 큐 엔트리를 기록함으로써, 호스트에 상태를 제공하며("상태를 호스트에 제공"(206)), 이에 의해 요청에 대한 처리를 완료한다("종료"(299)). 몇몇 실시예들에서, 이러한 변환은 페이지 테이블과 유사하게, LBA들의 기능과 로컬 스토리지 어드레스들 사이의 매핑을 포함한다.
이러한 요청이 1차 에이전트에 의해 구현되는 스토리지에 대한 것이 아닌 경우("아니요"(203N)), 1차 에이전트 내의 흐름은, 2차 에이전트로 동작하는 스토리지 디바이스에, 이러한 요청을 서브-요청으로서 전송하는 것으로 진행된다("2차(들)로 포워딩"(207)). 1차 에이전트는 요청으로부터 서브-요청을 결정하고, 1차 에이전트로부터 2차 에이전트로의 서브-요청의 통신은 점선 "서브-요청"(207R)으로 도시되어 있다. 그 다음으로, 1차 에이전트 내에서 흐름은, 2차 에이전트에 의한 서브-요청의 완료를 기다리는 것으로 진행된다("완료 대기"(208)). 2차 에이전트가 서브-요청을 완료한 경우(에러들이 있거나 또는 에러들 없이), 2차 에이전트는 1차 에이전트에 서브-상태를 공급한다(개념적으로 점선 "서브-상태"(214S)로 도시됨). 그 다음으로 1차 에이전트는, 2차 에이전트로부터 서브-상태를 수락하고, 선택적으로 서브-상태가 에러들 없이 수락되었음을 나타내기 위해 2차 에이전트와 핸드쉐이킹을 제공한다("2차(들)로부터 서브-상태 수락"(209A)). 그 다음으로 1차 에이전트는 호스트에 서브-상태를 상태로서 제공하도록 진행되고("호스트에 상태 제공"(206)), 그 다음으로 요청에 대한 처리가 완료된다("종료"(299)).
2차 에이전트 내에서 흐름은, 1차 에이전트로부터 서브-요청을 수락함으로써 시작되고, 선택적으로 서브-요청이 에러들 없이 수락되었음을 나타내기 위해 1차 에이전트와 핸드쉐이킹을 제공한다("1차로부터 서브-요청 수락"(211)). 이러한 서브-요청은 서브-요청이 대응하는 요청에 호스트에 의해 제공되는 어드레스 정보(이를 테면 LBA)를 포함한다. 2차 에이전트는 서브-요청이 구비된 어드레스 정보를 처리하여, 어드레스 정보를, 요청과 연관된 (호스트) 컨텍스트로부터 2차 에이전트에 의해 구현되는 대응하는 스토리지와 연관된 (2차 에이전트) 컨텍스트로 변환한다("로컬 LBA들로의 Xlate"(212)). 예를 들면, 요청은 LBA 200을 특정하고, 서브-요청은 LBA 200을 특정하며, 2차 에이전트는 2차 에이전트에 의해 구현되는 (로컬) 스토리지의 시작 위치에 대응하여, (호스트) LBA 200을 (로컬) LBA 0으로 변환한다. 계속하여 이러한 예의 경우, 또 다른 요청이 LBA 201을 특정하고, 대응하는 서브-요청이 LBA 201을 특정하며, 2차 에이전트는 2차 에이전트에 의해 구현되는 (로컬) 스토리지의 다음 위치에 대응하여, (호스트) LBA 201을 (로컬) LBA 1로 변환한다. 도 3의 설명에서 다른 예들이 이후 설명된다. 서브-요청을 변환한 후에, 흐름은 진행되어 2차 에이전트가 요청을 수행하고("로컬로 처리"(213)), 그 다음으로 점선 "서브-상태"(214S)에 의해 도시된 것처럼, 1차 에이전트에 서브-상태를 반환한다("1차에 서브-상태를 제공"(214)).
스토리지에 액세스하기 위한 단일의 요청이 하나보다 많은 수의 응답하는 에이전트에 의해 충족되는 시나리오에서, 이러한 단일의 요청은 개념적으로 복수의 서브-요청들로 분해된다. 서브-요청들 중 0개, 하나 또는 둘 이상의 서브요청이 1차 에이전트에 의해 충족되고, 서브-요청들 중 0개, 하나, 또는 둘 이상의 서브요청이 0개, 하나, 또는 둘 이상의 2차 에이전트들에 의해 충족된다. 예를 들어, 2개의 LBA들의 길이를 갖는 LBA 400에 대한 요청은 LBA 400에 대해 2차 에이전트에 대한 서브-요청 및 LBA 401에 대해 다른 2차 에이전트에 대한 다른 서브-요청에 의해 충족된다. 각각의 2차 에이전트는 독립적으로, 각각의 서브-요청의 LBA를 각각의 2차 에이전트의 로컬 스토리지에 대응하는 LBA로 변환한다.
1차 에이전트는 요청의 어드레스 및 길이 정보에 기초하여 (존재한다면) 어느 2차 에이전트들이 서브-요청들을 수신할 것인지를 결정한다. 이런 식으로, 도 2에서는, 요청이 1차 에이전트에 의해 구현되는 스토리지에 대한 것인지의 결정이("로컬?"(203)) 개념적으로 복수의 서브-요청들 각각에 대해 결정된다. 서브-요청들 중 일부에 대해서, 결과는 서브-요청들이 로컬이 되는 것이지만, 서브-요청들 중 나머지 서브 요청들에 대해서, 결과는 나머지 서브-요청들이 로컬이 아니고 하나 또는 둘 이상의 2차 에이전트들에 서브-요청들로서 포워딩되게 된다("2차(들)로 포워딩"(207) 및 "서브-요청"(207R)으로 포워딩). 몇몇 시나리오들에서, 단일의 2차 에이전트가 단일의 서브-요청을 수신하지만, 다른 시나리오들에서는 이러한 단일의 2차 에이전트가 복수의 서브-요청들을 수신한다. 그 다음으로, "2차 동작들"(219)로 표현되는 흐름은 복수의 서브-요청들 각각에 대해 수행된다(다양한 실시예들에서, 직렬 및/또는 병렬 처리의 임의의 조합으로). 몇몇 시나리오들에서, 복수의 2차 에이전트들 각각은 하나 또는 둘 이상의 서브-요청들을 수신한다. 그 다음으로, "2차 동작들"(219)로 표현되는 흐름은 복수의 2차 에이전트들 각각에 의해 독립적으로 수행된다.
1차 에이전트는, 이를 테면 하나 또는 둘 이상의 함수들 및/또는 매핑 테이블들을 통해서(예컨대, 도 1a의 스토리지 디바이스(110.A)에서 구현됨), 단일의 요청을, "2차(들)로 포워딩"(207)에서 수행되는 처리의 일부로서 하나 또는 둘 이상의 2차 에이전트들로의 복수의 서브-요청들로 매핑하는 방식을 결정한다. 복수의 서브-요청들이 하나 또는 둘 이상의 2차 에이전트들에 전송될 때, 1차 에이전트는, 나머지 서브-요청들과는 독립적으로 서브-요청들 각각에 대하여, 완료를 위해 대기하고("완료 대기"(208)) 대응하는 서브-상태를 수락함으로써("2차(들)로부터 서브-상태 수락"(209A)), 개념적으로 상태 정보를 누적한다. 특정 요청에 대해 서브-요청들 모두에 대한 서브-상태들이 수신될 때, 1차 에이전트는 전체 상태를 생성하여, "상태를 호스트에 제공"(206)에서 수행되는 처리의 일부로서 호스트에 제공하게 된다.
몇몇 실시예들에서, 2차 에이전트들은 요청 전체를 동일한 서브-요청들로서 수신한다(또는 대안적으로 서브미션 큐 내의 엔트리로부터 요청을 판독한다). 그 다음으로, 2차 에이전트들 각각은, 각각의 2차 에이전트가 (존재한다면) 요청 중 어느 부분을 수행하게 될지를 결정하고, 선택적으로 (존재한다면) 누적된 패리티 데이터를 어느 에이전트에 전송할지를 결정한다. 예를 들어, 요청은 200개의 LBA들의 길이를 갖는 LBA 500을 특정한다. 1차 에이전트는 제1 및 제2의 2차 에이전트들에 동일한 서브-요청들을 전송한다(또는 대안적으로 제1 및 제2의 2차 에이전트들로 지향되는 단일의 서브-요청을 전송한다). 서브-요청(들)은 200개의 LBA들의 길이를 갖는 LBA 500을 특정한다. 제1의 2차 에이전트는 (호스트 및 제2의 2차 에이전트와 독립적으로) 서브-요청의 LBA들 600-699가, 제1의 2차 에이전트가 수행하게 될 서브-요청의 부분에 대응한다고 결정한다. 제2의 2차 에이전트는 (호스트 및 제1의 2차 에이전트와 독립적으로) 서브-요청의 LBA들 500-599가, 제2의 2차 에이전트가 수행하게 될 서브-요청의 부분에 대응한다고 결정한다. 제1 및 제2의 2차 에이전트들은 누적된 패리티 정보가, 특정 리던던시 방식에 따라, 에이전트들 중 적절한 것이라고 결정한다.
몇몇 실시예들 및/또는 이용 시나리오들에서, 상태는 1차 에이전트를 통해 포워딩되기 보다는, 2차 에이전트에 의해 호스트에 직접 제공된다(개념적으로, 도 1a의 점선(154)으로 도시됨). 예를 들어 이러한 상태의 직접 제공은, 요청 전체에 대한 서브-요청들이 단일의 2차 에이전트에 포워딩될 때 발생한다. 그 다음으로, 이러한 단일의 2차 에이전트는 상태를 직접적으로 호스트에 반환한다(예를 들어, 이러한 단일의 2차 에이전트가 호스트 메모리에 보유된 완료 큐에 엔트리를 기록함으로써). 이러한 단일의 2차 에이전트가 엔트리를 기록하는 동작은, 호스트에 의해, 1차 에이전트가 엔트리를 기록하는 것과 구별될 수 없고, 따라서 이러한 단일의 2차 에이전트가 엔트리를 기록하더라도, 이러한 단일의 2차 에이전트에 의한 요청의 충족은 호스트에 투명하다는 점에 주목해야 한다. 몇몇 실시예들에서, (1차 에이전트 보다는) 2차 에이전트가, 특정 요청에 대응하는 복수의 서브-요청들에 대하여 서브-상태들을 누적하고, 누적된 서브-상태들을 전체 상태로서 호스트에 제공한다.
몇몇 실시예들에서, 하나 또는 둘 이상의 스토리지 디바이스들은 적어도 하나 또는 둘 이상의 호스트들로부터의 몇몇 요청들에 대하여, 1차 에이전트 및 2차 에이전트로서 동시에 동작한다. 예를 들어, 시스템은 2개의 스토리지 디바이스들을 가진다. 스토리지 디바이스들 중 제1 스토리지 디바이스는, 2차 에이전트로서 동작하는, 스토리지 디바이스들 중 제2 스토리지 디바이스에 대하여 1차 에이전트로서 동작하고, 제2 스토리지 디바이스는 2차 에이전트로서 동작하는 제1 스토리지 디바이스에 대하여 1차 에이전트로서 동작한다. 보다 구체적으로, 제1 스토리지 디바이스는 호스트들 중 특정한 하나의 호스트로부터 요청을 수락하고, 이러한 요청을 서브-요청으로서 제2 스토리지 디바이스에 전송한다. 제2 스토리지 디바이스는 이러한 특정 호스트로부터 또 다른 요청을 수락하고, 나머지 요청을 서브-요청으로서 제1 스토리지 디바이스에 포워딩한다. 몇몇 실시예들 및/또는 이용 시나리오들에서, 이러한 요청들은 동일한 호스트 요청 큐로부터 기인한 것이다. 몇몇 실시예들 및/또는 이용 시나리오들에서(이를 테면, 이러한 요청들이 별개의 호스트들로부터 기인한 경우), 이러한 요청들은 별개의 호스트 요청 큐들로부터 기인한 것이다.
다양한 실시예들에 따르면, 요청, 상태, 및 데이터 전달들 중 하나 또는 둘 이상은 예를 들면 호스트(또는 그 일부)에 액세스가능한 메모리(이를 테면, 호스트 메모리)와 스토리지 디바이스들 중 하나(또는 그 일부)에 액세스가능한 메모리(이를 테면, 스토리지 디바이스에서 구현되는 버퍼) 사이의 DMA를 통해 이루어진다. 따라서, 요청, 상태, 및 데이터 전달들의 상술된 흐름들 중 하나 또는 둘 이상은, 하나 또는 둘 이상의 스캐터/개더(scatter/gather) 리스트들의 통신, 및 스캐터/개더 리스트들에 따른 후속하는 DMA 전달들에 의해 이루어진다. 부가적으로(또는 대안적으로), 요청, 상태, 및 데이터 전달들의 흐름들 중 하나 또는 둘 이상은 완료 및/또는 상태 큐 정보의 통신, 및 이러한 큐들의 엔트리들로의/엔트리들로부터의 후속하는 DMA 전달들에 의해 이루어진다. 다양한 실시예들에서, 요청, 상태, 및 데이터 전달들 중 임의의 것은 스토리지 디바이스들 중 하나 또는 둘 이상의 스토리지 디바이스들에서 하나 또는 둘 이상의 프로세서들에 의해 직접적으로 수행되고 및/또는 관리된다.
어드레싱
도 3은 스케일러블 스토리지 디바이스들을 위한 기술의 일 실시예에서 호스트, 1차 에이전트, 및 2차 에이전트 어드레싱에 대한 선택된 세부사항들을 나타낸다. 도면은 (도 1a의 호스트(100)와 같은) 호스트가 보게 되는 스토리지 어드레스 공간(호스트 어드레스 공간(310))의 예시적인 윈도우들을 도시한다. 호스트 스토리지 어드레스 공간은 호스트 LBA 범위들 1-5(311-315)를 갖는다. 도면은 (도 1a의 호스트 가시 스토리지(110)의 엘리먼트들 중 임의의 하나의 엘리먼트와 같은) 1차 에이전트가 보게 되는 스토리지 어드레스 공간들(1차 어드레스 공간(320))의 예시적인 윈도우들을 추가로 도시한다. 1차 에이전트 스토리지 어드레스 공간은 1차 LBA 범위들 1-3(321-323)을 갖는다. 도면은 (도 1a의 호스트 비-가시 스토리지(120)의 엘리먼트들 중 임의의 2개의 엘리먼트들 및/또는 호스트 가시 스토리지(110)의 나머지 엘리먼트들 중 임의의 엘리먼트와 같은, 2차 에이전트들(A 및 B)인) 2개의 2차 에이전트들이 보게 되는 스토리지 어드레스 공간들(2차 어드레스 공간들(330))의 예시적인 윈도우들을 추가로 도시한다. 2차 에이전트 A 스토리지 어드레스 공간은 2차 A LBA 범위들 1-3(331A, 332A 및 333A)을 갖는다. 2차 에이전트 B 스토리지 어드레스 공간은 2차 B LBA 범위들 1-2(331B 및 332B)를 갖는다. 어떠한 특정 크기로도 도시되지 않았지만, 도면에서는 다양한 어드레스 범위 엘리먼트들의 수직 높이가 변화하고, 이는 개념적으로 범위들 각각에 얼마나 많은 위치들이 있는지의 변화를 나타낸다.
제1 예에서, 단일의 호스트 어드레스 범위(호스트 LBA 범위 1(311))는 2차 A의 단일의 어드레스 범위(2차 A LBA 범위 1(331A))에 대응한다. 1차 에이전트(이를 테면, 도 1a의 스토리지 디바이스(110.A))는, (이를 테면, 도 2의 "로컬?"(203) 및 "아니요"(203N)와 연관된 처리를 통해서) 호스트 LBA 범위 1(311) 내의 어드레스에 대한 호스트 요청이, 1차 에이전트에 의해 구현되지 않는 스토리지에 대응하며, 이러한 요청이 2차 A에 의해 구현되는 스토리지에 대응한다고 결정한다. 그 다음으로 1차 에이전트는 서브-요청을 2차 A에 포워딩한다. 그 다음으로, 2차 A는 서브-요청을 변환하고(이를 테면, 도 2의 "로컬 LBA들로 Xlate"(212)와 연관된 처리), 2차 A LBA 범위 1(331A)을 통해 액세스가능한 스토리지에 로컬 액세스를 수행한다(이를 테면, 도 2의 "로컬로 처리"(213)를 통한 처리).
제2 예에서, 단일의 호스트 어드레스 범위(호스트 LBA 범위 2(312))는 2차 B의 단일의 어드레스 범위(2차 B LBA 범위 1(331B))에 대응한다. 1차 에이전트는 호스트 LBA 범위 2(312) 내의 어드레스에 대한 요청이 2차 B에 의해 구현되는 스토리지에 대응한다고 결정하며, 그 다음으로 서브-요청을 2차 B에 포워딩한다. 그 다음으로, 2차 B는 서브-요청을 변환하고, 2차 B LBA 범위 1(331B)을 통해 액세스가능한 스토리지에 로컬 액세스를 수행한다.
제3 예에서, 단일의 호스트 어드레스 범위(호스트 LBA 범위 3(313))는 1차 에이전트의 단일의 어드레스 범위(1차 LBA 범위 1(321))에 대응한다. 1차 에이전트는 호스트 LBA 범위 3(313) 내의 어드레스에 대한 요청이 1차 에이전트에 의해 구현되는 스토리지에 대응한다고 결정하고, 요청을 변환하며(이를 테면, "로컬 LBA들로 Xlate"(204)와 연관된 처리를 통해), 1차 LBA 범위 1(321)을 통해 액세스가능한 스토리지에 로컬 액세스를 수행한다.
제4 예에서, 단일의 호스트 어드레스 범위(호스트 LBA 범위 4(314))는 2차 A의 2개의 어드레스 범위들(2차 A LBA 범위들 2(332A) 및 3(333A)) 및 2차 B의 단일의 어드레스 범위(2차 B LBA 범위 2(332B))에 대응한다. 1차 에이전트는, (예를 들면, 시작 LBA 및 액세스하기 위한 인접한 LBA들의 수에 기초하여) 호스트 LBA 범위 4(314)의 LBA들 전체에 대한 요청이 2차 A 및 2차 B에 의해 구현되는 스토리지에 대응한다고 결정한다. 그 다음으로, 1차 에이전트는 2개의 서브-요청들을 2차 A에, 그리고 단일의 서브-요청을 2차 B에 포워딩한다. 2차 A는 이러한 2개의 서브-요청들을 변환하고, 2차 A LBA 범위들 2(332A) 및 3(333A)을 통해 액세스가능한 스토리지에 로컬 액세스들을 (직렬로, 또는 전적으로 또는 부분적으로 병렬로) 수행한다. 2차 B는 이러한 단일의 서브-요청을 변환하고, 2차 B LBA 범위 2(332B)를 통해 액세스가능한 스토리지에 로컬 액세스를 수행한다.
제5 예에서, 단일의 호스트 어드레스 범위(호스트 LBA 범위 5(315))는 1차 에이전트의 2개의 어드레스 범위들(1차 LBA 범위들 2(322) 및 3(323))에 대응한다. 1차 에이전트는, (예를 들면, 시작 LBA 및 액세스하기 위한 인접한 LBA들의 수에 기초하여) 호스트 LBA 범위 5(315)의 LBA들 전체에 대한 요청이 1차 에이전트에 의해 구현되는 스토리지에 대응한다고 결정한다. 1차 에이전트는 이러한 요청을 2개의 로컬 LBA 범위들로 변환하고, 1차 LBA 범위들 2(322) 및 3(323)을 통해 액세스가능한 스토리지에 로컬 액세스들을 수행한다.
몇몇 실시예들에서, 1차 에이전트는 호스트 요청의 각각의 서브-요청을 하나 또는 둘 이상의 2차 에이전트들 중 특정 에이전트에 별개로 포워딩하도록 인에이블된다. 다른 실시예들에서, 1차 에이전트는 호스트 요청의 둘 또는 셋 이상의 서브-요청들을, 단일의 결합된 서브-요청으로서 복수의 2차 에이전트들 중 특정 에이전트에 포워딩하도록 인에이블된다. 예를 들면, 다양한 실시예들에서, 1차 에이전트는 호스트 요청의 하나 또는 둘 이상의 서브-요청들을 처리하기 위해 하나 또는 둘 이상의 2차 에이전트들을 결정하고, 동일한 LBA 범위 및 동일한 길이를 갖는 호스트 요청을 이러한 하나 또는 둘 이상의 2차 에이전트들에 포워딩한다. 그 다음으로, 이러한 하나 또는 둘 이상의 2차 에이전트들은 LBA 범위 및 길이를 인터프리팅하여, 하나 또는 둘 이상의 2차 에이전트들 각각이 처리하고 응답하게 될 호스트 요청의 각각의 부분들을 결정하도록 인에이블된다. 다른 실시예들에서, 1차 에이전트는 호스트 요청의 LBA 범위 및 길이를 처리하고, LBA 범위 및 길이의 처리된 버전을 하나 또는 둘 이상의 2차 에이전트들 각각에 전송한다. 예를 들어, 데이터가 64KB 경계들 상에서 N개의 에이전트들(N-1개의 2차 에이전트들 및 1차 에이전트) 사이에서 스트라이핑되는 경우, 1차 에이전트는 LBA 범위를 N*64KB로 나누어, 서브-요청들을 N-1개의 2차 에이전트들에 분배한다. N-1개의 2차 에이전트들 각각은, 분할된 시작 LBA, N개의 에이전트들 사이에서의 데이터의 스트라이핑에 대응하는 길이의 부분, 및 선택적으로 및/또는 선별적으로 LBA를 분할한 후의 나머지로부터 각각의 서브-요청을 수신한다; 따라서, 2차 에이전트들 중 첫 번째 및/또는 마지막 에이전트는 선택적으로 64KB 보다 작은 전달을 처리한다.
스케일러블 스토리지 디바이스들
도 4는 1차 에이전트로 동작하도록 인에이블되는 스케일러블 스토리지 디바이스, 특히 도 1a의 스토리지 디바이스(110.A)의 일 실시예에 대한 선택된 구조상 세부사항들을 도시한다. 스토리지 디바이스는 PCIe 버스에 대한 인터페이스(PCIe 인터페이스(401))를 포함한다. PCIe 인터페이스는, 예를 들면 완료/상태 큐 엔트리들을 판독/기록하기 위해 및/또는 호스트 메모리로부터/메모리로 데이터를 직접적으로 전달하기 위해, 호스트 메모리와 PCIe 인터페이스의 버퍼들 사이에서 직접적으로, 선택적인 및/또는 선별적인 전달들을 가능하게 하기 위한 DMA 유닛을 포함한다. PCIe 인터페이스는 변환 블록(LBA, 길이 Xlate 로직(402))에 커플링된다. 변환 블록은, 도 2의 "로컬 LBA들로 Xlate"(204)에 대해 기술된 것처럼, 호스트 스토리지 어드레스 정보(예컨대, LBA 및 길이)를 로컬 스토리지 어드레스 정보로 변환하도록 인에이블된다. 변환 블록은 하나 또는 둘 이상의 대용량 스토리지 유닛들(집합적으로 대용량 스토리지(404)로 도시됨)에 커플링되는 대용량 스토리지 인터페이스(스토리지 인터페이스 로직(403))에 커플링된다. 대용량 스토리지 유닛들은 플래시 스토리지 유닛(플래시(404F)), 자기 디스크 스토리지 유닛(자기(404M)), 광학 디스크 스토리지 유닛(광학(404O)) 및/또는 임의의 유형의 비-휘발성 스토리지 유닛 중 임의의 하나 또는 둘 이상을 포함한다. 다양한 실시예들에서, 플래시 스토리지 유닛은 NAND 플래시 또는 NOR 플래시와 같은 하나 또는 둘 이상의 플래시 메모리 칩들 및/또는 다이스를 포함한다.
스토리지 디바이스(110.A)는 제어 블록을 포함하고, 이러한 제어 블록은 PCIe 인터페이스(401), LBA, 길이 Xlate 로직(402), 및 스토리지 인터페이스 로직(403) 중 하나 또는 둘 이상에 선택적으로 커플링되는 1차 에이전트로서의 동작에 관한 다양한 동작들을 수행하도록 인에이블된다(서브-요청 생성 및 서브-상태 누적(405)). 이러한 동작들은 예를 들어, 도 2의 "1차 동작들"(209)의 엘리먼트들 중 임의의 하나 또는 둘 이상의 엘리먼트들과 연관된 처리의 모두 또는 임의의 부분들을 구현하고 및/또는 관리하는 것을 포함한다. 몇몇 실시예들에서, 서브-요청 생성 및 서브-상태 누적(405)은 호스트 어드레스들이 다양한 2차 디바이스들에 어떻게 할당되는지를 추적하는 하나 또는 둘 이상의 함수들 및/또는 매핑 테이블들을 구현한다(이를 테면, 도 2의 "2차(들)로의 포워딩"(207)에 의해 이용되는 매핑 테이블들). 이러한 동작들은, (도 5의 스토리지 디바이스(120.A)와 같은) 하나 또는 둘 이상의 2차 에이전트들에 의해 구현되는 스토리지 용량이 스토리지 디바이스(110.A)에 의해 구현되는 것처럼, 스토리지 용량에 관한 호스트 질의들에 응답하는 것을 더 포함한다.
도 5는 도 1a의 스토리지 디바이스(120.A)와 같이, 2차 에이전트로 동작하도록 인에이블된 스케일러블 스토리지 디바이스의 일 실시예에 대한 선택된 구조상 세부사항들을 나타낸다. 스토리지 디바이스는 몇몇 엘리먼트들을 포함하고, 이러한 엘리먼트들은 도 4의 유사하게 식별되는 엘리먼트들(PCIe 인터페이스(401), LBA, 길이 Xlate 로직(402), 스토리지 인터페이스 로직(403), 및 플래시(404F), 자기(404M), 및 광학(404O)의 엘리먼트들을 갖는 대용량 스토리지(404))과 동작 및 구조상에서 동일하다.
스토리지 디바이스(120.A)는 제어 블록을 포함하고, 이러한 제어 블록은 PCIe 인터페이스(401), LBA, 길이 Xlate 로직(402), 및 스토리지 인터페이스 로직(403) 중 하나 또는 둘 이상에 선택적으로 커플링되는 2차 에이전트로서의 동작에 관한 다양한 동작들을 수행하도록 인에이블된다(서브-요청 수락 및 서브-상태 생성(501)). 이러한 동작들은 예를 들어, 도 2의 "2차 동작들"(219)의 엘리먼트들 중 임의의 하나 또는 둘 이상의 엘리먼트들과 연관된 처리의 모두 또는 임의의 부분들을 구현 및/또는 관리하는 것을 포함한다. 이러한 동작들은, 어떠한 스토리지도 스토리지 디바이스(120.A)에 의해 구현되지 않는 것처럼, 또는 대안적으로 (호스트에 의해 직접 액세스되기 보다는) 1차 에이전트를 통해 호스트에 의해 액세스되도록 할당되는 스토리지가 스토리지 디바이스에 의해 구현되지 않는 것처럼, 스토리지 용량에 관한 호스트 질의들에 응답하는 것을 더 포함한다. 대신에, 스토리지 디바이스(120.A)에 의해 구현되는 스토리지는 도 4의 스토리지 디바이스(110.A)와 같은 1차 에이전트에 의해 보고된다.
(도시되지 않은) 몇몇 실시예들에서, 설정가능한 스토리지 디바이스는 도 4의 스토리지 디바이스(110.A)에 도시된 엘리먼트들 모두의 기능에 대응하는 엘리먼트들을 포함하고, 도 5의 서브-요청 수락 및 서브-상태 생성(501)의 기능에 대하는 엘리먼트들을 더 포함한다. 예시적인 설정가능한 스토리지 디바이스는, PCIe 인터페이스(401), LBA, 길이 Xlate 로직(402), 스토리지 인터페이스 로직(403), 및 대용량 스토리지(401)뿐만 아니라, 서브-요청 생성 및 서브-상태 누적(405) 및 서브-요청 수락 및 서브-상태 생성(501)을 포함한다. 이러한 설정가능한 스토리지 디바이스는, 예를 들어 프로그램가능한 내포된 모드 상태에 응답하여, 선택적으로 1차 에이전트 또는 2차 에이전트로서 동작하도록 인에이블된다. 이러한 모드 상태는 다양한 기술들에 의해, 이를 테면 특정한(예컨대, 벤더-특정) 명령들을 이용하는 관리 소프트웨어에 의한 내포된 PCIe 인터페이스를 통해, 비-휘발성 메모리(예컨대, 플래시 메모리 또는 옵션 ROM)와 같은 초기화 엘리먼트를 통해, 또는 설정가능한 스토리지 디바이스 및/또는 설정가능한 스토리지 디바이스와 통신하는 다른 스토리지 디바이스에 의한 이벤트의 검출을 통해, 프로그램가능 및/또는 변경가능하다. 몇몇 실시예들 및/또는 이용 시나리오들에서, 설정가능한 스토리지 디바이스는 동작 모드에서의 동적 변경을 가능하게 한다, 이를 테면 2차 에이전트가 오동작 1차 에이전트를 동적으로 대체하고, 이에 의해 단일의 오동작 포인트로서 스토리지를 제거한다.
오동작 시나리오들
1차 에이전트뿐만 아니라 하나 또는 둘 이상의 2차 에이전트들이 호스트에 단일의 논리적 인터페이스로서 보이는 다양한 실시예들 및/또는 이용 시나리오들에서, 몇몇 오동작 복구 기술들이 인에이블된다. 복구 기술들은 호스트에 완전히 투명하거나 또는 호스트 상에서 실행되는 디바이스 드라이버에서만 가시적이다.
제1의 오동작 복구 기술은, 2차 에이전트가 완전히 또는 부분적으로 오동작하여, 오동작 2차 에이전트가 더 이상 스토리지의 특정 부분을 구현하지 못할 때 적용될 수 있다. 1차 에이전트는 이러한 오동작을 감지한다(예를 들면, 1차 에이전트는 오동작을 검출하거나, 또는 오동작 2차 에이전트가 1차 에이전트에 오동작을 보고함). 이에 응답하여 1차 에이전트는, 1차 에이전트의 스토리지로부터의 할당 및/또는 2차 에이전트들 중 0개 또는 그보다 많은 수의 2차 에이전트들로부터의 할당을 통해(선택적으로 및/또는 선별적으로 오동작 2차 에이전트를 포함함), 스토리지의 이러한 특정 부분을 구현하도록 스토리지를 (재)할당한다. 그 다음으로, 1차 에이전트 및 2차 에이전트들은 도 1a, 도 1b, 및 도 2 내지 도 5에 관하여 기술된 상기 실시예들 및/또는 시나리오들 중 임의의 것에 따라 동작한다.
몇몇 상황들에서, 이를 테면 2차 에이전트가 오동작하여 2차 에이전트가 재할당에 스토리지를 기여(contribute)할 수 없는 경우, 이러한 재할당은 오동작 2차 에이전트를 배제한다. 2차 에이전트는 다양한 시나리오들에서 다양한 이유들 때문에 스토리지에 기여할 수 없고, 이를 테면 다양한 이유들은 동작가능한 빈 스토리지가 불충분하거나, 1차 에이전트 및/또는 호스트와 적절히 통신할 수 있는 능력이 없는 경우, 물리적 제거, 또는 완전한 오동작 등이 포함된다. 다른 상황들에서, 이를 테면 2차 에이전트가 부분적으로 오동작하여 적어도 일부 스토리지를 계속하여 구현하는 경우, 재할당은 선택적으로, 부분적으로 오동작하는 2차 에이전트의 스토리지를 포함한다. 대안적인 관련 실시예들 및/또는 이용 시나리오들에서, (1차 에이전트보다는) 호스트 상에서 실행되는 디바이스 드라이버가 오동작을 감지하고, 1차 에이전트에 오동작을 통보하고 및/또는 1차 에이전트에 재할당을 수행하라고 지시한다.
제2의 오동작 복구 기술은, 1차 에이전트가 완전히 또는 부분적으로 오동작하여 1차 에이전트가 더 이상 스토리지의 특정 부분을 구현하지 못하는 경우에 적용될 수 있다. 제2의 오동작 복구 기술은, 재할당이 완전히 또는 부분적으로 오동작하는 1차 에이전트에 의해 더 이상 구현되지 않는 스토리지에 대한 것이라는 점을 제외하고는, 제1의 오동작 복구 기술과 유사하다. 제1의 오동작 복구 기술과 마찬가지로, 1차 에이전트가 스토리지를 적절히 구현하지 못하는 오동작은 1차 에이전트, 2차 에이전트, 또는 호스트 상의 디바이스 드라이버 중 하나 또는 둘 이상에 의해 검출된다.
제3의 오동작 복구 기술은, 1차 에이전트가 예를 들어 하나 또는 둘 이상의 2차 에이전트들 및/또는 호스트와 정보(예컨대, 서브-요청들 및/또는 서브-상태들)를 통신하기 위해 1차 에이전트로서 적절히 동작하지 못하는 경우에 적용될 수 있다. 모니터링 에이전트는 오동작을 감지하고 이에 응답하여 대체 1차 에이전트로서 동작하기 위한 다른 1차 또는 2차 에이전트를 식별한다. 몇몇 실시예들에서, 이러한 대체 1차 에이전트는 핫 스페어이다. 모니터링 에이전트의 예는 오동작 1차 에이전트를 포함하는 스토리지 디바이스의 다른 1차 (또는 2차) 에이전트이다. 모니터링 에이전트의 다른 예는, 호스트 상의 디바이스 드라이버, 이를 테면 호스트 상에서 실행 중인 OS 및/또는 애플리케이션들과 오동작하기 전의 오동작 1차 에이전트 사이의 통신을 가능하게 하는 디바이스 드라이버이다. 오동작 1차 에이전트 오동작의 결과로서, 오동작 1차 에이전트가 스토리지의 특정 부분을 더 이상 구현하지 못하는 경우, 대체 1차 에이전트는, 이를 테면 제2의 오동작 복구 기술과 마찬가지로, 스토리지의 이러한 특정 부분을 구현하기 위해 스토리지를 재할당한다. 이러한 재할당은 다음 중 임의의 하나 또는 둘 이상의 스토리지로부터 할당을 통해 이루어진다: 오동작 1차 에이전트(오동작 1차 에이전트에서 동작가능한 어떤 스토리지가 남아있는 경우), 대체 1차 에이전트, 및/또는 0개 또는 그보다 많은 수의 2차 에이전트들. 대체 1차 에이전트는 오동작 이전에 오동작 1차 에이전트가 동작했던 것과 같이 동작하고, 도 1a, 도 1b, 및 도 2 내지 도 5에 관해 기술된 상기 실시예들 및/또는 시나리오들 중 임의의 것에 따라 동작한다.
제4의 오동작 복구 기술은, 하나 또는 둘 이상의 설정가능한 에이전트들을 갖는 시스템에서 가능하고, 1차 에이전트가 1차 에이전트로 적절히 동작하는 것을 실패하는 경우에 적용될 수 있다. 설정가능한 에이전트의 예는, 예를 들어 도 4 및 도 5의 모든 엘리먼트들을 개념적으로 포함하는 설정가능한 스토리지 디바이스에 기초하여, 1차 에이전트로서 또는 2차 에이전트로서 동작가능한, 설정가능한 스토리지 디바이스이다. 제3의 오동작 복구 기술과 마찬가지로, 1차 에이전트가 1차 에이전트로 적절히 동작하지 못하는 오동작을 모니터링 에이전트가 감지하는 것에 응답하여, 모니터링 에이전트는 대체 1차 에이전트로 동작하기 위한 설정가능한 에이전트들 중 하나를 식별한다. 모니터링 에이전트는 식별된 설정가능한 에이전트가 대체 1차 에이전트로 동작하게 구성되도록 (예컨대, 모드 정보의 프로그래밍을 통해) 요청한다. 식별된 설정가능한 엘리먼트는 설정 변경 요청에 동적으로 응답하고, 대체 1차 에이전트로서 수행하기 위해 1차 에이전트로 동작하기 시작한다. 제3의 오동작 복구 기술과 마찬가지로, 오동작 1차 에이전트 오동작의 결과로서, 오동작 1차 에이전트가 더 이상 스토리지의 특정 부분을 구현하지 못하는 경우, 대체 1차 에이전트는, 이를 테면 제2의 오동작 복구 기술과 마찬가지로, 스토리지의 이러한 특정 부분을 구현하기 위해 스토리지를 재할당한다. 대체 1차 에이전트는 오동작 이전에 오동작 1차 에이전트가 동작했던 것과 같이 동작하고, 도 1a, 도 1b, 및 도 2 내지 도 5에 관해 기술된 상기 실시예들 및/또는 시나리오들 중 임의의 것에 따라 동작한다.
상기 오동작 복구 기술들 중 임의의 하나 또는 둘 이상의 기술에서, 오동작 이후에, 데이터는 선택적으로 리던던시 정보를 통해 가능한 복구된다. 데이터 복구는 선택적으로, 호스트-측 커플링(예컨대, 도 1a 또는 도 1b의 호스트-스토리지 디바이스 커플링(180)) 및 디바이스-측 커플링(예컨대, 도 1b의 디바이스-스토리지 디바이스 커플링(181))의 임의의 조합을 통해 이루어진다. 본원의 다른 곳에서 기술된 것처럼, 이러한 리던던시 정보는 예컨대, 다양한 RAID 및/또는 미러링 구현들에 따른 것이다.
상기 오동작 복구 기술들 중 임의의 하나 또는 둘 이상의 기술에서, 재할당들은 선택적으로, 예를 들면 호스트에게 표현되는 것과 같이, 이용가능한 빈 공간을 감소시킨다.
상기 오동작 복구 기술들 중 임의의 하나 또는 둘 이상의 기술에서, 재할당들 중 임의의 하나 또는 둘 이상의 재할당들은 적어도 부분적으로 명령들을 실행하는 프로세서에 의해 수행 및/또는 관리된다.
상기 오동작 복구 기술들 중 임의의 하나 또는 둘 이상의 기술에서, 1차 또는 2차 에이전트의 오동작의 인식은 다음 중 하나 또는 둘 이상을 통해 이루어진다: 에이전트에 의한 오동작, 에이전트에 의한 하트비트(heartbeat) 표시를 수신하지 못하는 오동작, 및 오동작이 발생하였다는 보다 높은 레벨의 표시의 특정한 검출. 이러한 특정한 검출은, 예를 들어 반환된 상태가 부적절하거나, 프로토콜을 위반했다거나, 요청이 타임아웃되었다는 결정을 통해, 다른 에이전트가 오동작했다는, 1차 에이전트, 2차 에이전트, 또는 디바이스 드라이버의 결정 중 임의의 하나 또는 둘 이상을 포함한다.
투명 스위치가 호스트와 호스트 가시 스토리지 사이의 통신을 가능하게 하는 몇몇 실시예들에서, 호스트 가시 스토리지의 엘리먼트의 오동작은, 예를 들면, 호스트 상에서 실행되는 디바이스 드라이버에 가시적이다. 디바이스 드라이버는 선택적으로, 오동작으로부터의 복구에 참여한다. 호스트와 호스트 비-가시 스토리지 사이에 불투명 스위치를 갖는 몇몇 실시예들에서, 호스트 비-가시 스토리지의 엘리먼트의 오동작은 호스트에 비가시적이다. 오동작으로부터의 복구는 선택적으로, 호스트에 비가시적이다.
다양한 실시예들에서, 도 1a 및 도 1b의 호스트 가시 스토리지(110), 호스트 비-가시 스토리지(120), 호스트 가시 스토리지(130), 및 호스트 비-가시 스토리지(140)의 엘리먼트들 중 임의의 엘리먼트뿐만 아니라, 그 안의 유닛들 및 서브-유닛들에 의해 수행되는 동작들의 모두 또는 임의의 부분들은, 선택적으로 유형의 컴퓨터-판독가능 매체에 저장된 명령들(이를 테면, 펌웨어)을 실행하는 하나 또는 둘 이상의 프로세서들에 의해 관리 및/또는 구현된다. 예를 들면, 서브-요청 생성 및 서브-상태 누적(405) 및/또는 서브-요청 수락 및 서브-상태 생성(501)은 컴퓨터-판독가능 매체에 저장된 명령들(이를 테면, 펌웨어)을 실행하는 프로세서에 의해 관리 및/또는 구현된다. 계속해서 이러한 예의 경우, 컴퓨터-판독가능 매체는 스케일러블 스토리지 디바이스에 포함된 플래시 메모리의 부분(이를 테면, 플래시(404F))이다. 다양한 실시예들에서, 도 1a 및 도 1b의 호스트 가시 스토리지(110), 호스트 비-가시 스토리지(120), 호스트 가시 스토리지(130), 및 호스트 비-가시 스토리지(140)의 엘리먼트들 중 임의의 엘리먼트뿐만 아니라, 그 안의 유닛들 및 서브-유닛들에 의해 수행되는 동작들의 모두 또는 임의의 부분들은, 하나 또는 둘 이상의 상태-머신들에 의해 관리 및/또는 구현된다. 예를 들면, 서브-요청 생성 및 서브-상태 누적(405) 및/또는 서브-요청 수락 및 서브-상태 생성(501)에 의해 수행되는 동작들의 모두 또는 임의의 부분들은, 적어도 부분적으로 로직 게이트 회로에 의해 구현되는 하나 또는 둘 이상의 상태-머신들에 의해 관리 및/또는 구현된다.
다양한 실시예들에서, (1차 및/또는 2차 에이전트들로 동작하도록 인에이블된) 하나 또는 둘 이상의 스케일러블 스토리지 디바이스들을 갖는 스케일러블 스토리지 시스템의 모두 또는 임의의 부분들은, 이를 테면 데이터센터 내에 있는, 장비 랙(rack)의 하나 또는 둘 이상의 서랍(drawer)들 및/또는 선반들에서 구현된다. 스케일러블 스토리지 시스템은 선택적으로, 장비 랙의 다른 서랍들 및/또는 선반들에서 구현되는 컴퓨팅 컴플렉스들과 같은 하나 또는 둘 이상의 호스트들과 동작하도록 인에이블된다.
예시적인 구현 기술들
몇몇 실시예들에서, 스케일러블 스토리지 디바이스(이를 테면, 도 4의 스토리지 디바이스(110.A) 또는 도 5의 스토리지 디바이스(120.A))에 의해 수행되는 동작들 또는 이러한 스토리지 디바이스에 포함된 블록들의 모두 또는 부분들, 및 프로세서, 마이크로프로세서, 시스템-온-칩, 주문형-집적-회로, 하드웨어 가속기, 또는 상술된 동작들 또는 블록들의 모두 또는 부분들을 제공하는 다른 회로의 부분들의 다양한 조합들은, 컴퓨터 시스템에 의한 처리와 호환가능한 규격에 의해 특정된다. 이러한 규격은 다양한 기술(description)들, 이를 테면 하드웨어 기술 언어들, 회로 기술들, 넷리스트 기술들, 마스크 기술들, 또는 레이아웃 기술들에 따른다. 예시적인 기술(description)들은 다음을 포함한다: Verilog, VHDL, SPICE, SPICE 변형들, 이를 테면 PSpice, IBIS, LEF, DEF, GDS-II, OASIS, 또는 다른 기술들. 다양한 실시예들에서, 이러한 처리는, 하나 또는 둘 이상의 집적 회로들 상에 포함되기에 적합한 로직 및/또는 회로를 생성, 검증, 또는 특정하기 위해, 인터프리팅, 컴파일링, 시뮬레이션, 및 합성(synthesis)의 임의의 조합을 포함한다. 다양한 실시예들에 따르면, 각각의 집적 회로는, 다양한 기술(technique)들에 따라 설계가능하고 및/또는 제조가능하다. 이러한 기술들은 프로그램가능 기술(이를 테면, 필드 또는 마스크 프로그램가능 게이트 어레이 집적 회로), 반-주문형 기술(이를 테면, 전적으로 또는 부분적으로 셀-기반 집적 회로), 및 전-주문형 기술(이를 테면, 실질적으로 전용화된 집적 회로), 이들의 임의의 조합, 또는 집적 회로들의 설계 및/또는 제조와 호환가능한 임의의 다른 기술을 포함한다.
몇몇 실시예들에서, 내부에 명령들의 세트가 저장된 컴퓨터 판독가능 매체에 의해 기술되는 동작들의 모두 또는 부분들의 다양한 조합들은, 하나 또는 둘 이상의 프로그램 명령들의 실행 및/또는 인터프리팅에 의해, 하나 또는 둘 이상의 소스 및/또는 스크립트 언어 구문(language statement)들의 인터프리팅 및/또는 컴파일링에 의해, 또는 프로그래밍 및/또는 스크립팅 언어 구문들로 표현된 정보를 컴파일링, 변환, 및/또는 인터프리팅함으로써 생성된 2진 명령들의 실행에 의해 수행된다. 이러한 구문들은 임의의 표준 프로그래밍 또는 스크립팅 언어(이를 테면, C, C++, Fortran, Pascal, Ada, Java, VBscript, 및 Shell)와 호환가능하다. 프로그램 명령들, 언어 구문들, 또는 2진 명령들 중 하나 또는 둘 이상은 선택적으로, 하나 또는 둘 이상의 컴퓨터 판독가능 스토리지 매체 엘리먼트들 상에 저장된다. 다양한 실시예들에서, 프로그램 명령들 중 일부, 모두 또는 다양한 부분들은, 하나 또는 둘 이상의 함수들, 루틴들, 서브-루틴들, 인-라인 루틴들, 프로시저들, 매크로들, 또는 이들의 부분들로서 실현된다.
결론부
텍스트 및 도면들을 준비함에 있어서 단지 편의를 위해 설명에서 몇몇 선택들이 이루어졌고, 반대되는 표시가 없는 경우 이러한 선택들은 그 자체로, 기술된 실시예들의 구조 및 동작에 관한 부가적인 정보를 전달하는 것으로 해석되어서는 안 된다. 이러한 선택들의 예들은 다음을 포함한다: 실시예들의 특징들 및 엘리먼트들을 식별 및 참조하기 위해 이용되는 엘리먼트 식별자들의 특정 조직화 또는 할당(예를 들면, 번호(callout)들 또는 번호 지정자들) 및 도면 부호에 이용되는 지정들의 특정 조직화 또는 할당.
*"포함한다" 또는 "포함하는"라는 단어들은 특히, 개방형 범위의 논리적 세트들을 기술하는 추상적인 개념들로 해석되도록 의도되고, "내에서" 라는 용어가 명시적으로 뒤따르지 않는 한 물리적 한정을 전달하도록 의미되지 않는다.
상기 실시예들은 설명 및 이해의 명료함을 위해 다소 상세하게 기술되었지만, 본 발명은 그러한 제공된 세부사항들로 한정되지 않는다. 본 발명의 많은 실시예들이 존재한다. 개시된 실시예들은 예시적이며 제한적이지 않다.
설명과 부합하는 구성, 배열, 및 용도에 있어서 많은 변형예들이 가능하며, 이들은 허여된 특허의 청구범위의 범주 내에 있다는 점이 이해될 것이다. 예를 들면, 각각의 컴포넌트 블록에서의 다양한 실시예에 따라, 상호접속 및 기능 단위 비트 폭들, 클록 속도들, 및 이용되는 기술의 유형은 변경될 수 있다. 상호접속 및 로직에 부여된 명칭들은 단지 예시적인 것이고, 기술된 개념들을 한정하는 것으로 해석되어서는 안 된다. 플로우차트, 플로우 다이어그램 프로세스, 동작, 기능 엘리먼트들의 순서 및 배열은 다양한 실시예들에 따라 변경될 수 있다. 또한, 이와 반대로 특별히 기술되지 않는 한, 특정된 값 범위들, 이용되는 최대 및 최소 값들, 또는 다른 특정 사양들(이를 테면, 플래시 메모리 기술 유형들; 및 레지스터들 및 버퍼들에서 엔트리들 또는 스테이지들의 수)은 단지 기술된 실시예들에 관한 것이며, 구현 기술에서의 개선들 및 변화들을 추적하는 것으로 예상되고, 한정하는 것으로 해석되어서는 안 된다.
기술분야에서 알려진 기능적으로 동등한 기술들은, 다양한 컴포넌트들, 서브-시스템들, 동작들, 함수들, 루틴들, 서브-루틴들, 인-라인 루틴들, 프로시저들, 매크로들, 또는 이들의 부분들을 구현하기 위해 기술되는 것들 대신에 이용가능하다. 실시예들의 많은 기능적인 양상들은, 더 신속한 처리(이전에는 하드웨어에서의 기능들을 소프트웨어로 마이그레이션하는 것을 용이하게 함) 및 더 높은 집적도(이전에는 소프트웨어에서의 기능들을 하드웨어로 마이그레이션하는 것을 용이하게 함)의 기술 트렌드들 및 실시예 의존 설계 제약들의 함수로서, 하드웨어(즉, 일반적으로 전용화된 회로) 또는 소프트웨어(즉, 프로그램된 제어기 또는 프로세서의 몇몇 방식을 통해)로 선택적으로 실현가능하다는 것이 또한 이해된다. 다양한 실시예들에서의 특정 변형예들은 다음을 포함하지만, 이에 한정되지 않는다: 파티셔닝에 있어서의 차이들; 상이한 폼 팩터들 및 구성들; 상이한 운영 체제들 및 다른 시스템 소프트웨어의 이용; 상이한 인터페이스 표준들, 네트워크 프로토콜들, 또는 통신 링크들의 이용; 및 특정 애플리케이션의 고유한 엔지니어링 및 비즈니스 제약들에 따른, 본원에서 기술되는 개념들을 구현할 때 예상되는 다른 변형들.
실시예들은, 기술된 실시예들의 많은 양상들의 최소 구현을 위해 요구되는 것을 상당히 넘어서는 세부사항 및 환경 컨텍스트와 함께 기술되었다. 당업자들은, 몇몇 실시예들이 나머지 엘리먼트들 간의 기본적인 협력을 변경함이 없이, 개시된 컴포넌트들 또는 특징들을 생략한다는 점을 인식할 것이다. 따라서, 개시된 세부사항들 중 많은 부분은 기술된 실시예들의 다양한 양상들을 구현하기 위해 요구되지 않는다는 점이 이해된다. 나머지 엘리먼트들이 종래 기술과 구별될 수 있는 정도로, 생략되는 컴포넌트들 및 특징들은 본원에서 기술되는 개념들 상에서 한정되지 않는다.
설계상의 모든 이러한 변형들은, 기술된 실시예들에 의해 전달되는 교시들에 걸쳐, 실질적이지 않은 변경들이다. 또한, 본원에서 기술된 실시예들은 다른 컴퓨팅 및 네트워킹 애플리케이션들에 광범위한 적용가능성을 갖고, 기술된 실시예들의 특정 애플리케이션 또는 산업으로 한정되지 않는다는 점이 또한 이해된다. 따라서, 본 발명은 허여된 특허의 청구범위의 범주 내에 포함되는 모든 가능한 수정들 및 변형들을 포함하는 것으로 해석된다.
도면부호 엘리먼트 명칭
100 호스트
101 커플링(coupling)
110 호스트 가시 스토리지
110.A 스토리지 디바이스
110.N 스토리지 디바이스
111.A 커플링
111.N 커플링
120 호스트 비-가시 스토리지
120.A 스토리지 디바이스
120.N 스토리지 디바이스
121.A 커플링
121.N 커플링
130 호스트 가시 스토리지
130.A 스토리지 디바이스
130.N 스토리지 디바이스
131.A 커플링
131.N 커플링
140 호스트 비-가시 스토리지
140.A 스토리지 디바이스
140.N 스토리지 디바이스
141.A 커플링
141.N 커플링
151 점선 화살표
152 점선 화살표
153 점선 화살표
154 점선 화살표
180 호스트-스토리지 디바이스 커플링
181 디바이스-스토리지 디바이스 커플링
190A 애드-인 카드
190B 애드-인 카드
201 시작
202 호스트로부터 요청 수락
203 로컬?
203N 아니요
203Y 예
204 로컬 LBA들로 Xlate
205 로컬로 처리
206 호스트에 상태 제공
207 2차(들)로 포워딩
207R 서브-요청
208 완료 대기
209A 2차(들)로부터 서브-상태 수락
209 1차 동작들
211 1차로부터 서브-요청 수락
212 로컬 LBA들로 Xlate
213 로컬로 처리
214 1차에 서브-상태 제공
214S 서브-상태
219 2차 동작들
299 종료
310 호스트 어드레스 공간
311 호스트 LBA 범위 1
312 호스트 LBA 범위 2
313 호스트 LBA 범위 3
314 호스트 LBA 범위 4
315 호스트 LBA 범위 5
320 1차 어드레스 공간
321 1차 LBA 범위 1
322 1차 LBA 범위 2
323 1차 LBA 범위 3
330 2차 어드레스 공간
331A 2차 A LBA 범위 1
331B 2차 B LBA 범위 1
332A 2차 A LBA 범위 2
332B 2차 B LBA 범위 2
333A 2차 A LBA 범위 3
401 PCIe 인터페이스
402 LBA, 길이 Xlate
403 스토리지 인터페이스
404 대용량 스토리지
404F 플래시
404M 자기
404O 광학
405 서브-요청 생성 및 서브-상태 누적
501 서브-요청 수락 및 서브-상태 생성

Claims (24)

  1. 시스템으로서,
    호스트-인터페이스 프로토콜을 통해 호스트에 인터페이싱하고, 피어-투-피어 프로토콜을 통해 2차 에이전트에 인터페이싱하도록 인에이블된 호스트-인터페이스 로직 ― 상기 호스트에 인터페이싱하는 것은 서브미션 큐 내의 엔트리로부터 스토리지 요청을 판독하는 것을 포함하고, 상기 2차 에이전트에 인터페이싱하는 것은 상기 2차 에이전트에 스토리지 서브-요청을 포워딩하는 것을 포함하며, 상기 호스트에 인터페이싱 하는 것 및 상기 2차 에이전트에 인터페이싱 하는 것은 동일한 물리적 채널을 통해 이루어짐 ―;
    상기 스토리지 요청 내에 구성된 어드레스 정보에 적어도 부분적으로 기초하여 상기 스토리지 서브-요청을 결정하도록 인에이블된 서브-요청 생성 로직; 및
    전체 스토리지 용량을 상기 호스트에 역으로 보고하도록 인에이블된 스토리지 용량 보고 로직 ― 상기 전체 스토리지 용량은 상기 2차 에이전트의 스토리지 용량에 적어도 부분적으로 기초함 ― 을 포함하는,
    시스템.
  2. 제 1 항에 있어서,
    상기 물리적 채널은 PCI 익스프레스(Peripheral Component Interconnect express) 채널 및 인피니밴드 채널 중 적어도 하나와 호환가능한,
    시스템.
  3. 제 1 항에 있어서,
    상기 호스트, 상기 2차 에이전트 및 상기 호스트를 상기 호스트-인터페이스 로직 및/또는 상기 2차 에이전트에 커플링하는 스위치 중 하나 또는 그 초과를 더 포함하는,
    시스템.
  4. 제 1 항에 있어서,
    스토리지 인터페이스 로직 및 대용량(mass) 스토리지를 더 포함하고, 상기 스토리지 인터페이스 로직은 상기 대용량 스토리지에 인터페이싱하도록 인에이블되고, 상기 전체 스토리지 용량은 추가적으로 상기 대용량 스토리지의 스토리지 용량에 따르는,
    시스템.
  5. 제 1 항에 있어서,
    상기 호스트에 인터페이싱하는 것은 완료 큐 내의 엔트리에 전체 상태를 기록하는 것을 더 포함하고, 상기 2차 에이전트에 인터페이싱하는 것은, 상기 전체 상태를 상기 완료 큐에 기록하는 것을 통해서, 상기 전체 상태의 적어도 일부로서 상기 2차 에이전트로부터 상기 호스트로 서브-상태를 포워딩하는 것을 더 포함하며, 상기 시스템은 상기 서브-상태에 적어도 부분적으로 기초하여 상기 전체 상태를 결정하도록 인에이블되는 서브-상태 누적 로직을 더 포함하는,
    시스템.
  6. 제 1 항에 있어서,
    상기 시스템은 고체-상태 디스크(SSD)에 구성되는,
    시스템.
  7. 방법으로서,
    호스트-인터페이스 로직을 통해, 호스트-인터페이스 프로토콜을 통해 호스트에 인터페이싱하는 단계 및 피어-투-피어 프로토콜을 통해 2차 에이전트에 인터페이싱하는 단계 ― 상기 호스트에 인터페이싱하는 단계는 서브미션 큐 내의 엔트리로부터 스토리지 요청을 판독하는 단계를 포함하고, 상기 2차 에이전트와 인터페이싱하는 단계는 상기 2차 에이전트에 스토리지 서브-요청을 포워딩하는 단계를 포함하며, 상기 호스트에 인터페이싱 하는 단계 및 상기 2차 에이전트에 인터페이싱하는 단계는 동일한 물리적 채널을 통해 이루어짐 ―;
    서브-요청 생성 로직을 통해, 상기 스토리지 요청 내에 구성된 어드레스 정보에 적어도 부분적으로 기초하여 상기 스토리지 서브-요청을 결정하는 단계; 및
    스토리지 용량 보고 로직을 통해, 전체 스토리지 용량을 상기 호스트에 역으로 보고하는 단계 ― 상기 전체 스토리지 용량은 상기 2차 에이전트의 스토리지 용량에 적어도 부분적으로 기초함 ― 를 포함하는,
    방법.
  8. 제 7 항에 있어서,
    상기 물리적 채널은 PCI 익스프레스(Peripheral Component Interconnect express) 채널 및 인피니밴드 채널 중 적어도 하나와 호환가능한,
    방법.
  9. 제 7 항에 있어서,
    스위치가 상기 호스트를 상기 호스트-인터페이스 로직 및/또는 상기 2차 에이전트에 커플링하는,
    방법.
  10. 제 7 항에 있어서,
    스토리지 인터페이스 로직을 통해 대용량 스토리지에 인터페이싱하는 단계를 더 포함하고, 상기 전체 스토리지 용량은 추가적으로 상기 대용량 스토리지의 스토리지 용량에 따르는,
    방법.
  11. 제 7 항에 있어서,
    상기 호스트에 인터페이싱하는 단계는 완료 큐 내의 엔트리에 전체 상태를 기록하는 단계를 더 포함하고, 상기 2차 에이전트에 인터페이싱하는 단계는, 상기 전체 상태를 상기 완료 큐에 기록하는 것을 통해서, 상기 전체 상태의 적어도 일부로서 상기 2차 에이전트로부터 상기 호스트로 서브-상태를 포워딩하는 단계를 더 포함하며, 상기 방법은 서브-상태 누적 로직을 통해 상기 서브-상태에 적어도 부분적으로 기초하여 상기 전체 상태를 결정하는 단계를 더 포함하는,
    방법.
  12. 제 7 항에 있어서,
    상기 호스트-인터페이스 로직, 상기 서브-요청 생성 로직 및 상기 스토리지 용량 보고 로직은 고체-상태 디스크(SSD)에 구성되는,
    방법.
  13. 프로세싱 디바이스에 의해 실행될 때 상기 프로세싱 디바이스로 하여금 절차들을 수행하게 하는 명령들의 세트가 저장되는 컴퓨터 판독 가능 저장 매체로서,
    상기 절차들은,
    호스트-인터페이스 로직을 통해, 호스트-인터페이스 프로토콜을 통해 호스트에 인터페이싱하고, 피어-투-피어 프로토콜을 통해 2차 에이전트에 인터페이싱하는 것 ― 상기 호스트에 인터페이싱하는 것은 서브미션 큐 내의 엔트리로부터 스토리지 요청을 판독하는 것을 포함하고, 상기 2차 에이전트에 인터페이싱하는 것은 상기 2차 에이전트에 스토리지 서브-요청을 포워딩하는 것을 포함하며, 상기 호스트에 인터페이싱 하는 것 및 상기 2차 에이전트에 인터페이싱 하는 것은 동일한 물리적 채널을 통해 이루어짐 ―;
    서브-요청 생성 로직을 통해 상기 스토리지 요청 내에 구성된 어드레스 정보에 적어도 부분적으로 기초하여 상기 스토리지 서브-요청을 결정하는 것; 및
    스토리지 용량 보고 로직을 통해 전체 스토리지 용량을 상기 호스트에 역으로 보고하는 것 ― 상기 전체 스토리지 용량은 상기 2차 에이전트의 스토리지 용량에 적어도 부분적으로 기초함 ― 을 포함하는,
    컴퓨터 판독 가능 저장 매체.
  14. 제 13 항에 있어서,
    상기 물리적 채널은 PCI 익스프레스(Peripheral Component Interconnect express) 채널 및 인피니밴드 채널 중 적어도 하나와 호환가능한,
    컴퓨터 판독 가능 저장 매체.
  15. 제 13 항에 있어서,
    스위치가 상기 호스트를 상기 호스트-인터페이스 로직 및/또는 상기 2차 에이전트에 커플링하는,
    컴퓨터 판독 가능 저장 매체.
  16. 제 13 항에 있어서,
    상기 절차들은 스토리지 인터페이스 로직을 통해 대용량 스토리지에 인터페이싱하는 것을 더 포함하고, 상기 전체 스토리지 용량은 추가적으로 상기 대용량 스토리지의 스토리지 용량에 따르는,
    컴퓨터 판독 가능 저장 매체.
  17. 제 13 항에 있어서,
    상기 호스트에 인터페이싱하는 것은 완료 큐 내의 엔트리에 전체 상태를 기록하는 것을 더 포함하고, 상기 2차 에이전트에 인터페이싱하는 것은, 상기 전체 상태를 상기 완료 큐에 기록하는 것을 통해서, 상기 전체 상태의 적어도 일부로서 상기 2차 에이전트로부터 상기 호스트로 서브-상태를 포워딩하는 것을 더 포함하며, 상기 절차들은 서브-상태 누적 로직을 통해 상기 서브-상태에 적어도 부분적으로 기초하여 상기 전체 상태를 결정하는 것을 더 포함하는,
    컴퓨터 판독 가능 저장 매체.
  18. 제 13 항에 있어서,
    상기 호스트-인터페이스 로직, 상기 서브-요청 생성 로직 및 상기 스토리지 용량 보고 로직은 고체-상태 디스크(SSD)에 구성되는,
    컴퓨터 판독 가능 저장 매체.
  19. 시스템으로서,
    호스트-인터페이스 프로토콜을 통해 호스트에 인터페이싱하기 위한 수단 및 피어-투-피어 프로토콜을 통해 2차 에이전트에 인터페이싱하기 위한 수단 ― 상기 호스트에 인터페이싱하기 위한 수단은 서브미션 큐 내의 엔트리로부터 스토리지 요청을 판독하기 위한 수단을 포함하고, 상기 2차 에이전트에 인터페이싱하기 위한 수단은 상기 2차 에이전트에 스토리지 서브-요청을 포워딩하기 위한 수단을 포함하며, 상기 호스트에 인터페이싱 하는 것 및 상기 2차 에이전트에 인터페이싱 하는 것은 동일한 물리적 채널을 통해 이루어짐 ―;
    상기 스토리지 요청 내에 구성된 어드레스 정보에 적어도 부분적으로 기초하여 상기 스토리지 서브-요청을 결정하기 위한 수단; 및
    전체 스토리지 용량을 상기 호스트에 역으로 보고하기 위한 수단 ― 상기 전체 스토리지 용량은 상기 2차 에이전트의 스토리지 용량에 적어도 부분적으로 기초함 ― 을 포함하는,
    시스템.
  20. 제 19 항에 있어서,
    상기 물리적 채널은 PCI 익스프레스(Peripheral Component Interconnect express) 채널 및 인피니밴드 채널 중 적어도 하나와 호환가능한,
    시스템.
  21. 제 19 항에 있어서,
    스위치가 상기 호스트를 상기 호스트에 인터페이싱하기 위한 수단 및/또는 상기 2차 에이전트에 커플링하는,
    시스템.
  22. 제 19 항에 있어서,
    대용량 스토리지에 인터페이싱하기 위한 수단을 더 포함하고, 상기 전체 스토리지 용량은 추가적으로 상기 대용량 스토리지의 스토리지 용량에 따르는,
    시스템.
  23. 제 19 항에 있어서,
    상기 호스트에 인터페이싱하기 위한 수단은 완료 큐 내의 엔트리에 전체 상태를 기록하기 위한 수단을 더 포함하고, 상기 2차 에이전트에 인터페이싱하기 위한 수단은, 상기 전체 상태를 상기 완료 큐에 기록하는 것을 통해서, 상기 전체 상태의 적어도 일부로서 상기 2차 에이전트로부터 상기 호스트로 서브-상태를 포워딩하기 위한 수단을 더 포함하며, 상기 시스템은 상기 서브-상태에 적어도 부분적으로 기초하여 상기 전체 상태를 결정하기 위한 수단을 더 포함하는,
    시스템.
  24. 제 19 항에 있어서,
    상기 시스템은 고체-상태 디스크(SSD)에 구성되는,
    시스템.
KR1020147019871A 2010-06-18 2011-06-17 스케일러블 스토리지 디바이스들 KR101466592B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US35644310P 2010-06-18 2010-06-18
US61/356,443 2010-06-18
US201161497525P 2011-06-16 2011-06-16
US61/497,525 2011-06-16
PCT/US2011/040996 WO2011160094A2 (en) 2010-06-18 2011-06-17 Scalable storage devices

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020137001262A Division KR101491484B1 (ko) 2010-06-18 2011-06-17 스케일러블 스토리지 디바이스들

Publications (2)

Publication Number Publication Date
KR20140107487A KR20140107487A (ko) 2014-09-04
KR101466592B1 true KR101466592B1 (ko) 2014-12-01

Family

ID=45348918

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020137001262A KR101491484B1 (ko) 2010-06-18 2011-06-17 스케일러블 스토리지 디바이스들
KR1020147019871A KR101466592B1 (ko) 2010-06-18 2011-06-17 스케일러블 스토리지 디바이스들

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020137001262A KR101491484B1 (ko) 2010-06-18 2011-06-17 스케일러블 스토리지 디바이스들

Country Status (7)

Country Link
US (3) US8677068B2 (ko)
EP (1) EP2583184A4 (ko)
JP (1) JP5957647B2 (ko)
KR (2) KR101491484B1 (ko)
CN (2) CN103080917B (ko)
TW (1) TWI475379B (ko)
WO (1) WO2011160094A2 (ko)

Families Citing this family (96)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8671265B2 (en) 2010-03-05 2014-03-11 Solidfire, Inc. Distributed data storage system providing de-duplication of data using block identifiers
US9838269B2 (en) 2011-12-27 2017-12-05 Netapp, Inc. Proportional quality of service based on client usage and system metrics
US9054992B2 (en) 2011-12-27 2015-06-09 Solidfire, Inc. Quality of service policy sets
CN104126181A (zh) * 2011-12-30 2014-10-29 英特尔公司 作为随机存取存储器的非易失性半导体存储装置的***存取的薄变换
US9875001B2 (en) * 2012-08-26 2018-01-23 Avaya Inc. Network device management and visualization
US9501437B2 (en) * 2012-11-15 2016-11-22 Empire Technology Development Llc Scalable storage system having multiple storage channels
US9122515B2 (en) 2012-12-19 2015-09-01 Dell Products L.P. Completion notification for a storage device
CN103902472B (zh) * 2012-12-28 2018-04-20 华为技术有限公司 基于内存芯片互连的内存访问处理方法、内存芯片及***
US9720627B2 (en) * 2013-01-17 2017-08-01 Western Digital Technologies, Inc. Data management for a data storage device
TWI614670B (zh) * 2013-02-12 2018-02-11 Lsi公司 連鎖且可擴展之儲存系統及在一連鎖且可擴展之儲存系統中存取資料之方法
US9348537B2 (en) * 2013-09-10 2016-05-24 Qualcomm Incorporated Ascertaining command completion in flash memories
JP2016539397A (ja) * 2013-11-27 2016-12-15 インテル・コーポレーション 保守可能な不揮発性メモリモジュールを有効化するサーバプラットフォームアーキテクチャのための方法および装置
US10067829B2 (en) 2013-12-13 2018-09-04 Intel Corporation Managing redundancy information in a non-volatile memory
US9430599B2 (en) * 2014-02-18 2016-08-30 Optima Design Automation Ltd Determining soft error infliction probability
US20150244795A1 (en) 2014-02-21 2015-08-27 Solidfire, Inc. Data syncing in a distributed system
JP6141511B2 (ja) * 2014-02-27 2017-06-07 三菱電機株式会社 データ記憶装置
KR102318478B1 (ko) * 2014-04-21 2021-10-27 삼성전자주식회사 스토리지 컨트롤러, 스토리지 시스템 및 상기 스토리지 컨트롤러의 동작 방법
KR101512181B1 (ko) * 2014-04-23 2015-04-16 주식회사 백프로 내부 저장모듈을 구비한 sas 데이터 컨버팅 시스템
US8868825B1 (en) * 2014-07-02 2014-10-21 Pure Storage, Inc. Nonrepeating identifiers in an address space of a non-volatile solid-state storage
US9652415B2 (en) 2014-07-09 2017-05-16 Sandisk Technologies Llc Atomic non-volatile memory data transfer
KR101459750B1 (ko) * 2014-07-15 2014-11-13 주식회사 백프로 안정성을 개선한 sas 데이터 컨버팅 시스템
US9904621B2 (en) 2014-07-15 2018-02-27 Sandisk Technologies Llc Methods and systems for flash buffer sizing
US9645744B2 (en) 2014-07-22 2017-05-09 Sandisk Technologies Llc Suspending and resuming non-volatile memory operations
KR102173089B1 (ko) 2014-08-08 2020-11-04 삼성전자주식회사 인터페이스 회로 및 그것의 패킷 전송 방법
JP2016057876A (ja) * 2014-09-10 2016-04-21 富士通株式会社 情報処理装置、入出力制御プログラム、及び入出力制御方法
US9558125B2 (en) 2014-10-27 2017-01-31 Sandisk Technologies Llc Processing of un-map commands to enhance performance and endurance of a storage device
US9952978B2 (en) 2014-10-27 2018-04-24 Sandisk Technologies, Llc Method for improving mixed random performance in low queue depth workloads
US9753649B2 (en) 2014-10-27 2017-09-05 Sandisk Technologies Llc Tracking intermix of writes and un-map commands across power cycles
US9824007B2 (en) 2014-11-21 2017-11-21 Sandisk Technologies Llc Data integrity enhancement to protect against returning old versions of data
US9817752B2 (en) 2014-11-21 2017-11-14 Sandisk Technologies Llc Data integrity enhancement to protect against returning old versions of data
CN104486384A (zh) * 2014-11-28 2015-04-01 华为技术有限公司 一种存储***及交换扩展装置
US20160202924A1 (en) * 2015-01-13 2016-07-14 Telefonaktiebolaget L M Ericsson (Publ) Diagonal organization of memory blocks in a circular organization of memories
US10912428B2 (en) * 2015-02-12 2021-02-09 Visibelle Derma Institute, Inc. Tip for skin cleansing device
US9647697B2 (en) 2015-03-16 2017-05-09 Sandisk Technologies Llc Method and system for determining soft information offsets
US9772796B2 (en) * 2015-04-09 2017-09-26 Sandisk Technologies Llc Multi-package segmented data transfer protocol for sending sub-request to multiple memory portions of solid-state drive using a single relative memory address
US9753653B2 (en) 2015-04-14 2017-09-05 Sandisk Technologies Llc High-priority NAND operations management
US9864545B2 (en) 2015-04-14 2018-01-09 Sandisk Technologies Llc Open erase block read automation
US10372529B2 (en) 2015-04-20 2019-08-06 Sandisk Technologies Llc Iterative soft information correction and decoding
US9778878B2 (en) 2015-04-22 2017-10-03 Sandisk Technologies Llc Method and system for limiting write command execution
US10223000B2 (en) * 2015-05-21 2019-03-05 International Business Machines Corporation Data compression for grid-oriented storage systems
US9870149B2 (en) 2015-07-08 2018-01-16 Sandisk Technologies Llc Scheduling operations in non-volatile memory devices using preference values
US9715939B2 (en) 2015-08-10 2017-07-25 Sandisk Technologies Llc Low read data storage management
US10228990B2 (en) 2015-11-12 2019-03-12 Sandisk Technologies Llc Variable-term error metrics adjustment
US10108377B2 (en) 2015-11-13 2018-10-23 Western Digital Technologies, Inc. Storage processing unit arrays and methods of use
TWI597953B (zh) * 2015-11-25 2017-09-01 財團法人工業技術研究院 具故障轉移能力的快速周邊元件互連網路系統與操作方法
US10126970B2 (en) 2015-12-11 2018-11-13 Sandisk Technologies Llc Paired metablocks in non-volatile storage device
US9837146B2 (en) 2016-01-08 2017-12-05 Sandisk Technologies Llc Memory system temperature management
US10732856B2 (en) 2016-03-03 2020-08-04 Sandisk Technologies Llc Erase health metric to rank memory portions
US10929022B2 (en) 2016-04-25 2021-02-23 Netapp. Inc. Space savings reporting for storage system supporting snapshot and clones
CN107852344B (zh) * 2016-04-29 2021-03-30 华为技术有限公司 存储网元发现方法及装置
US20170329640A1 (en) * 2016-05-10 2017-11-16 HGST Netherlands B.V. Systems and methods for designating storage processing units as communication hubs and allocating processing tasks in a storage processor array
US10481830B2 (en) 2016-07-25 2019-11-19 Sandisk Technologies Llc Selectively throttling host reads for read disturbs in non-volatile memory system
US10642763B2 (en) 2016-09-20 2020-05-05 Netapp, Inc. Quality of service policy sets
KR102631351B1 (ko) * 2016-10-07 2024-01-31 삼성전자주식회사 피어-투 피어 통신을 수행할 수 있는 저장 장치와 이를 포함하는 데이터 저장 시스템
US11216194B2 (en) 2016-10-19 2022-01-04 Aliane Technologies Corporation Memory management system and method thereof
US20180107392A1 (en) * 2016-10-19 2018-04-19 Aliane Technologies Co., Memory management system and method thereof
US10628196B2 (en) * 2016-11-12 2020-04-21 Vmware, Inc. Distributed iSCSI target for distributed hyper-converged storage
CN108614746A (zh) * 2016-12-09 2018-10-02 ***通信有限公司研究院 一种数据处理方法及其***、服务器
US10255134B2 (en) 2017-01-20 2019-04-09 Samsung Electronics Co., Ltd. Control plane method and apparatus for providing erasure code protection across multiple storage devices
US10860508B2 (en) * 2017-05-25 2020-12-08 Western Digital Technologies, Inc. Offloaded disaggregated storage architecture
US10430333B2 (en) 2017-09-29 2019-10-01 Intel Corporation Storage system with interconnected solid state disks
US10608951B2 (en) * 2017-09-30 2020-03-31 Oracle International Corporation Live resegmenting of partitions in distributed stream-processing platforms
DE102018125297A1 (de) 2017-11-17 2019-05-23 Samsung Electronics Co., Ltd. Speichereinrichtung, die Peer-to-Peer-Kommunikation mit externer Einrichtung ohne Eingriff eines Host durchführt
US10419265B2 (en) 2017-11-29 2019-09-17 Bank Of America Corporation Request processing system using a combining engine
KR102446733B1 (ko) 2017-11-30 2022-09-23 삼성전자주식회사 스토리지 장치 및 스토리지 장치를 포함하는 전자 장치
CN108365926A (zh) * 2018-01-17 2018-08-03 北京和利时智能技术有限公司 一种新型冗余***
US10740181B2 (en) 2018-03-06 2020-08-11 Western Digital Technologies, Inc. Failed storage device rebuild method
US10860446B2 (en) 2018-04-26 2020-12-08 Western Digital Technologiies, Inc. Failed storage device rebuild using dynamically selected locations in overprovisioned space
US10929319B2 (en) * 2018-05-11 2021-02-23 Seagate Technology Llc Data storage device with front end bus
KR102570581B1 (ko) 2018-06-07 2023-08-24 삼성전자 주식회사 스토리지 장치와 재구성 가능 로직 칩을 포함하는 스토리지 장치 세트 및 이를 포함하는 스토리지 시스템
JP7191967B2 (ja) 2018-06-30 2022-12-19 華為技術有限公司 NVMeベースのデータ読み取り方法、装置及びシステム
US10409511B1 (en) * 2018-06-30 2019-09-10 Western Digital Technologies, Inc. Multi-device storage system with distributed read/write processing
EP3792743A4 (en) 2018-06-30 2021-06-30 Huawei Technologies Co., Ltd. NVME-BASED DATA WRITING PROCESS, DEVICE AND SYSTEM
US10725941B2 (en) 2018-06-30 2020-07-28 Western Digital Technologies, Inc. Multi-device storage system with hosted services on peer storage devices
US10824526B2 (en) 2018-08-03 2020-11-03 Western Digital Technologies, Inc. Using failed storage device in peer-to-peer storage system to perform storage-centric task
US10592144B2 (en) 2018-08-03 2020-03-17 Western Digital Technologies, Inc. Storage system fabric with multichannel compute complex
US10649843B2 (en) * 2018-08-03 2020-05-12 Western Digital Technologies, Inc. Storage systems with peer data scrub
US10901848B2 (en) 2018-08-03 2021-01-26 Western Digital Technologies, Inc. Storage systems with peer data recovery
US10831603B2 (en) 2018-08-03 2020-11-10 Western Digital Technologies, Inc. Rebuild assist using failed storage device
TWI710909B (zh) * 2018-09-28 2020-11-21 普安科技股份有限公司 具多平台相容性模組之資料儲存子系統之儲存系統架構及其方法
US11604712B2 (en) 2018-11-16 2023-03-14 Vmware, Inc. Active-active architecture for distributed ISCSI target in hyper-converged storage
US11182258B2 (en) 2019-01-04 2021-11-23 Western Digital Technologies, Inc. Data rebuild using dynamic peer work allocation
JP6942163B2 (ja) 2019-08-06 2021-09-29 株式会社日立製作所 ドライブボックス、ストレージシステム及びデータ転送方法
US20210042255A1 (en) * 2019-08-09 2021-02-11 Sony Interactive Entertainment LLC Methods for Using High-Speed Data Communication Fabric to Enable Cross-System Command Buffer Writing for Data Retrieval in Cloud Gaming
KR20210087628A (ko) 2020-01-03 2021-07-13 삼성전자주식회사 네트워크 기반 스토리지 장치의 구동 방법 및 이를 이용한 스토리지 시스템의 구동 방법
US11500667B2 (en) 2020-01-22 2022-11-15 Vmware, Inc. Object-based approaches to support internet small computer system interface (ISCSI) services in distributed storage system
US11507409B2 (en) 2020-01-22 2022-11-22 Vmware, Inc. Object-based load balancing approaches in distributed storage system
US11316917B2 (en) * 2020-03-04 2022-04-26 Samsung Electronics Co., Ltd. Methods and apparatus for peer-to-peer data channels for storage devices
US11734131B2 (en) * 2020-04-09 2023-08-22 Micron Technology, Inc. Memory device having redundant media management capabilities
US11372785B2 (en) * 2020-05-06 2022-06-28 Microsoft Technology Licensing, Llc Local non-volatile memory express virtualization device
US11468169B1 (en) 2021-04-28 2022-10-11 Dell Products L.P. Dark storage support for as-a-service model
US20230110067A1 (en) * 2021-10-07 2023-04-13 Samsung Electronics Co., Ltd. Systems, methods, and devices for near storage elasticity
US11734207B1 (en) 2022-02-02 2023-08-22 Western Digital Technologies, Inc. Dynamic port allocation in PCIe bifurcation system
US11983428B2 (en) 2022-06-07 2024-05-14 Western Digital Technologies, Inc. Data migration via data storage device peer channel
US20230418518A1 (en) * 2022-06-27 2023-12-28 Western Digital Technologies, Inc. Peer RAID Control Among Peer Data Storage Devices
CN117687889B (zh) * 2024-01-31 2024-04-05 苏州元脑智能科技有限公司 一种内存扩展设备的性能测试装置及方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6304980B1 (en) 1996-03-13 2001-10-16 International Business Machines Corporation Peer-to-peer backup system with failure-triggered device switching honoring reservation of primary device
US6654831B1 (en) 2000-03-07 2003-11-25 International Business Machine Corporation Using multiple controllers together to create data spans

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6442709B1 (en) 1999-02-09 2002-08-27 International Business Machines Corporation System and method for simulating disaster situations on peer to peer remote copy machines
US20040103163A1 (en) * 2002-11-27 2004-05-27 Hao-Hsing Lin Serial bus disk extender and portable storage device
WO2004090742A1 (en) * 2003-04-03 2004-10-21 Commvault Systems, Inc. System and method for dynamically sharing storage volumes in a computer network
US7574529B2 (en) * 2004-06-22 2009-08-11 International Business Machines Corporation Addressing logical subsystems in a data storage system
TWI274353B (en) * 2005-02-21 2007-02-21 Transcend Information Inc Flash disk with expansion capacity, stackable mobile storage device and control circuit thereof
JP4990505B2 (ja) * 2005-04-04 2012-08-01 株式会社日立製作所 記憶制御装置及びストレージシステム
US7571168B2 (en) * 2005-07-25 2009-08-04 Parascale, Inc. Asynchronous file replication and migration in a storage network
EP1934751B1 (en) * 2005-08-25 2017-11-08 Lattice Semiconductor Corporation Smart scalable storage switch architecture
TWI286690B (en) * 2005-08-29 2007-09-11 Via Tech Inc Expanded structure of peripheral storage device having a connector port multiplier
TWI285304B (en) * 2005-10-20 2007-08-11 Quanta Comp Inc Extendable storage apparatus for blade server system
US7685227B2 (en) * 2006-11-10 2010-03-23 Gerber Robert H Message forwarding backup manager in a distributed server system
JP2009175824A (ja) * 2008-01-22 2009-08-06 Hitachi Ltd メインフレーム用記憶制御装置及びメインフレーム用ボリュームの仮想化方法
US8090907B2 (en) 2008-07-09 2012-01-03 International Business Machines Corporation Method for migration of synchronous remote copy service to a virtualization appliance
US8234470B2 (en) * 2009-08-25 2012-07-31 International Business Machines Corporation Data repository selection within a storage environment

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6304980B1 (en) 1996-03-13 2001-10-16 International Business Machines Corporation Peer-to-peer backup system with failure-triggered device switching honoring reservation of primary device
US6654831B1 (en) 2000-03-07 2003-11-25 International Business Machine Corporation Using multiple controllers together to create data spans

Also Published As

Publication number Publication date
US20130159622A1 (en) 2013-06-20
US9116624B2 (en) 2015-08-25
US20130086336A1 (en) 2013-04-04
US8677068B2 (en) 2014-03-18
CN104166441B (zh) 2018-05-11
KR101491484B1 (ko) 2015-02-10
CN103080917B (zh) 2014-08-20
CN103080917A (zh) 2013-05-01
JP5957647B2 (ja) 2016-07-27
WO2011160094A3 (en) 2012-04-26
US20140258598A1 (en) 2014-09-11
EP2583184A2 (en) 2013-04-24
KR20130055632A (ko) 2013-05-28
EP2583184A4 (en) 2014-07-09
KR20140107487A (ko) 2014-09-04
WO2011160094A2 (en) 2011-12-22
JP2013532339A (ja) 2013-08-15
CN104166441A (zh) 2014-11-26
TWI475379B (zh) 2015-03-01
TW201214105A (en) 2012-04-01

Similar Documents

Publication Publication Date Title
KR101466592B1 (ko) 스케일러블 스토리지 디바이스들
KR101744465B1 (ko) 데이터를 저장하기 위한 방법 및 장치
CN108363670B (zh) 一种数据传输的方法、装置、设备和***
US9740409B2 (en) Virtualized storage systems
US9213500B2 (en) Data processing method and device
CN109791522B (zh) 数据迁移的方法、***及智能网卡
KR20110123541A (ko) 데이터 저장 장치 및 그것의 동작 방법
US20150120993A1 (en) Information processing apparatus, storage device control circuit, and storage device control method
US20230280917A1 (en) Storage system and method of operating the same
US20200334103A1 (en) Storage system, drive housing thereof, and parity calculation method
US11201788B2 (en) Distributed computing system and resource allocation method
US11334483B2 (en) Network fabric storage system
KR102518287B1 (ko) PCIe 인터페이스 장치 및 그 동작 방법
US20240168876A1 (en) Solving submission queue entry overflow using metadata or data pointers
US10705905B2 (en) Software-assisted fine-grained data protection for non-volatile memory storage devices
US20240134799A1 (en) Multiple-instance write cache for a storage system

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20171030

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20181127

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20190918

Year of fee payment: 6