KR20200078382A - 개시자 모드를 갖는 솔리드-스테이트 드라이브 - Google Patents
개시자 모드를 갖는 솔리드-스테이트 드라이브 Download PDFInfo
- Publication number
- KR20200078382A KR20200078382A KR1020190171199A KR20190171199A KR20200078382A KR 20200078382 A KR20200078382 A KR 20200078382A KR 1020190171199 A KR1020190171199 A KR 1020190171199A KR 20190171199 A KR20190171199 A KR 20190171199A KR 20200078382 A KR20200078382 A KR 20200078382A
- Authority
- KR
- South Korea
- Prior art keywords
- solid
- state drive
- command
- request
- ssd
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
- G06F13/1642—Handling requests for interconnection or transfer for access to memory bus based on arbitration with request queuing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
- G06F13/1652—Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
- G06F13/1657—Access to multiple memories
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4204—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
- G06F13/4221—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
- G06F13/4295—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus using an embedded synchronisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0647—Migration mechanisms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0653—Monitoring storage devices or systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0026—PCI express
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0688—Non-volatile semiconductor memory arrays
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)
- Multi Processors (AREA)
- Computer And Data Communications (AREA)
- Vehicle Body Suspensions (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
디지털방식으로 인코딩된 지속적인 데이터를 저장하도록 구성된 솔리드-스테이트 드라이브가 개시자 모드에서 동작할 수 있다. 개시자 모드에서 동작하는 경우, 솔리드-스테이트 드라이브는 또 하나의 다른 솔리드-스테이트 드라이브가 데이터 저장 관련 절차를 수행하도록 하는 커맨드 또는 요청의 발생 및 발행을 개시시킬 수 있다. 솔리드-스테이트 드라이브에 의해 발생되는 커맨드 또는 요청은 호스트 프로세서와 같은 중간 디바이스를 통과하는 통신들 없이 또 하나의 다른 솔리드-스테이트 드라이브에 직접적으로 전달될 수 있다.
Description
본 개시내용은, 미국 가출원 일련번호 제62/783,060호(출원일: 2018년 12월 20일, 제목: "SOLID-STATE DRIVE (SSD) INITIATOR MODE")의 우선권의 혜택을 주장하며, 이러한 특허문헌의 내용들은 그 전체가 참조로 본 명세서에 통합된다.
본 개시내용은 일반적으로 컴퓨터 및 전자 네트워크 시스템들에 대한 데이터 저장의 분야에 관한 것이고, 더 구체적으로 데이터 저장 디바이스(data storage device)들에 대한 동작 모드(operating mode)들에 관한 것이다.
솔리드-스테이트 드라이브(Solid-State Drive, SSD)는 디지털방식으로 인코딩된 지속적인 데이터(persistent digitally encoded data)를 저장하기 위해 NAND(Not-AND) 또는 NOR(Not-OR) 비-휘발성 메모리와 같은 비-휘발성 메모리를 사용하는 데이터 저장 디바이스이다. SSD는 하드 디스크 드라이브(Hard Disk Drive, HHD)(즉, 빠르게 회전하는 플랫터(platter)들의 자성 표면들 상에 디지털방식으로 인코딩된 지속적인 데이터를 저장하는 디바이스)를 에뮬레이트(emulate)하도록 구성될 수 있고, 많은 응용분야들에서 하드 디스크 드라이브(HHD)를 대체한다.
호스트(host)는 전형적으로 SSD에 결합되어 SSD로부터 데이터를 판독하고 SSD에 데이터를 기입하고, 그리고 SSD로부터 데이터를 소거한다. 호스트는 인터페이스 스위치(interface switch)와 같은 중간 디바이스(intermediary device)를 통해 SSD에 결합될 수 있다. 데이터의 판독, 기입 및 소거를 용이하게 하기 위해, SSD는 호스트와 통신하기 위한 호스트 인터페이스, 그리고 SSD에 포함된 비-휘발성 메모리를 관리하기 위한 비-휘발성 메모리 인터페이스를 갖는 SSD 제어기를 포함할 수 있다. 호스트 인터페이스는 호스트와 통신하기 위한 어드레싱(addressing), 데이터 버스(data bus), 및 제어를 포함하고, 그리고 직렬 고급 기술 결합(Serial Advanced Technology Attachment, SATA), 직렬 결합 소형 컴퓨터 시스템 인터페이스(Serial Attached Small Computer System Interface, SAS), 비-휘발성 메모리 익스프레스(Non-Volatile Memory express, NVMe) 또는 범용 직렬 버스(Universal Serial Bus, USB)와 같은 데이터 통신 프로토콜(data communication protocol)을 따르며, 반면 비-휘발성 메모리 인터페이스는 비-휘발성 메모리를 관리하기 위한 어드레싱, 데이터 버스, 및 제어를 포함하고, 그리고 NAND 비-휘발성 메모리에 대한 개방형 NAND 플래시 인터페이스(Open NAND Flash Interface, ONFI)와 같은 데이터 통신 프로토콜을 따른다.
동작시, 호스트는 일반적으로 SSD에 저장된 데이터에 관해 기입, 판독, 및 소거 동작을 각각 수행하기 위해, 기입, 판독, 및 소거 요청들과 같은, 데이터 저장 서비스들에 대한 요청들을 발행한다. 기입 동작을 수행하기 위해, 호스트는 인터페이스 스위치(interface switch)를 통해 다양한 인스턴스(instance)들에서 SSD에 기입 요청을 보낸다. 기입 요청은 기입할 데이터, 그리고 데이터를 기입할 곳인 데이터 어드레스를 표시한다. 기입 요청은 SSD의 호스트 인터페이스에서 수신된다. 그 다음에, SSD 제어기는 비-휘발성 메모리 인터페이스를 통해 데이터 어드레스에 근거하여 비-휘발성 메모리 내에 데이터를 기입하기 위해 하드웨어 및/또는 펌웨어를 실행한다. 판독 동작을 수행하기 위해, 호스트는 인터페이스 스위치를 통해 일부 인스턴스들에서 SSD에 판독 요청을 보낸다. 판독 요청은 판독할 데이터 어드레스를 표시한다. 판독 요청은 SSD의 호스트 인터페이스에서 수신된다. SSD 제어기는 데이터 어드레스에 근거하여 비-휘발성 메모리 내의 데이터를 판독하기 위해 하드웨어 및/또는 펌웨어를 실행한다. SSD 제어기는 비-휘발성 메모리 인터페이스를 통해 비-휘발성 메모리로부터 판독된 데이터를 수신하고, 판독된 데이터를 호스트 인터페이스를 통해 호스트에 제공한다. 소거 동작을 수행하기 위해, 호스트는 인터페이스 스위치를 통해 일부 인터페이스들에서 SSD에 소거 요청을 보낸다. 소거 요청은 소거할 데이터 어드레스를 표시한다. 소거 요청은 SSD의 호스트 인터페이스에서 수신된다. SSD 제어기는 데이터 어드레스에 근거하여 비-휘발성 메모리 내에서 소거 동작을 수행하기 위해 하드웨어 및/또는 펌웨어를 실행한다.
본 개시내용은 하나 이상의 요청(request)들 및 커맨드(command)들을 발생(generate) 및 개시(initiate)시키도록 구성되는 솔리드-스테이트 드라이브(Solid-State Drive, SSD)에 관한 것으로, 여기서 하나 이상의 요청들 및 커맨드들은 하나 이상의 피어 SSD 디바이스들(peer SSD devices) 간에 직접적으로 전달될 수 있으며, 이러한 요청들 및 커맨드들이 호스트 디바이스를 통해 SSD 디바이스들 간에 전달될 필요가 없다. 본 개시내용에서 설명되는 실시예들에서, SSD는 개시자 모드(initiator mode)에서 동작할 수 있고, 그리고 요청들 및/또는 커맨드들을 발생시킬 수 있고, 이러한 요청들 및/또는 커맨드들을 SSD들이 또한 결합될 수 있는 호스트 디바이스의 사용을 포함하지 않는 직접적인 결합들을 사용하여 하나 이상의 다른 SSD들에게 발행할 수 있다. 이러한 개시 그리고 SSD 디바이스들 간의 요청들 및 커맨드들의 직접적인 결합은, 개별적인 SSD 디바이스들 간에 전달되는 요청들 및/또는 커맨드들의 핸들링(handling)의 일부로서 호스트 디바이스에 의해 이러한 요청들 및/또는 커맨드들이 복제(replicate)될 필요성을 제거할 수 있고, 그리고 본 개시내용에서 설명되는 바와 같은 직접적인 결합을 사용하는 대신, 만약 요청들 및/또는 커맨드들이 호스트 디바이스를 통해 SSD 디바이스들 간에 전달된다면 통상적으로 필요하게 되는 통신 표준들에 대한 하나의 프로토콜 혹은 포맷으로부터 다른 프로토콜 혹은 포맷으로 요청 및/또는 커맨드들을 변환할 필요성을 또한 제거할 수 있다.
본 명세서에서 설명되는 시스템 및 기법들의 실시형태에 따르면, 방법이 제공되고, 이러한 방법은, 제 1 솔리드-스테이트 드라이브(solid-state drive)에서 그리고 제 2 솔리드-스테이트 드라이브에서, 제 1 솔리드-스테이트 드라이브를 제 2 솔리드-스테이트 드라이브와 결합시키는 상호연결(interconnect)을 통해 제 1 솔리드-스테이트 드라이브와 제 2 솔리드-스테이트 드라이브 간의 직접적인 통신들을 제어하기 위해 구성된 큐(queue)들의 세트를 확립하는 것; 제 1 솔리드-스테이트 드라이브에 의해, 적어도 하나의 커맨드(command) 또는 요청(request)의 발생을 개시(initiating)시키는 것; 그리고 제 1 솔리드-스테이트 드라이브에 의해, 적어도 하나의 커맨드 또는 요청이 제 1 솔리드-스테이트 드라이브와 제 2 솔리드-스테이트 드라이브 간에 직접적으로 전달되도록 상호연결을 통해 적어도 하나의 커맨드 또는 요청을 구동(driving)시키는 것을 포함한다.
본 명세서에서 설명되는 시스템 및 기법들의 또 하나의 다른 실시형태에 따르면, 명령들을 저장하는 비-일시적 컴퓨터-판독가능 매체가 제공되고, 여기서 명령들은, 하나 이상의 프로세서들에 의해 실행될 때, 하나 이상의 프로세서들로 하여금, 적어도, 제 1 솔리드-스테이트 드라이브에서 그리고 제 2 솔리드-스테이트 드라이브에서, 제 1 솔리드-스테이트 드라이브를 제 2 솔리드-스테이트 드라이브와 결합시키는 상호연결을 통해 제 1 솔리드-스테이트 드라이브와 제 2 솔리드-스테이트 드라이브 간의 직접적인 통신들을 제어하기 위해 구성된 큐들의 세트를 확립하는 것; 제 1 솔리드-스테이트 드라이브에서, 적어도 하나의 커맨드 또는 요청의 발생을 개시시키는 것; 그리고 적어도 하나의 커맨드 또는 요청이 제 1 솔리드-스테이트 드라이브와 제 2 솔리드-스테이트 드라이브 간에 직접적으로 전달되도록 상호연결을 통해 적어도 하나의 커맨드 또는 요청을 구동시키는 것을 행하도록 한다.
본 명세서에서 설명되는 시스템 및 기법들의 또 하나의 다른 실시형태에 따르면, 장치가 제공되고, 이러한 장치는, 솔리드-스테이트 드라이브를 포함하고, 솔리드-스테이트 드라이브는 로컬 프로세서(local processor) 및 메모리 어레이(memory array)를 포함하고, 메모리 어레이는 디지털방식으로 인코딩된 지속적인 데이터를 비-휘발성 메모리 상에 저장하도록 구성되고, 로컬 프로세서는 개시자 모드에서 동작하도록 구성되고, 개시자 모드에서, 로컬 프로세서는 솔리드-스테이트 드라이브에 통신가능하게 결합된 하나 이상의 추가적인 솔리드-스테이트 드라이브들에 상호연결을 통해 직접적으로 전달되는 데이터 저장 절차(data storage procedure)를 위한 커맨드 또는 요청의 발생을 개시시킨다.
도 1은 개시자 모드에서 동작하도록 구성된 솔리드-스테이트 저장 드라이브들을 포함하는 저장 시스템의 예시적인 구성을 예시한다.
도 2는 본 개시내용에서 설명되는 다양한 예들 및 이러한 예들의 임의의 등가물들에 따른 방법의 흐름도이다.
도 3은 본 개시내용 전반에 걸쳐 설명되는 바와 같은 다양한 예들 및 이러한 예들의 임의의 등가물들에 따라 구성될 수 있는 솔리드-스테이트 드라이브의 간략화된 예시적 블록도이다.
예시적 실시예들을 예시할 목적으로 도면들이 존재하며, 하지만 도면들에서 보여지는 구성들 및 수단으로만 실시예들이 한정되는 것은 아님을 이해해야 한다.
도 2는 본 개시내용에서 설명되는 다양한 예들 및 이러한 예들의 임의의 등가물들에 따른 방법의 흐름도이다.
도 3은 본 개시내용 전반에 걸쳐 설명되는 바와 같은 다양한 예들 및 이러한 예들의 임의의 등가물들에 따라 구성될 수 있는 솔리드-스테이트 드라이브의 간략화된 예시적 블록도이다.
예시적 실시예들을 예시할 목적으로 도면들이 존재하며, 하지만 도면들에서 보여지는 구성들 및 수단으로만 실시예들이 한정되는 것은 아님을 이해해야 한다.
본 개시내용은, 하나 이상의 호스트들과 (데이터 저장을 제공하도록 구성된) 솔리드-스테이트 드라이브(SSD)들 사이에 결합되는 스위칭 디바이스(switching device)를 갖는 하나 이상의 호스트들에 제공되는 데이터 저장 서비스들에 관한 예들 및 세부사항들을 제공한다. SSD들은 하나 이상의 호스트들에 의해 만들어져 스위칭 디바이스를 통해 전달되는 데이터 저장 서비스들에 대한 요청들을 수신하는 것, 프로세싱하는 것, 그리고 이에 응답하는 것을 행하도록 구성된다. 추가적으로, SSD들은 그 자체가 요청 개시자(request initiator)들로서 동작하도록 구성되고, 여기서 데이터 저장 서비스들에 대한 요청은 하나 이상의 SSD들 중 하나인 제 1 SSD로부터 발원(originate)될 수 있고, 이 경우 제 1 SSD는 개시자 SSD로서 지칭될 수 있다. 개시자 SSD에 의해 개시된 데이터 저장 서비스(들)에 대한 요청은, SSD들 중 하나인 (타겟 SSD(target SSD)로서 지칭되는) 제 2 SSD로 전달될 수 있고, 제 2 SSD에 의해 수신될 수 있고, 제 2 SSD에 의해 프로세싱될 수 있고, 그리고 제 2 SSD에 의해 응답이 이루어질 수 있는데, 여기서 개시자 SSD와 타겟 SSD 간의 통신들은 중간 디바이스(호스트 프로세서)를 통해 통신할 필요 없이 개시자 SSD와 타겟 SSD를 결합시키는 직접 통신 링크(direct communication link)들을 사용한다. 스위칭 디바이스 혹은 호스트와 같은 중간 디바이스가 요구되지는 않지만, 하나 이상의 중간 디바이스들이, 하나 이상의 SSD들을 결합시키는 연결 방식의 일부로서, 통과 모드(pass through mode)에서 동작할 수 있다. 본 명세서에서 설명되는 원리들은 다른 타입의 저장 디바이스들(예컨대, 하드 디스크 드라이브(Hard Disk Drive, HDD) 또는 하이브리드(hybrid) SSD/HDD 드라이브들)의 성능을 제어하는데 적용될 수 있다.
도 1은 다양한 데이터 저장 서비스들을 호스트에 제공하는 데이터 저장 시스템(100)의 예시적 구성을 예시하며, 동시에 이러한 데이터 저장 시스템(100)은 또한 데이터 저장 서비스들에 대한 커맨드들 또는 요청들, 혹은 데이터 저장 절차의 수행에 대한 커맨드들 또는 요청들의 개시자들로서 동작하도록 구성된 SSD들을 제공하며, 여기서 커맨드들 또는 요청들은, 시스템에 결합된 호스트에 의해 이러한 커맨드들 또는 요청들이 발원될 필요 없이, 그리고 일부 예들에서는 SSD들이 호스트 프로세서와 같은 중간 디바이스를 통해 SSD들 간의 통신을 행할 필요 없이, SSD들 간에 직접적으로 전달된다. 데이터 저장 시스템(100)은 하나 이상의 호스트들(102)(이하에서는 또한 "호스트(102)"로서 지칭됨), 데이터 저장소(136)를 포함하고, 데이터 저장소(136)는 스위칭 디바이스(110)를 통해 하나 이상의 호스트들에 통신가능하게 결합되는 하나 이상의 솔리드-스테이트 드라이브(SSD)들(130, 140, 150)을 포함한다. 하나 이상의 호스트들은 네트워크 상의 사용자들 혹은 다른 노드들에게 정보 리소스들, 서비스들, 및/또는 애플리케이션들을 제공하는 서버로서 작동할 수 있다. 일부 예들에서, 하나 이상의 호스트들은 가상 머신(Virtual Machine, VM)들을 포함할 수 있다. VM은 주변 컴포넌트 상호연결 익스프레스(Peripheral Component Interconnect express, PCIe) 단일 루트 입력/출력 가상화(Single Root Input/Output Virtualization, SR-IOV)를 사용해 호스트 상에 구현될 수 있다. 다양한 예들에서, 하나 이상의 호스트들(102)은 통신 링크(101)를 통해 네트워크(106)에 결합될 수 있는데, 이러한 통신 링크(101)는 예를 들어, 로컬 영역 네트워크(Local Area Network, LAN) 혹은 와이드 영역 네트워크(Wide Area Network, WAN)와 같은 유선 네트워크 링크, 그리고/또는 인터넷과 같은 무선 통신 링크이다. 네트워크(106)는 하나 이상의 다른 디바이스들을 포함할 수 있는데, 예컨대, 하나 이상의 추가적인 호스트들, 인터페이스 스위치들, 그리고/또는 하나 이상의 호스트들(102)에 통신가능하게 결합되는 데이터 저장 시스템들을 포함할 수 있고, 여기서 이러한 추가적인 디바이스들 및 시스템들은 SSD들(130, 140, 및/또는 150) 중 하나 이상의 SSD와 관련된 데이터 저장 서비스들을 요청할 수 있고 수신할 수 있다.
다양한 예들에서, SSD들(130, 140, 및 150) 중 하나 이상은 필요한 기능을 하나 이상의 호스트들(102)이 제공할 수 있게 하기 위해 지속적으로 데이터를 저장할 수 있는 집적 회로(Integrated Circuit, IC) 기반 저장 메커니즘을 포함할 수 있다. SSD들(130, 140, 및 150)은 하드 디스크 드라이브(HDD)와 비교해 더 높은 대역폭(bandwidth) 및 더 낮은 레이턴시(latency)를 제공할 수 있다.
인터페이스 스위치("스위치")(110)는, 하나 이상의 호스트들(102)과 SSD들(130, 140, 및 150) 사이에 위치할 수 있고, 그리고 하나 이상의 호스트들을 이러한 SSD들과 통신가능하게 결합시키도록 구성될 수 있다. 다양한 예들에서, 스위치(110)는 NVMe 커맨드들을 프로세싱하여 하나 이상의 호스트들(102)과 SSD들(130, 140, 및 150) 간의 PCIe 기반 포인트-투-포인트 스위치 연결들(PCIe based point-to-point switch connections)을 제어하도록 구성된 NVMe 스위치이다. 시스템(100)의 일부 예들에서, 모든 SSD는 하나 이상의 호스트들(102)에 대한 자기 자신의 전용 연결을 갖는다. 다양한 예들에서, 스위치(110)는 프로세서 회로(114)를 포함하고, 프로세서 회로(114)는 호스트 인터페이스(112)와, SSD 인터페이스(116)와, 그리고 큐들(118)을 포함하는 메모리에 통신가능하게 결합된다.
프로세서 회로(114)의 예들은, 하나 이상의 컴퓨터 프로세서들(예컨대, 마이크로프로세서들), 그리고 추가적인 회로(예컨대, 관리 프로세서 모듈, 커맨드 프로세서 모듈, 및 데이터 프로세서 모듈 중 하나 이상)를 포함할 수 있다. 일부 예들에서, 호스트 인터페이스는 스위치(110)와 하나 이상의 호스트들(102) 간의 통신을 용이하게 하는 엔드포인트(endpoint)일 수 있는데, 예컨대, PCIe 엔드포인트 클러스터(PCIe endpoint cluster)일 수 있고(하지만, 이러한 것으로만 한정되는 것은 아님), 반면 SSD 인터페이스(일부 예들에서는 PCIe 루트 복합 클러스터(PCIe root complex cluster)일 수 있음)는 스위치(110)와 SSD들(130, 140, 및 150) 간의 통신을 용이하게 한다. 프로세서 회로(114)의 커맨드 프로세서는 하나 이상의 호스트들(102)로부터의 커맨드들을 프로세싱하도록 구성될 수 있다. 이러한 커맨드는 SSD들 중 하나로부터 데이터를 페치(fetch)하여 호스트에 제공하기 위한, 또는 호스트로부터의 데이터를 SSD 내에 저장하기 위한 커맨드(예를 들어, NVMe 커맨드)일 수 있다. 프로세서 회로의 커맨드 프로세서는 커맨드에 태그(tag)를 부가하도록 구성될 수 있다. 태그는 커맨드가 특정 호스트로부터 수신된 것을 표시할 수 있다. 그 다음에 커맨드는 커맨드의 일부로서 특정될 수 있는 SSD들 중 하나의 SSD로 보내진다. 따라서, 스위치(110)는, 호스트(102)와 SSD들(130, 140, 및 150) 간에 전달되는 요청들, 커맨드들, 및/또는 데이터의 적절한 라우팅(routing) 및 핸딩(handing)을 제공하기 위해 수행될 필요가 있는 헤더(header) 및 어드레스(address) 변경들과 같은 추가적인 프로세싱을 제공할 수 있다.
커맨드 또는 요청을 수신함에 응답하여, 이러한 커맨드 또는 요청이 지향됐던 SSD는 PCIe 메모리 판독 요청과 같은 PCIe 메모리 요청을 스위치(110)로 보낼 수 있다. PCIe 메모리 요청은 프로세서 회로(114)의 데이터 프로세서 모듈로 하여금, 호스트와 관련된 커맨드 또는 요청을 수행하기 위해서, PCIe 메모리 요청을 특정된 호스트에 보낼 수 있게 하기 위해 태그를 포함할 수 있다. 관리 프로세서 모듈은 스위치(110)에 대한 관리 기능들을 수행하도록 구성될 수 있다. 예를 들어, 만약 NVMe 혹은 PCIe 트랜잭션(transaction)이 (예를 들어, 에러(error)로 인해, 혹은 PCIe 메모리 요청의 복잡도(complexity)/사이즈(size)로 인해) 커맨드 프로세서 모듈이 수행할 수 있는 것을 따르지 않는다면, 그 기능은 관리 프로세서 모듈로 오프로딩(offloading)될 수 있다. 또 하나의 다른 예로서, 관리 프로세서 모듈은 SSD들(130, 140, 및/또는 150)의 파티션(partition)들을, SSD들과 관련된 예약 액세스(reservation access) 및 네임스페이스(namespace)들에 관하여, 관리할 수 있는다.
다양한 예들에서, 하나 이상의 호스트들(102)은 SSD 액세스를 용이하게 하기 위해 예를 들어, NVMe에 따라 큐 쌍(queue pair)을 구현할 수 있다. 큐 쌍은 제출 큐(Submission Queue, SQ) 및 완료 큐(Completion Queue, CQ)로 이루어질 수 있다. 시스템(100)에 대해 보여지는 바와 같이, 호스트는 제출 큐(105) 및 완료 큐(107)를 포함할 수 있다. 호스트는 또한 관리 큐(management queue)들과 같은 추가적인 큐들도 가질 수 있다. 호스트는, SSD들 내에 저장된 데이터를 페치하기 위한 또는 SSD들에 데이터를 저장하기 위한 데이터 저장 서비스 요청을 포함하는 NVMe 커맨드와 같은 커맨드를 발생시킬 수 있고, 여기서 커맨드는 제출 큐(105) 내에 배치된다. 커맨드는, 화살표(104)에 의해 예시적으로 나타내어진 바와 같이, 호스트로부터 스위치(110)로 전달된다.
커맨드가 궁극적으로 SSD들(130, 140, 및/또는 150)에 의해 실행될 때, 커맨드에 의해 지시된 절차들의 실행이 완료되었음을 표시하는 완료가 완료 큐(107) 내에 저장될 수 있다. 이러한 프로세스의 일부로서, 스위치(110)는 디바이스 큐 관리자 모듈(device queue manager module)을 프로세서 회로(114)의 일부로서 포함할 수 있다. 디바이스 큐 관리자 모듈은 스위치(110)와 SSD들(130, 140, 및 150) 간의 커맨드들의 전달을 용이하게 하기 위해 큐 쌍들(118)을 제공할 수 있다. 디바이스 큐 관리자 모듈은 상호연결(137)을 통해 스위치에 결합되는 SSD들(130, 140, 150) 각각에 대한 대응하는 제출 큐들 및 완료 큐들을 유지할 수 있다. 보여지는 바와 같이, 큐 쌍들(118)은, SSD(130)(SSD-1)와 관련된 제출 큐(SQ) 및 완료 큐(CQ)를 포함하는 큐들(121), SSD(140)(SSD-2)와 관련된 제출 큐(SQ) 및 완료 큐(CQ)를 포함하는 큐들(122), 그리고 SSD(150)(SSD-N)와 관련된 제출 큐(SQ) 및 완료 큐(CQ)를 포함하는 큐들(123)을 포함할 수 있다. 큐들의 추가적인 쌍들이, 데이터 저장소(136) 내에 포함되는 임의의 추가적인 SSD들과의 관련을 위해 큐들(118)의 일부로서 제공될 수 있다.
다양한 예들에서, 프로세서 회로(114)의 커맨드 프로세서 모듈은 SSD에 대한 액세스를 위한 요청과 관련된 호스트(102)로부터 수신된 NVMe 커맨드와 같은 커맨드들을 종결(terminate)시킬 수 있는데, 이것은 데이터 저장 서비스에 대한 요청이 각각 지향되고 있는 SSD(130, 140, 150)에 근거하여 큐 쌍들(121, 122, 또는 123) 중 특정 큐 쌍에 대한 SQ 내에 표시를 분배(distributing)함으로써 이루어진다. 그 다음에, 호스트(102)로부터의 데이터 저장 서비스들에 대한 이러한 요청들은, 스위치(110)와 SSD들(130, 140, 및 150) 사이에서 연장되는 화살표(111)에 의해 나타내어진 바와 같이, SSD 인터페이스(116)를 통해 스위치(110)에 의한 커맨드들의 발행들에 의해 각각의 SSD에 분배될 수 있다.
SSD들 중 하나 이상은 스위치(110)에 의해 지향되는 바와 같은 커맨드를 수신할 수 있다. 커맨드를 수신하면, 각각의 SSD 혹은 SSD들은 커맨드가 수신되었음을 표시하기 위해 해당 SSD 내에 위치하는 제출 큐를 업데이트할 수 있고, 그 다음에 해당 SSD에 대한 로컬 프로세서는 커맨드에 의해 수행되도록 표시된 실제 데이터 저장 절차의 수행을 시작할 수 있다.
요청된 데이터 저장 절차의 완료시, SSD들(130, 140, 및 150) 중 하나 이상은 요청된 서비스가 완료되었음을 표시하는 커맨드를 발행할 수 있고 이러한 완료의 표시를 역으로 스위치(110)로 전달할 수 있는데, 이것은 예시적으로 점선 화살표(113)에 의해 나타내어져 있다. 데이터 저장 절차의 완료는 또한, 프로세스를 수행한 SSD 혹은 SSD들이, 커맨드에 의해 표시된 절차가 수행되었고 완료되었음을 표시하기 위해, SSD 내에 위치한 혹은 각각의 SSD들 각각 내에 위치한 각각의 완료 큐를 업데이트하는 것을 포함할 수 있다.
스위치(110)에서 완료의 표시를 수신하면, 이러한 표시는 완료의 표시를 제공한 SSD와 관련된 그리고 스위치에 위치한 큐 쌍들(121, 122, 123)의 CQ 큐들 중 각각의 CQ 큐에 저장될 수 있다. 그 다음에, 스위치(110)의 디바이스 큐 관리자 모듈은 CQ 내에 저장된 완료의 표시를 프로세싱할 수 있는데, 이러한 프로세싱은 예시적으로 점선 화살표(108)에 의해 나타내어지는 바와 같이 호스트 인터페이스(112)를 통해 스위치(110)로부터 호스트(102)의 CQ(107)로 보내지는 커맨드를 준비하는 것을 포함한다. 그 다음에, 호스트는 커맨드에 의해 요청되는 절차의 완료를 표시하는 완료 큐(107)에 대한 업데이트에 근거하여 큐(105)에 저장된 커맨드의 제출의 표시를 소거(clearing)함으로써 커맨드의 상태를 업데이트할 수 있다.
도 1에서 예시되는 바와 같이, 하나 이상의 호스트들(102)을 스위치(110)와 통신가능하게 결합시키는데 사용되는 상호연결(103)은, 스위치(110)를 SSD들(130, 140, 및 150)과 통신가능하게 결합시키는데 사용되는 통신 포맷 및/또는 데이터 인터페이스와 비교해, 상이한 통신 포맷 및/또는 상이한 데이터 인터페이스를 요구할 수 있다. 이에 따라, 일반적으로 추가적인 프로세싱과 마주치게 되고, 그리고 이에 따른 커맨드들을 프로세싱할 때의 시간 지연(time delay)들과 마주치게 되는데, 왜냐하면 스위치(110)는 호스트(102)로부터 SSD(130, 140, 및 150)로의 데이터 저장 서비스들에 대한 요청들을 프로세싱하고 포맷팅(formatting)하며 아울러 SSD들로부터 하나 이상의 호스트들(102)로 (데이터를 판독하거나 기입하기 위한 요청들을 포함하는) 응답을 역으로 전달하기 때문이다. 추가적으로, 이러한 커맨드 및 데이터 요청들을 프로세싱하기 위해, 스위치(110)는 또한 일반적으로 스위치에서 디바이스 신원(device identification)들, 어드레스들, 및/또는 데이터와 같은 데이터를 중복하여(redundantly) 저장할 필요가 있을 수 있고, 이것은 스위치 자체에 의해 제공되게 되는 추가적인 메모리 요건들 및 프로세싱을 요구한다. 호스트(102)가 스위치(110)의 사용 없이 직접적으로 SSD들(130, 140, 및 150)에 직접적으로 결합될 수 있는 예들에서, 호스트 자체는 수행되는 데이터 트랜잭션들의 관리 및 저장을 핸들링할 것을 요구받을 수 있고, 이에 따라 호스트에서 그리고 호스트 상에 직접적으로 프로세싱 및 데이터 저장 요건들이 로드(load)되게 된다.
도 1에서 보여지는 바와 같이, 시스템(100)의 SSD들은, 하나 이상의 호스트들(102)을 관여시킬 필요 없이, 예를 들어, 상호연결(137)을 사용하여, 그리고 일부 예들에서는 상호연결(139)을 사용하여, SSD들 그 자체들 간의 직접적인 통신을 제공하도록 구성될 수 있다. 다양한 실시예들에서, SSD들 간의 통신들은 스위치(110)와 같은 스위치로 라우팅될 수 있고, 스위치에서 통신들은 피어-투-피어 트래픽(peer-to-peer traffic)으로서 또 하나의 다른 SSD로 다시-라우팅(re-routing)될 수 있다. 도 1에서 보여지는 바와 같이, SSD들(130, 140, 및 150)은 SSD 자체 내에 제출 큐(SQ) 및 대응하는 완료 큐(CQ)를 포함하도록 구성되며, 이러한 SQ 및 CQ는 SSD들로 하여금 데이터 저장 서비스들 혹은 다른 데이터 관련 프로세스들에 대한 커맨드들 및/또는 요청들을 서로 간에 직접적으로 주고 받게 할 수 있다.
시스템(100)의 비-한정적 예로서, SSD(130)는 로컬 프로세서(132), 메모리 어레이(135), 제출 큐(SQ)(133), 및 완료 큐(CQ)(134)를 포함하고, SSD(140)는 로컬 프로세서(142), 메모리 어레이(145), 제출 큐(SQ)(143), 및 완료 큐(CQ)(144)를 포함하고, 그리고 SSD(150)는 로컬 프로세서(152), 메모리 어레이(155), 제출 큐(SQ)(153), 및 완료 큐(CQ)(154)를 포함한다. 메모리 어레이들(135, 145, 및 155) 각각은, 디지털 데이터가 메모리 어레이에 기입될 수 있도록, 그리고 메모리 어레이로부터 판독될 수 있도록, 그리고 메모리 어레이 내에서 소거될 수 있도록 구성된 지속형 메모리 디바이스들의 어레이를 포함할 수 있다. SSD들 각각에 대한 각각의 SQ 및 CQ는, SSD에 대한 각각의 메모리 어레이의 일부분 내에 위치할 수 있고, 또는 각각의 SSD들 각각 내에 위치하는 별개의 메모리로서 구성될 수 있다. 각각의 SSD에 대한 로컬 프로세서들(132, 142, 및 152)은 로컬 프로세서가 위치하고 있는 각각의 SSD와 관련된 데이터 동작들(예컨대, 로컬 프로세서가 위치하고 있는 SSD의 메모리 어레이와 관련된 데이터 판독, 기입 및 소거 동작들)을 관리하도록 구성될 수 있다.
추가적으로, 로컬 프로세서들(132, 142, 및 152)은 또한 개시자 모드에서 동작하도록 구성될 수 있는데, 이러한 개시자 모드에서 로컬 프로세서는 또 하나의 다른 SSD에 의해 수행되게 되는 데이터 저장 서비스들 혹은 다른 데이터 관련 프로세스들에 대한 커맨드 및/또는 요청을 개시시킬 수 있으며, 이러한 커맨드 및/또는 요청은 로컬 프로세서가 위치하고 있는 SSD에서 발원된 것이고, 하나 이상의 호스트들(102) 및/또는 스위치(110)에 의해 발행된 것이 아니며 또는 이로부터 수신된 것이 아니다. 다양한 대안적 예들에서, 커맨드 또는 요청을 발원시킨 SSD는 호스트(102)와 같은 호스트에 의해 SSD로 지향된 커맨드 또는 요청에 응답하여 그렇게 할 수 있지만, 이러한 커맨드 또는 요청은 SSD들 중 또 하나의 다른 SSD로 커맨드 또는 요청을 발원시킨 그 SSD로 초기에만 지향된 것이다.
비-한정적 예로서, SSD(140)(SSD-2)로부터 SSD(130)(SSD-1)로 연장되는 화살표(147)는, 데이터 저장 서비스 또는 다른 데이터 저장 절차를 수행하기 위한 커맨드 또는 요청을 포함할 수 있는 통신을 나타내고, 이러한 통신은 SSD(140)에 의해 개시되어 스위치(110)를 통과함이 없이 예를 들어, 상호연결(137)을 사용하여 SSD(130)로 직접적으로 전달된다. 이러한 통신을 개시시키는 것의 일부로서, SSD(140)의 로컬 프로세서(142)는 커맨드 및/또는 요청이 초기에 SSD(140)에 의해 발생되었고 SSD(130)에 발행되었다는 표시를 SSD(140)의 SC(143)에 입력할 수 있다. SSD(130)에서 커맨드 및/또는 요청을 수신하면, 로컬 프로세서(132)는 요청이 수신되었음을 표시하기 위해 SSD(130)의 SQ(133)를 업데이트할 수 있고, 그 다음에, 수신된 커맨드/요청을 계속 프로세싱할 수 있다. 타겟 SSD(본 예에서는 SSD(130))의 관점에서 보면, 이러한 요청은 마치 예를 들어, 호스트(102)와 같은 호스트 디바이스로부터 수신될 수 있는 임의의 다른 타입의 요청과 같다. 타겟 SSD는 이러한 통신이 또 하나의 다른 SSD로부터 온 것임을 표시하는 정보를 가질 필요가 없고, 따라서 이러한 통신이 마치 호스트(102)와 같은 호스트 디바이스로부터 온 것처럼 요청에 관해 동작한다.
커맨드/요청의 프로세싱의 완료시, SSD(130)의 CQ(134)는 커맨드/요청이 완료되었다는 표시를 제공하기 위해 업데이트될 수 있다. 업데이트된 표시에 근거하여, 로컬 프로세서(132)는 커맨드/요청의 수신의 표시를 SQ(133)로부터 소거할 수 있고, 그리고 SSD(140)로 지향되는 통신을 제공할 수 있는데, 이는 SSD(130)와 SSD(140) 사이에서 연장되는 점선 화살표(148)에 의해 예시적으로 나타내어져 있다. 이러한 통신은 SSD(140)에 의해 본래 발생된 그리고 개시된 커맨드/요청의 완료의 표시를 포함할 수 있다. SSD(140)에 의해 본래 개시된 커맨드/요청의 완료의 표시를 수신하면, 로컬 프로세서(142)는 커맨드/요청이 완료되었다는 표시로 CQ(144)를 업데이트할 수 있고, 그리고 커맨드/요청이 계류중(pending)이다는 표시를 제거 혹은 소거하기 위해 SSD(140)의 SQ(143)를 업데이트할 수 있다. 다시 말하면, 점선 화살표(148)에 의해 예시적으로 나타내어지는 SSD(130)로부터 SSD(140)로의 통신은 상호연결(137)을 사용하여 행해질 수 있으며, 스위치(110) 혹은 호스트(102)를 통과함이 없이 완료될 수 있다.
커맨드/요청의 완료의 표시에 근거하여, 또는 대안예에서, 커맨드/요청이 여전히 계류중인 동안, SSD(140)의 로컬 프로세서(142)는 하나 이상의 다른 프로세스들을 수행할 수 있는데, 이러한 다른 프로세스들은, 데이터 저장소(136) 내에 포함된 다른 SSD로 직접적으로 전달되는 하나 이상의 커맨드들/요청들을 발생 및 개시시키는 것, 데이터 저장소(136) 내에 포함된 다른 SSD들로부터 수신되는 커맨드들/요청들을 수신 및 프로세싱하는 것, 그리고/또는 스위치(110)와 통신하는 것 그리고/또는 스위치(110)를 통해 호스트(102)로부터 데이터 저장 서비스들에 대해 SSD(140)로 지향되어 보내어진 커맨드들/요청들을 프로세싱하는 것을 포함한다. SSD(140)는, SSD(140)에 의해 개시되었고 아울러 SSD(140)에 의해 수행되도록 요구되었던 계류중인 데이터 저장 동작들을 추적하기 위해서, 그리고 이러한 동작들의 완료를 추적하기 위해서, SQ(143) 및 CQ(144)를 이용할 수 있다.
SSD들에서 확립된 큐들에 관하여, SQ 및 CQ는 보통 슬레이브 동작(slave operation)들을 위해서만 사용되고, 여기서 SSD는 요청들 또는 커맨드들을 수신하고 그 수신된 요청들 또는 커맨드들에 응답하는 타겟 디바이스이다. 이러한 경우들에서, SQ는 SSD가 수행할 필요가 있는 모든 트랜잭션들을 보유하고, 그리고 CQ는 완료된 그리고 요청자에게 역으로 보고될 필요가 있는 모든 트랜잭션들을 보유한다. 달리 말하면, SQ는 SSD가 처리하도록 요구받았던 모든 요청들 또는 커맨드들을 갖는 SSD에 대한 입력(INPUT)이고, 그리고 CQ는 그 응답들을 갖는 SSD의 출력(OUTPUT) 큐이다. SSD가 개시자 모드에서 동작하고 있는 경우, (동일하게 지칭될 수도 있는) 이러한 큐들의 목적은, SQ는 개시자 SSD가 다른 SSD에게 처리하도록 요구했던 모든 잡(job)들로 모두를 기록하는 SSD의 출력 큐가 되게 되는 것, 그리고 CQ는 다른 SSD들로부터의 응답들을 갖는 SSD에 대한 입력이 되게 되는 것을 포함하는 호스트 관점으로부터 나올 필요가 있게 된다.
시스템(100)의 예들은, 커맨드들/요청들을 발생시켜 다른 SSD에게 발행하기 위해 개시자 모드에서 동작하도록 구성된 SSD들 중 특정 SSD 혹은 임의의 특정 SSD로만 한정되지 않고, 다양한 예들에서, 데이터 저장소(136)의 일부로서 함께 결합된 SSD들 중 하나, 일부, 혹은 모두가, 개시자 모드에서 동작하도록 구성될 수 있고, 그리고 데이터 저장 서비스들에 대한 커맨드들/요청들을 발생시켜 호스트(102)와 같은 중간 디바이스를 통과함이 없이 다른 SSD들로 직접적으로 발행하도록 구성될 수 있다. 예를 들어, SSD(130)는, 개시자 모드에서, SSD(140) 및 SSD(150) 중 하나 혹은 양쪽 모두로 전달되어 수행될 데이터 저장 절차(들)에 대한 하나 이상의 커맨드들 또는 요청들을 발생시킬 수 있고 발행할 수 있다. 유사하게, SSD(140) 및/또는 SSD(150)는 하나 이상의 다른 SSD들로 전달되어 수행될 데이터 저장 절차(들)에 대한 하나 이상의 커맨드들 또는 요청들을 발생시킬 수 있고 발행할 수 있다.
통신이 호스트(102)와 같은 중간 디바이스를 통과하게 함이 없이 SSD들(130, 140, 및 150)이 서로 직접적으로 통신할 수 있는 능력은, 스위치 또는 호스트와 같은 중간 디바이스들 중 하나 이상의 디바이스에서 중복하여 저장되게 될 디바이스에서 디바이스로의 커맨드들/요청들의 전달을 위해 사용되는 데이터 포맷들 및/또는 통신 포맷팅이 필요 없게 됨으로써 프로세싱 시간을 절약할 수 있다. SSD들 간의 직접적인 통신들은 또한, 예컨대, 호스트들로부터 스위치로 그리고 SSD로 진행하거나 역으로 SSD들로부터 스위치를 통해 호스트(들)로 진행하는 과정에서 이러한 중간 디바이스들에서 메시지들의 포맷팅을 통한 변경을 행할 필요성을 제거함으로써, 통신들의 전체 처리량(throughput)을 가속화(speed up)시킬 수 있고, 따라서 커맨드들/요청들의 전체 프로세싱을 가속화시킬 수 있다.
시스템(100)의 예들은 특정 개수의 SSD들을 갖는 것으로 한정되지 않는다. 다양한 예들에서, 시스템(100)은 두 개 정도의 적은 수의 SSD들을 포함할 수 있고, 그리고 도 1에서 중괄호(138)에 의해 전반적으로 표시된 점들에 의해 예시적으로 나타내어진 바와 같이, 어떤 양의 정수 "N"개의 SSD들을 포함할 수 있다. 비-한정적 예로서, 데이터 저장소는 시스템(100)의 구성에서 상호연결(137/139)에 결합되는 복수의 개별 SSD들을 포함할 수 있다. 시스템(100) 내에 포함된 SSD들 각각은, 도 1에서 예시적으로 나타내어진 바와 같이, 중괄호(138)에 의해 전반적으로 표시된 점들에 의해 나타내어진 임의의 SSD들에 대한 통신 링크들을 나타내는 점선 화살표(139) 및 상호연결(137)에 의해 스위치(110)에 통신가능하게 링크(link)될 수 있다.
SSD에 의해 발생될 수 있고 하나 이상의 다른 SSD들에 직접적으로 전달될 수 있는 데이터 저장 서비스들 혹은 데이터 저장 절차들의 타입들은 임의의 특정 타입의 커맨드 또는 요청으로 한정되지 않는다. 다양한 예들에서, 커맨드 또는 요청은, 호스트(102)와 같은 호스트로부터 하나 이상의 SSD들로 또한 발생되어 보내질 수 있는 동일한 타입의 판독, 기입, 또는 소거 요청을 포함할 수 있다. 다양한 예들에서, SSD(130), SSD(140), 또는 SSD(150)와 같은 개개의 SSD는 호스트(102)와 같은 호스트에 의해 SSD로 지향되어 본래 개시된 커맨드 또는 요청을 가질 수 있고, 여기서 SSD는 그 다음에 커맨드 또는 요청에 의해 표시된 태스크(task) 또는 절차를 수행할 수 있고, 그리고 데이터 저장소(136) 내에 포함된 다른 SSD들 중 어느 SSD도 관련시킴 없이 해당 태스크 또는 절차가 완료되었다는 표시를 반환(return)할 수 있다.
예를 들어, 호스트(102) 또는 네트워크(106)를 통해 시스템(100)에 결합되는 호스트와 같은 그러한 원격 호스트로부터 기입 요청을 수신하는 SSD(130), SSD(140), 또는 SSD(150)와 같은 SSD는, 피어 SSD에 대한 후속 요청을 발생시킬 수 있고, 그 요청을 피어 SSD에게 전달할 수 있으며, 또는 대안적으로 예를 들어, 중복성 목적(redundancy purposes)으로 SSD 및 피어 SSD에 의해 수행될 기입 요청을 복제할 수 있다. 양쪽의 경우들에서, 수신 SSD는 여전히 완료에 대해 원격 호스트와 인터페이스하기 위한 SSD이지만, 실제 잡은 상이한 SSD에 의해 수행될 수 있다. 시스템(100)의 예들에서, 병목현상(bottlenecks)으로 발전(evolve)하는 것이 일어나지 않도록 보장하기 위해 수신 SSD들 간의 작업(work)을 로드-발란싱(load-balance)할 별개의 프로세서 혹은 프로세서들, 또는 SSD들과 함께 위치하고 있는 로컬 프로세서들 중 하나와 같은 어떤 엔티티(entity)가 존재할 수 있다. 이러한 해법을 가짐으로써 풀 박스 가상화(full box virtualization)가 가능할 수 있는데, 예를 들어, 기존의 시스템들에서 이러한 것을 달성하기 위해 필요한 복잡한 컴퓨팅 리소스(complex compute resource)들을 추가함이 없이 풀 박스 가상화가 가능할 수 있다.
다양한 예들에서, 호스트(102)와 같은 호스트에 의해 개개의 SSD로 지향되어 본래 발생된 커맨드 또는 요청을 갖는 개개의 SSD는 이 경우 개시자 모드에서 동작할 수 있고, 그리고 데이터 저장소(136) 내에는 포함되지만 호스트에 의해 발생되어 발행된 본래의 커맨드 및/또는 요청에는 특정적으로 포함되지 않았던 하나 이상의 SSD들로 지향된 추가적인 커맨드들 및/또는 요청들을 발생시켜 발행할 수 있다. 비-한정적 예로서, 호스트(102)와 같은 호스트는 영화와 관련된 모든 데이터(예를 들어, 비디오 및 오디오 데이터)를 판독하여 호스트에 역으로 전달하도록 하는 커맨드를 발생시킬 수 있고 발행할 수 있다. 이러한 커맨드는 단일 SSD(예를 들어, SSD(130))로 지향될 수 있다. 하지만, 영화와 관련된 데이터는 데이터 저장소(136) 내에 포함된 SSD들 중 다수의 SSD들 내에 저장될 수 있다. 호스트(102)에 의해 초기 발생되어 발행된 커맨드를 수신함에 응답하여, SSD(130)는 개시자 모드에서 동작할 수 있고, 그리고 이러한 각각의 SSD들에 저장되어 있는 영화와 관련된 데이터를 판독하여 SSD(130)로 역으로 전달하도록 하는 커맨드들을 발생시켜 SSD들(140)에 그리고/또는 SSD(150)에 발행할 수 있다. SSD들(140 및 150)은, SSD(130)에 의해 발행되는 커맨드에 관하여 타겟 SSD인 것으로서 고려될 수 있고, SSD(130)로부터 커맨드를 수신함에 응답하여, 요구된 데이터로 SSD(130)에 역으로 회답함으로써 그 요구된 데이터 판독/전달 동작들을 수행할 수 있다.
SSD(130)와 SSD(140) 및/또는 SSD(150) 간의 통신들은 상호연결(137)을 통해 일어날 수 있는데, 이러한 통신들은 스위치(110)를 통과하는 것을 포함할 수 있지만 이러한 통신들 중 어느 것도 호스트(102)를 통과할 필요가 없다. SSD(130)가 SSD(140) 및/또는 SSD(150)로부터 그 요청된 데이터를 수신했다면, SSD(130)는 호스트에 의해 SSD(130)로 지향되어 발행된 커맨드에서 초기에 요청된 동작을 완료하기 위해 영화와 관련된 그 요청된 데이터를 스위치(110) 및/또는 호스트(102)로 역으로 전달하는 것을 조정할 수 있다. 데이터 저장소(136) 내에 포함된 SSD들이 개개의 SSD들 사이에서 통신을 주고받게 하되, 스위치(110) 혹은 호스트(102)를 또한 통과할 필요 없이 또는 스위치(110) 혹은 호스트(102)에 제어될 필요 없이, 통신을 주고받게 하는 이러한 능력은, 커맨드에 대한 전체 프로세싱을 더 빠르게 할 수 있고 아울러 메모리 및/또는 프로세싱 로드 요건들(memory and/or processing load requirements)에 관하여 호스트(102) 및 스위치(110)의 로드를 덜어줄 수 있다(unloading).
다양한 예들에서, 개시자 모드에서 동작하는 SSD에 의해 요청된 동작들은 호스트(102)와 같은 호스트에 의해 초기에 발생된 커맨드 또는 요청에 의해 촉발(trigger)되지 않을 수 있다. 비-한정적 예로서, 데이터 저장소(136)의 제 1 SSD에 의해, 데이터 저장소(136)의 제 2 SSD가 제 1 SSD 내의 데이터를 중복성 목적으로 제 2 SSD에 복사(copy)하도록 요청하는 커맨드 또는 요청이 발생될 수 있고 발행될 수 있다. 이러한 커맨드는 스위치(110) 또는 호스트(102)로부터 나온 임의의 커맨드들 또는 요청들에 의해 재촉(prompt)되거나 촉발됨이 없이 제 1 SSD에 의해 개시될 수 있다. 따라서, 이러한 예에서, 제 1 SSD는 예를 들어, 시스템(100)의 셧다운(shutdown) 또는 전력의 손실의 검출과 같은 촉발 이벤트의 검출에 근거하여 또는 어떤 미리결정된 기간에 데이터 백업 절차(data backup procedure)를 수행하도록 하는 커맨드 또는 요청을 개시시키도록 구성될 수 있다.
개시자 모드에서 동작하도록 SSD를 촉발시킬 수 있는 기능들 혹은 이벤트들의 다른 타입들은, 개시자 SSD로부터 타겟 SSD로 태스크들을 이동시키는 것, 원격 호스트 프로세서로부터 물리적 드라이브들을 가상화시키는 것, 데이터 관리 태스크들 및 자가-치유 시스템 기능(self-healing system function)들을 포함할 수 있다. 예를 들어, 데이터 저장소(136)의 SSD는 컴퓨팅연산 저장 기능(computational storage function)들과 같은 다양한 기능들이 데이터 저장소(136) 내에 포함된 다른 SSD들에 저장된 데이터에 관해 수행되도록 요청하는 커맨드들을 발생시키기 위해 개시자 모드에서 동작할 수 있다. 이러한 컴퓨팅연산 저장 기능은 인공 지능(Artificial Intelligence, AI)을 사용하여 이러한 컴퓨팅연산 저장 기능들을 수행하는 것을 포함할 수 있다.
상호연결(137/139)을 통해 데이터 저장소(136)의 SSD들 간에 이용되는 통신들을 제공하기 위해 사용되는 통신 프로토콜 및 네트워크 포맷의 타입은 임의의 특정 프로토콜 혹은 네트워크 표준(들)에 한정되지 않는다. 하나의 비-한정적 예에서, 데이터 저장소(136) 내에 포함된 SSD 간의 통신들은 전달 층(transport layer)으로서 PCI 익스프레스를 사용하고 프로토콜 층(protocol layer)으로서 MVE를 사용하는 것을 포함한다. 변형예들은 통신들을 위한 전달 층으로서 NVMe를 사용하는 것을 포함할 수 있다. 변형예들은 이더넷의 사용을 포함할 수 있다. SSD들 간의 통신 링크들의 일부로서 이더넷을 포함하는 경우, 원격 직접 메모리 액세스(Remote Direct Memory Access, RDMA) 큐 쌍들, 또는 전송 제어 프로토콜(Transmission Control Protocol, TCP) 큐들과 같은 추가적인 큐들이 SSD에서 설정될 수 있어 이러한 통신 링크들을 확립하게 되고 이러한 통신 링크들은 그 다음에 이더넷 통신 포맷팅을 이용한다.
예시적
솔리드
-
스테이트
드라이브 개시자
모드
(Example Solid-State Drive Initiator Mode)
다양한 예들에서, 데이터 저장 시스템의 일부로서 통신가능하게 함께 결합된 하나 이상의 SSD들은 제 1 SSD와 제 2 SSD 간의 직접적인 통신을 제공하기 위해 개시자 모드에서 동작할 수 있고, 여기서 제 1 SSD는, 데이터 저장 관리와 관련된 커맨드 및/또는 요청을 발생시켜 제 2 SSD에 직접적으로 발행하기 위한 개시자(initiator)로서 동작하는데, 이것은 스위칭 디바이스 혹은 호스트와 같은 중간 디바이스를 통신들이 통과할 필요 없이 일어나고, 아울러 커맨드/요청이 호스트로부터 개시되게 함이 없이 일어난다.
도 2는 본 개시내용에서 설명되는 다양한 예들 및 이러한 예들의 임의의 등가물들에 따른 방법(200)의 예시적 흐름도이다. 방법(200)은, 스위치 혹은 호스트 디바이스와 같은 중간 디바이스를 통신들이 통과하게 함이 없이, 데이터 저장 관리와 관련된 커맨드들 혹은 요청들을 발생시켜 또 하나의 다른 SSD로 직접적으로 전달되게 발행하기 위해 개시자 모드에서 동작하는 하나 이상의 SSD들과 관련된 다양한 기능들을 포함한다.
블록(202)에서, 방법(200)은 제 1 솔리드-스테이트 드라이브에서 그리고 제 2 솔리드-스테이트 드라이브에서, 제 1 솔리드-스테이트 드라이브를 제 2 솔리드-스테이트 드라이브와 결합시키는 상호연결을 통해 제 1 솔리드-스테이트 드라이브와 제 2 솔리드-스테이트 드라이브 간의 직접적인 통신들을 제어하기 위해 구성된 큐들의 세트를 확립하는 것을 포함한다. 다양한 실시예들에서, 제 1 솔리드-스테이트 드라이브에서 확립되는 큐들의 제 1 세트는 제 1 제출 큐 및 제 1 완료 큐를 포함하고, 그리고 제 2 솔리드-스테이트 드라이브에서 확립되는 큐들의 제 2 세트는 제 2 제출 큐 및 제 2 완료 큐를 포함한다. 다양한 실시예들에서, 제 1 솔리드-스테이트 드라이브에서 확립되는 큐들의 제 1 세트는 드라이브의 프로토콜 동작들을 위한 SQ 및 CQ를 포함하고, 그리고 일부 실시예들에서는, 하나 이상의 RDMA 큐 쌍(queue pair)들 혹은 TCP 큐들과 같은, 큐들의 제 1 세트의 상부 상의 큐들의 제 2 세트가 패브릭(fabric)(예를 들어, 이더넷(Ethernet))의 프로토콜 동작을 위해 확립된다.
블록(204)에서, 방법(200)은 제 1 솔리드-스테이트 드라이브에 의해, 적어도 하나의 커맨드 또는 요청의 발생을 개시시키는 것을 포함한다. 다양한 실시예들에서, 요청은 제 2 솔리드-스테이트 드라이브와 같은 솔리드-스테이트 드라이브의 메모리 어레이에 데이터를 기입하도록 하는 요청을 포함할 수 있다. 다양한 실시예들에서, 요청은 제 2 솔리드-스테이트 드라이브와 같은 솔리드-스테이트 드라이브의 메모리 어레이로부터 데이터를 판독하도록 하는 요청을 포함할 수 있다. 다양한 실시예들에서, 요청은 제 2 솔리드-스테이트 드라이브와 같은 솔리드-스테이트 드라이브 내에 포함된 메모리 어레이 중 일부분 혹은 모든 부분으로부터 데이터를 소거하도록 하는 요청을 포함할 수 있다. 다양한 실시예들에서, 커맨드는 제 2 솔리드-스테이트 드라이브와 같은 솔리드-스테이트 드라이브 및/또는 메모리 어레이와 관련된 데이터 관리 동작을 수행하도록 하는 커맨드를 포함할 수 있다.
블록(206)에서, 방법(200)은, 제 1 솔리드-스테이트 드라이브에 의해, 적어도 하나의 커맨드 또는 요청이 제 1 솔리드-스테이트 드라이브와 제 2 솔리드-스테이트 드라이브 간에 직접적으로 전달되도록 상호연결을 통해 적어도 하나의 커맨드 또는 요청을 구동시키는 것을 포함한다. 다양한 예들에서 적어도 하나의 커맨드 또는 요청을 전달하는 것은 PCIe 인터페이스를 통해 적어도 하나의 커맨드 또는 요청을 구동시키는 것을 포함한다. 다양한 예들에서 적어도 하나의 커맨드 또는 요청을 전달하는 것은 패브릭 인터페이스를 통한 NVMe를 통해 적어도 하나의 커맨드 또는 요청을 구동시키는 것을 포함한다. 다양한 예들에서, 적어도 하나의 커맨드 또는 요청을 전달하는 것은 이더넷 연결을 통해 전달하는 것을 포함한다. 이더넷 연결을 사용하는 예들에서, 방법(200)은 상호연결에 대한 통신 경로에서 사용되는 패브릭의 동작에 전용으로 이용되는 제 2 세트 혹은 추가적인 세트의 큐들 RDMA QP들 또는 TCP 큐들을 확립하는 것을 포함할 수 있다.
블록(208)에서, 방법(200)의 실시예들은, 제 2 솔리드-스테이트 드라이브에서, 제 1 솔리드-스테이트 드라이브에 의해 전달된 적어도 하나의 커맨드 또는 요청을 수신하는 것을 포함한다. 적어도 하나의 커맨드 또는 요청을 수신하는 것은, 어떤 데이터 저장 관련 동작에 대한 커맨드 또는 요청이 제 2 솔리드-스테이트 드라이브에서 수신되었음을 표시하기 위해, 제 2 솔리드-스테이트 드라이브 내의 제출 큐와 같은 제 2 솔리드-스테이트 드라이브 내의 적어도 하나의 큐를 업데이트하는 것을 포함할 수 있다.
블록(210)에서, 방법(200)의 예들은, 제 2 솔리드-스테이트 드라이브에 의해, 적어도 하나의 커맨드 또는 요청을 수신함에 응답하여 제 2 솔리드-스테이트 드라이브에 저장된 데이터에 관해 하나 이상의 데이터 저장 관련 동작들을 수행하는 것을 포함한다. 하나 이상의 데이터 저장 관련 동작들을 수행하는 것은, 제 2 솔리드-스테이트 드라이브 내에 포함된 메모리 어레이에 데이터를 기입하는 것을 포함할 수 있다. 하나 이상의 데이터 저장 관련 동작들을 수행하는 것은, 제 2 솔리드-스테이트 드라이브 내에 포함된 메모리 어레이로부터 데이터를 판독하는 것을 포함할 수 있다. 하나 이상의 데이터 저장 관련 동작들을 수행하는 것은, 제 2 솔리드-스테이트 드라이브 내에 포함된 메모리 어레이 중 일부분 혹은 일부분들로부터 데이터를 소거하는 것을 포함할 수 있다. 하나 이상의 데이터 저장 관련 동작들을 수행하는 것은, 제 2 솔리드-스테이트 드라이브에 저장된 데이터에 관해 컴퓨팅 저장 동작(computational storage operation)(들)을 수행하는 것을 포함할 수 있다. 하나 이상의 데이터 저장 관련 동작들을 수행하는 것은, 예를 들어, 제 2 솔리드-스테이트 드라이브에 저장된 데이터에 관해 수행되는 조각모음 절차(defragmentation procedure)의 일부로서 제 2 솔리드-스테이트 드라이브에 저장된 데이터를 재정렬(rearranging)하는 것을 포함할 수 있다.
적어도 하나의 커맨드 또는 요청에 의해 지시(dictate)된 바와 같이 제 2 솔리드-스테이트 드라이브에 의해 수행될 동작(들)이 완료되는 경우, 방법(200)의 예들은, 동작들이 제 2 솔리드-스테이트 드라이브에 의해 완료되었음을 표시하기 위해, 제 2 솔리드-스테이트 드라이브 내의 완료 큐와 같은 제 2 솔리드-스테이트 드라이브 내의 적어도 하나의 큐를 업데이트하는 것을 포함한다.
블록(212)에서, 방법(200)의 예들은, 제 2 솔리드-스테이트 드라이브에 의해, 상호연결을 통해 제 1 솔리드-스테이트 드라이브로 회답(reply)을 구동시키는 것을 포함하고, 여기서 회답은 제 2 솔리드-스테이트 드라이브에 저장된 데이터에 관한 하나 이상의 데이터 동작들이 완료되었음을 표시한다. 다양한 예들에서, 커맨드 또는 요청이 제 1 솔리드-스테이트 드라이브에 의해 개시되어 제 2 솔리드-스테이트 드라이브로 전달됨에 응답하여, 제 2 솔리드-스테이트 드라이브로부터 판독된 데이터가 또한 상호연결을 통해 제 1 솔리드-스테이트 드라이브로 구동될 수 있다.
블록(214)에서, 방법(200)의 예들은, 제 1 솔리드-스테이트 드라이브에서, 커맨드 또는 요청에 의해 표시된 데이터 저장 동작이 제 2 솔리드-스테이트 드라이브에 의해 완료되었음을 적어도 표시하는 회답을 수신하는 것을 포함한다. 방법(200)의 다양한 예들에서, 제 1 솔리드-스테이트 드라이브에서 회답을 수신하는 것은, 제 1 솔리드-스테이트 드라이브에서의 완료 큐와 같은 제 1 솔리드-스테이트 드라이브에서의 큐를, 제 1 솔리드-스테이트 드라이브로부터 제 2 솔리드-스테이트 드라이브로 보내어진 커맨드 또는 요청이 제 2 솔리드-스테이트 드라이브에 의해 완료되었다는 표시로, 업데이트하는 것을 포함한다. 제 1 솔리드-스테이트 드라이브로부터 제 2 솔리드-스테이트 드라이브로 보내어진 커맨드 또는 요청이 제 2 솔리드-스테이트 드라이브에 의해 완료되었다는 표시를 수신함에 근거하여 제 1 솔리드-스테이트 드라이브에서의 큐를 업데이트하는 것은, 적어도 하나의 커맨드 또는 요청의 제출과 관련된 표시를 지우기(clear out) 위해 제 1 솔리드-스테이트 드라이브에서의 제출 큐를 업데이트하는 것을 포함한다.
예시적인 장치(Example Apparatus)
도 3은 본 개시내용 전반에 걸쳐 설명되는 바와 같은 다양한 예들 및 이러한 예들의 임의의 등가물들에 따라 구성될 수 있는 솔리드-스테이트 드라이브(300)의 간략화된 예시적 블록도이다. 솔리드-스테이트 드라이브(SSD)(300)의 예들은, 로컬 프로세서(local processor)(302), 메모리 어레이(memory array)(304), 인터페이스(interface)(306), 및 큐들(308)의 하나 이상의 세트들을 포함할 수 있다. 버스(303)는 SSD(300) 내에 포함된 다양한 요소들에 결합될 수 있고, 그리고 이러한 요소들을 통신가능하게 결합시키도록 구성될 수 있다. SSD(300)의 예들은, 도 1에 관하여 예시되고 설명된 바와 같은 SSD들(130, 140, 및/또는 150) 중 어느 하나 혹은 그 이상일 수 있으며, 방법(200)(도 2)에 관하여 설명된 기능들 중 일부 기능 혹은 모든 기능 그리고 임의의 등가 기능들을 수행하도록 구성될 수 있다.
로컬 프로세서(302)의 예들은 복수의 프로세서들, 복수의 코어(core)들, 복수의 노드(node)들을 포함할 수 있고 그리고/또는 멀티-쓰레딩(multi-threading) 등을 구현하며, SSD(300)에 관한 동작들을 조정(coordinate)한다. 메모리 어레이(304)의 예들은 임의의 특정 타입의 메모리에 한정되지 않으며, 메모리(604)를 포함할 수 있고, 시스템 메모리일 수 있거나(예를 들어, 캐시(cache), 랜덤 액세스 메모리(Random Access Memory, RAM), 동기식 RAM(Synchronous RAM, SRAM), 동적(Dynamic RAM, DRAM), 제로 커패시터 RAM(Zero capacitor RAM), 트윈 트랜지스터 RAM(Twin Transistor RAM), 임베디드 DRAM(embedded DRAM, eDRAM), 확장된 데이터 출력 RAM(Extended Data Output RAM, EDO RAM), 더블 데이터 레이트 RAM(Double Data Rate RAM, DDR RAM), 전기적으로 소거가능하고 프로그래밍가능한 판독 전용 메모리(Electrically Erasable Programmable Read Only Memory, EEPROM), 나노-RAM(Nano-RAM, NRAM), 저항성 RAM(Resistive RAM, RRAM), 실리콘-옥사이드-나이트라이드-옥사이드-실리콘 메모리(Silicon-Oxide-Nitride-Oxide-Silicon memory)(SONOS), 파라미터 랜덤 액세스 메모리(Parameter Random Access Memory, PRAM), 등 중 하나 이상일 수 있거나), 또는 비-일시적 머신-판독가능 매체들/매체의 임의의 하나 이상의 다른 가능한 실현들일 수 있다.
인터페이스(306)의 예들은 임의의 특정 타입의 인터페이스에 한정되지 않으며, 인터페이스(306)의 예들은, 본 개시내용 전반에 걸쳐 설명되는 방법들 및/또는 기법들 중 임의의 것과 이것의 임의의 등가물들을 사용하여 SSD(300)와 하나 이상의 다른 SSD들 간에 통신들을 제공하기 위해 로컬 프로세서(302)에 의해 제어가능한 하나 이상의 인터페이스 디바이스들 또는 모듈들을 포함할 수 있다. 예를 들어, 인터페이스(306)는 호스트 디바이스와 같은 중간 디바이스를 통신들이 통과할 필요 없이 상호연결을 통해 SSD(300)와 또 하나의 다른 SSD 간의 직접적인 통신을 제공하기 위해 로컬 프로세서에 의해 제어가능할 수 있다. 인터페이스(306)는, SSD(300)가 개시자 모드에서 동작하고 있을 때 또 하나의 다른 SSD와의 직접적인 통신들을 제공할 수 있고, 그리고 또 하나의 다른 SSD가 어떤 데이터 저장 관련 절차를 수행하도록 하는 커맨드 또는 요청을 발생시킬 수 있고 발행할 수 있다. 인터페이스(306)는, SSD(300)가 타겟 SSD로서 동작하고 있고 그리고 개시자 모드에서 동작하고 있는 또 하나의 다른 SSD로부터 SSD(300)로 직접적으로 보내어진 커맨드 또는 요청을 수신하고 있는 경우, 그 또 하나의 다른 SSD와의 직접적인 통신들을 제공할 수 있다.
다양한 예들에서, 인터페이스(306)는 또한, 예를 들어, 스위치(110)(도 1)와 같은 스위칭 디바이스를 통해 SSD(300)에 결합되는 하나 이상의 호스트들(102)(도 1)과 같은 하나 이상의 호스트들로부터 SSD(300)로 지향된 커맨드들 및 요청들을 전송 및 수신하도록 구성될 수 있다.
버스(303)는 임의의 특정 타입의 버스에 한정되지 않으며, 예를 들어, 주변 컴포넌트 상호연결(Peripheral Component Interconnect, PCI), 산업 표준 아키텍처(Industry Standard Architecture, ISA), PCI-익스프레스(PCI-Express), 뉴 버스(New Bus)(NuBus), 고급 확장가능 버스(Advanced Extensible Bus)(AXI 버스), 및 이더넷 표준들을 따를 수 있다. 버스(303)는 또한, 로컬 프로세서(303)와 메모리 어레이(304)와 큐들(308) 간의 통신들을 용이하게 할 수 있다. 큐들(308)은 SSD(300)와 하나 이상의 다른 SSD들 간의 통신 링크를 제공하도록 확립된 하나 이상의 큐들을 포함할 수 있다. 다양한 예들에서, 큐들(308)은 SSD(300)와 또 하나의 다른 SSD 간에 통신 링크가 확립될 수 있도록 구성된 제출 큐(Submission Queue, SQ) 및 완료 큐(Completion Queue, CQ)를 포함하는 큐들의 쌍(310)을 포함한다. 큐(311)에 의해 예시적으로 나타내어지고 있는 추가적인 큐들이 또한, 필요에 따라 큐들(308) 내에 확립될 수 있는데, 하나 이상의 호스트들과 통신하기 위해서, 그리고 또한 SSD(300)와 하나 이상의 다른 SSD들 간의 통신이 스위치 혹은 호스트와 같은 중간 디바이스를 통과할 필요 없이 개시 모드에서 동작하는 동안 하나 이상의 추가적인 SSD들과 직접적으로 통신하기 위해서, SSD(300)가 필요로 할 수 있는 통신 링크들 중 임의의 통신 링크 및 모든 통신 링크를 제공하기 위해 필요에 따라 큐들(308) 내에 확립될 수 있다.
SSD(300)에 속하는 이러한 기능들은 비-일시적 머신 판독가능 매체/매체들 상에 저장된 소프트웨어(예를 들어, 컴퓨터 코드, 프로그램 명령들, 프로그램 코드, 컴퓨터 명령들) 및/또는 하드웨어의 조합으로 구현될 수 있다. 일부 경우들에서, 로컬 프로세서(302) 및 메모리 어레이(304)가, 관리 프로세서 모듈, 데이터 프로세서 모듈 및/또는 커맨드 프로세서 모듈에 추가하여 혹은 그 대신에, 이러한 기능들을 구현할 수 있거나 또는 그 구현을 용이하게 할 수 있다. 더욱이, SSD(300)의 예들은 도 3에서는 예시되지 않은 더 적거나 혹은 추가적인 컴포넌트들(예를 들어, 비디오 카드들, 오디오 카드들, 추가적인 네트워크 인터페이스들, 주변 디바이스들, 등)을 포함할 수 있다.
몇 가지 구현예들이 앞에서 상세히 설명되었고, 다양한 변형예들이 가능하다. (본 명세서에서 설명되는 기능적 동작들을 포함하는) 본 명세서에서 개시되는 주된 내용은, 전자 회로, 컴퓨터 하드웨어, 펌웨어, 소프트웨어로 구현될 수 있거나, 혹은 이들의 조합들로 구현될 수 있는데, 예컨대, 본 명세서에서 개시되는 구조적 수단 및 그 구조적 등가물들과 같은 것으로 구현될 수 있고, 여기에는 잠재적으로 프로세서와 같은 하나 이상의 데이터 프로세싱 장치로 하여금 본 명세서에서 설명되는 동작들을 수행하게 하도록 동작가능한 프로그램(예를 들어, 메모리 디바이스, 저장 디바이스, 머신-판독가능 저장 기판, 혹은 다른 물리적인 머신 판독가능 매체, 또는 이들 중 하나 이상의 것들의 조합일 수 있는 비-일시적 컴퓨터-판독가능 매체에 인코딩되는 프로그램)이 포함된다.
(컴퓨터 프로그램, 소프트웨어, 소프트웨어 애플리케이션, 스크립트, 혹은 코드로서 또한 알려져 있는) 프로그램은 (컴파일링된 언어 혹은 해석된 언어, 또는 선언적 언어 혹은 절차적 언어를 포함하는) 임의 형태의 프로그래밍 언어로 기입될 수 있고, 그리고 임의 형태로 배치될 수 있는데, 여기에는 독립형 프로그램으로서 배치되는 것, 또는 컴퓨팅 환경에서의 사용에 적합한 모듈, 컴포넌트, 서브루틴 혹은 다른 유닛으로서 배치되는 것이 포함된다. 프로그램이 파일 시스템 내의 파일에 반드시 대응할 필요는 없다. 프로그램은, 다른 프로그램들 혹은 데이터(예를 들어, 마크업 언어 문서 내에 저장되는 하나 이상의 스크립트들)를 보유하고 있는 파일의 일부분 내에 저장될 수 있거나, 해당 프로그램에 전용으로 사용되는 단일 파일 내에 저장될 수 있거나, 또는 복수의 조정된 파일들(예를 들어, 하나 이상의 모듈들, 서브 프로그램들, 또는 코드의 일부분들을 저장하는 파일들) 내에 저장될 수 있다. 프로그램은 (하나의 사이트에 위치하거나 혹은 복수의 사이트들에 걸쳐 분산되어 통신 네트워크에 의해 상호연결되는) 복수의 컴퓨터들 상에서 또는 하나의 컴퓨터 상에서 실행되도록 배치될 수 있다.
본 명세서가 다수의 특정사항들을 포함하고 있지만, 이러한 것들이 본 명세서에서 청구될 수 있는 것의 범위에 관한 한정사항들로서 해석돼서는 안 되며, 오히려 특정 구현들에 특정적으로 적용될 수 있는 특징들의 설명들로서 해석돼야 한다. 본 명세서에서 개별적 구현들의 맥락으로 설명된 특정 특징들은 또한 단일 구현으로 조합되어 구현될 수 있다. 반대로, 단일 구현의 맥락으로 설명된 다양한 특징들은 또한 복수의 구현들로 분리되어 구현될 수 있고 또는 임의의 적절한 하위-조합으로 구현될 수 있다. 더욱이, 비록 특징들이 특정 조합들에서 동작하는 것으로서 앞에서 설명될 수 있고 심지어 초기에 그렇게 기재될 수 있을지라도, 그 기재된 조합으로부터의 하나 이상의 특징들이 일부 경우들에서 해당 조합으로부터 제거될 수 있고, 그리고 그 기재된 조합은 하위-조합 또는 하위-조합의 변형으로 유도될 수 있다.
유사하게, 동작들이 도면에서 특정 순서로 도시되고 있지만, 이러한 것이, 바람직한 결과들을 달성하기 위해 이러한 동작들이 그 제시된 특정 순서로 혹은 순차적 순서로 수행돼야함 또는 예시된 모든 동작들이 수행돼야함을 요구하는 것으로서 이해돼서는 안 된다. 특정 상황들에서는, 멀티태스킹 및 병렬 프로세싱이 유리할 수 있다. 더욱이, 앞서 설명된 구현들에서 다양한 시스템 컴포넌트들의 분리는 모든 구현들에서 이러한 분리를 요구하는 것으로서 이해돼서는 안 된다.
접속사 "및"을 갖는 목록 뒤에 오는 어구 "~ 중 적어도 하나"의 사용은, 달리 특정적으로 기재되지 않는 한, 배타적 목록으로서 다루어져는 안 되고, 그리고 각각의 카테고리로부터 하나의 아이템을 갖는 카테고리들의 목록으로서 해석돼서는 안 된다. "A, B, 및 C 중 적어도 하나"라고 기재되는 절은, 나열된 아이템들 중 하나의 아이템, 나열된 아이템들 중 복수의 아이템들, 그리고 목록 내의 아이템들 중 하나 혹은 그 이상의 아이템과 나열되지 않은 또 하나의 다른 아이템만으로 제한될 수 없다.
다른 구현예들은 다음의 청구항들의 범위 내에 있다.
Claims (20)
- 방법으로서, 상기 방법은,
제 1 솔리드-스테이트 드라이브(solid-state drive)에서 그리고 제 2 솔리드-스테이트 드라이브에서, 상기 제 1 솔리드-스테이트 드라이브를 상기 제 2 솔리드-스테이트 드라이브와 결합시키는 상호연결(interconnect)을 통해 상기 제 1 솔리드-스테이트 드라이브와 상기 제 2 솔리드-스테이트 드라이브 간의 직접적인 통신들을 제어하기 위해 구성된 큐(queue)들의 세트를 확립하는 단계와;
상기 제 1 솔리드-스테이트 드라이브에 의해, 적어도 하나의 커맨드(command) 또는 요청(request)의 발생을 개시(initiating)시키는 단계와; 그리고
상기 제 1 솔리드-스테이트 드라이브에 의해, 상기 적어도 하나의 커맨드 또는 요청이 상기 제 1 솔리드-스테이트 드라이브와 상기 제 2 솔리드-스테이트 드라이브 간에 직접적으로 전달되도록 상기 상호연결을 통해 상기 적어도 하나의 커맨드 또는 요청을 구동(driving)시키는 단계를 포함하는 것을 특징으로 하는 방법. - 제1항에 있어서,
상기 방법은 또한,
상기 제 2 솔리드-스테이트 드라이브에서, 상기 제 1 솔리드-스테이트 드라이브에 의해 전달된 상기 적어도 하나의 커맨드 또는 요청을 수신하는 단계와;
상기 제 2 솔리드-스테이트 드라이브에 의해, 상기 적어도 하나의 커맨드 또는 요청을 수신함에 응답하여 상기 제 2 솔리드-스테이트 드라이브에 저장된 데이터에 관해 하나 이상의 데이터 동작들을 수행하는 단계와; 그리고
상기 제 2 솔리드-스테이트 드라이브에 의해, 상기 상호연결을 통해 상기 제 1 솔리드-스테이트 드라이브로 회답(reply)을 구동시키는 단계를 포함하고,
상기 회답은 상기 제 2 솔리드-스테이트 드라이브에 저장된 상기 데이터에 관한 상기 하나 이상의 데이터 동작들이 완료되었음을 표시하는 것을 특징으로 하는 방법. - 제2항에 있어서,
상기 방법은 또한,
상기 제 1 솔리드-스테이트 드라이브에서, 상기 하나 이상의 데이터 동작들이 완료되었음을 표시하는 상기 회답을 수신하는 단계를 포함하는 것을 특징으로 하는 방법. - 제1항에 있어서,
상기 제 1 솔리드-스테이트 드라이브를 상기 제 2 솔리드-스테이트 드라이브와 결합시키는 상기 상호연결은, 주변 컴포넌트 상호연결 익스프레스(Peripheral Component Interconnect Express, PCIe) 및 이더넷(Ethernet)을 이용하는 것을 특징으로 하는 방법. - 제1항에 있어서,
상기 제 1 솔리드-스테이트 드라이브와 상기 제 2 솔리드-스테이트 드라이브 간의 직접적인 통신들을 제어하기 위해 구성된 상기 큐들의 세트를 확립하는 단계는,
상기 제 1 솔리드-스테이트 드라이브에서 제출 큐(submission queue) 및 완료 큐(completion queue)를 확립하는 것을 포함하는 것을 특징으로 하는 방법. - 제5항에 있어서,
상기 적어도 하나의 커맨드 또는 요청의 발생을 개시시키는 단계는,
상기 커맨드 또는 요청이 발생되었고 상기 제 2 솔리드-스테이트 드라이브에 발행되었으며 상기 제 2 솔리드-스테이트 드라이브에 의해 아직 완료되지 않았다는 제 1 표시로 상기 제출 큐를 업데이트(updating)하는 것과, 그리고
상기 하나 이상의 데이터 동작들이 상기 제 2 솔리드-스테이트 드라이브에 의해 완료되었음을 표시하는 회답이 상기 제 2 솔리드-스테이트 드라이브에 의해 발행되어 상기 제 1 솔리드-스테이트 드라이브에서 상기 회답을 수신함에 응답하여, 상기 제 2 솔리드-스테이트 드라이브에 저장된 데이터에 관해 수행되는 하나 이상의 데이터 동작들이 완료되었다는 제 2 표시로 상기 완료 큐를 업데이트하는 것을 포함하는 것을 특징으로 하는 방법. - 제1항에 있어서,
상기 방법은 또한,
유입 커맨드(incoming command)가 호스트에 의해 발원(originate)되어 상기 제 1 솔리드-스테이트 드라이브에서 수신됨에 응답하여, 상기 제 1 솔리드-스테이트 드라이브에서 개시자 모드(initiator mode)에 진입(entering)하고 상기 적어도 하나의 커맨드 또는 요청의 발생을 개시시키는 단계를 포함하는 것을 특징으로 하는 방법. - 제1항에 있어서,
상기 방법은 또한,
호스트에 의해 발원된 커맨드와 관련되지 않은 이벤트(event)의 검출에 응답하여, 상기 제 1 솔리드-스테이트 드라이브에서 개시자 모드에 진입하고 상기 적어도 하나의 커맨드 또는 요청의 발생을 개시시키는 단계를 포함하는 것을 특징으로 하는 방법. - 명령들을 저장하는 비-일시적 컴퓨터-판독가능 매체로서,
상기 명령들은, 하나 이상의 프로세서들에 의해 실행될 때, 상기 하나 이상의 프로세서들로 하여금, 적어도,
제 1 솔리드-스테이트 드라이브에서 그리고 제 2 솔리드-스테이트 드라이브에서, 상기 제 1 솔리드-스테이트 드라이브를 상기 제 2 솔리드-스테이트 드라이브와 결합시키는 상호연결을 통해 상기 제 1 솔리드-스테이트 드라이브와 상기 제 2 솔리드-스테이트 드라이브 간의 직접적인 통신들을 제어하기 위해 구성된 큐들의 세트를 확립하는 것과;
상기 제 1 솔리드-스테이트 드라이브에서, 적어도 하나의 커맨드 또는 요청의 발생을 개시시키는 것과; 그리고
상기 적어도 하나의 커맨드 또는 요청이 상기 제 1 솔리드-스테이트 드라이브와 상기 제 2 솔리드-스테이트 드라이브 간에 직접적으로 전달되도록 상기 상호연결을 통해 상기 적어도 하나의 커맨드 또는 요청을 구동시키는 것을
행하도록 하는 것을 특징으로 하는 비-일시적 컴퓨터-판독가능 매체. - 제9항에 있어서,
상기 비-일시적 컴퓨터-판독가능 매체는 또한,
상기 제 2 솔리드-스테이트 드라이브에서, 상기 제 1 솔리드-스테이트 드라이브에 의해 전달된 상기 적어도 하나의 커맨드 또는 요청을 수신하는 것과;
상기 적어도 하나의 커맨드 또는 요청을 수신함에 응답하여 상기 제 2 솔리드-스테이트 드라이브에 저장된 데이터에 관해 하나 이상의 데이터 동작들을 수행하는 것과; 그리고
상기 상호연결을 통해 상기 제 1 솔리드-스테이트 드라이브로 회답을 구동시키는 것을
행하는 명령들을 포함하고,
상기 회답은 상기 제 2 솔리드-스테이트 드라이브에 저장된 상기 데이터에 관한 상기 하나 이상의 데이터 동작들이 완료되었음을 표시하는 것을 특징으로 하는 비-일시적 컴퓨터-판독가능 매체. - 제10항에 있어서,
상기 비-일시적 컴퓨터-판독가능 매체는 또한,
상기 제 1 솔리드-스테이트 드라이브에서, 상기 하나 이상의 데이터 동작들이 완료되었음을 표시하는 상기 회답을 수신하는 명령들을 포함하는 것을 특징으로 하는 비-일시적 컴퓨터-판독가능 매체. - 제9항에 있어서,
상기 제 1 솔리드-스테이트 드라이브를 상기 제 2 솔리드-스테이트 드라이브와 결합시키는 상기 상호연결은, 주변 컴포넌트 상호연결 익스프레스(PCIe) 및 이더넷을 이용하는 것을 특징으로 하는 비-일시적 컴퓨터-판독가능 매체. - 제9항에 있어서,
상기 제 1 솔리드-스테이트 드라이브와 상기 제 2 솔리드-스테이트 드라이브 간의 직접적인 통신들을 제어하기 위해 구성된 상기 큐들의 세트를 확립하기 위한 명령들은,
상기 제 1 솔리드-스테이트 드라이브에서 제출 큐 및 완료 큐를 확립하기 위한 명령들을 포함하는 것을 특징으로 하는 비-일시적 컴퓨터-판독가능 매체. - 제13항에 있어서,
상기 적어도 하나의 커맨드 또는 요청의 발생을 위한 명령들은,
상기 커맨드 또는 요청이 발생되었고 상기 제 2 솔리드-스테이트 드라이브에 발행되었으며 상기 제 2 솔리드-스테이트 드라이브에 의해 아직 완료되지 않았다는 제 1 표시로 상기 제출 큐를 업데이트하기 위한 명령들과, 그리고
상기 하나 이상의 데이터 동작들이 상기 제 2 솔리드-스테이트 드라이브에 의해 완료되었음을 표시하는 회답이 상기 제 2 솔리드-스테이트 드라이브에 의해 발행되어 상기 제 1 솔리드-스테이트 드라이브에서 상기 회답을 수신함에 응답하여, 상기 제 2 솔리드-스테이트 드라이브에 저장된 데이터에 관한 하나 이상의 데이터 동작들이 완료되었다는 제 2 표시로 상기 완료 큐를 업데이트하기 위한 명령들을 포함하는 것을 특징으로 하는 비-일시적 컴퓨터-판독가능 매체. - 제9항에 있어서,
상기 비-일시적 컴퓨터-판독가능 매체는 또한,
유입 커맨드가 호스트에 의해 발원되어 상기 제 1 솔리드-스테이트 드라이브에서 수신됨에 응답하여, 상기 제 1 솔리드-스테이트 드라이브에서 개시자 모드에 진입하고 상기 적어도 하나의 커맨드 또는 요청의 발생을 개시시키기 위한 명령들을 포함하는 것을 특징으로 하는 비-일시적 컴퓨터-판독가능 매체. - 제9항에 있어서,
상기 비-일시적 컴퓨터-판독가능 매체는 또한,
호스트에 의해 발원된 커맨드와 관련되지 않은 이벤트의 검출에 응답하여, 상기 제 1 솔리드-스테이트 드라이브에서 개시자 모드에 진입하고 상기 적어도 하나의 커맨드 또는 요청의 발생을 개시시키기 위한 명령들을 포함하는 것을 특징으로 하는 비-일시적 컴퓨터-판독가능 매체. - 장치로서,
상기 장치는 솔리드-스테이트 드라이브를 포함하고,
상기 솔리드-스테이트 드라이브는 로컬 프로세서(local processor) 및 메모리 어레이(memory array)를 포함하고,
상기 메모리 어레이는 디지털방식으로 인코딩된 지속적인 데이터를 비-휘발성 메모리 상에 저장하도록 되어 있고,
상기 로컬 프로세서는 개시자 모드에서 동작하도록 되어 있고,
상기 개시자 모드에서, 상기 로컬 프로세서는 상기 솔리드-스테이트 드라이브에 통신가능하게 결합된 하나 이상의 추가적인 솔리드-스테이트 드라이브들에 상호연결을 통해 직접적으로 전달되는 데이터 저장 절차(data storage procedure)를 위한 커맨드 또는 요청의 발생을 개시시키는 것을 특징으로 하는 장치. - 제17항에 있어서,
상기 솔리드-스테이트 드라이브는 또한, 로컬 메모리(local memory) 내에 할당되는 하나 이상의 큐들을 포함하고,
상기 하나 이상의 큐들은, 상기 솔리드-스테이트 드라이브에 의해 제공되는 데이터 저장 절차를 위한 상기 커맨드 또는 요청의 발생 및 발행과 관련된 하나 이상의 상태 표시자(status indicator)들을 저장하도록 되어 있는 것을 특징으로 하는 장치. - 제17항에 있어서,
상기 솔리드-스테이트 드라이브는 또한, 상기 솔리드-스테이트 드라이브의 로컬 메모리 내에 할당되는 하나 이상의 큐들을 포함하고,
상기 하나 이상의 큐들은, 상기 커맨드 또는 요청이 상기 솔리드-스테이트 드라이브에 의해 발생되고 발행됨에 응답하여 수행되는 상기 하나 이상의 추가적인 솔리드-스테이트 드라이브들에 의한 데이터 저장 프로세스(data storage process)의 완료의 표시와 관련된 하나 이상의 상태 표시들을 저장하도록 되어 있는 것을 특징으로 하는 장치. - 제17항에 있어서,
상기 상호연결은 주변 컴포넌트 상호연결 익스프레스(PCIe) 버스 및 이더넷을 포함하는 것을 특징으로 하는 장치.
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201862783060P | 2018-12-20 | 2018-12-20 | |
US62/783,060 | 2018-12-20 | ||
US16/717,408 | 2019-12-17 | ||
US16/717,408 US11366610B2 (en) | 2018-12-20 | 2019-12-17 | Solid-state drive with initiator mode |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20200078382A true KR20200078382A (ko) | 2020-07-01 |
Family
ID=69061085
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020190171199A KR20200078382A (ko) | 2018-12-20 | 2019-12-19 | 개시자 모드를 갖는 솔리드-스테이트 드라이브 |
Country Status (5)
Country | Link |
---|---|
US (2) | US11366610B2 (ko) |
EP (1) | EP3671477B1 (ko) |
KR (1) | KR20200078382A (ko) |
CN (1) | CN111352583A (ko) |
TW (2) | TW202416147A (ko) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11366610B2 (en) | 2018-12-20 | 2022-06-21 | Marvell Asia Pte Ltd | Solid-state drive with initiator mode |
US10942881B2 (en) | 2019-06-25 | 2021-03-09 | Micron Technology, Inc. | Parallel operations in aggregated and virtualized solid state drives |
US10942846B2 (en) | 2019-06-25 | 2021-03-09 | Micron Technology, Inc. | Aggregated and virtualized solid state drives accessed via multiple logical address spaces |
US11768613B2 (en) | 2019-06-25 | 2023-09-26 | Micron Technology, Inc. | Aggregation and virtualization of solid state drives |
US11513923B2 (en) | 2019-06-25 | 2022-11-29 | Micron Technology, Inc. | Dynamic fail-safe redundancy in aggregated and virtualized solid state drives |
US11055249B2 (en) | 2019-06-25 | 2021-07-06 | Micron Technology, Inc. | Access optimization in aggregated and virtualized solid state drives |
US11762798B2 (en) | 2019-06-25 | 2023-09-19 | Micron Technology, Inc. | Aggregated and virtualized solid state drives with multiple host interfaces |
US11573708B2 (en) * | 2019-06-25 | 2023-02-07 | Micron Technology, Inc. | Fail-safe redundancy in aggregated and virtualized solid state drives |
US11288196B2 (en) * | 2020-01-15 | 2022-03-29 | EMC IP Holding Company LLC | Efficient data read operation |
US11704059B2 (en) | 2020-02-07 | 2023-07-18 | Samsung Electronics Co., Ltd. | Remote direct attached multiple storage function storage device |
US12014052B2 (en) * | 2021-03-22 | 2024-06-18 | Google Llc | Cooperative storage architecture |
US20220311716A1 (en) * | 2021-03-25 | 2022-09-29 | Nokia Solutions And Networks Oy | Supporting communications for data storage |
US11755251B2 (en) * | 2021-06-02 | 2023-09-12 | Samsung Electronics Co., Ltd. | Virtual computational storage devices |
US20220391224A1 (en) * | 2021-06-03 | 2022-12-08 | Samsung Electronics Co., Ltd. | Plugin framework mechanism to manage computational storage devices |
Family Cites Families (37)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7499450B2 (en) | 2004-04-30 | 2009-03-03 | Infineon Technologies Ag | Router IP port for an IP router |
CN103380600B (zh) | 2011-02-17 | 2016-11-09 | 日本电气株式会社 | 网络***和网络流跟踪方法 |
US20180107591A1 (en) * | 2011-04-06 | 2018-04-19 | P4tents1, LLC | System, method and computer program product for fetching data between an execution of a plurality of threads |
CN102566943B (zh) * | 2011-12-31 | 2015-03-11 | 记忆科技(深圳)有限公司 | 基于固态硬盘的通讯方法及固态硬盘 |
US9430412B2 (en) | 2013-06-26 | 2016-08-30 | Cnex Labs, Inc. | NVM express controller for remote access of memory and I/O over Ethernet-type networks |
US9785355B2 (en) | 2013-06-26 | 2017-10-10 | Cnex Labs, Inc. | NVM express controller for remote access of memory and I/O over ethernet-type networks |
US10063638B2 (en) | 2013-06-26 | 2018-08-28 | Cnex Labs, Inc. | NVM express controller for remote access of memory and I/O over ethernet-type networks |
US9304690B2 (en) * | 2014-05-07 | 2016-04-05 | HGST Netherlands B.V. | System and method for peer-to-peer PCIe storage transfers |
US9565269B2 (en) | 2014-11-04 | 2017-02-07 | Pavilion Data Systems, Inc. | Non-volatile memory express over ethernet |
WO2016182756A1 (en) | 2015-05-14 | 2016-11-17 | Apeiron Data Systems | Accessing multiple storage devices from multiple hosts without remote direct memory access (rdma) |
KR102430187B1 (ko) | 2015-07-08 | 2022-08-05 | 삼성전자주식회사 | RDMA NVMe 디바이스의 구현 방법 |
US10162793B1 (en) | 2015-09-29 | 2018-12-25 | Amazon Technologies, Inc. | Storage adapter device for communicating with network storage |
EP3440553A1 (en) | 2016-04-04 | 2019-02-13 | Marvell World Trade, Ltd. | Methods and systems for accessing host memory through non-volatile memory over fabric bridging with direct target access |
EP3279810B1 (en) | 2016-06-14 | 2019-09-04 | Huawei Technologies Co., Ltd. | Data access method and related apparatus and system |
US10311008B2 (en) | 2016-08-12 | 2019-06-04 | Samsung Electronics Co., Ltd. | Storage device with network access |
US20180088978A1 (en) * | 2016-09-29 | 2018-03-29 | Intel Corporation | Techniques for Input/Output Access to Memory or Storage by a Virtual Machine or Container |
KR102631351B1 (ko) * | 2016-10-07 | 2024-01-31 | 삼성전자주식회사 | 피어-투 피어 통신을 수행할 수 있는 저장 장치와 이를 포함하는 데이터 저장 시스템 |
CN108369530B (zh) | 2016-12-05 | 2021-06-15 | 华为技术有限公司 | 非易失性高速传输总线架构中数据读写命令的控制方法、设备和*** |
US10282094B2 (en) * | 2017-03-31 | 2019-05-07 | Samsung Electronics Co., Ltd. | Method for aggregated NVME-over-fabrics ESSD |
US10691368B2 (en) | 2017-03-31 | 2020-06-23 | Samsung Electronics Co., Ltd. | System and method for providing data replication in NVMe-oF ethernet SSD |
US10459665B2 (en) | 2017-04-03 | 2019-10-29 | Samsung Electronics Co., Ltd. | System and method of configuring NVMe-oF devices using a baseboard management controller (BMC) |
US10275180B2 (en) | 2017-05-08 | 2019-04-30 | Samsung Electronics Co., Ltd. | Ethernet SSD system including storage offload engine (SoE) controller and ethernet switch |
US10860508B2 (en) * | 2017-05-25 | 2020-12-08 | Western Digital Technologies, Inc. | Offloaded disaggregated storage architecture |
US10423358B1 (en) | 2017-05-31 | 2019-09-24 | FMAD Engineering GK | High-speed data packet capture and storage with playback capabilities |
US10719474B2 (en) | 2017-10-11 | 2020-07-21 | Samsung Electronics Co., Ltd. | System and method for providing in-storage acceleration (ISA) in data storage devices |
US20190163364A1 (en) | 2017-11-30 | 2019-05-30 | Eidetic Communications Inc. | System and method for tcp offload for nvme over tcp-ip |
US10761775B2 (en) | 2018-02-09 | 2020-09-01 | Samsung Electronics Co., Ltd. | System and method for NVMe inter command association in SSD storage using a bridge device |
US10963394B2 (en) | 2018-04-16 | 2021-03-30 | Samsung Electronics Co., Ltd. | System and method for optimizing performance of a solid-state drive using a deep neural network |
US11003229B2 (en) * | 2018-07-02 | 2021-05-11 | Samsung Electronics Co., Ltd. | Cost-effective solid state disk data protection method for hot removal event |
US11231764B2 (en) | 2018-10-17 | 2022-01-25 | Samsung Electronics Co., Ltd. | System and method for supporting chassis level keep alive in NVME-of based system |
US10671302B1 (en) | 2018-10-26 | 2020-06-02 | Pure Storage, Inc. | Applying a rate limit across a plurality of storage systems |
US11366610B2 (en) | 2018-12-20 | 2022-06-21 | Marvell Asia Pte Ltd | Solid-state drive with initiator mode |
US11409465B2 (en) | 2019-01-10 | 2022-08-09 | Samsung Electronics Co., Ltd. | Systems and methods for managing communication between NVMe-SSD storage device(s) and NVMe-of host unit |
US10877682B2 (en) | 2019-01-10 | 2020-12-29 | Western Digital Technologies, Inc. | Non-disruptive cross-protocol live data migration |
CN113767361B (zh) | 2019-03-14 | 2024-06-21 | 马维尔亚洲私人有限公司 | 启用以太网的固态驱动器(ssd) |
US11200193B2 (en) | 2019-03-14 | 2021-12-14 | Marvell Asia Pte, Ltd. | Transferring data between solid state drives (SSDs) via a connection between the SSDs |
US11275698B2 (en) | 2019-03-14 | 2022-03-15 | Marvell Asia Pte Ltd | Termination of non-volatile memory networking messages at the drive level |
-
2019
- 2019-12-17 US US16/717,408 patent/US11366610B2/en active Active
- 2019-12-18 TW TW112148721A patent/TW202416147A/zh unknown
- 2019-12-18 TW TW108146474A patent/TWI828824B/zh active
- 2019-12-19 KR KR1020190171199A patent/KR20200078382A/ko active Search and Examination
- 2019-12-20 CN CN201911327339.1A patent/CN111352583A/zh active Pending
- 2019-12-20 EP EP19218779.7A patent/EP3671477B1/en active Active
-
2022
- 2022-06-20 US US17/844,559 patent/US11640269B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
CN111352583A (zh) | 2020-06-30 |
US20200201575A1 (en) | 2020-06-25 |
EP3671477A1 (en) | 2020-06-24 |
TW202416147A (zh) | 2024-04-16 |
TW202042077A (zh) | 2020-11-16 |
EP3671477B1 (en) | 2021-11-03 |
US11640269B2 (en) | 2023-05-02 |
US20220317936A1 (en) | 2022-10-06 |
TWI828824B (zh) | 2024-01-11 |
US11366610B2 (en) | 2022-06-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20200078382A (ko) | 개시자 모드를 갖는 솔리드-스테이트 드라이브 | |
US11537322B2 (en) | Granting reservation for access to a storage drive | |
US11340672B2 (en) | Persistent reservations for virtual disk using multiple targets | |
KR101993915B1 (ko) | 원격으로 액세스되는 데이터의 효율적인 라이브-이송 | |
US11550819B2 (en) | Synchronization cache seeding | |
US11256582B2 (en) | System, and control method and program for input/output requests for storage systems | |
US9213500B2 (en) | Data processing method and device | |
US8732381B2 (en) | SAS expander for communication between drivers | |
CN103858111A (zh) | 一种实现聚合虚拟化中内存共享的方法、设备和*** | |
US20160267050A1 (en) | Storage subsystem technologies | |
US11238010B2 (en) | Sand timer algorithm for tracking in-flight data storage requests for data replication | |
US11010248B2 (en) | Reuse of resources in a storage controller for executing write commands over a plurality of interfaces | |
US20140316539A1 (en) | Drivers and controllers | |
US20160266813A1 (en) | Storage subsystem technologies | |
US10996891B2 (en) | Token management for write commands transmitted by a host over a plurality of interfaces to a storage controller | |
US11740838B2 (en) | Array-based copy utilizing one or more unique data blocks | |
JPWO2018173300A1 (ja) | I/o制御方法およびi/o制御システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
N231 | Notification of change of applicant | ||
A201 | Request for examination |