KR102321913B1 - 불휘발성 메모리 장치, 및 그것을 포함하는 메모리 시스템 - Google Patents
불휘발성 메모리 장치, 및 그것을 포함하는 메모리 시스템 Download PDFInfo
- Publication number
- KR102321913B1 KR102321913B1 KR1020160029639A KR20160029639A KR102321913B1 KR 102321913 B1 KR102321913 B1 KR 102321913B1 KR 1020160029639 A KR1020160029639 A KR 1020160029639A KR 20160029639 A KR20160029639 A KR 20160029639A KR 102321913 B1 KR102321913 B1 KR 102321913B1
- Authority
- KR
- South Korea
- Prior art keywords
- registers
- pair
- stride
- user space
- processor
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing 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/0868—Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0877—Cache access modes
- G06F12/0882—Page mode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
- G06F13/4063—Device-to-bus coupling
- G06F13/4068—Electrical coupling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1041—Resource optimization
- G06F2212/1044—Space efficiency improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/20—Employing a main memory using a specific memory technology
- G06F2212/202—Non-volatile memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7203—Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Human Computer Interaction (AREA)
Abstract
메모리 시스템은 프로세서-로컬 버스(processor-local bus)로 연결되는 프로세서를 포함하되, 프로세서는, 프로세서-로컬 버스를 통해 프로세서와 연결되는 장치로부터 스트라이드 파라미터(stride parameter)를 읽고, 스트라이드 파라미터를 기반으로, 장치와 관련된 레지스터들을 가상 메모리로 매핑하고, 그리고 스트라이드 파라미터에 응답하여, 레지스터들 중 적어도 하나를 사용자 공간 가상 메모리로 매핑하고, 스트라이드 파라미터는 장치와 관련된 레지스터들 사이의 스트라이드를 나타내도록 구성된다.
Description
본 발명은 사용자 공간으로 큐들(queues)을 확장하는 것에 관한 것으로, 좀 더 구체적으로, 사용자 공간으로 불휘발성 메모리 익스프레스(Non-Volatile Memory Express, 이하, NVMe) 큐들을 확장하는 것에 관한 것이다.
불휘발성 메모리 장치는 복수의 링 버퍼들(ring buffers) 또는 큐들을 실행시킬 수 있다. 이러한 큐들은 소프트웨어의 장치 드라이버들에 의해 관리될 수 있다. 큐들은 도어벨 레지스터들(doorbell registers)과 관련될 수 있고, 도어벨 레지스터들은 큐들로 접근하기 위해 이용될 수 있다. 큐들로 접근하기 위해서, 불휘발성 메모리 장치들은 파일 시스템 계층들, 블록 계층들 또는 그것들과 같은 커널 소프트웨어(kernel software) 계층들을 통과할 수 있다.
본 발명의 목적은 사용자 공간으로 큐들을 확장하는 불휘발성 메모리 장치, 및 그것을 포함하는 시스템에 관한 것이다.
본 발명의 실시 예에 따른 메모리 시스템은 프로세서-로컬 버스(processor-local bus)로 연결되는 프로세서를 포함하되, 프로세서는, 프로세서-로컬 버스를 통해 프로세서와 연결되는 장치로부터 스트라이드 파라미터(stride parameter)를 읽고, 스트라이드 파라미터를 기반으로, 장치와 관련된 레지스터들을 가상 메모리로 매핑하고, 그리고 스트라이드 파라미터에 응답하여, 레지스터들 중 적어도 하나를 사용자 공간 가상 메모리로 매핑하고, 스트라이드 파라미터는 장치와 관련된 레지스터들 사이의 스트라이드를 나타내도록 구성된다.
몇몇 실시 예로서, 프로세서-로컬 버스는 PCI 익스프레스(Peripheral component interconnect Express, PCIe) 버스이고, 장치는 NVMe(Non-Volatile Memory Express) 장치이고, 레지스터들은 NVMe 장치의 큐들(queues)과 관련된 도어벨 레지스터들(doorbell registers)이다.
몇몇 실시 예로서, 스트라이드 파라미터는 레지스터들 중 적어도 하나의 레지스터가 커널(kernel) 공간 가상 메모리로 매핑되도록 설정된다.
몇몇 실시 예로서, 프로세서는 복수의 프로세싱 엔티티(processing entities)를 포함하고, 프로세서는 제1 개수의 세트들의 레지스터들을 제2 개수의 프로세싱 엔티티들 보다 많은 가상 메모리로 매핑하도록 더 구성된다.
몇몇 실시 예로서, 스트라이드 파라미터는 가상 메모리로 매핑된 레지스터들 사이의 스트라이드가 가상 메모리 페이지 사이즈 이상이 되도록 설정된다.
몇몇 실시 예로서, 스트라이드 파라미터는 가상 메모리로 매핑된 레지스터들 사이의 스트라이드가 레지스터들의 사이즈보다 크도록 설정된다.
몇몇 실시 예로서, 스트라이드 파라미터는 가상 메모리로 매핑된 레지스터들 사이의 스트라이드가 가상 메모리 페이지 사이즈보다 작도록 설정된다.
몇몇 실시 예로서, 스트라이드 파라미터는 레지스터들 중 적어도 두 개의 레지스터들이 단일 가상 메모리 페이지로 매핑되도록 설정된다.
몇몇 실시 예로서, 프로세서는 가상 머신(virtual machine)을 제공하도록 더 구성되고, 레지스터들 중 적어도 하나의 레지스터는 가상 머신과 관련된 가상 메모리로 매핑된다.
몇몇 실시 예로서, 프로세서는, 사용자 공간 가상 메모리로 매핑된 레지스터들 중 적어도 하나의 적어도 하나가 커널 계층들의 개입 없이 사용자 공간 어플리케이션에 의해 접근되도록, 레지스터들을 가상 메모리로 매핑하도록 더 구성된다.
본 발명의 실시 예에 따른 메모리 시스템을 동작시키기 위한 방법은 프로세서-로컬 버스(processor-local bus)와 연결되는 장치로부터 스트라이드 파라미터(stride parameter)를 읽는 단계 및 스트라이드 파라미터를 기반으로, 장치의 레지스터들을 가상 메모리로 매핑하는 단계를 포함하되, 스트라이드 파라미터는 레지스터들 사이의 스트라이드를 나타내고, 레지스터들 중 적어도 하나의 레지스터가 사용자 공간 가상 메모리로 매핑되도록 설정된다.
몇몇 실시 예로서, 레지스터들을 매핑하는 단계는 레지스터들을 프로세싱 엔티티들(processing entities)보다 많은 가상 메모리로 매핑하는 단계를 포함한다.
몇몇 실시 예로서, 레지스터들을 매핑하는 단계는 가상 메모리의 레지스터들 사이의 스트라이드가 가상 메모리 페이지 사이즈 이상이 되도록 레지스터들을 매핑하는 단계를 포함한다.
몇몇 실시 예로서, 레지스터들을 매핑하는 단계는 레지스터들 중 적어도 두 개의 레지스터들이 단일 가상 메모리 페이지에 매핑되도록 레지스터들을 매핑하는 단계를 포함한다.
몇몇 실시 예로서, 가상 머신(virtual machine)을 발생시키는 단계를 더 포함하되, 레지스터들을 매핑하는 단계는 레지스터들 중 적어도 하나의 레지스터를 가상 머신과 관련된 가상 메모리로 매핑하는 단계를 포함한다.
본 발명의 실시 예에 따른 불휘발성 메모리 장치는 데이터를 저장하기 위한 메모리, 메모리와 관련된 복수의 메모리 매핑 레지스터(memory mappable registers), 및 복수의 메모리 매핑 레지스터의 스트라이드(stride)를 나타내는 스트라이드 파라미터(stride parameter)를 저장하기 위한 스트라이드 레지스터(stride register)를 포함하되, 스트라이드 파라미터는 복수의 메모리 매핑 레지스터를 분할함으로써 얻어지는 크기가 0보다 크도록 설정된다.
몇몇 실시 예로서, 불휘발성 메모리 장치는 NVMe(Non-Volatile Memory Express) 장치이고, 복수의 메모리 매핑 레지스터는 도어벨 레지스터들(doorbell registers)이다.
몇몇 실시 예로서, 스트라이드 파라미터는 레지스터들 사이의 스트라이드가 가상 메모리 페이지 사이즈 이상이 되도록 설정된다.
몇몇 실시 예로서, 스트라이드 파라미터는 레지스터들 사이의 스트라이드가 레지스터들의 사이즈보다 크도록 설정된다.
몇몇 실시 예로서, 스트라이드 파라미터는 레지스터들 사이의 스트라이드가 가상 메모리 페이지 사이즈보다 작도록 설정된다.
본 발명의 실시 예에 따르면, 불휘발성 메모리 장치는 효율이 증가하고, 속도가 향상될 수 있다.
도 1은 본 발명의 실시 예에 따른 장치를 보여주기 위한 블록도이다.
도 2는 본 발명의 실시 예에 따른 불휘발성 메모리 장치를 보여주기 위한 블록도이다.
도 3은 본 발명의 실시 예에 따른 시스템을 보여주기 위한 블록도이다.
도 4 및 도 5는 본 발명의 실시 예에 따른 가상 메모리 페이지들에 매핑된 레지스터들을 보여주기 위한 블록도이다.
도 6은 본 발명의 실시 예에 따른 시스템을 보여주기 위한 블록도이다.
도 7은 본 발명의 실시 예에 따른 시스템을 보여주기 위한 블록도이다.
도 8은 본 발명의 실시 예에 따른 시스템을 보여주기 위한 블록도이다.
도 9는 본 발명의 실시 예에 따른 서버를 보여주기 위한 블록도이다.
도 10은 본 발명의 실시 예에 따른 서버 시스템을 보여주기 위한 블록도이다.
도 11은 본 발명의 실시 예에 따른 데이터 센터를 보여주기 위한 블록도이다.
도 2는 본 발명의 실시 예에 따른 불휘발성 메모리 장치를 보여주기 위한 블록도이다.
도 3은 본 발명의 실시 예에 따른 시스템을 보여주기 위한 블록도이다.
도 4 및 도 5는 본 발명의 실시 예에 따른 가상 메모리 페이지들에 매핑된 레지스터들을 보여주기 위한 블록도이다.
도 6은 본 발명의 실시 예에 따른 시스템을 보여주기 위한 블록도이다.
도 7은 본 발명의 실시 예에 따른 시스템을 보여주기 위한 블록도이다.
도 8은 본 발명의 실시 예에 따른 시스템을 보여주기 위한 블록도이다.
도 9는 본 발명의 실시 예에 따른 서버를 보여주기 위한 블록도이다.
도 10은 본 발명의 실시 예에 따른 서버 시스템을 보여주기 위한 블록도이다.
도 11은 본 발명의 실시 예에 따른 데이터 센터를 보여주기 위한 블록도이다.
이하, 도면들을 참조하여 본 발명의 실시 예들을 보다 상세하게 설명하기로 한다. 본 발명은 다양한 변경을 가할 수 있고 여러 가지 형태를 가질 수 있는 바, 특정 실시 예들을 도면에 예시하고 본문에 상세하게 설명하고자 한다. 그러나, 이는 본 발명을 특정한 개시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
각 도면을 설명하면서 유사한 참조부호를 유사한 구성요소에 대해 사용하였다. 첨부된 도면에 있어서, 구성 요소들의 크기는 본 발명의 명확성을 기하기 위하여 실제보다 확대하여 도시한 것이다.
제1, 제2 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 구성요소들은 용어들에 의해 한정되어서는 안 된다. 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 본 발명의 권리 범위를 벗어나지 않으면서 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소도 제1 구성요소로 명명될 수 있다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다.
본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 명세서 상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다. 또한, 층, 막, 영역, 판 등의 부분이 다른 부분 “위에” 있다고 할 경우, 이는 다른 부분 “바로 위에” 있는 경우뿐만 아니라 그 중간에 또 다른 부분이 있는 경우도 포함한다. 반대로 층, 막, 영역, 판 등의 부분이 다른 부분 “아래에” 있다고 할 경우, 이는 다른 부분 “바로 아래에” 있는 경우뿐만 아니라 그 중간에 또 다른 부분이 있는 경우도 포함한다.
도 1은 본 발명의 실시 예에 따른 장치를 보여주기 위한 블록도이다. 실시 예로서, 장치(100)는 인터페이스(102), 메모리(104) 및 스트라이드 파라미터(stride parameter)(108)를 포함할 수 있다.
인터페이스(102)는, 장치(100)가 액세스될 수 있는, 하드웨어, 컨트롤러들, 펌웨어(firmware), 소프트웨어, 또는 그것과 같은 것을 포함할 할 수 있다. 예를 들어, 인터페이스(102)는 PCI(Peripheral Component Interconnect) 버스에 대한 인터페이스, 또는 관련 장치들에 액세스(access)하기 위한 프로세서에 의해 사용 가능한 다른 버스를 포함할 수 있다. 몇몇 실시 예들로서, 프로세서 로컬 버스(processor local bus)는 프로세서와 직접 연결될 수 있다. 하지만, 다른 실시 예로서, 중간 스위치(intervening switch), 허브(hub), 또는 그 밖의 유사한 것은 프로세서 및 버스 사이에 구현될 수 있다. 이러한 프로세서 로컬 버스들은 PCI, PCI 익스프레스(Express)(PCIe), VESA(Video Electronics Standards Association) 로컬 버스, AGP(Accelerated Graphics Port), ISA(Industry Standard Architecture) 버스, USB(Universal Serial Bus), 주변 확장 버스, 로컬 버스, 시스템 버스, 메모리 버스 또는 그와 유사한 버스들을 포함할 수 있다.
메모리(104)는 데이터를 저장하도록 구성될 수 있다. 메모리(104)는 다양한 방법들로 실행될 수 있다. 예를 들어, 메모리(103)는 휘발성 메모리, 불휘발성 메모리, 동적 메모리, 정적 메모리, 플래시 메모리(flash memory), 마그네틱 메모리(magnetic memory), 이러한 메모리들의 조합 또는 그 밖의 유사한 것을 포함할 수 있다.
레지스터들(106)은 메모리(104)와 관련된 메모리 매핑 가능한 레지스터들일 수 있다. 레지스터들(106)은 장치(100)에 대한 구성 파라미터들을 포함할 수 있다. 예를 들어, 인터페이스(102)가 PCIe 버스와 연결되면, 레지스터들(106)은 다양한 식별자들, 포인터들(pointers), 파라미터들, 기능들, 장치(100)의 그 밖의 유사한 것 중 적어도 하나와 관련될 수 있다.
스트라이드 파라미터(108)는 레지스터들(106)의 적어도 일부분의 스트라이드를 나타낼 수 있다. 예를 들어, 특정 유형의 레지스터들(106)은 스트라이드 파라미터(108)를 기반으로 메모리로 매핑될 수 있다. 특히, 스트라이드 파라미터(108)는 해당 메모리 매핑 가능한 레지스터의 분리가 영(0)이 되지 않도록 설정될 수 있다. 또는, 스트라이드 파라미터(108)는 메모리 매핑 가능한 레지스터를 분할함으로써 얻어지는 크기가 0보다 크도록 설정될 수 있다.
연속적으로 매핑된 레지스터들(106)의 어드레스들은 레지스터들의 사이즈보다 클 수 있다. 예를 들어, 특정 레지스터들이 4 바이트(bytes)의 길이라면, 스트라이드 파라미터(108)는, 8 바이트, 1024 바이트, 4096 바이트와 같이 4 바이트보다 큰, 분리된 연속적인 레지스터의 어드레스들로 설정될 수 있다.
스트라이드 파라미터(108)가 레지스터(106)로부터 분리된 것으로 도시되었지만, 스트라이드 파라미터(108)는 레지스터들(106)에 포함될 수 있다. 실시 예로서, 스트라이드 파라미터(108)는 레지스터들(106) 중 하나에 저장될 수 있다.
도 2는 본 발명의 실시 예에 따른 불휘발성 메모리 장치를 보여주기 위한 블록도이다. 장치(200)는 도 1의 장치(100)와 유사할 수 있다. 그러나, 몇몇 실시 예로서, 장치(200)는 불휘발성 메모리 장치이다. 특히, 불휘발성 메모리 장치(200)는 불휘발성 메모리(non-volatile memory, 이하: NVM)(204) 및 PCIe 인터페이스(202)를 포함할 수 있다. 추가적으로, 불휘발성 메모리 장치(200)는 도어벨 레지스터들(206)을 포함한다.
도어벨 레지스터들(206)은 NVM 메모리(204)에 액세스하기 위해 사용되는 큐들과 관련된 메모리 매핑 가능한 레지스터들일 수 있다. 예를 들어, 도어벨 레지스터들(206)은 NVM 메모리(204)로 액세스하기 위해 사용되는 제출 큐들 및/또는 완료 큐들과 관련된 도어벨 레지스터들을 포함할 수 있다.
일 실시 예로서, 스트라이드 파라미터는 도어벨 스트라이드 파라미터(208)일 수 있다. 도어벨 스트라이드 파라미터(208)는 도어벨 레지스터들(206)의 스트라이드를 나타낼 수 있다. 특히, 도어벨 스트라이드 파라미터(208)는 도어벨 레지스터들의 영(0)이 아닌 분리를 나타낼 수 있다.
도 3은 본 발명의 실시 예에 따른 시스템을 보여주기 위한 블록도이다. 시스템(300)은 프로세서가 수행하도록 구성되는 다양한 동작들로서 도시된 프로세서를 포함한다. 특히, 동작들은 사용자 공간(302) 또는 커널(kenel) 공간(304)으로 동작하도록 분할될 수 있다. 시스템(300)은 전자 시스템 또는 메모리 시스템일 수 있다.
사용자 공간(302)에서 동작하는 복수의 어플리케이션(application)(306)은 커널 공간(304)의 다양한 계층들을 통해 장치(324)에 액세스할 수 있다. 예를 들어, 복수의 어플리케이션(306) 각각은 블록 기반의 파일 시스템(312), 특정 목적 파일 시스템(314), 네트워트 스토리지 클라이언트(network storage client)(316), 또는 그 밖의 유사한 것을 포함할 수 있는 파일 시스템 계층(310)으로 시스템 호출을 실행할 수 있다.
파일 시스템 계층(310)은 집합 계층(318)의 함수들을 호출할 수 있다. 집합 계층(318)은 블록 입/출력 처리, 볼륨들(volumes)을 관리하도록 구성될 수 있다. 집합 계층(318)은 장치 드라이버(320)에 액세스할 수 있다. 장치 드라이버(320)는 차례로 장치(324)와 관련된 레지스터들(322)과 매핑된 메모리에 액세스할 수 있다.
특정 계층들 및/또는 커널 공간(304)에서 동작하는 함수들의 조직은 예로서 사용될 수 있고, 다른 계층들 및/또는 조직들은 사용될 수 있다. 복수의 어플리케이션(306)에 의해 장치(324)로의 액세스들은 다양한 커널 계층들을 통과한다. 예를 들어, 장치(324)와 관련된 어플리케이션(306)으로부터의 I/O 요청은 먼저 파일 시스템 계층(310)에 액세스하는 시스템 호출 동안 컨텍스트 스위치(context switch)를 포함할 수 있다. I/O 요청은 장치(324)로 전송되기 전에, 다양한 커널 계층들을 통과한다.
액세스는 장치에서 생성된, 드라이버(320) 서비스 종료에 대한 임의의 컨텍스트와 관련된 프로세서 컨텍스트 스위치의 중단을 포함할 수 있다. 추가적으로, 메모리-집약적 I/O 데이터 이동은, 버퍼에 카피(copy)가 포함된 경우, 발생될 수 있다. 더 나아가, 어플리케이션(306)의 다른 프로세서 컨텍스트 스위치는 장치(324)로부터 요청된 데이터를 처리하기 위해 발생할 수 있다.
실시 예로서, 장치(324)는 도 1에 도시된 장치(100)와 유사한 장치일 수 있다. 특히, 장치(324)는 장치(324)와 관련된 레지스터들 사이의 스트라이드를 나타내는 스트라이드 파라미터를 가질 수 있다. 프로세서는 스트라이드 파라미터들을 읽을 수 있고, 장치(324)로 액세스할 수 있다. 특히, 프로세서는 적어도 하나의 레지스터가 사용자 공간 가상 메모리에 매핑되도록 스트라이드 파라미터를 기반으로 가상 메모리 내로 장치(324)의 레지스터들을 매핑할 수 있다. 레지스터들(322)은 커널 공간 가상 메모리로 매핑될 수 있다. 하지만, 레지스터들(326)은 사용자 공간(302)으로 매핑될 수 있다.
결과적으로, I/O 요청들은 높은 성능을 달성할 수 있다. 특히, 레지스터들(326)을 통한 장치(324)로의 액세스들은 컨텍스트 스위치들, 다양한 커널 계층들의 통과, 또는 레지스터들(322)을 통한 장치(324)로의 액세스등의 발생을 포함하지 않을 수 있다. 이러한 소프트 계층들은 높은 레이턴시(latency) 기계 하드 디스크 드라이브들(Hard Disk Drives, HDDs)과 같은 기존 장치들의 영향으로부터 시스템(300)을 바리케이드(barricade)하도록 설계될 수 있다. 따라서, 일 실시 예로서, 기존 장치들로서의 특징들을 갖지 않는 장치(324)는 기존 장치들에 있는 소프트웨어에 의해 부과된 오버헤드(overhead)없이 액세스될 수 있다.
일 실시 예로서, 추가적인 커널 계층의 효과를 감소시키는 것은 더 높은 성능 때문에, 더 많은 비용을 발생시킬 수 있다. 다양한 커널 계층들의 영향을 제거하여, 더 높은 성능 프로세서를 이용하지 않고, 더 높은 성능이 달성될 수 있다. 더 나아가, 장치(324) 기술 성능이 향상됨으로써, 커널 계층의 지연들은 성능을 지배할 수 있고, 상당한 성능 패널티들(penalties)의 결과가 될 수 있다. 이러한 패널티들은, 레지스터들(326)을 통한 장치(324)에 액세스하여 제거하지 않으면, 감소될 수 있다.
일 실시 예로서, 프로세서는 복수의 프로세싱 코어(processing cores)를 포함할 수 있다. 각 프로세싱 코어는 복수의 프로세싱 엔티티(processing entities)를 포함할 수 있다. 예를 들어, 프로세서는 8개의 프로세싱 코어들, 16 프로세싱 엔티티들의 전체에 대한 하이퍼-스레드(hyper-threaded)를 포함할 수 있다. 프로세서는 복수의 레지스터를 복수의 프로세싱 엔티티보다 큰 가상 메모리 내에 매핑할 수 있다. 예시적으로, 16개 이상의 레지스터들은 가상 메모리 내로 매핑될 수 있다.
일 실시 예로서, 운영 시스템이 로드(load)될 때, 프로세서에서 실행하는 운영 시스템은 이용 가능한 코어들의 개수 및/또는 복수의 프로세싱 엔티티의 개수를 감지할 수 있다. 장치 드라이버(320)는 장치(324) 또는 다른 유사한 장치들의 기능들을 발견하기 위해 운영 시스템을 지원할 수 있다. 프로세서는 복수의 프로세싱 엔티티에 따라 레지스터들(322)를 매핑할 수 있다. 그러나, 프로세서는 복수의 프로세싱 엔티티를 초과하여 추가적인 레지스터들(326)을 매핑할 수 있다.
비록 각 프로세싱 엔티티와 하나 이상의 레지스터들에 대한 관계가 상술되었지만, 다른 실시 예들로서, 복수의 프로세싱 엔티티보다 레지스터들의 복수의 세트(sets)가 더 많을 수 있다. 예를 들어, 장치(324)의 리소스(resource)로의 액세스는, 제출 큐 도어벨 레지스터 및 완료 큐 도어벨 레지스터와 같은 두 개의 레지스터들을 포함할 수 있다. 각 세트가 제출 큐 도어벨 레지스터 및 완료 큐 도어벨 레지스터를 포함하는, 레지스터들의 복수의 세트는 가상 메모리에 매핑될 수 있다. 레지스터들의 복수의 세트는 복수의 프로세싱 엔티티보다 많을 수 있다.
비록, 단일 프로세서의 프로세싱 엔티티들의 관계가 예시로서 사용되었지만, 복수의 레지스터 및/또는 레지스터들의 복수의 세트는 가상 메모리로, 복수의 프로세스 전체의 개수보다 많이 매핑될 수 있다. 예를 들어, 서버는 복수의 멀티-코어 프로세서(multi-core processors)를 포함할 수 있다. 프로세서들 각각은 복수의 프로세싱 엔티티보다 많은 복수의 레지스터 및/또는 레지스터들의 복수의 세트를 가상 메모리로 매핑할 수 있다.
일 실시 예로서, 복수의 프로세싱 엔티티보다 많은 복수의 레지스터의 할당 및/또는 레지스터들의 복수의 세트는 장치(324)의 많은 또는 전체의 리소스들을 사용하도록 허용할 수 있다. 예를 들어, 장치(324)는 상술된 바와 같이 가상 메모리로 매핑된 레지스터들을 가질 수 있다. 이와 같이, 복수의 프로세싱 엔티티를 기반으로 일대일 대응하는 할당 레지스터들은 많은 사용되지 않은 레지스터들을 남길 것이다. 레지스터들(326)을 사용자 공간(302)으로 매핑함으로써, 장치(324)의 대부분의 레지스터들은 사용될 수 있다.
일 실시 예로서, 커널 공간(304)의 다양한 커널 계층들의 바이패싱(bypassing)은 복수의 어플리케이션(306)보다 다양한 및/또는 향상된 기능들을 갖도록 어플리케이션들(308)을 허용할 수 있다. 예를 들어, 커널 계층들의 개입을 제외한 레지스터들(326)의 액세스는 데이터베이스(database) 어플리케이션들, 플래시 인식 유형 어플리케이션들, 키값(key-value) 저장 유형 사용 어플리케이션들, RDMA(Remote Direct Memory Access) 어플리케이션들, 또는 그들의 의사 파일 시스템(들)(pseudo file-system(s)), 및/또는 표준 및/또는 비표준 방법들로 장치(324)로의 액세스 등을 허용할 수 있다. 더 나아가, 이러한 어플리케이션들(308)은 다양한 커널 계층들의 변화 없이, 사용자 공간(302)의 기술들을 향상시킬 수 있다. 더 나아가, 더 많은 직접 액세스는 기존의 커널 계층들에 의존하지 않고 장치들로 액세스할 수 있도록 하여 더욱 맞춤 설정 및 혁신할 수 있다.
도 4 및 도 5는 본 발명의 실시 예에 따른 가상 메모리 페이지들에 매핑된 레지스터들을 보여주기 위한 블록도들이다. 도 4를 참조하면, 레지스터들(404)은 가상 메모리(400)의 일부분에 매핑될 수 있다. 특히, 스트라이드 파라미터는 레지스터들의 스트라이들을 가상 메모리 페이지 사이즈 이상의 가상 메모리로 설정할 수 있다. 여기서, 가상 메모리 페이지들(402)은 사이즈(406)를 갖는다. 스트라이드 파라미터는 복수의 가상 메모리 페이지들(402) 각각의 사이즈(406)와 동일한 사이즈를 갖는 스트라이드로 설정된다.
일 실시 예로서, 제N 페이지들(N은 2 이상의 정수)(402)이 도시된다. 레지스터들의 가상 메모리 페이지들(402)은 제X 페이지(Page X) 에서 제X+N-1 페이지(Page X+N-1)까지 매핑될 수 있다. 레지스터들(404) 사이에서 스트라이드를 가상 메모리 페이지(402)의 사이즈(406)로 설정하기 위해 스트라이드 파라미터는 설정됨으로써, 레지스터(404)는 각 가상 메모리 페이지(402)로 매핑될 수 있다. 레지스터(404)는 관련된 가상 메모리 페이지(402)의 시작에 매핑될 수 있다. 하지만, 다른 실시 예들로서, 레지스터(404)는 가상 메모리 페이지(402)의 다른 위치에 매핑될 수 있다.
도 5를 참조하면, 일 실시 예로서, 레지스터들(504)은 가상 메모리(500)의 일부분으로 매핑될 수 있다. 스트라이드 파라미터는 가상 메모리 페이지(502)의 사이즈(508)보다는 작지만, 단일 레지스터(504)의 크기보단 큰 레지스터들(504)의 스트라이드로 설정될 수 있다. 결과적으로, 적어도 두 개의 레지스터들(504)은 단일 가상 메모리 페이지(502)로 매핑될 수 있다.
일 실시 예로서, 스트라이드 파라미터는 가상 메모리 페이지(502)의 사이즈(508)의 절반인 레지스터들(504)의 스트라이드로 설정될 수 있다. 이와 같이, 두 개의 레지스터들(504)은 N 페이지들(502)의 각각에 매핑될 수 있다. 비록 예시로써, 두 개가 사용되었지만, 레지스터들의 임의의 개수는 가상 메모리 페이지(502)에 매핑될 수 있다.
도 6은 본 발명의 실시 예에 따른 시스템을 보여주기 위한 블록도이다. 일 실시 예로서, 시스템(600)은 도 3의 시스템(300)과 유사할 수 있다. 예를 들어, 시스템(600)은 도 3의 시스템(300)의 일부분과 대응하는 사용자 공간(602), 커널 공간(604), 어플리케이션들(606), 파일 시스템 기반의 블록(612)을 포함하는 파일 시스템 계층(610), 특정 목적 파일 시스템(614), 네트워크 스토리지 클라이언트(616), 및 집합 계층(618)을 포함할 수 있다.
그러나, 일 실시 예로서, 시스템(600)은 NVMe 장치(624) 및 NVMe 장치(624)에 대응하는 NVMe 장치 드라이버(620)를 포함할 수 있다. NVMe 장치(624)는 도어벨 레지스터들의 세트들(622, 626, 및 628)은 통해 액세스될 수 있다. 도어벨 레지스터들의 세트들(622, 626, 및 628)의 각각은 제출 큐 도어벨 레지스터(SQ) 및 완료 큐 도어벨 레지스터(CQ)를 포함할 수 있다. 제출 큐 도어벨 레지스터(SQ) 및 완료 큐 도어벨 레지스터(CQ)는 NVMe 장치(624)의 큐들과 관련될 수 있다.
도어벨 레지스터 세트들(622 및 626)은 커널 공간(604) 및 사용자 공간(602) 각각의 가상 메모리로 매핑된 레지스터들을 포함할 수 있다. 도어벨 레지스터 세트(628)는 특정 목적 관리 큐를 포함할 수 있다. 도어벨 레지스터 세트(628)는 커널 공간(604)의 가상 메모리로 매핑될 수 있다.
일 실시 예로서, NVMe 장치(624)는 NVMe 솔리드-스테이트 드라이브(Solid-State Drive, SSD)를 포함할 수 있다. NVMe 장치(624)는 I/O 요청들을 서비스하기 위한 순환 큐들을 사용할 수 있고, PCIe 하드웨어 인터페이스들을 통해 NVMe 장치 드라이버(620)와 상호작용할 수 있다. 제출 큐 도어벨 레지스터(SQ)와 관련된 제출 큐는 I/O 요청들을 NVMe 장치(624)로 제공하는데 사용될 수 있고, 완료 큐 도어벨 레지스터(CQ)와 관련된 완료 큐는 응답을 제공하기 위해 사용될 수 있다. 제출 큐 도어벨 레지스터(SQ) 및 완료 큐 도어벨 레지스터(CQ)는 한 쌍으로 도시되었지만, 제출 큐 도어벨 레지스터(SQ) 하나만 사용될 수 있다.
일 실시 예에서, 부팅 과정 동안, 운영 시스템은 NVMe 장치(624)가 얼마나 많은 큐들을 제공할 수 있는지를 감지할 수 있다. 상술된 바와 같이, NVMe 장치(624)는 시스템(600)의 복수의 프로세싱 엔티티보다 많은 큐들을 제공할 수 있다. 예시로서, NVMe 장치(624)는 도어벨 레지스터 세트(628)에 의해 표시되는 하나의 관리자 제출(Administrator Submission) 큐 및 관리자 완료(Administrator Completion) 큐 쌍 및 도어벨 레지스터 세트들(622 및 626)에 의해 표시되는, I/O 요청들에 대한 비-관리자 제출 큐 및 비-관리자 완료 큐 쌍을 제공할 수 있다.
일 실시 예로서, NVMe 직접 어플리케이션들(608)은 도어벨 레지스터 세트(626)로 액세스할 수 있다. NVMe 직접 어플리케이션들(608)은 커널 계층들, CPU 컨텍스트 스위치들 및 인터럽트 레이턴시들을 바이페싱할 수 있다. 도어벨 레지스터 세트들(626)로 액세스하는 것은 가상화 및 RDMA 어플리케이션들에서 사용될 수 있다.
일 실시 예로서, NVMe 직접 어플리케이션들(608)은 증가하는 병렬성(parallelism)을 통해 NVMe 장치(624)의 성능을 증가시킬 수 있다. NVMe 장치(624)는 프로세서의 복수의 프로세싱 엔티티보다 많은 큐들을 제공할 수 있다. 이와 같이, 시스템(600)의 복수의 프로세싱 엔티티보다 많은 도어벨 레지스터 세트들(626)로의 액세스는 성능을 향상시킬 수 있다.
일 실시 예로서, 도어벨 레지스터 세트(626)는 NVMe 장치 드라이버(620)로부터 분리될 수 있다. 장치(624)로의 액세스는 NVMe 장치 드라이버(620)를 통과하지 않을 수 있다. 결과적으로, 플래시-인식 어플리케이션들 또는 상술된 바와 같은 다른 것들과 같은 더 높은 성능의 NVMe 직접 어플리케이션들(608)은 NVMe 장치(624)에 직접적으로 액세스할 수 있다. 이러한 액세스는 어플리케이션들을 포함하는 현재 및 미래의 NVM 장치들의 소프트웨어 레이턴시를 감소시킬 수 있다.
더 나아가, 도어벨 레지스터 세트(626)를 사용자 공간(602)로 매핑함으로써, NVMe 직접 어플리케이션들(608)은 커널 공간(604) 대신에 사용자 공간(602)에서 구현될 수 있다. 이와 같이, NVMe 장치들(624)에 대한 액세스의 변화는 커널 공간 계층들의 수정과 관련된 제한 없이 수행될 수 있다.
상술된 바와 같이, NVMe SSD와 같은 NVMe 장치(624)는 PCIe 장치 표준을 따를 수 있다. 이와 같이, NVMe 장치(624)는 표준 PCIe 하드웨어 제공뿐만 아니라, 표준화된 NVMe 인터페이스를 가질 수 있다. 이는 도어벨 레지스터들의 가상 메모리에 매핑된 MLBAR/MUBAR 레지스터들(PCI BAR0 및 BAR1)에 위치한 PCI 헤더 컨트롤러(PCI Header Controller) 레지스터들을 포함하는 표준화된 시스템 버스(PCI 익스프레스) 레지스터들을 포함할 수 있다.
도 4 및 도 6을 참조하면, 일 실시 에로서, 제출 큐 도어벨 레지스터들(SQ) 및 완료 큐 도어벨 레지스터들(CQ)은 레지스터들(404)로써 매핑될 수 있다. 예를 들어, 제출 큐 도어벨 레지스터들(SQ) 및 완료 큐 도어벨 레지스터들(CQ)은 교차하여 가상 메모리 페이지들(402)에 매핑될 수 있다. 결과적으로, NVMe 직접 어플리케이션(608)은 제출 큐 도어벨 레지스터들(SQ) 및 완료 큐 도어벨 레지스터들(CQ)을 포함하는 두 개의 가상 메모리 페이지들(402)로의 액세스를 허용할 수 있다.
일 실시 예로서, 컨트롤러 레지스터 레이아웃(controller register layout) 내의 컨트롤러 기능 필드(field)는 스트라이드 파라미터를 포함할 수 있다. 스트라이드 파라미터는 이 필드의 35:32 비트를 4-비트 도어벨 스트라이드(DSTRD) 필드로 인코딩할 수 있다.
도어벨 레지스터들은 오프셋(0x01000)부터 시작되어 매핑될 수 있다. 제X 페이지(Page X)는 오프셋(0x01000)부터 시작될 수 있다. 오프셋은 MLBAR/MUBAR레지스터들(PCI RAR0 및 BAR1)의 오프셋으로써 정의될 수 있다.
제1 도어벨 레지스터는 제X 페이지(Page X)의 레지스터(404)에 매핑된 관리자 제출 큐와 관련된 세트의 제출 큐 도어벨 레지스터(SQ)일 수 있다. 도어벨 스트라이드는 수학식 1과 같이 계산될 수 있다.
수학식 1을 참조하면, DSTRD는 페이지 사이즈(406)와 동일한 스트라이드로 설정될 수 있다. 결과적으로, 관리자 완료 큐와 관련된 완료 큐 도어벨 레지스터(CQ)인 다음 큐는 제X+1 페이지(Page X+1)의 레지스터(404)에 매핑될 수 있다.
도어벨 레지스터 세트(622)의 제출 큐 도어벨 레지스터(SQ) 및 완료 큐 도어벨 레지스터(CQ)는 각각 제X+2 페이지(Page X+2) 및 제X+3 페이지(Page X+3)에 매핑될 수 있다. 유사하게, 도어벨 레지스터 세트들(626)의 제출 큐 도어벨 레지스터(SQ) 및 완료 큐 도어벨 레지스터(CQ)는 제X+4 페이지(Page X+4)부터 제X+7 페이지(Page X+7)까지 매핑될 수 있다. 결과적으로, 도어벨 레지스터들은 각각 다른 가상 메모리 페이지들(402)로 매핑될 수 있다. 도어벨 레지스터가 커널 공간(604)의 다양한 커널 계층들과 관련 있으면, 관련된 페이지들은 도어벨 레지스터들로부터 분리되고 사용자 공간(602)에 매핑될 수 있다. 결과적으로, 사용자 공간(602) 어플리케이션이 제X+4 페이지(Page X+4)부터 제X+7 페이지(Page X+7)로 액세스하는 경우에도, 레지스터들(404)로 액세스할 수 있고, 다른 페이지들(402)로 매핑될 수 있다. 특히, 가상 메모리의 커널 공간에 매핑된 페이지들(402)은, 커널 소트프웨어 계층들이 여전히 사용될 수 있는 동안에, 사용자 공간(602) 액세스로부터 보호될 수 있다.
수학식 1을 참조하면, DSTRD가 0일 때, 스트라이드는 4바이트일 수 있다. 결과적으로, 하나의 도어벨의 끝과 다음 도어벨 시작 사이에는 사이 공간이 존재하지 않는다. 이런 이유로, 0의 값의 DSTRD는 사이 개입 없이 매핑되는 도어벨 레지스터들을 야기할 수 있다.
0의 값을 갖는 DSTRD은 공간 효율을 향상시키고, 모든 도어벨 레지스터들이 단일 가상 메모리 페이지(402) 내에 위치하도록 할 수 있다. 만약 모든 도어벨 레지스터들이 하나의 페이지(402)에 매핑되어 있으면, 도어벨 레지스터들은 사용자 공간(620)의 어플리케이션들 및 커널 공간(604)의 작업에 노출될 수 있다. 이와 같이, 사용자 공간(602) 어플리케이션들은 운영 시스템에 의해 제어되는 것들을 포함하며, 액세스가 필요 없는 도어벨 레지스터에 액세스할 수 있다. 반대로, 도어벨 레지스터들을 다른 가상 메모리 페이지들(402)로 매핑하여, 운영 체제가 다른 도어벨 레지스터들을 부적절하게 액세싱하는 것으로부터 사용자 공간(602) 어플리케이션들을 제한할 수 있다.
특히, 매핑은 0이 아닌 값으로 DSTRD 값을 설정함으로써 달성될 수 있다. 예를 들어, 10의 값으로 DSTRD을 설정하면, 도어벨 레지스터들은 4096 바이트로 분리될 수 있다. 페이지 사이즈(406)가 4096 바이트이면, 각 도어벨 레지스터는 자체 페이지 내에 존재할 수 있다. 사용자 공간(602) 어플리케이션들을 위해 의도된 도어벨 레지스터들의 페이지들(402)은 다른 NVMe 장치(624)의 활동들에 손상을 입히지 않고, 사용자 공간(602)의 액세스 가능한 메모리에 매핑될 수 있다.
도 5 및 도 6을 참조하면, 다른 실시 예로서, 제출 큐 도어벨 레지스터(SQ) 및 완료 큐 도어벨 레지스터(CQ)는 단일 가상 메모리 페이지(502)에 매핑될 수 있다. 레지스터(504)는 제출 큐 도어벨 레지스터(SQ)일 수 있고, 레지스터(506)는 완료 큐 도어벨 레지스터(CQ)일 수 있다.
예를 들어, 9의 값으로 설정된 DSTRD는 2048 바이트의 스트라이드를 야기한다. 이와 같이, 제출 큐 도어벨 레지스터(SQ)가 가상 메모리 페이지(502)의 바운더리(boundary)이면, 관련된 완료 큐 도어벨 레지스터(CQ)는 같은 가상 메모리 페이지(502)의 2048 바이트 다음에 위치할 수 있다. 4096 바이트의 페이지 사이즈는 예시로서 사용될 수 있고, 다른 페이지 사이즈가 레지스터의 소정의 매핑을 달성하는 값으로 스트라이드 파라미터로 사용될 수 있다. 예를 들어, 페이지 사이즈는 16 키로바이트(Kbytes)일 수 있다. 스트라이드 파라미터는 페이지당 하나의 도어벨 레지스터인 경우, 스트라이드는 16 키로바이트로 설정될 수 있다. 페이지당 각각이 8 키로바이트인 두 개의 도어벨 레지스터들이 존재할 수 있다.
도 7은 본 발명의 실시 예에 따른 시스템을 보여주기 위한 블록도이다. 일 실시 예로서, 시스템(700)은 도 3의 시스템(300)과 유사할 수 있다. 예를 들어, 시스템(700)은 도 3의 시스템(300)과 일부 대응하는 사용자 공간(702), 커널 공간(704), 레지스터들(722 및 726), 및 장치(724)를 포함할 수 있다.
하지만, 시스템(700)의 일 실시 예로서, 프로세서는 하나 이상의 가상 머신들(virtual machines 이하: VMs)(706 및 708)로 구성될 수 있다. 제1 VMs(706)에 대하여, 호스트 운영 시스템(OS)(710)은 커널 공간(704)에서 동작할 수 있다. 호스트 OS(701)는 장치 드라이버(720) 및 하이퍼바이저(hypervisor)(716)를 포함할 수 있다. 하이퍼바이저(716)는 장치(724)와 관련된 가상 어댑터(adapter)(712)를 나타낼 수 있다. 그러나, 몇몇 실시 예로서, 가상 어댑터(712)는 하나 이상의 레지스터들(722)에 직접 액세스를 제공하도록 구성될 수 있다. 하나 이상의 레지스터들(722)은 제1 VMs(706)와 관련된 가상 메모리 내에 매핑될 수 있다. 여기서 가상 메모리는 커널 공간의 가상 메모리 일 수 있다. 그러나 다른 실시 예로서, 가상 메모리는 사용자 공간의 가상 메모리일 수 있다.
제2 VMs(708)에 대하여, 레지스터들(726)은 호스트 OS(701)의 커널 계층들과 관계 없이 레지스터들(726)로 액세스할 수 있다 따라서, 제2 VMs(708)는 SR-IOV(Single Root I/O Virtualization and Sharing) 단일 회로를 필요로 하지 않기 때문에 비용이 절감될 수 있다.
일 실시 예로서, 제2 VM(708)에 의한 장치(724)로의 액세스는 감소된 기능 세트에 대한 액세스를 포함할 수 있다. 제2 VMs(708)는 전체 장치(724)의 가상 인스턴스(instance)에 액세스하지 않아도 된다. 여기서, 제2 VMs(708)는 전체 장치(724)의 가상 인스턴스 대신에 장치(724)의 실제 레지스터(726)로 액세스할 수 있다. 그러나, 다른 실시 예로서, 제2 VMs(708) 각각은 도 6의 세트(626)와 유사한 레지스터의 하나의 세트 이상, 또는 하나 이상의 레지스터(726)에 액세스할 수 있다.
도 8은 본 발명의 실시 예에 따른 시스템을 보여주기 위한 블록도이다. 시스템(800)은 도 7의 시스템(700)과 유사할 수 있다. 예를 들어, 시스템은 도 7의 시스템(700)의 일부 대응하는 사용자 공간(802), 커널 공간(804), 장치 드라이버(820), 레지스터들(822 및 826) 장치(824)를 포함할 수 있다.
VMs는 레지스터들의 매핑 성능을 개선하기 위한 가상화의 예시로서 사용되었지만, 다른 실시 예로서, 가상화의 다른 유형들에서, 다양한 레벨들이 사용될 수 있다. 예를 들어, 소프트웨어 컨테이너들(software containers), 어플리케이션 레벨 가상화는 레지스터의 매핑에 사용되는 가상화 인스턴트들(virtual instances 이하: VIs)(806 및 808)로 나타날 수 있다. 가상화 소프트웨어(810)는 VIs(806 및 808)를 가능하게 하는 소프트웨어로 나타낼 수 있다. VIs(806 및 808)의 특정 실시 예로서, 소프트웨어 컨테이너들의 사용은 스케일링(scaling) 때 VMs 보다 더 적은 리소스들을 사용할 수 있고, 본원에 기술된 다양한 실시 예들의 다른 성능 향상은 장치(824)에 대한 액세스가 소프트웨어 컨테이너를 확장할 수 있다.
도 9는 본 발명의 실시 예에 따른 서버를 보여주기 위한 블록도이다. 서버(900)는 독립형 서버, 랙-마운트 서버(rack-mounted server), 블래이드 서버(blade server) 중 적어도 하나일 수 있다. 서버(900)는 프로세서(904) 및 장치(902)를 포함할 수 있다. 프로세서(904)는 PCIe 버스 또는 상술된 다른 버스와 같은 통신 경로(906)를 통해 장치(902)와 연결될 수 있다. 장치(902) 및 프로세서(904)는 상술된 요소들 및 시스템들 중 적어도 하나일 것이다. 예를 들어, 장치(902)는 사용자 공간의 레지스터들 중 적어도 하나에 매핑되도록 구성된 프로세서(904) 및 도어벨 레지스터들 사이의 0이 아닌 스트라이드를 나타내는 스트라이드 파라미터를 포함하는 NVMe SSD일 수 있다.
도 10은 본 발명의 실시 예에 따른 서버 시스템을 보여주기 위한 블록도이다. 서버 시스템(1000)은 복수의 서버(1002-1~1002-N)를 포함할 수 있다. 복수의 서버(1002-1~1002-N)는 관리자(manager)(1004)와 연결될 수 있다. 복수의 서버(1002-1~1002-N)는 상술된 서버(900)와 동일 또는 유사할 수 있다. 추가적으로, 관리자(1004)는 상술된 장치 및 시스템을 포함할 수 있다.
도 11은 본 발명의 실시 예에 따른 데이터 센터를 보여주기 위한 블록도이다. 데이터 센터(1100)는 복수의 서버 시스템(1102-1~1102-N)을 포함할 수 있다. 복수의 서버 시스템(1102-1~1102-N)은 도 10에 도시된 서버 시스템(1000)과 유사 또는 동일할 수 있다. 복수의 서버 시스템(1102-1~1102-N)은 인터넷과 같은 네트워크(network)(1104)와 연결될 수 있다. 따라서, 복수의 서버 시스템(1102-1~1102-N)은 네트워크(1104)를 통해 다양한 노드들(1106-1~1106-M)과 통신할 수 있다. 예를 들어 노드들(1106-1~1106-M)은 클라이언트 컴퓨터들(client computers), 다른 서버들, 원격 데이터 센터들, 저장 시스템들 중 적어도 하나일 수 있다. 몇몇 실시 예들로서, 복수의 서버 시스템(1102-1~1102-N) 및 노드들(1106-1~1106-M)은 상술된 장치들 및/또는 시스템들을 포함할 수 있다.
이상에서와 같이 도면과 명세서에서 최적 실시 예가 개시되었다. 여기서 특정한 용어들이 사용되었으나, 이는 단지 본 발명을 설명하기 위한 목적에서 사용된 것이지 의미 한정이나 특허청구범위에 기재된 본 발명의 범위를 제한하기 위하여 사용된 것은 아니다. 그러므로 본 기술 분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시 예가 가능하다는 점을 이해할 것이다. 따라서, 본 발명의 진정한 기술적 보호 범위는 첨부된 특허청구범위의 기술적 사상에 의해 정해져야 할 것이다.
100, 200: 장치 208: 도어벨 스트라이드 파라미터
102: 인터페이스 300, 600, 700, 800: 시스템
104: 메모리 306, 308, 606, 608: 어플리케이션
106: 레지스터들 310, 610: 파일 시스템 계층
108: 스트라이드 파라미터 318, 618: 집합 계층
204: NVM 322, 326, 726, 822, 826: 레지스터
206: 도어벨 레지스터 324, 624, 724: 장치
620: NVMe 드라이버 706, 708: VM
710: 호스트 OS 810: 가상화 소프트웨어
712: 가상 어댑터 720, 820: 장치 드라이버
806, 808: VI 900: 서버 시스템
102: 인터페이스 300, 600, 700, 800: 시스템
104: 메모리 306, 308, 606, 608: 어플리케이션
106: 레지스터들 310, 610: 파일 시스템 계층
108: 스트라이드 파라미터 318, 618: 집합 계층
204: NVM 322, 326, 726, 822, 826: 레지스터
206: 도어벨 레지스터 324, 624, 724: 장치
620: NVMe 드라이버 706, 708: VM
710: 호스트 OS 810: 가상화 소프트웨어
712: 가상 어댑터 720, 820: 장치 드라이버
806, 808: VI 900: 서버 시스템
Claims (19)
- 메모리 및 복수의 레지스터들을 포함하는 NVMe(Non-Volatile Memory Express) 장치; 및
프로세서-로컬 버스(processor-local bus)로 연결되는 프로세서를 포함하고,
상기 복수의 레지스터들 각각 사이의 스트라이드를 나타내는 스트라이드 파라미터(stride parameter)는 상기 메모리에 저장되고, 상기 복수의 레지스터들은 커널 공간으로 매핑 가능한 적어도 한 쌍의 제 1 레지스터들 및 사용자 공간으로 매핑 가능한 적어도 한 쌍의 제 2 레지스터들을 포함하고, 한 쌍의 제 1 레지스터들은 제출 큐 도어벨 레지스터 및 완료 큐 도어벨 레지스터를 포함하고, 한 쌍의 제 2 레지스터들은 상기 사용자 공간에서 서로 인접한 제출 큐 도어벨 레지스터 및 완료 큐 도어벨 레지스터를 포함하고,
상기 프로세서는:
상기 프로세서-로컬 버스를 통해 상기 NVMe 장치의 상기 메모리에 저장된 스트라이드 파라미터를 읽고; 및
상기 스트라이드 파라미터를 기반으로, 상기 제 1 레지스터들을 상기 커널 공간에 매핑하고, 상기 제 2 레지스터들을 상기 사용자 공간에 매핑하고,
상기 적어도 한 쌍의 제 1 레지스터들은 상기 스트라이드 파라미터에 의해 커널 공간에서 분리되고, 상기 적어도 한 쌍의 제 2 레지스터들은 상기 스트라이드 파라미터에 의해 사용자 공간에서 분리되는 시스템. - 제 1 항에 있어서,
상기 제 1 레지스터들의 제 1 쌍의 레지스터들은 상기 커널 공간에서 서로 인접하는 시스템. - 제 2 항에 있어서,
상기 복수의 레지스터들은 제 1 미리 결정된 수의 제 1 레지스터들을 포함하고, 상기 프로세서는 제 2 미리 결정된 수의 프로세싱 엔티들(processing entities)을 포함하고,
상기 제 1 미리 결정된 수는 상기 제 2 미리 결정된 수보다 더 큰 시스템. - 제 2 항에 있어서,
상기 프로세서-로컬 버스는 PCIe(Peripheral Component Interconnect Express) 버스를 포함하는 시스템. - 제 2 항에 있어서,
상기 스트라이드 파라미터의 값은 상기 사용자 공간의 페이지 크기보다 크거나 같은 시스템. - 제 2 항에 있어서,
상기 스트라이드 파라미터의 값은 상기 복수의 레지스터들의 상기 레지스터들의 크기보다 큰 시스템. - 제 2 항에 있어서,
상기 스트라이드 파라미터의 값은 상기 사용자 공간의 페이지 크기보다 작은 시스템. - 제 2 항에 있어서,
상기 스트라이드 파라미터의 값은 한 쌍의 제 2 레지스터들을 상기 사용자 공간의 단일 페이지에 배치하는 시스템. - 제 2 항에 있어서,
상기 프로세서는 가상 머신을 더 제공하고; 및
적어도 한 쌍의 제 2 레지스터들은 상기 가상 머신과 관련된 가상 메모리에 매핑되는 시스템. - 제 2 항에 있어서,
상기 프로세서는 커널 계층들을 개입 없이 사용자 공간 애플리케이션에 의해 접근되도록 상기 제 2 레지스터들을 더 매핑하는 시스템. - 프로세서에 의해, 프로세서-로컬 버스에 연결된 NVMe(Non-Volatile Memory Express) 장치의 메모리에 저장된 스트라이드 파라미터를 읽는 단계; 및
상기 프로세서에 의해, 상기 스트라이드 파라미터를 기반으로 제 1 레지스터들을 커널 공간에 매핑하고 제 2 레지스터들을 사용자 공간에 매핑하는 단계를 포함하고,
상기 NVMe 장치는 상기 메모리 및 복수의 레지스터들을 포함하고, 상기 스트라이드 파라미터는 상기 복수의 레지스터들 각각 사이의 스트라이드를 나타내고, 상기 복수의 레지스터들은 커널 공간으로 매핑 가능한 적어도 한 쌍의 제 1 레지스터들 및 사용자 공간으로 매핑 가능한 적어도 한 쌍의 제 2 레지스터들을 포함하고, 한 쌍의 제 1 레지스터들은 제출 큐 도어벨 레지스터 및 완료 큐 도어벨 레지스터를 포함하고, 한 쌍의 제 2 레지스터들은 상기 사용자 공간에서 서로 인접한 제출 큐 도어벨 레지스터 및 완료 큐 도어벨 레지스터를 포함하고,
상기 적어도 한 쌍의 제 1 레지스터들은 상기 스트라이드 파라미터에 의해 커널 공간에서 분리되고, 상기 적어도 한 쌍의 제 2 레지스터들은 상기 스트라이드 파라미터에 의해 사용자 공간에서 분리되는 방법. - 제 11 항에 있어서,
상기 제 1 레지스터들의 제 1 쌍의 레지스터들은 상기 커널 공간에서 서로 인접하는 방법. - 제 12 항에 있어서,
상기 스트라이드 파라미터의 값은 상기 사용자 공간의 페이지 크기보다 크거나 같은 방법. - 제 12 항에 있어서,
상기 스트라이드 파라미터의 값은 상기 사용자 공간의 페이지 크기보다 작은 방법. - 제 12 항에 있어서,
가상 머신을 발생시키는 단계를 더 포함하고,
상기 적어도 한 쌍의 제 2 레지스터들을 매핑하는 단계는 상기 적어도 한 쌍의 제 2 레지스터들을 상기 가상 머신과 연관된 가상 메모리로 매핑하는 단계를 포함하는 방법. - 데이터를 저장하는 메모리;
커널 공간으로 매핑 가능한 적어도 한 쌍의 제 1 레지스터들 및 사용자 공간으로 매핑 가능한 적어도 한 쌍의 제 2 레지스터들을 포함하는 복수의 레지스터들; 및
스트라이드 파라미터를 저장하는 스트라이드 레지스터를 포함하고,
제 1 레지스터들의 각 쌍은 제출 큐 도어벨 레지스터 및 완료 큐 도어벨 레지스터를 포함하고, 제 2 레지스터들의 각 쌍은 제출 큐 도어벨 레지스터 및 완료 큐 도어벨 레지스터를 포함하고, 제 2 레지스터들의 제 1 쌍의 레지스터들은 상기 사용자 공간에서 서로 인접하고,
상기 스트라이드 파라미터는 커널 공간에서 상기 적어도 한 쌍의 제 1 레지스터들 사이의 분리와 사용자 공간에서 상기 적어도 한 쌍의 레지스터들 사이의 분리를 나타내는 NVMe(Non-Volatile Memory Express) 장치. - 제 16 항에 있어서,
제 1 레지스터들의 한 쌍의 레지스터들은 상기 커널 공간에서 서로 인접하는 NVMe 장치. - 제 17 항에 있어서,
상기 스트라이드 파라미터의 값은 상기 사용자 공간의 페이지 크기보다 크거나 같은 NVMe 장치. - 제 17 항에 있어서,
상기 스트라이드 파라미터의 값은 상기 사용자 공간의 페이지 크기보다 작은 NVMe 장치.
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201562149509P | 2015-04-17 | 2015-04-17 | |
US62/149,509 | 2015-04-17 | ||
US14/862,145 US10838852B2 (en) | 2015-04-17 | 2015-09-22 | System and method to extend NVME queues to user space |
US14/862,145 | 2015-09-22 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20160123986A KR20160123986A (ko) | 2016-10-26 |
KR102321913B1 true KR102321913B1 (ko) | 2021-11-05 |
Family
ID=57128323
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020160029639A KR102321913B1 (ko) | 2015-04-17 | 2016-03-11 | 불휘발성 메모리 장치, 및 그것을 포함하는 메모리 시스템 |
Country Status (2)
Country | Link |
---|---|
US (3) | US10838852B2 (ko) |
KR (1) | KR102321913B1 (ko) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102336443B1 (ko) * | 2015-02-04 | 2021-12-08 | 삼성전자주식회사 | 가상화 기능을 지원하는 스토리지 장치 및 사용자 장치 |
US11036533B2 (en) | 2015-04-17 | 2021-06-15 | Samsung Electronics Co., Ltd. | Mechanism to dynamically allocate physical storage device resources in virtualized environments |
US10838852B2 (en) | 2015-04-17 | 2020-11-17 | Samsung Electronics Co., Ltd. | System and method to extend NVME queues to user space |
KR102430187B1 (ko) * | 2015-07-08 | 2022-08-05 | 삼성전자주식회사 | RDMA NVMe 디바이스의 구현 방법 |
CN107209681B (zh) * | 2015-10-21 | 2020-07-07 | 华为技术有限公司 | 一种存储设备访问方法、装置和系统 |
CN107145459B (zh) * | 2016-03-01 | 2021-05-18 | 华为技术有限公司 | 一种级联板、ssd远程共享访问的系统和方法 |
US10445018B2 (en) * | 2016-09-09 | 2019-10-15 | Toshiba Memory Corporation | Switch and memory device |
CN110109626B (zh) * | 2019-05-20 | 2022-01-25 | 哈尔滨工业大学 | 一种基于FPGA的NVMe SSD命令处理方法 |
JP7446167B2 (ja) * | 2019-06-24 | 2024-03-08 | 三星電子株式会社 | 軽量ブリッジ、これを含む物品及びこれを用いた方法 |
US11809799B2 (en) | 2019-06-24 | 2023-11-07 | Samsung Electronics Co., Ltd. | Systems and methods for multi PF emulation using VFs in SSD controller |
US11775210B2 (en) | 2020-10-14 | 2023-10-03 | Western Digital Technologies, Inc. | Storage system and method for device-determined, application-specific dynamic command clustering |
US20240330046A1 (en) * | 2023-03-31 | 2024-10-03 | Advanced Micro Devices, Inc. | Advanced hardware scheduling using unmapped-queue doorbells |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020144001A1 (en) | 2001-03-29 | 2002-10-03 | Collins Brian M. | Apparatus and method for enhanced channel adapter performance through implementation of a completion queue engine and address translation engine |
US20090122627A1 (en) | 2007-11-08 | 2009-05-14 | S. Aqua Semiconductor Llc | Memory with programmable strides |
US20140317219A1 (en) | 2013-04-23 | 2014-10-23 | International Business Machines Corporation | Local direct storage class memory access |
Family Cites Families (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1514191B1 (en) * | 2002-06-19 | 2009-09-16 | Telefonaktiebolaget L M Ericsson | A network device driver architecture |
GB0221464D0 (en) * | 2002-09-16 | 2002-10-23 | Cambridge Internetworking Ltd | Network interface and protocol |
US7493465B2 (en) * | 2004-05-17 | 2009-02-17 | Oracle International Corporation | Method and system for extended memory with user mode input/output operations |
US20060195663A1 (en) | 2005-02-25 | 2006-08-31 | International Business Machines Corporation | Virtualized I/O adapter for a multi-processor data processing system |
US20060236063A1 (en) * | 2005-03-30 | 2006-10-19 | Neteffect, Inc. | RDMA enabled I/O adapter performing efficient memory management |
US7962563B2 (en) | 2006-03-24 | 2011-06-14 | International Business Machines Corporation | System and method for managing storage system performance as a resource |
US7694193B2 (en) * | 2007-03-13 | 2010-04-06 | Hewlett-Packard Development Company, L.P. | Systems and methods for implementing a stride value for accessing memory |
US9389895B2 (en) | 2009-12-17 | 2016-07-12 | Microsoft Technology Licensing, Llc | Virtual storage target offload techniques |
US9582431B2 (en) | 2010-03-22 | 2017-02-28 | Seagate Technology Llc | Storage address space to NVM address, span, and length mapping/converting |
WO2013048487A1 (en) * | 2011-09-30 | 2013-04-04 | Intel Corporation | Method, system and apparatus for region access control |
WO2013109640A1 (en) | 2012-01-17 | 2013-07-25 | Intel Corporation | Techniques for command validation for access to a storage device by a remote client |
JP5891900B2 (ja) | 2012-03-29 | 2016-03-23 | 富士通株式会社 | アクセス制御方法、サーバ装置およびストレージ装置 |
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 |
US9720717B2 (en) | 2013-03-14 | 2017-08-01 | Sandisk Technologies Llc | Virtualization support for storage devices |
US9423977B2 (en) | 2013-03-14 | 2016-08-23 | Seagate Technology Llc | Lock-free communication storage request reordering |
US9436634B2 (en) | 2013-03-14 | 2016-09-06 | Seagate Technology Llc | Enhanced queue management |
US20140331001A1 (en) | 2013-05-02 | 2014-11-06 | Lsi Corporation | Command Barrier for a Solid State Drive Controller |
US9501245B2 (en) | 2014-05-02 | 2016-11-22 | Cavium, Inc. | Systems and methods for NVMe controller virtualization to support multiple virtual machines running on a host |
KR101699377B1 (ko) | 2014-07-02 | 2017-01-26 | 삼성전자주식회사 | 불휘발성 메모리 및 메모리 컨트롤러를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법 |
CN104461958B (zh) | 2014-10-31 | 2018-08-21 | 华为技术有限公司 | 支持sr-iov的存储资源访问方法、存储控制器及存储设备 |
US9639395B2 (en) | 2015-04-16 | 2017-05-02 | Google Inc. | Byte application migration |
US10838852B2 (en) | 2015-04-17 | 2020-11-17 | Samsung Electronics Co., Ltd. | System and method to extend NVME queues to user space |
KR102371916B1 (ko) | 2015-07-22 | 2022-03-07 | 삼성전자주식회사 | 가상 머신을 지원하는 스토리지 장치, 그것을 포함하는 스토리지 시스템 및 그것의 동작 방법 |
CN107209681B (zh) | 2015-10-21 | 2020-07-07 | 华为技术有限公司 | 一种存储设备访问方法、装置和系统 |
US10380015B2 (en) | 2017-06-30 | 2019-08-13 | Western Digital Technologies, Inc. | Logical address range mapping for storage devices |
-
2015
- 2015-09-22 US US14/862,145 patent/US10838852B2/en active Active
-
2016
- 2016-03-11 KR KR1020160029639A patent/KR102321913B1/ko active IP Right Grant
-
2020
- 2020-09-17 US US17/024,649 patent/US11481316B2/en active Active
-
2022
- 2022-10-24 US US17/972,580 patent/US20230054866A1/en active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020144001A1 (en) | 2001-03-29 | 2002-10-03 | Collins Brian M. | Apparatus and method for enhanced channel adapter performance through implementation of a completion queue engine and address translation engine |
US20090122627A1 (en) | 2007-11-08 | 2009-05-14 | S. Aqua Semiconductor Llc | Memory with programmable strides |
US20140317219A1 (en) | 2013-04-23 | 2014-10-23 | International Business Machines Corporation | Local direct storage class memory access |
Also Published As
Publication number | Publication date |
---|---|
US20160306580A1 (en) | 2016-10-20 |
US20210004322A1 (en) | 2021-01-07 |
US20230054866A1 (en) | 2023-02-23 |
US10838852B2 (en) | 2020-11-17 |
US11481316B2 (en) | 2022-10-25 |
KR20160123986A (ko) | 2016-10-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102321913B1 (ko) | 불휘발성 메모리 장치, 및 그것을 포함하는 메모리 시스템 | |
US10169231B2 (en) | Efficient and secure direct storage device sharing in virtualized environments | |
US9880941B2 (en) | Sharing an accelerator context across multiple processes | |
US10248468B2 (en) | Using hypervisor for PCI device memory mapping | |
KR20200016811A (ko) | 저장 매체 상의 가상 기능들의 가능화 | |
US20190243757A1 (en) | Systems and methods for input/output computing resource control | |
US11768783B2 (en) | Local non-volatile memory express virtualization device | |
US10241926B2 (en) | Migrating buffer for direct memory access in a computer system | |
US9460009B1 (en) | Logical unit creation in data storage system | |
US11016817B2 (en) | Multi root I/O virtualization system | |
TW201941197A (zh) | 混合式記憶體系統 | |
US10310759B2 (en) | Use efficiency of platform memory resources through firmware managed I/O translation table paging | |
US10552374B2 (en) | Minimizing file creation and access times using skip optimization | |
US11249660B2 (en) | Low-latency shared memory channel across address spaces without system call overhead in a computing system | |
CN113032088B (zh) | 脏页记录方法、装置、电子设备及计算机可读介质 | |
WO2016059692A1 (ja) | 計算機及びi/o処理の制御方法 | |
US10223284B2 (en) | Flexible I/O DMA address allocation in virtualized systems | |
US11481255B2 (en) | Management of memory pages for a set of non-consecutive work elements in work queue designated by a sliding window for execution on a coherent accelerator | |
US10747594B1 (en) | System and methods of zero-copy data path among user level processes | |
CN118672725A (zh) | 存储控制器以及操作包括存储控制器的电子系统的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E701 | Decision to grant or registration of patent right |