KR101943312B1 - 플래시 기반 가속기 및 이를 포함하는 컴퓨팅 디바이스 - Google Patents
플래시 기반 가속기 및 이를 포함하는 컴퓨팅 디바이스 Download PDFInfo
- Publication number
- KR101943312B1 KR101943312B1 KR1020180046379A KR20180046379A KR101943312B1 KR 101943312 B1 KR101943312 B1 KR 101943312B1 KR 1020180046379 A KR1020180046379 A KR 1020180046379A KR 20180046379 A KR20180046379 A KR 20180046379A KR 101943312 B1 KR101943312 B1 KR 101943312B1
- Authority
- KR
- South Korea
- Prior art keywords
- memory
- flash
- kernel
- data
- accelerator
- Prior art date
Links
Images
Classifications
-
- 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
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/26—Power supply means, e.g. regulation thereof
- G06F1/32—Means for saving power
- G06F1/3203—Power management, i.e. event-based initiation of a power-saving mode
- G06F1/3234—Power saving characterised by the action undertaken
- G06F1/3296—Power saving characterised by the action undertaken by lowering the supply or operating voltage
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/26—Power supply means, e.g. regulation thereof
- G06F1/32—Means for saving power
- G06F1/3203—Power management, i.e. event-based initiation of a power-saving mode
- G06F1/3234—Power saving characterised by the action undertaken
- G06F1/3293—Power saving characterised by the action undertaken by switching to a less power-consuming processor, e.g. sub-CPU
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
- G06F3/0631—Configuration or reconfiguration of storage systems by allocating resources to storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
-
- Y02D10/172—
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)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
CPU와 시스템 메모리를 포함하는 호스트에 연결되도록 구성되어 있으며, 호스트에서 전달되는 커널을 실행하는 플래시 기반 가속기가 제공된다. 플래시 기반 가속기의 복수의 프로세서가 복수의 커널을 실행한다. 메모리 시스템은 각 커널의 데이터 섹션을 플래시 메모리로 매핑하는데 사용되는 제1 메모리를 포함한다. 관리 프로세서는, 복수의 프로세서 중 제1 프로세서에서의 제1 커널의 실행에 따라 전달되는 메시지를 기초로, 제1 커널의 데이터 섹션이 포인트하는 제1 메모리의 영역을 플래시 메모리의 영역으로 매핑하여 제1 메모리의 영역과 플래시 메모리의 영역 사이에서 데이터를 전달시킨다. 네트워크가 플래시 백본, 메모리 시스템, 복수의 프로세서 및 관리 프로세서를 통합한다.
Description
본 발명은 플래시 기반 가속기 및 이를 포함하는 컴퓨팅 디바이스에 관한 것이다.
지난 몇 년 동안 이기종(heterogeneous) 컴퓨팅은 그래픽 처리 유닛(graphic processing unit, GPU) 및 MIC(many integrated core)와 같이 많은 프로세서를 통합함으로써 광범위한 데이터 처리 어플리케이션에서 중요한 성능 향상을 입증해왔다. 이러한 많은 코어 기반 가속기(manycore-based accelerator)는 수백 또는 수천 개의 하드웨어 스레드를 사용하여 호스트에서 오프로드된 프로그램을 처리할 수 ????있으며, 이는 중앙 프로세싱 유닛(central processing unit, CPU)보다 훨씬 뛰어난 성능을 나타낼 수 있다.
이와 같이 가속기는 전에 비해 많은 양의 데이터를 처리할 수 있으며, 데이터의 볼륨도 증가할 것으로 예상된다. 그런데 현재의 가속기는 호스트 메모리에 비해서 상대적으로 적은 크기의 내부 메모리를 채용하고 있다. 따라서 가속기는 많은 양의 데이터를 처리하기 위해서 호스트에 연결된 별도의 비휘발성 메모리, 예를 들면 솔리드 스테이트 디스트(solid state disk, SSD)를 사용하고 있다.
그러나 가속기와 비휘발성 메모리가 서로 완전히 분리되어 있으며 서로 다른 소프트웨어 스택에 의해 관리되므로, 가속기가 비휘발성 메모리로부터 데이터를 읽거나 비휘발성 메모리로 데이터를 쓰기 위해서는, 사용자 공간과 커널 공간 사이에 불필요한 많은 메모리 할당/해제 및 데이터 복사가 이루어진다. 또한 커널 모듈이 사용자 공간에 직접 접근할 수 없으므로, 커널 공간과 사용자 공간 사이의 메모리 관리 및 데이터 복사 오버헤드를 피할 수 없다. 또한 데이터 복사에 동반한 커널 모드와 사용자 모드의 스위칭 오버헤드로 인해 데이터 이동에 지연이 발생할 수 있다. 이러한 오버헤드로 인해 가속기의 성능에 비해서 실제 속도 향상 효과가 크지 않다는 문제점이 있다.
본 발명이 이루고자 하는 과제는 다양한 커널을 실행할 수 있는 플래시 기반 가속기 및 이를 포함하는 컴퓨팅 디바이스를 제공하는 것이다.
본 발명의 한 실시예에 따르면, CPU와 시스템 메모리를 포함하는 호스트에 연결되도록 구성되어 있으며, 상기 호스트에서 전달되는 커널을 실행하는 플래시 기반 가속기가 제공된다. 상기 플래시 기반 가속기는, 플래시 메모리 및 플래시 컨트롤러를 포함하는 플래시 백본, 복수의 커널을 실행하는 복수의 프로세서, 메모리 시스템, 관리 프로세서 및 네트워크를 포함한다. 상기 메모리 시스템은 각 커널의 데이터 섹션을 상기 플래시 메모리로 매핑하는데 사용되는 제1 메모리를 포함한다. 상기 관리 프로세서는, 상기 복수의 프로세서 중 제1 프로세서에서의 제1 커널의 실행에 따라 전달되는 제1 메시지를 기초로, 상기 제1 커널의 데이터 섹션이 포인트하는 상기 제1 메모리의 영역을 상기 플래시 메모리의 영역으로 매핑하여 상기 제1 메모리의 영역과 상기 플래시 메모리의 영역 사이에서 제1 데이터를 전달시킨다. 상기 네트워크는 상기 플래시 백본, 상기 메모리 시스템, 상기 복수의 프로세서 및 상기 관리 프로세서를 통합한다.
상기 호스트의 운영 체제(operating system, OS)의 도움 없이 상기 제1 메모리와 상기 플래시 메모리 사이에서 상기 제1 데이터가 이동될 수 있다.
전형적인 컴퓨팅 장치에서 사용하는 명령어 세트 아키텍처(instruction set architecture)의 변경 없이 상기 제1 메모리와 상기 플래시 메모리 사이에서 상기 제1 데이터가 이동될 수 있다.
상기 관리 프로세서는 상기 플래시 메모리의 영역을 지시하는 메모리 요청을 상기 플래시 컨트롤러로 전달하고, 상기 플래시 컨트롤러가 상기 제1 메모리의 영역과 상기 플래시 메모리의 영역 사이에서 상기 제1 데이터를 전달할 수 있다.
상기 제1 프로세서는 전형적인 로드/저장 명령어(load/store instruction)의 변경 없이 상기 메모리 요청을 통해 상기 플래시 백본에 액세스할 수 있다.
상기 제1 커널이 상기 플래시 메모리로부터 상기 제1 데이터를 읽는 경우, 상기 제1 메시지는 상기 제1 커널의 데이터 섹션의 포인터와 워드 또는 바이트 기반 어드레스를 포함하고, 상기 관리 프로세서는 상기 워드 또는 바이트 기반 어드레스를 상기 플래시 메모리에서의 물리적 어드레스로 변환할 수 있다. 상기 메모리 시스템은 상기 워드 또는 바이트 기반 어드레스를 상기 플래시 메모리에서의 물리적 어드레스로 변환하기 위한 매핑 정보를 저장하는 제2 메모리를 더 포함할 수 있다.
상기 매핑 정보는 상기 워드 또는 바이트 기반 어드레스에 대응하는 논리적 페이지 그룹 번호와 상기 물리적 어드레스에 대응하는 물리적 페이지 그룹 번호 사이의 매핑 정보를 포함할 수 있다.
상기 워드 또는 바이트 기반 어드레스의 범위가 다른 커널에 의해 쓰기 용으로 사용되고 있는 어드레스의 범위와 겹치는 경우, 상기 관리 프로세서는 제1 메시지의 처리를 차단할 수 있다.
상기 복수의 프로세서 중 제2 프로세서는 제2 커널의 실행에 따라 상기 플래시 메모리로 제2 데이터를 쓰기 위한 제2 메시지를 상기 관리 프로세서로 전달하고, 상기 제2 메시지는 상기 제2 커널의 데이터 섹션의 포인터를 포함할 수 있다. 상기 관리 프로세서는, 상기 제2 메시지를 위해 상기 플래시 메모리의 새로운 영역을 할당하여 상기 제2 커널의 데이터 섹션이 포인트하는 상기 제1 메모리의 영역에서 상기 플래시 메모리의 새로운 영역으로 상기 제2 데이터를 전달시킬 수 있다.
상기 관리 프로세서는 상기 플래시 메모리의 새로운 영역을 지시하는 메모리 요청을 상기 플래시 컨트롤러로 전달하고, 상기 플래시 컨트롤러가 상기 제2 커널의 데이터 섹션이 포인트하는 상기 제1 메모리의 영역에서 상기 플래시 메모리의 새로운 영역으로 상기 제2 데이터를 전달할 수 있다.
상기 관리 프로세서는 상기 플래시 메모리의 새로운 영역에 대응하는 물리적 어드레스와 상기 제2 메시지에 포함된 워드 또는 바이트 기반 어드레스를 기초로 상기 매핑 정보를 갱신할 수 있다.
상기 제2 메시지에 포함된 워드 또는 바이트 기반 어드레스의 범위가 다른 커널에 의해 읽기 용으로 사용되고 있는 어드레스의 범위와 겹치는 경우, 상기 관리 프로세서는 제2 메시지의 처리를 차단할 수 있다.
상기 관리 프로세서는 이전 쓰기에 사용된 물리적 페이지 그룹 번호를 증가시켜서 상기 새로운 영역에 대응하는 물리적 페이지 그룹 번호를 할당할 수 있다.
상기 플래시 기반 가속기는 저장 프로세서를 더 포함할 수 있다. 이 경우, 상기 관리 프로세서는, 상기 플래시 메모리에서 사용 가능한 물리적 페이지 그룹 번호가 없는 경우, 상기 새로운 영역에 대응하는 물리적 페이지 그룹 번호를 할당하기 위해 물리 블록을 회수(reclaim)하기 위한 요청을 상기 저장 프로세서로 전달할 수 있다. 상기 저장 프로세서는 상기 플래시 메모리의 공간에서 희생(victim) 블록을 선택해서 상기 물리 블록을 회수할 수 있다.
상기 저장 프로세서는 상기 제2 메모리의 스냅샷을 저널링할 수 있다.
본 발명의 다른 실시예에 따르면, 위에서 설명한 플래시 기반 가속기, 호스트, 그리고 상기 플래시 기반 가속기를 상기 호스트에 연결하는 인터페이스를 포함하는 컴퓨팅 디바이스가 제공될 수 있다.
본 발명의 또 다른 실시예에 따르면, CPU와 시스템 메모리를 포함하는 호스트에 연결되도록 구성되어 있으며, 상기 호스트에서 전달되는 커널을 실행하는 플래시 기반 가속기가 제공된다. 상기 플래시 기반 가속기는, 플래시 메모리 및 플래시 컨트롤러를 포함하는 플래시 백본, 복수의 커널을 실행하는 복수의 프로세서, 메모리 시스템, 관리 프로세서, 그리고 네트워크를 포함하는 플래시 기반 가속기가 제공된다. 상기 메모리 시스템은, 각 커널의 데이터 섹션을 상기 플래시 메모리로 매핑하는데 사용되는 제1 메모리 및 상기 데이터 섹션에 의해 포인트되는 상기 제1 메모리의 영역에 매핑되는 워드 또는 바이트 기반 어드레스를 상기 플래시 메모리에서의 물리적 어드레스로 변환하기 위한 매핑 정보를 저장하는 제2 메모리를 포함한다. 상기 관리 프로세서는, 각 커널의 실행에 따라 상기 플래시 메모리에서 읽기 데이터를 읽는 경우, 상기 매핑 정보에 기초해서 상기 워드 또는 바이트 기반 어드레스를 상기 플래시 메모리에서의 물리적 어드레스로 변환하고, 상기 플래시 메모리로부터 상기 읽기 데이터를 상기 제1 메모리의 영역으로 이동시키도록 메모리 요청을 상기 플래시 컨트롤러로 전달한다. 상기 네트워크는 상기 플래시 백본, 상기 메모리 시스템, 상기 복수의 프로세서 및 상기 관리 프로세서를 통합한다.
상기 호스트의 OS의 도움 없이 상기 제1 메모리와 상기 플래시 메모리 사이에서 상기 제1 데이터가 이동될 수 있다.
전형적인 컴퓨팅 장치에서 사용하는 명령어 세트 아키텍처의 변경 없이 상기 제1 메모리와 상기 플래시 메모리 사이에서 상기 제1 데이터가 이동될 수 있다.
각 프로세서는 전형적인 로드/저장 명령어의 변경 없이 상기 메모리 요청을 통해 상기 플래시 백본에 액세스할 수 있다.
본 발명의 한 실시예에 따르면, 복수의 프로세서와 플래시 기반 비휘발성 메모리를 물리적으로 통합하여서 플래시 기반 가속기를 형성함으로써, 데이터 복사/이동에 따른 오버헤드를 줄일 수 있다. 또한 복수의 프로세서와 플래시 기반 비휘발성 메모리가 통합함으로써 다양한 커널을 호스트의 운영 체제의 도움 없이 플래시 기반 가속기에 실행할 수 있으며, 커널 실행 시에 프로세서가 직접 플래시 기반 비휘발성 메모리에 접근할 수 있다.
도 1은 본 발명의 한 실시예에 따른 컴퓨팅 디바이스의 개략적인 블록도이다.
도 2는 전형적인 컴퓨팅 디바이스에서의 물리적 데이터 경로를 나타내는 도면이다.
도 3은 전형적인 컴퓨팅 디바이스에서의 소프트웨어 스택을 나타내는 도면이다.
도 4는 전형적인 컴퓨팅 디바이스의 가속기에서의 커널 실행 모델을 나타내는 도면이다.
도 5는 본 발명의 한 실시예에 따른 가속기의 개략적인 블록도이다.
도 6은 도 5에 도시한 가속기에서 LWP의 개략적인 블록도이다.
도 7은 본 발명의 한 실시예에 따른 가속기에서의 하나의 어플리케이션에 포함된 다중 커널 실행을 나타내는 도면이다.
도 8은 본 발명의 한 실시예에 따른 가속기에서의 복수의 어플리케이션에 포함된 다중 커널 실행을 나타내는 도면이다.
도 9는 본 발명의 한 실시예에 따른 플래시 기반 가속기에서의 커널 오프로드를 설명하는 도면이다.
도 10은 본 발명의 한 실시예에 따른 플래시 기반 가속기에서의 읽기 과정을 설명하는 도면이다.
도 11은 본 발명의 한 실시예에 따른 플래시 기반 가속기에서의 쓰기 과정을 설명하는 도면이다.
도 12는 두 개의 어플리케이션의 한 예를 나타내는 도면이다.
도 13은 정적 커널간 스케줄링의 한 예를 나타내는 도면이다.
도 14는 동적 커널간 스케줄링의 한 예를 나타내는 도면이다.
도 15는 커널의 한 예를 나타내는 도면이다.
도 16은 두 개의 어플리케이션의 다른 예를 나타내는 도면이다.
도 17은 인오더 커널내 스케줄링의 한 예를 나타내는 도면이다.
도 18은 아웃오브오더 커널내 스케줄링의 한 예를 나타내는 도면이다.
도 19는 다중 어플리케이션 실행 체인을 나타내는 도면이다.
도 2는 전형적인 컴퓨팅 디바이스에서의 물리적 데이터 경로를 나타내는 도면이다.
도 3은 전형적인 컴퓨팅 디바이스에서의 소프트웨어 스택을 나타내는 도면이다.
도 4는 전형적인 컴퓨팅 디바이스의 가속기에서의 커널 실행 모델을 나타내는 도면이다.
도 5는 본 발명의 한 실시예에 따른 가속기의 개략적인 블록도이다.
도 6은 도 5에 도시한 가속기에서 LWP의 개략적인 블록도이다.
도 7은 본 발명의 한 실시예에 따른 가속기에서의 하나의 어플리케이션에 포함된 다중 커널 실행을 나타내는 도면이다.
도 8은 본 발명의 한 실시예에 따른 가속기에서의 복수의 어플리케이션에 포함된 다중 커널 실행을 나타내는 도면이다.
도 9는 본 발명의 한 실시예에 따른 플래시 기반 가속기에서의 커널 오프로드를 설명하는 도면이다.
도 10은 본 발명의 한 실시예에 따른 플래시 기반 가속기에서의 읽기 과정을 설명하는 도면이다.
도 11은 본 발명의 한 실시예에 따른 플래시 기반 가속기에서의 쓰기 과정을 설명하는 도면이다.
도 12는 두 개의 어플리케이션의 한 예를 나타내는 도면이다.
도 13은 정적 커널간 스케줄링의 한 예를 나타내는 도면이다.
도 14는 동적 커널간 스케줄링의 한 예를 나타내는 도면이다.
도 15는 커널의 한 예를 나타내는 도면이다.
도 16은 두 개의 어플리케이션의 다른 예를 나타내는 도면이다.
도 17은 인오더 커널내 스케줄링의 한 예를 나타내는 도면이다.
도 18은 아웃오브오더 커널내 스케줄링의 한 예를 나타내는 도면이다.
도 19는 다중 어플리케이션 실행 체인을 나타내는 도면이다.
아래에서는 첨부한 도면을 참고로 하여 본 발명의 실시예에 대하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에 한정되지 않는다. 그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
도 1은 본 발명의 한 실시예에 따른 컴퓨팅 디바이스의 개략적인 블록도이다. 도 1은 가능한 컴퓨팅 디바이스의 한 예이며, 본 발명의 실시예에 따른 컴퓨팅 디바이스의 다른 다양한 구조로 구현될 수 있다.
도 1을 참고하면, 본 발명의 한 실시예에 따른 컴퓨팅 디바이스는 CPU(100), CPU측 메모리(200) 및 플래시 기반 가속기(accelerator)(300)를 포함한다. 가속기(300)는 범용 CPU와는 다른 보조 데이터 프로세싱 디바이스로서, CPU의 기능을 보조하여서 데이터 프로세싱을 수행하거나 CPU와 별도로 데이터 프로세싱을 수행할 수 있는 컴퓨터 하드웨어일 수 있다. 이러한 가속기(300)는 멀티프로세서(multiprocessors) 기반 가속기이며, 한 예로 그래픽 처리 유닛(graphic processing unit, GPU), MIC(many integrated core) 디바이스 등이 있다.
컴퓨팅 디바이스는 메모리(200)와 가속기(300)를 CPU(100)와 연결하기 위해서 노스브릿지(northbridge)(400)를 더 포함할 수 있다. 가속기(300)는 CPU(100) 측에 위치한 노스브릿지(400)에 연결된다. 예를 들면, 가속기(300)는 PCIe(peripheral component interconnect express) 인터페이스를 통해서 노스브릿지(400)에 연결될 수 있다. 노스브릿지(400)는 메모리 컨트롤러 허브(memory controller hub, MCH)로 불리기도 한다.
전형적인 가속기의 경우 병렬 처리를 위한 복수의 프로세서만 포함하지만, 본 발명의 한 실시예에 따른 가속기(300)는 플래시 기반의 가속기로서, 가속기의 코어에 해당하는 복수의 프로세서(310)에 플래시 메모리(320)를 물리적으로 통합한 데이터 처리 장치이다. 따라서 가속기(300)는 통합된 프로세서(310)와 플래시 메모리(320)를 사용해서 이기종 컴퓨팅 및 데이터 저장을 자체적으로 제어할 수 있다.
어떤 실시예에서 가속기(300)의 각 프로세서로 경량 프로세서(light-weight processor, LWP)가 사용될 수 있다. 한 실시예에서 LWP는 고속 네트워크를 통해 연결되는 저전력 프로세서일 수 있다. 이 경우, 고속 네트워크를 통해 LWP는 가속기(300) 내의 가속기 컨트롤러 및 플래시 메모리와 같은 다른 내부 자원과 통신할 수 있다. 앞으로 설명의 편의상 가속기(300)의 각 프로세서를 LWP로 설명한다.
어떤 실시예에서, CPU(100) 및 메모리(200)를 포함하는 시스템을 호스트(host)라 할 수 있다.
컴퓨팅 디바이스는 다양한 어플리케이션을 가속기(300)에 오프로드(offload)하여서 가속기(300)가 해당 어플리케이션의 커널을 직접 실행할 수 있다. 따라서 호스트는 커널을 오프로드하거나 데이터의 읽기/쓰기(write/read)를 처리하기 위해서 가속기(300)에 접근할 수 있다. 이 경우, 가속기(300)의 프로세서는 커널을 실행하면서 가속기(300)의 플래시 메모리에 직접 접근할 수 있으므로, 종래의 가속기가 외부에 존재하는 비휘발성 메모리로부터 데이터를 읽거나 비휘발성 메모리로 데이터를 쓰기 위해서 필요한 많은 메모리 할당/해제 및 데이터 복사가 필요 없게 된다.
먼저, 도 2 내지 도 4를 참고로 하여 전형적인 컴퓨팅 디바이스에서의 문제점에 대해서 설명한다.
도 2는 전형적인 컴퓨팅 디바이스에서의 물리적 데이터 경로를 나타내는 도면이며, 도 3은 전형적인 컴퓨팅 디바이스에서의 소프트웨어 스택을 나타내는 도면이고, 도 4는 전형적인 컴퓨팅 디바이스의 가속기에서의 커널 실행 모델을 나타내는 도면이다.
도 2를 참고하면, 가속기가 많은 양의 데이터를 처리하는 경우, CPU(21)는 I/O 요청을 생성하고 노스브릿지(22)에 연결된 I/O 컨트롤러(23)를 통해 SSD(24)로 I/O 요청을 전달한다(S21). 다음, SSD(24)의 컨트롤러는 플래시 메모리에서 내부 DRAM으로 데이터를 이동하고, 호스트 컨트롤러는 스토리지 인터페이스를 통해 SSD(24)의 내부 DRAM에서 호스트 측 DRAM(25)으로 데이터를 이동한다(S22). 이 시간 동안, 데이터는 가속기(26)가 인식할 수 있는 객체의 형태로 재구성 및 마샬링(marshaling)될 수 있다. 다음, CPU(21)는 호스트 측 DRAM(24)의 데이터를 PCIe 인터페이스를 통해 가속기(26)의 내부 DRAM(26a)으로 전송한다(S23). 이 시점에서, 입력 데이터가 전송 중이어서 아직 처리할 준비가 되지 않았으므로, 가속기의 모든 커널 실행은 정지 상태이다. 데이터가 가속기(26)의 DRAM(26a)으로 성공적으로 다운로드되면, 가속기의 임베디드 멀티코어 프로세서(EMP)(26b)가 데이터 처리를 시작하고, 데이터 처리 결과는 입력 데이터 로딩 절차의 역순으로 SSD(24)로 전달된다.
이 경우, 데이터는 서로 다른 물리적 인터페이스 경계를 ????넘나 들면서 이동하므로, 가속기가 실제로 데이터를 처리하기 시작하기 전에 대기 시간이 길어지고 불필요한 메모리 복사로 인해 많은 양의 에너지가 낭비될 수 있다. 또한 이러한 물리적 데이터 경로가 커널 실행을 위한 병렬 처리 수준을 저하시킬 수 있다. 예를 들면, 가속기의 DRAM 용량 제한 때문에 단일 어플리케이션 작업이 여러 커널로 분할되어서 실행이 직렬화될 수 있으므로, 병렬 처리 수준이 저하될 수 있다.
또한 전형적인 컴퓨팅의 소프트웨어 스택은 각각 가속기(35)와 SSD(38) 용으로 존재한다. 도 3을 참고하면, 호스트는 가속기용 소프트웨어 스택으로 가속기 드라이버(즉, 장치 드라이버)(37)와 가속기 런타임 라이브러리(36)를 사용하며, 플래시 펌웨어(34), 호스트 블록 어댑터(HBA) 드라이버(33), 파일 시스템(32) 및 I/O 런타임 라이브러리(31)를 소프트웨어 스택으로 사용하여서 SSD(35)를 스토리지로 인식한다. 가속기 및 I/O 런타임 라이브러리(36, 31)는 사용자 공간에 제공되며, 사용자 어플리케이션(30)이 파일을 서비스하거나 데이터 처리를 적절하게 오프로드할 수 있도록 다양한 인터페이스 세트를 제공한다. 커널 공간에 제공되는 가속기 드라이버)(37)와 HBA 드라이버(33)는 장치(가속기 및 SSD) 측 DRAM과 호스트 측 DRAM 사이에 데이터를 전송하는 데 사용된다. 그러므로 사용자 어플리케이션(30)은 먼저 I/O 런타임 라이브러리(31)를 통해 SSD(35)에 데이터를 요청한 다음(S31), 가속기 런타임 라이브러리(36)를 통해 가속기에 데이터를 쓸 수 있다(S33). 이 동작으로 인해 호스트 측 DRAM 내부에서 다수의 데이터 복사가 발생할 수 있다(S32). 또한 커널 공간에 제공되는 파일 시스템(32) 및 가속기 드라이버(37)가 어플리케이션(30)에서 데이터를 수신할 때, 사용자 버퍼에서 OS 커널 버퍼로 모든 데이터가 복사되므로, 호스트 측 DRAM 내에서 불필요한 데이터 복사가 다시 발생할 수 있다(S32). 이는 현재의 OS 커널 모듈이 I/O 요청이 시작된 프로세스에서 실행된다는 보장이 없어서 OS 커널 모듈이 사용자 메모리 공간에 직접 액세스할 수 없기 때문이다. 호스트 측 DRAM 내에서의 불필요한 데이터 복사 외에도 서로 다른 소프트웨어 스택은 런타임 라이브러리와 OS 커널 드라이버간에 많은 사용자/커널 모드 스위치를 발생하므로, 데이터 이동 지연 및 에너지 소비가 증가할 수 있다.
도 4를 참고하면, 커널 실행 모델은 프롤로그(prologue), 바디(body) 및 에필로그(epilogue)의 3단계로 구현될 수 있다. 프롤로그에서, 데이터 처리 어플리케이션은 파일을 열고[fopen()], SSD에 메모리 자원을 할당하고[malloc()], 또한 가속기에도 메모리 자원을 할당한다[Acc-Malloc()]. 바디에서, 데이터 처리 어플리케이션은 파일의 일부를 읽고[fread()], 읽은 파일을 가속기에 할당된 메모리 자원으로 전달하여서[Acc-Memcpy()], 커널을 실행하고[Acc-kernel()], 가속기에서 결과를 얻고[Acc-Memcpy()], 결과를 다시 SSD에 기록하는[fwrite()] 코드 세그먼트를 반복한다. 에필로그에서, 데이터 처리 어플리케이션은, 바디 루프의 실행이 완료되면, 파일 자원을 해제하고[free()] 또한 메모리 자원을 해제하여서[Acc-Free()] 종료한다[fclose()].
이 경우, fopen(), malloc(), fread(), fwrite(), free(), fclose() 등의 코드는 I/O 런타임으로 실행되고, Acc-Malloc(),Acc-Memcpy(), Acc-kernel(), Acc-Free() 등의 코드는 가속기 런타임으로 실행될 수 있다.
이러한 커널 실행 모델에서, 어플리케이션의 파일 액세스는 서로 다른 소프트웨어 런타임 라이브러리 및 스택을 거치므로, 실제 계산이 시작되기 전에 상당한 오버헤드가 발생하여 시스템 성능이 저하될 수 있다. 또한 각 커널의 데이터 처리 능력은 가속기 측 DRAM의 크기에 의해 제한되는 경우가 많으므로, 작업이 여러 기능으로 분할되어 직렬로 실행되어 병렬 처리 수준이 저하될 수 있다.
다음 본 발명의 한 실시예에 따른 가속기에 대해서 도 5 및 도 6을 참고로 하여 설명한다.
도 5는 본 발명의 한 실시예에 따른 가속기의 개략적인 블록도이며, 도 6은 도 5에 도시한 가속기에서 LWP의 개략적인 블록도이다.
도 5를 참고하면, 가속기(300)는 복수의 LWP(LWP0-LWPn)(310), 메모리 시스템(320), 네트워크(330), 플래시 백본(340) 및 가속기 컨트롤러(350)를 포함한다.
각 LWP(310)는 데이터 처리를 수행하는 가속기(300)의 코어에 해당한다. 복수의 LWP(310)는 네트워크(330), 예를 들면 크로스바 네트워크를 거쳐 모두 연결되어 있다. 복수의 LWP(310)는 네트워크에 연결된 하드웨어 큐(360)와 협력해서 구현된 메시지 큐 인터페이스를 통해 서로 통신할 수 있다. 어떤 실시예에서, LWP(310)는 긴 명령어 워드(very long instruction word, VLIW) 아키텍처 상에 설치될 수 있다.
도 6을 참고하면, 각 LWP(310)는 복수의 기능 유닛(functional units, FUs), 예를 들면 8개의 기능 유닛을 포함할 수 있다. 복수의 기능 유닛은 곱셈 기능 유닛(FU0, FU4), 로드/저장(load/store) 기능 유닛(FU1, FU5) 및 범용 프로세싱 기능 유닛(FU2, FU3, FU6, FU7)을 포함할 수 있다. 도 6에서는 8개의 기능 유닛이 두 개의 곱셈 기능 유닛(FU0, FU4), 두 개의 로드/저장 기능 유닛(FU1, FU5) 및 네 개의 범용 프로세싱 기능 유닛(FU2, FU3, FU6, FU7)를 포함하는 예를 도시하였다. 각 LWP(310)는 복수의 레지스터 파일, 예를 들면 두 개의 레지스터 파일(Reg0, Reg1)을 더 포함할 수 있다. 이 경우, 곱셈 기능 유닛(FU0), 로드/저장 기능 유닛(FU1) 및 범용 프로세싱 기능 유닛(FU2, FU3)는 대응하는 레지스터 파일(Reg0)에 연결되고, 곱셈 기능 유닛(FU4), 로드/저장 기능 유닛(FU5) 및 범용 프로세싱 기능 유닛(FU6, FU7)는 대응하는 레지스터 파일(Reg1)에 연결될 수 있다. 또한 두 레지스터 파일(Reg0, Reg1)도 서로 연결되어 있을 수 있다. 이에 따라 가속기의 하드웨어 복잡성을 줄이면서 저전력 데이터 처리 어플리케이션의 다양한 요구를 충족시킬 수 있다.
또한 모든 LWP(310)는 단일 메모리 어드레스 공간을 공유할 수 있으며, 각 LWP(310)는 캐시를 더 포함할 수 있다. 어떤 실시예에서, 캐시는 L1(level 1) 캐시와 L2(level 2) 캐시를 포함할 수 있으며, L1 캐시는 L1 명령어(L1 instruction, L1I) 캐시와 L1 데이터(L1 data, L1D) 캐시를 포함할 수 있다.
메모리 시스템(320)은 복수의 LWP(310)에 연결되는 복수의 다른 메모리 시스템, 예를 들면 제1 메모리(321) 및 제2 메모리(322)를 포함한다. 한 실시예에서, 메모리 시스템(320)은 페이지 단위, 예를 들면 4KB 내지 16KB 단위의 페이지 단위로만 데이터를 읽고 쓸 수 있는 플래시와 워드(word)나 바이트(byte) 단위로 데이터를 읽고 쓸 수 있는 LWP(310) 사이에서 버퍼 메모리로 동작할 수 있다. 이 경우, 제1 메모리(321)는 워드나 바이트 단위의 접근을 허용하는 메모리일 수 있다.
어떤 실시예에서, 제1 메모리(321)는 예를 들면 동적 랜덤 액세스 메모리(dynamic random access memory, DRAM)와 같은 저전력 메모리일 수 있다. 예를 들면, DRAM으로 DDR3L(DDR3 low voltage) SDRAM(synchronous DRAM)이 사용될 수 있다. 제1 메모리(321)는 각 커널의 데이터 섹션을 플래시 메모리에 매핑하여 플래시 메모리 액세스에 의한 긴 대기 시간을 숨기는데 사용될 수 있다. 또한 제1 메모리(321)는 플래시 백본(340)으로 향하는 I/O 요청을 모을 수 있고, 플래시 메모리로의 쓰기를 버퍼링하여서 기존의 SSD 내부 캐시의 역할을 대신할 수 있다. 제2 메모리(322)는 빠른 처리를 위해서 사용되는 메모리로, 예를 들면 스크래치패드 메모리(scratchpad memory, SPM)일 수 있다. 스크래치패드 메모리는 예를 들면 복수의 고속 정적 랜덤 액세스 메모리(static random access memory, SRAM) 뱅크로 이루어질 수 있다. 제2 메모리(322)는 플래시 가상화에 대한 관리 I/O 요청과 저장된 항목을 빠르게 처리할 수 있다.
네트워크(330)는 LWP(310), 메모리 시스템(320) 및 플래시 백본(340)을 연결한다. 어떤 실시예에서, 네트워크(330)는 두 세트의 크로스바 구성(crossbar configuration)(331, 332)으로 분리되는 부분 크로스바 스위치(partial crossbar switch)일 수 있다. 두 세트의 크로스바 구성(331, 332)은 스트리밍 크로스바(streaming crossbar (tier-1))(331)과 다중 간소화된 크로스바(multiple simplified-crossbars (tier-2))(332)일 수 있다. 한 실시예에서, 티어 1(tier-1) 네트워크(331)가 복수의 LWP(310)와 메모리 시스템(320)에 연결되며, 고성능용으로 설계되어 복수의 LWP(310)와 메모리 시스템(320)를 통합할 수 있다. 티어 2(tier-2) 네트워크(332)는 플래시 백본(340)에 연결되며, 메자닌 카드(mezzanine card)(333), 예를 들면 AMC(advanced mezzanine card)를 통해 플래시 백본(340)의 메자닌 카드(343), 예를 들면 FMC(FPGA mezzanine card)에 연결될 수 있다. 이 경우, 티어 2 네트워크(332)의 AMC(333)와 플래시 백본(340)의 FMC(343)는 복수의 SRIO(Serial RapidIO) 레인, 예를 들면 4개의 SRIO 레인(lane)(334)을 통해 연결될 수 있다. 이러한 티어 2(tier-2) 네트워크(332)는 AMC와 인터페이스(예를 들면 PCIe 인터페이스)가 드러내는 성능을 수용하기에 충분한 수율을 가질 수 있다.
플래시 백본(340)은 플래시 메모리(341)와 플래시 컨트롤러(342)를 포함한다. 플래시 메모리(341)는 복수의 플래시 패키지(flash packages)를 포함할 수 있다. 한 실시예에서, 플래시 메모리(341)는 복수의 플래시 채널을 포함하고, 각 플래시 채널이 복수의 플래시 패키지를 포함할 수 있다. 플래시 컨트롤러(342)는 입력되는 I/O 요청을 플래시 클럭 도메인으로 변환하며, FPGA(field-programmable gate array) 기반의 컨트롤러일 수 있다. 한 실시예에서, 플래시 컨트롤러(342)는 각 플래시 채널에 대해서 제공될 수 있다. 한 실시예에서, 플래시 컨트롤러(342)는 인바운드 및 아웃바운드 "태그" 큐를 구현해서 요청을 버퍼링하는 데 사용할 수 있다. 플래시 컨트롤러(342)는 플래시 트랜잭션을 처리하고 네트워크(330)에서 플래시 메모리로 데이터를 전달할 수 있다. 이에 따라 플래시 펌웨어의 역할을 최소화할 수 있다.
가속기 컨트롤러(350)는 호스트에 연결된 인터페이스를 통해 호스트와 가속기(300) 사이의 통신을 관리한다. 어떤 실시예에서, 가속기(300)가 PCIe 인터페이스를 통해서 호스트, 예를 들면 노스브릿지(400)에 연결되는 경우, 가속기 컨트롤러(350)는 PCIe 컨트롤러일 수 있다.
어떤 실시예에서, 가속기(300)는 파워/슬립 컨트롤러(power/sleep controller, PSC)(370)를 더 포함할 수 있다. PSC(370)는 아래에서 설명한 관리 LWP의 제어에 따라 다른 LWP(310)의 모드를 제어할 수 있다. 즉, 관리 LWP는 PSC(370)를 통해 각 LWP(310)를 슬립 모드(또는 휴지 모드라 함)에 넣든지, 슬립 모드에서 깨울 수 있다.
다음, 본 발명의 한 실시예에 따른 가속기에서의 커널 실행에 대해서 개략적으로 설명한다.
도 7은 본 발명의 한 실시예에 따른 가속기에서의 하나의 어플리케이션에 포함된 다중 커널 실행을 나타내는 도면이고, 도 8은 본 발명의 한 실시예에 따른 가속기에서의 복수의 어플리케이션에 포함된 다중 커널 실행을 나타내는 도면이다.
단일 명령어 다중 쓰레드(single instruction multiple threads, SIMT) 모델을 사용하는 전통적인 가속기와 달리, 본 발명의 한 실시예에 따른 가속기의 복수의 LWP는 서로 다른 유형의 커널을 병렬로 실행할 수 있으며, 각 커널은 다양한 연산(operational) 기능을 포함할 수 있다. 따라서 사용자가 다양한 어플리케이션을 가속기에 오프로드할 수 있고, 가속기는 여러 데이터 처리를 동시에 수행할 수 있다. 이를 "다중 커널 실행(multi-kernel execution)"이라 한다.
한 실시예에서, 도 7에 도시한 것처럼, 하나의 어플리케이션(App)이 복수의 커널(Knl0, Kn1, Knl2)을 포함하고, 호스트는 이들 커널(Knl0, Kn1, Knl2)을 가속기에 오프로드하여 병렬로 실행할 수 있다. 다른 실시예에서, 도 8에 도시한 것처럼, 호스트는 서로 다른 어플리케이션(App0, App1, App2)과 연결된 복수의 커널(Knl00, Knl01, Knl02, Knl10, Knl11, Knl12, Knl20, Knl21, Knl22)을 가속기에 오프로드하여 병렬로 실행할 수 있다. 이러한 다중 커널 실행은 사용자가 플래시 근처에서보다 유연한 데이터 처리를 수행할 수 있도록 해 주며 기존 가속기보다 데이터 처리 효율성을 높일 수 있도록 한다.
어떤 실시예에서, 파일 및 런타임 시스템을 사용하지 않는 경우, 다중 커널 실행에 메모리 공간 관리, I/O 관리 및 리소스 보호를 포함한 몇 가지 기술적인 문제가 발생할 수 있다. 이러한 문제를 해결하기 위한 구현하기 쉬운 메커니즘은 플래시 펌웨어가 제공할 수 있는 일련의 맞춤형 인터페이스를 통해 플래시 메모리에서 데이터를 읽고 쓰는 것이다. 이 인터페이스는 일반적으로 대부분의 액티브 SSD 방식에서 채택되고 있다. 그러나 이러한 방식은 저전력 가속기 플랫폼에 부적합할 수 있으며, 특히, 커널은 서로 완전히 독립적이므로 플래시 펌웨어 인터페이스와 동적으로 링크될 수 없다. 또한, 액티브 SSD 방식은 플래시 인터페이스를 인식하여 기존의 모든 사용자 인터페이스를 수정해야 유연한 실행 모델이 될 수 있다는 문제점이 있다.
어떤 실시예에서, 여러 커널이 일련의 정적 펌웨어 인터페이스를 통해 플래시 펌웨어에 직접 액세스하는 것을 허용하는 대신, 플래시 어드레스 공간을 고려함으로써, 각 LWP의 데이터 섹션의 메모리 공간을 관리할 수 있도록 소정의 프로세서를 할당할 수 있다. 도 7 및 도 8에 도시한 것처럼, 이러한 소정의 프로세서(311)가 각 커널의 데이터 섹션을 물리적 플래시 메모리, 즉 플래시 백본(340)에 매핑하여서 플래시 백본(340)을 가상화할 수 있다. 어떤 실시예에서, 가속기에 포함되는 복수의 LWP 중에서 소정의 LWP가 소정의 프로세서(311)가 될 수 있다. 아래에서는 이러한 소정의 LWP(311)를 "관리 LWP"라 한다. 이에 따라 가속기의 LWP가 전형적인 컴퓨팅 장치에서 사용하는 명령어 세트 아키텍처(instruction set architecture), 즉 로드/저장 명령어(load/store instruction)의 변경이나 호스트 측 스토리지 스택의 도움 없이 관리 LWP의 메모리 요청을 통해 플래시 백본(340)의 플래시 메모리에 직접 액세스할 수 있다.
한 실시예에서, 관리 LWP(311)는 플래시 백본(340)의 물리적 페이지를 그룹화하여서 플래시 백본(340)의 논리적 어드레스 공간과 물리적 어드레스 공간을 관리하고, 논리적 어드레스를 커널의 데이터 섹션에 매핑할 수 있다. 한 실시예에서, 관리 LWP(311)는 플래시 백본(340)의 물리적 페이지를 서로 다른 플래시 채널 (및 서로 다른 다이(die))에 걸쳐 그룹화할 수 있다.
어떤 실시예에서, 매핑 정보는 스크래치패드 메모리(322)에 저장되고, 각 커널의 데이터 섹션과 관련된 데이터는 저전력 메모리(321)에 저장될 수 있다. 또한 관리 LWP(311)는 플래시 백본(340)의 물리적 어드레스 공간을 여러 커널의 실행으로부터 격리하고 보호할 수 있다. 한 실시예에서, 복수의 LWP 중에서 특정 LWP에 로드된 커널이 데이터 섹션에 액세스할 필요가 있을 때마다, 해당 커널은 관리 LWP에 메시지를 전달하여 타깃 데이터가 있는 논리적 어드레스 공간을 관리 LWP(311)가 알 수 있도록 할 수 있다. 그런 다음 관리 LWP(311)는 이러한 액세스의 권한을 확인하고, 액세스를 물리적 플래시 어드레스로 변환할 수 있다. 마지막으로 관리 LWP(311)는 플래시 백본(340)에 요청을 보내고 플래시 컨트롤러(341)는 요청에 해당하는 데이터를 저전력 메모리(321)로 가져올 수 있다. 한 실시예에서, 플래시 가상화에서 가비지 수집(garbage collection) 또는 메모리 덤프와 같은 시간 소모적인 작업이 다른 LWP에 의해 주기적으로 수행될 수 있다. 그러면 관리 LWP에 의한 플래시 관리에 따른 오버헤드를 해결할 수 있다.
다음 본 발명의 한 실시예에 따른 플래시 기반 가속기에서의 커널 실행에 대해서 도 9 내지 도 11을 참고로 하여 설명한다.
도 9는 본 발명의 한 실시예에 따른 플래시 기반 가속기에서의 커널 오프로드를 설명하는 도면이다.
사용자 어플리케이션은 하나 이상의 커널을 포함할 수 있다. 어떤 실시예에서, 커널은 커널 설명 테이블(kernel description table)이라고 하는 실행 가능 개체(executable object)로 표현될 수 있다. 한 실시예에서, 커널은 벤더가 제공하는 코드 생성 툴에 의해 컴파일될 수 있다. 한 실시예에서, 커널 설명 테이블은 ELF(executable and linkable format)의 변형일 수 있으며, 커널 코드(.text), 데이터 섹션(.ddr3_arr), 힙(.heap) 및 스택(.stack)과 같은 여러 섹션 정보가 포함된 실행 파일(executable)을 포함할 수 있다. 이러한 섹션들의 어드레스는 관리 LWP에서 관리하는, 데이터 섹션을 제외한, 각 LWP의 L2 캐시를 포인트할 수 있다.
도 9를 참고하면, 사용자 어플리케이션의 대상 커널은 인터페이스, 예를 들면 PCIe 인터페이스를 통해 호스트로부터 저전력 메모리(321)의 지정된 메모리 공간으로 오프로드된다(S910). 한 실시예에서, 인터페이스는 PCIe 인터페이스일 수 있다. 한 실시예에서, 호스트는 가속기 컨트롤러(도 5의 350), 예를 들면 PCIe 컨트롤러에 의해 대상 커널과 관련된 커널 설명 테이블을 인터페이스의 베이스 어드레스 레지스터(base address register, BAR), 예를 들면 PCIe BAR에 쓸 수 있다. 이러한 BAR은 저전력 메모리(321)에 매핑되어 있을 수 있다.
커널의 다운로드가 완료되면, 호스트는 인터럽트, 예를 들면 PCIe 인터럽트를 가속기 컨트롤러(350)에 발행하고(S920), 가속기 컨트롤러(350)는 인터럽트를 관리 LWP로 전달한다(S930). 그러면 관리 LWP는 다운로드한 커널의 저전력 메모리(321)의 어드레스를 복수의 LWP 중에서 대상 LWP의 특수 레지스터에 저장한다(S950). 어떤 실시예에서, 특수 레지스터는 부트 어드레스 레지스터(boot address register)일 수 있다. 어떤 실시예에서, 관리 LWP가 PSC(370)를 통해 대상 LWP를 슬립 모드로 설정한 후에(S940), 저전력 메모리(321)의 어드레스를 대상 LWP의 특수 레지스터에 저장할 수 있다.
다음, 관리 LWP는 대상 LWP의 프로세스 간(inter-process) 인터럽트 레지스터를 작성하여 대상 LWP의 특수 레지스터에 기록된 어드레스로 대상 LWP를 강제로 점프시킨다(S960). 어떤 실시예에서, 관리 LWP는 PSC(370)를 통해 대상 LWP를 슬립 모드에서 해제할 수 있다(S970). 그러면 대상 LWP가 지정된 커널을 로드하고 실행한다(S980). 이와 같이, 관리 LWP는 LWP 내에서 및/또는 여러 LWP에서 커널 실행 순서를 결정할 수 있다.
도 10은 본 발명의 한 실시예에 따른 플래시 기반 가속기에서의 읽기 과정을 설명하는 도면이며, 도 11은 본 발명의 한 실시예에 따른 플래시 기반 가속기에서의 쓰기 과정을 설명하는 도면이다.
도 10을 참고하면, 특정 LWP에 로드된 대상 커널(380)이 실행되어, 대상 커널(380)이 자신의 데이터 섹션에 접근할 때마다, 대상 커널(380)은 데이터 섹션을 플래시로 매핑하기 위한 데이터 섹션 매핑 요청을 관리 LWP(311)에 전달한다(S1010). 이 경우, 대상 커널(380)은 데이터 섹션 매핑 요청을 큐 메시지(queue message)로 전달할 수 있다. LWP 상의 커널은 자신의 데이터 섹션에 의해 포인트되는 저전력 메모리의 메모리 영역을 지정된 플래시 백본 어드레스에 매핑할 수 있다. 따라서, 대상 커널(380)은 큐 메시지를 관리 LWP(311)에 전달함으로써 대상 커널(380)의 각 데이터 섹션(예를 들면, 저전력 메모리 상의 입력 벡터)에 대한 플래시 매핑된 공간(flash-mapped space)을 알릴 수 있다. 즉, 관리 LWP(311)는 대상 데이터가 존재하는 논리적 어드레스 공간을 알 수 있다.
어떤 실시예에서, 큐 메시지는 요청 유형(예를 들면, 읽기 또는 쓰기), 데이터 섹션의 포인터 및 플래시 백본 어드레스를 포함할 수 있다. 한 실시예에서, 플래시 백본 어드레스는 플래시 백본의 워드 기반 어드레스(word-based address) 또는 바이트 기반 어드레스(byte-based address)일 수 있다. 한 실시예에서, 플래시 백본 어드레스는 대상 커널의 데이터 섹션의 메모리(즉, 저전력 메모리)에 매핑되어 있을 수 있다.
어떤 실시예에서, 큐 메시지의 요청 유형이 읽기 요청인 경우, 커널 실행에 의해 요청된 메모리 접근이 대상 LWP의 캐시, 예를 들면 L1 캐시에서 미스(miss)가 난 경우, 대상 커널은 큐 메시지를 관리 LWP에 전달할 수 있다.
관리 LWP(311)는 큐 메시지에 포함된 워드 또는 바이트 기반의 플래시 백본 어드레스를 페이지 기반의 플래시 어드레스로 변환한다(1030). 한 실시예에서, 관리 LWP(311)는 스크래치패드 메모리(322)에 저장된 페이지 매핑 테이블을 참조하여서 플래시 백본 어드레스를 플래시 어드레스로 변환할 수 있다.
어떤 실시예에서, 관리 LWP(311)는 플래시 백본 어드레스로부터 논리적 페이지 그룹 번호를 계산할 수 있다. 한 실시예에서, 관리 LWP(311)는 플래시 백본 어드레스를 플래시 백본의 채널 번호(Ch#)와 논리적 페이지 그룹 번호(Page group#)로 분리할 수 있다. 요청 유형이 읽기인 경우, 관리 LWP(311)는 페이지 그룹 번호를 인덱스로 사용하여서 스크래치패드 메모리(322)에 저장된 페이지 매핑 테이블(322a)을 참조하여, 물리적 페이지 그룹 번호가 포함되어 있는 페이지 매핑 테이블 항목을 검색할 수 있다. 이에 따라, 플래시 백본 어드레스가 물리적 페이지 그룹 번호로 변환될 수 있다. 다음, 관리 LWP(311)는 변환된 물리적 페이지 그룹 번호로부터 패키지 인덱스와 해당하는 패키지에서의 페이지 번호를 계산할 수 있다. 또는 복수의 채널에서의 패키지로 웨이(way)를 형성한 경우, 관리 LWP(311)는 변환된 물리적 페이지 그룹 번호로부터 웨이 인덱스와 해당하는 웨이에 포함된 각 패키지에서의 페이지 번호를 계산할 수 있다.
다음, 관리 LWP(311)는 플래시 백본(340)을 대상으로 하는 메모리 요청을 작성한 후에, 메모리 요청, 즉 I/O 요청을 플래시 백본(340)의 플래시 컨트롤러로 넘긴다(S1040). 메모리 요청은 물리적 플래시 어드레스를 포함할 수 있다. 이에 따라 플래시 컨트롤러가 물리적 플래시 어드레스, 즉 페이지 기반의 플래시 어드레스에 해당하는 플래시 메모리로부터 데이터를 읽어서 저전력 메모리(321)로 전달한다(S1050). 어떤 실시예에서, 해당 데이터는 큐 메시지에 포함된 데이터 섹션의 포인터에 의해 포인트되는 저전력 메모리(321)의 어드레스에 저장될 수 있다. 이 경우, 직접 메모리 액세스(direct memory access, DMA)를 통해 플래시 백본(340)의 플래시 메모리로부터 저전력 메모리(321)로 데이터가 이동될 수 있다. 대상 LWP는 저전력 메모리(321)에서 해당 데이터를 캐시, 예를 들면 L1 캐시로 읽어 들일 수 있다(S1060).
이와 같이, 각 커널은 관리 LWP(311)를 통해 플래시 백본(340)에 액세스할 수 있으므로, 플래시 컨트롤러와 플래시 근처의 데이터를 처리하는 다른 LWP 사이에는 직접적인 데이터 경로가 없다. 플래시 백본(340)과 관련된 요청은 관리 LWP(311)에서 제어되므로, 관리 LWP(311)가 플래시 백본(340)을 보호할 필요가 있다. 관리 LWP(311)가 플래시 백본(340)을 보호하기 위해서, 관리 LWP(311)가 각 페이지에 대한 권한 정보와 소유자의 커널 번호를 페이지 매핑 테이블 항목에 추가할 수 있다. 그런데 가속기의 페이지 매핑 테이블은 영구 저장소인 스크래치패드 메모리에 쓰여지고 가비지 수집(garbage collection)과 같은 플래시 I/O 서비스로 인해 주기적으로 업데이트된다. 따라서 권한 정보와 소유자의 커널 번호와 같은 임시 정보가 페이지 매핑 테이블에 추가되면, 가상화 시스템이 복잡해져서 전반적인 시스템 성능이 저하되고 플래시의 수명이 단축될 수 있다. 따라서 어떤 실시예에서, 플래시 백본(340)을 보호하기 위해서 잠금 메커니즘이 사용될 수 있다.
한 실시예에서, 가속기는 데이터 섹션에 대해 범위 잠금(range lock)을 사용할 수 있다. 이 경우, 데이터 섹션 매핑 요청, 즉 큐 메시지를 수신한 경우(S1010), 관리 LWP(311)는 큐 메시지의 요청 유형을 고려하여 플래시 백본 어드레스의 범위가 다른 어드레스 영역과 겹치면, 데이터 섹션 매핑 요청을 차단할 수 있다(S1020). 예를 들면, 요청 유형이 읽기인 경우(즉, 커널의 데이터 섹션이 읽기 용으로 플래시에 매핑되는 경우), 플래시 백본 어드레스가 다른 커널에 의해 쓰기 용으로 사용 중이면, 관리 LWP(311)가 데이터 섹션 매핑 요청을 차단할 수 있다. 관리 LWP(311)는 플래시 백본 어드레스의 범위가 다른 어드레스 영역과 겹치지 않으면, 관리 LWP(311)는 플래시 백본 어드레스를 물리적 플래시 어드레스로 변환할 수 있다(S1030).
한 실시예에서, 관리 LWP(311)는 레드 블랙 트리(red black tree) 구조를 사용하여 범위 잠금을 구현할 수 있다. 이 경우, 데이터 섹션 매핑 요청의 시작 페이지 번호가 키로 활용되고, 각 노드는 데이터 섹션의 마지막 페이지 번호 및 요청 유형으로 보강될 수 있다(augmented).
도 11을 참고하면, 대상 LWP가 대상 커널(380)의 실행에 따라 데이터 섹션이 쓰기 용으로 사용되는 경우, 대상 커널(380)은 저전력 메모리(321)에 데이터를 쓴다(S1110). 다음, 대상 커널(380)은 데이터 섹션을 플래시로 매핑하기 위한 데이터 섹션 매핑 요청을 관리 LWP(311)에 전달한다(S1120). 이 경우, 대상 커널(380)은 데이터 섹션 매핑 요청을 큐 메시지로 전달할 수 있다. 이 경우, 큐 메시지의 요청 유형은 쓰기일 수 있다.
관리 LWP(311)는 큐 메시지를 위해 새로운 페이지 그룹 번호를 할당하고, 플래시 백본(340)을 대상으로 하는 메모리 요청을 작성한 후에, 메모리 요청, 즉 I/O 요청을 플래시 백본(340)의 플래시 컨트롤러로 넘긴다(S1150). 어떤 실시예에서, 관리 LWP(311)는 할당한 물리적 페이지 그룹 번호로부터 페이지 기반의 플래시 어드레스를 계산하고, 이를 메모리 요청에 포함시킬 수 있다. 한 실시예에서, 새로운 페이지 그룹 번호에 매핑되는 논리적 페이지 그룹 번호가 페이지 매핑 테이블의 한 항목으로 저장될 수 있다(S1160). 즉, 관리 LWP(311)는 스크래치패드 메모리(322)에 저장된 페이지 매핑 테이블을 갱신하여서 새로운 페이지 그룹 번호에 해당하는 페이지 매핑 테이블 항목을 추가할 수 있다. 예를 들면, 큐 메시지에 포함된 워드 또는 바이트 기반 어드레스에 대응하는 논리적 페이지 그룹 번호가 새로운 페이지 그룹 번호에 매핑되는 것으로 저장될 수 있다. 이에 따라, 플래시 컨트롤러가 저전력 메모리(321)에 저장된 데이터 섹션의 데이터를 새로운 페이지 그룹 번호, 즉 물리적 플래시 어드레스에 해당하는 플래시 메모리에 저장할 수 있다.
어떤 실시예에서, 관리 LWP(311)는 사용 가능한 페이지 그룹 번호가 있는 경우, 이전 쓰기에 사용된 페이지 그룹 번호를 증가시켜서 새로운 페이지 그룹 번호를 할당할 수 있다. 사용 가능한 페이지 그룹 번호가 없는 경우, 관리 LWP(311)는 플래시 백본(340)으로부터 페이지 그룹을 회수(reclaim)할 수 있다(S1140). 어떤 실시예에서, 관리 LWP(311)는 페이지 그룹의 회수를 위해 물리 블록을 회수할 수 있다. 이 경우, 관리 LWP(311)는 회수를 위한 물리 블록에 대해서 소거(erase)를 수행하고, 회수한 물리 블록에 기초해서 페이지 그룹을 회수할 수 있다. 어떤 실시예에서, 관리 LWP는 확보된 물리 블록(또는 페이지 그룹)과 관련된 페이지 매핑 테이블 항목을 스크래치패드 메모리(322)에 저장된 페이지 매핑 테이블에서 갱신할 수 있다. 이에 따라, 플래시 컨트롤러가 저전력 메모리(321)에 저장된 데이터 섹션의 데이터를 확보된 페이지 그룹 번호에 해당하는 플래시 메모리에 저장할 수 있다. 한 실시예에서, 각 물리적 블록과 관련된 페이지 매핑 테이블 항목은 플래시 백본(340)의 물리 블록 내의 일부 페이지(예를 들면, 처음 두 페이지)에 메타데이터로서 저장될 수 있다.
어떤 실시예에서, 가속기는 데이터 섹션에 대해 범위 잠금을 사용할 수 있다. 이 경우, 데이터 섹션 매핑 요청, 즉 큐 메시지를 수신한 경우(S1120), 관리 LWP는 큐 메시지의 요청 유형을 고려하여 플래시 백본 어드레스의 범위가 다른 어드레스 영역과 겹치면, 데이터 섹션 매핑 요청을 차단할 수 있다(S1130). 예를 들면, 요청 유형이 쓰기인 경우(즉, 커널의 데이터 섹션이 쓰기 용으로 플래시에 매핑되는 경우), 플래시 백본 어드레스가 다른 커널에 의해 읽기 용으로 사용 중이면, 관리 LWP가 데이터 섹션 매핑 요청을 차단할 수 있다.
어떤 실시예에서, 복수의 LWP 중 스토리지 관리를 위해 별도의 LWP(312)가 할당될 수 있다. 앞으로, 이러한 LWP(312)를 "저장 LWP"라 한다. 관리 LWP(311)는 물리 블록을 회수하기 위한 요청을 저장 LWP(312)로 전달하고, 저장 LWP(312)가 플래시 백본(340)으로부터 물리 블록을 회수할 수 있다(S1140). 한 실시예에서, 저장 LWP(312)는 플래시 백본(340)의 플래시 어드레스 공간에서 희생(victim) 블록을 선택해서 물리 블록을 회수할 수 있다. 한 실시예에서, 저장 LWP(312)는 페이지 매핑 테이블의 모든 정보를 검색하는 대신 라운드 로빈(round robin) 방식을 기반으로 희생 블록 번호를 선택하고, 해당 블록에 있는 메타데이터 페이지만 로드할 수 있다. 메타데이터에 기초해서 희생 블록의 유효한 페이지가 빈 블록(예를 들면, 플래시 어드레스 공간의 끝에 있는 빈 블록)으로 마이그레이션될 수 있다. 희생 블록 선택이 완료되면, 희생 블록 및 마이그레이션된 블록과 관련된 페이지 매핑 테이블 항목이 스크래치패드 메모리(322)에서 갱신될 수 있다. 저장 LWP의 이러한 작업은 관리 LWP의 어드레스 변환과 병행하여 수행될 수 있으며, 특히 백그라운드에서 수행될 수 있다. 따라서 다중 커널 실행에서의 오버헤드를 줄일 수 있다.
한 실시예에서, 저장 LWP(312)는 스크래치패드 메모리(322)에 저장된 페이지 매핑 테이블 항목을 대응하는 블록의 소정 페이지(예를 들면, 처음 두 페이지)으로 주기적으로 넘길 수 있다. 즉, 저장 LWP(312)는 스크래치패드 메모리(322)의 스냅샷(snapshot)을 저널링(journaling)할 수 있다.
한 실시예에서, 위에서 설명한 저장 LWP(312)의 동작은 관리 LWP(311)의 어드레스 변환과 병행하여 수행될 수 있으며, 특히 백그라운드에서 수행될 수 있다. 따라서 저장 LWP(312)가 생성하는 어드레스 범위를 저널링 또는 블록 재요청을 위해 잠글 수 있지만, 이러한 동작도 백그라운드에서 수행되어서 커널 실행이나 어드레스 변환과 동시에 수행될 수 있다.
이와 같이, 본 발명의 한 실시예에 따른 가속기는 다양한 유형의 연산 기능을 사용하는 여러 애플리케이션의 데이터를 동시에 처리할 수 있으며, 호스트 레벨의 파일 시스템이나 I/O 런타임 라이브러리를 사용하지 않고도 여러 커널이 직접 플래시에 액세스할 수 있다. 또한 본 발명의 한 실시예에 따른 가속기는 호스트의 운영 체제(operating system, OS)의 도움 없이 내부 자원을 제어하여서 여러 커널이 직접 플래시에 액세스하도록 할 수 있다.
다음 본 발명의 한 실시예에 따른 플래시 기반 가속에서의 다중 커널 스케줄링에 대해서 도 12 내지 도 17을 참고로 하여 설명한다.
각각이 많은 기능을 포함하는 서로 다른 커널을 여러 LWP에서 실행하면, 부하 균형과 자원 경쟁과 같은 기술적 문제가 발생할 수 있다. 이러한 문제를 해결하기 위해 모든 내부 LWP 자원을 호스트에 노출하여 사용자가 모든 것을 자체적으로 제어할 수 있도록 할 수 있다. 그러나 이러한 방식은 권한이 없는 사용자가 내부 자원에 액세스하여 부적절한 사용이 발생할 수 있으므로, 심각한 보안 문제를 야기할 수 있다. 또한 이 방식은 외부에서 다양한 자원을 사용하기 위해 잦은 통신을 요구하므로, 또 다른 유형의 데이터 이동 오버헤드를 초래할 수 있다. 이에 따라, 본 발명의 한 실시예에 따르면, 다중 커널 실행 스케줄링을 위해서 커널간 실행 스케줄링(inter-kernel execution scheduling) 및 커널내 실행 스케줄링(intra-kernel execution scheduling)의 두 가지 다른 스케줄링 모델이 제공될 수 있다. 커널간 실행 스케줄링에서 각 LWP는 처음부터 끝까지 단일 명령 스트림으로 데이터 처리를 수행하는 특정 커널을 실행할 수 있다. 커널내 실행 스케줄링에서는 커널을 다중 코드 블록으로 분할하고, 입력 데이터 레이아웃에 기초해서 다중 LWP에 걸쳐 다중 코드 블록이 동시에 실행될 수 있다.
먼저 본 발명의 한 실시예에 따른 가속기에서의 커널간 실행 스케줄링에 대해서 도 12, 도 13 및 도 14를 참고로 하여 설명한다.
도 12는 두 개의 어플리케이션의 한 예를 나타내는 도면이고, 도 13은 정적 커널간 스케줄링의 한 예를 나타내는 도면이며, 도 14는 동적 커널간 스케줄링의 한 예를 나타내는 도면이다.
커널간 실행 스케줄링은 정적 커널간 스케줄링(static inter-kernel scheduling)과 동적 커널간 스케줄링(dynamic inter-kernel scheduling)으로 구분될 수 있다.
도 12에 도시한 예를 참고하면, 두 개의 사용자 어플리케이션(App0, App2)이 제공되고, 어플리케이션(App0)은 두 개의 커널(k0, k1)을 포함하며, 어플리케이션(App2)도 두 개의 커널(k2, k3)을 포함한다. 이때, 어플리케이션(App2)이 어플리케이션(App0)보다 가속기에 늦게 오프로드되어서 어플리케이션(App0)보다 늦게 스케줄링되는 것으로 가정한다.
한 실시예에 따른 정적 커널간 스케줄링에서는 호스트로부터 수신되는 커널이 해당 어플리케이션 번호에 기초해서 특정 LWP에 정적으로 할당된다. 예를 들어, 도 13을 참고하면, 정적 커널간 스케줄링에서, 관리 LWP는 어플리케이션(App0)과 연관된 커널(k0, k1)을 LWP(LWP0)에 정적으로 할당하고, 어플리케이션(App2)과 연관된 커널(k2, k3)을 LWP(LWP2)에 정적으로 할당할 수 있다. 호스트가 각 어플리케이션(App0 / App2)과 연관된 모든 커널(k0, k1 / k2, k3)을 발행하면, 커널의 모든 계산이 완료될 때까지 가속기는 호스트와 더 이상 통신할 필요가 없다.
이러한 정적 커널간 스케줄링은 다중 커널 실행 모들을 구현하고 관리하기 쉽다는 장점을 가지만, 커널 부하의 불균형으로 인해 자원 사용률이 저하될 수 있다. 예를 들면, 도 13의 예에서 다른 LWP(LWP1, LWP3)가 유휴 상태임에도 불구하고, 가속기는 먼저 발행된 커널(k0, k2)의 실행이 완료될 때까지 다른 커널(k1, k3)의 실행을 일시 중단해야 한다.
다른 실시예에 따른 동적 커널간 스케줄링에서는 정적 스케줄링의 열악한 자원 사용률 문제를 해결하기 위해서, 관리 LWP는 서로 다른 커널을 복수의 LWP에 동적으로 할당할 수 있다. 새로운 어플리케이션이 도착하면, 관리 LWP는 사용 가능한 LWP에 도착한 어플리케이션과 연관된 커널을 할당한다. 예를 들면, 관리 LWP는 도착한 어플리케이션과 연관된 커널을 라운드 로빈(round robin) 방식으로 모든 LWP에 할당할 수 있다. 각 LWP는 커널 실행 완료를 예를 들면 하드웨어 큐(도 5의 360)을 통해 관리 LWP에 알리고, 이에 따라 관리 LWP는 연속적으로 다음 커널을 해당 LWP에 할당할 수 있다. 예를 들면 도 14에 도시한 것처럼, 관리 LWP는 두 어플리케이션(App0, App2)의 커널(k0, k1, k2, k3)을 4개의 LWP(LWP0, LWP1, LWP2, LWP3)에 차례로 할당할 수 있다. 그러면 커널(k1, k3)이 커널(k0, k2)과 병렬로 실행될 수 있으므로, 정적 커널간 스케줄링에 비해 커널(k1, k3)의 대기 시간을 줄일 수 있다. 따라서 동적 커널간 스케줄링에서는 자원 사용율이 향상되고, 커널의 대기 시간을 줄일 수 있다.
다음, 본 발명의 한 실시예에 따른 가속기에서의 커널내 실행 스케줄링에 대해서 도 15, 도 16, 도 17, 도 18 및 도 19를 참고로 하여 설명한다.
도 15는 커널의 한 예를 나타내는 도면이고, 도 16은 두 개의 어플리케이션의 다른 예를 나타내는 도면이고, 도 17은 인오더 커널내 스케줄링의 한 예를 나타내는 도면이며, 도 18은 아웃오브오더 커널내 스케줄링의 한 예를 나타내는 도면이고, 도 19는 다중 어플리케이션 실행 체인을 나타내는 도면이다.
커널내 실행 스케줄링은 인오더 커널내 스케줄링(in-order intra-kernel scheduling)과 아웃오브오더 커널내 스케줄링(out-of-order intra-kernel scheduling)으로 구분될 수 있다.
실제 커널은 마이크로블록(microblock)으로 불리는 다중 코드 세그먼트 그룹으로 이루어질 수 있다. 각 그룹은 입력/출력 데이터에 실행 의존성을 가진다. 서로 다른 마이크로블록은 직렬로 실행되지만, 마이크로블록 내에 입력 벡터의 서로 다른 부분을 병렬로 실행될 수 있는 스크린이라 불리는 오퍼레이션이 있다. 서로 다른 스크린은 서로 다른 LWP에서 실행될 수 있다.
도 15에 도시한 예를 참고하면, 이 커널의 목표는 입력 벡터(_fict_)를 처리하여 최종 출력 벡터(hz)를 만드는 것이다. 마이크로블록 0(m0)에서, 커널은 먼저 입력 벡터인 1차원 어레이(_fict_)를 이차원 어레이(ey)로 변환한다. 다음, 커널은 마이크로블록 1(m1)에서 ey/hz 미분(differentials) 및 ex/hz 미분을 계산하여 각각 새로운 ey 및 ex 벡터를 준비한다. 다음, 커널은 마이크로블록 2(m2)에서 임시 벡터(ey, ex)를 사용하여 최종 출력 행렬(hz)을 계산한다. 마이크로블록 2(m2)에서 내부 루프 반복당 출력 벡터(hz)의 한 요소가 생성된다. 마이크로블록(m2)에서는 쓰기 후 쓰기(write-after-write) 또는 쓰기 후 읽기(read-after-write) 위험이 없으므로, 마이크로블록 2(m2)의 외부 루프를 네 개의 스크린으로 분할하여 병렬 실행을 위해 네 개의 LWP에 각각 할당할 수 있다.
도 16에 도시한 예를 참고하면, 두 개의 사용자 어플리케이션(App0, App2)이 제공되고, 어플리케이션(App0)은 두 개의 커널(k0, k1)을 포함하며, 어플리케이션(App2)도 두 개의 커널(k2, k3)을 포함한다. 또한 각 커널은 두 개의 마이크로블록, 즉 마이크로블록 0과 마이크로블록 1을 포함한다. 이 경우, 커널(k0)의 마이크로블록 0은 두 개의 스크린(s1, s2)을 포함하고, 커널(k0)의 마이크로블록 1은 두 개의 스크린(sa, sb)을 포함한다. 커널(k1)의 마이크로블록 0은 하나의 스크린(s1)을 포함하고, 커널(k1)의 마이크로블록 1은 하나의 스크린(sa)을 포함한다. 커널(k2)의 마이크로블록 0은 두 개의 스크린(s1, s2)을 포함하고, 커널(k2)의 마이크로블록 1은 하나의 스크린(sa)을 포함한다. 커널(k3)의 마이크로블록 0은 두 개의 스크린(s1, s2)을 포함하고, 커널(k3)의 마이크로블록 1은 하나의 스크린(sa, sb)을 포함한다.
한 실시예에 따른 인오더 커널내 스케줄링에서는 다양한 마이크로블록이 차례로 실행되고, 각 마이크로블록에 있는 모든 스크린이 서로 다른 LWP에 의해서 동시에 실행될 수 있다. 예를 들면 도 17에 도시한 것처럼, 커널(k0)의 마이크로블록 0의 스크린(s1, s2)이 T0 시간에서 실행된 후에, 커널(k0)의 마이크로블록 1의 스크린(sa, sb)이 T1 시간에서 실행되고, 이어서 T2 시간에서 커널(k1)의 마이크로블록 0의 스크린(s1)이 실행된 후에, 커널(k1)의 마이크로블록 1의 스크린(sa)이 T3 시간에서 실행될 수 있다. 이어서, T4 시간에서 커널(k2)의 마이크로블록 0의 스크린(s1, s2)이 실행된 후에, 커널(k2)의 마이크로블록 1의 스크린(sa)이 T5 시간에서 실행되고, 이어서 T6 시간에서 커널(k3)의 마이크로블록 0의 스크린(s1, s2)이 실행된 후에, 커널(k3)의 마이크로블록 1의 스크린(sa, sb)이 T7 시간에서 실행될 수 있다. 이때, 커널(k0)의 마이크로블록 0의 두 스크린(s1, s2)은 서로 다른 LWP(LWP0, LWP1)에 의해서 동시에 실행될 수 있다. 마찬가지로 동일한 커널의 동일한 마이크로블록의 복수의 스크린은 서로 다른 LWP에 의해 동시에 실행될 수 있다.
이와 같이 복수의 스크린이 동시에 실행되므로 하나의 커널의 스크린이 차례로 실행되는 커널간 실행 스케줄링에 비해서 실행 시간을 줄일 수 있다.
다른 실시예에 따른 아웃오브오더 커널내 스케줄링에서는, 인오더 커널내 스케줄링과 달리, 서로 다른 커널 및 서로 다른 마이크로블록과 연관된 많은 스크린을 순서에 관계 없이(out-of-order fashion) 실행할 수 있다. 즉, 어떤 시점에서 사용 가능한 LWP가 있다면, 아웃오브오더 커널내 스케줄링은 다른 커널 또는 다른 어플키케이션에 존재하는 다른 마이크로블록으로부터 스크린으로 가지고 와서 사용 가능한 LWP에 할당할 수 있다. 따라서 마이크로블록의 처리 지연을 줄일 수 있으며, 전체 시스템 성능을 향상시킬 수 있다.
도 17에 도시한 것처럼 시간 T0에서 두 개의 LWP(LWP2, LWP3)가 유휴 상태이므로, 도 18에 도시한 것처럼 시간 T0에 다른 마이크로블록의 스크린을 채울 수 있다. 예를 들면, 스케줄러는 커널(k1)의 마이크로블록 0의 스크린(s1)을 시간 T2에서 가지고 와서 시간 T0에서 LWP(LWP2)에 할당하여 실행할 수 있다. 마찬가지로, 스케줄러는 커널(k1)의 마이크로블록 1의 스크린(sa)을 시간 T3에서 가지고 와서 시간 T1에서 LWP(LWP2)에 할당하여 실행하고, 커널(k2)의 마이크로블록 0의 스크린(s1)을 시간 T4에서 가지고 와서 시간 T1에서 LWP(LWP3)에 할당하여 실행할 수 있다. 또한, 커널(k2)의 마이크로블록 0의 스크린(s2)과 커널(k3)의 마이크로블록 0의 스크린(s1, s2)가 시간 T2에서 각각 LWP(LWP0, LWP1, LWP2)에 할당되어 동시에 실행될 수 있으며, 커널(k2)의 마이크로블록 1의 스크린(sa)과 커널(k3)의 마이크로블록 1의 스크린(sa, sb)가 시간 T3에서 각각 LWP(LWP0, LWP1, LWP2)에 할당되어 동시에 실행될 수 있다. 따라서 커널의 대기 시간을 줄일 수 있다.
도 18의 예에 도시한 것처럼, 어떤 스크린은 이전 마이크로 블록의 모든 스크린이 완료되기 전에는 스케줄링되지 않는다. 가속기에서 이 규칙을 어플리케이션 별 데이터 의존성 정보를 포함하는 리스트인 다중 어플리케이션 실행 체인에서 관리할 수 있다. 도 19를 참고하면, 다중 어플리케이션 실행 체인의 루트는 복수의 포인터를 포함하며, 각 포인터는 어플리케이션(Appi)에 대응하며, 노드의 리스트를 지시할 수 있다. 노드 리스트는 마이크로블록에 대응하고, 리스트의 각 노드는 해당 마이크로블록의 스크린에 대응할 수 있다. 각 노드 리스트는 다음 마이크로블록의 노드 리스트를 지시할 수 있다. 각 노드는 스케줄링되는 LWP의 번호 및 실행 상태와 같은 일련의 마이크로블럭별 스크린 정보를 유지 관리할 수 있다. 이러한 노드의 순서는 다중 마이크로 블록 간의 데이터 의존 관계를 보여줄 수 있다.
한편, 본 발명의 한 실시예에 따른 가속기(300)를 실제 하드웨어에 구현하여서 성능을 측정한 결과에 대해서 설명한다.
아래 표 1에 나타낸 것처럼, 성능 측정에서 1GHz 클록에서 동작하고 64KB L1 캐시와 512KB L2 캐시를 가지는 8개의 LWP를 사용하고, 8개의 LWP 중 1개를 관리 LWP로 사용하고 다른 1개를 저장 LWP로 사용한다. 또한 메모리 시스템에서 스크래치패드 메모리로 4MB SRAM 기반 스크래치패드 메모리를 사용하고, 2GB의 DDR3L DRAM를 저전력 메모리로 사용한다. 또한 플래시 메모리로 16개의 플래시 다이(flash dies)를 사용한다.
구성요소 | 상세 | 작동 주파수 | 포트 폭 | 추정 대역폭 |
LWP | 8 processors | 1GHz | 128b | 16000MB/s |
L1/L2 캐시 | 64KB/512KB | 500MHz | 256b | 16000MB/s |
스크래치패드 메모리 |
4MB | 500MHz | 256b | 16000MB/s |
저전력 메모리 | DDR3L, 1GB | 800MHz | 64b | 6400MB/s |
플래시 | 16 dies, 32GB | 200MHz | 64b | 3200MB/s |
PCIe | v2.0, 2 lanes | 5GHz | 2b | 1024MB/s |
Tier-1 크로스바 | 256 lanes | 500MHz | 256b | 16000MB/s |
Tier-2 크로스바 | 128 lanes | 333MHz | 128b | 5328MB/s |
이 경우, 본 발명의 한 실시예에 따른 가속기는 이기종 컴퓨팅의 종래 방식에 비해서, 78.4%만큼 에너지 소모를 감소시키면서, 127%만큼 데이터 처리 대역폭을 향상시킬 수 있다.
이상에서 본 발명의 실시예에 대하여 상세하게 설명하였지만 본 발명의 권리범위는 이에 한정되는 것은 아니고 다음의 청구범위에서 정의하고 있는 본 발명의 기본 개념을 이용한 당업자의 여러 변형 및 개량 형태 또한 본 발명의 권리범위에 속하는 것이다.
Claims (20)
- 중앙 프로세싱 유닛(central processing unit, CPU)과 시스템 메모리를 포함하는 호스트에 연결되도록 구성되어 있으며, 상기 호스트에서 전달되는 커널을 실행하는 플래시 기반 가속기로서,
플래시 메모리 및 플래시 컨트롤러를 포함하는 플래시 백본,
복수의 커널을 실행하는 복수의 프로세서,
각 커널의 데이터 섹션을 상기 플래시 메모리로 매핑하는데 사용되는 제1 메모리를 포함하는 메모리 시스템,
상기 복수의 프로세서 중 제1 프로세서에서의 제1 커널의 실행에 따라 전달되는 제1 메시지를 기초로, 상기 제1 커널의 데이터 섹션이 포인트하는 상기 제1 메모리의 영역을 상기 플래시 메모리의 영역으로 매핑하여 상기 제1 메모리의 영역과 상기 플래시 메모리의 영역 사이에서 제1 데이터를 전달시키는 관리 프로세서, 그리고
상기 플래시 백본, 상기 메모리 시스템, 상기 복수의 프로세서 및 상기 관리 프로세서를 통합하는 네트워크
를 포함하는 플래시 기반 가속기. - 제1항에서,
상기 호스트의 운영 체제(operating system, OS)의 도움 없이 상기 제1 메모리와 상기 플래시 메모리 사이에서 상기 제1 데이터가 이동되는 플래시 기반 가속기. - 제1항에서,
전형적인 컴퓨팅 장치에서 사용하는 명령어 세트 아키텍처(instruction set architecture)의 변경 없이 상기 제1 메모리와 상기 플래시 메모리 사이에서 상기 제1 데이터가 이동되는 플래시 기반 가속기. - 제1항에서,
상기 관리 프로세서는 상기 플래시 메모리의 영역을 지시하는 메모리 요청을 상기 플래시 컨트롤러로 전달하고,
상기 플래시 컨트롤러가 상기 메모리 요청에 따라 상기 제1 메모리의 영역과 상기 플래시 메모리의 영역 사이에서 상기 제1 데이터를 전달하는 플래시 기반 가속기. - 제4항에서,
상기 제1 프로세서는 전형적인 로드/저장 명령어(load/store instruction)의 변경 없이 상기 메모리 요청을 통해 상기 플래시 백본에 액세스하는 플래시 기반 가속기. - 제1항에서,
상기 제1 커널이 상기 플래시 메모리로부터 상기 제1 데이터를 읽는 경우, 상기 제1 메시지는 상기 제1 커널의 데이터 섹션의 포인터와 워드 또는 바이트 기반 어드레스를 포함하며,
상기 관리 프로세서는 상기 워드 또는 바이트 기반 어드레스를 상기 플래시 메모리에서의 물리적 어드레스로 변환하며,
상기 메모리 시스템은 상기 워드 또는 바이트 기반 어드레스를 상기 플래시 메모리에서의 물리적 어드레스로 변환하기 위한 매핑 정보를 저장하는 제2 메모리를 더 포함하는
플래시 기반 가속기. - 제6항에서,
상기 매핑 정보는 상기 워드 또는 바이트 기반 어드레스에 대응하는 논리적 페이지 그룹 번호와 상기 물리적 어드레스에 대응하는 물리적 페이지 그룹 번호 사이의 매핑 정보를 포함하는 플래시 기반 가속기. - 제6항에서,
상기 워드 또는 바이트 기반 어드레스의 범위가 다른 커널에 의해 쓰기 용으로 사용되고 있는 어드레스의 범위와 겹치는 경우, 상기 관리 프로세서는 제1 메시지의 처리를 차단하는 플래시 기반 가속기. - 제6항에서,
상기 복수의 프로세서 중 제2 프로세서는 제2 커널의 실행에 따라 상기 플래시 메모리로 제2 데이터를 쓰기 위한 제2 메시지를 상기 관리 프로세서로 전달하고,
상기 제2 메시지는 상기 제2 커널의 데이터 섹션의 포인터를 포함하고,
상기 관리 프로세서는, 상기 제2 메시지를 위해 상기 플래시 메모리의 새로운 영역을 할당하여 상기 제2 커널의 데이터 섹션이 포인트하는 상기 제1 메모리의 영역에서 상기 플래시 메모리의 새로운 영역으로 상기 제2 데이터를 전달시키는
플래시 기반 가속기. - 제9항에서,
상기 관리 프로세서는 상기 플래시 메모리의 새로운 영역을 지시하는 메모리 요청을 상기 플래시 컨트롤러로 전달하고,
상기 플래시 컨트롤러가 상기 메모리 요청에 따라 상기 제2 커널의 데이터 섹션이 포인트하는 상기 제1 메모리의 영역에서 상기 플래시 메모리의 새로운 영역으로 상기 제2 데이터를 전달하는
플래시 기반 가속기. - 제9항에서,
상기 관리 프로세서는 상기 플래시 메모리의 새로운 영역에 대응하는 물리적 어드레스와 상기 제2 메시지에 포함된 워드 또는 바이트 기반 어드레스를 기초로 상기 매핑 정보를 갱신하는 플래시 기반 가속기. - 제9항에서,
상기 제2 메시지에 포함된 워드 또는 바이트 기반 어드레스의 범위가 다른 커널에 의해 읽기 용으로 사용되고 있는 어드레스의 범위와 겹치는 경우, 상기 관리 프로세서는 제2 메시지의 처리를 차단하는 플래시 기반 가속기. - 제9항에서,
상기 관리 프로세서는 이전 쓰기에 사용된 물리적 페이지 그룹 번호를 증가시켜서 상기 새로운 영역에 대응하는 물리적 페이지 그룹 번호를 할당하는 플래시 기반 가속기. - 제9항에서,
저장 프로세서를 더 포함하며,
상기 관리 프로세서는, 상기 플래시 메모리에서 사용 가능한 물리적 페이지 그룹 번호가 없는 경우, 상기 새로운 영역에 대응하는 물리적 페이지 그룹 번호를 할당하기 위해 물리 블록을 회수(reclaim)하기 위한 요청을 상기 저장 프로세서로 전달하고,
상기 저장 프로세서는 상기 플래시 메모리의 공간에서 희생(victim) 블록을 선택해서 상기 물리 블록을 회수하는
플래시 기반 가속기. - 제14항에서,
상기 저장 프로세서는 상기 제2 메모리의 스냅샷을 저널링하는 플래시 기반 가속기. - 제1항 내지 제15항 중 어느 한 항에 기재된 플래시 기반 가속기,
상기 호스트, 그리고
상기 플래시 기반 가속기를 상기 호스트에 연결하는 인터페이스
를 포함하는 컴퓨팅 디바이스. - 중앙 프로세싱 유닛(central processing unit, CPU)과 시스템 메모리를 포함하는 호스트에 연결되도록 구성되어 있으며, 상기 호스트에서 전달되는 커널을 실행하는 플래시 기반 가속기로서,
플래시 메모리 및 플래시 컨트롤러를 포함하는 플래시 백본,
복수의 커널을 실행하는 복수의 프로세서,
각 커널의 데이터 섹션을 상기 플래시 메모리로 매핑하는데 사용되는 제1 메모리 및 상기 데이터 섹션에 의해 포인트되는 상기 제1 메모리의 영역에 매핑되는 워드 또는 바이트 기반 어드레스를 상기 플래시 메모리에서의 물리적 어드레스로 변환하기 위한 매핑 정보를 저장하는 제2 메모리를 포함하는 메모리 시스템,
각 커널의 실행에 따라 상기 플래시 메모리에서 읽기 데이터를 읽는 경우, 상기 매핑 정보에 기초해서 상기 워드 또는 바이트 기반 어드레스를 상기 플래시 메모리에서의 물리적 어드레스로 변환하고, 상기 플래시 메모리로부터 상기 읽기 데이터를 상기 제1 메모리의 영역으로 이동시키도록 메모리 요청을 상기 플래시 컨트롤러로 전달하는 관리 프로세서, 그리고
상기 플래시 백본, 상기 메모리 시스템, 상기 복수의 프로세서 및 상기 관리 프로세서를 통합하는 네트워크
를 포함하는 플래시 기반 가속기. - 제17항에서,
상기 호스트의 운영 체제(operating system, OS)의 도움 없이 상기 제1 메모리와 상기 플래시 메모리 사이에서 상기 읽기 데이터가 이동되는 플래시 기반 가속기. - 제17항에서,
전형적인 컴퓨팅 장치에서 사용하는 명령어 세트 아키텍처(instruction set architecture)의 변경 없이 상기 제1 메모리와 상기 플래시 메모리 사이에서 상기 읽기 데이터가 이동되는 플래시 기반 가속기. - 제17항에서,
각 프로세서는 전형적인 로드/저장 명령어(load/store instruction)의 변경 없이 상기 메모리 요청을 통해 상기 플래시 백본에 액세스하는 플래시 기반 가속기.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/032,817 US10831376B2 (en) | 2016-04-04 | 2018-07-11 | Flash-based accelerator and computing device including the same |
CN201810954424.XA CN109460369A (zh) | 2017-09-06 | 2018-08-21 | 基于闪存的加速器及包括该加速器的计算设备 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR20170114029 | 2017-09-06 | ||
KR1020170114029 | 2017-09-06 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR101943312B1 true KR101943312B1 (ko) | 2019-01-29 |
Family
ID=65323006
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020180046379A KR101943312B1 (ko) | 2016-04-04 | 2018-04-20 | 플래시 기반 가속기 및 이를 포함하는 컴퓨팅 디바이스 |
Country Status (2)
Country | Link |
---|---|
KR (1) | KR101943312B1 (ko) |
CN (1) | CN109460369A (ko) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110083469B (zh) * | 2019-05-11 | 2021-06-04 | 广东财经大学 | 一种异构硬件组织运行统一内核方法及系统 |
US11210136B2 (en) * | 2019-12-10 | 2021-12-28 | Baidu Usa Llc | Systems and methods for an operating system module for a data processing accelerator |
CN112764822A (zh) * | 2021-02-07 | 2021-05-07 | 中国第一汽车股份有限公司 | 操作系统启动方法、装置、设备及介质 |
US11989142B2 (en) | 2021-12-10 | 2024-05-21 | Samsung Electronics Co., Ltd. | Efficient and concurrent model execution |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20100030602A (ko) * | 2008-09-09 | 2010-03-18 | 가부시끼가이샤 도시바 | 프로세서로부터 메모리로의 액세스를 관리하는 메모리 관리 장치를 포함하는 정보 처리 장치 및 메모리 관리 방법 |
KR20130084846A (ko) * | 2012-01-18 | 2013-07-26 | 삼성전자주식회사 | 플래시 메모리를 기반으로 하는 저장 장치, 그것을 포함한 사용자 장치, 그리고 그것의 데이터 읽기 방법 |
US20150293785A1 (en) * | 2014-04-15 | 2015-10-15 | Nicholas J. Murphy | Processing accelerator with queue threads and methods therefor |
US20160283158A1 (en) * | 2015-03-25 | 2016-09-29 | International Business Machines Corporation | Accessing global data from accelerator devices |
KR20170095607A (ko) * | 2016-02-15 | 2017-08-23 | 주식회사 맴레이 | 컴퓨팅 디바이스, 코프로세서와 비휘발성 메모리 사이의 데이터 이동 방법 및 이를 포함하는 프로그램 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1870814B1 (en) * | 2006-06-19 | 2014-08-13 | Texas Instruments France | Method and apparatus for secure demand paging for processor devices |
US7856546B2 (en) * | 2006-07-28 | 2010-12-21 | Drc Computer Corporation | Configurable processor module accelerator using a programmable logic device |
WO2008084473A1 (en) * | 2007-01-11 | 2008-07-17 | Sandisk Il Ltd. | Systems for supporting readydrive and ready boost accelerators in a single flash-memory storage device |
US8683175B2 (en) * | 2011-03-15 | 2014-03-25 | International Business Machines Corporation | Seamless interface for multi-threaded core accelerators |
JP6254986B2 (ja) * | 2015-10-02 | 2017-12-27 | 株式会社ソニー・インタラクティブエンタテインメント | 情報処理装置、アクセスコントローラ、および情報処理方法 |
-
2018
- 2018-04-20 KR KR1020180046379A patent/KR101943312B1/ko active IP Right Grant
- 2018-08-21 CN CN201810954424.XA patent/CN109460369A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20100030602A (ko) * | 2008-09-09 | 2010-03-18 | 가부시끼가이샤 도시바 | 프로세서로부터 메모리로의 액세스를 관리하는 메모리 관리 장치를 포함하는 정보 처리 장치 및 메모리 관리 방법 |
KR20130084846A (ko) * | 2012-01-18 | 2013-07-26 | 삼성전자주식회사 | 플래시 메모리를 기반으로 하는 저장 장치, 그것을 포함한 사용자 장치, 그리고 그것의 데이터 읽기 방법 |
US20150293785A1 (en) * | 2014-04-15 | 2015-10-15 | Nicholas J. Murphy | Processing accelerator with queue threads and methods therefor |
US20160283158A1 (en) * | 2015-03-25 | 2016-09-29 | International Business Machines Corporation | Accessing global data from accelerator devices |
KR20170095607A (ko) * | 2016-02-15 | 2017-08-23 | 주식회사 맴레이 | 컴퓨팅 디바이스, 코프로세서와 비휘발성 메모리 사이의 데이터 이동 방법 및 이를 포함하는 프로그램 |
Non-Patent Citations (1)
Title |
---|
"NVIDIA Tesla P100", White paper, Nvidia Corporation, 2016* * |
Also Published As
Publication number | Publication date |
---|---|
CN109460369A (zh) | 2019-03-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10831376B2 (en) | Flash-based accelerator and computing device including the same | |
KR101943312B1 (ko) | 플래시 기반 가속기 및 이를 포함하는 컴퓨팅 디바이스 | |
Joshi et al. | Atom: Atomic durability in non-volatile memory through hardware logging | |
Kannan et al. | Designing a true {Direct-Access} file system with {DevFS} | |
KR102371916B1 (ko) | 가상 머신을 지원하는 스토리지 장치, 그것을 포함하는 스토리지 시스템 및 그것의 동작 방법 | |
JP5911985B2 (ja) | ローカル物理メモリとリモート物理メモリとの間で共有されるバーチャルメモリのためのハードウェアサポートの提供 | |
US20140310467A1 (en) | Multiple-core computer processor for reverse time migration | |
US9454481B2 (en) | Affinity group access to global data | |
JP2018528515A (ja) | 効率的な並列コンピューティングのための簡略化されたタスクベースランタイムのための方法 | |
Waddington et al. | Software challenges for the changing storage landscape | |
Perarnau et al. | Exploring data migration for future deep-memory many-core systems | |
Wan et al. | FlashEmbedding: storing embedding tables in SSD for large-scale recommender systems | |
CN115033188A (zh) | 一种基于zns固态硬盘的存储硬件加速模块系统 | |
Zhong et al. | Revisiting swapping in user-space with lightweight threading | |
Zhang et al. | Flashabacus: a self-governing flash-based accelerator for low-power systems | |
US20080134187A1 (en) | Hardware scheduled smp architectures | |
Asiatici et al. | Dynaburst: Dynamically assemblying dram bursts over a multitude of random accesses | |
Frisella et al. | Towards Increased Datacenter Efficiency with Soft Memory | |
Han et al. | A novel non-volatile memory storage system for I/O-intensive applications | |
Bai et al. | Pipette: Efficient fine-grained reads for SSDs | |
Goglin | Memory footprint of locality information on many-core platforms | |
Cusack et al. | Yellowbrick: An Elastic Data Warehouse on Kubernetes. | |
Xu et al. | I/O Transit Caching for PMem-based Block Device | |
Yoon et al. | Harmonized memory system for object-based cloud storage | |
CN117435353B (zh) | 一种面向高频检查点操作的综合优化方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |