KR102527832B1 - 호스트의 개입 없이 외부 장치와 피어-투-피어 통신을 수행하는 스토리지 장치 - Google Patents

호스트의 개입 없이 외부 장치와 피어-투-피어 통신을 수행하는 스토리지 장치 Download PDF

Info

Publication number
KR102527832B1
KR102527832B1 KR1020180079419A KR20180079419A KR102527832B1 KR 102527832 B1 KR102527832 B1 KR 102527832B1 KR 1020180079419 A KR1020180079419 A KR 1020180079419A KR 20180079419 A KR20180079419 A KR 20180079419A KR 102527832 B1 KR102527832 B1 KR 102527832B1
Authority
KR
South Korea
Prior art keywords
storage device
port
data
storage
interface circuit
Prior art date
Application number
KR1020180079419A
Other languages
English (en)
Other versions
KR20190056951A (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 삼성전자주식회사
Priority to DE102018125297.8A priority Critical patent/DE102018125297A1/de
Priority to US16/170,264 priority patent/US10628364B2/en
Priority to CN201811366495.4A priority patent/CN109799952B/zh
Publication of KR20190056951A publication Critical patent/KR20190056951A/ko
Priority to US16/853,373 priority patent/US11055251B2/en
Priority to US17/343,215 priority patent/US11816055B2/en
Application granted granted Critical
Publication of KR102527832B1 publication Critical patent/KR102527832B1/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/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/0658Controller construction arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • 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
    • 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/0689Disk arrays, e.g. RAID, JBOD
    • 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)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Hardware Redundancy (AREA)
  • Memory System (AREA)

Abstract

본 발명은 FPGA(Field Programmable Gate Array) 보드 및 스토리지 컨트롤러를 포함하는 스토리지 장치를 제공한다. FPGA 보드는 스토리지 장치의 제 1 포트로 연결된다. 스토리지 컨트롤러의 제 1 인터페이스 회로는 FPGA 보드로 연결되고, 스토리지 컨트롤러의 제 2 인터페이스 회로는 스토리지 장치의 제 2 포트로 연결된다. 제 1 포트 및 제 2 포트 중 적어도 하나의 포트는 스토리지 장치 외부의 다른 스토리지 장치로 연결된다. 제 1 포트가 다른 스토리지 장치로 연결되는 경우, FPGA 보드는 호스트의 개입 없이 스토리지 컨트롤러와 다른 스토리지 장치 사이에서 피어-투-피어 방식으로 데이터를 전달하기 위한 경로를 제공한다.

Description

