KR20230156890A - 장치 메모리 및 프로그램들을 관리하기 위한 시스템들, 방법들, 및 장치 - Google Patents

장치 메모리 및 프로그램들을 관리하기 위한 시스템들, 방법들, 및 장치 Download PDF

Info

Publication number
KR20230156890A
KR20230156890A KR1020230058485A KR20230058485A KR20230156890A KR 20230156890 A KR20230156890 A KR 20230156890A KR 1020230058485 A KR1020230058485 A KR 1020230058485A KR 20230058485 A KR20230058485 A KR 20230058485A KR 20230156890 A KR20230156890 A KR 20230156890A
Authority
KR
South Korea
Prior art keywords
memory
program
namespace
portions
computational
Prior art date
Application number
KR1020230058485A
Other languages
English (en)
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 KR20230156890A publication Critical patent/KR20230156890A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0634Configuration or reconfiguration of storage systems by changing the state or mode of one or more devices
    • 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
    • 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
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0658Controller construction arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • 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/0873Mapping of cache memory to specific storage devices or parts thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc
    • 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

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)
  • Storage Device Security (AREA)

Abstract

장치는 장치 메모리, 적어도 일부가 장치 메모리의 적어도 일부에 액세스할 수 있는 장치 기능 회로, 정보를 제공하도록 구성된 제어 회로를 포함할 수 있고, 정보는 장치 기능 회로의 적어도 일부가 장치 메모리의 적어도 일부에 액세스할 수 있음을 나타낼 수 있다. 추가적으로 또는 대안적으로, 제어 회로는 적어도 하나의 요청을 수신하고 적어도 하나의 요청에 기초하여 구성 동작을 수행하도록 구성될 수 있고, 구성 동작은 장치 기능 회로의 적어도 일부에 의해 액세스되도록 장치 메모리의 적어도 일부를 구성하는 것을 포함할 수 있다.

Description

장치 메모리 및 프로그램들을 관리하기 위한 시스템들, 방법들, 및 장치{SYSTEMS, METHODS, AND APPARATUS FOR MANAGING DEVICE MEMORY AND PROGRAMS}
본 개시는 일반적으로 장치에 관한 것으로, 좀 더 상세하게는, 장치 메모리 및 프로그램들을 관리하기 위한 시스템들, 방법들, 및 장치에 관한 것이다.
가속기, 스토리지 장치 등과 같은 장치는 호스트와 같은 다른 장치를 위해 하나 이상의 연산들을 수행할 수 있다. 예를 들어, 가속기는 호스트에 의해 제공된 데이터를 사용하여 연산들을 수행할 수 있다. 또 다른 예로서, 스토리지 장치는 호스트에 의해 제공된 데이터를 저장할 수 있다. 가속기, 스토리지 장치 등과 같은 장치는 장치 메모리를 사용하여 하나 이상의 연산들을 구현할 수 있다.
본 배경 섹션에서 개시된 상기 정보는 발명 원리의 배경에 대한 이해를 증진시키기 위한 것이므로, 선행 기술을 구성하지 않는 정보를 포함할 수 있다.
본 발명의 목적은 장치 메모리에 액세스하고 장치 메모리의 적어도 일부를 구성하여 장치 메모리 및 프로그램들을 관리할 수 있는 시스템들, 방법들, 및 장치를 제공할 수 있다.
장치는 장치 메모리, 및 장치 기능 회로를 포함할 수 있고, 여기서 장치 기능 회로의 적어도 일부는 장치 메모리의 적어도 일부에 액세스할 수 있고, 정보를 제공하도록 구성된 제어 회로를 포함할 수 있고, 여기서, 정보는 장치 기능 회로의 적어도 일부가 장치 메모리의 적어도 일부에 액세스하는 것이 가능할 수 있음을 나타낸다. 정보는 장치 메모리의 적어도 일부의 특성을 더 나타낼 수 있다. 장치는 통신 인터페이스를 더 포함할 수 있으며, 여기서 제어 회로는 통신 인터페이스를 사용하여 정보를 제공하도록 구성될 수 있다. 제어 회로는 통신 인터페이스를 사용하여 요청을 수신하고, 요청에 기초하여 정보를 제공하도록 구성될 수 있다. 장치 메모리의 일부는 장치 메모리의 제1 부분일 수 있고, 정보는 장치 기능 회로의 적어도 일부가 장치 메모리의 제2 부분에 액세스할 수 있음을 나타낼 수 있다. 장치 기능 회로의 일부는 장치 기능 회로의 제1 부분일 수 있고, 정보는 장치 기능 회로의 제2 부분이 장치 메모리의 적어도 일부에 액세스하는 것이 가능할 수 있음을 나타낼 수 있다. 장치 기능 회로의 적어도 일부의 제1 부분은 제1 네임스페이스로 구성될 수 있고, 장치 메모리의 적어도 일부의 제2 부분은 제2 네임스페이스로 구성될 수 있다.
장치는 장치 메모리, 및 장치 기능 회로를 포함할 수 있고, 여기서 장치 기능 회로의 적어도 일부는 장치 메모리의 적어도 일부에 액세스할 수 있고, 적어도 하나의 요청을 수신하고, 적어도 하나의 요청에 기초하여 구성 동작을 수행하도록 구성된 제어 회로를 포함할 수 있고, 여기서, 구성 동작은 장치 기능 회로의 적어도 일부에 의해 액세스되도록 상기 장치 메모리의 적어도 일부를 구성하는 것을 포함할 수 있다. 구성 동작은 구성 정보를 수신하고, 구성 정보를 장치 기능 회로의 적어도 일부와 연관된 메모리 제어 장치에 제공하는 것을 포함할 수 있다. 구성 동작은 장치 메모리의 적어도 일부를 장치 기능 회로의 적어도 일부에 할당하는 것을 포함할 수 있다. 장치는 통신 인터페이스를 더 포함할 수 있으며, 제어 회로는 통신 인터페이스를 사용하여 요청을 수신하도록 구성될 수 있다. 장치 메모리의 일부는 장치 메모리의 제1 부분일 수 있고, 제어 회로는 적어도 하나의 요청에 기초하여, 장치 기능 회로의 적어도 일부에 의해 액세스되도록 장치 메모리의 제2 부분을 구성하도록 구성될 수 있다. 장치 기능 회로의 일부는 장치 기능 회로의 제1 부분일 수 있고, 제어 회로는 적어도 하나의 요청에 기초하여, 장치 기능 회로의 제2 부분에 의해 액세스될 장치 메모리의 적어도 일부를 구성하도록 구성될 수 있다. 장치 기능 회로의 적어도 일부의 제1 부분은 제1 네임스페이스로서 구성될 수 있고, 장치 메모리의 적어도 일부의 제2 부분은 제2 네임스페이스로서 구성될 수 있다. 장치 기능 회로의 일부는 컴퓨팅 엔진, 및 컴퓨팅 엔진을 사용하도록 구성된 프로그램을 포함할 수 있다.
장치는 적어도 하나의 연산 리소스, 및 프로그램을 수신하고, 적어도 하나의 연산 리소스의 제1 연산 네임스페이스를 프로그램과 연관시키고, 적어도 하나의 연산 리소스의 제2 연산 네임스페이스를 프로그램과 연관시키도록 구성된 제어 회로를 포함할 수 있다. 장치는 통신 인터페이스를 더 포함할 수 있으며, 여기서 제어 회로는 통신 인터페이스를 사용하여 프로그램을 수신하도록 구성될 수 있다. 제어 회로는 통신 인터페이스를 사용하여 프로그램에 대한 정보를 제공하도록 구성될 수 있다. 제어 회로는 적어도 하나의 연산 리소스의 적어도 제1 부분을 제1 연산 네임스페이스로 구성하고, 적어도 하나의 연산 리소스의 적어도 제2 부분을 제2 연산 네임스페이스로 구성하도록 구성될 수 있다. 제어 회로는 명령을 수신하고, 명령에 따라 프로그램을 수신하도록 구성될 수 있다.
방법은, 장치에서, 정보 요청을 수신하는 단계, 여기서 장치는 장치 메모리 및 장치 기능 회로를 포함하고, 그리고 요청에 기초하여, 장치 기능 회로의 적어도 일부가 장치 메모리의 적어도 일부에 액세스할 수 있음을 나타내는 정보를 제공하는 단계를 포함할 수 있다. 정보는 장치 메모리의 적어도 일부의 특성을 더 나타낼 수 있다. 장치는 통신 인터페이스를 더 포함할 수 있고, 제공하는 단계는 적어도 부분적으로 통신 인터페이스를 사용하여 수행될 수 있다. 수신하는 단계는, 적어도 부분적으로는, 통신 인터페이스를 사용하여 수행될 수 있다. 장치 메모리의 적어도 일부는 장치 메모리의 제1 부분을 포함할 수 있고, 여기서 정보는 장치 기능 회로의 적어도 일부가 장치 메모리의 제2 부분에 액세스할 수 있음을 나타낼 수 있다. 장치 기능 회로의 적어도 일부는 장치 기능 회로의 제1 부분을 포함할 수 있고, 여기서 정보는 장치 기능 회로의 제2 부분이 장치 메모리의 적어도 일부에 액세스하는 것이 가능할 수 있음을 나타낼 수 있다. 장치 기능 회로의 적어도 일부의 제1 부분은 제1 네임스페이스로 구성될 수 있고, 장치 메모리의 적어도 일부의 제2 부분은 제2 네임스페이스로 구성될 수 있다.
방법은 장치에서, 적어도 하나의 요청을 수신하는 단계, 여기서 장치는 장치 메모리 및 장치 기능 회로를 포함할 수 있고, 그리고 적어도 하나의 요청에 기초하여, 적어도 일부의 장치 기능 회로에 의해 액세스되도록 적어도 일부의 장치 메모리를 구성하는 것을 포함할 수 있는 구성 동작을 수행하는 단계를 포함할 수 있다. 구성 동작은 장치에서, 구성 정보를 수신하고, 장치 기능 회로의 적어도 일부와 연관된 메모리 제어 장치에 구성 정보를 제공하는 것을 포함할 수 있다. 구성 동작은 장치 메모리의 적어도 일부를 장치 기능 회로의 적어도 일부에 할당하는 것을 포함할 수 있다. 장치는 통신 인터페이스를 더 포함할 수 있으며, 적어도 하나의 요청은, 적어도 부분적으로, 통신 인터페이스를 사용하여 수신될 수 있다. 장치 메모리의 일부는 장치 메모리의 제1 부분일 수 있고, 방법은, 적어도 하나의 요청에 기초하여, 장치 기능 회로의 적어도 일부에 의해 액세스되도록 장치 메모리의 제2 부분을 구성하는 단계를 더 포함할 수 있다. 장치 기능 회로의 일부는 장치 기능 회로의 제1 부분일 수 있고, 방법은, 적어도 하나의 요청에 기초하여, 장치 기능 회로의 제2 부분에 의해 액세스되도록 장치 메모리의 적어도 일부를 구성하는 단계를 더 포함할 수 있다. 장치 기능 회로의 적어도 일부의 제1 부분은 제1 네임스페이스로서 구성될 수 있고, 장치 메모리의 적어도 일부의 제2 부분은 제2 네임스페이스로서 구성될 수 있다. 장치 기능 회로의 일부는 컴퓨팅 엔진 및 컴퓨팅 엔진을 사용하도록 구성된 프로그램을 포함할 수 있다.
방법은, 장치에서, 프로그램을 수신하는 단계, 여기서 장치는 적어도 하나의 연산 리소스를 포함하고, 적어도 하나의 연산 리소스의 제1 연산 네임스페이스와 프로그램을 연관시키는 단계, 및 적어도 하나의 연산 리소스의 제2 연산 네임스페이스와 프로그램을 연관시키는 단계를 포함할 수 있다. 장치는 통신 인터페이스를 더 포함할 수 있고, 프로그램은 적어도 부분적으로, 통신 인터페이스를 사용하여 수신될 수 있다. 방법은, 통신 인터페이스를 사용하여, 프로그램에 대한 정보를 제공하는 단계를 더 포함할 수 있다. 방법은 적어도 하나의 연산 리소스의 적어도 제1 부분을 제1 연산 네임스페이스로 구성하는 단계, 및 적어도 하나의 연산 리소스의 적어도 제2 부분을 제2 연산 네임스페이스로 구성하는 단계를 더 포함할 수 있다. 방법은, 장치에서, 명령을 수신하는 단계를 더 포함할 수 있으며, 프로그램을 수신하는 단계는 명령에 기초할 수 있다.
본 개시의 실시 예에 따르면, 장치는 장치 기능 회로의 적어도 일부에 의해 액세스되도록 장치 메모리의 적어도 일부를 구성할 수 있고, 이에 따라, 장치 메모리의 하나 이상의 부분들이 관리될 수 있다.
도면들은 반드시 축척에 따라 그려지는 것은 아니며, 유사한 구조 또는 기능의 요소들은 일반적으로 도면 전체에서 예시적인 목적을 위해 유사한 참조 숫자 또는 그 일부로 표시될 수 있다. 도면은 본 명세서에 기재된 다양한 실시 예에 대한 설명을 용이하게 하기 위한 것일 뿐이다. 도면은 본 명세서에 개시된 교시의 모든 측면을 설명하지 않으며 청구범위를 제한하지 않는다. 도면이 모호해지는 것을 방지하기 위해, 모든 구성 요소, 연결부 등이 도시되지 않을 수 있으며, 모든 구성 요소가 참조 번호를 갖는 것은 아닐 수 있다. 그러나 구성 요소 구성의 패턴은 도면으로부터 쉽게 알 수 있다. 첨부된 도면들은, 명세서와 함께, 본 개시의 예시적인 실시 예를 예시하고, 그리고, 설명과 함께, 본 개시의 원리를 설명하는 역할을 한다.
도 1은 본 개시의 예시적인 실시 예에 따른 장치 메모리를 갖는 장치의 실시 예를 도시한다.
도 2는 본 개시의 예시적인 실시 예에 따른 네임스페이스를 갖는 연산 스토리지 장치의 실시 예를 도시한다.
도 3은 본 개시의 예시적인 실시 예에 따른 검색 메커니즘을 포함하는 장치의 실시 예를 도시한다.
도 4는 본 개시의 예시적인 실시 예에 따른 검색 장치 메모리 명령의 예시적인 실시 예를 도시한 도면이다.
도 5는 본 개시의 예시적인 실시 예에 따른 관리 메커니즘을 포함하는 장치의 실시 예를 도시한다.
도 6은 본 개시의 예시적인 실시 예에 따른 메모리 구성 명령의 제1 실시 예를 도시한다.
도 7은 본 개시의 예시적인 실시 예에 따른 메모리 구성 명령의 제2 실시 예를 도시한다.
도 8은 본 개시의 예시적인 실시 예에 따른 검색 메커니즘 및 관리 메커니즘을 포함하는 장치의 실시 예를 도시한다.
도 9는 본 개시의 예시적인 실시 예에 따라 구성된 장치 메모리를 갖는 장치의 실시 예를 도시한다.
도 10은 본 개시의 예시적인 실시 예에 따른 연산 및 프로그램 리소드들을 갖는 연산 장치를 포함하는 시스템의 실시 예를 도시한다.
도 11은 본 개시의 예시적인 실시 예에 따른 로딩 가능한 프로그램 리소스들을 갖는 연산 장치를 포함하는 시스템의 실시 예를 도시한다.
도 12는 본 개시의 예시적인 실시 예에 따른 프로그램 리소스들을 프로그램 저장소에 로딩할 수 있는 연산 장치를 포함하는 시스템의 실시 예를 도시한다.
도 13은 본 개시의 예시적인 실시 예에 따른 호스트 장치의 예시적인 실시 예를 도시한다.
도 14는 본 개시의 예시적인 실시 예에 따른 장치의 예시적인 실시 예를 도시한다.
도 15는 본 개시의 예시적인 실시예에 따른 장치 메모리 정보를 제공하는 방법의 실시 예를 도시한다.
도 16은 본 개시의 예시적인 실시 예에 따른 장치 메모리를 구성하는 방법의 실시 예를 도시한다.
도 17은 본 개시의 예시적인 실시 예에 따른 장치에 프로그램 리소스들을 로딩하는 방법의 실시 예를 도시한다.
가속기, 스토리지 장치 등과 같은 장치는 하나 이상의 동작들을 수행하기 위해 장치 메모리를 사용할 수 있다. 예를 들어, 가속기는 연산들을 위한 입력 및/또는 출력 데이터를 저장하기 위해 장치 메모리를 사용할 수 있다. 또 다른 예로서, 스토리지 장치는 스토리지 매체에 저장될 수 있는 데이터의 캐시로 장치 메모리를 사용할 수 있다.
본 개시의 발명 원리들 중 일부는 장치 메모리의 관리와 관련된다. 예를 들어, 장치는 장치가 장치 메모리에 대한 정보를 (예를 들어, 호스트와 같은 장치에) 제공할 수 있도록 하는 검색 메커니즘을 구현할 수 있다. 추가적으로, 또는 대안적으로, 장치는, 예를 들어, 검색 메커니즘을 사용하여, 장치에 의해 제공된 메모리 정보에 기초하여, 장치 메모리가 (예를 들어, 호스트와 같은 장치에 의해) 관리될 수 있도록 하는 관리 메커니즘을 구현할 수 있다.
일부 실시 예에서, 검색 메커니즘은 장치 메모리에 대한 정보를 제공하기 위한 하나 이상의 요청들을 구현할 수 있다. 예를 들어, 장치는 장치 메모리에 대한 정보를 요청하는 요청(예를 들어, 호스트와 같은 장치로부터의 검색 명령)을 수신할 수 있다. 장치는 장치 메모리 리소스들 목록, 장치 메모리 리소스들에 대한 정보를 포함할 수 있는 로그 페이지 등을 반환하여 요청에 응답할 수 있다. 정보는 장치 메모리의 하나 이상의 부분들에 액세스할 수 있는 장치 기능의 하나 이상의 부분들에 대한 하나 이상의 표시들을 포함할 수 있다. 추가적으로, 또는 대안적으로, 정보는 장치 메모리의 하나 이상의 부분들의 하나 이상의 특성들(예를 들어, 유형, 양, 배열, 액세스 특성들, 성능 특성들 등)에 대한 표시들을 포함할 수 있다.
일부 실시 예에서, 장치 메모리는 장치 기능의 하나 이상의 부분들에 의해 액세스되도록 장치 메모리의 하나 이상의 부분들을 구성함으로써 관리될 수 있다. 예를 들어, 연산 리소스들을 갖는 장치에서, 관리 메커니즘은 제1 연산 리소스에 의해 액세스되도록 호스트가 장치 메모리의 하나 이상의 제1 부분들을 구성하게 하고 그리고 제2 연산 리소스에 의해 액세스되도록 호스트가 장치 메모리의 하나 이상의 제2 부분들을 구성하게 할 수 있다.
일부 실시 예에서, 장치 메모리의 하나 이상의 부분들에 대한 액세스는 다양한 제한들, 권한들, 물리적 및/또는 논리적 연결들, 로컬리티 등의 적용을 받을 수 있다. 예를 들어, 일부 장치 메모리는 특정 연산 리소스(예를 들어, 필드 프로그래머블 게이트 어레이(FPGA), 애플리케이션 특정 회로(ASIC) 등)와 일체화될 수 있고, 그에 의해서만 액세스 가능한 반면, 일부 장치 메모리는 보다 광범위하게 액세스될 수 있다(예를 들어, 장치 기능의 어느 하나 이상의 부분들에 대한).
일부 실시 예에서, 장치 리소스들의 하나 이상의 부분들은 하나 이상의 네임스페이스들을 사용하여 구성될 수 있다. 예를 들어, 장치 메모리 리소스들, 장치 연산 리소스들, 및/또는 장치 스토리지 리소스들의 하나 이상의 부분들은 각각 하나 이상의 메모리 네임스페이스들, 연산 네임스페이스들, 및/또는 스토리지 네임스페이스들로 구성될 수 있다.
본 개시의 발명 원리들 중 일부는, 연산 장치에서, 복수의 연산 리소스들에 의해 액세스될 수 있는 연산 장치 프로그램을 수신하는 것과 관련된다. 예를 들어, 연산 장치 프로그램은 (예를 들어, 호스트와 같은 장치로부터) 연산 장치로 다운로드될 수 있다. 다운로드된 연산 장치 프로그램은, 예를 들어, 제1 연산 네임스페이스로 구성된 하나 이상의 제1 연산 리소스들 및 제2 연산 네임스페이스로 구성된 하나 이상의 제2 연산 리소스들에 의해 액세스될 수 있는 저장소(예컨대, 적어도 부분적으로 공개될 수 있거나, 글로벌일 수 있는 등의 저장소)에 저장될 수 있다.
일부 실시 예에서, 장치는 명령 메커니즘을 사용하여 (예를 들어, 호스트와 같은 장치에 의해) 연산 장치 프로그램이 다운로드, 검색, 활성화 등이 되게 할 수 있다. 일부 실시 예에서, 장치는 다운로드된 연산 장치 프로그램의 가시성 및/또는 접근성이 구성되게 할 수 있다. 예를 들어, 호스트와 같은 장치는 다운로드된 연산 장치 프로그램을 네이티브 컴퓨팅 프로그램으로 나타나도록 구성할 수 있다(예컨대, 적어도 부분적으로 공개, 글로벌, 및/또는 이와 유사한 접근성을 갖도록). 추가적으로, 또는 대안적으로, 다운로드된 연산 장치 프로그램은 (예를 들어, 하나 이상의 특정 연산 리소스들에 의해) 제한된 액세스를 갖도록 구성될 수 있다.
본 개시는 장치 메모리 및/또는 프로그램들의 관리와 관련된 수많은 발명적 원리들을 포함한다. 본 명세서에 개시된 원리들은 독립적인 유용성을 가질 수 있고, 개별적으로 구현될 수 있으며, 모든 실시 예가 모든 원리를 활용할 수 있는 것은 아니다. 또한, 원리들은 다양한 조합들로 구현될 수 있으며, 그 중 일부는 시너지 효과를 발휘하여 개별 원리들의 일부 이점들을 증폭시킬 수 있다.
예시의 목적을 위해, 일부 실시 예들은 연산 장치들(예컨대, 연산 스토리지 장치들) 및/또는 연산 리소스들의 맥락에서 설명될 수 있다. 그러나, 원리들은 장치에서 수신된 장치 메모리 및/또는 프로그램들을 활용할 수 있는 임의의 장치들 및/또는 장치 기능들에 적용될 수 있다.
도 1은 본 개시의 예시적인 실시 예에 따른 장치 메모리를 갖는 장치의 일 실시 예를 도시한다. 도 1에 도시된 장치(102)는 장치 기능 장치(104)(장치 기능, 장치 기능 리소스들 또는 기능 리소스들로도 지칭될 수 있음), 장치 메모리(106)(장치 메모리 리소스들 또는 메모리 리소스들로도 지칭될 수 있음), 하나 이상의 컨트롤러들(110)(컨트롤러로서 개별적으로 및/또는 집합적으로 지칭될 수 있음), 및/또는 하나 이상의 통신 인터페이스들(112)(통신 인터페이스로서 개별적으로 및/또는 집합적으로 지칭될 수 있음)을 포함할 수 있다.
장치 기능(104)은 장치(102)가 장치(102)의 하나 이상의 기능들(예컨대, 제1 기능)을 수행할 수 있도록 하는 임의의 유형의 리소스들(예컨대, 하드웨어 및/또는 소프트웨어)을 포함할 수 있다. 예를 들어, 장치(102)가 적어도 부분적으로 스토리지 장치로 구현되는 경우, 장치 기능(104)은 임의의 유형의 불휘발성 스토리지 미디어, 미디어 변환 계층, 하나 이상의 채널 컨트롤러들 등을 포함할 수 있다. 스토리지 미디어의 예로는 고체 매체, 자기 매체, 광학 매체 등, 또는 이들의 조합을 포함할 수 있다. 예를 들어, 스토리지 장치는 낸드(NAND) 플래시 메모리를 갖는 SSD로 구현될 수 있고, 미디어 변환 계층은 플래시 변환 계층(FTL)으로 구현될 수 있다. 솔리드 스테이트 미디어의 다른 예로는 크로스 그리드 불휘발성 메모리, 벌크 저항 변화 메모리, 상 변화 메모리(PCM) 등, 또는 이들의 임의의 조합과 같은 영구 메모리를 포함할 수 있다.
다른 예로서, 장치(102)가 적어도 부분적으로 연산 장치(예컨대, 가속기, 연산 스토리지 장치 등)로 구현되는 경우, 장치 기능(104)은 하나 이상의 컴퓨팅 엔진들, 하나 이상의 프로그램들 등과 같은 임의의 유형의 하드웨어 및/또는 소프트웨어 연산 리소스들을 포함할 수 있다.
컴퓨팅 엔진들의 예로는, 복잡한 프로그래머블 논리 디바이스(CPLD), 필드 프로그래머블 게이트 어레이(FPGA), 애플리케이션 특정 집적 회로(ASIC), x86 프로세서와 같은 복잡한 명령어 집합 컴퓨터(CISC) 프로세서를 포함하는 중앙 처리 유닛(CPU), 및/또는 임의의 유형의 메모리에 저장된 명령을 실행하고 또는 실행하거나 컨테이너, 가상 머신, 리눅스와 같은 운영 체제, 확장 버클리 패킷 필터(eBPF) 환경 등과 같은 임의의 유형의 실행 환경 또는 이들의 조합을 구현할 수 있는 ARM 프로세서, 그래픽 처리 유닛(GPU), 데이터 처리 유닛(DPU), 신경 처리 유닛(NPU), 텐서 처리 유닛(TPU) 등과 같은 축소 명령어 집합 컴퓨터(RISC) 프로세서를 포함할 수 있다. 일부 실시 예에서, 컴퓨팅 엔진은 조합 로직, 순차 로직, 하나 이상의 타이머, 카운터, 레지스터, 및/또는 상태 머신 등을 포함할 수 있다. 일부 실시 예에서, 연산 리소스의 일부 또는 전부는 시스템-온-칩(SOC)으로 구현될 수 있다.
프로그램의 예들은 알고리즘, 데이터 이동, 데이터 관리, 데이터 선택, 필터링, 암호화 및/또는 복호화, 압축 및/또는 압축 해제, 인코딩 및/또는 디코딩(예를 들어, 삭제 코딩), 체크섬 계산, 해시 값 계산, 순환 중복 검사(CRC) 등과 같은 하나 이상의 연산 리소스들에 의해 실행될 수 있는 임의의 유형의 명령어들을 포함할 수 있다. 일부 실시 예에서, 프로그램은 장치 메모리(106)에 저장된 데이터, 프로그램으로 스트리밍된 데이터 등을 사용하여 동작들을 수행할 수 있다.
추가 예로서, 장치(102)가 적어도 부분적으로 네트워크 인터페이스 카드(NIC), 무선 액세스 포인트(AP), 무선 스테이션(STA), 무선 기지국, 무선 사용자 장비(UE) 등과 같은 통신 장치로서 구현되는 경우, 장치 기능(104)은 증폭기, 필터, 변조기 및/또는 복조기, A/D 및/또는 DA 컨버터, 안테나, 스위치, 위상 시프터, 검출기, 커플러, 도체, 전송 라인, 모뎀, 네트워크 인터페이스, 물리 계층(PHY), 매체 액세스 제어 계층(MAC) 등과 같은 유선 및/또는 무선(예를 들어, RF) 신호를 수신 및/또는 전송하는 하나 이상의 구성 요소들을 포함할 수 있다.
장치 메모리(106)는 메모리 타입, 대역폭, 용량, 대기 시간, 액세스 세분성, 쓰기 내구성, 전력 소비 등과 같은 다양한 특성들을 가질 수 있는 하나 이상의 휘발성 및/또는 불휘발성(예를 들어, 영구적) 메모리 리소스들을 포함할 수 있다. 휘발성 메모리의 예로는 동적 랜덤 액세스 메모리(DRAM), 정적 랜덤 액세스 메모리(SRAM) 등을 포함할 수 있다. 불휘발성 메모리의 예로는 낸드 플래시 메모리, 크로스 그리드 불휘발성 메모리, 벌크 저항 변화 메모리, PCM, 자기 저항성 랜덤 액세스 메모리(MRAM), 저항성 랜덤 액세스 메모리(ReRAM) 등을 포함할 수 있다.
일부 실시 예에서, 장치 메모리(106)의 하나 이상의 부분들은 하나 이상의 메모리 네임스페이스들로 구성될 수 있다. 일부 실시 예에서, 메모리 네임스페이스는 메모리 셀, 라인, 열, 바이트, 워드, 페이지, 블록 등의 하나 이상의 주소, 주소 범위 등의 집합을 참조할 수 있다.
일부 실시 예에서, 장치 메모리(106)의 하나 이상의 부분들에 대한 액세스는 다양한 제한, 권한, 물리적 및/또는 논리적 연결, 로컬리티 등의 적용을 받을 수 있다. 예를 들어, 일부 장치 메모리는 특정 연산 리소스(예컨대, FPGA, ASIC 등)와 일체화될 수 있고, 그에 의해서만 액세스될 수 있는 반면, 일부 장치 메모리는 보다 광범위하게 액세스될 수 있다(예컨대, 장치 기능의 임의의 하나 이상의 부분들에 대한).
장치 메모리(106)는 단일 인라인 메모리 모듈(SIMM), 듀얼 인라인 메모리 모듈(DIMM), 개별 메모리 디바이스(예컨대, 집적 회로(IC)), FPGA, ASIC 등과 같은 하나 이상의 다른 구성 요소들에 내장된 메모리 디바이스 스택을 포함하는 임의의 물리적 배열로 구현될 수 있다. 장치 메모리(106)는 장치(102) 내부에, 장치(102) 상에, 장치(102)에, 및/또는 장치(102) 근처에 위치할 수 있다. 예를 들어, 장치 메모리(106)의 하나 이상의 부분들은 장치(102)를 구현하는 데 사용될 수 있는 회로 기판에 부착되거나(예컨대, 납땜되거나, 커넥터 등을 사용하여 연결되거나), 장치(102)에 부착되거나, 및/또는 CXL.캐시, CXL.io, CXL.mem 등과 같은 인터페이스 및/또는 프로토콜(예를 들어, 일관된 인터페이스 및/또는 프로토콜)을 사용하여 장치(102)에 액세스될 수 있는, 예를 들어, 메모리 버퍼, 캐시 등에서, 장치(102)에 의한 제어 및/또는 액세스를 가능하게 하는 방식으로 장치(102)에 인접하거나 장치(102) 근처에 위치할 수 있다.
장치 기능(104) 및 장치 메모리(106)는 별도의 구성 요소들로 도시될 수 있지만, 일부 실시 예에서, 장치 기능(104)의 하나 이상의 부분들과 장치 메모리(106)의 하나 이상의 부분들은 중첩될 수 있다. 예를 들어, 장치 메모리(106)의 하나 이상의 부분들은 장치 기능(104)의 하나 이상의 부분들 내에 적어도 부분적으로 위치할 수 있다(예컨대, FPGA 또는 ASIC는 로컬 DRAM을 포함할 수 있다). 유사하게, 일부 로컬 메모리가 컴퓨팅 엔진 내에 위치할 수 있는 것처럼(그리고 아마도 컴퓨팅 엔진에 의해서만 액세스할 수 있는 것처럼), 하나 이상의 연산 리소스들은 장치 메모리(106)의 하나 이상의 부분들 내에 위치할 수 있다. 예를 들어, 일부 실시 예에서, 메모리 장치 또는 메모리 장치 스택은 메모리 장치 또는 메모리 장치 스택 내에 위치할 수 있는(그리고 아마도 액세스만 가능할 수 있는) 인메모리 프로세싱(PIM) 하드웨어를 포함할 수 있다.
컨트롤러(110)는 장치(102)의 하나 이상의 부분들의 하나 이상의 동작들을 제어할 수 있는 임의의 유형의 리소스들(예컨대, 하드웨어 및/또는 소프트웨어)을 포함할 수 있다. 예를 들어, 컨트롤러(110)는 하나 이상의 프로세서, 상태 머신, 조합 로직, 순차 로직, CPLD, FPGA, ASIC, 전용 로직 등을 포함할 수 있다. 일부 실시 예에서, 장치(102)가 적어도 부분적으로 스토리지 장치로 구현되는 경우, 하나 이상의 컨트롤러(110)는 하나 이상의 FTL, 채널 컨트롤러, 불휘발성 메모리 익스프레스(NVMe) 컨트롤러, 주변 구성 요소 인터커넥트 익스프레스(PCIe) 컨트롤러, 컴퓨팅 익스프레스 링크(CXL) 컨트롤러 등, 또는 이들의 조합을 포함할 수 있다. 일부 실시 예에서, 장치(102)가 적어도 부분적으로 통신 장치로 구현되는 경우, 하나 이상의 컨트롤러(110)는 하나 이상의 MAC 컨트롤러를 포함할 수 있다.
통신 인터페이스(112)는 PCIe, NVMe, NVMe 오버 패브릭(NVMe-oF), CXL 및/또는 CXL.mem, CXL.cache, CXL.IO 등과 같은, Gen-Z, OpenCAPI(개방형 코히어런트 가속기 프로세서 인터페이스), CCIX(가속기를 위한 캐시 코히어런트 인터커넥트) 등과 같은 일관된 프로토콜, AXI(고급 확장형 인터페이스), DMA(직접 메모리 액세스), RDMA(원격 DMA), ROCE(융합 이더넷을 통한 RDMA), AMQP(고급 메시지 큐 프로토콜), 이더넷, TCP/IP(전송 제어 프로토콜/인터넷 프로토콜), 파이버채널, 인피니밴드, 직렬 ATA(SATA), SCSI(소형 컴퓨터 시스템 인터페이스), SAS(직렬 연결 SCSI), iWARP, 2G, 3G, 4G, 5G, 6G 등을 포함한 모든 세대의 무선 네트워크, 모든 세대의 Wi-Fi, 블루투스, 근거리 통신(NFC) 등 또는 이들의 조합을 포함하는 임의의 유형의 유선 및/또는 무선 통신 매체, 인터페이스, 네트워크, 상호 연결, 프로토콜 등으로 구현될 수 있다.
장치(102)는 임의의 물리적 폼 팩터로 구현될 수 있다. 폼 팩터의 예로는, 3.5인치 스토리지 장치 폼 팩터, 2.5인치 스토리지 장치 폼 팩터, 1.8인치 스토리지 장치 폼 팩터, M.2 장치 폼 팩터, 엔터프라이즈 및 데이터 센터 표준 폼 팩터(EDSFF)(예를 들어, E1.S, E1.L, E3.S, E3.L, E3.S 2T, E3.L 2T 등을 포함할 수 있음), 애드인 카드(AIC)(예를 들어, 반 높이(HH), 반 길이(HL), 반 높이, 반 길이(HHHL) 등을 포함하는 PCIe 카드(예: PCIe 확장 카드) 폼 팩터), 차세대 소형 폼 팩터(NGSFF), NF1 폼 팩터, 컴팩트 플래시(CF) 폼 팩터, 보안 디지털(SD) 카드 폼 팩터, 개인 컴퓨터 메모리 카드 국제 협회(PCMCIA) 장치 폼 팩터 등, 또는 이들의 조합을 포함할 수 있다.
일부 실시 예에서, 본 명세서에 개시된 장치들 중 임의의 장치는 SATA 커넥터, SCSI 커넥터, SAS 커넥터, M.2 커넥터, EDSFF 커넥터(예를 들어, 1C, 2C, 4C, 4C+ 등), U.2 커넥터(SSD 폼 팩터(SSF) SFF-8639 커넥터로도 지칭될 수 있음), U.3 커넥터, PCIe 커넥터(예를 들어, 카드 에지 커넥터) 등과 같은 하나 이상의 커넥터들을 이용하여 시스템에 연결될 수 있다.
일부 실시 예에서, 본 명세서에 개시된 임의의 장치들은 서버 섀시, 서버 랙, 데이터 룸, 데이터 센터, 에지 데이터 센터, 모바일 에지 데이터 센터 및/또는 이들의 임의의 조합과 함께 전체 또는 부분적으로 구현되거나, 및/또는 이와 연관되어 사용될 수 있다.
도 2는 본 개시의 예시적인 실시 예에 따른 네임스페이스들을 갖는 연산 스토리지 장치의 실시 예를 도시한다. 도 2에 도시된 장치(202)는, 예를 들어, 도 1에 도시된 장치(102)를 구현하기 위해 사용될 수 있다. 장치(202)는 도 1에 도시된 것과 유사한 일부 요소들을 포함할 수 있으며, 유사한 요소들은 유사한 숫자로 끝나는 참조 번호를 가질 수 있다. 그러나, 도 2에 도시된 장치(202)에서, 장치 기능의 하나 이상의 부분들은 컴퓨팅 엔진들(211) 및/또는 프로그램들(207)으로서 구현될 수 있고, 장치 기능의 하나 이상의 부분들은 스토리지 미디어(213)로서 구현될 수 있다.
도 2에 도시된 장치(202)에서, 장치 리소스들의 하나 이상의 부분들은 하나 이상의 네임스페이스들로 구성될 수 있다. 예를 들어, 장치 메모리 리소스들, 장치 연산 리소스들, 및/또는 장치 스토리지 리소스들의 하나 이상의 부분들은 각각 하나 이상의 메모리 네임스페이스들, 연산 네임스페이스들, 및/또는 스토리지 네임스페이스들로 구성될 수 있다.
일부 실시 예에서, 네임스페이스는 하나 이상의 리소스들의 집합을 참조할 수 있다. 일부 실시 예에서, 네임스페이스로서 구성된 하나 이상의 리소스들의 집합은, 적어도 부분적으로, 다른 네임스페이스들로서 구성된 다른 리소스들의 집합들로부터 격리될 수 있다. 일부 실시 예에서, 네임스페이스들은 네임스페이스들 및/또는 네임스페이스로 구성될 수 있는 리소스들 사이에 논리적 및/또는 물리적 격리를 제공할 수 있다. 일부 실시 예에서, 네임스페이스는, 예를 들어, 호스트와 같은 장치에 의해 단위로 액세스될 수 있는 하나 이상의 리소스들의 집합을 나타낼 수 있다.
일부 실시 예에서, 네임스페이스는 가상 구조체(예컨대, 가상 네임스페이스)로서 구성, 처리 등이 될 수 있다. 구현 세부 사항에 따라, 이것은 네임스페이스(예컨대, 연산 네임스페이스)가 가상 머신(VM)과 같은 가상 환경에 (예를 들어, 직접) 매핑될 수 있도록 할 수 있다. 일부 실시 예에서, 가상 머신은 가상 머신과 연관된 연산 네임스페이스로의 프로그램 로딩(예컨대, 다운로드)을 제어할 수 있다. 이는 하이퍼바이저와 같은 중앙 엔티티를 사용하여 프로그램을 로드하는 것과 대조적일 수 있다. 구현 세부 사항에 따라, 가상 머신이 프로그램 로드를 제어할 수 있도록 하는 것은 로드된 프로그램을 제거할 수 있는 유연성(예: 가상 머신 종료될 때)을 제공할 수 있다.
스토리지 리소스들의 맥락에서, 네임스페이스는 하나 이상의 논리 블록 주소들(LBAs)의 집합을 참조할 수 있다. LBAs는 실린더, 트랙, 채널, 페이지 등과 같은 상이한 물리적 위치들에 위치할 수 있는 하나 이상의 물리적 블록 주소들(PBAs)에 매핑될 수 있다. 구현 세부 사항에 따라, 네임스페이스는 (예를 들어, 호스트와 같은 장치에) 별도의 스토리지 장치로 나타날 수 있다. 도 2에 도시된 장치(202)에서, 스토리지 미디어(213)의 하나 이상의 부분들은 하나 이상의 스토리지 네임스페이스(246)로 구성될 수 있다.
연산 리소스들의 맥락에서, 연산 네임스페이스는, 예를 들어, 도 1과 관련하여 전술한 바와 같이, 하나 이상의 컴퓨팅 엔진들, 프로그램들 등의 집합을 지칭할 수 있다. 도 2에 도시된 장치(202)에서, 컴퓨팅 엔진들(211) 및/또는 프로그램들(207)과 같은 하나 이상의 연산 리소스들은 하나 이상의 연산 네임스페이스(244)로 구성될 수 있다.
메모리 리소스들의 맥락에서, 메모리 네임스페이스는, 예를 들어, 도 1과 관련하여 전술한 바와 같이, 하나 이상의 메모리들 및/또는 이들의 부분들의 집합을 참조할 수 있다. 예를 들어, 메모리 네임스페이스는 메모리 셀, 라인, 열, 바이트, 워드, 페이지, 블록 등의 하나 이상의 주소, 주소 범위 등의 집합으로 구성될 수 있다. 도 2에 도시된 장치(202)에서, 장치 메모리(206)의 하나 이상의 부분들은 하나 이상의 메모리 네임스페이스(248)로 구성될 수 있다.
도 1을 다시 참조하면, 일부 실시 예에서, 장치 메모리(106)의 하나 이상의 부분들은 장치 기능(104)의 하나 이상의 부분들에 의해 사용될 수 있다. 예를 들어, 장치(102)가 연산 스토리지 장치로 구현되는 실시 예에서, 장치 기능(104)은 연산 리소스들(예컨대, 하나 이상의 컴퓨팅 엔진들 및/또는 연산 프로그램들) 및 스토리지 리소스들(예컨대, 스토리지 매체)을 포함할 수 있다. 이러한 실시 예에서, 장치 메모리(106)의 하나 이상의 부분들은, 예를 들어, 다음 동작들 중 임의의 수에 대해 사용될 수 있다: 호스트, 스토리지 매체(예를 들어, 스토리지 네임스페이스로 구성된 스토리지 매체의 하나 이상의 부분들) 등으로부터 복사된 입력 데이터의 저장; 컴퓨팅 엔진에서 실행되는 프로그램의 버퍼링 및/또는 출력 데이터; 컴퓨팅 엔진에서 실행되는 프로그램에 의해 사용되는 중간 데이터 버퍼링; 호스트 메모리, 스토리지 매체(예를 들어, 스토리지 네임스페이스로 구성된 스토리지 매체의 하나 이상의 부분들) 등으로 출력 데이터 복사; 프로그램들 간 데이터 교환; 가상 머신들(예를 들어, 하나 이상의 연산 리소스들에서 실행되는) 간 데이터 교환 등.
본 개시의 발명 원리들 중 일부는 장치 메모리(106)에 대한 정보를 획득하고, 및/또는 관리하는 데 사용될 수 있는 메커니즘들(체계들로도 지칭될 수 있는)과 관련된다. 예를 들어, 일부 실시 예에서, 장치(102)는 호스트가 장치(102) 내에, 장치(102) 상에, 장치(102)에, 및/또는 장치(102) 근처에 위치할 수 있는 장치 메모리(106)의 하나 이상의 부분들에 대한 정보를 획득할 수 있도록 하는 검색 메커니즘을 구현할 수 있다. 추가적으로, 또는 대안적으로, 장치(102)는 호스트가 장치 메모리(106)의 하나 이상의 부분들을 관리하기 위해 장치 메모리(106)에 대한 정보(예를 들어, 디스커버리 메커니즘을 사용하여 획득한 정보)를 사용할 수 있도록 하는 관리 메커니즘을 구현할 수 있다. 일부 실시 예에서, 장치 메모리(106)의 하나 이상의 부분들은 장치 기능(104)의 하나 이상의 부분들에 액세스하도록 장치 메모리(106)의 하나 이상의 부분들을 구성함으로써 관리될 수 있다. 예를 들어, 장치 기능(104)의 적어도 일부가 연산 리소스들로 구현되는 장치(102)에서, 관리 메커니즘은 제1 연산 리소스에 액세스하도록 호스트가 장치 메모리(106)의 하나 이상의 제1 부분들을 구성하게 하고, 제2 컴퓨팅 리소스에 액세스하도록 호스트가 장치 메모리(106)의 하나 이상의 제2 부분들을 구성하도록 할 수 있다.
일부 실시 예에서, 호스트는 장치(102)의 장치 기능(104), 장치 메모리(106), 검색 메커니즘 및/또는 관리 메커니즘 중 하나 이상을 활용할 수 있는 임의의 구성 요소 또는 구성 요소들의 조합으로 구현될 수 있다. 예를 들어, 호스트는 클라이언트 장치, 서버, 스토리지 노드, CPU, 개인용 컴퓨터, 태블릿 컴퓨터, 스마트폰 등 중 하나 이상을 포함할 수 있다.
예시의 목적을 위해, 호스트가 장치 메모리에 대한 정보를 획득하고, 및/또는 관리하기 위해 검색 및/또는 관리 체계를 사용할 수 있는 시스템의 맥락에서 일부 예시적인 실시 예들이 설명될 수 있다. 그러나, 원칙들은 위에서 설명한 바와 같이 호스트에 의한 사용으로 제한되지 않는다. 예를 들어, 장치 메모리에 대한 정보를 획득 및/또는 장치 메모리를 관리하기 위한 임의의 체계들은, 적어도 부분적으로, 장치 자체, 다른 장치, 및/또는 하드웨어, 소프트웨어, 프로세스, 서비스 등을 포함할 수 있는 임의의 다른 항목들에 의해 사용될 수 있다. 따라서, 일부 실시 예에서, 그리고 컨텍스트 및/또는 구현 세부 사항에 따라, 호스트는 본 개시에 따라 장치 메모리에 대한 정보를 획득 및/또는 장치 메모리를 관리하기 위해 검색 체계 및/또는 관리 체계를 사용할 수 있는 장치 자체 및/또는 다른 장치의 일부를 포함하는 임의의 항목을 참조할 수 있다.
도 3은 본 개시의 예시적인 실시 예에 따른 검색 메커니즘을 포함하는 장치의 실시 예를 도시한다. 장치(302)는 도 1 및/또는 도 2에 도시된 것과 유사한 일부 요소들을 포함할 수 있으며, 유사한 요소들은 유사한 숫자로 끝나는 참조 번호를 가질 수 있다. 그러나, 도 3에 도시된 실시 예에서, 컨트롤러(310)는 장치(302)가 장치 메모리(306)에 대한 정보(메모리 정보로 지칭될 수 있는)를 (예를 들어, 호스트와 같은 장치에) 제공할 수 있도록 하는 검색 메커니즘을 구현할 수 있는 검색 로직(314)을 포함할 수 있다.
메모리 정보(316)는 장치 메모리(306)의 하나 이상의 부분들의 하나 이상의 특성들(예컨대, 유형, 양, 배열, 액세스 특성, 성능 특성 등)의 표시들을 포함할 수 있다. 예를 들어, 장치 메모리(306)는 하나 이상의 유형의 휘발성 메모리(예컨대, DRAM, SRAM 등) 및/또는 불휘발성(예컨대, 영구적) 메모리 리소스들(예컨대, 플래시 메모리, PCM 등)을 포함할 수 있다. 장치 메모리(306)의 다양한 부분들은 상이한 대역폭(예컨대, 읽기 및/또는 쓰기 대역폭), 용량(예컨대, 킬로바이트(KB), 메가바이트(MB), 기가바이트(GB) 등과 같은 바이트 단위의 크기), 지연 시간, 액세스 세분성(예컨대, 영구 메모리는 바이트 액세스 가능일 수 있지만, 플래시 메모리는 페이지 단위로 쓰기 및/또는 읽기가 되지만 블록들 단위로 지워질 수 있음), 네임스페이스 구성(예를 들어, 임의의 메모리 리소스의 하나 이상의 부분들은 하나 이상의 네임스페이스들, 네임스페이스 내의 주소 범위들 등으로 구성될 수 있음), 쓰기 내구성, 전력 소비 등을 가질 수 있다. 일부 실시 예에서, 메모리 정보(316)는 장치 메모리(306)의 하나 이상의 부분들의 임의의 이러한 특성들 또는 다른 특성들에 대한 하나 이상의 표시들을 포함할 수 있다.
추가적으로, 또는 대안적으로, 메모리 정보(316)는 장치 메모리의 하나 이상의 부분들에 액세스할 수 있는 장치 기능의 하나 이상의 부분들에 대한 하나 이상의 표시들을 포함할 수 있다. 예를 들어, 장치 기능(304)의 하나 이상의 부분들과 장치 메모리(306)의 하나 이상의 부분들은 하나 이상의 연결들(예컨대, 연결들의 구조 또는 배열)을 통해 연결될 수 있다. 일부 연결들은 장치 메모리(306)의 하나 이상의 부분들에 대한 제한된 액세스(예컨대, 로컬 액세스 또는 프라이빗 액세스)만 가능하게 할 수 있는 반면, 일부 연결들은 장치 기능(304)의 하나 이상의 부분들에 의해 장치 메모리(306)의 하나 이상의 부분들이 무제한 또는 덜 제한적인 방식으로 액세스(예컨대, 글로벌 액세스 또는 공용 액세스)가 가능하게 되도록 할 수 있다. 예를 들어, FPGA는 로컬(예컨대, 내부) 메모리 및 FPGA 내의 연산 리소스들에 의해서만 로컬 메모리에 액세스하도록 허용할 수 있는 연결들의 배열을 포함할 수 있다. 유사하게, 컴퓨팅 엔진(예컨대, ARM 회로와 같은 CPU 회로)은 로컬 메모리 및 CPU에 의해서만 로컬 메모리에 액세스하도록 허용할 수 있는 연결들의 배열을 포함할 수 있다. 일부 실시 예에서, 메모리 정보(316)는 장치 기능(304) 및/또는 장치 메모리(306)의 이들 또는 다른 특성, 연결, 제한, 배열 등에 대한 하나 이상의 표시들을 포함할 수 있다.
일부 실시 예에서, 검색 메커니즘은 장치 메모리(306)에 대한 정보를 제공하기 위해 하나 이상의 메모리 정보 요청(예컨대, 명령어)(315)을 구현할 수 있다. 예를 들어, 장치(302)는 장치 메모리(306)에 대한 정보를 요청하는 검색 명령(예컨대, 호스트와 같은 장치로부터)을 수신할 수 있다. 장치(302)는 장치 메모리 리소스들에 대한 정보를 포함할 수 있는 데이터 구조(예컨대, 리스트, 테이블 등), 데이터 구조에 대한 포인터, 로그 페이지 등을 반환함으로써 검색 명령에 응답할 수 있다. 다른 예로서, 장치(302)는 장치(302)가 메모리 정보를 (예를 들어, 호스트와 같은 장치에) 제공할 수 있도록 하는 커맨드 라인 인터페이스(CLI)를 구현할 수 있다.
도 4는 본 개시의 예시적인 실시 예에 따른 장치 메모리 검색 명령의 예시적인 실시 예를 도시한다. 도 4에 도시된 장치 메모리 검색 명령(418)은, 예를 들어, 도 3에 도시된 메모리 정보 요청(315)을 구현하기 위해 사용될 수 있다. 장치 메모리 검색 명령(418)은, 예를 들어, 장치(302)의 컨트롤러(310)로 전송되어(예를 들어, 호스트에 의해) 컨트롤러(310)가 메모리 정보(316)를 제공하게 할 수 있다(예를 들어, 호스트에). 일부 실시 예에서, 컨트롤러(310)는, 장치 메모리 검색 명령(418)에 대한 응답으로, 요청된 메모리 정보(316)를 포함할 수 있는 응답(예컨대, 응답에 내장된 요청된 메모리 정보(316)를 포함하는 데이터 구조)을 전송할 수 있다. 대안적으로, 또는 부가적으로, 도 4에 도시된 장치 메모리 검색 명령(418)은 컨트롤러(310)가 요청된 메모리 정보(316)를 기록할 수 있는 위치(예컨대, 버퍼 위치)를 (예를 들어, 포인터에 의해) 나타낼 수 있는 데이터 위치(420)를 포함할 수 있다. 일부 실시 예에서, 장치 메모리 검색 명령(418)은 예를 들어, NVMe 명령, CXL 명령 등으로 구현될 수 있다.
표 1은 본 개시의 예시적인 실시 예에 따라 장치 메모리에 대한 정보를 제공하는 데 사용될 수 있는 데이터 구조의 예시적인 실시 예를 도시한다. 표 1에 도시된 실시 예는, 예를 들어, 도 4에 도시된 장치 메모리 검색 명령(418)에 대한 응답으로, 그리고 도 3에 도시된 장치(302)의 맥락에서 장치 메모리 정보(316)를 제공하기 위해 사용될 수 있다. 표 1에 도시된 실시 예에서, 장치 기능(304)의 하나 이상의 부분들은 열 2에 도시된 바와 같이 컴퓨팅 엔진들(CEs)로 구현될 수 있지만, 원리들은 임의의 다른 유형의 장치 기능에 적용될 수 있다.
표 1을 참조하면, 행은 장치 메모리(306)의 하나 이상의 부분들에 대응할 수 있다. 행 내의 열들은 다음 정보를 제공할 수 있다: 열 1은 장치 메모리(306)의 일부(예컨대, 메모리 장치)에 대한 메모리 식별자(메모리 ID 또는 Mem ID)를 나타낼 수 있다; 열 2는 장치 기능(304)의 하나 이상의 부분들에 대한 식별자(이 예에서는, Mem ID에 의해 식별된 장치 메모리(306)의 부분에 액세스할 수 있는 컴퓨팅 엔진 식별자(컴퓨팅 엔진 ID 또는 CEID)를 나타낼 수 있다; 열 3은 Mem ID에 의해 표시된 장치 메모리(306) 부분의 하나 이상의 특성들(이 예에서, 메모리 유형(예컨대, DRAM 또는 영구), 지연 시간, 대역폭 및/또는 전력 특성)을 나타낼 수 있다; 열 4 및 5는 대응하는 네임스페이스로 구성될 수 있는 하나 이상의 네임스페이스들 및/또는 메모리 범위들을 나타내는 네임스페이스 식별자(네임스페이스 ID 또는 NSID) 및/또는 범위 식별자(범위 ID 또는 RID)를 포함할 수 있는 하나 이상의 서브 행들을 포함할 수 있다; 열 6은 대응하는 네임스페이스 ID 및/또는 범위 ID와 연관된 메모리 주소들의 범위를 나타낼 수 있다; 그리고 열 7은 대응하는 메모리 주소들의 범위가 (예를 들어, 컴퓨팅 엔진, 프로그램 등에) 할당되었는지를 나타낼 수 있다.
전술한 바와 같이, 예시의 목적을 위해, 표 1에 도시된 실시 예에서, 장치 기능(304)의 하나 이상의 부분들은 열 2에 도시된 바와 같이 컴퓨팅 엔진들로써 구현될 수 있지만, 원리들은 임의의 다른 유형의 장치 기능에 적용될 수 있다. 예를 들어, 다른 실시 예에서, 열 2는 장치 기능 식별자(장치 기능 ID 또는 DFID)로서 장치 기능(304)의 하나 이상의 부분들의 식별자를 나타낼 수 있다. 예시의 목적을 위해, 표 1에 도시된 실시 예는 도 9에 도시된 실시 예에 대응하는 장치 메모리에 대한 정보의 예를 제공할 수 있지만, 원리들은 이들 또는 임의의 다른 구현 세부 사항에 한정되지 않는다.
도 5는 본 개시의 예시적인 실시 예에 따른 관리 메커니즘을 포함하는 장치의 실시 예를 도시한다. 도 5에 도시된 장치(502)는 도 1, 도 2, 및/또는 도 3에 도시된 것과 유사한 일부 요소들을 포함할 수 있으며, 유사한 요소들은 유사한 자릿수로 끝나는 참조 번호를 가질 수 있다. 그러나, 도 5에 도시된 실시 예에서, 컨트롤러(510)는, 예를 들어, 검색 메커니즘을 사용하여, 장치에 의해 제공되는 메모리 정보에 기초하여 장치 메모리(506)가 (예를 들어, 호스트와 같은 장치에 의해) 관리될 수 있도록 하는 관리 메커니즘을 구현할 수 있는 관리 로직(518)을 포함할 수 있다.
관리 로직(518)은, 예를 들어, 장치 기능(504)의 하나 이상의 부분들에 의해 액세스되도록 장치 메모리(506)의 하나 이상의 부분들을 구성함으로써, 장치 메모리(506)를 관리할 수 있다.
일부 실시 예에서, 관리 로직(518)은 구성 정보(523)를 수신하고(예를 들어, 호스트와 같은 장치로부터), 구성 정보를 구현할 수 있는 장치 기능(504)의 하나 이상의 부분들과 연관된 메모리 제어 장치에 구성 정보(523)를 제공함으로써 장치 메모리(506)의 하나 이상의 부분들을 구성할 수 있다. 예를 들어, 일부 실시 예에서, 호스트와 같은 장치는 장치 메모리(506)의 하나 이상의 부분들을 장치 기능(504)의 하나 이상의 부분들에 할당할 수 있다. 따라서, 구성 정보(523)는 장치 기능(504)의 하나 이상의 부분들 및 장치 기능(504)의 하나 이상의 부분들에 의해 액세스되도록 구성될 수 있는 장치 메모리(506)의 하나 이상의 대응하는 부분들을 나타내는 리스트, 테이블, 또는 다른 데이터 구조를 포함할 수 있다. 장치 기능(504)의 하나 이상의 부분들과 연관된 메모리 제어 장치의 예는 프로세서(예컨대, CPU)의 메모리 컨트롤러, FPGA 또는 ASIC의 메모리 구성 레지스터 등을 포함할 수 있다.
추가적으로, 또는 대안적으로, 관리 로직(518)은 장치 메모리(506)의 하나 이상의 부분들을 장치 기능(504)의 하나 이상의 부분들에 할당함으로써 장치 메모리(506)의 하나 이상의 부분들을 구성할 수 있다. 이러한 실시 예에서, 구성 정보(523)는, 예를 들어, 메모리의 하나 이상의 유형, 양, 액세스 세분성, 성능 특성 등에 기초하여, 관리 로직(518)이 장치 메모리(506)의 하나 이상의 적절한 부분들을 장치 기능(504)의 하나 이상의 부분들에 할당할 수 있도록 장치 기능(504)의 하나 이상의 부분들에 대한 하나 이상의 사양, 요구사항 등을 포함할 수 있다.
일부 실시 예에서, 관리 로직(518)은 구성 요청(522)에 대한 응답으로 장치 메모리(506)를 구성할 수 있다. 일부 실시 예에서, 구성 요청(522)은, 예를 들어, 관리 로직(518)에 의해 수신될 수 있는 명령어(예를 들어, 호스트와 같은 장치로부터)로 구현될 수 있다. 추가적으로, 또는 대안적으로, 장치(502)는, 적어도 부분적으로, 커맨드 라인 인터페이스(CLI)를 통해 관리 로직(518) 및/또는 구성 요청(522)을 구현할 수 있다.
일부 실시 예에서, 장치 기능(504)의 하나 이상의 부분들과 장치 메모리(506)의 하나 이상의 부분들은 장치 기능(504)의 하나 이상의 부분들이 장치 메모리(506)의 하나 이상의 부분들에 액세스하는 능력에 영향을 미칠 수 있는 하나 이상의 연결들(예컨대, 연결들의 구조 또는 배열)을 사용하여 연결될 수 있다. 예를 들어, 전술한 바와 같이, 장치 메모리(506)의 일부 부분들은 장치 기능(504)의 특정 부분들(예를 들어, FPGA, ASIC 등의 로컬 메모리)에 위치할 수 있고, 그에 의해서만 액세스 가능한 반면, 장치 메모리(506)의 다른 부분들은 덜 제한적인 액세스를 가질 수 있다(예를 들어, 글로벌 메모리는 공개적으로 액세스 가능할 수 있다). 따라서, 호스트 또는 다른 장치는 메모리 정보(예컨대, 도 3에 도시된 메모리 정보(316) 및/또는 표 1의 메모리 정보)를 사용하여 장치 기능(504)의 어느 부분들에 의해 장치 메모리(506)의 어느 부분들이 액세스되도록 구성될 수 있는지를 결정할 수 있다.
도 6은 본 개시의 예시적인 실시 예에 따른 메모리 구성 명령의 제1 실시 예를 도시한다. 도 6에 도시된 메모리 구성 명령(622)은, 예를 들어, 도 5에 도시된 구성 요청(522)을 구현하기 위해 사용될 수 있다. 도 6에 도시된 메모리 구성 명령(622)은, 예를 들어, 장치(502)의 컨트롤러(510)로 전송되어(예를 들어, 호스트에 의해) 관리 로직(518)이 장치 기능(504)의 하나 이상의 부분들에 의해 액세스되도록 장치 메모리(506)의 하나 이상의 부분들을 구성하도록 할 수 있다. 예시의 목적을 위해, 도 6에 도시된 메모리 구성 명령(622)은 컴퓨팅 엔진들로 구현될 수 있는 장치 기능(504)의 하나 이상의 부분들의 맥락에서 설명될 수 있지만, 원리들은 임의의 다른 유형의 장치 기능에 적용될 수 있다. 일부 실시 예에서, 메모리 구성 명령(622)은, 예를 들어, NVMe 명령, CXL 명령 등으로 구현될 수 있다.
메모리 구성 명령(622)은, 관리 로직(518)이 장치 기능(504)의 하나 이상의 부분들에 의해 액세스되도록 장치 메모리(506)의 하나 이상의 부분들을 구성할 수 있도록 하는 구성 정보(623)를 포함할 수 있다. (일부 실시 예에서, 구성 정보(623)는 구성 정보에 액세스하기 위한 포인터 또는 다른 참조 체계로 구현될 수 있다). 예를 들어, 일부 실시 예에서, 구성 정보(623)는 관리 로직(518)이 장치 기능(504)의 하나 이상의 부분들에 의해 액세스되도록 구성할 수 있는 장치 메모리(506)의 하나 이상의 부분들에 대한 하나 이상의 표시들을 포함할 수 있는 리스트, 테이블, 또는 다른 데이터 구조(또는 데이터 구조에 대한 포인터)를 포함할 수 있다(예를 들어, 호스트와 같은 장치에 의해 결정되는 하나 이상의 메모리 할당들에 기초하여). 다른 예로서, 일부 실시 예에서, 구성 정보(623)는 관리 로직(518)이, 예를 들어, 메모리의 하나 이상의 유형, 양, 액세스 세분성, 성능 특성 등에 기초하여 장치 메모리(506)의 하나 이상의 적절한 부분들을 장치 기능(504)의 하나 이상의 부분들에 할당할 수 있도록 하기 위해 장치 기능(504)의 하나 이상의 부분들에 대한 하나 이상의 사양, 요구사항 등을 포함할 수 있다.
표 2는 장치(502)의 관리 로직(518)으로 구성 정보(623)를 전송하는 데(예를 들어, 호스트와 같은 장치로부터) 사용될 수 있는 데이터 구조의 예시적인 실시 예를 도시한다. 일부 실시 예에서, 표 2는 관리 로직(518)에 의해 수신되고, 장치 기능(504)의 하나 이상의 부분들에 의해 액세스되도록 장치 메모리(506)의 하나 이상의 부분들을 구성하는 데 사용될 수 있다. 예를 들어, 표 2는 메모리 구성 명령(622) 내에 포함되거나, 메모리 구성 명령(622) 내의 포인터에 의해 참조되거나, 메모리 구성 명령(622)과 연계하여 임의의 다른 방식으로 통신될 수 있다. 표 2에 도시된 실시 예에서, 장치 기능(504)의 하나 이상의 부분들은 열 1에 도시된 바와 같이 컴퓨팅 엔진들로 구현될 수 있지만, 원리들은 임의의 다른 유형의 장치 기능에 적용될 수 있다. 표 2에 도시된 실시 예는 표 1에서 사용된 것과 유사한 식별자(예컨대, 컴퓨팅 엔진 ID, Mem ID, 네임스페이스 ID 등)를 사용할 수 있다.
표 2를 참조하면, 열 1은 컴퓨팅 엔진을 나타낼 수 있다. 열 2는 해당 컴퓨팅 엔진에서 실행되도록 인스턴스화, 활성화 등이 될 수 있는 프로그램을 나타낼 수 있다. 열 3, 4, 및 5는 각각 해당 컴퓨팅 엔진 및/또는 프로그램에 의해 액세스되도록 구성될 수 있는 메모리(예컨대, 메모리 장치), 네임스페이스 및/또는 주소 범위를 나타낼 수 있다.
예시의 목적을 위해, 표 2에 도시된 실시 예는 도 8에 도시된 실시 예와 함께 사용될 수 있는 구성 정보의 예를 제공할 수 있다. 예를 들어, 열 3은, 도 9에 도시된 실시 예에서 CE3에 의해 Mem A가 액세스되지 않을 수 있기 때문에, CE3에 대한 Mem A에 대한 엔트리들을 포함하지 않을 수 있다. 그러나, 원리들은 이들 또는 임의의 다른 구현 세부 사항에 제한되지 않는다.
도 7은 본 개시의 예시적인 실시 예에 따른 메모리 구성 명령의 제2 실시 예를 도시한다. 도 7에 도시된 메모리 구성 명령(722)은, 예를 들어, 도 5에 도시된 구성 요청(522)을 구현하기 위해 사용될 수 있다. 도 7에 도시된 메모리 구성 명령(722)은, 예를 들어, 장치(502)의 컨트롤러(510)로 전송되어(예를 들어, 호스트에 의해) 관리 로직(518)이 장치 기능(504)의 하나 이상의 부분들에 의해 액세스되도록 장치 메모리(506)의 하나 이상의 부분들을 구성하도록 할 수 있다. 예시의 목적을 위해, 도 7에 도시된 메모리 구성 명령(722)은 컴퓨팅 엔진들로 구현될 수 있는 장치 기능(504)의 하나 이상의 부분들의 맥락에서 설명될 수 있지만, 원리들은 임의의 다른 유형의 장치 기능에 적용될 수 있다. 일부 실시 예에서, 메모리 구성 명령(722)은, 예를 들어, NVMe 명령, CXL 명령 등으로 구현될 수 있다.
메모리 구성 명령(722)은 구성할 장치 메모리(506)의 일부를 나타내는 메모리 ID(Mem ID)(724), 및 메모리가 액세스되도록 구성될 수 있는 장치 기능(504)의 일부를 나타내는 컴퓨팅 엔진 식별자(컴퓨팅 엔진 ID 또는 CEID)(728)를 포함할 수 있다. 추가적으로, 또는 대안적으로, 메모리 구성 명령(722)은 구성할 장치 메모리(506)의 일부(예를 들어, 네임스페이스 ID의 서브세트)를 나타내는 네임스페이스 ID(NSID)(726)를 포함할 수 있다. 추가적으로, 또는 대안적으로, 메모리 구성 명령(722)은 구성할 장치 메모리(506)의 일부(예를 들어, 네임스페이스 ID의 서브세트)를 나타내는 범위 ID(범위 ID 또는 RID)(727)를 포함할 수 있다. 추가적으로, 또는 대안적으로, 메모리 구성 명령(722)은 메모리가 액세스되도록 구성될 수 있는 특정 프로그램(예를 들어, Prog ID로 표시된 컴퓨팅 엔진들 중 하나에 의해 실행되는)을 나타내는 프로그램 식별자(프로그램 ID, Prog ID, 또는 PID)(730)를 포함할 수 있다.
도 8은 본 개시의 예시적인 실시 예에 따른 검색 메커니즘 및 관리 메커니즘을 포함하는 장치의 실시 예를 도시한다. 도 8에 도시된 장치(802)는 도 1, 도 2, 도 3, 및/또는 도 5에 도시된 것과 유사한 일부 요소들을 포함할 수 있으며, 유사한 요소들은 유사한 숫자로 끝나는 참조 번호를 가질 수 있다. 그러나, 도 8에 도시된 실시 예에서, 컨트롤러(810)는 검색 로직(814) 및 관리 로직(818)을 모두 포함할 수 있다. 또한, 도 8에 도시된 실시 예에서, 장치 기능(804)의 하나 이상의 부분들과 장치 메모리(806)의 하나 이상의 부분들 사이의 하나 이상의 연결들(832)이 도시된다. (하나 이상의 연결들(832)은 구조, 배열, 또는 연결들의 패브릭으로도 지칭될 수 있음).
도 8에 도시된 실시 예는 또한 통신 패브릭(803)을 통해 장치(802)에 연결된 호스트(801)를 포함할 수 있다. 일부 실시 예에서, 호스트(801)는, 예를 들어, 장치 기능(804)의 하나 이상의 부분들 중 적어도 하나를 사용하여 하나 이상의 작업들을 수행할 수 있는 장치(802)로 하나 이상의 작업들을 전송할 수 있다. 일부 실시 예에서, 호스트(801)는 장치 기능(804)의 하나 이상의 부분들을 활용할 수 있는 하나 이상의 애플리케이션(805)을 실행할 수 있다.
하나 이상의 연결들(832)은 광범위한 상이한 컨덕터, 인터커넥트, 네트워크, 인터페이스, 프로토콜 등을 사용하여 구현될 수 있다. 예들은 회로 기판 트레이스, 버퍼, 라인 드라이버, 래치, 리피터, 리타이머, 스위치, 멀티플렉서 및/또는 디멀티플렉서, 임의의 세대의 이중 데이터 전송률(DDR) 인터페이스(예를 들어, DDR2, DDR3, DDR4, DDR5 등), 저전력 DDR(LPDDR), 개방형 메모리 인터페이스(OMI), 공통 플래시 인터페이스(CFI), 개방형 낸드 플래시 인터페이스(ONFI), PCIe, NVMe, NVMe-oF, CXL, Gen-Z, OpenCAPI, CCIX, AXI, DMA, RDMA, ROCE, AMQP, 이더넷, TCP/IP, 파이버채널, 인피니밴드, SATA, SCSI, SAS, iWARP 등을 포함할 수 있다.
비록 장치 기능(804), 장치 메모리(806), 및 하나 이상의 연결들(832)이 별도의 요소들로 도시될 수 있지만, 일부 실시 예에서, 이들 요소들 중 일부 또는 전부가 중첩될 수 있다. 예를 들어, 장치 기능(804)의 적어도 일부가 FPGA로 구현되는 실시 예에서, 적어도 일부 장치 메모리(예를 들어, FPGA 내의 로컬 메모리) 및 메모리 인터커넥트의 적어도 일부가 FPGA 내에 포함될 수 있다. 또한, 하나 이상의 연결들(832)은 단일 요소로 도시될 수 있지만, 제1 구성 요소 세트들 사이의 하나 이상의 제1 연결들 및 제2 구성 요소 세트들 사이의 하나 이상의 제2 연결들을 포함할 수 있으며, 제1 구성 요소 세트들과 제2 구성 요소 세트들 사이에는 연결들이 없을 수도 있다. 예를 들어, 제1 ASIC은 제1 프로세서, 제1 로컬 장치 메모리, 및 제1 프로세서와 제1 로컬 장치 메모리 사이의 제1 연결을 포함할 수 있고, 제2 ASIC은 제2 프로세서, 제2 로컬 장치 메모리 및 제2 프로세서와 제2 로컬 장치 메모리 사이의 제2 연결을 포함할 수 있지만, 제1 ASIC과 제2 ASIC 사이에는 연결이 없을 수도 있다.
도 8에 도시된 실시 예에서, 장치 메모리(806)의 하나 이상의 부분들은, 예를 들어, 도 1과 관련하여 전술한 동작들 중 어느 하나에 대해 사용될 수 있으며, 특히 다음과 같이 사용될 수 있다: 호스트, 스토리지 매체(예를 들어, 스토리지 네임스페이스로 구성된 스토리지 매체의 하나 이상의 부분들) 등으로부터 복사된 입력 데이터 저장; 컴퓨팅 엔진에서 실행되는 프로그램의 버퍼링 및/또는 출력 데이터, 컴퓨팅 엔진에서 실행되는 프로그램에서 사용되는 중간 데이터 버퍼링; 호스트 메모리, 스토리지 매체(예를 들어, 스토리지 네임스페이스로 구성된 스토리지 매체의 하나 이상의 부분들) 등으로 출력 데이터를 복사; 프로그램들 간 데이터 교환; 가상 머신들(예: 하나 이상의 연산 리소스들에서 실행되는) 간의 데이터 교환 등.
추가 예로서, 도 8에 도시된 장치 메모리(806)의 하나 이상의 부분들은 임의의 수의 다음과 같은 목적들, 동작들 등에 대해 사용될 수 있다: 드라이브 관리(예를 들어, 키-값 저장소, 파일 시스템 정보, 캐시 관리 등과 같은 용도들을 위한 메타데이터 및/또는 메타데이터 룩업을 저장); 복사 버퍼(예: 네임스페이스들 간에 데이터를 복사하기 위한 중간 버퍼), 패리티 버퍼(예: 독립 드라이브들의 중복 배열(RAID)과 같은 중복 작업들을 위한 체크섬 또는 기타 데이터를 저장), 임시 버퍼(예를 들어, 호스트, 장치 등에서 실행될 수 있는 하나 이상의 애플리케이션들에 대한), 명령 처리, 번역 및/또는 룩업 버퍼, 체크섬 및/또는 암호화 키 버퍼 등.
명령 처리의 예들은, NVMe 명령 큐들 및/또는 엔트리들(예를 들어, 제출 큐들(SQs), 제출 큐 엔트리들(SQEs), 완료 큐들(CQs), 및/또는 완료 큐 엔트리들(CQEs))을 처리하는 것을 포함할 수 있다. 예를 들어, NVMe 시스템의 제어 메모리 버퍼(CMB)는 버퍼에 SQEs를 배치하거나, 장치가 버퍼에 CQEs를 배치할 수 있도록 하는 등과 같은 작업들을 위해 CMB를 사용할 수 있는 호스트에 의해 (예를 들어, 직접) 액세스될 수 있는 메모리 매핑된 공간에서 PCIe 베이스 주소 레지스터(BAR)로 구현될 수 있다. 일부 실시 예에서, 장치 메모리는, 예를 들어, 장치에서 하나 이상의 명령들을 처리하는 것과 같이, CMB의 하나 이상의 기능들에 사용될 수 있다. 구현 세부 사항에 따라, 이는 향상된 유틸리티, 성능 등을 제공할 수 있다.
본 개시의 예시적인 실시 예에 따라, 암호화 키들을 위해 장치 메모리를 사용하는 예시적인 실시 예에서, 호스트는 암호화 키들의 데이터 구조를 장치 메모리로 미리 다운로드할 수 있다(예를 들어, 키-퍼-IO(KPIO) 구현을 위해). 이러한 배열을 통해, 호스트는 IO를 발행하고, 장치가 IO를 암호화 및/또는 복호화하는 데 사용할 수 있는 IO에 대응하는 암호화 키를 검색하기 위해 데이터 구조에 인덱스에 대한 포인터를 제공할 수 있다. 구현 세부 사항에 따라, 암호화 키들을 장치 메모리의 버퍼에 배치하면, 예를 들어, 키가 IO 명령의 일부가 아닐 수 있으므로, 키들이 노출되지 않도록(예를 들어, 호스트에) 보호할 수 있다.
도 9는 본 개시의 예시적인 실시 예에 따라 구성된 장치 메모리를 갖는 장치의 예시적 실시 예를 도시한다. 도 9에 도시된 실시 예는, 예를 들어, 유사한 요소들이 유사한 숫자로 끝나는 참조 번호를 가질 수 있는 도 1, 도 3, 도 5, 도 8, 및/또는 표 1에 도시된 실시 예들과 함께 구현되거나, 실시 예들을 구현하는 데 사용될 수 있다. 예시의 목적으로, 도 9에 도시된 실시 예는 컴퓨팅 엔진들로 구현된 장치 기능 장치의 맥락에서 설명될 수 있지만, 원리들은 임의의 다른 유형의 장치 기능에 적용될 수 있다.
도 9를 참조하면, 장치는 CE1, CE2, 및 CE3으로 식별되는 3개의 컴퓨팅 엔진들(934)로 구현되는 장치 기능, 및 Mem A, Mem B, 및 Mem C로 식별되는 메모리 장치들(936)로 구현되는 장치 메모리를 포함할 수 있다. 컴퓨팅 엔진들(CE1, CE2) 및 메모리 장치 Mem A는 ASIC(940)에 포함될 수 있다. 컴퓨팅 엔진들(CE1, CE2)은, 예를 들어, 프로세서(예컨대, ARM 프로세서), 게이트 어레이, 논리 장치 등으로 구현될 수 있는 반면, 컴퓨팅 엔진(CE3)은 CPU로 구현될 수 있다.
프로그램들(P1, P2)은 CE1 상에서 인스턴스화, 로드, 활성화 등이 될 수 있다. 프로그램들(P4, P5)은 CE2 상에서 인스턴스화, 로드, 활성화 등이 될 수 있다. 프로그램들(P8, P9)은 CE3에서 인스턴스화, 로드, 활성화 등이 될 수 있다.
메모리 장치들(Mem A, Mem B)은 휘발성 메모리(예컨대, DRAM)로 구현될 수 있고, 메모리 장치(Mem C)는 영구 메모리로 구현될 수 있다. 메모리 장치(Mem A)의 일부 또는 전부는 네임스페이스들(NS100, NS101, 및/또는 NS102)로 세분(예를 들어, 구성)될 수 있고, 이는 범위들(범위 1, 범위 2)로 더 세분될 수 있다. 메모리 장치(Mem B)의 일부 또는 전부는 네임스페이스들(NS200, NS201 및/또는 NS202)로 세분(예를 들어, 구성)될 수 있고, 이는 범위들(범위 1, 범위 2)로 더 세분될 수 있다. 메모리 장치(Mem C)의 일부 또는 전부는 네임스페이스들(NS300, NS301 및/또는 NS302)로 세분(예를 들어, 구성)될 수 있고, 이는 범위들(범위 1, 범위 2)로 더 세분될 수 있다. 도 9에 도시된 메모리 장치들(936)의 개수, 타입, 특성 등은 예시의 목적이며, 다른 실시 예에서는, 임의의 다른 개수, 타입, 특성 등을 갖는 메모리 장치들이 사용될 수 있다.
연결 구조(932)는 컴퓨팅 엔진들(934) 및 메모리 장치들(936) 사이의 연결들을 포함할 수 있다. 구체적으로, Mem A는 연결들(932-1, 932-2)에 의해 각각 CE1 및 CE2에 연결될 수 있다. Mem B는 연결들(932-3, 932-4, 932-5)에 의해 각각 CE1, CE2, 및 CE3에 연결될 수 있다. Mem C는 연결들(932-6, 932-7, 932-8)에 의해 각각 CE1, CE2, 및 CE3에 연결될 수 있다. CE3은 ASIC(940)의 외부에 있기 때문에, CE3과 Mem A 사이에 연결이 없을 수 있다.
따라서, CE1 및/또는 CE2는 Mem A, Mem B, 및/또는 Mem C에 액세스할 수 있는 반면, CE3는 Mem A 및/또는 Mem B에 액세스할 수 있지만 Mem C에는 액세스할 수 없을 수 있다.
도 9에 도시된 예시적인 실시 예에서, 지시된 메모리 리소스들의 다음 집합(942)은 (예를 들어, 도 5의 관리 로직(518) 및/또는 도 8의 관리 로직(818)에 의해) 프로그램(P1)에 의해 액세스되도록 구성될 수 있다(예컨대, 표 1에 도시된 바와 같이): Mem A에서 NS101의 범위 1 및 범위 2, Mem B에서 NS200의 범위 1 및 범위 2, 및/또는 Mem C에서 NS 302의 범위 1 및 범위 2. 따라서, P1은 프로그램 실행을 위해 집합(942)의 메모리 리소스들 중 어느 것이라도 사용할 수 있다. 반대로, 프로그램(P8)은 프로그램 실행을 위해 Mem A의 메모리 리소스들에 액세스하지 못할 수 있다.
일부 실시 예에서, 그리고 구현 세부 사항에 따라, 본 개시의 예시적인 실시 예에 따른 장치 메모리 및/또는 장치 기능을 갖는 장치는 임의의 수의 다음 특징들을 구현하고/또는 임의의 수의 다음 이점들을 제공할 수 있다. 장치 메모리(예컨대, 장치에 로컬한 메모리)는 장치 기능(예컨대, 하나 이상의 연산 스토리지 엔진들)에 액세스하기 위해 제공될 수 있다. 장치 메모리의 하나 이상의 부분들은 하나 이상의 네임스페이스들로 세분화될 수 있으며, 네임스페이스는 장치 메모리의 하나 이상의 부분들에 대한 가상 표현을 제공할 수 있다. 호스트와 같은 장치는, 예를 들어 검색 메커니즘을 사용하여, 장치 메모리의 하나 이상의 부분들 및/또는 장치 메모리의 하나 이상의 부분들에 액세스할 수 있는 장치 기능의 하나 이상의 부분들을 인식하도록 제공될 수 있다. 일부 실시 예에서, 장치 메모리의 하나 이상의 부분들은 (예를 들어, 상이한 메모리 특성들에 기초하여) 하나 이상의 그룹들로 분할될 수 있다. 장치는 장치 기능(예컨대, 컴퓨팅 엔진)의 하나 이상의 부분들이 액세스할 수 있는 메모리의 어떤 그룹 또는 그룹들에 대한 정보(메모리 정보)를 장치가 (예를 들어, 호스트에) 제공할 수 있도록 하는 검색 메커니즘을 구현할 수 있다. 장치 기능의 하나 이상의 부분들(예: 컴퓨팅 엔진들)은 하나 이상의 메모리, 스토리지 등의 하나 이상의 그룹들에 액세스할 수 있을 수 있다. 장치 기능의 하나 이상의 부분들(예를 들어, 컴퓨팅 엔진들)은 장치 기능의 하나 이상의 부분들이 액세스할 수 있는 하나 이상의 그룹들의 하나 이상의 세분화된 부분들에 액세스할 수 있을 수 있다. 호스트와 같은 장치는 메모리 정보를 사용하여(예를 들어, 리스트, 테이블, 또는 기타 데이터 구조를 사용하여) 프로그램(예를 들어, 컴퓨팅 엔진에서 실행되는)에서 프로그램 실행을 위해 특정 메모리 리소스들이 사용될 수 있음을 나타낼 수 있다.
일부 실시 예에서, 그리고 구현 세부 사항에 따라, 본 개시의 예시적인 실시 예에 따른 장치 메모리 및/또는 장치 기능을 갖는 장치는 임의의 수의 다음 특징들을 구현하고/또는 임의의 수의 다음 이점들을 제공할 수 있다. 장치 메모리(예컨대, 장치 내에 로컬인 메모리)는 다른 유형의 장치에 대한 장치 기능을 구현할 수 있는 하나 이상의 컴퓨팅 엔진들 및/또는 로직에 대한 비공개 액세스를 위해 제공될 수 있다. 장치 메모리(예: 장치 내 로컬인 메모리)는, 예를 들어, 다른 유형의 장치에 대한 장치 기능을 구현할 수 있는 하나 이상의(예: 전체) 컴퓨팅 엔진들 및/또는 로직에 대한, 장치 내 공개 액세스를 위해 제공될 수 있다. 하나 이상의 메모리 유형은 변동성, 지연 시간, 전력 등과 같은 특성들에 따라 차별화될 수 있다. 메모리는, 예를 들어, 액세스 로컬리티에 기반하여, 예를 들어, 특정 장치 기능의 하나 이상의 부분들에 대해 호스트에 의해 관리될 수 있는, 액세스 권한을 갖는 하나 이상의 네임스페이스들로 분할될 수 있다. 네임스페이스는 프로그램 실행에 사용하도록 하나 이상의 프로그램들에 의해 액세스되도록 구성될 수 있는 하나 이상의 오프셋들(예: 주소 범위들)을 갖는 하나 이상의 하위 그룹들로 세분화될 수 있다. 하나 이상의 하위 그룹들은, 예를 들어, 호스트와 같은 장치에 의한 데이터 흐름들의 관리를 위해, 더 큰 그룹을 형성하기 위해 함께 그룹화될 수 있다. 장치 기능의 하나 이상의 부분들(예: 컴퓨팅 엔진들)은 하나 이상의 메모리 네임스페이스들 및/또는 범위 그룹들에 액세스하도록 구성될 수 있다. 임의의 수의 이러한 기능 및/또는 이점은 본 개시의 예시적인 실시 예에 따라 연산 스토리지 장치에 의해 제공될 수 있다.
일부 실시 예에서, 장치 메모리는 다양한 유형의 접근성으로 구현될 수 있다. 예를 들어, 장치 메모리의 일부 부분들에 대한 액세스는 장치 기능의 특정 부분들로 제한될 수 있는 반면, 장치 메모리의 다른 부분들은 장치 기능의 임의의 부분들에 의해 액세스될 수 있다. 따라서, 일부 실시 예에서, 메모리 관리 메커니즘은 장치 기능의 일부 부분들 및/또는 장치 메모리의 일부 부분들을 중복 액세스를 위해 구성할 수 있다. 추가적으로, 또는 대안적으로, 메모리 관리 메커니즘은 다양한 유형의 접근성을 위해 장치 메모리의 하나 이상의 부분들을 구성할 수 있다.
일부 실시 예에서, 메모리 관리 메커니즘은 메모리 네임스페이스를 사용하여 장치 메모리의 하나 이상의 부분들을 구성할 수 있다. 일부 실시 예에서, 메모리 네임스페이스는 장치 메모리의 하나 이상의 부분들의 논리적 표현을 참조할 수 있다. 따라서, 일부 실시 예에서, 메모리 네임스페이스는 장치 메모리의 하나 이상의 부분들의 집합으로 구현될 수 있다. 구현 세부 사항에 따라, 메모리 네임스페이스들은 메모리의 중첩된 부분들을 포함할 수도 있고 포함하지 않을 수도 있다. 일부 실시 예에서, 하나 이상의 명령들은 하나 이상의 네임스페이스들에 첨부될 수 있다.
도 10은 본 개시의 예시적인 실시 예에 따른 연산 및 프로그램 리소스들을 갖는 연산 장치를 포함하는 시스템의 실시 예를 도시한다. 도 10에 도시된 실시 예는 호스트(1001), 및 통신 패브릭(1003)에 의해 연결된 연산 장치(1002)를 포함할 수 있다.
연산 장치(1002)는 장치 컨트롤러(1010), 프로그램 저장소(1009), 장치 메모리(1006), 하나 이상의 컴퓨팅 리소스들(1008)(연산 리소스들로도 지칭될 수 있음), 및/또는 장치 기능 회로(1004)를 포함할 수 있다. 장치 컨트롤러(1010)는 본 명세서에 설명된 임의의 동작들, 기능들 등을 포함하여 연산 장치(1002)의 전반적인 동작을 제어할 수 있다. 예를 들어, 일부 실시 예에서, 장치 컨트롤러(1010)는 호스트(1001)로부터 수신된 명령들을 구문 분석, 처리, 호출 등을 할 수 있다. 장치 기능 회로(1004)는 연산 장치(1002)의 주요 기능을 구현하기 위한 임의의 하드웨어를 포함할 수 있다. 예를 들어, 연산 장치(1002)가 스토리지 장치로 구현되는 경우, 장치 기능 회로(1004)는 하나 이상의 플래시 메모리 장치들, 플래시 변환 계층(FTL) 등과 같은 스토리지 매체를 포함할 수 있다. 일부 실시 예에서, 연산 스토리지 장치는 연산 스토리지 드라이브(CSD), 연산 스토리지 프로세서(CSP), 및/또는 연산 스토리지 어레이(CSA)로 구현될 수 있다.
다른 예로서, 연산 장치(1002)가 네트워크 인터페이스 카드(NIC)로 구현되는 경우, 장치 기능 회로(1004)는 하나 이상의 모뎀들, 네트워크 인터페이스들, 물리 계들층(PHYs), 매체 액세스 제어 계층들(MACs) 등을 포함할 수 있다. 추가 예로서, 연산 장치(1002)가 가속기로 구현되는 경우, 장치 기능 회로(1004)는 필드 프로그래머블 게이트 어레이(FPGA), 애플리케이션 특정 집적 회로(ASIC), 임베디드 프로세서 등과 같은 하나 이상의 연산 리소스들을 포함할 수 있다.
호스트(1001)는 연산 장치(1002)의 연산 리소스들(1008)을 활용할 수 있는 임의의 구성 요소 또는 구성 요소들의 조합으로 구현될 수 있다. 예를 들어, 호스트(1001)는 클라이언트 장치, 서버, 스토리지 노드, 중앙 처리 장치(CPU), 개인용 컴퓨터, 태블릿 컴퓨터, 스마트폰 등 중 하나 이상을 포함할 수 있다. 또한, 도 10에 도시된 실시 예는 임의의 수의 호스트들을 포함할 수 있다.
통신 패브릭(1003)은 임의의 유형의 인터페이스 및/또는 프로토콜을 사용하여 하나 이상의 인터커넥트들, 하나 이상의 네트워크들, 네트워크들의 네트워크(예컨대, 인터넷) 등, 또는 이들의 조합으로 구현될 수 있다. 예를 들어, 패브릭(1003)은 PCIe, NVMe, NVMe-oF, CXL, Gen-Z, OpenCAPI, CCIX, AXI, DMA, RDMA, ROCE, AMQP, 이더넷, TCP/IP, 파이버채널, 인피니밴드, SATA, SCSI, SAS, iWARP 등, 또는 이들의 임의의 조합으로 구현될 수 있다. 예를 들어, 연산 장치(1002)가 스토리지 장치로 구현되는 실시 예에서, 컨트롤러(1010)는 호스트(1001)와 연산 장치(1002)가 통신 패브릭(1003)을 통해 명령, 데이터 등을 교환할 수 있도록 하는 NVMe, CXL 등과 같은 저장 프로토콜을 구현할 수 있다. 일부 실시 예에서, 통신 패브릭(1003)은 하나 이상의 스위치, 허브, 노드, 라우터 등을 포함할 수 있다.
일부 실시 예에서, 하나 이상의 컴퓨팅 엔진(1011)은 임의의 유형의 메모리에 저장된 명령들을 실행하고/하거나 컨테이너, 가상 머신, 리눅스와 같은 운영 체제, 확장 버클리 패킷 필터(eBPF) 환경 등, 또는 이들의 조합과 같은 임의의 유형의 실행 환경을 구현할 수 있는 CPLD, FPGA(컴퓨팅 엔진(1011a)으로 도시됨), ASIC(컴퓨팅 엔진(1011b)으로 도시됨), CPU(예를 들어, 컴퓨팅 엔진(1011c)으로 도시된CISC, RISC 등, 또는 이들의 코어), GPU, DPU, NPU, TPU 등을 포함할 수 있다. 일부 실시 예에서, 컴퓨팅 엔진은 조합 로직, 순차 로직, 하나 이상의 타이머, 카운터, 레지스터, 및/또는 상태 머신 등을 포함할 수 있다. 일부 실시 예에서, 연산 리소스의 일부 또는 전부는 시스템-온-칩(SOC)으로 구현될 수 있다.
프로그램 저장소(1009)는 하나 이상의 실행 가능한 연산 장치 프로그램(1007)을 저장하기 위한 하나 이상의 프로그램 슬롯들을 포함할 수 있다. 일부 실시 예에서, 연산 장치 프로그램(연산 프로그램들, 컴퓨팅 프로그램들, 또는, 문맥에 따라, 프로그램들로도 지칭될 수 있음)은 알고리즘, 데이터 이동, 데이터 관리, 데이터 선택, 필터링, 암호화 및/또는 복호화, 압축 및/또는 압축 해제, 체크섬 계산, 해시 값 계산, 순환 중복 검사(CRC) 등과 같은 연산 장치의 하나 이상의 연산 리소스들에 의해 수행될 수 있는 임의의 유형의 프로그램을 지칭할 수 있다. 일부 실시 예에서, 연산 저장 프로그램은 연산 장치에 의해 실행되도록 의도되거나, 연산 장치에 의해 실행되도록 조정되거나 하는 등의 프로그램을 지칭할 수 있다. 일부 실시 예에서, 컴퓨팅 엔진은 하나 이상의 연산 장치 프로그램들을 실행할 수 있는 구성 요소 또는 구성 요소들의 조합을 지칭할 수 있다.
하나 이상의 프로그램(1007)은, 예를 들어, 연산 리소스들(1008) 내의 하나 이상의 컴퓨팅 엔진(1011)을 사용하여 실행될 수 있다. 일부 실시 예에서, 장치 메모리(1006)는 하나 이상의 컴퓨팅 엔진(1011)에 의해 실행될 때 하나 이상의 프로그램(1007)에 의해 사용될 수 있다. 예를 들어, 장치 메모리(1006)는, 하나 이상의 프로그램(1007)에 대한, 입력 데이터, 출력 데이터, 전환 데이터 등을 보유하기 위해 사용될 수 있다. 일부 실시 예들, 컨텍스트들 등에서, 프로그램(1007)은 함수로 지칭될 수 있다.
일부 실시 예에서, 호스트(1001)는, 예를 들어, 연산 리소스들(1008)에 의해 실행될 수 있는 하나 이상의 프로그램(1007)을 사용하여, 하나 이상의 작업들을 수행할 수 있는 연산 장치(1002)로 하나 이상의 작업들을 오프로드할 수 있다. 예를 들어, 호스트(1001)는 하나 이상의 프로그램(1007) 및/또는 연산 장치(1002)의 컴퓨팅 엔진(1011) 중 하나 이상을 활용할 수 있는 하나 이상의 애플리케이션(1005)을 실행할 수 있다.
일부 실시 예에서, 하나 이상의 컴퓨팅 엔진들은 하나 이상의 프로그램(1007)의 전체 또는 부분(예컨대, 하이브리드)의 하드웨어 구현들을 제공할 수 있다. 예를 들어, 일부 실시 예에서, 하나 이상의 컴퓨팅 엔진(1011)은, 예를 들어, 소프트 FPGA 기능으로 구현될 수 있는 프로그램(1007)의 비트 스트림을 처리하도록 구성된 조합 로직, 순차 로직, 하나 이상의 타이머, 카운터, 레지스터 및/또는 상태 머신, 하나 이상의 CPLD, FPGA, ASIC, 및/또는 이들의 조합을 포함할 수 있다.
도 11은 본 개시의 예시적인 실시 예에 따라, 로드 가능한 프로그램 리소스들을 갖는 연산 장치를 포함하는 시스템의 실시 예를 도시한다. 도 11에 도시된 실시 예는 도 10에 도시된 것과 유사할 수 있는 일부 요소들을 포함할 수 있으며, 유사한 요소들은 유사한 숫자로 끝나는 참조 번호를 가질 수 있다.
도 11을 참조하면, 연산 장치(1102)에서, 하나 이상의 연산 리소스들(1108)은 연산 네임스페이스 A(CN A 또는 CNS A), 연산 네임스페이스 B(CN B 또는 CNS B), 연산 네임스페이스 C(CN C 또는 CNS C), 및/또는 연산 네임스페이스 D(CN D 또는 CNS D)로 식별되는 하나 이상의 연산 네임스페이스들(1144)로 구성될 수 있고/있거나, 이를 사용하여 액세스될 수 있다.
하나 이상의 연산 네임스페이스들(1144)은 연산 리소스들(1108)로부터 연산 네임스페이스(1144)에 매핑될 수 있는 연산 리소스들(1150)(CR A, CR B, CR C, 및/또는 CR D로 식별됨)을 사용하도록 구성될 수 있다. 예를 들어, 도 11의 화살표에 도시된 바와 같이, 연산 네임스페이스 A는 2개의 CPU 코어들을 사용하도록 구성될 수 있고, 연산 네임스페이스 B는 하나의 CPU 코어 및 하나의 FPGA를 사용하도록 구성될 수 있고, 연산 네임스페이스 C는 하나의 CPU 코어를 사용하도록 구성될 수 있고, 그리고 연산 네임스페이스 D는 하나의 ASIC을 사용하도록 구성될 수 있다. 일부 실시 예에서, 하나 이상의 연산 리소스들(1108)의 활용은 연산 네임스페이스에 배타적이지 않을 수 있다. 예를 들어, 제1연산 네임스페이스에 매핑된 리소스(예를 들어, FPGA, ASIC, CPU 코어 등)는 다른 연산 네임스페이스에 재사용(예를 들어, 매핑)될 수 있다.
연산 장치(1102)는, 예를 들어, 하나 이상의 연산 네임스페이스(1144)에 매핑된 하나 이상의 연산 리소스들(1150)에 의해 실행될 수 있는 프로그램 1, 프로그램 2, 프로그램 3, 프로그램 4, 및/또는 프로그램 5로 식별되는 프로그램(1107)을 저장하기 위한 하나 이상의 프로그램 슬롯들을 갖는 프로그램 저장소(1109)를 포함할 수 있다.
프로그램(1107)은 다양한 기법들을 사용하여 프로그램 저장소(1109)에 배치될 수 있다. 제1 예시 기법(내장 기법이라고 지칭될 수 있는)으로서, 프로그램(1107)은 벤더(예를 들어, 제조업체, 유통업체 등)에 의해 ASIC의 방식으로 프로그램 저장소(1109) 내에 내장될 수 있다. 제2 예시 기법(프리로드 기술이라고 지칭될 수 있는)으로서, 프로그램(1107)은, 예를 들어, 장치(1102)가 제조, 배포 등이 될 때, 벤더에 의해 프로그램 저장소(1109)에 프리로드될 수 있다.
제3 예시 기술(다운로드 기술이라고 지칭될 수 있는)로서, 프로그램(1107)은 펌웨어 설치 및/또는 개정의 일부로서 프로그램 저장소(1109) 내에 로드될 수 있다(예컨대, 다운로드될 수 있다). 예를 들어, 디바이스 벤더는 하나 이상의 프로그램(1107)을 포함할 수 있는 펌웨어 콘텐츠(예컨대, 펌웨어 이미지, 파일 등)를 제공할 수 있다(예컨대, 하나 이상의 프로그램(1107)을 포함하는 프로그램 저장소(1109)의 전부 또는 일부). 펌웨어 컨텐츠는 제조 프로세스, 개정 프로세스(예컨대, 업데이트 프로세스, 업그레이드 프로세스 등), 배포 프로세스 등의 일부로서 프로그램 저장소(1109)로 로드(예컨대, 다운로드)될 수 있다. 일부 실시 예에서, 펌웨어 컨텐츠는 벤더 특정 메커니즘을 사용하여 장치(1102) 내에 로딩될 수 있다(프로그램 저장소(1109)에 하나 이상의 프로그램(1107)을 로딩하는 것을 포함). 예를 들어, 펌웨어 콘텐츠는 펌웨어 콘텐츠를 장치(1102)로 로딩하기 위한 벤더 특정 메커니즘을 개시할 수 있는 다운로드 펌웨어 명령(예컨대, NVMe 다운로드 펌웨어 명령)을 사용하여 장치(1102)로 로딩될 수 있다. 일부 실시 예에서, 그러한 메커니즘은 전체 장치(1102)에 대한 펌웨어 이미지를 로드할 수 있고, 따라서, 펌웨어 이미지의 어느 부분이 프로그램 저장소(1109)를 위한 하나 이상의 프로그램(1107)을 포함할 수 있는지를 결정하는 것이 어렵거나 불가능할 수 있다. 따라서, 장치(1102)의 연산 리소스들(1108)의 사용자(예컨대, 호스트, 애플리케이션, 프로세스, 서비스 등)는 전술한 제1(내장), 제2(프리로드), 및/또는 제3(다운로드) 예시 기술 중 어느 하나를 사용하여 프로그램 저장소(1109)에 프로그램(1107)을 로드하지 못할 수 있다. 일부 실시 예에서, 프로그램을 로딩하기 위한 벤더 특정 메커니즘은 디코드 펌웨어 패키지를 디바이스 펌웨어 및/또는 장치(1102)를 위한 하나 이상의 연산 프로그램들로 디코딩할 수 있다.
전술한 제1, 제2, 및/또는 제3 예시 기술 중 어느 하나를 사용하여 프로그램 저장소(1109)에 로딩된 프로그램(1107)은 네이티브 프로그램(또는 고정 프로그램 또는 미리 로드된 프로그램)으로 지칭될 수 있다.
일부 실시 예에서, 제3(다운로드) 기법을 사용하여 프로그램(1107)을 프로그램 저장소(1109)로 로드하는(예를 들어, 펌웨어 이미지, 패키지 등을 장치(1102)로 다운로드하는) 것은 제2(프리로드) 기법과 유사한 하나 이상의 이점들을 제공할 수 있다. 그러나, 구현 세부 사항에 따라, 제3(다운로드) 기법을 사용하는 것은 장치(1102) 및/또는 하나 이상의 실행 프로그램들을 대기 상태(예를 들어, 절전 상태 또는 꺼짐, 종료, 일시 정지, 중단, 최대 절전 모드, 정지, 일시 중단 등)로 전환하는 것을 포함할 수 있다. 또한, 구현 세부 사항에 따라, 제3(다운로드) 기법을 사용하는 것은: (1) 연산 네임스페이스가 할당된 하나 이상의 가상 머신들을 다시 시작하고; (2) 이전에 다운로드된 하나 이상의 프로그램(1107)을 다시 로드하고(예를 들어, 다운로드하는); 및/또는 (3) (예를 들어, 하나 이상의 실행 프로그램(1107)에 의해) 진행 중인 하나 이상의 연산들을 완료, 중단 등을 하는 것을 포함할 수 있다.
프로그램 저장소(1109)는, 예를 들어, 장치 메모리(1106)의 일부로서 및/또는, 적어도 부분적으로, 프로그램 저장소(1109)에 전용될 수 있는 메모리와 함께, 예를 들어, 휘발성 및/또는 비휘발성 메모리로 구현될 수 있다. 일부 실시 예에서, 프로그램 저장소(1109)는, 적어도 부분적으로, 물리적 실체로서가 아니라 가상으로 구현될 수 있다. 예를 들어, 프로그램 저장소(1109)의 하나 이상의 부분들은 장치(1102) 전체에서 사용되는 임의의 메모리 구현 메커니즘의 가상 인스턴스화로서 구현될 수 있다(예를 들어, 메모리 가상화, 페이징, 매핑 등을 위한 임의의 체계 사용).
연산 네임스페이스(1144)는, 예를 들어, 대응하는 연산 네임스페이스(1144)에 매핑된 하나 이상의 연산 리소스들(1150)에 의해 실행될 수 있는 프로그램(1152)을 저장하는 데 사용될 수 있는 하나 이상의 프로그램 슬롯들을 포함할 수 있다. 예를 들어, 연산 네임스페이스 A는 프로그램들(프로그램 A1, 프로그램 A2, ... 프로그램 An)을 저장할 수 있는 하나 이상의 슬롯들을 포함할 수 있고, 연산 네임스페이스 B는 프로그램들(프로그램 B1, 프로그램 B2, ... 프로그램 Bn)을 저장할 수 있는 하나 이상의 슬롯들을 포함할 수 있다; 이하 등.
일부 실시 예에서, 프로그램(1152)은 화살표(1154)에 도시된 바와 같이 네임스페이스(1144)로 (예를 들어, 애플리케이션, 프로세스, 서비스 등과 같은 네임스페이스의 사용자에 의해) 로드(예컨대, 다운로드)될 수 있다. 연산 네임스페이스(1144)에 로드(예컨대, 다운로드) 및/또는 저장되는 프로그램(1152)은 연산 네임스페이스 프로그램, 네임스페이스 프로그램, 또는 로컬 프로그램이라고 지칭될 수 있다. 일부 실시 예에서, 연산 네임스페이스 프로그램(1152)은 "네임스페이스에 프로그램 로드 명령"(로드_프로그램_투_네임스페이스 명령 또는 로컬 프로그램 로드 명령으로 지칭될 수 있음)으로 지칭되는 명령을 사용하여 다운로드될 수 있다. 일부 실시 예에서, 로컬 프로그램 로드 명령은, 예를 들어, 애플리케이션 프로그래밍 인터페이스(API)를 사용하여 액세스할 수 있다. 일부 실시 예에서, 그러한 API는, 예를 들어, 하나 이상의 NVMe 명령들을 사용하여, 연산 장치들을 위한 프레임워크의 일부로서 구현될 수 있다. 구현 세부 사항에 따라, 연산 네임스페이스가 매핑되는 가상 머신은 연산 네임스페이스로의 프로그램 다운로드를 제어할 수 있다.
일부 실시 예에서, 연산 네임스페이스(1144)는 프로그램 저장소(1109)(화살표(1156)으로 도시됨) 및/또는 네임스페이스(1144)에 로컬로 저장된 하나 이상의 프로그램(1152)(화살표(1158)로 도시됨)으로부터 하나 이상의 프로그램(1107)을 실행하기 위해 하나 이상의 매핑된 연산 리소스들(1150)을 사용할 수 있다. 일부 실시 예에서, 연산 네임스페이스(1144)는 장치 메모리(1106)의 하나 이상의 부분들(예를 들어, 하나 이상의 메모리 네임스페이스(1148)로 구성됨) 및/또는 스토리지 미디어의 하나 이상의 부분들(예를 들어, 장치 기능의 일부로서 구현되고 하나 이상의 스토리지 네임스페이스(1146)로 구성됨)을 사용할 수 있다.
일부 실시 예에서, 연산 네임스페이스 프로그램(1152)은 다운로드 및/또는 저장될 수 있는 연산 네임스페이스로 제한될 수 있는 범위를 가질 수 있다(이러한 범위는 로컬 또는 프라이빗 범위라고 지칭될 수 있다). 일부 실시 예에서, 프로그램 저장소(1109)의 프로그램(1107)은 전체 장치(1102)(디바이스-글로벌 범위로 지칭될 수 있음), 장치(1102)의 서브시스템(예컨대, NVMe 서브시스템)(이는 서브시스템-글로벌 범위로 지칭될 수 있음), 및/또는 장치(1102)의 임의의 기타 부분들로 확장될 수 있는 범위를 가질 수 있다. 따라서, 일부 실시 예에서, 프로그램 저장소(1109) 내의 네이티브 프로그램(1107)은 디바이스-글로벌 범위(디바이스-공용이라고도 지칭될 수 있는), 서브시스템-글로벌 범위(서브시스템-공용이라고도 지칭될 수 있는) 등을 가질 수 있다.
일부 실시 예에서, 하나 이상의 네이티브 프로그램들은 덮어쓰기 및/또는 제거되지 않을 수 있지만, 비활성화 및/또는 사용되지 않을 수 있다. 일부 실시 예에서, 하나 이상의 네이티브 프로그램들은, 예를 들어, 하나 이상의 로드된 글로벌 프로그램들에 의해 덮어쓰기(예컨대, 대체)될 수 있다.
일부 실시 예에서, 활용되기 위해, 하나 이상의 프로그램들(예컨대, 네이티브 프로그램(1107) 및/또는 로컬 프로그램(1152))은 하나 이상의 연산 네임스페이스(1144)와 연관될 수 있다. 예를 들어, 네임스페이스 내의 프로그램(예컨대, 네이티브 프로그램(1107) 및/또는 로컬 프로그램(1152))을 활성화함으로써, 프로그램과 네임스페이스 사이에 연관이 생성될 수 있다. 일부 실시 예에서, 프로그램을 활성화하면, 예를 들어, 호스트와 같은 장치에 의해, 프로그램이 실행되도록 예약되게 할 수 있다.
일부 실시 예에서, 도 11과 관련하여 본 명세서에 설명된 하나 이상의 동작들은, 예를 들어, 통신 인터페이스(1112)를 사용하여 수신 및/또는 컨트롤러(1110)(적어도 부분적으로, NVMe 컨트롤러로서 구현될 수 있음)에 의해 처리될 수 있는 하나 이상의 명령들(예를 들어, NVMe 프레임워크의 맥락에서의 NVMe 명령들 및/또는 NVMe API를 사용하는 것)을 사용하여 구현될 수 있다.
일부 실시 예에서, 연산 프로그램 프레임워크(예컨대, NVMe 프레임워크)는 네임스페이스(1144)에 로드될 수 있는 프로그램(1152)을 타입 검사할 수 있다. 예를 들어, 사용자는 프로그램(1152)을 네임스페이스 D로 로드하려고 시도할 수 있다. 그러나, 프로그램(1152)이 CPU로 동작하도록 의도된 유형임을 나타내는(예를 들어, 광고하는) 경우, 프레임워크는 프로그램(1152)이 네임스페이스 D로 로드되는 것을 금지(예를 들어, 차단)할 수 있는데, 도 11에 도시된 실시 예에서, 네임스페이스 D는 연산 리소스(CR D)에 매핑된 CPU를 가질 수 없고, 따라서, 프로그램(1152)이 연산 리소스(CR D)의 임의의 컴퓨팅 엔진에 의해 지원되지 않을 수 있기 때문이다. 일부 실시 예에서, 하나 이상의 프로그램 타입은 표준 사양에 의해 구현, 정의 등이 될 수 있다.
대조적으로, 일부 실시 예에서, 프로그램 저장소(1109) 내의 하나 이상의 프로그램(1107)은 프로그램 유형을 나타내지 않을 수 있고, 및/또는, 예를 들어, 하나 이상의 프로그램(1107)을 사용하려고 시도할 수 있는 네임스페이스(1144)에 매핑될 수 있는 연산 리소스들(1150)의 유형이 알려지지 않을 수 있으므로, 유형 확인이 이루어지지 않을 수 있다(예를 들어, 프로그램 저장소(1109) 내에 하나 이상의 프로그램(1107)이 배치되는 시점에).
도 12는 본 개시의 예시적인 실시 예에 따라 프로그램 리소스들을 프로그램 저장소에 로딩할 수 있는 연산 장치를 포함하는 시스템의 실시 예를 도시한다. 도 12에 도시된 실시 예는 도 11에 도시된 것과 유사할 수 있는 일부 요소들을 포함할 수 있으며, 유사한 요소들은 유사한 숫자로 끝나는 참조 번호를 가질 수 있다.
도 12를 참조하면, 연산 장치(1202)는 화살표(1260)로 도시된 바와 같이 프로그램 저장소(1209)에 하나 이상의 프로그램(1207a)을 로딩(예컨대, 다운로드)할 수 있는 프로그램 로딩 메커니즘(글로벌 프로그램 로딩 메커니즘으로 지칭될 수 있는)을 구현할 수 있다. 예를 들어, 사용자(예컨대, 호스트, 애플리케이션, 프로세스, 서비스 등)는 "저장소로 프로그램 로드 명령"(글로벌 프로그램 로드 명령 또는 로드_프로그램_투_저장소 명령으로도 지칭될 수 있음)으로 지칭되는 명령을 사용하여 하나 이상의 프로그램(1207a)을 프로그램 저장소(1209)에 로드할 수 있다. 일부 실시 예에서, 글로벌 프로그램 로드 명령은, 예를 들어, API를 사용하여 액세스할 수 있다. 일부 실시 예에서, 그러한 API는, 예를 들어, 하나 이상의 NVMe 명령들을 사용하여, 연산 장치들을 위한 프레임워크의 일부로서 구현될 수 있다.
프로그램 저장소(1209)에 로드된(예를 들어, 다운로드된) 프로그램(1207a)은 로드된 프로그램들(또는 다운로드된 프로그램들 또는 로드된 글로벌 프로그램들)로 지칭될 수 있는 반면, 전술한 제1(내장), 제2(프리로드), 및/또는 제3(다운로드) 예시 기술 중 어느 하나를 사용하여 프로그램 저장소(1209)에 배치되는 프로그램(1207b)은 네이티브 프로그램들(또는 고정 프로그램들 또는 사전 로드된 프로그램들)로 지칭될 수 있다.
일부 실시 예에서, 특정 로드된 글로벌 프로그램(1207a)은 특정 연산 네임스페이스(1244)에 표시되지 않을 수 있는데, 이는 특정 연산 네임스페이스(1244)에 특정 로드된 글로벌 프로그램을 지원하는 컴퓨팅 엔진이 (전술한 바와 같이) 매핑되어 있지 않을 수 있기 때문이다. 예를 들어, ARM CPU 연산 리소스만 포함하는 연산 네임스페이스에서는 FPGA 커널 프로그램이 표시되지 않을 수 있다.
일부 실시 예에서, 그리고 구현 세부 사항에 따라, 본 개시의 예시적인 실시 예에 따른 글로벌 프로그램 로딩 메커니즘은, 예를 들어, 사전 내장 및/또는 사전 로드 기술을 사용하는 것과 유사할 수 있는 하나 이상의 이점들을 제공할 수 있고, 및/또는 전술한 바와 같이 다운로드 기술(예를 들어, 제3 예시 기법)과 관련된 하나 이상의 잠재적 문제들을 감소시키거나 제거할 수 있다.
예를 들어, 글로벌 프로그램 로딩 메커니즘은, 예를 들어, 제조 시 및/또는 펌웨어 업데이트의 일부로서 포함되지 않았을 수 있는(예를 들어, 미리 로드된) 하나 이상의 프로그램들을 보상하기 위해, 프로그램 저장소(1209)로 하나 이상의 프로그램들이 다운로드 되도록 할 수 있다.
다른 예로서, 본 개시의 예시적인 실시 예에 따른 글로벌 프로그램 로딩 메커니즘은 하나 이상의 로딩된 글로벌 프로그램들이 디바이스 글로벌 범위, 서브시스템 글로벌 범위 등에서 액세스될 수 있도록 할 수 있다. 따라서, 구현 세부 사항에 따라, 로딩된 글로벌 프로그램은, 예를 들어, 동일한 장치, 서브시스템 등에서, 하나 이상의 연산 네임스페이스에 의해 액세스될 수 있다.
추가 예로서, 본 개시의 예시적인 실시 예에 따른 글로벌 프로그램 로딩 메커니즘은 하나 이상의 기존 프로그램 구현 기법들을 이용할 수 있다. 예를 들어, 로딩된 글로벌 프로그램은 네이티브 프로그램, 로컬 프로그램 등에 사용되는 활성화 명령과 동일하거나 유사할 수 있는 활성화 명령을 사용하여 활성화될 수 있다.
또 다른 예로서, 본 개시의 예시적인 실시 예에 따른 글로벌 프로그램 로딩 메커니즘을 사용하여 로딩된 로로된 글로벌 프로그램은 타입 검사를 받지 않을 수 있다. 따라서, 일부 실시 예에서, 그리고 구현 세부 사항에 따라, 로드될 수 있는 로드된 글로벌 프로그램(1207a)을 지원할 수 있는 임의의 연산 리소스들(1208)이 임의의 연산 네임스페이스(1244) 내의 연산 리소스들(1250)에 매핑되었는지, 또는 심지어 연산 리소스들(1208)에 존재하는지에 관계없이, 로드된 글로벌 프로그램(1207a)이 (예를 들어, 프로그램 저장소(1209)에) 로딩될 수 있다. 따라서, 구현 세부 사항에 따라, 본 개시의 예시적인 실시 예에 따른 글로벌 프로그램 로딩 메커니즘을 사용하여 로딩된 로드된 글로벌 프로그램은 내장 프로그램 및/또는 사전 로드된 프로그램과 동일하거나 유사한 것으로 보일 수 있다.
게다가, 본 개시의 예시적인 실시 예에 따른 글로벌 프로그램 로딩 메커니즘을 사용하여 로딩된 로드된 글로벌 프로그램은 프로그램 타입을 표시하지 않을 수 있다(예를 들어, 광고). 구현 세부 사항에 따라, 이는 로드된 글로벌 프로그램이 하나 이상의 타입 검사 작업들을 피할 수 있게 할 수도 있다. 이러한 잠재적 이점은, 예를 들어, 사용자 지정 프로그램이 어떻게 구성, 실행되는지 등을 공개하지 않고도 사용자 지정 프로그램을 로드된 글로벌 프로그램으로 로드할 수 있도록 하는 데 특히 유리할 수 있다. 또한, 구현 세부 사항에 따라, 본 개시의 예시적인 실시 예에 따른 글로벌 프로그램 로딩 메커니즘은 장치에 오프로드될 수 있는 더 큰 사용 사례들 및/또는 프로그램들 세트를 활성화 및/또는 지원할 수 있다.
일부 실시 예에서, 그리고 구현 세부 사항에 따라, 본 개시의 예시적인 실시 예에 따른 글로벌 프로그램 로딩 메커니즘을 사용하여 프로그램 저장소(1209)에 로딩된 프로그램은 제1(내장) 및/또는 제2(프리로드) 기법을 사용하여 프로그램 저장소(1209)에 배치된 프로그램과 동일하거나 유사할 수 있는 방식으로 동작할 수 있다. 따라서, 연산 네임스페이스(1244)는 로드된 글로벌 프로그램(1207a)과 네이티브 프로그램(1207b)을 구별할 수 없을 수 있다. 일부 실시예에서, 호스트와 같은 장치는 프로그램 저장소(1209)로부터 하나 이상의 연산 네임스페이스(1244)로 활성화, 매핑 등을 위해 하나 이상의 프로그램들(예를 들어, 로드된 글로벌 프로그램(1207a) 및/또는 네이티브 프로그램(1207b))을 결정할 수 있다.
일부 실시 예에서, 글로벌 프로그램 로딩 메커니즘은 시스템, 디바이스, 서브시스템 등의 레벨에서 리셋을 수반하지 않고 프로그램이 프로그램 저장소(1209)에 로딩될 수 있도록 할 수 있다. 따라서, 구현 세부 사항에 따라, 로드된 글로벌 프로그램(1207a)은 장치(1202) 및/또는 하나 이상의 실행 프로그램들을 대기 상태로 포함하지 않고, 연산 네임스페이스가 할당된 하나 이상의 가상 머신들을 재시작하지 않고, 이전에 다운로드된 하나 이상의 프로그램들을 재로드(예를 들어, 다운로드)하지 않고, 및/또는 진행 중인 하나 이상의 연산들을 완료, 중단 등을 하지 않고, 프로그램 저장소(1209)에 로드될 수 있다.
일부 실시 예에서, 그리고 구현 세부 사항에 따라, 본 개시의 예시적인 실시예에 따른 글로벌 프로그램 로딩 메커니즘은 임의의 수의 다음 특징들을 구현하고/하거나 임의의 수의 다음 이점들을 제공할 수 있다. 프로그램은 프로그램 로드 명령(관리 권한들로 구현될 수 있는)을 사용하여 프로그램 저장소(예컨대, 글로벌 저장소)에 로드(예컨대, 다운로드)될 수 있다. 프로그램 로드 명령은 서브시스템 수준 범위, 장치 수준 범위 등으로 프로그램 저장소에 프로그램을 로드하기 위해 구현될 수 있다. 프로그램 로드 명령은 시스템, 장치 및/또는 서브시스템 수준에서 리셋 없이 구현될 수 있다. 하나 이상의 로드 프로그램 명령들은 호스트, 가상 머신 등에 의해 조정될 수 있다. 프로그램 저장소의 내용들은, 예를 들어, 로그 페이지 명령을 사용하여 검색될 수 있다. 로드된 프로그램은, 예를 들어, 연산 네임스페이스에서 활성화된 것을 기반으로 연산 네임스페이스에서 인스턴스화될 수 있다. 프로그램 저장소에 로드된 프로그램은, 구현 세부 사항에 따라, 유형 검사를 피하기 위해 프로그래밍할 수 있는 내장 프로그램 및/또는 사전 로드된 프로그램과 동일하거나 유사하게 보일 수 있다. 프로그램 저장소에 프로그램을 로드하고, 프로그램 저장소의 내용들을 검색하고, 프로그램을 활성화하는 등의 하나 이상의 명령들은 호스트, 애플리케이션, 프로세스, 서비스 등에 대한 API를 사용하여 구현될 수 있다. 본 명세서에 개시된 임의의 수의 기능들 및/또는 이점들은 연산 스토리지 장치의 맥락에서 구현될 수 있다.
예를 들어, 호스트, 장치 등에서 구현되는 임의의 컨트롤러, 검색 로직, 관리 로직 또는 임의의 다른 기능을 포함하여, 본 명세서에 개시된 임의의 기능은 임의의 유형의 메모리, 또는 이들의 임의의 조합에 저장된 명령들을 실행하는 하드웨어, 소프트웨어, 펌웨어, 또는 조합 로직, 순차 로직, 하나 이상의 타이머, 카운터, 레지스터 및/또는 상태 머신, 하나 이상의 복잡한 프로그래머블 로직 디바이스 CPLD, FPGA, ASIC, CPU, GPU, NPU, TPU 등을 포함하는 이들의 임의의 조합으로 구현될 수 있다. 일부 실시 예에서, 하나 이상의 구성 요소들은 시스템-온-칩(SOC)으로 구현될 수 있다. 일부 실시 예에서, 그리고 문맥에 따라, 로직, 회로, 디바이스 등의 용어들이 상호 교환적으로 사용될 수 있다.
도 13은 본 개시의 예시적인 실시 예에 따른 호스트 장치의 예시적인 실시 예를 도시한다. 도 13에 도시된 호스트 장치는, 예를 들어, 본 명세서에 개시된 임의의 호스트들을 구현하기 위해 사용될 수 있다. 도 13에 도시된 호스트 장치(1300)는 프로세서(1302)를 포함할 수 있으며, 프로세서(1302)는 메모리 컨트롤러(1304), 시스템 메모리(1306), 호스트 로직(1308), 및/또는 통신 인터페이스(1310)를 포함할 수 있다. 도 13에 도시된 구성 요소들의 일부 또는 전부는 하나 이상의 시스템 버스(1312)를 통해 통신할 수 있다. 일부 실시 예에서, 도 13에 도시된 구성 요소들 중 하나 이상은 다른 구성 요소들을 사용하여 구현될 수 있다. 예를 들어, 일부 실시 예에서, 호스트 제어 로직(1308)은 시스템 메모리(1306) 또는 다른 메모리에 저장된 명령어들을 실행하는 프로세서(1302)에 의해 구현될 수 있다. 일부 실시 예에서, 호스트 로직(1308)은, 예를 들어, 애플리케이션을 실행하고, 장치에 명령들을 전송 및/또는 장치로부터 응답들을 수신하고, 그리고 본 명세서에 개시된 장치 기능의 호스트(1300) 및/또는 장치에서 실행되는 애플리케이션을 이용하는 것을 포함하여, 본 명세서에 개시된 임의의 호스트 기능을 구현할 수 있다.
도 14는 본 개시의 예시적인 실시 예에 따른 장치의 예시적인 실시 예를 도시한다. 도 14에 도시된 실시 예(1400)는, 예를 들어, 본 명세서에 개시된 임의의 장치들을 구현하기 위해 사용될 수 있다. 장치(1400)는 장치 컨트롤러(1402), 하나 이상의 연산 리소스들(1408), 장치 로직(1416), 장치 기능 회로(1406), 및 통신 인터페이스(1410)를 포함할 수 있다. 도 14에 도시된 구성 요소들은 하나 이상의 장치 버스(1412)를 통해 통신할 수 있다. 장치 로직(1416)은, 예를 들어, 본 명세서에 개시된 검색 로직, 관리 로직, 프로그램 다운로드 메커니즘 등 중 임의의 것을 구현하기 위해 사용될 수 있다.
장치 기능 회로(1406)는 장치(1400)의 주요 기능을 구현하기 위한 임의의 하드웨어를 포함할 수 있다. 예를 들어, 장치(1400)가 스토리지 장치로 구현되는 경우, 장치 기능 회로(1406)는 하나 이상의 플래시 메모리 장치들, FTL 등과 같은 스토리지 매체를 포함할 수 있다. 다른 예로서, 장치(1400)가 네트워크 인터페이스 카드(NIC)로 구현되는 경우, 장치 기능 회로(1406)는 하나 이상의 모뎀들, 네트워크 인터페이스들, 물리 계층들(PHYs), 매체 액세스 제어 계층들(MACs) 등을 포함할 수 있다. 추가 예로서, 장치(1400)가 가속기로 구현되는 경우, 장치 기능 회로(1406)는 하나 이상의 가속기 회로들, 메모리 회로들 등을 포함할 수 있다.
도 15는 본 개시의 예시적인 실시 예에 따른 장치 메모리 정보를 제공하는 방법의 실시 예를 도시한다. 방법은 동작(1502)에서 시작될 수 있다. 동작(1504)에서, 방법은, 장치에서, 정보 요청을 수신할 수 있으며, 여기서 장치는 장치 메모리 및 장치 기능 회로를 포함할 수 있다. 예를 들어, 장치 기능 회로는 도 3, 도 8, 및/또는 도 9와 관련하여 전술한 바와 같이 장치를 연산 장치, 스토리지 장치, 통신 장치 등으로서 구현하는 장치를 포함할 수 있다. 동작(1506)에서, 방법은, 요청에 기초하여 정보를 제공할 수 있으며, 여기서 정보는 도 3, 도 8, 및/또는 도 9와 관련하여 전술한 바와 같이 장치 기능 회로의 적어도 일부가 장치 메모리의 적어도 일부에 액세스하는 것이 가능하다는 것을 나타낼 수 있다. 예를 들어, 정보는 도 9와 관련하여 전술한 바와 같이 FPGA가 FPGA 내의 메모리 및/또는 FPGA 외부의 메모리에 액세스하는 것이 가능할 수 있음을 나타낼 수 있다. 방법은 동작(1508)에서 종료될 수 있다.
도 16은 본 개시의 예시적인 실시 예에 따른 장치 메모리를 구성하는 방법의 실시 예를 도시한다. 방법은 동작(1602)에서 시작될 수 있다. 동작(1604)에서, 방법은, 장치에서 적어도 하나의 요청을 수신할 수 있으며, 여기서 장치는 장치 메모리 및 장치 기능 회로를 포함할 수 있다. 예를 들어, 장치 기능 회로는 도 3, 도 8, 및/또는 도 9와 관련하여 전술한 바와 같이 장치를 연산 장치, 스토리지 장치, 통신 장치 등으로 구현하기 위한 장치를 포함할 수 있다. 동작(1606)에서, 방법은, 적어도 하나의 요청에 기초하여, 구성 동작을 수행할 수 있으며, 여기서 구성 동작은 장치 기능 회로의 적어도 일부에 의해 액세스되도록 장치 메모리의 적어도 일부를 구성하는 것을 포함할 수 있다. 예를 들어, 장치는 구성 정보(예를 들어, 호스트와 같은 장치로부터)를 수신하고, 도 5와 관련하여 전술한 바와 같이 구성 정보를 CPU의 메모리 컨트롤러에 제공함으로써 CPU에 의해 액세스되도록 장치 메모리의 일부를 구성할 수 있다. 방법은 동작(1608)에서 종료될 수 있다.
도 17은 본 개시의 예시적인 실시 예에 따른 장치에 프로그램 리소스들을 로딩하는 방법의 실시 예를 도시한다. 방법은 동작(1702)에서 시작될 수 있다. 동작(1704)에서, 방법은, 장치에서 프로그램을 수신할 수 있으며, 여기서 장치는 적어도 하나의 연산 리소스를 포함할 수 있다. 예를 들어, 장치는 프로그램 저장소(1209)에서 로드된 프로그램(1207a)을 수신할 수 있고, 그리고 장치는 도 12에 도시된 적어도 하나의 연산 리소스(1208)를 포함할 수 있다. 동작(1706)에서, 방법은 적어도 하나의 연산 리소스의 제1 연산 네임스페이스와 프로그램을 연관시킬 수 있고, 동작(1708)에서, 방법은 적어도 하나의 연산 리소스의 제2 연산 네임스페이스와 프로그램을 연관시킬 수 있다. 예를 들어, 제1 및 제2 네임스페이스(1244)는 도 12에 도시된 바와 같이, 로드된 프로그램(1207a)을 제1 및 제2 네임스페이스(1244)로 활성화함으로써 로드된 프로그램(1207a)과 연관될 수 있다. 방법은 동작(1708)에서 종료될 수 있다.
도 13, 도 14, 도 15, 도 16, 및/또는 도 17에 도시된 실시 예들 및/또는 본 명세서에 설명된 다른 모든 실시 예들은 예시적인 동작들 및/또는 구성 요소들이다. 일부 실시 예에서, 일부 동작들 및/또는 구성 요소들은 생략될 수 있고/또는 다른 연산 및/또는 구성 요소가 포함될 수 있다. 또한, 일부 실시 예에서, 연산 및/또는 구성 요소의 시간적 및/또는 공간적 순서는 다양할 수 있다. 일부 구성 요소 및/또는 연산은 개별 구성 요소로 도시될 수 있지만, 일부 실시 예에서, 개별적으로 도시된 일부 구성 요소 및/또는 연산은 단일 구성 요소 및/또는 연산으로 통합될 수 있고, 및/또는 단일 구성 요소 및/또는 연산으로 도시된 일부 구성 요소 및/또는 연산은 복수의 구성 요소 및/또는 연산으로 구현될 수 있다.
특정 애플리케이션에 한정되지는 않지만, 본 명세서에 개시된 장치 메모리 및/또는 프로그램의 관리와 관련된 발명 원리는, 예를 들어, NVMe로 구현될 수 있는 컴퓨팅 스토리지와 함께 사용될 때 특히 유용할 수 있다. 장치 내에서 사용 가능한 컴퓨팅 리소스를 추가하면, 하나 이상의 컴퓨팅 작업들이 하나 이상의 계산에 사용되는 데이터가 상주할 수 있는 장치로 호스트에서 오프로드될 수 있다. 구현 세부 사항에 따라, 본 개시의 예시적인 실시 예에 따른 장치는, 예를 들어, 저장 매체 또는 네트워크 리소스로부터 호스트 메모리로 데이터를 페치한 다음, CPU가 페치된 데이터에 대한 컴퓨팅 연산(예를 들어, 바이러스 감염이 유행할 수 있는 짚 코드들의 수를 찾는 것)을 실행할 수 있는 모델보다 하나 이상의 이점들을 제공할 수 있다. 이러한 방법은, 예를 들어, 데이터가 패브릭(예: 직접 연결된 PCIe 버스 및/또는 지연 시간을 증가시킬 수 있는 네트워크 패브릭)을 통해 전송될 수 있기 때문에 이러한 방식이 될 수 있다. 또한, 이러한 배열이 여러 개 사용되는 경우, 예를 들어, 버스가 하나 이상의 장치들(예: NVMe 장치들)이 제공하는 총 성능을 활용하지 못할 수 있기 때문에, 장치당 총 처리량이 단일 장치보다 낮을 수 있다. 본 개시의 예시적인 실시 예에 따른 컴퓨팅 스토리지는 하나 이상의 컴퓨팅 동작들이 스토리지에서 또는 스토리지 근처에서 수행되도록 할 수 있으며, 이는 구현 세부 사항에 따라, 전송 대기 시간을 감소시킬 수 있다. 게다가, 일부 사용 사례에서는 상당히 클 수 있는 소스 데이터와는 반대로 결과만 복사될 수 있다. 본 개시의 발명 원리들은, 예를 들어, 임베디드 CPU, 전용 ASIC, FPGA, GPU 등으로 연산 리소스들을 구현할 수 있는 연산 스토리지 장치와 함께 사용될 때, 하나 이상의 이점들을 제공할 수 있다.
상기에 개시된 일부 실시 예은 다양한 구현 세부 사항의 맥락에서 설명되었지만, 본 개시의 원리들은 이들 또는 임의의 다른 특정 세부 사항으로 제한되지 않는다. 예를 들어, 일부 기능은 특정 컴포넌트에 의해 구현되는 것으로 설명되었지만, 다른 실시 예에서, 그 기능은 서로 다른 위치의 서로 다른 시스템 및 컴포넌트들 사이에 분산될 수 있고 다양한 사용자 인터페이스를 가질 수 있다. 특정 실시 예들은 특정 프로세스, 동작 등을 갖는 것으로 설명되었지만, 이러한 용어들은 특정 프로세스, 동작 등이 복수의 프로세스, 동작 등으로 구현될 수 있거나 복수의 프로세스, 동작 등이 단일 프로세스, 단계 등으로 통합될 수 있는 실시 예들도 포함한다. 구성 요소 또는 요소에 대한 참조는 구성 요소 또는 요소의 일부만 참조할 수 있다. 예를 들어, 블록에 대한 참조는 전체 블록 또는 하나 이상의 하위 블록들을 참조할 수 있다. 본 개시 및 청구범위에서 "제1" 및 "제2"와 같은 용어의 사용은 수정하는 요소를 구별하기 위한 목적으로만 사용될 수 있으며, 문맥에서 달리 명백하지 않은 한 공간적 또는 시간적 순서를 나타내지 않을 수 있다. 일부 실시 예에서, 요소에 대한 참조는 요소의 적어도 일부를 참조할 수 있으며, 예를 들어, "기반"은 "적어도 일부에 기반" 등을 참조할 수 있다. 제1 요소에 대한 참조가 제2 요소의 존재를 암시하지 않을 수 있다. 본 명세서에 개시된 원리들은 독립적인 유용성을 가지며 개별적으로 구현될 수 있으며, 모든 실시 예가 모든 원리를 활용할 수 있는 것은 아니다. 그러나, 원리들은 다양한 조합으로 구현될 수 있으며, 그 중 일부는 시너지 방식으로 개별 원칙들의 이점을 증폭시킬 수 있다. 위에서 설명한 다양한 세부 사항 및 실시 예는 본 특허 개시의 발명 원리에 따라 추가적인 실시 예를 생성하기 위해 결합될 수 있다.
본 특허 개시의 발명의 원리들은 발명의 개념을 벗어나지 않고 배열 및 세부 사항이 변경될 수 있으므로, 그러한 변경 및 수정은 다음 청구항의 범위 내에 속하는 것으로 간주된다.

Claims (20)

  1. 장치 메모리;
    적어도 일부가 상기 장치 메모리의 적어도 일부에 액세스할 수 있는 장치 기능 회로; 및
    정보를 제공하도록 구성된 제어 회로를 포함하되,
    상기 정보는 상기 장치 기능 회로의 상기 적어도 일부가 상기 장치 메모리의 상기 적어도 일부에 액세스할 수 있음을 나타내는 장치.
  2. 제 1 항에 있어서,
    상기 정보는 상기 장치 메모리의 상기 적어도 일부의 특성을 더 나타내는 장치.
  3. 제 1 항에 있어서,
    통신 인터페이스를 더 포함하되,
    상기 제어 회로는 상기 통신 인터페이스를 사용하여 상기 정보를 제공하도록 구성되는 장치.
  4. 제 3 항에 있어서,
    상기 제어 회로는:
    상기 통신 인터페이스를 사용하여 요청을 수신하고, 그리고
    상기 요청에 기반하여 상기 정보를 제공하도록 구성되는 장치.
  5. 제 1 항에 있어서,
    상기 장치 메모리의 부분은 상기 장치 메모리의 제1 부분이고, 그리고
    상기 정보는 상기 장치 기능 회로의 상기 적어도 일부가 상기 장치 메모리의 제2 부분에 액세스할 수 있음을 나타내는 장치.
  6. 제 1 항에 있어서,
    상기 장치 기능 회로의 부분은 상기 장치 기능 회로의 제1 부분이고, 그리고
    상기 정보는 상기 장치 기능 회로의 제2 부분이 상기 장치 메모리의 상기 적어도 일부에 액세스할 수 있음을 나타내는 장치.
  7. 제 1 항에 있어서,
    상기 장치 기능 회로의 상기 적어도 일부의 제1 부분은 제1 네임스페이스로 구성되고, 그리고
    상기 장치 메모리의 상기 적어도 일부의 제2 부분은 제2 네임스페이스로 구성되는 장치.
  8. 장치 메모리;
    적어도 일부가 상기 장치 메모리의 적어도 일부에 액세스할 수 있는 장치 기능 회로; 및
    제어 회로를 포함하되,
    상기 제어 회로는:
    적어도 하나의 요청을 수신하고, 그리고
    상기 적어도 하나의 요청에 기반하여, 구성 동작을 수행하도록 구성되고,
    상기 구성 동작은 상기 장치 기능 회로의 상기 적어도 일부에 의해 액세스되도록 상기 장치 메모리의 적어도 일부를 구성하는 것을 포함하는 장치.
  9. 제 8 항에 있어서,
    상기 구성 동작은:
    구성 정보를 수신하고, 그리고
    상기 장치 기능 회로의 상기 적어도 일부와 연관된 메모리 제어 장치에 구성 정보를 제공하는 것을 포함하는 장치.
  10. 제 8 항에 있어서,
    상기 구성 동작은 상기 장치 메모리의 상기 적어도 일부를 상기 장치 기능 회로의 상기 적어도 일부에 할당하는 것을 포함하는 장치.
  11. 제 8 항에 있어서,
    통신 인터페이스를 더 포함하되,
    상기 제어 회로는 상기 통신 인터페이스를 사용하여 상기 요청을 수신하도록 구성되는 장치.
  12. 제 8 항에 있어서,
    상기 장치 메모리의 부분은 상기 장치 메모리의 제1 부분이고, 그리고
    상기 제어 회로는, 상기 적어도 하나의 요청에 기반하여, 상기 장치 기능 회로의 상기 적어도 일부에 의해 액세스되도록 상기 장치 메모리의 제2 부분을 구성하도록 구성되는 장치.
  13. 제 8 항에 있어서,
    상기 장치 기능 회로의 부분은 상기 장치 기능 회로의 제1 부분이고, 그리고
    상기 제어 회로는, 상기 적어도 하나의 요청에 기반하여, 상기 장치 기능 회로의 제2 부분에 의해 액세스되도록 상기 장치 메모리의 상기 적어도 일부를 구성하도록 구성되는 장치.
  14. 제 8 항에 있어서,
    상기 장치 기능 회로의 상기 적어도 일부의 제1 부분은 제1 네임스페이스로 구성되고, 그리고
    상기 장치 메모리의 상기 적어도 일부의 제2 부분은 제2 네임스페이스로 구성되는 장치.
  15. 제 8 항에 있어서,
    상기 장치 기능 회로의 부분은:
    컴퓨팅 엔진; 및
    상기 컴퓨팅 엔진을 사용하도록 구성된 프로그램을 포함하는 장치.
  16. 적어도 하나의 연산 리소스; 및
    제어 회로를 포함하되,
    상기 제어 회로는:
    프로그램을 수신하고,
    상기 적어도 하나의 연산 리소스의 제1 연산 네임스페이스를 상기 프로그램과 연관시키고, 그리고
    상기 적어도 하나의 연산 리소스의 제2 연산 네임스페이스를 상기 프로그램과 연관시키는 장치.
  17. 제 16 항에 있어서,
    통신 인터페이스를 더 포함하되,
    상기 제어 회로는 상기 통신 인터페이스를 사용하여 상기 프로그램을 수신하도록 구성된 장치.
  18. 제 17 항에 있어서,
    상기 제어 회로는, 상기 통신 인터페이스를 사용하여, 상기 프로그램에 대한 정보를 제공하도록 구성되는 장치.
  19. 제 16 항에 있어서,
    상기 제어 회로는:
    상기 적어도 하나의 연산 리소스의 적어도 제1 부분을 상기 제1 연산 네임스페이스로 구성하고, 그리고
    상기 적어도 하나의 연산 리소스의 적어도 제2 부분을 상기 제2 연산 네임스페이스로 구성하는 장치.
  20. 제 16 항에 있어서,
    상기 제어 회로는:
    명령을 수신하고, 그리고
    상기 명령에 기반하여 상기 프로그램을 수신하도록 구성되는 장치.
KR1020230058485A 2022-05-08 2023-05-04 장치 메모리 및 프로그램들을 관리하기 위한 시스템들, 방법들, 및 장치 KR20230156890A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202263339506P 2022-05-08 2022-05-08
US63/339,506 2022-05-08
US18/141,362 US20230359376A1 (en) 2022-05-08 2023-04-28 Systems, methods, and apparatus for managing device memory and programs
US18/141,362 2023-04-28

Publications (1)

Publication Number Publication Date
KR20230156890A true KR20230156890A (ko) 2023-11-15

Family

ID=86330364

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020230058485A KR20230156890A (ko) 2022-05-08 2023-05-04 장치 메모리 및 프로그램들을 관리하기 위한 시스템들, 방법들, 및 장치

Country Status (4)

Country Link
US (1) US20230359376A1 (ko)
EP (1) EP4276641A1 (ko)
KR (1) KR20230156890A (ko)
TW (1) TW202344978A (ko)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB201814918D0 (en) * 2018-09-13 2018-10-31 Blancco Tech Group Ip Oy Method and apparatus for use in sanitizing a network of non-volatile memory express devices
US11200082B2 (en) * 2019-10-31 2021-12-14 EMC IP Holding Company LLC Data storage system employing dummy namespaces for discovery of NVMe namespace groups as protocol endpoints
US11163716B2 (en) * 2020-03-16 2021-11-02 Dell Products L.P. Discovery controller registration of non-volatile memory express (NVMe) elements in an NVMe-over-fabrics (NVMe-oF) system

Also Published As

Publication number Publication date
TW202344978A (zh) 2023-11-16
EP4276641A1 (en) 2023-11-15
US20230359376A1 (en) 2023-11-09

Similar Documents

Publication Publication Date Title
US11797181B2 (en) Hardware accessible external memory
US11487675B1 (en) Collecting statistics for persistent memory
CN107077303B (zh) 分配和配置持久存储器
US10564872B2 (en) System and method for dynamic allocation to a host of memory device controller memory resources
US20200371700A1 (en) Coordinated allocation of external memory
JP6496626B2 (ja) 異種統合メモリ部及びその拡張統合メモリスペース管理方法
US11061591B2 (en) Storage device processing stream data, system including the same, and operation method thereof
US20100083247A1 (en) System And Method Of Providing Multiple Virtual Machines With Shared Access To Non-Volatile Solid-State Memory Using RDMA
US20160283127A1 (en) Fork-safe memory allocation from memory-mapped files with anonymous memory behavior
US10114763B2 (en) Fork-safe memory allocation from memory-mapped files with anonymous memory behavior
TWI696188B (zh) 混合式記憶體系統
CN110825320A (zh) 虚拟化固态存储介质的隔离区域
US20220164299A1 (en) Peer storage devices sharing host control data
KR20230156890A (ko) 장치 메모리 및 프로그램들을 관리하기 위한 시스템들, 방법들, 및 장치
CN117032555A (zh) 用于管理设备存储器和程序的系统、方法和装置
EP4120087B1 (en) Systems, methods, and devices for utilization aware memory allocation
US20230315316A1 (en) Reading a master boot record for a namespace after reformatting the namespace
US20230342049A1 (en) Reading a master boot record for a namespace using a regular read operation
US11835992B2 (en) Hybrid memory system interface