KR102617360B1 - 바이트 어드레스 지정 가능한 메모리로서 비-휘발성 메모리에 액세스하는 방법 및 장치 - Google Patents

바이트 어드레스 지정 가능한 메모리로서 비-휘발성 메모리에 액세스하는 방법 및 장치 Download PDF

Info

Publication number
KR102617360B1
KR102617360B1 KR1020197017662A KR20197017662A KR102617360B1 KR 102617360 B1 KR102617360 B1 KR 102617360B1 KR 1020197017662 A KR1020197017662 A KR 1020197017662A KR 20197017662 A KR20197017662 A KR 20197017662A KR 102617360 B1 KR102617360 B1 KR 102617360B1
Authority
KR
South Korea
Prior art keywords
block
byte
addressable
data transfer
transfer command
Prior art date
Application number
KR1020197017662A
Other languages
English (en)
Other versions
KR20190098146A (ko
Inventor
공시안 제프리 쳉
Original Assignee
에이티아이 테크놀로지스 유엘씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 에이티아이 테크놀로지스 유엘씨 filed Critical 에이티아이 테크놀로지스 유엘씨
Publication of KR20190098146A publication Critical patent/KR20190098146A/ko
Application granted granted Critical
Publication of KR102617360B1 publication Critical patent/KR102617360B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0804Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4022Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/22Employing cache memory using specific memory technology
    • G06F2212/222Non-volatile memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/601Reconfiguration of cache memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computer Hardware Design (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

바이트 어드레스 지정 가능한 메모리로서 비-휘발성 메모리(NVM)와 같은 블록 어드레스 지정 가능한 입력/출력(I/O) 디바이스에 액세스하는 방법 및 시스템이 본 명세서에 개시된다. PCIe(Peripheral Component Interconnect Express) 스위치에 연결된 프론트 엔드 프로세서는 바이트 어드레스 지정 가능성을 에뮬레이트하기 위해 블록 어드레스 지정 가능한 I/O 디바이스와 프론트 엔드 인터페이스로서 수행된다. 그래픽 처리 유닛(GPU)과 같은 PCIe 디바이스는 블록 어드레스 지정 가능한 I/O 디바이스로부터 프론트 엔드 프로세서를 통해 필요한 바이트에 직접 액세스할 수 있다. 상기 PCIe 호환 디바이스는 시스템 메모리 및 호스트 프로세서를 거치지 않고도 상기 블록 I/O 디바이스로부터 데이터에 액세스할 수 있다. 일 구현예에서, 시스템은 호스트 프로세서, GPU 및 임의의 다른 PCIe 호환 디바이스에 의해 바이트 어드레스 지정 가능한 메모리에 직접 액세스를 지원하는, 블록 어드레스 지정 가능한 I/O, 바이트 어드레스 지정 가능한 I/O, 및 이들의 하이브리드를 포함할 수 있다.

Description

바이트 어드레스 지정 가능한 메모리로서 비-휘발성 메모리에 액세스하는 방법 및 장치
관련 출원에 대한 상호 참조
본 출원은, 본 명세서에 완전히 설명된 것처럼, 전체 내용이 본 명세서에 병합된, 2016년 12월 23일자로 출원된 미국 특허 출원 번호 15/389,811의 이익을 주장한다.
그래픽 처리 유닛(graphics processing unit: GPU)은 GPU 상에서 수행되는 동작을 서비스하기 위해 명목상 일정량의 로컬 또는 전용 메모리(이하, 로컬이라고 함)를 갖게 구성될 수 있다. 예를 들어, 로컬 메모리는 동적 랜덤 액세스 메모리일 수 있다. 로컬 메모리와 같은 바이트 어드레스 지정 가능한 디바이스를 갖는 GPU는 블록 어드레스 지정 가능한 메모리 유형인 비-휘발성 메모리(non-volatile memory: NVM)에도 액세스할 수 있다. GPU 또는 특정 애플리케이션이 NVM과 로컬 메모리 간에 데이터 전송을 요구하는 경우, 호스트 컴퓨팅 시스템에서 실행되는 운영 체제(operating system: OS), 디스플레이 드라이버, 디바이스 드라이버 또는 유사한 하드웨어/소프트웨어 엔티티는 일반적으로 데이터 전송 프로세스를 제어하거나 관리한다. 이 데이터 전송 프로세스는 2개의 홉 프로세스(hop process), 즉 먼저 NVM으로부터 시스템 메모리로의 홉 프로세스, 및 이후 시스템 메모리로부터 로컬 메모리로의 홉 프로세스를 필요로 한다. 특히, NVM 데이터는 먼저 NVM 제어기의 블록 입력/출력(I/O) 전송 메커니즘을 통해 시스템 메모리로 전송되어야 한다. 그러면 GPU는 로컬 메모리로부터 데이터에 액세스할 수 있다. 이것은 적어도 시스템 메모리를 사용할 것을 수반하여 트래픽 및 혼잡을 증가시킨다.
첨부된 도면과 관련하여 예로서 주어지는 이하의 설명으로부터 보다 상세한 이해가 이루어질 수 있을 것이다.
도 1은 특정 구현예에 따라 호스트 컴퓨팅 시스템 및 솔리드 스테이트 그래픽(solid state graphics: SSG) 카드를 갖는 처리 시스템을 도시하는 도면;
도 2는 일반적인 소프트웨어 스택 및 하드웨어 아키텍처를 도시하는 도면;
도 3은 특정 구현예에 따라 호스트 컴퓨팅 시스템 및 SSG 카드를 갖는 처리 시스템을 도시하는 도면;
도 4는 특정 구현예에 따른 소프트웨어 스택 및 하드웨어 아키텍처를 도시하는 도면;
도 5는 특정 구현예에 따라 도 3 및 도 4의 처리 시스템을 사용하는 흐름도;
도 6은 특정 구현예에 따라 도 3 및 도 4의 처리 시스템을 사용하는 흐름도; 및
도 7은 하나 이상의 개시된 구현예를 구현할 수 있는 예시적인 디바이스의 블록도.
본 출원은, 2016년 12월 23일자로 출원된, 발명의 명칭이 "Method and Apparatus for Connecting Direct Access From Non-volatile Memory to Local Memory"인 공동 계류 중인 출원인 미국 특허 출원 번호 15/389,596, 2016년 12월 23일자로 출원된, 발명의 명칭이 "Method and Apparatus for Connecting Non-volatile Memory locally to a GPU through a Local Switch"인 공동 계류 중인 출원인 미국 특허 출원 번호 15/389,747, 및 2016년 12월 23일자로 출원된, 발명의 명칭이 "Method and Apparatus for Integration of Non-volatile Memory"인 공동 계류 중인 출원인 미국 특허 출원 번호 15/389,908에 관한 것이며, 이들 선출원 문헌은 본 명세서에 완전히 설명된 것처럼 전체 내용이 본 명세서에 병합된다.
비-휘발성 메모리(NVM)와 같은 블록 어드레스 지정 가능한 입력/출력(I/O) 디바이스 및 바이트 어드레스 지정 가능한 메모리로서 제어기 또는 다른 유사하게 사용되는 디바이스에 액세스하는 방법 및 시스템이 본 명세서에 기술된다. PCIe(Peripheral Component Interconnect Express) 루트 콤플렉스(root complex) 및 스위치(집합적으로 PCIe 스위치)를 포함하지만 이들로 제한되지 않는 고속 직렬 컴퓨터 확장 버스에 연결된 프론트 엔드 프로세서(front end processor)는 바이트 어드레스 지정 가능성을 에뮬레이트(emulate)하기 위해 바이트 어드레스 지정 가능한 I/O 디바이스와 프론트 엔드 인터페이스로서 수행된다. 그래픽 처리 유닛(GPU)과 같은 PCIe 디바이스 또는 다른 PCIe 호환 디바이스는 블록 어드레스 지정 가능한 I/O 디바이스로부터 프론트 엔드 프로세서를 통해 필요한 바이트에 직접 액세스한다. 즉, PCIe 호환 디바이스는 시스템 메모리 및 호스트 프로세서를 거치지 않고도 블록 어드레스 지정 가능한 I/O 디바이스로부터 데이터에 액세스할 수 있다. 이것은 호스트 프로세서의 수반을 우회하고 시스템 메모리 복사를 수행하지 않는 것으로 인해 대역폭 절감 측면에서 향상된 GPU 성능을 제공한다.
또한, 프론트 엔드 프로세서는 액세스된 블록을 저장하는데 캐시를 사용하여서, 속도가 향상되고 대기 시간이 감소한다. 이것은 또한 블록에 후속 액세스 시 전체 블록을 전송하지 않는 것에 의해 이용 가능한 대역폭과 용량을 증가시킨다. 일 구현예에서, 시스템은 호스트 프로세서, GPU 및 임의의 다른 PCIe 호환 디바이스에 의해 바이트 어드레스 지정 가능한 메모리에 직접 액세스하는 것을 지원하는, 블록 어드레스 지정 가능한 I/O, 바이트 어드레스 지정 가능한 I/O, 및 이들의 하이브리드를 포함할 수 있다. 설명 및 논의를 위해, NVM 및 NVM 제어기라는 용어는 본 설명에서 본 명세서 및 청구 범위를 제한하지 않으면서 블록 어드레스 지정 가능한 I/O 디바이스의 일례로서 사용된다.
도 1은 특정 구현예에 따른 예시적인 처리 시스템(100)을 도시한다. 처리 시스템(100)은 하나 이상의 솔리드 스테이트 그래픽(SSG) 카드(110)에 연결된 호스트 컴퓨팅 시스템(105)을 포함할 수 있다. 호스트 컴퓨팅 시스템(105)은 하나 이상의 중앙 처리 유닛(CPU)(122) 및 L2 캐시(124)를 포함하는 프로세서(120)를 포함한다. 프로세서(120)는 예를 들어 동적 랜덤 액세스 메모리(dynamic random access memory: DRAM)와 같은 시스템 메모리(126) 및 이 기술 분야에 통상의 지식을 가진 자에 알려진 다른 구성 요소에 연결되거나 통신할 수 있다(집합적으로 "연결될 수 있다"라고 칭함).
일반적으로, 각각의 SSG 카드(110)는 프로세서(120)와 인터페이싱하기 위해 PCIe (Peripheral Component Interconnect Express) 스위치((PCIe 스위치)(130)를 포함하지만 이로 제한되지 않는 고속 직렬 컴퓨터 확장 버스를 포함한다. PCIe 스위치(130)는 예시를 위해 도시되고 다른 전기 또는 통신 인터페이스가 사용될 수 있다. 각각의 SSG 카드(110)는, 관련된 NVM(134)에 액세스하기 위해, 예를 들어, NVM 익스프레스(NVM Express: NVMe) 또는 비-휘발성 메모리 호스트 제어기 인터페이스 사양(Non-Volatile Memory Host Controller Interface Specification)(NVMHCI) 디바이스와 같은 하나 이상의 비-휘발성 메모리(NVM) 제어기(132) 및 PCIe 스위치(130)를 통해 연결된 하나 이상의 GPU(140)를 더 포함한다. 각각의 GPU(140)는 L2 캐시(142)에 연결될 수 있고, 예를 들어, 관련된 제어기와 함께, 로컬 메모리(144), 고 대역폭 메모리(high bandwidth memory: HBM), 더블 데이터 레이트(double data rate) 4세대 동기식 동적 랜덤 액세스 메모리(DDR4), 더블 데이터 레이트 유형의 5 동기식 그래픽 랜덤 액세스 메모리(GDDR5), 하이브리드 메모리 큐브(hybrid memory cube) 또는 다른 유사하게 사용되는 메모리일 수 있는 메모리 아키텍처에 로컬적으로 연결될 수 있다. 예시 및 설명을 위해, 로컬 메모리라는 용어는 본 명세서 및 청구 범위를 제한하지 않고 메모리 아키텍처의 일례로서 본 설명에 사용된다. 각각의 NVM 제어기(132)는 관련된 NVM(134)을 관리하고 이에 액세스할 수 있고, 특히 호스트 컴퓨팅 시스템(105) 또는 GPU(140)로부터 들어오는 커맨드(incoming command)를 디코딩할 수 있다. 이러한 구성은 예시를 위한 것이고 다른 구성도 본 설명 및 청구 범위 내에서 구현될 수 있다.
도 2는 예를 들어 도 1의 처리 시스템(100)과 같은 처리 시스템을 위한 소프트웨어 상호 운용성을 도시한다. 도 2는 소프트웨어 스택(200)을 사용하여 소프트웨어 및 하드웨어 상호 운용성을 예시하기 위해 간략화된 처리 시스템(205)을 사용한다. 처리 시스템(205)은 시스템 메모리(252)에 연결된 CPU(250), NVM(264)에 연결된 NVM 제어기(262), 및 로컬 메모리(272)에 연결된 GPU(270)를 포함하며, 이들 요소는 모두 PCIe 스위치(280)를 통해 연결된다.
소프트웨어 스택(200)의 기능은 이 기술 분야에 통상의 지식을 가진 자에 잘 알려져 있으며, 다음은 대표적이고 예시를 위한 예이다. 일반적으로, 소프트웨어 스택(200)은 CPU(250) 상에서 동작한다. 소프트웨어 스택(200)은 관리 스택(210), 블록 액세스 애플리케이션 프로그램 인터페이스(application program interface: API)(220), 파일 액세스 API(230), 파일 시스템(240), NVM 디바이스 드라이버(245), 및 운영 체제(OS)(도시되지 않음)와 같은 다른 소프트웨어 구성 요소를 포함하지만 이들로 제한되지 않는다. 관리 스택(210)은 시스템 관리 도구를 제공하며, 이 관리 스택은, 파일 시스템(240)을 제어 및 구성하고, 볼륨을 포맷하고, 다른 유사한 기능을 수행하기 위해 사용되는, 관리 사용자 인터페이스(user interface: UI)(212) 및 관리 라이브러리(management library)(214)를 포함한다. 블록 액세스 API(220) 및 파일 액세스 API(230)는 입력/출력(I/O) 또는 액세스 API이다. 블록 액세스 API(220)는 표준 원시(raw) 디바이스 액세스 프로토콜(224)을 통해 2K, 4K, 8K, 16K, 64K, 128K 등과 같은 다양한 블록 크기로 메모리에 액세스하기 위해 애플리케이션(222)에 의해 사용된다. 파일 액세스 API(230)는 표준 파일 API(234)를 통해 파일 시스템(240)에 액세스하기 위해 애플리케이션(232)에 의해 수행된다. 이것은 네트워크 파일 시스템(Network File System: NFS) 또는 서버 메시지 블록(Server Message Block: SMB)과 같은 다양한 액세스 프로토콜을 사용하여 수행될 수 있다. 블록 액세스 API(220) 및 파일 액세스 API(230)는 모두 NVM 디바이스 드라이버(245)와 같은 디바이스 드라이버를 사용하여 NVM(264)과 같은 메모리에 액세스한다.
소프트웨어 스택(200)의 I/O 또는 파일 액세스 API를 사용하여 액세스 동작이 수행되는 예에서, 파일이 열리고, 함수 호출(function call)을 위해 파일을 식별하기 위해 파일 핸들(file handle)이 생성된다. 그런 다음 이 파일 핸들에 대해 파일 맵핑 핸들 또는 객체가 생성된다. 이것은 CPU(250)에 의해 액세스하기 위해 파일의 크기에 대해 가상 어드레스(virtual address: VA) 범위 또는 공간을 할당한다. 그런 다음 이 파일은 할당된 VA 공간으로 맵핑된다. 액세스의 경우, VA 공간은 CPU(250)로부터 관련 로드(load) 또는 저장(store) 커맨드에 의해 히트(hit)된다. VA 공간이 물리적으로 메모리의 일부에 맵핑되지 않기 때문에, 로드 또는 저장 커맨드는 결함을 생성한다. OS는 이 결함을 포착하고, NVM 디바이스 드라이버(245)를 호출하여 예를 들어 NVM 제어기(262)에 블록 I/O 직접 메모리 액세스(direct memory access: DMA) 커맨드를 발행한다. 요청된 데이터는 (데이터 경로(290)로 도시된 바와 같이) NVM(264)으로부터 시스템 메모리(252)로 복사된다. OS는 시스템 메모리(252)의 일부를 결함이 있는 할당된 VA 공간에 맵핑하고, CPU(250)에 의한 액세스를 차단 해제(unblock)한다. 도시된 바와 같이, 애플리케이션(222 또는 232)은 기본 액세스 메커니즘을 알지 못한다. OS는 NVM 제어기(262) 및 NVM(264)과 같은 블록 I/O 디바이스에 의해 제공되는 블록 I/O DMA 커맨드를 사용하는 것에 의해 액세스를 이행하는 기본 작업을 수행한다.
하드웨어 관점에서, CPU(250)는 (레지스터 인터페이스인) 블록 I/O 프로그래밍 인터페이스를 사용하여, 예를 들어, 4K바이트 단위로 데이터 블록을 시스템 메모리(252)에 복사하는 DMA 커맨드를 발행한다. 이것은 NVM 제어기(262)의 블록 I/O DMA 커맨드를 사용하여 데이터를 복사하고 시스템 메모리(252)에 송신하는 NVM 디바이스 드라이버(245)와 같은 디바이스 드라이버를 사용하여 이루어진다. 그런 다음 CPU(250)는 시스템 메모리(252)로부터 데이터에 액세스할 수 있다. GPU(270)는 PCIe와 같은 상호 연결 버스를 통해 시스템 메모리(252)로부터 데이터에 액세스할 수 있다. 대안적으로, 데이터의 복사본은 먼저 (데이터 경로(292)로 도시된 바와 같이) 시스템 메모리(252)로부터 로컬 메모리(272)로 복사된다. GPU(270)는 로컬 메모리(272)로부터 데이터에 액세스할 수 있다.
상기는 일반적인 메모리-맵핑된 파일 I/O 메커니즘 또는 블록 I/O 액세스 모델을 설명한다. 일반적인 메모리 맵핑 파일 I/O 메커니즘에서, GPU(270)가 데이터에 액세스하기 전에 연속적인 일련의 단계들이 완료될 필요가 있다. 특히, 데이터는 복사되고, 시스템 메모리(252)에 저장되고, 다시 복사되고, 궁극적으로 로컬 메모리(272)에 저장된다. 이 시간 동안, GPU(270)는 진행될 수 없고 정지 상태에 있다. 문제는 GPU(270)가 NVM(264)에 직접 액세스하지 않는다는 것이다. 이 문제를 해결할 수 있는 하나의 가능한 해결책은 바이트 어드레스 지정 가능한 메모리 맵핑 디바이스인 비-휘발성 듀얼 인라인 메모리 모듈(Non-Volatile Dual In-line Memory Module: NVDIMM)을 사용하는 것이다. 그러나 NVDIMM은, CPU에 연결되고 PCIe 디바이스인 GPU에 연결되지 않은 동적 랜덤 액세스 메모리(DRAM) 인터페이스에 대해서만 지원된다. 따라서 이 제안된 해결책은 직접 액세스를 제공하지 못한다.
도 3은 특정 구현예에 따라 블록 I/O 디바이스에 직접 액세스를 제공하는 예시적인 처리 시스템(300)을 도시한다. 처리 시스템(300)은 하나 이상의 SSG 카드(310)에 연결된 호스트 컴퓨팅 시스템(305)을 포함할 수 있다. 호스트 컴퓨팅 시스템(305)은 하나 이상의 CPU(322) 및 L2 캐시(324)를 포함하는 프로세서(320)를 포함한다. 프로세서(320)는 예를 들어 DRAM과 같은 시스템 메모리(326) 및 이 기술 분야에 통상의 지식을 가진 자에 알려진 다른 구성 요소에 연결될 수 있다.
일반적으로, 각각의 SSG 카드(310)는 프로세서(320)와 인터페이싱하기 위해 PCIe 스위치(330)를 포함한다. PCIe 스위치(330)는 예시를 위해 도시되고 다른 전기 또는 통신 인터페이스도 사용될 수 있다. 각각의 SSG 카드(310)는 관련된 NVM(334)에 액세스하기 위해 예를 들어 NVMe 또는 NVMHCI 디바이스와 같은 하나 이상의 NVM 제어기(332) 및 PCIe 스위치(330)를 통해 연결된 하나 이상의 GPU(340)를 더 포함한다. 각각의 GPU(340)는 L2 캐시(342)에 연결될 수 있고 로컬 메모리(344)에 로컬적으로 연결될 수 있다. 각각의 SSG 카드(310)는, PCIe 스위치(330)와 함께 위치되어 이 PCIe 스위치에 연결되고 하나 이상의 NVM 제어기(332) 각각에 더 연결된 프론트 엔드 프로세서(350)를 더 포함한다. 캐시(352)는 프론트 엔드 프로세서(350)에 연결된다. 프론트 엔드 프로세서(350)는 PCIe 버스에서 바이트 어드레스 지정 가능성을 에뮬레이트하기 위해 NVM 제어기(332) 및 NVM(334)과 프론트-엔드 인터페이스로서 수행되는, 마이크로프로세서, 임베디드 마이크로프로세서, 전계 프로그래밍 가능한 게이트 어레이(field-programmable gate array: FPGA) 또는 유사한 디바이스일 수 있다. 특히, 도 4와 관련하여 더 설명된 바와 같이, 프론트 엔드 프로세서(350)는 호스트 컴퓨팅 시스템(305) 또는 GPU(340)로부터 들어오는 커맨드를 디코딩하고, NVM 제어기(332) 및 NVM(334)으로부터 요청된 바이트를 판독하고, 이 바이트를 CPU(322) 또는 GPU(340)에 각각 직접 전송한다. 일 구현예에서, 이 바이트는 각각 CPU(322) 또는 GPU(340)에 의해 액세스하기 위해 L2 캐시(324) 또는 L2 캐시(342)로 각각 전송될 수 있다. 이 구성은 예시를 위한 것이며 다른 구성도 본 명세서 및 청구 범위 내에서 구현될 수 있다.
도 4는 예를 들어 도 3의 처리 시스템(300)과 같은 처리 시스템을 위한 소프트웨어 상호 운용성을 도시한다. 도 4는 소프트웨어 스택(400)을 사용하여 소프트웨어 및 하드웨어 상호 운용성을 예시하기 위해 간략화된 처리 시스템(405)을 사용한다. 일반적으로, 소프트웨어 스택(400)은 CPU(450) 상에서 동작한다. 소프트웨어 스택(400)은 관리 스택(410), 블록 액세스 애플리케이션 프로그램 인터페이스(API)(420), 파일 액세스 API(430), 파일 시스템(440), NVM 디바이스 드라이버(445), 및 운영 체제(OS)(도시되지 않음)와 같은 다른 소프트웨어 구성 요소를 포함하지만 이들로 제한되지 않는다. 관리 스택(410)은 시스템 관리 도구를 제공하고, 이 관리 스택은, 파일 시스템(440)을 제어 및 구성하고, 볼륨을 포맷하고, 다른 유사한 기능을 수행하는 데 사용되는, 관리 사용자 인터페이스(UI)(412) 및 관리 라이브러리(414)를 포함한다. 블록 액세스 API(420) 및 파일 액세스 API(430)는 입력/출력(I/O) 또는 액세스 API이다. 블록 액세스 API(420)는 표준 원시 디바이스 액세스 프로토콜(424)을 통해 2K, 4K, 8K, 16K, 64K, 128K 등과 같은 다양한 블록 크기로 메모리에 액세스하기 위해 애플리케이션(422)에 의해 사용된다. 파일 액세스 API(430)는 표준 파일 API(434)를 통해 파일 시스템(440)에 액세스하기 위해 애플리케이션(432)에 의해 사용된다.
처리 시스템(405)은 시스템 메모리(452)에 연결된 CPU(450), NVM(462)에 연결된 NVM 제어기(460), 및 로컬 메모리(472)에 연결된 GPU(470)를 포함하고, 이들 요소는 모두 PCIe 스위치(480)를 통해 연결된다. 처리 시스템(405)은 프론트 엔드 프로세서(465)를 더 포함한다. 일 구현예에서, 프론트 엔드 프로세서(465)는 목적지 메모리 어드레스에 DMA 데이터 전송을 개시하는 것을 의미하는 PCIe 마스터, 및 다른 디바이스 메모리 액세스 요청에 응답하는 것을 의미하는 PCIe 슬레이브일 수 있다. 일 구현예에서, 프론트 엔드 프로세서(465)는 슬레이브 요청을 유지하기 위해 제공될 수 있는 캐시(467)에 연결된다. 프론트 엔드 프로세서(465)는 레지스터 애퍼처(register aperture)(482) 및 메모리 애퍼처(memory aperture)(484)를 통해 PCIe 스위치(480)와 함께 위치되고 이 PCIe 스위치에 연결된다. 레지스터 애퍼처(482) 및 메모리 애퍼처(484)는 PCIe 의미론(이는 베이스 어드레스 레지스터(Base Address Register: BAR)라고도 알려져 있음) 하에서 정의되고, 이에 의해 GPU(470) 또는 CPU(450)와 같은 피어(peer) PCIe 디바이스가 표준 PCIe 액세스 사이클을 사용하여 NVM 제어기(460) 및 NVM(462)과 같은 타깃 PCIe 디바이스에 액세스할 수 있다.
일반적으로, 데이터 전송 커맨드가 레지스터 애퍼처(482) 또는 메모리 애퍼처(484) 중 하나에 속하는 (예를 들어, GPU(470) 또는 CPU(450)로부터 수신된) PCIe 목적지 어드레스를 갖는다면, 데이터 전송 커맨드는 이후 프론트 엔드 프로세서(465)로 전달된다. PCIe 목적지 어드레스가 레지스터 애퍼처(482)에 속하는 경우 프론트 엔드 프로세서(465)는 전술된 바와 같이 NVM 제어기(460)의 블록 I/O DMA 커맨드를 통해 블록 어드레스 지정 가능한 처리를 수행한다. PCIe 목적지 어드레스가 메모리 애퍼처(484)에 속하는 경우, 프론트 엔드 프로세서(465)는 바이트 어드레스 지정 가능한 처리를 수행한다. 일 구현예에서, 프론트 엔드 프로세서(465)는 예를 들어, 판독 및 기입 액세스를 위해 동작할 수 있다. 판독 액세스 구현예에서, 프론트 엔드 프로세서(465)는 (요청된 바이트가 이전에 요청된 블록에 있다면) 캐시(467)로부터 데이터 바이트를 판독하고 또는 NVM 제어기(460)의 블록 I/O DMA 커맨드를 통해 NVM(462)으로부터 데이터 블록을 판독한다. 판독된 데이터 블록은 캐시(467)에 저장되고, 요청된 바이트는 CPU(450)(데이터 경로(495)로 도시됨) 또는 GPU(470)(데이터 경로(496)로 도시됨)로 전달된다. 기입 액세스 구현예에서, 프론트 엔드 프로세서(465)는 데이터 바이트를 캐시(467)에 기입하고, (요청된 바이트가 캐시(467)에 존재하는 경우) NVM 제어기(460)의 블록 I/O DMA 커맨드를 통해 데이터를 다시 NVM(462)에 플러시(flush)하고, 또는 NVM 제어기(460)의 블록 I/O DMA 커맨드를 통해 데이터를 NVM(462)에 기입한다. 레지스터 애퍼처(482) 및 메모리 애퍼처(484)를 모두 제공하면 블록 및 바이트 어드레스 지정 가능성 처리를 허용할 수 있다.
프론트 엔드 프로세서(465) 및 메모리 애퍼처(484)를 포함하면, 예를 들어, 블록 액세스 API(420) 및 파일 액세스 API(430)에 더하여 영구 메모리 스택(490)을 사용할 수 있다. 블록 액세스 API(420) 및 파일 액세스 API(430)의 동작은 전술된 바와 같다. 영구 메모리 스택(490)은 예를 들어 애플리케이션(491)이 NVM(462)에 복사 없는 액세스(zero-copy access)를 수행할 수 있게 한다. 즉, 애플리케이션(491)은 I/O 처리 없이, 큐잉 없이, 및 동기식 판독 및/또는 기입 없이 메모리 맵핑 처리(493)를 통해 로드/저장 처리(492)를 수행할 수 있다.
도 5는, 도 3 및 도 4와 함께, 판독 액세스 시나리오에서 블록 I/O 디바이스에 바이트 어드레스 지정 가능성을 제공하는 예시적인 흐름도(500)를 도시한다. 데이터 전송 커맨드 또는 메모리 액세스 요청은 프로세서(320) 또는 GPU(340)와 같은 프로세서로부터 PCIe 스위치(330)와 같은 로컬 스위치를 통해 NVM(334)과 같은 목적지 디바이스로 송신된다(단계 505). 일 구현예에서, 목적지 어드레스에는 데이터 전송 커맨드가 제공된다. 프론트 엔드 프로세서(350)와 같은 프론트 엔드 프로세서는 데이터 전송 커맨드가 블록 어드레스 지정 가능한 처리를 필요로 하는지 또는 바이트 어드레스 지정 가능한 처리를 필요로 하는지 여부를 결정한다(단계 510). 일 구현예에서, 데이터 전송 커맨드가 레지스터 애퍼처에 속하는지 또는 메모리 애퍼처(484)에 속하는지 여부는 블록 어드레스 지정 가능한 처리 또는 바이트 어드레스 지정 가능한 처리에 대한 요건을 결정한다. 블록 어드레스 지정 가능한 처리의 경우, 프론트 엔드 프로세서는 요청된 블록이 캐시(352)와 같은 관련 캐시 내에 있는지 여부를 결정한다(단계 515). 요청된 블록이 캐시 내에 존재하면, 요청된 블록은 블록 I/O 처리를 통해 전송된다(단계 520). 일 구현예에서, 블록 I/O 처리는 블록 I/O DMA 커맨드 처리일 수 있다. 요청된 블록이 캐시 내에 존재하지 않으면, 요청된 블록은 목적지 디바이스로부터 판독되고(단계 525) 이후 블록 I/O 처리를 통해 전송된다(단계 520). 일 구현예에서, 요청되거나 판독된 블록은 캐시에 저장된다. 일 구현예에서, 요청된 블록은 타깃 디바이스와 상관없이 시스템 메모리로 전송된다.
바이트 어드레스 지정 가능한 처리의 경우, 프론트 엔드 프로세서는 요청된 블록이 관련 캐시 내에 있는지 여부를 결정한다(단계 530). 요청된 바이트가 캐시 내에 존재하면, 요청된 바이트는 타깃 프로세서로 직접 전송된다(단계 535). 요청된 바이트가 캐시 내에 존재하지 않으면, 요청된 바이트(들)를 포함하는 블록이 목적지 디바이스로부터 판독된다(단계 540). 프론트 엔드 프로세서는 요청된 바이트를 타깃 프로세서로 전송한다(단계 535). 일 구현예에서, 요청되거나 판독된 블록은 캐시에 저장된다.
도 6은, 도 3 및 도 4와 함께, 기입 액세스 시나리오에서 블록 I/O 디바이스에 바이트 어드레스 지정 가능성을 제공하는 예시적인 흐름도(600)를 도시한다. 데이터 전송 커맨드 또는 메모리 액세스 요청은 프로세서(320) 또는 GPU(340)와 같은 프로세서로부터 PCIe 스위치(330)와 같은 로컬 스위치를 통해 NVM(334)과 같은 목적지 디바이스로 송신된다(단계 605). 일 구현예에서, 목적지 어드레스에는 데이터 전송 커맨드가 제공된다. 프론트 엔드 프로세서(350)와 같은 프론트 엔드 프로세서는 데이터 전송 커맨드가 블록 어드레스 지정 가능한 처리를 필요로 하는지 또는 바이트 어드레스 지정 가능한 처리를 필요로 하는지 여부를 결정한다(단계 610). 일 구현예에서, 데이터 전송 커맨드가 레지스터 애퍼처에 속하는지 또는 메모리 애퍼처(484)에 속하는지 여부는 블록 어드레스 지정 가능한 처리 또는 바이트 어드레스 지정 가능한 처리에 대한 요건을 결정한다. 블록 어드레스 지정 가능한 처리의 경우, 프론트 엔드 프로세서는 요청된 블록이 캐시(352)와 같은 관련 캐시 내에 있는지 여부를 결정한다(단계 615). 요청된 블록이 캐시 내에 존재하면, 캐시는 데이터로 업데이트되고(단계 620), 이 데이터는 NVM 제어기(332)의 블록 I/O DMA 커맨드를 통해 NVM(334)과 같은 목적지 디바이스로 다시 플러시된다(단계 622). 일 구현예에서, 캐시 내 데이터는 무효화되고(단계 621), 이 데이터는 NVM 제어기(332)의 블록 I/O DMA 커맨드를 통해 목적지 디바이스에서 업데이트된다(단계 622). 캐시 무효화는 다양한 기술을 사용하여 구현될 수 있으며, 도 6은 예시를 위한 것이다. 요청된 블록이 캐시 내에 존재하지 않으면, 데이터는 블록 I/O DMA 커맨드를 통해 목적지 디바이스에서 업데이트된다(단계 625).
바이트 어드레스 지정 가능한 처리의 경우에, 프론트 엔드 프로세서는 요청된 바이트가 관련 캐시 내에 있는지 여부를 결정한다(단계 630). 요청된 바이트가 캐시 내에 존재하면, 캐시는 직접 (즉, 바이트 레벨에서) 업데이트되고(단계 635), 이 데이터는 NVM 제어기(332)의 블록 I/O DMA 커맨드를 통해 NVM(334)과 같은 목적지 디바이스로 다시 플러시된다(단계 637). 일 구현예에서, 캐시 내 데이터는 무효화되고(단계 636), 이 데이터는 NVM 제어기(332)의 블록 I/O DMA 커맨드를 통해 목적지 디바이스에서 업데이트된다(단계 637). 요청된 바이트가 캐시 내에 존재하지 않으면, 데이터는 블록 I/O DMA 커맨드를 통해 목적지 디바이스에서 업데이트된다(단계 640).
도 7은 하나 이상의 개시된 구현예 중 일부를 구현할 수 있는 예시적인 디바이스(700)의 블록도이다. 디바이스(700)는 예를 들어, 헤드 장착 디바이스, 서버, 컴퓨터, 게임 디바이스, 핸드헬드 디바이스, 셋톱 박스, 텔레비전, 모바일 폰 또는 태블릿 컴퓨터를 포함할 수 있다. 디바이스(700)는 프로세서(702), 메모리(704), 저장 매체(706), 하나 이상의 입력 디바이스(708), 및 하나 이상의 출력 디바이스(710)를 포함한다. 디바이스(700)는 선택적으로 입력 드라이버(712) 및 출력 드라이버(714)를 더 포함할 수 있다. 디바이스(700)는 도 7에 도시되지 않은 추가적인 구성 요소를 포함할 수 있는 것으로 이해된다.
프로세서(702)는 중앙 처리 유닛(CPU), 그래픽 처리 유닛(GPU), 동일한 다이(die) 상에 위치된 CPU 및 GPU, 또는 하나 이상의 프로세서 코어를 포함할 수 있으며, 각각의 프로세서 코어는 CPU 또는 GPU일 수 있다. 메모리(704)는 프로세서(702)와 동일한 다이 상에 위치될 수 있고 또는 프로세서(702)와는 별개로 위치될 수 있다. 메모리(704)는 휘발성 또는 비-휘발성 메모리, 예를 들어 랜덤 액세스 메모리(RAM), 동적 RAM , 또는 캐시를 포함할 수 있다.
저장 매체(706)는 예를 들어 하드 디스크 드라이브, 솔리드 스테이트 드라이브, 광 디스크 또는 플래시 드라이브와 같은 고정식 또는 이동식 저장 매체를 포함할 수 있다. 입력 디바이스(708)는 키보드, 키패드, 터치 스크린, 터치 패드, 검출기, 마이크로폰, 가속도계, 자이로스코프, 생체 인식 스캐너, 또는 네트워크 연결부(예를 들어, 무선 IEEE 802 신호의 송신 및/또는 수신용 무선 근거리 네트워크 카드)를 포함할 수 있다. 출력 디바이스(710)는 디스플레이, 스피커, 프린터, 촉각 피드백 디바이스, 하나 이상의 조명, 안테나 또는 네트워크 연결부(예를 들어, 무선 IEEE 802 신호의 송신 및/또는 수신용 무선 근거리 네트워크 카드)를 포함할 수 있다.
입력 드라이버(712)는 프로세서(702) 및 입력 디바이스(708)와 통신하고, 이에 의해 프로세서(702)가 입력 디바이스(708)로부터 입력을 수신할 수 있게 한다. 출력 드라이버(714)는 프로세서(702) 및 출력 디바이스(710)와 통신하고, 이에 의해 프로세서(702)가 출력 디바이스(710)에 출력을 송신할 수 있게 한다. 입력 드라이버(712) 및 출력 드라이버(714)는 선택적 구성 요소이고, 디바이스(700)는 입력 드라이버(712) 및 출력 드라이버(714)가 존재하지 않는 경우 동일한 방식으로 동작할 수 있는 것으로 이해된다.
일반적으로, 데이터를 전송하는 방법은 프로세서가 블록 입력/출력(I/O) 디바이스에 액세스할 필요가 있을 때, 로컬 스위치를 통해 프론트 엔드 프로세서에서 데이터 전송 커맨드를 수신하는 단계를 포함한다. 상기 데이터 전송 커맨드가 제1 경로를 통해 수신되는 경우, 상기 프론트 엔드 프로세서는 바이트 어드레스 지정 가능한 처리를 수행하고, 바이트 어드레스 지정 가능한 처리를 수행하는 경우에 상기 데이터 전송 커맨드에서 요청된 바이트가 상기 프론트 엔드 프로세서와 관련된 캐시 내에 있는지 여부를 검사한다. 상기 데이터 전송 커맨드가 판독인 경우, 상기 프론트 엔드 프로세서는 상기 바이트가 상기 캐시 내에 존재하지 않는 경우 상기 블록 I/O 디바이스로부터 상기 바이트를 포함하는 블록을 판독하고; 상기 프론트 엔드 프로세서로부터 상기 로컬 스위치를 통해 상기 바이트를 타깃 프로세서로 직접 전송한다. 일 구현예에서, 상기 프로세서는 그래픽 처리 유닛(GPU) 또는 중앙 처리 유닛(CPU) 중 하나이고, 상기 타깃 프로세서는 GPU 또는 CPU 중 하나이고, 상기 로컬 스위치는 PCIe(Peripheral Component Interconnect Express) 스위치 또는 루트 콤플렉스이고, 상기 블록 I/O 디바이스는 비-휘발성 메모리(NVM) 디바이스이다. 일 구현예에서, 상기 제1 경로는 상기 로컬 스위치의 메모리 애퍼처에서 상기 데이터 전송 커맨드의 수신처(reception)이다. 일 구현예에서, 상기 방법은 상기 데이터 전송 커맨드 내 목적지 어드레스가 상기 메모리 애퍼처 내에 속하는지 여부를 더 결정한다. 일 구현예에서, 상기 방법은 상기 블록이 상기 블록 I/O 디바이스로부터 판독되는 경우 상기 블록을 상기 캐시에 더 저장한다. 일 구현예에서, 상기 데이터 전송 커맨드가 제2 경로를 통해 수신되는 경우, 상기 프론트 엔드 프로세서는 블록 어드레스 지정 가능한 처리를 수행한다. 일 구현예에서, 상기 제2 경로는 상기 로컬 스위치의 레지스터 애퍼처에서 상기 데이터 전송 커맨드의 수신처이다. 일 구현예에서, 본 방법은 상기 데이터 전송 커맨드 내 목적지 어드레스가 상기 레지스터 애퍼처 내에 속하는지 여부를 더 결정한다. 일 구현예에서, 상기 데이터 전송 커맨드가 기입인 경우, 본 방법은, 상기 바이트가 상기 캐시 내에 존재하는 경우, 상기 캐시를 업데이트하는 단계; 및 데이터를 상기 블록 입력/출력(I/O) 디바이스로 다시 플러시하는 단계를 더 포함한다.
일반적으로, 데이터를 전송하는 장치는, 적어도 하나의 그래픽 처리 유닛(GPU); 적어도 하나의 블록 입력/출력(I/O) 디바이스; 상기 적어도 하나의 GPU에 연결된 로컬 스위치; 상기 로컬 스위치 및 상기 적어도 하나의 블록 I/O 디바이스에 연결된 프론트 엔드 프로세서; 및 상기 프론트 엔드 프로세서에 연결된 캐시를 포함한다. 상기 프론트 엔드 프로세서는, 상기 적어도 하나의 블록 I/O 디바이스에 액세스가 요구될 때 상기 GPU로부터 데이터 전송 커맨드를 수신하고; 상기 데이터 전송 커맨드가 제1 경로를 통해 수신되는 경우, 상기 바이트 전송 커맨드를 바이트 어드레스 지정 가능한 처리를 수행하고; 상기 바이트 어드레스 지정 가능한 처리를 수행하는 경우 상기 데이터 전송 커맨드에서 요청된 바이트가 상기 캐시 내에 있는지 여부를 검사한다. 상기 데이터 전송 커맨드가 판독인 경우, 상기 프론트 엔드 프로세서는 상기 바이트가 상기 캐시 내에 존재하지 않는 경우 상기 적어도 하나의 블록 I/O 디바이스로부터 상기 바이트를 포함하는 블록을 판독하고; 상기 바이트를 타깃 프로세서로 직접 전송한다. 일 구현예에서, 상기 장치는 상기 로컬 스위치에 메모리 애퍼처를 더 포함하고, 상기 제1 경로는 상기 로컬 스위치의 상기 메모리 애퍼처에서 상기 데이터 전송 커맨드의 수신처이다. 일 구현예에서, 상기 프론트 엔드 프로세서는, 상기 데이터 전송 커맨드 내의 목적지 어드레스가 상기 메모리 애퍼처 내에 속하는지 여부를 결정한다. 일 구현예에서, 상기 프론트 엔드 프로세서는, 상기 블록이 상기 적어도 하나의 블록 I/O 디바이스로부터 판독되는 경우에 상기 블록을 상기 캐시에 저장한다. 일 구현예에서, 상기 프론트 엔드 프로세서는, 상기 데이터 전송 커맨드가 제2 경로를 통해 수신되는 경우 상기 데이터 전송 커맨드를 블록 어드레스 지정 가능한 처리를 수행한다. 일 구현예에서, 상기 장치는 상기 로컬 스위치에 레지스터 애퍼처를 더 포함하고, 상기 제2 경로는 상기 로컬 스위치의 상기 레지스터 애퍼처에서 상기 데이터 전송 커맨드의 수신처이다. 일 구현예에서, 상기 프론트 엔드 프로세서는, 상기 데이터 전송 커맨드 내의 목적지 어드레스가 상기 레지스터 애퍼처 내에 속하는지 여부를 결정한다. 일 구현예에서, 상기 데이터 전송 커맨드가 기입인 경우, 상기 프론트 엔드 프로세서는, 상기 바이트가 상기 캐시 내에 존재하는 경우 상기 캐시를 업데이트하고; 데이터를 상기 적어도 하나의 블록 입력/출력(I/O) 디바이스로 다시 플러시한다.
일반적으로, 데이터를 전송하기 위한 시스템은 프로세서 및 시스템 메모리를 포함하는 호스트 프로세서; 및 적어도 하나의 솔리드 스테이트 그래픽(SSG) 카드를 포함한다. 각각의 SSG 카드는, 적어도 하나의 그래픽 처리 유닛(GPU); 적어도 하나의 블록 입력/출력(I/O) 디바이스; 상기 호스트 프로세서 및 상기 적어도 하나의 GPU에 연결된 로컬 스위치; 상기 로컬 스위치 및 각각의 블록 I/O 디바이스에 연결된 프론트 엔드 프로세서; 및 상기 프론트 엔드 프로세서에 연결된 캐시를 포함한다. 상기 프론트 엔드 프로세서는, 상기 적어도 하나의 블록 I/O 디바이스에 액세스가 요구될 때 상기 GPU 또는 호스트 프로세서 중 하나로부터 데이터 전송 커맨드를 수신하고; 상기 데이터 전송 커맨드가 제1 경로를 통해 수신되는 경우, 상기 데이터 전송 커맨드를 바이트 어드레스 지정 가능한 처리를 수행하고; 상기 바이트 어드레스 지정한 처리를 수행하는 경우 상기 데이터 전송 커맨드에서 요청된 바이트가 상기 캐시 내에 있는지 여부를 검사한다. 상기 데이터 전송 커맨드가 판독인 경우, 상기 프론트 엔드 프로세서는 상기 바이트가 상기 캐시 내에 존재하지 않는 경우 상기 블록 I/O 디바이스로부터 상기 바이트를 포함하는 블록을 판독하고, 상기 바이트를 상기 로컬 스위치를 통해 타깃 프로세서로 직접 전송한다. 일 구현예에서, 상기 시스템은 상기 로컬 스위치에 메모리 애퍼처를 더 포함하고, 상기 제1 경로는 상기 로컬 스위치의 상기 메모리 애퍼처에서 상기 데이터 전달 커맨드의 수신처이고, 상기 프론트 엔드 프로세서는 상기 데이터 전송 커맨드 내의 목적지 어드레스가 상기 메모리 애퍼처 내에 속하는지 여부를 결정한다. 일 구현예에서, 상기 프론트 엔드 프로세서는 상기 데이터 전송 커맨드가 제2 경로를 통해 수신되는 경우 상기 데이터 전송 커맨드를 블록 어드레스 지정 가능한 처리를 수행하고, 상기 로컬 스위치는 레지스터 애퍼처를 포함하고, 상기 제2 경로는 상기 로컬 스위치의 상기 레지스터 애퍼처에서 상기 데이터 전송 커맨드의 수신처이다.
일반적으로, 명령을 포함하는 컴퓨터 판독 가능한 비-일시적인 매체로서, 상기 명령은, 처리 시스템에서 실행될 때, 상기 처리 시스템으로 하여금 데이터를 전송하는 방법을 실행하게 하고, 상기 방법은, 프로세서가 블록 입력/출력(I/O) 디바이스에 액세스할 필요가 있을 때, 로컬 스위치를 통해 프론트 엔드 프로세서에서 데이터 전송 커맨드를 수신하는 단계; 상기 데이터 전송 커맨드가 제1 경로를 통해 수신되는 경우, 상기 프론트 엔드 프로세서에 의해 바이트 어드레스 지정 가능한 처리를 수행하는 단계; 상기 바이트 어드레스 지정 가능한 처리를 수행하는 경우에 상기 데이터 전송 커맨드에서 요청된 바이트가 상기 프론트 엔드 프로세서와 관련된 캐시 내에 있는지 여부를 검사하는 단계; 및 상기 데이터 전송 커맨드가 판독인 경우, 상기 바이트가 상기 캐시 내에 존재하지 않는 경우 상기 블록 I/O 디바이스로부터 상기 바이트를 포함하는 블록을 판독하는 단계; 및 상기 프론트 엔드 프로세서로부터 상기 로컬 스위치를 통해 상기 바이트를 타깃 프로세서로 직접 전송하는 단계를 포함하는, 컴퓨터 판독 가능한 비-일시적인 매체가 제공된다. 일 구현예에서, 상기 제1 경로는 상기 로컬 스위치의 메모리 애퍼처에서 상기 데이터 전송 커맨드의 수신처이고, 상기 방법은 상기 데이터 전송 커맨드 내의 목적지 어드레스가 상기 메모리 애퍼처 내에 속하는지 여부를 결정하는 단계; 및 상기 데이터 전송 커맨드가 제2 경로를 통해 수신되는 경우 상기 데이터 전송 커맨드를 블록 어드레스 지정 가능한 처리를 수행하는 단계를 더 포함하고, 상기 제2 경로는 상기 로컬 스위치의 레지스터 애퍼처에서 상기 데이터 전송 커맨드의 수신처이다. 일 구현예에서, 상기 컴퓨터 판독 가능한 비-일시적인 매체는, 상기 데이터 전송 커맨드가 기입인 경우, 상기 바이트가 상기 캐시 내에 존재하는 경우 상기 캐시를 업데이트하는 단계; 및 데이터를 상기 블록 입력/출력(I/O) 디바이스로 다시 플러시하는 단계를 더 포함한다.
일반적으로 그리고 본 명세서에 설명된 구현예를 제한하지 않고, 처리 시스템에서 실행될 때 상기 처리 시스템이 바이트 어드레스 지정 가능한 메모리로서 비-휘발성 메모리에 액세스하는 방법을 실행하게 하는 명령을 포함하는 컴퓨터 판독 가능한 비-일시적인 매체가 제공된다.
본 발명에 기초하여 많은 변형이 가능한 것으로 이해된다. 특징 및 요소가 특정 조합으로 앞서 설명되었지만, 각각의 특징 또는 요소는 다른 특징 및 요소 없이 단독으로 또는 다른 특징 및 요소와 함께 또는 없이 다양한 조합으로 사용될 수 있다.
본 명세서에 제공된 방법은 범용 컴퓨터, 프로세서 또는 프로세서 코어에서 구현될 수 있다. 적합한 프로세서는 예를 들어 범용 프로세서, 특수 목적 프로세서, 종래 프로세서, 디지털 신호 프로세서(digital signal processor: DSP), 복수의 마이크로프로세서, DSP 코어와 관련된 하나 이상의 마이크로프로세서, 제어기, 마이크로제어기, 응용 특정 집적 회로(Application Specific Integrated Circuit: ASIC), 전계 프로그래밍 가능한 게이트 어레이(Field Programmable Gate Array: FPGA) 회로, 임의의 다른 유형의 집적 회로(integrated circuit: IC) 및/또는 상태 머신을 포함한다. 이러한 프로세서는 처리된 하드웨어 설명 언어(hardware description language: HDL) 명령, 및 넷리스트(netlist)(컴퓨터 판독 가능한 매체에 저장될 수 있는 명령)를 포함하는 다른 중간 데이터의 결과를 사용하여 제조 프로세스를 구성하는 것에 의해 제조될 수 있다. 이러한 처리 결과는 실시예의 양태들을 구현하는 프로세서를 제조하기 위해 반도체 제조 공정에서 사용되는 마스크워크(maskwork)일 수 있다.
본 명세서에 제공된 방법 또는 흐름도는 범용 컴퓨터 또는 프로세서에 의해 실행하기 위해 비-일시적인 컴퓨터 판독 가능한 저장 매체에 통합된 컴퓨터 프로그램, 소프트웨어 또는 펌웨어로 구현될 수 있다. 비-일시적인 컴퓨터 판독 가능한 저장 매체의 예로는 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 레지스터, 캐시 메모리, 반도체 메모리 디바이스, 내부 하드 디스크 및 이동식 디스크와 같은 자기 매체, 광자기 매체, 및 CD-ROM 디스크 및 DVD(digital versatile disk)와 같은 광학 매체를 포함한다.

Claims (23)

  1. 데이터를 전송하는 방법으로서,
    프로세서가 블록 어드레스 지정 가능한 입력/출력(I/O) 디바이스에 액세스할 필요가 있을 때, 로컬 스위치를 통해 프론트 엔드 프로세서에서 데이터 전송 커맨드를 수신하는 단계 - 상기 프론트 엔드 프로세서 및 상기 프로세서는 상기 로컬 스위치에 연결됨 - ;
    바이트 어드레스 지정 가능한 처리를 필요로 하는 상기 데이터 전송 커맨드가 수신되는 경우, 상기 프론트 엔드 프로세서에 의해 바이트 어드레스 지정 가능한 처리를 수행하는 단계;
    바이트 어드레스 지정 가능한 처리를 수행하는 경우에 상기 데이터 전송 커맨드에서 요청된 바이트가 상기 프론트 엔드 프로세서와 관련된 캐시 내에 있는지 여부를 검사하는 단계;
    상기 데이터 전송 커맨드가 판독인 경우,
    상기 바이트가 상기 캐시 내에 존재하지 않는 경우 상기 블록 어드레스 지정 가능한 I/O 디바이스로부터 상기 바이트를 포함하는 블록을 판독하는 단계;
    상기 요청된 바이트가 상기 캐시 내에 존재하는 경우 상기 프론트 엔드 프로세서로부터 상기 로컬 스위치를 통해 상기 바이트를 타깃 프로세서로 직접 전송하는 단계;
    블록 어드레스 지정 가능한 처리를 필요로 하는 상기 데이터 전송 커맨드가 수신되는 경우, 상기 프론트 엔드 프로세서에 의해 블록 어드레스 지정 가능한 처리를 수행하는 단계;
    블록 어드레스 지정 가능한 처리를 수행하는 경우에 상기 데이터 전송 커맨드에서 요청된 블록이 상기 프론트 엔드 프로세서와 관련된 상기 캐시 내에 있는지 여부를 검사하는 단계; 그리고
    상기 요청된 블록이 상기 캐시 내에 존재하지 않는 경우 상기 블록 어드레스 지정 가능한 I/O 디바이스로부터 상기 요청된 블록을 판독하여 블록 I/O 처리를 통해서 상기 프론트 엔드 프로세서로부터 상기 로컬 스위치를 통해 상기 타깃 프로세서로 전송하거나, 또는 상기 요청된 블록이 상기 캐시 내에 존재하는 경우 상기 요청된 블록을 블록 I/O 처리를 통해서 전송하는 단계를 포함하는, 데이터를 전송하는 방법.
  2. 제1항에 있어서,
    상기 프로세서는 그래픽 처리 유닛(graphics processing unit: GPU) 또는 중앙 처리 유닛(central processing unit: CPU) 중 하나이고, 상기 타깃 프로세서는 GPU 또는 CPU 중 하나이고, 상기 로컬 스위치는 PCIe(Peripheral Component Interconnect Express) 스위치 또는 루트 콤플렉스(root complex)이고, 상기 블록 어드레스 지정 가능한 I/O 디바이스는 비-휘발성 메모리(non-volatile memory: NVM) 디바이스인, 데이터를 전송하는 방법.
  3. 제1항에 있어서,
    바이트 어드레스 지정 가능한 처리를 필요로 하는 상기 데이터 전송 커맨드는 상기 로컬 스위치의 메모리 애퍼처에서 수신되는, 데이터를 전송하는 방법.
  4. 제3항에 있어서,
    상기 데이터 전송 커맨드 내의 목적지 어드레스가 상기 메모리 애퍼처 내에 속하는지 여부를 결정하는 단계를 더 포함하는, 데이터를 전송하는 방법.
  5. 제1항에 있어서,
    상기 블록이 상기 블록 어드레스 지정 가능한 I/O 디바이스로부터 판독되는 경우 상기 블록을 상기 캐시에 저장하는 단계를 더 포함하는, 데이터를 전송하는 방법.
  6. 삭제
  7. 제1항에 있어서,
    블록 어드레스 지정 가능한 처리를 필요로 하는 상기 데이터 전송 커맨드는 상기 로컬 스위치의 레지스터 애퍼처에서 수신되는, 데이터를 전송하는 방법.
  8. 제7항에 있어서,
    상기 데이터 전송 커맨드 내의 목적지 어드레스가 상기 레지스터 애퍼처 내에 속하는지 여부를 결정하는 단계를 더 포함하는, 데이터를 전송하는 방법.
  9. 제1항에 있어서,
    상기 데이터 전송 커맨드가 기입인 경우,
    상기 바이트가 상기 캐시 내에 존재하는 경우 상기 캐시를 업데이트하는 단계; 및
    데이터를 상기 블록 어드레스 지정 가능한 I/O 디바이스로 다시 플러시(flush)하는 단계를 더 포함하는, 데이터를 전송하는 방법.
  10. 데이터를 전송하는 장치로서,
    적어도 하나의 그래픽 처리 유닛(GPU);
    적어도 하나의 블록 어드레스 지정 가능한 입력/출력(I/O) 디바이스;
    상기 적어도 하나의 GPU에 연결된 로컬 스위치;
    상기 로컬 스위치 및 상기 적어도 하나의 블록 어드레스 지정 가능한 I/O 디바이스에 연결된 프론트 엔드 프로세서; 및
    상기 프론트 엔드 프로세서에 연결된 캐시를 포함하되,
    상기 프론트 엔드 프로세서는,
    상기 적어도 하나의 블록 어드레스 지정 가능한 I/O 디바이스에 액세스할 필요가 있을 때 데이터 전송 커맨드를 수신하고;
    바이트 어드레스 지정 가능한 처리를 필요로 하는 상기 데이터 전송 커맨드가 수신되는 경우, 바이트 어드레스 지정 가능한 처리를 수행하고;
    상기 바이트 어드레스 지정 가능한 처리를 수행하는 경우 상기 데이터 전송 커맨드에서 요청된 바이트가 상기 캐시 내에 있는지 여부를 검사하고;
    상기 데이터 전송 커맨드가 판독인 경우,
    상기 바이트가 상기 캐시 내에 존재하지 않는 경우 상기 적어도 하나의 블록 어드레스 지정 가능한 I/O 디바이스로부터 상기 바이트를 포함하는 블록을 판독하고;
    상기 요청된 바이트가 상기 캐시 내에 존재하는 경우 상기 바이트를 타깃 프로세서로 직접 전송하고;
    블록 어드레스 지정 가능한 처리를 필요로 하는 상기 데이터 전송 커맨드가 수신되는 경우, 블록 어드레스 지정 가능한 처리를 수행하고;
    블록 어드레스 지정 가능한 처리를 수행하는 경우에 상기 데이터 전송 커맨드에서 요청된 블록이 상기 프론트 엔드 프로세서와 관련된 상기 캐시 내에 있는지 여부를 검사하고; 그리고
    상기 요청된 블록이 상기 캐시 내에 존재하지 않는 경우 상기 블록 어드레스 지정 가능한 I/O 디바이스로부터 상기 요청된 블록을 판독하여 블록 I/O 처리를 통해서 상기 요청된 블록을 전송하거나, 또는 상기 요청된 블록이 상기 캐시 내에 존재하는 경우 상기 요청된 블록을 블록 I/O 처리를 통해서 전송하는, 데이터를 전송하는 장치.
  11. 제10항에 있어서,
    상기 로컬 스위치에 메모리 애퍼처를 더 포함하되, 바이트 어드레스 지정 가능한 처리를 필요로 하는 상기 데이터 전송 커맨드는 상기 로컬 스위치의 상기 메모리 애퍼처에서 수신되는, 데이터를 전송하는 장치.
  12. 제11항에 있어서,
    상기 프론트 엔드 프로세서는, 상기 데이터 전송 커맨드 내의 목적지 어드레스가 상기 메모리 애퍼처 내에 속하는지 여부를 결정하는, 데이터를 전송하는 장치.
  13. 제10항에 있어서,
    상기 프론트 엔드 프로세서는, 상기 블록이 상기 적어도 하나의 블록 어드레스 지정 가능한 I/O 디바이스로부터 판독되는 경우에 상기 블록을 상기 캐시에 저장하는, 데이터를 전송하는 장치.
  14. 삭제
  15. 제10항에 있어서,
    상기 로컬 스위치에 레지스터 애퍼처를 더 포함하되, 블록 어드레스 지정 가능한 처리를 필요로 하는 상기 데이터 전송 커맨드는 상기 로컬 스위치의 상기 레지스터 애퍼처에서 수신되는, 데이터를 전송하는 장치.
  16. 제15항에 있어서,
    상기 프론트 엔드 프로세서는, 상기 데이터 전송 커맨드 내의 목적지 어드레스가 상기 레지스터 애퍼처 내에 속하는지 여부를 결정하는, 데이터를 전송하는 장치.
  17. 제10항에 있어서,
    상기 프론트 엔드 프로세서는, 상기 데이터 전송 커맨드가 기입인 경우,
    상기 바이트가 상기 캐시 내에 존재하는 경우 상기 캐시를 업데이트하고;
    데이터를 상기 적어도 하나의 블록 어드레스 지정 가능한 I/O 디바이스로 다시 플러시(flush)하는, 데이터를 전송하는 장치.
  18. 데이터를 전송하는 시스템으로서,
    프로세서 및 시스템 메모리를 포함하는 호스트 프로세서; 및
    적어도 하나의 솔리드 스테이트 그래픽(Solid State Graphics: SSG) 카드를 포함하되, 각각의 SSG 카드는,
    적어도 하나의 그래픽 처리 유닛(GPU);
    적어도 하나의 블록 어드레스 지정 가능한 입력/출력(I/O) 디바이스;
    상기 호스트 프로세서 및 상기 적어도 하나의 GPU에 연결된 로컬 스위치;
    상기 로컬 스위치 및 각각의 블록 어드레스 지정 가능한 I/O 디바이스에 연결된 프론트 엔드 프로세서; 및
    상기 프론트 엔드 프로세서에 연결된 캐시를 포함하고,
    상기 프론트 엔드 프로세서는,
    상기 적어도 하나의 블록 어드레스 지정 가능한 I/O 디바이스에 액세스할 필요가 있을 때 데이터 전송 커맨드를 수신하고;
    바이트 어드레스 지정 가능한 처리를 필요로 하는 상기 데이터 전송 커맨드가 수신되는 경우, 바이트 어드레스 지정 가능한 처리를 수행하고;
    상기 바이트 어드레스 지정 가능한 처리를 수행하는 경우 상기 데이터 전송 커맨드에서 요청된 바이트가 상기 캐시 내에 있는지 여부를 검사하고;
    상기 데이터 전송 커맨드가 판독인 경우,
    상기 바이트가 상기 캐시 내에 존재하지 않는 경우 상기 적어도 하나의 블록 어드레스 지정 가능한 I/O 디바이스로부터 상기 바이트를 포함하는 블록을 판독하고;
    상기 요청된 바이트가 상기 캐시 내에 존재하는 경우 상기 바이트를 타깃 프로세서로 직접 전송하고;
    블록 어드레스 지정 가능한 처리를 필요로 하는 상기 데이터 전송 커맨드가 수신되는 경우, 블록 어드레스 지정 가능한 처리를 수행하고;
    블록 어드레스 지정 가능한 처리를 수행하는 경우에 상기 데이터 전송 커맨드에서 요청된 블록이 상기 프론트 엔드 프로세서와 관련된 상기 캐시 내에 있는지 여부를 검사하고; 그리고
    상기 요청된 블록이 상기 캐시 내에 존재하지 않는 경우 상기 블록 어드레스 지정 가능한 I/O 디바이스로부터 상기 요청된 블록을 판독하여 블록 I/O 처리를 통해서 상기 요청된 블록을 전송하거나, 또는 상기 요청된 블록이 상기 캐시 내에 존재하는 경우 상기 요청된 블록을 블록 I/O 처리를 통해서 전송하는, 데이터를 전송하는 시스템.
  19. 제18항에 있어서,
    상기 로컬 스위치에 메모리 애퍼처를 더 포함하되, 바이트 어드레스 지정 가능한 처리를 필요로 하는 상기 데이터 전송 커맨드는 상기 로컬 스위치의 상기 메모리 애퍼처에서 수신되고, 상기 프론트 엔드 프로세서는 상기 데이터 전송 커맨드 내의 목적지 어드레스가 상기 메모리 애퍼처 내에 속하는지 여부를 결정하는, 데이터를 전송하는 시스템.
  20. 제18항에 있어서,
    상기 로컬 스위치는 레지스터 애퍼처를 포함하고, 블록 어드레스 지정 가능한 처리를 필요로 하는 상기 데이터 전송 커맨드는 상기 로컬 스위치의 상기 레지스터 애퍼처에서 수신되는, 데이터를 전송하는 시스템.
  21. 명령을 포함하는 컴퓨터 판독 가능한 비-일시적인 매체로서, 상기 명령은, 처리 시스템에서 실행될 때, 상기 처리 시스템으로 하여금 데이터를 전송하는 방법을 실행하게 하고, 상기 방법은,
    프로세서가 블록 어드레스 지정 가능한 입력/출력(I/O) 디바이스에 액세스할 필요가 있을 때, 로컬 스위치를 통해 프론트 엔드 프로세서에서 데이터 전송 커맨드를 수신하는 단계 - 상기 프론트 엔드 프로세서 및 상기 프로세서는 상기 로컬 스위치에 연결됨 -;
    바이트 어드레스 지정 가능한 처리를 필요로 하는 상기 데이터 전송 커맨드가 수신되는 경우, 상기 프론트 엔드 프로세서에 의해 바이트 어드레스 지정 가능한 처리를 수행하는 단계;
    상기 바이트 어드레스 지정 가능한 처리를 수행하는 경우에 상기 데이터 전송 커맨드에서 요청된 바이트가 상기 프론트 엔드 프로세서와 관련된 캐시 내에 있는지 여부를 검사하는 단계;
    상기 데이터 전송 커맨드가 판독인 경우,
    상기 바이트가 상기 캐시 내에 존재하지 않는 경우 상기 블록 어드레스 지정 가능한 I/O 디바이스로부터 상기 바이트를 포함하는 블록을 판독하는 단계;
    상기 요청된 바이트가 상기 캐시 내에 존재하는 경우 상기 프론트 엔드 프로세서로부터 상기 로컬 스위치를 통해 상기 바이트를 타깃 프로세서로 직접 전송하는 단계;
    블록 어드레스 지정 가능한 처리를 필요로 하는 상기 데이터 전송 커맨드가 수신되는 경우, 상기 프론트 엔드 프로세서에 의해 블록 어드레스 지정 가능한 처리를 수행하는 단계;
    블록 어드레스 지정 가능한 처리를 수행하는 경우에 상기 데이터 전송 커맨드에서 요청된 블록이 상기 프론트 엔드 프로세서와 관련된 상기 캐시 내에 있는지 여부를 검사하는 단계; 그리고
    상기 요청된 블록이 상기 캐시 내에 존재하지 않는 경우 상기 블록 어드레스 지정 가능한 I/O 디바이스로부터 상기 요청된 블록을 판독하여 블록 I/O 처리를 통해서 상기 프론트 엔드 프로세서로부터 상기 로컬 스위치를 통해 상기 타깃 프로세서로 전송하거나, 또는 상기 요청된 블록이 상기 캐시 내에 존재하는 경우 상기 요청된 블록을 블록 I/O 처리를 통해서 전송하는 단계를 포함하는, 컴퓨터 판독 가능한 비-일시적인 매체.
  22. 제21항에 있어서,
    바이트 어드레스 지정 가능한 처리를 필요로 하는 상기 데이터 전송 커맨드는 상기 로컬 스위치의 메모리 애퍼처에서 수신되고,
    상기 데이터 전송 커맨드 내의 목적지 어드레스가 상기 메모리 애퍼처 내에 속하는지 여부를 결정하는 단계를 더 포함하는, 컴퓨터 판독 가능한 비-일시적인 매체.
  23. 제21항에 있어서,
    상기 데이터 전송 커맨드가 기입인 경우,
    상기 바이트가 상기 캐시 내에 존재하는 경우 상기 캐시를 업데이트하는 단계; 및
    데이터를 상기 블록 어드레스 지정 가능한 I/O 디바이스로 다시 플러시하는 단계를 더 포함하는, 컴퓨터 판독 가능한 비-일시적인 매체.
KR1020197017662A 2016-12-23 2017-12-06 바이트 어드레스 지정 가능한 메모리로서 비-휘발성 메모리에 액세스하는 방법 및 장치 KR102617360B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/389,811 US10521389B2 (en) 2016-12-23 2016-12-23 Method and apparatus for accessing non-volatile memory as byte addressable memory
US15/389,811 2016-12-23
PCT/CA2017/051471 WO2018112604A1 (en) 2016-12-23 2017-12-06 Method and apparatus for accessing non-volatile memory as byte addressable memory

Publications (2)

Publication Number Publication Date
KR20190098146A KR20190098146A (ko) 2019-08-21
KR102617360B1 true KR102617360B1 (ko) 2023-12-26

Family

ID=62624080

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197017662A KR102617360B1 (ko) 2016-12-23 2017-12-06 바이트 어드레스 지정 가능한 메모리로서 비-휘발성 메모리에 액세스하는 방법 및 장치

Country Status (5)

Country Link
US (1) US10521389B2 (ko)
JP (2) JP7227907B2 (ko)
KR (1) KR102617360B1 (ko)
CN (1) CN110114762B (ko)
WO (1) WO2018112604A1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10714179B2 (en) * 2016-10-07 2020-07-14 Hewlett-Packard Development Company, L.P. Hybrid memory devices
US10909012B2 (en) 2018-11-12 2021-02-02 H3 Platform, Inc. System having persistent memory
CN110209605B (zh) * 2019-05-31 2021-09-07 广州大学 Pcie总线网卡的寄存器读写方法和计算设备
US11467776B1 (en) * 2021-06-28 2022-10-11 H3 Platform Inc. System supporting virtualization of SR-IOV capable devices

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150324118A1 (en) * 2014-05-07 2015-11-12 HGST Netherlands B.V. SYSTEM AND METHOD FOR PEER-TO-PEER PCIe STORAGE TRANSFERS
KR101573047B1 (ko) * 2009-01-23 2015-12-02 삼성전자주식회사 복합 메모리 장치 및 이를 이용한 i/o 처리 방법

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050251617A1 (en) 2004-05-07 2005-11-10 Sinclair Alan W Hybrid non-volatile memory system
JP4910360B2 (ja) * 2005-10-20 2012-04-04 ソニー株式会社 記憶装置、コンピュータシステム、およびデータ書き込み方法
US7739474B2 (en) * 2006-02-07 2010-06-15 International Business Machines Corporation Method and system for unifying memory access for CPU and IO operations
US20090203430A1 (en) 2008-02-07 2009-08-13 Igt Hybrid memory system and spin-buffer journaling in a gaming machine
US9058675B2 (en) 2010-05-29 2015-06-16 Intel Corporation Non-volatile storage for graphics hardware
US9251058B2 (en) * 2010-09-28 2016-02-02 SanDisk Technologies, Inc. Servicing non-block storage requests
US8996781B2 (en) * 2012-11-06 2015-03-31 OCZ Storage Solutions Inc. Integrated storage/processing devices, systems and methods for performing big data analytics
US9003071B2 (en) 2013-03-13 2015-04-07 Futurewei Technologies, Inc. Namespace access control in NVM express PCIe NVM with SR-IOV
US9729659B2 (en) * 2013-03-14 2017-08-08 Microsoft Technology Licensing, Llc Caching content addressable data chunks for storage virtualization
US9311230B2 (en) * 2013-04-23 2016-04-12 Globalfoundries Inc. Local direct storage class memory access
US9311266B2 (en) 2013-06-14 2016-04-12 National Instruments Corporation Hidden base address register programming in peripheral component interconnect express buses
WO2015047266A1 (en) * 2013-09-26 2015-04-02 Intel Corporation Block storage apertures to persistent memory
JP2016062406A (ja) * 2014-09-19 2016-04-25 国立大学法人 筑波大学 メモリシステム、メモリシステムの制御方法及びプログラム
US10275175B2 (en) 2014-10-06 2019-04-30 Western Digital Technologies, Inc. System and method to provide file system functionality over a PCIe interface
US9891824B2 (en) * 2015-04-24 2018-02-13 International Business Machines Corporation Sub-block input/output (I/O) commands for storage device including byte stream buffer
US20160350010A1 (en) * 2015-05-31 2016-12-01 Vmware, Inc. Providing block size compatibility with a storage filter

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101573047B1 (ko) * 2009-01-23 2015-12-02 삼성전자주식회사 복합 메모리 장치 및 이를 이용한 i/o 처리 방법
US20150324118A1 (en) * 2014-05-07 2015-11-12 HGST Netherlands B.V. SYSTEM AND METHOD FOR PEER-TO-PEER PCIe STORAGE TRANSFERS

Also Published As

Publication number Publication date
CN110114762B (zh) 2023-09-15
JP2020502694A (ja) 2020-01-23
EP3559815A4 (en) 2020-07-29
US10521389B2 (en) 2019-12-31
CN110114762A (zh) 2019-08-09
JP2023015243A (ja) 2023-01-31
WO2018112604A1 (en) 2018-06-28
KR20190098146A (ko) 2019-08-21
JP7227907B2 (ja) 2023-02-22
EP3559815A1 (en) 2019-10-30
US20180181519A1 (en) 2018-06-28

Similar Documents

Publication Publication Date Title
US10896136B2 (en) Storage system including secondary memory that predicts and prefetches data
US10061724B2 (en) Latency reduction for direct memory access operations involving address translation
US9727503B2 (en) Storage system and server
KR102617360B1 (ko) 바이트 어드레스 지정 가능한 메모리로서 비-휘발성 메모리에 액세스하는 방법 및 장치
US9696942B2 (en) Accessing remote storage devices using a local bus protocol
US9116800B2 (en) Block-based storage device with a memory-mapped interface
KR20210147976A (ko) 확장 가능하고 일관성 있는 메모리 장치를 위한 시스템 및 방법
US10866737B2 (en) Apparatus, method and system to store information for a solid state drive
JP2019532427A (ja) トリガ動作を用いたgpuリモート通信
US10007464B1 (en) Method and apparatus for integration of non-volatile memory
KR20190066466A (ko) 기입 레이턴시를 줄일 수 있는 저장 장치의 동작 방법
WO2015180598A1 (zh) 对存储设备的访问信息处理方法和装置、系统
US10761736B2 (en) Method and apparatus for integration of non-volatile memory
KR20180041037A (ko) 멀티 코어 솔리드 스테이트 드라이브의 공유 분산 메모리 관리 방법
KR20220061983A (ko) 입출력 메모리 관리 유닛으로부터 게스트 운영 시스템으로의 인터럽트 제공
WO2020029619A1 (zh) 数据处理的方法、设备和服务器
CN113906389A (zh) 向访客操作系统提供输入输出存储器管理单元寄存器副本
US10198219B2 (en) Method and apparatus for en route translation in solid state graphics systems
EP3559815B1 (en) Method and apparatus for accessing non-volatile memory as byte addressable memory
US20220197840A1 (en) System direct memory access engine offload
US20220229789A1 (en) Host Memory Buffer (HMB) Abstraction Protocol Layer
WO2023129287A1 (en) Flexible memory system

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