호스트의 개입 없이 외부 장치와 피어-투-피어 통신을 수행하는 스토리지 장치 {STORAGE DEVICE PERFORMING PEER-TO-PEER COMMUNICATION WITH EXTERNAL DEVICE WITHOUT INTERVENTION OF HOST}
본 개시는 전자 장치에 관한 것으로, 좀 더 구체적으로는 데이터를 저장하고 출력하는 스토리지 장치의 구성들 및 동작들에 관한 것이다.
근래 다양한 유형의 전자 장치들이 이용되고 있다. 전자 장치는 그것에 포함되는 전자 회로들의 동작들에 따라 고유의 기능을 수행한다. 전자 장치는 단독으로 동작하면서 고유의 기능을 수행할 수 있다. 몇몇 경우, 전자 장치는 다른 전자 장치와 통신하면서 고유의 기능을 수행할 수 있다.
스토리지 장치는 다양한 전자 장치의 한 예이다. 스토리지 장치는 그것에 포함되는 구성 요소들의 동작들에 따라 데이터를 저장하고 출력할 수 있고, 따라서 사용자에게 스토리지 서비스를 제공할 수 있다. 스토리지 장치는 단독으로 데이터를 관리할 수 있고, 또는 다른 전자 장치와 통신하면서 데이터를 관리할 수 있다.
다양한 정보가 유통되고 데이터의 양이 급격하게 증가함에 따라, 많은 양의 데이터를 관리하기 위해 스토리지 장치의 용량 역시 증가하고 있다. 게다가, 더 많은 양의 데이터를 저장하기 위해, 복수의 스토리지 장치가 단일 전자 시스템의 데이터를 관리하기 위해 함께 채용될 수 있다. 복수의 스토리지 장치는 서로 통신하며 데이터를 저장하고 출력할 수 있고, 더 많은 양의 데이터를 저장하기 위한 용량을 제공할 수 있다.
그러나, 복수의 스토리지 장치에서 관리되는 데이터의 양이 과도하게 증가하고 각 스토리지 장치의 성능이 높아지는 경우, 스토리지 장치들 및 데이터를 관리하는 것에 대한 부하(Load)가 증가할 수 있다. 특히, 호스트 시스템이 스토리지 장치들 및 데이터를 관리하는 것을 전담하는 경우, 호스트 시스템의 작업부하가 심해질 수 있다.
본 개시는 호스트의 개입 없이 다른 스토리지 장치와 피어-투-피어(Peer-to-peer) 통신을 수행하도록 구성되는 스토리지 장치를 제공할 수 있다.
몇몇 실시 예에서, 스토리지 장치는 FPGA(Field Programmable Gate Array) 보드 및 스토리지 컨트롤러를 포함할 수 있다. FPGA 보드는 스토리지 장치의 제 1 포트로 연결될 수 있다. 스토리지 컨트롤러의 제 1 인터페이스 회로는 FPGA 보드로 연결될 수 있고, 스토리지 컨트롤러의 제 2 인터페이스 회로는 스토리지 장치의 제 2 포트로 연결될 수 있다. 제 1 포트 및 제 2 포트 중 적어도 하나의 포트는 스토리지 장치 외부의 다른 스토리지 장치로 연결될 수 있다. 제 1 포트가 다른 스토리지 장치로 연결되는 경우, FPGA 보드는 호스트의 개입 없이 스토리지 컨트롤러와 다른 스토리지 장치 사이에서 피어-투-피어 방식으로 데이터를 전달하기 위한 경로를 제공할 수 있다.
몇몇 실시 예에서, 스토리지 장치는 스토리지 컨트롤러 및 메모리 장치를 포함할 수 있다. 스토리지 컨트롤러의 제 1 인터페이스 회로는 스토리지 장치의 제 1 포트로 연결될 수 있고, 스토리지 컨트롤러의 제 2 인터페이스 회로는 스토리지 장치의 제 2 포트로 연결될 수 있다. 메모리 장치는 스토리지 컨트롤러의 제어에 따라 데이터를 저장하거나 출력할 수 있다. 제 1 인터페이스 회로는 제 1 포트가 스토리지 장치 외부의 다른 장치로 연결되는지 여부 및 제 1 포트로 연결되는 다른 장치의 유형에 기초하여 복수의 동작 모드 중에서 선택되는 동작 모드로 동작할 수 있다. 제 1 포트가 스토리지 장치 외부의 다른 스토리지 장치로 연결되는 경우, 스토리지 컨트롤러는 호스트의 개입 없이 제 1 포트를 통해 다른 스토리지 장치와 피어-투-피어 방식으로 데이터를 교환할 수 있다.
몇몇 실시 예에서, 스토리지 장치는 스토리지 컨트롤러 및 연산 로직 회로를 포함할 수 있다. 스토리지 컨트롤러는 스토리지 장치의 제 1 포트와 스토리지 장치의 제 2 포트 사이에 놓일 수 있다. 연산 로직 회로는 스토리지 컨트롤러 또는 제 2 포트로부터 수신되는 데이터에 기초하여 가공 연산을 수행하여 가공된 데이터를 생성할 수 있다. 제 1 포트가 스토리지 장치 외부의 다른 스토리지 장치로 연결되는 경우, 스토리지 장치는 호스트의 개입 없이 제 1 포트를 통해 다른 스토리지 장치로 가공된 데이터를 출력할 수 있다.
몇몇 실시 예에서, 스토리지 장치는 스토리지 컨트롤러 및 메모리 장치를 포함할 수 있다. 스토리지 컨트롤러는 스토리지 장치의 제 1 포트와 스토리지 장치의 제 2 포트 사이에 놓일 수 있다. 메모리 장치는 스토리지 컨트롤러의 제어에 따라 데이터를 저장하거나 출력할 수 있다. 제 1 포트가 스토리지 장치 외부의 다른 스토리지 장치로 연결되는 경우, 스토리지 장치는 메모리 장치에 저장된 제 1 데이터 및 제 2 포트를 통해 수신되는 제 2 데이터 중 적어도 하나의 데이터에 기초하여 생성되는 제 3 데이터를 호스트의 개입 없이 제 1 포트를 통해 다른 스토리지 장치로 출력할 수 있다.
몇몇 실시 예에서, 스토리지 시스템은 제 1 스토리지 장치 및 제 2 스토리지 장치를 포함할 수 있다. 제 1 스토리지 장치는 제 1 포트 및 제 2 포트를 포함할 수 있고, 제 2 스토리지 장치는 제 3 포트를 포함할 수 있다. 제 2 포트는 제 3 포트로 연결될 수 있고, 제 1 스토리지 장치는 호스트의 개입 없이 제 2 포트 및 제 3 포트를 통해 제 2 스토리지 장치와 통신할 수 있다. 제 1 스토리지 장치는 제 1 포트를 통해 수신되는 제 1 데이터 및 제 1 스토리지 장치에 저장된 제 2 데이터 중 적어도 하나의 데이터에 기초하여 제 2 포트를 통해 제 3 데이터를 출력할 수 있다. 제 2 스토리지 장치는 제 3 포트를 통해 수신되는 제 3 데이터 및 제 2 스토리지 장치에 저장된 제 4 데이터 중 적어도 하나의 데이터에 기초하여 제 5 데이터를 생성할 수 있다. 호스트의 요청에 대응하는 연산 결과는 제 5 데이터에 기초하여 호스트로 제공될 수 있다.
본 개시의 실시 예들에 따르면, 복수의 스토리지 장치는 호스트의 개입 없이 피어-투-피어 통신을 수행할 수 있다. 따라서, 데이터의 양이 증가하고 각 스토리지 장치의 성능이 높아지더라도, 스토리지 장치들 및 데이터를 관리하는 것에 대한 호스트의 부하가 현저하게 경감될 수 있다. 이는 전체 전자 시스템의 설계 비용 및 관리 비용을 감소시킬 수 있다.
도 1은 몇몇 실시 예에 따른 전자 시스템의 예시적인 구성을 보여주는 블록도이다.
도 2는 도 1의 스토리지 장치와 관련되는 예시적인 구현을 보여주는 개념도이다.
도 3 및 도 4는 도 1의 전자 시스템과 관련되는 예시적인 구성들을 보여주는 블록도들이다.
도 5는 도 1의 스토리지 장치들과 관련되는 예시적인 구성을 보여주는 블록도이다.
도 6 내지 도 10은 도 5의 스토리지 장치들과 관련되는 예시적인 동작들을 설명하기 위한 블록도들이다.
도 11 및 도 12는 도 5의 스토리지 장치들과 관련되는 예시적인 구성들을 보여주는 블록도들이다.
도 13 및 도 14는 도 1의 스토리지 장치와 관련되는 예시적인 구성들을 보여주는 블록도들이다.
도 15는 도 1의 스토리지 장치들과 관련되는 예시적인 구성을 보여주는 블록도이다.
도 16 및 도 17은 도 15의 가변 인터페이스 회로의 예시적인 동작들을 설명하는 흐름도들이다.
도 18은 도 1의 스토리지 장치들과 관련되는 예시적인 구성을 보여주는 블록도이다.
도 19는 도 1의 전자 시스템과 관련되는 예시적인 구현을 보여주는 개념도이다.
아래에서, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자들이 본 발명을 용이하게 실시할 수 있도록, 첨부되는 도면들을 참조하여 몇몇 실시 예가 명확하고 상세하게 설명될 것이다.
도 1은 몇몇 실시 예에 따른 전자 시스템(1000)의 예시적인 구성을 보여주는 블록도이다.
전자 시스템(1000)은 메인 프로세서(1101), 워킹 메모리(1200), 스토리지 시스템(1300), 통신 블록(1400), 유저 인터페이스(1500), 및 버스(1600)를 포함할 수 있다. 예로서, 전자 시스템(1000)은 데스크톱 컴퓨터, 랩톱 컴퓨터, 태블릿 컴퓨터, 스마트 폰, 웨어러블(Wearable) 장치, 비디오 게임기(Video Game Console), 워크스테이션, 하나 이상의 서버, 전기 자동차, 가전기기, 의료기기 등과 같은 전자 장치들 중 하나일 수 있다.
메인 프로세서(1101)는 전자 시스템(1000)의 전반적인 동작들을 제어할 수 있다. 예로서, 메인 프로세서(1101)는 하나 이상의 프로세서 코어를 포함하는 범용 프로세서, 전용 프로세서, 또는 어플리케이션 프로세서로 구현될 수 있다.
워킹 메모리(1200)는 전자 시스템(1000)의 동작에 이용되는 데이터를 저장할 수 있다. 예로서, 워킹 메모리(1200)는 메인 프로세서(1101)에 의해 처리된 또는 처리될 데이터를 일시적으로 저장할 수 있다. 예로서, 워킹 메모리(1200)는 SRAM(Static Random Access Memory), DRAM(Dynamic RAM), SDRAM(Synchronous RAM) 등과 같은 휘발성 메모리, 및/또는 PRAM(Phase-change RAM), MRAM(Magneto-resistive RAM), ReRAM(Resistive RAM), FRAM(Ferro-electric RAM) 등과 같은 불휘발성 메모리를 포함할 수 있다.
스토리지 시스템(1300)은 하나 이상의 스토리지 장치를 포함할 수 있다. 예로서, 스토리지 시스템(1300)은 스토리지 장치들(1300a, 1300b, 1300c)을 포함할 수 있다. 도 1은 3개의 스토리지 장치들(1300a, 1300b, 1300c)을 보여주지만, 스토리지 시스템(1300)에 포함되는 스토리지 장치들의 개수는 전자 시스템(1000)의 요구사항(Requirement)에 적합하도록 다양하게 변경 또는 수정될 수 있다.
각 스토리지 장치(1300a, 1300b, 1300c)는 전력 공급에 관계없이 데이터를 저장할 수 있다. 예로서, 각 스토리지 장치(1300a, 1300b, 1300c)는 플래시 메모리, PRAM, MRAM, ReRAM, FRAM 등과 같은 불휘발성 메모리를 포함할 수 있다. 예로서, 각 스토리지 장치(1300a, 1300b, 1300c)는 SSD(Solid State Drive), 카드 스토리지, 임베디드(Embedded) 스토리지 등과 같은 스토리지 매체를 포함할 수 있다.
통신 블록(1400)은 전자 시스템(1000)의 외부 장치/시스템과 통신하기 위해 다양한 무선/유선 통신 규약 중 적어도 하나를 지원할 수 있다. 유저 인터페이스(1500)는 사용자와 전자 시스템(1000) 사이의 통신을 중재하기 위해 다양한 입력/출력 인터페이스를 포함할 수 있다.
버스(1600)는 전자 시스템(1000)의 구성 요소들 사이에서 통신 경로를 제공할 수 있다. 전자 시스템(1000)의 구성 요소들은 버스(1600)의 버스 포맷에 따라 데이터를 교환할 수 있다. 예로서, 버스 포맷은 USB(Universal Serial Bus), SCSI(Small Computer System Interface), PCIe(Peripheral Component Interconnect Express), SATA(Serial Advanced Technology Attachment), SAS(Serial Attached SCSI), NVMe(Nonvolatile Memory Express), UFS(Universal Flash Storage), DDR(Double Data Rate), LPDDR(Low Power DDR) 등의 다양한 인터페이스 규약 중 하나 이상을 포함할 수 있다.
아래에서, PCIe 규약과 관련되는 예시적인 구성들 및 스토리지 장치들(1300a, 1300b, 1300c)과 관련되는 실시 예들이 설명될 것이다. 그러나, 본 개시의 실시 예들은 PCIe 규약 외의 다른 인터페이스 규약과 관련하여 채용되도록 다양하게 변경 또는 수정될 수 있다. 나아가, 본 개시의 실시 예들은 스토리지 장치들(1300a, 1300b, 1300c) 뿐만 아니라, 데이터를 저장하고 출력할 수 있는 어떤 전자 장치(예컨대, 워킹 메모리(1200))에서든 채용될 수 있다. 아래의 설명들은 더 나은 이해를 가능하게 하기 위해 제공되고, 본 발명을 한정하도록 의도되지 않는다.
도 2는 도 1의 스토리지 장치(1300a)와 관련되는 예시적인 구현을 보여주는 개념도이다.
몇몇 실시 예에서, 스토리지 장치(1300a)는 PCB(Printed Circuit Board)(1307a)를 포함할 수 있다. 스토리지 장치(1300a)는 PCB(1307a) 상에 실장 또는 장착되는 하나 이상의 칩 또는 패키지를 포함할 수 있다. 예로서, 메모리 장치들(1310a) 및 스토리지 컨트롤러(1330a)가 PCB(1307a) 상에 실장 또는 장착될 수 있다.
스토리지 컨트롤러(1330a)는 스토리지 장치(1300a)의 전반적인 동작들을 제어하고 관리할 수 있다. 이를 위해, 스토리지 컨트롤러(1330a)는 의도된 동작들을 수행하도록 구성되는 하드웨어 회로(예컨대, 아날로그 회로, 논리 회로 등)를 포함할 수 있다. 추가로 또는 대안적으로, 스토리지 컨트롤러(1330a)는 의도된 동작들을 수행하기 위한 프로그램 코드의 명령어 집합을 실행하도록 구성되는 하나 이상의 프로세서 코어를 포함할 수 있다.
메모리 장치들(1310a)은 하나 이상의 유형의 메모리들을 포함할 수 있다. 메모리 장치들(1310a)은 스토리지 컨트롤러(1330a)의 제어에 따라 데이터를 저장하거나 출력할 수 있다. 예로서, 메모리 장치들(1310a)은 PCB(1307a) 상에 인쇄된 도전성 패턴(Conductive Pattern)들을 통해 스토리지 컨트롤러(1330a)와 통신할 수 있다.
몇몇 실시 예에서, 스토리지 장치(1300a)는 듀얼-포트(Dual-port)를 통해 스토리지 장치(1300a) 외부의 다른 장치와 통신하도록 구성될 수 있다. 예로서, 스토리지 장치(1300a)의 듀얼-포트는 제 1 포트 및 제 2 포트를 포함할 수 있고, 스토리지 장치(1300a)는 제 1 포트 및 제 2 포트를 통해 다른 장치로부터 데이터를 수신하거나 다른 장치로 데이터를 출력할 수 있다. 예로서, 스토리지 장치(1300a)가 SSD인 경우, 스토리지 장치(1300a)는 듀얼-포트 SSD로 불릴 수 있다.
예로서, 스토리지 장치(1300a)는 듀얼-포트에 대응하는 커넥터들(1390a, 1395a)을 포함할 수 있다. 커넥터들(1390a, 1395a)은 도전성 물질로 구현되는 핀들 또는 패턴들(1391a, 1396a)을 포함할 수 있다. 예로서, 커넥터들(1390a, 1395a) 각각은 직접적으로 또는 간접적으로(예컨대, 도선, 케이블 등을 통해) 다른 장치로 연결될 수 있다. 이 경우, 스토리지 장치(1300a)는 핀들 또는 패턴들(1391a, 1396a)을 통해 다른 장치와 데이터를 교환할 수 있다.
예로서, 커넥터(1390a) 및 핀들 또는 패턴들(1391a)은 제 1 포트에 대응할 수 있고, 커넥터(1395a) 및 핀들 또는 패턴들(1396a)은 제 2 포트에 대응할 수 있다. 예로서, 스토리지 컨트롤러(1330a)는 PCB(1307a) 상에 인쇄된 도전성 패턴들을 통해 핀들 또는 패턴들(1391a, 1396a)로 연결될 수 있다. 따라서, 스토리지 컨트롤러(1330a)는 제 1 포트 및 제 2 포트를 통해 데이터를 출력하거나 수신할 수 있다.
제 1 포트 및 제 2 포트는 독립적인 통신을 제공할 수 있다. 예로서, 제 1 포트를 통해 데이터를 출력 또는 수신하는 것은 제 2 포트를 통해 데이터를 출력 또는 수신하는 것과 독립적일 수 있다.
스토리지 장치(1300a)의 구성(예컨대, 메모리 장치들(1310a)의 개수, 메모리 장치들(1310a) 및 스토리지 컨트롤러(1330a)의 배치, 커넥터들(1390a, 1395a)의 위치 및 모양, 핀들 또는 패턴들(1391a, 1396a)의 위치 및 모양 등)은 도 2의 도시와 상이하도록 다양하게 변경 또는 수정될 수 있다. 도 2의 예시적인 구현은 더 나은 이해를 가능하게 하기 위해 제공되고, 본 발명을 한정하도록 의도되지 않는다. 스토리지 장치들(1300b, 1300c)은 스토리지 장치(1300a)와 동일 또는 유사하게 구성될 수 있다.
도 3은 도 1의 전자 시스템(1000)과 관련되는 예시적인 구성을 보여주는 블록도이다.
예로서, 전자 시스템(1000)은 구성(1000a)을 포함할 수 있다. 구성(1000a)은 메인 프로세서(1101), 루트 컴플렉스(Root Complex)(1003), 스위치(1005), 워킹 메모리(1200), 및 스토리지 장치들(1300a, 1300b)을 포함할 수 있다.
루트 컴플렉스(1003)는 전자 시스템(1000)의 구성 요소들 사이에서 데이터 흐름을 관리할 수 있다. 예로서, 루트 컴플렉스(1003)는 데이터 경로를 제어하거나, 데이터 전달을 스케줄링하거나, 통신 충돌을 해소할 수 있다. 예로서, 메인 프로세서(1101), 워킹 메모리(1200), 및 스토리지 장치들(1300a, 1300b)이 루트 컴플렉스(1003)로 연결될 수 있고, 루트 컴플렉스(1003)를 통해 서로 통신하며 데이터를 교환할 수 있다.
몇몇 경우, 스위치(1005)가 루트 컴플렉스(1003)로 더 연결될 수 있고, 스토리지 장치들(1300a, 1300b)은 스위치(1005)를 통해 루트 컴플렉스(1003)로 연결될 수 있다. 예로서, 스위치(1005)는 PCIe 스위치 또는 다른 유형의 스위치를 포함할 수 있다. 스위치(1005)는 루트 컴플렉스(1003)와 스토리지 장치들(1300a, 1300b) 사이의 데이터 경로를 제어할 수 있다. 루트 컴플렉스(1003) 및 스위치(1005)는 데이터 제어 및 데이터 전달을 위한 하드웨어 회로로 구현될 수 있다.
몇몇 예에서, 스토리지 장치(1300a)는 듀얼-포트를 통해 스위치(1005)로 연결될 수 있다. 예로서, 스토리지 장치(1300a)의 제 1 포트는 스토리지 장치(1300a)와 스위치(1005) 사이에 데이터 경로(P11)를 제공할 수 있고, 스토리지 장치(1300a)의 제 2 포트는 스토리지 장치(1300a)와 스위치(1005) 사이에 데이터 경로(P12)를 제공할 수 있다. 유사하게, 스토리지 장치(1300b) 역시 듀얼-포트를 통해 스위치(1005)로 연결될 수 있다. 도 3에는 도시되지 않았으나, 스토리지 장치(1300c) 역시 듀얼-포트를 통해 스위치(1005)로 연결될 수 있다.
메인 프로세서(1101)는 루트 컴플렉스(1003) 및 스위치(1005)를 통해 스토리지 장치들(1300a, 1300b)과 통신할 수 있다. 본 개시에서, 스토리지 장치들(1300a, 1300b)과 같은 전자 시스템(1000)의 구성 요소로 접근할 수 있는 객체는 “호스트”로 불릴 수 있다. 메인 프로세서(1101)는 호스트로서 동작할 수 있는 객체들의 한 예일 수 있으나, 본 발명은 여기에 한정되지 않는다.
각 스토리지 장치(1300a, 1300b)가 듀얼-포트를 통해 메인 프로세서(1101)와 통신하는 경우, 신뢰성이 향상될 수 있다. 예로서, 스토리지 장치(1300a)의 하나의 포트가 장애를 갖거나(Failure) 비활성화(Disable)되더라도, 다른 하나의 포트가 통신을 지원할 수 있다.
도 3의 예에서, 스토리지 장치들(1300a, 1300b)은 스위치(1005)를 통해 피어-투-피어(Peer-to-peer) 방식으로 서로 통신할 수 있다. 이 경우, 호스트(예컨대, 메인 프로세서(1101))가 스토리지 장치들(1300a, 1300b) 사이의 통신에 개입할 수 있다.
예로서, 데이터가 스토리지 장치(1300a)로부터 스위치(1005)를 통해 스토리지 장치(1300b)로 전달되는 경우, 메인 프로세서(1101)는 스토리지 장치(1300b)로의 데이터 경로를 제어하고 메모리 어드레스를 맵핑하는 데에 개입할 수 있다. 이를 위해, 메인 프로세서(1101)는 스토리지 장치들(1300a, 1300b) 사이에서 교환되는 데이터를 가공하는 데에 개입할 수 있다.
한편, 각 스토리지 장치(1300a, 1300b)의 용량이 큰 경우, 스토리지 장치들(1300a, 1300b) 사이에서 교환되는 데이터의 양이 많을 수 있다. 또한, 많은 양의 데이터를 관리하기 위해 각 스토리지 장치(1300a, 1300b)의 성능이 높을 수 있다. 이 경우, 호스트가 스토리지 장치들(1300a, 1300b) 사이에서 교환되는 데이터를 가공하는 데에 개입함에 따라, 호스트의 작업부하(Workload)가 심해질 수 있다.
도 4는 도 1의 전자 시스템(1000)과 관련되는 예시적인 구성을 보여주는 블록도이다.
예로서, 전자 시스템(1000)은 구성(1000b)을 포함할 수 있다. 구성(1000b)은 메인 프로세서(1101), 루트 컴플렉스(1003), 스위치(1005), 워킹 메모리(1200), 및 스토리지 장치들(1300a, 1300b)을 포함할 수 있다.
몇몇 실시 예에 따른 구성(1000b)에서, 스토리지 장치(1300a)의 제 1 포트 및 제 2 포트 모두가 스위치(1005)로 연결되지는 않을 수 있다. 대신, 스토리지 장치(1300a)의 제 1 포트는 스토리지 장치(1300b)로 연결될 수 있고, 스토리지 장치(1300a)의 제 2 포트는 스위치(1005)로 연결될 수 있다.
예로서, 스토리지 장치(1300a)의 제 2 포트는 스토리지 장치(1300a)와 스위치(1005) 사이에 데이터 경로(P21)를 제공할 수 있고, 스토리지 장치(1300a)의 제 1 포트는 스토리지 장치들(1300a, 1300b) 사이에 데이터 경로(P22)를 제공할 수 있다. 스토리지 장치(1300a)는 데이터 경로(P21), 스위치(1005), 및 루트 컴플렉스(1003)를 통해 메인 프로세서(1101)와 통신할 수 있다.
유사하게, 스토리지 장치(1300b)의 듀얼-포트의 하나의 포트는 스토리지 장치(1300a)로 연결될 수 있다. 스토리지 장치(1300a)는 데이터 경로(P22)를 통해 스토리지 장치(1300b)와 피어-투-피어 방식으로 통신할 수 있다. 도 4에는 도시되지 않았으나, 스토리지 장치(1300c) 역시 피어-투-피어 통신을 위해 듀얼-포트의 하나의 포트를 통해 스토리지 장치(1300a 또는 1300b)로 연결될 수 있다.
스토리지 장치(1300b)의 듀얼-포트의 다른 하나의 포트는 스위치(1005)로 연결되거나 연결되지 않을 수 있다. 스토리지 장치(1300b)가 스위치(1005)로 연결되지 않는 경우, 스토리지 장치(1300b)는 스토리지 장치(1300a)를 통해 메인 프로세서(1101)와 통신할 수 있다. 스토리지 장치(1300b)가 스위치(1005)로 연결되는 경우, 스토리지 장치(1300b)는 스위치(1005)를 통해 메인 프로세서(1101)와 통신할 수 있다.
구성(1000b)에서, 스토리지 장치들(1300a, 1300b) 사이의 통신에는 스위치(1005)가 요구되지 않을 수 있다. 스토리지 장치들(1300a, 1300b) 사이에서 교환되는 데이터는 스토리지 장치(1300a) 및/또는 스토리지 장치(1300b)에 의해 가공될 수 있다. 호스트(예컨대, 메인 프로세서(1101))는 스토리지 장치들(1300a, 1300b) 사이에서 교환되는 데이터를 가공하는 데에 개입하지 않을 수 있다(또는 최소한으로만 개입할 수 있다).
구성(1000a)에서 호스트에 수행되었던 데이터 가공의 일부 또는 전부는 구성(1000b)에서 스토리지 장치들(1300a, 1300b)에 의해 수행될 수 있다. 따라서, 구성(1000b)에서, 스토리지 장치들(1300a, 1300b) 사이에서 교환되는 데이터의 양이 증가하고 스토리지 장치들(1300a, 1300b)의 성능이 높아지더라도, 호스트의 작업부하가 현저하게 경감될 수 있다. 이는 전체 전자 시스템(1000)의 설계 비용 및 관리 비용을 감소시킬 수 있다.
도 4는 스토리지 장치(1300a)가 스위치(1005)로 연결되는 것을 보여준다. 몇몇 실시 예에서, 스토리지 장치(1300a)는 스위치(1005) 없이 루트 컴플렉스(1003)로 연결될 수 있다. 전자 시스템(1000)은 구성(1000b)과 상이하도록 다양하게 변경 또는 수정될 수 있다.
도 5는 도 1의 스토리지 장치들(1300a, 1300b, 1300c)과 관련되는 예시적인 구성을 보여주는 블록도이다.
몇몇 실시 예에서, 스토리지 장치들(1300a, 1300b, 1300c)은 각각 스토리지 장치들(1301a, 1301b, 1301c)을 포함할 수 있다. 도 4를 참조하여 설명된 것들과 유사하게, 스토리지 장치들(1301a, 1301b, 1301c)은 피어-투-피어 방식으로 통신하기 위해 루트 컴플렉스(1003) 또는 스위치(1005) 없이 서로 연결될 수 있다. 이를 위해, 스토리지 장치들(1301a, 1301b, 1301c) 각각은 듀얼-포트의 구조로 구현될 수 있다.
도 5는 스토리지 장치들(1301a, 1301c)이 메인 프로세서(1101)로 직접 연결되는 것을 보여준다. 그러나, 몇몇 실시 예에서, 루트 컴플렉스(1003) 및/또는 스위치(1005)가 스토리지 장치들(1301a, 1301c)과 메인 프로세서(1101) 사이에 제공될 수 있다. 본 개시에서, 메인 프로세서(1101)로의 연결은 직접적인 및 간접적인 연결을 포함할 수 있다.
스토리지 장치(1301a)는 하나 이상의 메모리 장치(1310a), 스토리지 컨트롤러(1331a), 및 피어-투-피어 관리기(1350a)를 포함할 수 있다. 스토리지 컨트롤러(1331a)는 스토리지 컨트롤러(1330a)에 대응할 수 있다. 스토리지 컨트롤러(1331a)는 스토리지 장치(1301a)의 전반적인 동작들을 제어하고 관리할 수 있다. 메모리 장치(1310a)는 스토리지 컨트롤러(1331a)의 제어에 따라 데이터를 저장하거나 출력할 수 있다.
스토리지 컨트롤러(1331a)는 인터페이스 회로들(1335a, 1336a)을 포함할 수 있다. 인터페이스 회로들(1335a, 1336a) 각각은 스토리지 컨트롤러(1331a)가 스토리지 컨트롤러(1331a) 외부의 구성 요소와 통신하도록 만들기 위해 데이터, 신호, 및/또는 패킷을 송신/수신하고 처리하도록 구성되는 물리 계층 및/또는 논리 계층을 포함할 수 있다. 인터페이스 회로들(1335a, 1336a) 각각은 스토리지 컨트롤러(1331a)와 외부 구성 요소 사이의 통신을 처리하도록 구성되는 하드웨어 회로를 포함할 수 있다.
예로서, 인터페이스 회로(1335a)는 스토리지 장치(1301a)의 제 2 포트로 연결될 수 있다. 스토리지 장치(1301a)의 제 2 포트는 스토리지 컨트롤러(1331a)와 메인 프로세서(1101) 사이에 데이터 경로(P21a)를 제공할 수 있다. 스토리지 장치(1301a)는 인터페이스 회로(1335a), 데이터 경로(P21a), 및 제 2 포트를 통해 메인 프로세서(1101)와 통신할 수 있다.
예로서, 인터페이스 회로(1336a)는 피어-투-피어 관리기(1350a)로 연결될 수 있다. 데이터 경로(P23a)가 인터페이스 회로(1336a)와 피어-투-피어 관리기(1350a) 사이에 제공될 수 있다. 스토리지 컨트롤러(1331a)는 인터페이스 회로(1336a) 및 데이터 경로(P23a)를 통해 피어-투-피어 관리기(1350a)와 통신할 수 있다.
피어-투-피어 관리기(1350a)는 스토리지 장치(1301a)의 제 1 포트로 연결될 수 있다. 피어-투-피어 관리기(1350a)는 제 1 포트와 스토리지 컨트롤러(1331a) 사이에 놓일 수 있다. 스토리지 컨트롤러(1331a)는 스토리지 장치(1301a)의 제 1 포트와 스토리지 장치(1301a)의 제 2 포트 사이에 놓일 수 있다.
스토리지 장치(1301a)는 제 1 포트를 통해 스토리지 장치(1301a) 외부의 다른 장치(예컨대, 스토리지 장치(1301b))로 연결될 수 있다. 스토리지 장치(1301a)의 제 1 포트는 피어-투-피어 관리기(1350a)와 스토리지 장치(1301b) 사이에 데이터 경로(P22a)를 제공할 수 있다. 스토리지 장치(1301a)는 데이터 경로(P22a) 및 제 1 포트를 통해 스토리지 장치(1301b)와 통신할 수 있다.
피어-투-피어 관리기(1350a)는 내부 스위치(1351a) 및 연산 로직 회로(1352a)를 포함할 수 있다. 내부 스위치(1351a) 및 연산 로직 회로(1352a)는 피어-투-피어 관리기(1350a) 내부의 버스를 통해 서로 통신할 수 있다. 내부 스위치(1351a) 및 연산 로직 회로(1352a)의 동작들에 따라, 피어-투-피어 관리기(1350a)는 스토리지 컨트롤러(1331a)와 스토리지 장치(1301b) 사이에서 피어-투-피어 방식으로 데이터를 전달하기 위한 경로(예컨대, 데이터 경로들(P22a, P23a))를 제공할 수 있다.
내부 스위치(1351a)는 제 1 포트를 통해 스토리지 장치(1301a)로부터 출력되는 데이터 및 제 1 포트를 통해 스토리지 장치(1301a)에 의해 수신되는 데이터의 흐름을 관리할 수 있다. 따라서, 피어-투-피어 관리기(1350a)는, 스토리지 컨트롤러(1331a)와 교환되는 데이터에 기초하여, 제 1 포트를 통해 스토리지 장치(1301b)로 데이터를 출력하거나 제 1 포트를 통해 스토리지 장치(1301b)로부터 데이터를 수신할 수 있다.
내부 스위치(1351a)는 데이터 흐름을 관리하기 위해 하드웨어 회로로 구현될 수 있다. 여기서, “스위치”라는 용어가 사용되지만, 내부 스위치(1351a)의 구현은 다양하게 변경 또는 수정될 수 있다. 예로서, 내부 스위치(1351a)는 (루트 컴플렉스(1003)와 유사하게) 데이터 경로를 제어하거나, 데이터 전달을 스케줄링하거나, 통신 충돌을 해소하기 위해, 내부 루트 컴플렉스의 형태로 구현될 수 있다. 또는, 내부 스위치(1351a)는 (루트 컴플렉스(1003) 및 스위치(1005)와 유사하게) 내부 루트 컴플렉스가 스위치와 조합된 형태로 구현될 수 있다.
다만, 내부 스위치(1351a)는 스토리지 컨트롤러(13331a)와 제 1 포트 사이의 데이터 흐름만을 관리할 수 있다. 따라서, 내부 스위치(1351a)는 루트 컴플렉스(1003) 및/또는 스위치(1005)의 크기(예컨대, 회로 크기, 회로 면적, 회로 규모 등)보다 작은 크기를 갖도록 구현될 수 있다.
연산 로직 회로(1352a)는 피어-투-피어 관리기(1350a)에서 수신되는 데이터에 기초하여 가공 연산을 수행할 수 있다. 예로서, 가공 연산은 수신되는 데이터와 관련되는 정보(예컨대, 데이터 양, 데이터 경로, 어드레스 등)를 모니터링하는 연산, 수신되는 데이터에 기반하는 RAID(Redundant Array of Independent Disks) 연산, 수신되는 데이터에 기반하는 정규식 검색(Regular Expression Search) 연산 등과 같은 다양한 연산 중 하나 이상을 포함할 수 있다. 다만, 본 발명은 이 예로 한정되지 않는다.
예로서, 연산 로직 회로(1352a)는 스토리지 컨트롤러(1331a)로부터 수신되는 데이터에 기초하여 가공 연산을 수행할 수 있고, 수신되는 데이터를 가공하여 제 1 포트를 통해 출력될 가공된 데이터를 생성할 수 있다. 예로서, 연산 로직 회로(1352a)는 제 1 포트를 통해 수신되는 데이터에 기초하여 가공 연산을 수행할 수 있고, 수신되는 데이터를 가공하여 스토리지 컨트롤러(1331a)로 제공될 가공된 데이터를 생성할 수 있다.
이를 위해, 연산 로직 회로(1352a)는 가공 연산을 수행하도록 구성되는 하드웨어 회로로 구현될 수 있다. 몇몇 실시 예에서, 피어-투-피어 관리기(1350a)는 스토리지 장치(1301a)의 세트 내부에서 스토리지 컨트롤러(1331a)와 별개인 FPGA(Field Programmable Gate Array) 보드 또는 ASICs(Application Specific Integrated Circuits)의 형태로 구현될 수 있다. 예로서, 연산 로직 회로(1352a)는 FPGA 보드의 구성에 기초하여 재구성 가능한(Reconfigurable) 로직 회로로 구현될 수 있다.
따라서, 피어-투-피어 관리기(1350a)는, 단순히 데이터 흐름을 관리한다기 보다는, 수신되는 데이터 자체를 가공 또는 변환하여 가공된 데이터 또는 변환된 데이터를 출력할 수 있다. 출력되는 데이터는 스토리지 컨트롤러(1331a)로 제공되거나, 제 1 포트를 통해 스토리지 장치(1301b)로 제공될 수 있다. 이를 위해, 피어-투-피어 관리기(1350a)는 스토리지 컨트롤러(1331a) 및 제 1 포트로 연결되는 두 개의 다운스트림(Downstream) 포트를 포함할 수 있다.
연산 로직 회로(1352a)의 가공 연산은 메인 프로세서(1101)에 의해 수행될 수도 있다. 그러나, 실시 예들에서, 메인 프로세서(1101)의 작업부하를 경감시키기 위해, 스토리지 장치(1301a)가 연산 로직 회로(1352a)를 이용하여 가공 연산을 대신 수행할 수 있다. 가공 연산과 관련되는 예가 도 6 내지 도 9를 참조하여 설명될 것이다.
스토리지 장치(1301b)는 하나 이상의 메모리 장치(1310b), 스토리지 컨트롤러(1331b), 및 피어-투-피어 관리기(1350b)를 포함할 수 있다. 스토리지 컨트롤러(1331b)는 인터페이스 회로들(1335b, 1336b)을 포함할 수 있다. 피어-투-피어 관리기(1350b)는 내부 스위치(1351b) 및 연산 로직 회로(1352b)를 포함할 수 있다.
피어-투-피어 관리기(1350b)는 스토리지 장치(1301b)의 제 1 포트 및 데이터 경로(P24a)를 통해 스토리지 장치(1301c)로 연결될 수 있다. 인터페이스 회로(1335b)는 스토리지 장치(1301b)의 제 2 포트 및 데이터 경로(P22a)를 통해 스토리지 장치(1301a)로 연결될 수 있다. 인터페이스 회로(1336b)는 데이터 경로(P25a)를 통해 피어-투-피어 관리기(1350b)로 연결될 수 있다.
스토리지 장치(1301b), 메모리 장치(1310b), 스토리지 컨트롤러(1331b), 인터페이스 회로들(1335b, 1336b), 피어-투-피어 관리기(1350b), 내부 스위치(1351b), 및 연산 로직 회로(1352b)는 스토리지 장치(1301a), 메모리 장치(1310a), 스토리지 컨트롤러(1331a), 인터페이스 회로들(1335a, 1335b), 피어-투-피어 관리기(1350a), 내부 스위치(1351a), 및 연산 로직 회로(1352a)와 각각 실질적으로 동일하거나 유사하게 구성되고 동작할 수 있다. 간결성을 위해, 중복되는 설명은 이하 생략될 것이다.
스토리지 장치(1301c)는 하나 이상의 메모리 장치(1310c), 스토리지 컨트롤러(1331c), 및 피어-투-피어 관리기(1350c)를 포함할 수 있다. 스토리지 컨트롤러(1331c)는 인터페이스 회로들(1335c, 1336c)을 포함할 수 있다. 피어-투-피어 관리기(1350c)는 내부 스위치(1351c) 및 연산 로직 회로(1352c)를 포함할 수 있다.
피어-투-피어 관리기(1350c)는 스토리지 장치(1301c)의 제 1 포트 및 데이터 경로(P27a)를 통해 메인 프로세서(1101)로 연결될 수 있다. 인터페이스 회로(1335c)는 스토리지 장치(1301c)의 제 2 포트 및 데이터 경로(P24a)를 통해 스토리지 장치(1301b)로 연결될 수 있다. 인터페이스 회로(1336c)는 데이터 경로(P26a)를 통해 피어-투-피어 관리기(1350c)로 연결될 수 있다.
스토리지 장치(1301c), 메모리 장치(1310c), 스토리지 컨트롤러(1331c), 인터페이스 회로들(1335c, 1336c), 피어-투-피어 관리기(1350c), 내부 스위치(1351c), 및 연산 로직 회로(1352c)는 스토리지 장치(1301a), 메모리 장치(1310a), 스토리지 컨트롤러(1331a), 인터페이스 회로들(1335a, 1335b), 피어-투-피어 관리기(1350a), 내부 스위치(1351a), 및 연산 로직 회로(1352a)와 각각 실질적으로 동일하거나 유사하게 구성되고 동작할 수 있다. 간결성을 위해, 중복되는 설명은 이하 생략될 것이다.
각 스토리지 장치(1301a, 1301b, 1301c)에서, 제 1 포트 및 제 2 포트 중 적어도 하나의 포트는 다른 스토리지 장치로 연결될 수 있다. 한편, 제 1 포트 및 제 2 포트 중 다른 스토리지 장치로 연결되지 않는 포트는 호스트(예컨대, 메인 프로세서(1101))로 연결될 수 있다.
예로서, 스토리지 장치(1301b)에서, 제 1 포트 및 제 2 포트 모두가 다른 스토리지 장치로 연결되는 경우, 스토리지 장치(1301b)는 호스트로 연결되지 않을 수 있다. 이 경우, 스토리지 장치(1301b)는 메인 프로세서(1101)와 직접 통신하지는 않을 수 있다. 대신, 스토리지 장치(1301b)는 스토리지 장치(1301a 또는 1301c)를 통해 메인 프로세서(1101)와 통신할 수 있다.
스토리지 장치들(1301a, 1301b, 1301c)의 몇몇 포트는 메인 프로세서(1101)로 연결되지 않을 수 있다. 그러나, 메인 프로세서(1101)로의 데이터 경로들(P21a, P27a)이 제공되는 경우, 신뢰성이 향상될 수 있다. 예로서, 데이터 경로(P27a)가 장애를 갖거나 비활성화되더라도, 데이터 경로(P21a)가 메인 프로세서(1101)와의 통신을 제공할 수 있다.
도 6 내지 도 9는 도 5의 스토리지 장치들(1301a, 1301b, 1301c)과 관련되는 예시적인 동작들을 설명하기 위한 블록도들이다.
도 6 내지 도 9의 예시적인 동작들은 호스트(예컨대, 메인 프로세서(1101))가 스토리지 장치들(1301a, 1301b, 1301c)에 저장된 데이터(D1, D2, D3)와 관련하여 RAID 연산(예컨대, 패리티 연산)을 요청하는 경우와 관련될 수 있다. 연산 로직 회로들(1352a, 1352b, 1352c)은 가공 연산으로서 RAID 연산을 수행할 수 있다.
도 6을 참조하면, 스토리지 컨트롤러(1331a)는 스토리지 장치(1301a)의 제 2 포트 및 인터페이스 회로(1335a)를 통해 메인 프로세서(1101)로부터 요청(REQ)을 수신할 수 있다. 요청(REQ)은 스토리지 장치(1301a) 및 다른 스토리지 장치(예컨대, 스토리지 장치들(1301b, 1301c))로 지시(Direct)될 수 있다. 예로서, 요청(REQ)은 데이터(D1, D2, D3)에 대응하는 패리티를 계산할 것을 요청할 수 있다.
도 7을 참조하면, 스토리지 컨트롤러(1331a)는 요청(REQ)에 응답하여, 스토리지 장치(1301a)에 대해 요청되는 동작을 수행할 수 있다. 예로서, 스토리지 컨트롤러(1331a)는 메모리 장치(1310a)가 데이터(D1)를 출력하도록 메모리 장치(1310a)를 제어할 수 있다.
나아가, 스토리지 컨트롤러(1331a)는 요청(REQ)에 응답하여, 인터페이스 회로(1336a)를 통해 다른 스토리지 장치에 대해 요청되는 동작과 관련되는 데이터를 피어-투-피어 관리기(1350a)와 교환할 수 있다. 예로서, 스토리지 컨트롤러(1331a)는 데이터(D1)를 피어-투-피어 관리기(1350a)로 제공할 수 있다.
연산 로직 회로(1352a)는 메모리 장치(1310a)에 저장된 데이터 및 스토리지 장치(1301a)의 제 2 포트를 통해 수신되는 데이터 중 적어도 하나의 데이터에 기초하여 가공 연산을 수행할 수 있다. 예로서, 연산 로직 회로(1352a)는 데이터(D1)에 기초하여 가공 연산(예컨대, 패리티 연산)을 수행할 수 있다.
연산 로직 회로(1352a)는 데이터(D1)를 가공하여 가공된 데이터(D1')를 생성할 수 있다. 데이터(D1')는 스토리지 장치(1301b)에서 수행될 동작에 이용될 수 있다. 패리티 연산이 아직 하나의 데이터(D1)에 대해서만 수행되었고, 데이터(D1')는 데이터(D1)와 동일할 수 있다.
내부 스위치(1351a)는 데이터(D1, D1')의 흐름을 관리할 수 있다. 내부 스위치(1351a)는 스토리지 컨트롤러(1331a)로부터 데이터(D1)를 수신할 수 있고, 데이터(D1')를 스토리지 장치(1301a)의 제 1 포트로 출력할 수 있다. 따라서, 피어-투-피어 관리기(1350a)는 호스트의 개입 없이 스토리지 장치(1301b)로 데이터(D1')를 출력할 수 있다.
스토리지 장치(1301a)는 호스트의 개입 없이 스토리지 장치(1301a)의 제 1 포트 및 스토리지 장치(1301b)의 제 2 포트를 통해 스토리지 장치(1301b)와 통신할 수 있다. 스토리지 컨트롤러(1331b)는 스토리지 장치(1301b)의 제 2 포트 및 인터페이스 회로(1335b)를 통해 스토리지 장치(1301a)로부터 데이터(D1')를 수신할 수 있다.
도 8을 참조하면, 스토리지 컨트롤러(1331b)는 스토리지 장치(1301b)에 대해 요청되는 동작을 수행할 수 있다. 예로서, 스토리지 컨트롤러(1331b)는 메모리 장치(1310b)가 데이터(D2)를 출력하도록 메모리 장치(1310b)를 제어할 수 있다. 이를 위해, 예로서, 스토리지 컨트롤러(1331b)는 데이터(D2) 및 요청(REQ)에 관한 정보를 데이터(D1')와 함께 스토리지 장치(1301a)로부터 수신할 수 있다. 스토리지 컨트롤러(1331b)는 인터페이스 회로(1336b)를 통해 데이터(D1', D2)를 피어-투-피어 관리기(1350b)로 제공할 수 있다.
연산 로직 회로(1352b)는 메모리 장치(1310b)에 저장된 데이터 및 스토리지 장치(1301b)의 제 2 포트를 통해 수신되는 데이터 중 적어도 하나의 데이터에 기초하여 가공 연산을 수행할 수 있다. 예로서, 연산 로직 회로(1352b)는 데이터(D1', D2)에 기초하여 패리티 연산을 수행할 수 있다. 연산 로직 회로(1352b)는 데이터(D1', D2)를 가공하여 가공된 데이터(D2')를 생성할 수 있다.
연산 로직 회로(1352a)에 의해 수행되는 패리티 연산은 메인 프로세서(1101)에 의해 요청되는 전체 연산의 제 1 부분(예컨대, 데이터(D1)에 대한 부분 연산)을 포함할 수 있다. 스토리지 장치(1301a)가 데이터(D1')를 스토리지 장치(1301b)로 출력함에 따라, 연산 로직 회로(1352b)는 메인 프로세서(1101)에 의해 요청되는 전체 연산의 제 2 부분(예컨대, 데이터(D1', D2)에 대한 부분 연산)을 수행할 수 있다. 여기서, 제 2 부분의 연산은 제 1 부분의 연산과 중첩하지 않을 수 있다.
연산 로직 회로(1352b)가 패리티 연산을 수행함에 따라, 데이터(D2')는 데이터(D1') 및 데이터(D2) 각각과 상이하도록 생성될 수 있다. 데이터(D2')는 스토리지 장치(1301c)에서 수행될 동작에 이용될 수 있다.
내부 스위치(1351b)는 데이터(D1', D2, D2')의 흐름을 관리할 수 있다. 내부 스위치(1351b)는 스토리지 컨트롤러(1331b)로부터 데이터(D1', D2)를 수신할 수 있고, 데이터(D2')를 스토리지 장치(1301b)의 제 1 포트로 출력할 수 있다. 피어-투-피어 관리기(1350b)는 호스트의 개입 없이 스토리지 장치(1301c)로 데이터(D2')를 출력할 수 있다.
스토리지 장치(1301b)는 호스트의 개입 없이 스토리지 장치(1301b)의 제 1 포트 및 스토리지 장치(1301c)의 제 2 포트를 통해 스토리지 장치(1301c)와 통신할 수 있다. 스토리지 컨트롤러(1331c)는 스토리지 장치(1301c)의 제 2 포트 및 인터페이스 회로(1335c)를 통해 스토리지 장치(1301b)로부터 데이터(D2')를 수신할 수 있다.
도 9를 참조하면, 스토리지 컨트롤러(1331c)는 메모리 장치(1310c)가 데이터(D3)를 출력하도록 메모리 장치(1310c)를 제어할 수 있다. 스토리지 컨트롤러(1331c)는 인터페이스 회로(1336c)를 통해 데이터(D2', D3)를 피어-투-피어 관리기(1350c)로 제공할 수 있다.
연산 로직 회로(1352c)는 데이터(D2', D3)에 기초하여 패리티 연산을 수행할 수 있다. 연산 로직 회로(1352c)는 가공된 데이터로서 패리티(P)를 생성할 수 있다. 패리티(P)는 메인 프로세서(1101)의 요청(REQ)에 대응하는 연산 결과일 수 있다.
패리티(P)를 얻기 위해 메인 프로세서(1101)에 의해 요청되는 전체 연산은 스토리지 장치들(1301a, 1301b, 1301c) 상에서 분산하여 수행될 수 있다. 메인 프로세서(1101)는 패리티 연산에 개입하지 않을 수 있고, 따라서 메인 프로세서(1101)의 작업 부하가 경감될 수 있다. 연산 로직 회로들(1352a, 1352b, 1352c) 각각은 전체 연산을 부분적으로 수행할 수 있다. 부분적인 연산들이 연이어 수행됨에 따라, 전체 연산이 완성될 수 있고 패리티(P)가 얻어질 수 있다.
내부 스위치(1351c)는 스토리지 컨트롤러(1331b)로부터 데이터(D2', D3)를 수신할 수 있고, 패리티(P)를 스토리지 장치(1301c)의 제 1 포트로 출력할 수 있다. 스토리지 장치(1301c)는 스토리지 장치(1301c)의 제 1 포트를 통해 패리티(P)를 출력할 수 있다. 따라서, 패리티(P)가 메인 프로세서(1101)로 제공될 수 있다.
도 10은 도 5의 스토리지 장치들(1301a, 1301b, 1301c)과 관련되는 예시적인 동작들을 설명하기 위한 블록도이다.
몇몇 경우, 도 5의 데이터 경로(P27a)가 연결되지 않을 수 있다. 예로서, 데이터 경로(P27a)가 장애를 갖거나 비활성화될 수 있다. 예로서, 회로 구성의 단순화를 위해, 데이터 경로(P27a)가 제공되지 않을 수 있다.
이 경우, 스토리지 장치(1301c)는 스토리지 장치(1301c)의 제 2 포트 및 스토리지 장치(1301b)의 제 1 포트를 통해 패리티(P)를 스토리지 장치(1301b)로 전달할 수 있다. 이러한 방식으로, 패리티(P)는 스토리지 장치들(1301b, 1301a)을 통해 메인 프로세서(1101)로 제공될 수 있다. 스토리지 장치(1301a)는 스토리지 장치(1301a)의 제 2 포트를 통해 패리티(P)를 메인 프로세서(1101)로 출력할 수 있다.
도 10의 예에서 패리티(P)를 메인 프로세서(1101)로 전달하기 위한 경로의 방향은 도 6 내지 도 9의 예에서 데이터를 전달하기 위한 경로의 방향과 반대일 수 있다. 인터페이스 회로들(1335a, 1336a, 1335b, 1336b, 1335c, 1336c) 및 피어-투-피어 관리기들(1350a, 1350b, 1350c)은 양 방향 통신을 지원할 수 있다.
도 6 내지 도 10을 참조하여 예시적인 동작들이 설명되었다. 그러나, 이 설명들은 더 나은 이해를 가능하게 하기 위해 제공되고, 본 발명을 한정하도록 의도되지 않는다. 스토리지 장치들(1301a, 1301b, 1301c)의 동작들은 스토리지 장치들(1301a, 1301b, 1301c) 사이의 피어-투-피어 통신 및 가공 연산을 제공하기 위해 다양하게 변경 또는 수정될 수 있다. 나아가, 본 개시의 실시 예들이 패리티 연산 외의 다양한 가공 연산에 대해서도 응용될 수 있음이 잘 이해될 것이다.
도 11 및 도 12는 도 5의 스토리지 장치들(1301a, 1301b, 1301c)과 관련되는 예시적인 구성들을 보여주는 블록도들이다.
도 11을 참조하면, 메인 프로세서(1101)는 데이터 경로들(P21b, P27b)을 통해 스토리지 장치들(1301a, 1301b, 1301c)과 통신할 수 있다. 스토리지 장치들(1301a, 1301b, 1301c)은 데이터 경로들(P22b 내지 P26b)을 통해 피어-투-피어 방식으로 서로 통신할 수 있다. 데이터 경로들(P21b 내지 P27b)은 각각 데이터 경로들(P21a 내지 P27a)에 대응할 수 있다.
도 6 내지 도 10의 예시적인 동작들과 달리, 도 11의 예에서, 스토리지 장치(1301c)가 메인 프로세서(1101)로부터 요청을 수신할 수 있다. 피어-투-피어 관리기(1350c)는 메인 프로세서(1101)의 요청에 응답하여 가공 연산을 수행할 수 있고, 따라서 가공된 데이터를 스토리지 컨트롤러(1331c)로 제공할 수 있다.
이러한 방식으로, 피어-투-피어 관리기들(1350c, 1350b, 1350a)이 메인 프로세서(1101)에 의해 요청되는 전체 연산을 분산하여 수행할 수 있고, 따라서 연산 결과를 생성할 수 있다. 연산 결과는 스토리지 장치(1301a)의 스토리지 컨트롤러(1331a)를 통해 메인 프로세서(1101)로 출력될 수 있다.
몇몇 실시 예에서, 메인 프로세서(1101)와 스토리지 컨트롤러(1331a) 사이에 연산 로직 회로가 제공되지 않을 수 있다. 몇몇 경우, 스토리지 컨트롤러(1331a)로부터 출력되는 데이터에 대해 추가의 가공이 요구될 수 있다. 예로서, 피어-투-피어 관리기(1350a)로부터 제공되는 가공된 데이터 및 스토리지 장치(1301a)의 메모리 장치(1310a)에 저장된 데이터에 대해 추가의 패리티 연산이 요구될 수 있고, 스토리지 컨트롤러(1331a)는 가공된 데이터 및 저장된 데이터를 메인 프로세서(1101)로 제공할 수 있다.
이 예에서, 메인 프로세서(1101)가 추가의 패리티 연산을 수행할 수 있다. 메인 프로세서(1101)가 가공 연산에 부분적으로 개입하지만, 피어-투-피어 관리기들(1350c, 1350b, 1350a)이 전체 연산의 대부분을 수행할 수 있다. 나아가, 메인 프로세서(1101)는 스토리지 장치들(1301a, 1301b, 1301c) 사이의 통신에는 개입하지 않을 수 있다. 따라서, 메인 프로세서(1101)의 개입이 최소화될 수 있다.
도 12를 참조하면, 몇몇 경우, 도 11의 데이터 경로(P21b)가 연결되지 않을 수 있다. 예로서, 데이터 경로(P21b)가 장애를 갖거나 비활성화될 수 있다. 예로서, 회로 구성의 단순화를 위해, 데이터 경로(P21b)가 제공되지 않을 수 있다. 이 경우, 피어-투-피어 관리기(1350a)의 연산 결과는 스토리지 장치들(1301b, 1301c)을 통해 메인 프로세서(1101)로 제공될 수 있다. 도 12의 예에서 연산 결과를 메인 프로세서(1101)로 전달하기 위한 경로의 방향은 도 11의 예에서 데이터를 전달하기 위한 경로의 방향과 반대일 수 있다.
도 5 내지 도 12를 참조하여 설명된 실시 예들과 관련하여, 인터페이스 회로들(1335a, 1336a, 1335b, 1336b, 1335c, 1336c) 각각은 메인 프로세서(1101) 또는 피어-투-피어 관리기들(1350a, 1350b, 1350c)의 다운스트림 포트들로 연결될 수 있다. 따라서, 인터페이스 회로들(1335a, 1336a, 1335b, 1336b, 1335c, 1336c)은 각 스토리지 장치들(1301a, 1301b, 1301c)이 종단(Endpoint) 장치들로서 동작하도록 동작할 수 있다.
도 13 및 도 14는 도 1의 스토리지 장치(1300a)와 관련되는 예시적인 구성들을 보여주는 블록도들이다.
도 13을 참조하면, 몇몇 실시 예에서, 스토리지 장치(1300a)는 스토리지 장치(1302a)를 포함할 수 있다. 스토리지 장치(1302a)는 하나 이상의 메모리 장치(1310a), 스토리지 컨트롤러(1332a), 및 연산 로직 회로(1355a)를 포함할 수 있다. 스토리지 컨트롤러(1332a)는 인터페이스 회로(1337a) 및 가변 인터페이스 회로(1338a)를 포함할 수 있다.
스토리지 컨트롤러(1332a), 인터페이스 회로(1337a), 및 연산 로직 회로(1355a)는 각각 스토리지 컨트롤러(1331a), 인터페이스 회로(1335a), 및 연산 로직 회로(1352a)에 대응할 수 있다. 스토리지 컨트롤러(1332a)는 스토리지 장치(1302a)의 전반적인 동작들을 제어하고 관리할 수 있다. 인터페이스 회로(1337a)는 스토리지 장치(1302a)의 제 2 포트를 통해 스토리지 장치(1302a) 외부의 A장치(예컨대, 호스트, 다른 스토리지 장치 등)와의 통신을 지원할 수 있다.
연산 로직 회로(1355a)는 가공 연산을 수행하여 가공된 데이터를 생성할 수 있다. 연산 로직 회로(1355a)는 스토리지 장치(1302a)의 제 1 포트를 통해 스토리지 장치(1302a) 외부의 B장치(예컨대, 호스트, 다른 스토리지 장치 등)와 데이터를 교환할 수 있다. 연산 로직 회로(1355a)는 가변 인터페이스 회로(1338a)로 연결될 수 있다.
도 5 내지 도 12를 참조하여 설명된 내부 스위치(1351a) 및 연산 로직 회로(1352a)는 하나의 구성 요소(예컨대, 하나의 FPGA 보드, 하나의 칩 등) 상에 구현될 수 있다. 그러나, 몇몇 실시 예에서, 내부 스위치(1351a) 및 연산 로직 회로(1352a)는 별개의 구성 요소들(예컨대, 별개의 칩들, 별개의 회로들 등)로 구현될 수 있다. 내부 스위치(1351a)가 연산 로직 회로(1352a)로부터 분리되는 경우, 몇몇 실시 예에서, 내부 스위치(1351a)가 스토리지 컨트롤러(1331a) 내부에 구현될 수 있다.
예로서, 스토리지 컨트롤러(1332a)의 가변 인터페이스 회로(1338a)가 내부 스위치(1351a)의 구성들을 포함하고 내부 스위치(1351a)의 동작들을 수행할 수 있다. 가변 인터페이스 회로(1338a)는 복수의 동작 모드 중에서 선택되는 동작 모드로 동작할 수 있다. 동작 모드는 스토리지 장치(1302a)의 제 1 포트가 B장치로 연결되는지 여부 및 연결된 B장치의 유형에 기초하여 선택될 수 있다.
예로서, 가변 인터페이스 회로(1338a)의 동작 모드는 종단 장치의 동작과 관련되는(예컨대, 스토리지 장치(1302a)가 종단 장치로서 동작하도록 스토리지 장치(1302a)를 지원하기 위한) 종단 동작 모드를 포함할 수 있다. 예로서, 가변 인터페이스 회로(1338a)의 동작 모드는 B장치와의 통신과 관련되는(예컨대, B장치와의 통신을 지원하기 위한) 스위치 동작 모드를 포함할 수 있다.
이를 위해, 가변 인터페이스 회로(1338a)는 데이터, 신호 및/또는 패킷을 송신/수신하고 처리하도록 구성되는 물리 계층 및/또는 논리 계층의 하드웨어 회로를 포함할 수 있다. 나아가, 가변 인터페이스 회로(1338a)는 B장치와의 데이터 교환을 관리하기 위해 루트 컴플렉스 및/또는 스위치의 하드웨어 회로를 포함할 수 있다. 가변 인터페이스 회로(1338a)는 선택되는 동작 모드에 의존하여 상이하게 동작할 수 있다.
도 14를 참조하면, 몇몇 실시 예에서, 스토리지 장치(1300a)는 스토리지 장치(1303a)를 포함할 수 있다. 스토리지 장치(1303a)는 하나 이상의 메모리 장치(1310a) 및 스토리지 컨트롤러(1333a)를 포함할 수 있다. 스토리지 컨트롤러(1333a)는 인터페이스 회로(1337a), 가변 인터페이스 회로(1338a), 및 내장 연산 로직 회로(1339a)를 포함할 수 있다. 스토리지 컨트롤러(1333a)는 스토리지 컨트롤러(1331a)에 대응할 수 있고, 스토리지 장치(1303a)의 전반적인 동작들을 제어하고 관리할 수 있다.
인터페이스 회로(1337a)는 스토리지 장치(1303a)의 제 2 포트로 연결될 수 있고, 제 2 포트를 통해 A장치와의 통신을 지원할 수 있다. 가변 인터페이스 회로(1338a)는 스토리지 장치(1303a)의 제 1 포트로 연결될 수 있고, 제 1 포트를 통해 B장치와의 통신을 지원할 수 있다. 가변 인터페이스 회로(1338a)는 스토리지 장치(1303a)의 제 1 포트가 B장치로 연결되는지 여부 및 연결된 B장치의 유형에 기초하여 선택되는 동작 모드로 동작할 수 있다.
몇몇 실시 예에서, 연산 로직 회로(1352a 또는 1355a) 역시 스토리지 컨트롤러(1331a) 내부에 구현될 수 있다. 예로서, 스토리지 컨트롤러(1333a)의 내장 연산 로직 회로(1339a)가 연산 로직 회로(1352a 또는 1355a)의 구성들을 포함하고 연산 로직 회로(1352a 또는 1355a)의 동작들을 수행할 수 있다.
인터페이스 회로(1337a), 가변 인터페이스 회로(1338a), 및 내장 연산 로직 회로(1339a)는 스토리지 컨트롤러(1333a) 내부의 버스를 통해 서로 통신할 수 있다. 예로서, 내장 연산 로직 회로(1339a)는 내장 FPGA 또는 내장 ASICs의 형태로 구현될 수 있다. 예로서, 내장 연산 로직 회로(1339a)는 재구성 가능한 로직 회로로 구현될 수 있다.
내장 연산 로직 회로(1339a)는 가공 연산을 수행할 수 있다. 내장 연산 로직 회로(1339a)는 스토리지 장치(1303a)의 제 1 포트를 통해 수신되는 데이터를 가공하여 스토리지 장치(1303a)의 제 2 포트를 통해 출력될 가공된 데이터를 생성할 수 있다. 내장 연산 로직 회로(1339a)는 스토리지 장치(1303a)의 제 2 포트를 통해 수신되는 데이터를 가공하여 스토리지 장치(1303a)의 제 1 포트를 통해 출력될 가공된 데이터를 생성할 수 있다.
도 15는 도 1의 스토리지 장치들(1300a, 1300b, 1300c)과 관련되는 예시적인 구성을 보여주는 블록도이다.
몇몇 실시 예에서, 스토리지 장치들(1300a, 1300b, 1300c)은 각각 스토리지 장치들(1303a, 1303b, 1303c)을 포함할 수 있다. 스토리지 장치들(1303a, 1303b, 1303c) 각각은 듀얼-포트의 구조로 구현될 수 있고, 호스트(예컨대, 메인 프로세서(1101))의 개입 없이 피어-투-피어 방식으로 서로 통신할 수 있다.
스토리지 장치(1303b)는 하나 이상의 메모리 장치(1310b) 및 스토리지 컨트롤러(1333b)를 포함할 수 있다. 스토리지 컨트롤러(1333b)는 인터페이스 회로(1337b), 가변 인터페이스 회로(1338b), 및 내장 연산 로직 회로(1339b)를 포함할 수 있다. 스토리지 컨트롤러(1333b), 인터페이스 회로(1337b), 가변 인터페이스 회로(1338b), 및 내장 연산 로직 회로(1339b)는 스토리지 컨트롤러(1333a), 인터페이스 회로(1337a), 가변 인터페이스 회로(1338a), 및 내장 연산 로직 회로(1339a)와 각각 실질적으로 동일하거나 유사하게 구성되고 동작할 수 있다.
스토리지 장치(1303c)는 하나 이상의 메모리 장치(1310c) 및 스토리지 컨트롤러(1333c)를 포함할 수 있다. 스토리지 컨트롤러(1333c)는 인터페이스 회로(1337c), 가변 인터페이스 회로(1338c), 및 내장 연산 로직 회로(1339c)를 포함할 수 있다. 스토리지 컨트롤러(1333c), 인터페이스 회로(1337c), 가변 인터페이스 회로(1338c), 및 내장 연산 로직 회로(1339c)는 스토리지 컨트롤러(1333a), 인터페이스 회로(1337a), 가변 인터페이스 회로(1338a), 및 내장 연산 로직 회로(1339a)와 각각 실질적으로 동일하거나 유사하게 구성되고 동작할 수 있다. 간결성을 위해, 중복되는 설명은 이하 생략될 것이다.
인터페이스 회로(1337a)는 스토리지 장치(1303a)의 제 2 포트로 연결될 수 있다. 스토리지 장치(1303a)의 제 2 포트는 스토리지 컨트롤러(1333a)와 메인 프로세서(1101) 사이에 데이터 경로(P21c)를 제공할 수 있다. 따라서, 스토리지 장치(1303a)는 데이터 경로(P21c)를 통해 메인 프로세서(1101)와 통신하고 데이터를 교환할 수 있다.
내장 연산 로직 회로(1339a)는 메모리 장치(1310a)에 저장된 데이터 및 스토리지 장치(1303a)의 제 2 포트(또는 제 1 포트)를 통해 수신되는 데이터 중 적어도 하나의 데이터에 기초하여 가공 연산을 수행할 수 있다. 내장 연산 로직 회로(1339a)는 가공 연산을 수행하여 가공된 데이터를 생성할 수 있다. 가공된 데이터는 스토리지 장치(1303a)의 제 1 포트(또는 제 2 포트)를 통해 다른 장치(예컨대, 메인 프로세서(1101), 스토리지 장치(1303b) 등)로 출력될 수 있다.
가변 인터페이스 회로(1338a)는 스토리지 장치(1303a)의 제 1 포트로 연결될 수 있다. 인터페이스 회로(1337b)는 스토리지 장치(1303b)의 제 2 포트로 연결될 수 있다. 스토리지 장치(1303a)의 제 1 포트 및 스토리지 장치(1303b)의 제 2 포트는 스토리지 컨트롤러들(1333a, 1333b) 사이에 데이터 경로(P22c)를 제공할 수 있다. 따라서, 스토리지 장치(1303a)는 메인 프로세서(1101)의 개입 없이 스토리지 장치(1303b)와 피어-투-피어 방식으로 통신하고 데이터를 교환할 수 있다.
내장 연산 로직 회로(1339b)는 메모리 장치(1310b)에 저장된 데이터 및 스토리지 장치(1303b)의 제 2 포트(또는 제 1 포트)를 통해 수신되는 데이터 중 적어도 하나의 데이터에 기초하여 가공 연산을 수행할 수 있다. 내장 연산 로직 회로(1339b)는 가공 연산을 수행하여 가공된 데이터를 생성할 수 있다. 가공된 데이터는 스토리지 장치(1303b)의 제 1 포트(또는 제 2 포트)를 통해 다른 장치(예컨대, 스토리지 장치(1303a 또는 1303c) 등)로 출력될 수 있다.
유사하게, 스토리지 장치(1303b)의 제 1 포트 및 스토리지 장치(1303c)의 제 2 포트는 스토리지 컨트롤러들(1333b, 1333c) 사이에 데이터 경로(P24c)를 제공할 수 있다. 스토리지 장치(1303b)는 메인 프로세서(1101)의 개입 없이 가변 인터페이스 회로(1338b), 데이터 경로(P24c), 및 인터페이스 회로(1337c)를 통해 스토리지 장치(1303c)와 피어-투-피어 방식으로 통신하고 데이터를 교환할 수 있다.
스토리지 장치(1303c)의 제 1 포트는 스토리지 컨트롤러(1333c)와 메인 프로세서(1101) 사이에 데이터 경로(P27c)를 제공할 수 있다. 스토리지 장치(1303c)는 가변 인터페이스 회로(1337c) 및 데이터 경로(P27c)를 통해 메인 프로세서(1101)와 통신하고 데이터를 교환할 수 있다. 내장 연산 로직 회로(1339c)는 스토리지 장치(1303c)의 제 1 포트 및 제 2 포트를 통해 수신되는 데이터 및 메모리 장치(1310c)에 저장된 데이터 중 적어도 하나의 데이터에 기초하여 가공된 데이터를 생성할 수 있다.
예로서, 스토리지 컨트롤러(1333a)는 인터페이스 회로(1337a)를 통해 스토리지 장치들(1303a, 1303b, 1303c)로 지시되는 요청을 수신할 수 있다. 스토리지 컨트롤러(1333a)는 스토리지 장치(1303a)에 대해 요청되는 동작을 수행할 수 있다. 스토리지 컨트롤러(1333a)는 가변 인터페이스 회로(1338a)를 통해 스토리지 장치들(1303b, 1303c)에 대해 요청되는 동작과 관련되는 데이터를 출력하거나 수신할 수 있다.
내장 연산 로직 회로들(1339a, 1339b, 1339c)은 메인 프로세서(1101)에 의해 요청되는 전체 연산을 분산하여 수행할 수 있다. 따라서, 스토리지 컨트롤러(1333c)는 가변 인터페이스 회로(1338c)를 통해 메인 프로세서(1101)의 요청에 대응하는 연산 결과의 데이터를 메인 프로세서(1101)로 출력할 수 있다. 몇몇 경우, 스토리지 컨트롤러(1333c)는 가변 인터페이스 회로(1338c)를 통해 메인 프로세서(1101)로부터 데이터 또는 요청을 수신할 수 있다.
스토리지 장치들(1303a, 1303b, 1303c)은 도 5 내지 도 12를 참조하여 설명된 것들과 유사하게 구성되고 동작할 수 있다. 몇몇 경우, 데이터 경로(P21c 또는 P27c)가 제공되지 않을 수 있고, 스토리지 컨트롤러들(1333a, 1333b, 1333c)은 양 방향 통신을 지원할 수 있다. 도 15는 도 14의 스토리지 장치(1303a)와 관련되는 구성을 보여주지만, 도 13의 스토리지 장치(1302a) 역시 도 5 내지 도 12 및 도 15를 참조하여 설명된 것들과 유사한 방식으로 채용될 수 있음이 잘 이해될 것이다.
인터페이스 회로들(1337a, 1337b, 1337c) 각각은 메인 프로세서(1101) 또는 다운스트림 포트로 연결될 수 있다. 인터페이스 회로들(1337a, 1337b, 1337c)은 종단 동작 모드로 동작할 수 있다. 가변 인터페이스 회로(1338c)는 메인 프로세서(1101)로 연결될 수 있고, 따라서 종단 동작 모드로 동작할 수 있다. 가변 인터페이스 회로(1338c)가 종단 동작 모드로 동작함에 따라, 스토리지 장치(1303c)의 제 1 포트는 다운스트림 포트로 이해될 수 있다.
가변 인터페이스 회로들(1338a, 1338b)은 각각 스토리지 장치들(1303b, 1303c)로 연결될 수 있다. 가변 인터페이스 회로들(1338a, 1338b) 각각은 외부 스토리지 장치와의 통신을 지원하기 위해 스위치 동작 모드로 동작할 수 있다. 스위치 동작 모드에서, 가변 인터페이스 회로들(1338a, 1338b)은 루트 컴플렉스 및/또는 스위치의 기능을 제공하여 데이터 교환을 관리할 수 있다. 가변 인터페이스 회로들(1338a, 1338b)이 스위치 동작 모드로 동작함에 따라, 스토리지 장치들(1303a, 1303b) 각각의 제 1 포트는 업스트림(Upstream) 포트로 이해될 수 있다.
도 15는 스토리지 장치들(1303a, 1303b, 1303c) 각각이 하나의 가변 인터페이스 회로를 포함하는 것을 보여준다. 몇몇 실시 예에서, 스토리지 장치들(1303a, 1303b, 1303c) 각각이 두 개의 가변 인터페이스 회로를 포함할 수 있다. 예로서, 스토리지 장치(1303a)의 인터페이스 회로(1337a) 역시 가변 인터페이스 회로로 구현될 수 있다. 이 경우, 인터페이스 회로(1337a) 역시 메인 프로세서(1101)와의 통신은 물론 외부 스토리지 장치와의 통신도 지원할 수 있고, 따라서 스토리지 장치(1303a)의 연결에 대한 유연성이 향상될 수 있다.
도 16은 도 15의 가변 인터페이스 회로의 예시적인 동작을 설명하는 흐름도이다.
스토리지 장치로 전력이 공급되고 스토리지 장치가 켜짐에 따라, 스토리지 장치는 구성을 초기화할 수 있다(S110). 예로서, 스토리지 장치는 부팅 동작 동안 구성 요소들의 상태, 외부 장치로의 연결 상태, 설정 값 등을 인식하고 구성할 수 있다.
이후, 스토리지 장치는 연결된 외부 장치와 링크 업(Linkup) 상태를 설정할 수 있다(S120). 링크 업 상태는 상대방 장치를 인식하고 상대방 장치와 통신하기 위한 환경을 구성하기 위해 제공될 수 있다. 링크 업 상태를 설정하기 위해, 스토리지 장치는 스토리지 장치의 정보(예컨대, 장치 유형, 통신 성능, 송신/수신 회로의 구성 등)를 외부 장치로 제공할 수 있고, 외부 장치로부터 외부 장치의 정보를 수신할 수 있다.
링크 업 상태에 따라, 스토리지 장치는 연결된 외부 장치의 정보를 획득할 수 있다(S130). 예로서, 스토리지 장치(1303a)는 가변 인터페이스 회로(1338a)를 통해 연결되는 외부 장치가 다른 스토리지 장치(1303b)임을 인식할 수 있고, 스토리지 장치(1303c)는 가변 인터페이스 회로(1338c)를 통해 연결되는 외부 장치가 메인 프로세서(1101)임을 인식할 수 있다. 몇몇 실시 예에서, 스토리지 장치는 링크 업 상태와 무관하게 추가 핀(예컨대, GPIO(General Purpose Input/Output) 핀)을 통해 외부 장치의 유형을 인식할 수 있다.
스토리지 장치는 연결된 외부 장치의 정보에 기초하여 인터페이스 회로의 동작 모드를 선택할 수 있다(S140). 예로서, 스토리지 컨트롤러(1333a)는 다른 스토리지 장치(1303b)로의 연결에 응답하여 가변 인터페이스 회로(1338a)를 스위치 동작 모드로 동작시킬 수 있고, 스토리지 컨트롤러(1333c)는 메인 프로세서(1101)로의 연결에 응답하여 가변 인터페이스 회로(1338c)를 종단 동작 모드로 동작시킬 수 있다.
도 17은 도 15의 가변 인터페이스 회로의 예시적인 동작을 설명하는 흐름도이다.
예로서, 가변 인터페이스 회로는 먼저 스위치 동작 모드로 동작할 것을 시도할 수 있다. 시도된 스위치 동작 모드에서, 가변 인터페이스 회로는 테스트 신호를 송신할 수 있다(S210). 테스트 신호는 외부 장치가 가변 인터페이스 회로로 연결되었는지 여부 및 외부 장치의 유형을 식별하는 데에 적합하도록 구성될 수 있다. 다른 예로서, 가변 인터페이스 회로는 먼저 종단 동작 모드로 동작할 것을 시도하여 테스트 신호를 송신할 수 있다.
가변 인터페이스 회로 또는 스토리지 컨트롤러는 테스트 신호에 대응하는 응답이 수신되는지 여부를 판별할 수 있다(S220). 응답이 수신되지 않는 경우(S220의 No), 이는 가변 인터페이스 회로가 외부 장치로 연결되지 않음을 나타낼 수 있다. 이 경우, 가변 인터페이스 회로는 전력 소모를 줄이기 위해 종단 동작 모드로 동작하거나 턴-오프(Turn-off)될 수 있다(S240). 턴-오프는 전력이 공급됨이 없이 의도된 기능 또는 동작이 수행되지 않는 상태를 의미할 수 있다.
응답이 수신되는 경우(S220의 Yes), 이는 가변 인터페이스 회로가 외부 장치로 연결됨을 나타낼 수 있다. 예로서, 종단 장치(예컨대, 스토리지 장치)로부터의 응답은 호스트(예컨대, 메인 프로세서(1101))로부터의 응답과 상이하도록 구현될 수 있다. 이 경우, 가변 인터페이스 회로 또는 스토리지 컨트롤러는 응답에 대응하는 외부 장치의 유형을 판별(예컨대, 응답이 종단 장치와 관련되는지 또는 호스트와 관련되는지 판별)할 수 있다(S230).
응답이 종단 장치와 관련되는 경우(S230의 Yes), 가변 인터페이스 회로는 스위치 동작 모드로 동작할 수 있다(S250). 예로서, 가변 인터페이스 회로(1338a)는 스토리지 장치(1303b)로부터의 응답에 기초하여 스위치 동작 모드에서 루트 컴플렉스 및/또는 스위치의 동작을 제공할 수 있다.
응답이 호스트와 관련되는 경우(S230의 No), 가변 인터페이스 회로는 종단 동작 모드로 동작할 수 있다(S260). 예로서, 가변 인터페이스 회로(1338c)는 메인 프로세서(1101)로부터의 응답에 기초하여 종단 동작 모드에서 종단 장치의 통신을 지원할 수 있다.
도 18은 도 1의 스토리지 장치들(1300a, 1300b, 1300c)과 관련되는 예시적인 구성을 보여주는 블록도이다.
몇몇 실시 예에서, 스토리지 장치들(1300a, 1300b, 1300c)은 스토리지 장치들(1304a, 1301b, 1301c, 1304d, 1304e)을 포함할 수 있다. 도 5의 예시적인 구성과 유사하게, 스토리지 장치들(1304a, 1301b, 1301c)은 서로 연결되어 피어-투-피어 방식으로 통신할 수 있다.
예로서, 피어-투-피어 관리기(1357a)는 세 개의 다운스트림 포트를 포함할 수 있다. 세 개의 다운스트림 포트 중 둘은 각각 스토리지 컨트롤러들(1331a, 1331b)로 연결될 수 있다. 세 개의 다운스트림 포트 중 다른 하나는 스토리지 장치(1304d)의 스토리지 컨트롤러(1331d)로 연결될 수 있다.
스토리지 장치들(1304a, 1301b, 1301c) 사이의 연결과 유사하게, 스토리지 장치들(1304a, 1304d, 1304e)은 서로 연결되어 피어-투-피어 방식으로 통신할 수 있다. 피어-투-피어 관리기(1350d)는 두 개의 다운스트림 포트를 통해 스토리지 컨트롤러들(1331d, 1331e)로 연결될 수 있다. 피어-투-피어 관리기(1350e)는 두 개의 다운스트림 포트를 통해 스토리지 컨트롤러(1331e) 및 메인 프로세서(1101)로 연결될 수 있다.
피어-투-피어 관리기들(1357a, 1350b, 1350c, 1350d, 1350e)은 데이터 흐름을 관리할 수 있고, 메인 프로세서(1101)에 의해 요청되는 전체 연산을 분산하여 수행할 수 있다. 각 피어-투-피어 관리기에 포함되는 다운스트림 포트들의 개수에 따라 스토리지 장치들 사이의 연결이 다양하게 변경 또는 수정될 수 있음이 잘 이해될 것이다. 이러한 변경 또는 수정은 도 13 내지 도 15를 참조하여 설명된 예시적인 구성들에 대해서도 유사하게 적용될 수 있다.
도 19는 도 1의 전자 시스템(1000)과 관련되는 예시적인 구현을 보여주는 개념도이다.
예로서, 전자 시스템(1000)은 서버(1000c)로 구현될 수 있다. 스토리지 장치들(1300a, 1300b, 1300c)은 듀얼-포트의 구조로 구현될 수 있고, 서버(1000c)에 연결 또는 장착될 수 있다.
스토리지 장치(1300a)의 커넥터(1390a)는 케이블(P21d) 및 커넥터(1007a)를 통해 백플레인(Backplane)(1007)으로 연결될 수 있다. 도 19는 케이블(P21d)을 통한 연결을 보여주지만, 몇몇 실시 예에서 커넥터(1390a)는 커넥터(1007a)로 직접 연결될 수 있다.
스토리지 장치(1300a)의 커넥터(1395a)는 케이블(P22d)을 통해 스토리지 장치(1300b)의 커넥터(1390b)로 연결될 수 있다. 스토리지 장치(1300b)의 커넥터(1395b)는 케이블(P24d)을 통해 스토리지 장치(1300c)의 커넥터(1390c)로 연결될 수 있다. 스토리지 장치(1300c)의 커넥터(1395c)는 케이블(P27d) 및 커넥터(1007c)를 통해 백플레인(1007)으로 연결될 수 있고, 몇몇 경우 백플레인(1007)으로 연결되지 않을 수 있다.
이러한 방식으로, 스토리지 장치들(1300a, 1300b, 1300c)은 피어-투-피어 방식으로 서로 통신할 수 있다. 스토리지 장치들(1300a, 1300b, 1300c) 사이의 피어-투-피어 연결은 백플레인(1007)으로부터 완전히 분리될 수 있다. 따라서, 메인 프로세서(1101)는 스토리지 장치들(1300a, 1300b, 1300c) 사이의 통신에 개입하지 않을 수 있다.
메인 프로세서(1101)는 도전성 라인들(L21)을 통해 백플레인(1007)으로 연결될 수 있고, 따라서 스토리지 장치(1300a)와 통신할 수 있다. 메인 프로세서(1101)는 도전성 라인들(L27)을 통해 스토리지 장치(1300c)와 통신할 수 있고, 몇몇 경우 도전성 라인들(L27)이 제공되지 않을 수 있다.
위 설명들은 본 발명을 구현하기 위한 예시적인 구성들 및 동작들을 제공하도록 의도된다. 본 발명의 기술 사상은 위에서 설명된 실시 예들뿐만 아니라, 위 실시 예들을 단순하게 변경하거나 수정하여 얻어질 수 있는 구현들도 포함할 것이다. 또한, 본 발명의 기술 사상은 위에서 설명된 실시 예들을 앞으로 용이하게 변경하거나 수정하여 달성될 수 있는 구현들도 포함할 것이다.
1000 : 전자 시스템

Claims (20)

  1. 스토리지 장치에 있어서,
    상기 스토리지 장치의 제 1 포트로 연결되는 FPGA(Field Programmable Gate Array) 보드; 및
    상기 FPGA 보드로 연결되는 제 1 인터페이스 회로, 및 상기 스토리지 장치의 제 2 포트로 연결되는 제 2 인터페이스 회로를 포함하는 스토리지 컨트롤러를 포함하되,
    상기 제 1 포트 및 상기 제 2 포트 중 적어도 하나의 포트는 상기 스토리지 장치 외부의 다른 스토리지 장치로 연결되도록 구성되고,
    상기 FPGA 보드는 상기 제 1 포트와 상기 제 1 인터페이스 회로 사이에 배치되고, 상기 제 1 포트가 상기 다른 스토리지 장치로 연결되는 경우, 상기 FPGA 보드는 호스트의 개입 없이 상기 스토리지 컨트롤러와 상기 다른 스토리지 장치 사이에서 피어-투-피어(Peer-to-peer) 방식으로 데이터를 전달하기 위한 경로를 제공하도록 구성되는 스토리지 장치.
  2. 제 1 항에 있어서,
    상기 스토리지 장치는 상기 제 1 포트 및 상기 제 2 포트를 통해 데이터를 수신하거나 출력하도록 구성되는 듀얼-포트 SSD(Dual-port Solid State Drive)를 포함하고,
    상기 FPGA 보드는 상기 듀얼-포트 SSD의 세트 내부에서 상기 스토리지 컨트롤러와 별개로 구현되는 스토리지 장치.
  3. 제 1 항에 있어서,
    상기 제 1 포트 및 상기 제 2 포트 중 상기 다른 스토리지 장치로 연결되지 않는 포트는 상기 호스트로 연결되도록 구성되는 스토리지 장치.
  4. 제 1 항에 있어서,
    상기 제 1 포트가 상기 다른 스토리지 장치로 연결되는 경우, 상기 스토리지 컨트롤러는,
    상기 제 2 포트 및 상기 제 2 인터페이스 회로를 통해 상기 스토리지 장치 및 상기 다른 스토리지 장치로 지시되는 요청을 수신하고,
    상기 요청에 응답하여, 상기 스토리지 장치에 대해 요청되는 동작을 수행하고, 상기 제 1 인터페이스 회로를 통해 상기 다른 스토리지 장치에 대해 요청되는 동작과 관련되는 데이터를 상기 FPGA 보드와 교환하도록 구성되는 스토리지 장치.
  5. 제 4 항에 있어서,
    상기 FPGA 보드는, 상기 스토리지 컨트롤러와 교환되는 상기 데이터에 기초하여, 상기 제 1 포트를 통해 상기 다른 스토리지 장치로 데이터를 출력하거나 상기 제 1 포트를 통해 상기 다른 스토리지 장치로부터 데이터를 수신하도록 더 구성되는 스토리지 장치.
  6. 제 1 항에 있어서,
    상기 FPGA 보드는 상기 스토리지 컨트롤러와 상기 제 1 포트 사이에서 데이터 흐름을 관리하도록 구성되는 내부 루트 컴플렉스(Internal Root Complex) 회로를 포함하는 스토리지 장치.
  7. 제 1 항에 있어서,
    상기 FPGA 보드는 상기 스토리지 컨트롤러로부터 수신되는 데이터를 가공하여 상기 제 1 포트를 통해 출력될 데이터를 생성하거나 상기 제 1 포트를 통해 수신되는 데이터를 가공하여 상기 스토리지 컨트롤러로 제공될 데이터를 생성하도록 구성되는 연산 로직 회로를 포함하는 스토리지 장치.
  8. 스토리지 장치에 있어서,
    상기 스토리지 장치의 제 1 포트로 연결되는 제 1 인터페이스 회로, 및 상기 스토리지 장치의 제 2 포트로 연결되는 제 2 인터페이스 회로를 포함하는 스토리지 컨트롤러; 및
    상기 스토리지 컨트롤러의 제어에 따라 데이터를 저장하거나 출력하도록 구성되는 메모리 장치를 포함하되,
    상기 제 1 인터페이스 회로는 상기 제 1 포트가 상기 스토리지 장치 외부의 다른 장치로 연결되는지 여부 및 상기 제 1 포트로 연결되는 상기 다른 장치의 유형에 기초하여 복수의 동작 모드로 동작하도록 구성되고,
    상기 제 1 포트가 상기 스토리지 장치 외부의 다른 스토리지 장치로 연결되는 경우, 상기 스토리지 컨트롤러는 상기 제 1 포트로 연결되는 상기 다른 장치의 상기 유형을 인식하고, 상기 유형에 기반하여 상기 복수의 동작 모드 중에서 선택되는 동작 모드로 동작하고, 호스트의 개입 없이 상기 제 1 포트를 통해 상기 다른 스토리지 장치와 피어-투-피어 방식으로 데이터를 교환하도록 구성되는 스토리지 장치.
  9. 제 8 항에 있어서,
    상기 복수의 동작 모드는 종단(Endpoint) 장치의 동작과 관련되는 제 1 동작 모드 및 상기 다른 스토리지 장치와의 통신과 관련되는 제 2 동작 모드를 포함하는 스토리지 장치.
  10. 제 9 항에 있어서,
    상기 제 1 포트가 상기 다른 스토리지 장치로 연결되는 경우, 상기 제 1 인터페이스 회로는 상기 제 2 동작 모드로 동작하고, 상기 스토리지 컨트롤러는 상기 제 1 인터페이스 회로 및 상기 제 1 포트를 통해 상기 다른 스토리지 장치로 데이터를 출력하거나 상기 제 1 포트 및 상기 제 1 인터페이스 회로를 통해 상기 다른 스토리지 장치로부터 데이터를 수신하도록 더 구성되는 스토리지 장치.
  11. 제 9 항에 있어서,
    상기 제 1 포트가 상기 호스트로 연결되는 경우, 상기 제 1 인터페이스 회로는 상기 제 1 동작 모드로 동작하고, 상기 스토리지 컨트롤러는 상기 제 1 인터페이스 회로 및 상기 제 1 포트를 통해 상기 호스트로 데이터를 출력하거나 상기 제 1 포트 및 상기 제 1 인터페이스 회로를 통해 상기 호스트로부터 데이터를 수신하도록 더 구성되는 스토리지 장치.
  12. 제 9 항에 있어서,
    상기 제 1 포트가 상기 스토리지 장치 외부의 다른 장치로 연결되지 않는 경우, 상기 제 1 인터페이스 회로는 상기 제 1 동작 모드로 동작하거나 턴-오프(Turn-off)되는 스토리지 장치.
  13. 제 8 항에 있어서,
    상기 제 1 포트가 상기 다른 스토리지 장치로 연결되는 경우, 상기 스토리지 컨트롤러는,
    상기 제 2 포트 및 상기 제 2 인터페이스 회로를 통해 상기 스토리지 장치 및 상기 다른 스토리지 장치로 지시되는 요청을 수신하고,
    상기 요청에 응답하여, 상기 스토리지 장치에 대해 요청되는 동작을 수행하고, 상기 제 1 인터페이스 회로 및 상기 제 1 포트를 통해 상기 다른 스토리지 장치에 대해 요청되는 동작과 관련되는 데이터를 출력하거나 수신하도록 더 구성되는 스토리지 장치.
  14. 제 8 항에 있어서,
    상기 스토리지 컨트롤러는 상기 제 1 포트를 통해 수신되는 데이터를 가공하여 상기 제 2 포트를 통해 출력될 데이터를 생성하거나 상기 제 2 포트를 통해 수신되는 데이터를 가공하여 상기 제 1 포트를 통해 출력될 데이터를 생성하도록 구성되는 내장(Embedded) FPGA를 더 포함하는 스토리지 장치.
  15. 스토리지 장치에 있어서,
    상기 스토리지 장치의 제 1 포트와 상기 스토리지 장치의 제 2 포트 사이의 스토리지 컨트롤러; 및
    상기 스토리지 컨트롤러와 상기 제 1 포트 사이에 배치되고, 상기 스토리지 컨트롤러 또는 상기 제 2 포트로부터 수신되는 데이터에 기초하여 가공 연산을 수행하여 가공된 데이터를 생성하도록 구성되는 연산 로직 회로를 포함하되,
    상기 제 1 포트가 상기 스토리지 장치 외부의 다른 스토리지 장치로 연결되는 경우, 상기 스토리지 장치는 호스트의 개입 없이 상기 제 1 포트를 통해 상기 다른 스토리지 장치로 상기 가공된 데이터를 출력하도록 구성되는 스토리지 장치.
  16. 제 15 항에 있어서,
    상기 연산 로직 회로에 의해 수행되는 상기 가공 연산은 상기 호스트에 의해 요청되는 전체 연산의 제 1 부분을 포함하고,
    상기 스토리지 장치는, 상기 다른 스토리지 장치가 상기 가공된 데이터에 기초하여 상기 전체 연산의 제 2 부분을 수행하도록, 상기 다른 스토리지 장치로 상기 가공된 데이터를 출력하도록 더 구성되고,
    상기 제 2 부분은 상기 제 1 부분과 중첩하지 않는 스토리지 장치.
  17. 제 15 항에 있어서,
    상기 가공 연산은 상기 수신되는 데이터와 관련되는 정보를 모니터링하는 연산, 상기 수신되는 데이터에 기반하는 RAID(Redundant Array of Independent Disks) 관련 연산, 및 상기 수신되는 데이터에 기반하는 정규식 검색 연산 중 하나 이상의 연산을 포함하는 스토리지 장치.
  18. 스토리지 장치에 있어서,
    상기 스토리지 장치의 제 1 포트와 상기 스토리지 장치의 제 2 포트 사이의 스토리지 컨트롤러; 및
    상기 스토리지 컨트롤러의 제어에 따라 데이터를 저장하거나 출력하도록 구성되는 메모리 장치를 포함하되,
    상기 제 1 포트가 상기 스토리지 장치 외부의 다른 스토리지 장치로 연결되는 경우, 상기 스토리지 장치는 상기 메모리 장치에 저장된 제 1 데이터 및 상기 제 2 포트를 통해 수신되는 제 2 데이터 중 적어도 하나의 데이터에 기초하여 생성되는 제 3 데이터를 호스트의 개입 없이 상기 제 1 포트를 통해 상기 다른 스토리지 장치로 출력하도록 구성되는 스토리지 장치.
  19. 제 1 포트 및 제 2 포트를 포함하는 제 1 스토리지 장치; 및
    제 3 포트를 포함하는 제 2 스토리지 장치를 포함하되,
    상기 제 2 포트는 상기 제 3 포트로 연결되고, 상기 제 1 스토리지 장치는 호스트의 개입 없이 상기 제 2 포트 및 상기 제 3 포트를 통해 상기 제 2 스토리지 장치와 통신하도록 구성되고,
    상기 제 1 스토리지 장치는 상기 제 1 포트를 통해 수신되는 제 1 데이터 및 상기 제 1 스토리지 장치에 저장된 제 2 데이터 중 적어도 하나의 데이터에 기초하여 상기 제 2 포트를 통해 제 3 데이터를 출력하도록 더 구성되고,
    상기 제 2 스토리지 장치는 상기 제 3 포트를 통해 수신되는 상기 제 3 데이터 및 상기 제 2 스토리지 장치에 저장된 제 4 데이터 중 적어도 하나의 데이터에 기초하여 제 5 데이터를 생성하도록 구성되고,
    상기 호스트의 요청에 대응하는 연산 결과는 상기 제 5 데이터에 기초하여 상기 호스트로 제공되는 스토리지 시스템.
  20. 제 19 항에 있어서,
    상기 연산 결과를 얻기 위해 상기 호스트에 의해 요청되는 전체 연산은 상기 제 1 스토리지 장치 및 상기 제 2 스토리지 장치 상에서 분산하여 수행되는 스토리지 시스템.
KR1020180079419A 2017-11-17 2018-07-09 호스트의 개입 없이 외부 장치와 피어-투-피어 통신을 수행하는 스토리지 장치 KR102527832B1 (ko)

Priority Applications (5)

Application Number Priority Date Filing Date Title
DE102018125297.8A DE102018125297A1 (de) 2017-11-17 2018-10-12 Speichereinrichtung, die Peer-to-Peer-Kommunikation mit externer Einrichtung ohne Eingriff eines Host durchführt
US16/170,264 US10628364B2 (en) 2017-11-17 2018-10-25 Dual port storage device performing peer-to-peer communication with external device without intervention of host
CN201811366495.4A CN109799952B (zh) 2017-11-17 2018-11-16 与外部设备执行对等通信而无需主机干预的存储设备
US16/853,373 US11055251B2 (en) 2017-11-17 2020-04-20 Storage device performing peer-to-peer communication with external device without intervention of host
US17/343,215 US11816055B2 (en) 2017-11-17 2021-06-09 Storage device performing peer-to-peer communication with external device without intervention of host

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR1020170154281 2017-11-17
KR20170154281 2017-11-17

Publications (2)

Publication Number Publication Date
KR20190056951A KR20190056951A (ko) 2019-05-27
KR102527832B1 true KR102527832B1 (ko) 2023-05-03

Family

ID=66679534

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180079419A KR102527832B1 (ko) 2017-11-17 2018-07-09 호스트의 개입 없이 외부 장치와 피어-투-피어 통신을 수행하는 스토리지 장치

Country Status (1)

Country Link
KR (1) KR102527832B1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210069481A (ko) 2019-12-03 2021-06-11 삼성전자주식회사 메모리 컨트롤러를 포함하는 스토리지 장치 및 비휘발성 메모리 시스템과 이의 동작 방법
US11734207B1 (en) * 2022-02-02 2023-08-22 Western Digital Technologies, Inc. Dynamic port allocation in PCIe bifurcation system

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016083506A1 (en) * 2014-11-28 2016-06-02 Siemens Vai Metals Technologies Gmbh Method for casting metal strip with crown control

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
미국공개특허 제2017-0091127호(2017.03.30.) 1부.*

Also Published As

Publication number Publication date
KR20190056951A (ko) 2019-05-27

Similar Documents

Publication Publication Date Title
CN109799952B (zh) 与外部设备执行对等通信而无需主机干预的存储设备
CN107643996B (zh) 包括单端口存储控制器的基于pci express的双端口存储盒
US11157200B2 (en) Communicating over portions of a communication medium
KR20200010139A (ko) 스토리지 시스템 및 스토리지 디바이스의 동작 모드 선택 방법
US9442877B2 (en) Storage device
US20240012777A1 (en) Computer system and a computer device
JP2013541742A (ja) 動的マルチリンク編集パーティション分割システム及び方法
TW201945955A (zh) 適應性介面儲存裝置以及儲存系統
KR102527832B1 (ko) 호스트의 개입 없이 외부 장치와 피어-투-피어 통신을 수행하는 스토리지 장치
WO2016160731A1 (en) Methods and apparatus for io, processing and memory bandwidth optimization for analytics systems
KR20190112626A (ko) 어레이 내에서 솔리드 스테이트 드라이브들을 자율적으로 관리하는 메커니즘
CN111684421B (zh) 服务器系统
CN111684765B (zh) 服务器系统
US20160026589A1 (en) Adaptive Circuit Board Assembly and Flexible PCI Express Bus
US20210208899A1 (en) Data processing system and method for configuring and operating a data processing system
CN114661654A (zh) 访问处理装置和方法、处理设备、电子设备和存储介质
CN106155573B (zh) 用于存储设备扩展的方法、装置以及扩展的存储设备
CN104618121A (zh) 交换器及服务器系统
JP6841876B2 (ja) プロセッサモジュールのフレキシブル接続
US20230222062A1 (en) Apparatus and method for cache-coherence
US9336174B1 (en) Dynamic interface model
US20240004439A1 (en) Memory module connection interface for power delivery
US20240006791A1 (en) Cxl memory expansion riser card
US20240008181A1 (en) Memory module connection interface for power delivery
CN117421268A (zh) 一种互联系统、设备及网络

Legal Events

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