KR20240063438A - 메모리 장치의 메모리 영역을 동적으로 재설정하는 장치 및 방법 - Google Patents

메모리 장치의 메모리 영역을 동적으로 재설정하는 장치 및 방법 Download PDF

Info

Publication number
KR20240063438A
KR20240063438A KR1020220145055A KR20220145055A KR20240063438A KR 20240063438 A KR20240063438 A KR 20240063438A KR 1020220145055 A KR1020220145055 A KR 1020220145055A KR 20220145055 A KR20220145055 A KR 20220145055A KR 20240063438 A KR20240063438 A KR 20240063438A
Authority
KR
South Korea
Prior art keywords
memory
area
memory area
rank
host processor
Prior art date
Application number
KR1020220145055A
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 삼성전자주식회사
Priority to KR1020220145055A priority Critical patent/KR20240063438A/ko
Priority to US18/327,323 priority patent/US20240152278A1/en
Priority to EP23196828.0A priority patent/EP4365747A1/en
Priority to CN202311340606.5A priority patent/CN117991977A/zh
Publication of KR20240063438A publication Critical patent/KR20240063438A/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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0284Multiple user address space allocation, e.g. using different base addresses
    • 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/0891Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
    • 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/0631Configuration or reconfiguration of storage systems by allocating resources to 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/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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4406Loading of operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources
    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • 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
    • 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
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7202Allocation control and policies
    • 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/0656Data buffering arrangements

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Computer Security & Cryptography (AREA)
  • Advance Control (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

일 실시예에 따른 전자 장치는 근접 메모리 프로세싱 유닛(near memory processing unit)을 포함하는 메모리 장치와 연결된 메모리 컨트롤러를 가지는 호스트 프로세서를 포함할 수 있다. 상기 호스트 프로세서는, 메모리 장치의 메모리 영역의 모드를 재부팅 없이 동적으로 재설정할 수 있다.

Description

메모리 장치의 메모리 영역을 동적으로 재설정하는 장치 및 방법{METHOD AND DEVICE TO RECONFIGURE MEMORY REGION OF MEMORY DEVICE DYNAMICALLY}
아래의 개시는 메모리 장치의 메모리 영역의 동적 재설정에 관한 것이다.
효율적이며 고성능의 신경망 프로세싱은 컴퓨터, 스마트 폰, 태블릿 및 웨어러블과 같은 장치에서 중요하다. 일부 실시예들에서, 장치의 전력 소비 감소에 따라 처리 성능이 증가하면서, 장치는 전문화된 작업을 수행하기 위한 특수한 하드웨어 가속기를 구현할 수 있다. 예를 들어, 이미징 및 컴퓨터 비전 애플리케이션을 위한 계산 그래프를 생성하기 위해 복수의 하드웨어 가속기들이 연결될 수 있다. 따라서, 이미징 및 컴퓨터 비전 가속을 위한 하위 시스템은 하드웨어 가속기 간 데이터를 전송하기 위해 효율적인 스트리밍 상호 연결을 갖는 다수의 특수한 하드웨어 가속기들로 구성될 수 있다. 근접 메모리 가속기는 하드웨어 가속기가 메모리에 근접하여 구현되는 가속기를 나타낼 수 있다.
일 실시예에 따른 전자 장치는, 근접 메모리 프로세싱 유닛(near memory processing unit)을 포함하는 메모리 장치와 연결된 메모리 컨트롤러를 가지는 호스트 프로세서를 포함할 수 있다. 상기 호스트 프로세서는, 상기 메모리 장치의 적어도 일부 메모리 영역에 대한 운영체제의 액세스(access)를 선택적으로(selectively) 허용하게 상기 메모리 장치를 감지할 수 있다. 호스트 프로세서는 상기 운영체제의 시스템 메모리 부족에 응답하여, 상기 메모리 장치의 제1 메모리 영역에 대해 허용된 상기 운영체제의 액세스에 기초하여 상기 제1 메모리 영역을 상기 운영체제의 메모리 풀에 추가할 수 있다. 호스트 프로세서는 가속 논리(acceleration logic)의 실행 요청에 응답하여, 상기 근접 메모리 프로세싱 유닛이 상기 메모리 장치의 제2 메모리 영역에 직접 액세스하는 것을 허용하도록 상기 제2 메모리 영역을 설정(configure)할 수 있다.
상기 호스트 프로세서는, 상기 메모리 장치에서 상기 가속 논리에 사용되지 않은 메모리 랭크를 감지하는 것에 기초하여 상기 감지된 메모리 랭크에 대응하는 상기 제1 메모리 영역을 상기 메모리 풀에 추가할 수 있다.
상기 호스트 프로세서는, 상기 가속 논리에 사용되고 있는 메모리 랭크 내의 상기 제1 메모리 영역이 가용한 경우, 상기 제1 메모리 영역에 대한 상기 근접 메모리 프로세싱 유닛의 액세스를 제한하도록 상기 제1 메모리 영역을 설정하고, 상기 제1 메모리 영역을 재부팅 없이 상기 메모리 풀에 추가 할 수 있다.
상기 호스트 프로세서는, 상기 운영체제의 상기 메모리 풀의 데이터를 스왑하려는 시도(attempt)를 검출하는 것에 기초하여, 상기 운영체제의 시스템 메모리가 부족하다고 결정할 수 있다.
상기 호스트 프로세서는, 미사용된(unused) 메모리 랭크 중으로부터 상기 가속 논리를 실행가능한 메모리 랭크를 감지한 경우, 상기 근접 메모리 프로세싱 유닛으로 하여금 상기 감지된 메모리 랭크 내의 상기 제2 메모리 영역을 이용하여 상기 가속 논리를 실행하도록 유발할 수 있다.
상기 호스트 프로세서는, 상기 메모리 풀에 사용된 메모리 랭크로부터 후보 메모리 영역을 탐색하고, 상기 후보 메모리 영역 중으로부터 상기 제2 메모리 영역을 결정하며, 상기 근접 메모리 프로세싱 유닛으로 하여금 상기 감지된 메모리 랭크 내의 상기 제2 메모리 영역을 이용하여 상기 가속 논리를 실행하도록 유발할 수 있다.
상기 호스트 프로세서는, 상기 메모리 풀로부터 상기 제2 메모리 영역을 배제하고, 상기 제2 메모리 영역에 대한 상기 운영체제의 액세스를 제한하고 상기 근접 메모리 프로세싱 유닛의 액세스를 허용하도록 상기 제2 메모리 영역을 설정할 수 있다.
상기 호스트 프로세서는, 상기 제2 메모리 영역을 락킹하고, 상기 제2 메모리 영역의 데이터를 다른 메모리 영역으로 마이그레이션(migration)하며, 마이그레이션이 완료된 후에 상기 제2 메모리 영역을 이용한 상기 가속 논리의 실행을 유발할 수 있다.
상기 호스트 프로세서는, 메모리 랭크가 시스템 메모리 영역 및 상기 가속 논리를 위한 메모리 영역을 포함하는 경우, 다른 메모리 랭크에서 가용한 공간을 감지하는 것에 기초하여 상기 다른 메모리 랭크로 상기 시스템 메모리 영역의 데이터를 이동시킬 수 있다.
상기 호스트 프로세서는, 상기 메모리 랭크의 메모리 영역을 이용한 상기 가속 논리의 실행 동안 상기 시스템 메모리 영역에 대한 액세스가 발생하는 메모리 랭크 충돌을 임계 횟수 이상 검출하는 경우, 상기 다른 메모리 랭크에 대해 상기 가용한 공간을 모니터링할 수 있다.
도 1은 일 실시예에 따른 데이터 처리 장치의 개략적인 블록도를 나타낸다.
도 2는 일 실시예에 따른 메모리 장치의 예시적인 구성을 도시한 블록도이다.
도 3 및 도 4는 일 실시예에 따른 호스트 프로세서 및 메모리 장치 간의 예시적인 연결 관계를 도시한다.
도 5는 일 실시예에 따른 메모리 관리 방법을 도시한 흐름도이다.
도 6은 일 실시예에 따른 호스트 프로세서에서 실행되는 운영체제의 개략적인 동작을 설명한다.
도 7은 일 실시예에 따른 메모리 장치에서 메모리 영역을 가속기 모드로부터 시스템 램 모드로 전환하는 동작을 설명한다.
도 8은 일 실시예에 따른 호스트 프로세서에서 시스템 메모리 부족 여부에 따라 수행되는 동작의 흐름도를 도시한다.
도 9는 일 실시예에 따른 메모리 장치에서 메모리 영역을 시스템 램 모드로부터 가속기 모드로 전환하는 동작을 설명한다.
도 10은 일 실시예에 따른 호스트 프로세서에서 가속 논리 실행 요청 여부에 따라 수행되는 동작의 흐름도를 도시한다.
도 11 및 도 12는 일 실시예에 따른 메모리 랭크 충돌을 완화하는 메모리 재설정을 도시한다.
도 13은 일 실시예에 따른 메모리 동적 재설정의 리눅스 구현 예시를 도시한다.
도 14는 일 실시예에 따른 메모리 장치의 동적 재설정 시나리오를 도시한다.
실시예들에 대한 특정한 구조적 또는 기능적 설명들은 단지 예시를 위한 목적으로 개시된 것으로서, 다양한 형태로 변경되어 구현될 수 있다. 따라서, 실제 구현되는 형태는 개시된 특정 실시예로만 한정되는 것이 아니며, 본 명세서의 범위는 실시예들로 설명한 기술적 사상에 포함되는 변경, 균등물, 또는 대체물을 포함한다.
제1 또는 제2 등의 용어를 다양한 구성요소들을 설명하는데 사용될 수 있지만, 이런 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 해석되어야 한다. 예를 들어, 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소는 제1 구성요소로도 명명될 수 있다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다.
단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에서, "포함하다" 또는 "가지다" 등의 용어는 설명된 특징, 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함으로 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
본 문서에서, "A 또는 B", "A 및 B 중 적어도 하나", "A 또는 B 중 적어도 하나", "A, B 또는 C", "A, B 및 C 중 적어도 하나", 및 "A, B, 또는 C 중 적어도 하나"와 같은 문구들 각각은 그 문구들 중 해당하는 문구에 함께 나열된 항목들 중 어느 하나, 또는 그들의 모든 가능한 조합을 포함할 수 있다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 해당 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가진다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미를 갖는 것으로 해석되어야 하며, 본 명세서에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
이하, 실시예들을 첨부된 도면들을 참조하여 상세하게 설명한다. 첨부 도면을 참조하여 설명함에 있어, 도면 부호에 관계없이 동일한 구성 요소는 동일한 참조 부호를 부여하고, 이에 대한 중복되는 설명은 생략하기로 한다.
도 1은 일 실시예에 따른 데이터 처리 장치의 개략적인 블록도를 나타낸다.
일 실시예에 따른 전자 장치(100)는 호스트 프로세서(110) 및 메모리 장치(120)를 포함할 수 있다.
호스트는 컴퓨터 시스템(예: 전자 장치(100))의 주된 관리 개체(entity)로서, 호스트 프로세서(110) 또는 서버로 구현될 수 있다. 호스트 프로세서(110)는 예를 들어, 호스트CPU(central processing unit)를 포함할 수 있다. 예를 들어, 호스트 프로세서(110)는 메모리 컨트롤러(112)를 포함하고 운영체제(111)를 실행할 수 있다. 메모리 컨트롤러(112)는 메모리 장치(120)를 제어할 수 있다. 메모리 컨트롤러(112)는 메모리 장치(120)에게 명령을 전송할 수 있다. 또한, 호스트 프로세서(110)는 운영체제(111)를 실행하고, 메모리 컨트롤러(112)를 이용하여 운영체제(111)의 메모리 풀에 메모리 장치(120)의 메모리 영역을 추가하거나, 메모리 풀로부터 메모리 영역을 배제할 수 있다. 메모리 영역은 물리적 메모리 장치(120)의 메모리 칩에서 데이터의 읽기 및/또는 쓰기가 가능한 영역(예: 물리적 영역)을 나타낼 수 있다. 메모리 풀은 동적 메모리 할당(dynamic memory allocation)을 가능하게(allow) 하는 메모리 관리(memory management)를 위한 풀(pool)을 나타낼 수 있다.
메모리 장치(120)는 데이터를 저장 가능한 메모리 영역을 포함할 수 있다. 메모리 장치(120)는 호스트 프로세서(110)와 협력(cooperate)하여 메모리 영역의 데이터를 처리할 수 있다. 예를 들어, 메모리 장치(120)는 호스트 프로세서(110)로부터 수신된 명령에 기초하여 데이터를 처리할 수 있다. 메모리 장치(120)는 호스트 프로세서(110)의 명령에 응답하여 메모리 영역을 제어할 수 있다. 메모리 장치(120)는 근접 메모리 프로세싱 유닛(121) 및 메모리 랭크(122)를 포함할 수 있다. 메모리 장치(120)는 호스트 프로세서(110)와 구분(separate)될 수 있다.
근접 메모리 프로세싱 유닛(121)은 프로세서를 포함할 수 있다. 프로세서는 메모리 영역에 저장된 데이터를 처리할 수 있다. 예를 들어, 근접 메모리 프로세싱 유닛(121)의 프로세서는 근접하게 연결된 메모리 영역(예: 메모리 랭크(122))에 대한 데이터 처리를 수행할 수 있다. 프로세서는 메모리 영역에 저장된 컴퓨터로 읽을 수 있는 코드(예를 들어, 소프트웨어) 및 프로세서에 의해 유발된 인스트럭션(instruction)들을 실행할 수 있다. 참고로, 프로세서는 원하는 동작들(desired operations)을 실행시키기 위한 물리적인 구조를 갖는 회로를 가지는 하드웨어로 구현된 데이터 처리 장치일 수 있다. 예를 들어, 원하는 동작들은 프로그램에 포함된 코드(code) 또는 인스트럭션들(instructions)을 포함할 수 있다. 하기 도 2에서는 근접 메모리 프로세싱 유닛(121)이 가속기 유닛, 컨트롤러, 및 버퍼를 포함하는 예시적인 구조를 설명한다. 참고로, 호스트 프로세서(110)는 전체 연산을 총괄하고, 가속이 필요한 연산을 메모리 장치(120)의 컨트롤러에게 위임할 수 있다.
메모리 랭크(122)는 메모리 장치의 메모리 칩의 일부 또는 전부를 이용하여 생성되는 메모리 블록(block of memory)로서, 같은 칩 셀렉트(chip select)에 연결되어 동시에 액세스 가능한 메모리 칩(예: DRAM 칩)의 세트를 나타낼 수 있다. 전술한 메모리 영역은 메모리 랭크(122)에 기초하여 설정될 수 있다. 예를 들어, 메모리 영역은 임의의 한 메모리 랭크(122)의 일부 영역 또는 전체 영역으로 설정될 수 있다. 다른 예를 들어, 메모리 영역은 여러 메모리 랭크(122)들에 걸친 영역으로 설정될 수 있다.
일 실시예에 따른 전자 장치(100)는 메모리 영역들의 동적 재설정을 가능케 하는 칩 형태로 구현되어 모바일 장치 및 시스템에 탑재될 수 있다. 또한, 칩과 함께 제공되는 SDK(software development kit) 형태로 탑재될 수 있다. 일 실시예에 따른 전자 장치(100)는 근접 메모리 가속기의 효율적인 사용을 위해 메모리 모드 재설정이 필요한 데이터 센터 애플리케이션 및 HPC(High Performance Computing)에 적용될 수 있다. 전자 장치(100)는 근접 메모리 가속기를 포함하는 메모리 장치(120)는 재부팅 없이 시스템 메모리 모드 또는 가속기 모드로 재설정할 수 있다. 불필요한 재부팅이 감소되므로, 서비스 제공의 지연 시간이 감소하고 서버 사용률이 향상될 수 있다. 메모리 영역의 동적 재설정과 관련하여, 기존 어플리케이션 프로그램의 수정도 필요 없다. 같은 메모리 랭크 내에서도 가속기 모드 및 시스템 메모리 모드로 분할될 수 있으므로, 보다 효율적인 메모리 사용이 가능해진다. 다만, 메모리 랭크 충돌이 과도할 경우, 실시예에 따라 시스템 메모리를 다른 랭크로 옮기고, 가속기 전용 메모리 랭크로 전환시킬 수도 있다. 서버에 대한 물리적 액세스 없이 메모리 영역의 동적 재설정이 가능하다. 작업 부하에 따라 메모리 장치들별, 메모리 랭크 별, 메모리 영역 별로 선택적으로 근접 메모리 가속기를 사용할 수 있도록 함으로써 전체 시스템 비용이 절감될 수 있다.
참고로, 도 1에서 근접 메모리 프로세싱 유닛(121)을 포함하는 예시적인 메모리 장치(120)(예: AxDIMM(Acceleration Dual in-line Memory Module), 및 CXL(Compute Express Link) 메모리 모듈)를 도시하였으나, 이로 한정하는 것은 아니다. 호스트 프로세서(110)는 메모리 컨트롤러(112)와 연결되는 메모리 랭크(122)를 가지는 다른 메모리 장치(120)(예: DRAM(Dynamic Random Access Memory))에 액세스할 수 있다. 호스트 프로세서(110)에 의해 실행가능한 인스트럭션들(또는 프로그램)은 다른 메모리 장치(120)에 저장될 수도 있다.
본 명세서에서, 인스트럭션들은 호스트 프로세서(110), 메모리 장치(120), 또는 다양한 장치의 프로세서의 동작 및/또는 프로세서의 각 구성의 동작을 실행하기 위한 인스트럭션들을 포함할 수 있다.
도 2는 일 실시예에 따른 메모리 장치의 예시적인 구성을 도시한 블록도이다.
일 실시예에 따른 메모리 장치(200)는 데이터를 처리할 수 있다. 메모리 장치(200)는 메모리 영역에 저장되는 데이터를 처리함으로써 메모리 영역을 관리할 수 있다. 메모리 장치(200)는 휘발성 메모리 장치 또는 비휘발성 메모리 장치로 구현될 수 있다. 휘발성 메모리 장치는 DRAM(dynamic random access memory), SRAM(static random access memory), T-RAM(thyristor RAM), Z-RAM(zero capacitor RAM), 또는 TTRAM(Twin Transistor RAM)으로 구현될 수 있다. 비휘발성 메모리 장치는 EEPROM(Electrically Erasable Programmable Read-Only Memory), 플래시(flash) 메모리, MRAM(Magnetic RAM), 스핀전달토크 MRAM(Spin-Transfer Torque(STT)-MRAM), Conductive Bridging RAM(CBRAM), FeRAM(Ferroelectric RAM), PRAM(Phase change RAM), 저항 메모리(Resistive RAM(RRAM)), 나노 튜브 RRAM(Nanotube RRAM), 폴리머 RAM(Polymer RAM(PoRAM)), 나노 부유 게이트 메모리(Nano Floating Gate Memory(NFGM)), 홀로그래픽 메모리(holographic memory), 분자 전자 메모리 소자(Molecular Electronic Memory Device), 또는 절연 저항 변화 메모리(Insulator Resistance Change Memory)로 구현될 수 있다. 본 명세서에서는 메모리 장치(200)가 가속기 유닛을 가지는 DRAM(예: AxDIMM)인 예시를 주로 설명한다.
메모리 장치(200)는 메모리 버퍼 유닛(210) 및 메모리 랭크들(214-1, 214-2)을 포함할 수 있다. 메모리 장치(200)는 가속 논리의 실행 및 연산을 호스트가 아닌 메모리 또는 근접 메모리에 위치한 근접 메모리 프로세싱 유닛을 통해 처리함으로써 전체 응용 프로그램의 처리 속도를 향상시킬 수 있다
메모리 버퍼 유닛(210)은 메모리 랭크들(214-1, 214-2) 별로 근접 메모리 프로세싱 유닛(예: 도 1의 근접 메모리 프로세싱 유닛(121))을 포함할 수 있다.
근접 메모리 프로세싱 유닛은 메모리 랭크의 내부 또는 메모리 랭크에 근접하여 구현될 수 있다. 도 2는 근접 메모리 프로세싱 유닛이 메모리 랭크에 근접하여 구현된 예시를 도시한다. 예를 들어, 근접 메모리 프로세싱 유닛은 호스트 프로세서와 메모리 칩(예: 메모리 랭크) 사이의 주 데이터 버스(main data bus)를 거치지 않고, 메모리 영역에 저장된 데이터에 접근이 가능한 위치에 구현될 수 있다. 근접 메모리 프로세싱 유닛은 물리적 메모리 영역에 근접하여 구현됨으로써 호스트 프로세서와 메모리 영역 사이의 데이터 버스를 거치지 않고, 바이패스(bypass)하여 데이터를 처리함으로써 데이터를 빠르게 처리할 수 있다.
메모리 랭크 별 각 근접 메모리 프로세싱 유닛은 가속기 유닛, 컨트롤러, 및 버퍼를 포함할 수 있다. 도 2에서 메모리 랭크(214-1)에 근접한 근접 메모리 프로세싱 유닛은 가속기 유닛(211-1), 컨트롤러(212-1), 및 버퍼(213-1)를 포함할 수 있다. 유사하게, 메모리 랭크(214-2)에 근접한 다른 근접 메모리 프로세싱 유닛은 가속기 유닛(211-2), 컨트롤러(212-2), 및 버퍼(213-2)를 포함할 수 있다.
컨트롤러는 호스트 프로세서로부터 명령을 수신할 수 있다. 컨트롤러는 수신된 명령에 따라 메모리 영역에 대한 데이터 처리를 수행할 수 있다. 예를 들어, 명령은 메모리 영역에 대한 데이터의 쓰기, 읽기, 이동, 삭제, 가속 논리의 실행, 메모리 영역에 대한 액세스를 허용 또는 제한하는 것을 포함할 수 있다. 컨트롤러는 호스트 프로세서로부터 버퍼에 저장된 데이터에 대한 정보를 수신하여 읽기(read)를 수행할 수 있다. 컨트롤러는 버퍼에 데이터의 쓰기(write)를 수행하고, 쓰여진 데이터에 대한 정보를 호스트 프로세서에게 출력할 수 있다. 컨트롤러는, 데이터를 근접 메모리 영역에 저장할 수 있다. 근접 메모리 영역은 호스트 프로세서와 메모리 영역 사이의 주 데이터 버스를 거치지 않은 상태로, 근접 메모리 프로세싱 유닛(예: 컨트롤러)이 접근할 수 있는 저장 공간을 의미할 수 있다. 컨트롤러(212-1)는 근접 메모리 영역으로서 메모리 랭크(214-1)에 대응하는 메모리 영역에 대한 데이터를 처리할 수 있다. 유사하게, 컨트롤러(212-2)는 메모리 랭크(214-2)에 대응하는 메모리 영역에 대한 데이터를 처리할 수 있다.
하드웨어로 구현된 메모리 버퍼 유닛(210)의 컨트롤러는, 예를 들어, 마이크로프로세서(microprocessor), 중앙 처리 장치(central processing unit), 프로세서 코어(processor core), 멀티-코어 프로세서(multi-core processor), 멀티프로세서(multiprocessor), ASIC(Application-Specific Integrated Circuit), 또는 FPGA(Field Programmable Gate Array) 중 적어도 하나를 포함할 수 있다.
가속기 유닛은 버퍼 및 컨트롤러와 협력하여 가속 논리를 실행할 수 있다. 가속기 유닛은 가속 논리를 실행하기 위한 하드웨어 구성(예: 아날로그 및/또는 디지털 회로)을 포함할 수 있다. 가속 논리는 하드웨어 가속(hardware acceleration)을 위한 연산을 포함할 수 있고, 예를 들어, 뉴럴 네트워크 연산을 포함할 수 있다. 메모리 버퍼 유닛(210)에서 가속기 유닛들(211-1, 211-2)은 랭크별로 독립되어 구현될 수 있다. 랭크별로 독립된 가속기 유닛들(211-1, 211-2)을 통해 가속 논리를 처리함으로써, 병렬 수행 가속이 극대화될 수 있다. 가속기 유닛(211-1)은 근접 메모리 영역으로서 메모리 랭크(214-1)에 대응하는 메모리 영역의 데이터를 이용한 가속 논리를 실행할 수 있다. 유사하게, 가속기 유닛(211-2)은 메모리 랭크(214-2)에 대응하는 메모리 영역의 데이터를 이용한 가속 논리를 실행할 수 있다. 예를 들어, 하드웨어로 구현된 가속기 유닛은 마이크로프로세서, CPU, 프로세서 코어, 멀티-코어 프로세서, 멀티프로세서, ASIC, FPGA, 및 GPU(graphics processing unit) 중 적어도 하나를 포함할 수 있다.
버퍼는 데이터를 저장할 수 있다. 버퍼는 입력 버퍼 및 출력 버퍼를 포함할 수 있다. 버퍼는 입력 버퍼 또는 출력 버퍼로 동작할 수 있다. 버퍼(213-1)는 메모리 랭크(214-1)에 연결될 수 있다. 버퍼(213-2)는 메모리 랭크(214-2)에 연결될 수 있다.
메모리 장치(200)의 메모리 영역은 시스템 램 모드 또는 가속기 모드로 설정될 수 있다. 본 명세서에서는 설명의 편의상 메모리 영역이 임의의 한 메모리 랭크 내 일부분 또는 전체에 해당하는 예시를 설명하나, 이로 한정하는 것은 아니다. 메모리 영역은 여러 메모리 랭크들에 걸치게 설정될 수도 있다.
예를 들어, 메모리 버퍼 유닛(210)은 DIMM(Dual In-Line Memory Module)의 메모리 버퍼에 구현되어 데이터를 처리할 수 있다. 이 경우, 가속기 유닛들(211-1, 211-2) 및 컨트롤러들(212-1, 212-2)은 효율적으로 DIMM의 내부 대역폭을 사용하면서 데이터를 처리할 수 있다. DIMM의 메모리 버퍼 유닛(210)은 랭크 별로 배치된 근접 메모리 프로세싱 유닛을 통해 해당 랭크로 분배된 연산 기능을 수행함으로써, 랭크 단위로 데이터를 병렬 처리할 수 있다. 이를 통해, 메모리 버퍼 유닛(210)은 메모리 영역에 대한 데이터 접근 지연 시간을 방지하고, 외부 버스 트래픽을 효과적으로 감소시킬 수 있다.
도 3 및 도 4는 일 실시예에 따른 호스트 프로세서 및 메모리 장치 간의 예시적인 연결 관계를 도시한다.
예를 들어, 도 3은 CPU 기반 DIMM(Dual In-Line Memory Module) 가속 구조의 예를 나타내고, 도 4는 DIMM 기반 멀티 랭크 구조의 예를 나타낼 수 있다.
도 3에서 호스트 프로세서(310)는 복수의 메모리 컨트롤러(311, 312)를 포함할 수 있다. CPU(310)는 복수의 메모리 컨트롤러(311, 312)을 통해 복수의 메모리 장치들(330)의 데이터를 처리할 수 있다. 두 개의 메모리 컨트롤러(311, 313)에 채널당 2개의 DIMM(또는, AXDIMM)이 장착될 수 있다.
도 4에서, 호스트 프로세서(410)가 하나의 메모리 컨트롤러(411)를 포함할 수 있다. 호스트 프로세서(410)는 하나의 메모리 컨트롤러(411)를 통해 복수의 메모리 장치들(430)의 데이터를 처리할 수 있다. 예시적으로 메모리 장치(DIMM0 및 DIMM2)는 채널 0 및 채널 1을 통해 제어될 수 있다. 메모리 장치(DIMM1 및 DIMM3)는 채널 0 및 채널 1을 통해 제어될 수 있다.
호스트 프로세서(310 또는 410) 및 보드 구성에 따라 장착 가능한 DIMM의 토폴로지(topology)는 다양할 수 있다.
각 메모리 장치의 메모리 버퍼 유닛은 메모리 모듈 내부 또는 메모리 모듈에 근접하여 구성됨으로써 다양한 구성에서 스케일러블(scalable)하게 데이터 처리 및 가속 논리를 실행할 수 있다. 호스트 프로세서(310 또는 410)는 메모리 랭크에 매핑된 각각의 DIMM 가속기 유닛을 구분하여 명령어를 생성하고, 이를 DIMM 가속기 유닛에 입력하여 동작시킬 수 있다.
도 5는 일 실시예에 따른 메모리 관리 방법을 도시한 흐름도이다.
우선, 단계(510)에서 호스트 프로세서는 메모리 장치의 적어도 일부 메모리 영역에 대한 운영체제의 액세스(access)를 선택적으로(selectively) 허용하게 메모리 장치를 감지할 수 있다. 호스트 프로세서(central processing unit)는 근접 메모리 프로세싱 유닛(near memory processing unit)을 포함하는 메모리 장치와 연결된 메모리 컨트롤러를 가질 수 있다. 근접 메모리 프로세싱 유닛은 도 2에서 전술한 바와 같이 가속기 유닛을 포함할 수 있다. 가속기 유닛을 가진 메모리 장치의 예시로서 AxDIMM을 주로 설명한다.
일 실시예에 따르면, 호스트 프로세서는, 호스트 프로세서에서 실행되는 운영체제에 기초한 액세스를 메모리 영역에 대해 선택적으로 허용 가능하도록, 메모리 장치를 인식할 수 있다. 호스트 프로세서는 메모리 장치의 메모리 영역 중 운영체제에게 가용한 영역을 동적으로 변경 및 설정가능하게 인식할 수 있다. 달리 말해, 호스트 프로세서는 메모리 장치의 적어도 일부 메모리 영역을 운영체제의 메모리 풀(memory pool)에게 선택적으로(selectively) 제공가능하게(provideable) 메모리 장치를 감지할 수 있다. 호스트 프로세서에 의해 실행된 운영 체제는 가속기 유닛(예: 근접 메모리 가속기)를 가지는 메모리 장치를 부분적으로 또는 전체적으로 시스템 램 모드(예: system-ram 모드) 또는 가속기 모드(예: devdax 모드)로 재설정가능한 하드웨어로서 감지할 수 있다.
예를 들어, 호스트 프로세서를 가지는 전자 장치는 바이오스를 통해 부팅(boot)할 수 있다. 바이오스는 표준화된 부팅 시퀀스 인터페이스를 나타낼 수 있다. 호스트 프로세서는, 부팅 시, 규격에서 정의된 표준 인터페이스(예: UEFI(Unified Extensible Firmware Interface), ACPI(Advanced Configuration and Power Interface))에 따라 디바이스를 인식할 수 있다. 호스트 프로세서는, 런타임 동안 메모리 영역에 대한 운영체제에 기초한 액세스의 선택적인 허용(allow) 또는 제한(restrict)이 가능한 프로토콜 인터페이스로, 메모리 장치를 인식할 수 있다. 예시적으로 호스트 프로세서는 바이오스 부팅 시, 인터페이스 프로토콜에서 가속기 유닛을 가지는 메모리 장치를 직접 파일 액세스(direct file access, DAX) 모드 또는 시스템 램 모드로 선택적으로 설정 가능한 장치 타입으로서 인식할 수 있다. DAX 모드는 호스트 프로세서가 I/O(input/output) 스택을 우회하여 미디어(예: 메모리 장치)에 직접 액세스 가능한 모드일 수 있다. 시스템 램 모드는 호스트 프로세서가 I/O 스택을 경유하여 메모리 장치에 액세스하고, 메모리 장치의 메모리 영역을 메모리 풀에게 제공 가능한 모드일 수 있다. 다만, 메모리 장치의 인식에 사용되는 인터페이스 프로토콜을 이로 한정하는 것은 아니며, 설계에 따라 달라질 수 있다. 전술한 바와 같이, 전자 장치의 런타임 동안, 메모리 장치의 메모리 영역에 대한 동적인 재설정이 가능해지므로, 호스트 프로세서는 재부팅 없이 메모리 영역을 메모리 풀에게 선택적으로 제공할 수 있다. 예를 들어, 호스트 프로세서는 메모리 장치(예: AxDIMM)의 적어도 일부 메모리 영역을 운영체제의 메모리 풀(예: 시스템 메모리 풀)에 추가하거나, 메모리 풀로부터 배제(exclude)할 수 있다.
그리고 단계(515)에서 호스트 프로세서는 메모리 장치와 관련된 요청을 식별할 수 잇다. 예를 들어, 호스트 프로세서는 시스템 메모리 부족 또는 가속 논리의 실행 요청이 있었는지를 판단할 수 있다.
단계(520)에서 호스트 프로세서는 운영체제의 시스템 메모리 부족에 응답하여, 메모리 장치의 제1 메모리 영역에 대해 허용된 운영체제의 액세스에 기초하여 제1 메모리 영역을 운영체제의 메모리 풀에 추가할 수 있다. 제1 메모리 영역을 메모리 풀에 추가하는 동작은, 미사용된 메모리 랭크의 존재 여부 및 가속 논리에 사용된 메모리 랭크 중 가용한 메모리 영역의 존재 여부에 따라 달라질 수 있다. 예를 들어, 호스트 프로세서는, 미사용된 메모리 랭크에서 제1 메모리 영역을 결정하는 경우, 메모리 풀에 해당 제1 메모리 영역을 단순 추가할 수 있다. 다른 예를 들어, 호스트 프로세서는, 사용된 메모리 랭크에서 제1 메모리 영역을 결정하는 경우, 제1 메모리 영역에 대한 운영체제의 액세스를 허용할 수 있다. 가속 논리에 사용 중인 메모리 랭크는 운영체제에게 보이지 않기(invisible) 때문에, 호스트 프로세서는 그 메모리 랭크에서 일부 메모리 영역을 운영체제에게 보이는(visible) 상태로 변경할 수 있다. 호스트 프로세서는 운영체제의 액세스가 허용된 제1 메모리 영역을 메모리 풀에 추가할 수 있다. 가속기 모드로부터 시스템 램 모드로의 전환은 하기 도 7 및 도 8에서 설명한다.
단계(530)에서 호스트 프로세서는 가속 논리(acceleration logic)의 실행 요청에 응답하여, 근접 메모리 프로세싱 유닛이 메모리 장치의 제2 메모리 영역에 직접 액세스하는 것을 허용하도록 제2 메모리 영역을 설정(configure)할 수 있다. 제2 메모리 영역을 설정하는 동작은 미사용된 메모리 랭크의 존재 여부, 시스템 메모리 풀에 포함된 메모리 랭크 중 가용한 메모리 영역의 크기에 따라 달라질 수 있다. 예를 들어, 호스트 프로세서는, 미사용된 메모리 랭크에서 제2 메모리 영역을 결정하는 경우, 호스트 프로세서는 제2 메모리 영역에 대해 운영체제에 기초한 액세스가 제한되도록 설정할 수 있다. 다른 예를 들어, 호스트 프로세서는, 시스템 메모리 풀에 포함된 메모리 랭크에서 제2 메모리 영역을 결정하는 경우, 제2 메모리 영역을 시스템 메모리 풀로부터 배제하고 제2 메모리 영역에 대한 운영체제에 기초한 액세스를 제한할 수 있다. 호스트 프로세서는 가속기 유닛으로 하여금 제2 메모리 영역을 이용하여 가속 논리를 실행하도록 유발할 수 있다. 시스템 램 모드로부터 가속기 모드로의 전환은 하기 도 9 및 도 10에서 설명한다.
도 6은 일 실시예에 따른 호스트 프로세서에서 실행되는 운영체제의 개략적인 동작을 설명한다.
일 실시예에 따르면 호스트 프로세서(610)는 운영체제(611)를 실행할 수 있다. 전술한 바와 같이 호스트 프로세서(610)는 운영체제(611)를 부팅하면서, 메모리 장치(620)를 인식할 수 있다. 호스트 프로세서(610)는 인식된 메모리 장치(620)를 이용하여, 메모리 장치(620)에서 전체 메모리, 메모리 랭크 별, 또는 일부 영역 별로 운영체제(611)를 위한 메모리 영역 및 가속 연산을 위한 메모리 영역을 동적으로 재설정할 수 있다. 호스트 프로세서(610)는 어플리케이션 프로그램(660))을 실행할 수 있다. 호스트 프로세서(610)는 어플리케이션 프로그램(660)의 실행을 위해 메모리 장치(620)의 데이터를 관리할 수 있다. 어플리케이션 프로그램(660)의 데이터들은 페이지 단위(예: 4KB 단위)로 메모리 장치(620)에 저장될 수 있다. 어플리케이션 프로그램(660)은 시스템 소프트웨어를 포함할 수 있다.
호스트 프로세서(610)는 운영체제(611)에서, 가속기 장치 드라이버(651), 재설정가능 메모리 관리자(652), 메모리 재설정기(653), 메모리 핫플러그(654), 및 OS 메모리 관리자(655)를 실행할 수 있다. 전술한 모듈들은 예시적으로 운영체제(611) 내에서 또는 운영체제(611)와 협력하여 구동되는 소프트웨어 모듈일 수 있다.
가속기 장치 드라이버(651)는 가용한 물리적 메모리 영역을 포함한 캐퍼빌리티(예: 크기 및 오프셋)를 갖추고, 매니페스트(manifest)된 메모리 장치(620)를 인식할 수 있다. 예를 들어, AxDIMM 하드웨어인 메모리 장치(620)는 바이오스에 의한 직접 파일 액세스(direct file access, DAX) 장치(예: DAX 장치)로서 리눅스 운영체제(611)(Linux OS)에게 노출될 수 있다. 참고로, 운영체제(611)의 가속기 장치 드라이버(651)는, 시스템 메모리로 가용한, 익스포트(export) 가능한 메모리 영역을 감지할 수 있다. 메모리 장치(620)의 각 메모리 랭크에서 특정 메모리 영역은 장치 구성 레지스터와 같이 매핑되므로 익스포트될 수 없기 때문에, 특정 메모리 영역을 제외한 나머지 메모리 영역이 시스템 메모리로서 가용할 수 있다.
또한, 가속기 장치 드라이버(651)는 재설정가능 메모리 관리자(652)와 메모리 장치(620)에 관한 정보를 교환할 수 있다. 예를 들어, 가속기 장치 드라이버(651)는 메모리 장치(620)의 상태를 지시하는 정보(예: 가용성 여부에 관한 정보)를 변경하고, 재설정가능 메모리 관리자(652)에게 보고할 수 있다.
가속기 장치 드라이버(651)는 인식된 메모리 장치(620)를 관리할 수 있다. 예를 들어, 가속기 장치 드라이버(651)는 메모리 장치(620)의 일부 메모리 영역을 락킹하거나 락킹을 해제할 수 있다. 예를 들어, 가속기 장치 드라이버(651)는 DAX 장치 드라이버로 구현될 수 있다. DAX 장치 드라이버는 AxDIMM 장치 컨트롤러의 구성 요소로 확장된 장치 드라이버로서, DAX 장치를 관리할 수 있다.
재설정가능 메모리 관리자(652)는 메모리 장치(620)의 메모리 영역의 재설정 여부를 판단할 수 있다. 예를 들어, 재설정가능 메모리 관리자(652)는 운영체제(611)의 메모리 부족 상태(low memory state) 여부를 판단할 수 있다. 다른 예를 들어, 재설정가능 메모리 관리자(652)는 사용자로부터 가속 논리의 요청을 수신할 수 있다. 재설정가능 메모리 관리자(652)는 근접 메모리를 활용하도록 구현될 수 있다.
재설정가능 메모리 관리자(652)는 메모리 영역의 재설정이 필요하다고 판단한 경우, 메모리 재설정기(653)에게 재설정을 요청할 수 있다. 예를 들어, 재설정가능 메모리 관리자(652)는 메모리 장치(620)에서 가용한 메모리 영역을 시스템 메모리 영역으로서 익스포트(export)할 것을 메모리 재설정기(653)에게 요청할 수 있다. 다른 예를 들어, 재설정가능 메모리 관리자(652)는 운영체제(611)의 메모리 풀로부터 배제된 메모리 영역을 가속기 메모리 영역으로 설정할 것을 메모리 재설정기(653)에게 요청할 수 있다.
또한, 재설정가능 메모리 관리자(652)는 가속기 장치 드라이버(651)에게 메모리 장치(620)의 메모리 영역에서 발생한 재설정(예: 시스템 램 모드로부터 가속기 모드로의 전환 및 가속기 모드로부터 시스템 램 모드로의 전환)을 알릴(notify) 수 있다. 재설정가능 메모리 관리자(652)는 일부 메모리 영역의 데이터를 다른 메모리 영역으로 마이그레이션(migrate)할 수도 있다.
메모리 재설정기(653)는 메모리 핫플러그(654)를 이용하여 메모리 장치(620)의 메모리 영역을 재설정할 수 있다. 일 실시예에 따른 메모리 재설정기(653)는 메모리 장치(620)의 메모리 영역을 가속기 모드 및 시스템 메모리 모드 중 하나로 설정할 수 있다. 따라서 전자 장치는 운영체제(611)의 재부팅을 생략하고, 메모리 장치(620)의 메모리 영역을 재설정할 수 있다. 메모리 재설정기(653)는 운영체제(611)의 OS 메모리 핫 플러깅 메커니즘을 사용하여, 근접 메모리 프로세싱 유닛에서 가용한 메모리 크기 및 운영체제(611)에서 가용한 메모리 크기를 동적으로 조정할 수 있다.
예를 들어, 메모리 재설정기(653)는 메모리 영역을 운영체제(611)에 대해 온라인 또는 오프라인으로 재설정할 수 있다. 온라인으로 재설정된 메모리 영역은 운영체제(611)에게 보일(visible) 수 있다. 오프라인으로 재설정된 메모리 영역은 운영체제(611)에게 보이지 않을(invisible) 수 있다. 메모리 재설정기(653)는 메모리 핫플러그(654)를 이용하여 메모리 풀에 메모리 영역을 재설정할 수 있다. 메모리 재설정기(653)는 메모리 영역을 온라인으로 재설정함으로써 운영체제(611)에 대해 활성화할 수 있다. 활성화된 메모리 영역은 메모리 풀에 추가될 수 있다. 메모리 재설정기(653)는 메모리 영역으로 오프라인으로 재설정함으로써 운영체제(611)에 대해 비활성화할 수 있다. 비활성화된 메모리 영역은 메모리 풀로부터 배제될 수 있다.
메모리 재설정기(653)는 재설정가능 메모리 관리자(652)의 요청에 응답하여, 시스템 램으로서 사용한 메모리 영역 및 가용한 크기를 익스포트할 수 있다. 메모리 재설정기(653)는 시스템 램으로서 가용한 메모리 영역을 메모리 핫플러그(654)를 이용하여 익스포트할 수 있다.
참고로, 메모리 재설정기(653)는 메모리 재설정 기능을 제공하는 Linux DAX KMEM 드라이버로 구현될 수 있다.
메모리 핫플러그(memory hot-plug)(654)는 런타임(runtime)에서 호스트 프로세서(610)에 의해 실행되는 운영체제(611)의 메모리 풀에 가용한 메모리의 크기를 추가하는 동작을 나타낼 수 있다. 예를 들어, 전자 장치는 메모리 핫플러그(654)를 통해 물리적 메모리의 적어도 일부 메모리 영역을 메모리 풀에 추가할 수 있다. 메모리 핫언플러그(memory hot-unplug)는 런타임에서 운영체제(611)의 메모리 풀에서 가용한 메모리의 크기를 감소시키는 동작을 나타낼 수 있다. 예를 들어, 전자 장치는 메모리 핫언플러그를 통해 운영체제(611)의 메모리 풀에 포함됐던 물리적 메모리의 적어도 일부 메모리 영역을 메모리 풀로부터 배제할 수 있다.
OS 메모리 관리자(655)는 운영체제(611)의 메모리 풀에 포함된 메모리를 어플리케이션 또는 운영체제(611)의 기능에 할당(allocate) 또는 해제(free)할 수 있다.
전술한 메모리 장치에서 메모리 영역의 모드 전환, 메모리 풀에 대한 메모리 영역의 추가 또는 배제를 위한 명령 또는 데이터의 전송은 메모리 컨트롤러(612)를 경유할 수 있다.
일 실시예에 따른 전자 장치는 운영체제(611)의 재부팅 없이 동적으로 메모리 장치(620)의 메모리 랭크들(622-1, 622-2, 622-9)의 각각에서 개별적인 메모리 영역을 재설정할 수 있다. 따라서, 전자 장치는 하드웨어 기능에 따라 메모리 장치(620)의 메모리 랭크를 가속기 및 운영체제(611) 동시에 활용하여 리소스 사용률을 높일 수 있다. 또한, 이로 한정하는 것은 아니고, 전자 장치는, 여전히 재부팅 없이, 워크로드에 따라 메모리 랭크별 또는 전체 메모리 장치(620)를 재설정할 수도 있다.
제1 메모리 영역 및 제1 메모리 영역을 포함하는 메모리 랭크가 이미 시스템 램 모드인 경우, 호스트 프로세서는 메모리 장치의 제1 메모리 영역을 단지 메모리 풀에 추가할 수 있다. 아래 도 7에서는 운영체제의 메모리 풀에 추가하려는 제1 메모리 영역이 가속기 모드인 경우의 동적 재설정 동작을 설명한다.
도 7은 일 실시예에 따른 메모리 장치에서 메모리 영역을 가속기 모드로부터 시스템 램 모드로 전환하는 동작을 설명한다.
단계(701)에서 호스트 프로세서는 메모리 장치(720)를 인식할 수 있다. 메모리 장치(720)는, 운영체제(711)를 부팅할 때, 가속기 장치 드라이버(751)에게 시스템 램 모드 및 가속 모드 간의 동적 재설정이 가능한 디바이스(예: DAX 디바이스)로서 매니페스트(manifest)할 수 있다.
단계(702)에서 가속기 장치 드라이버(751)는 재설정가능 메모리 관리자(752)에게 인식된 디바이스의 정보를 알릴 수 있다. 예를 들어, 가속기 장치 드라이버(751)는 재설정가능 메모리 관리자(752)에게 인식된 메모리 장치(720)의 캐퍼빌리티를 전송할 수 있다.
단계(703)에서 재설정가능 메모리 관리자(752)는 운영체제(711)가 메모리 부족 상태(low memory state)인 지 여부를 판단할 수 있다. 예를 들어, 재설정가능 메모리 관리자(752)는 OS 메모리 관리자(755)로부터 메모리 풀(예: 시스템 메모리 풀)의 일부 데이터를 디스크(예: HDD(hard disk drive) 또는 SSD(solid state drive))로 스왑하려는 시도를 감지할 수 있다. 스왑은 컴퓨팅 시스템에서 운영체제(711) 또는 응용 프로그램에 할당할 주 메모리(main memory) 영역이 부족한 경우, 할당된 메모리 일부를 비교적 용량이 큰 보조기억장치(예: SSD(Solid State Drive), HDD(Hard Disk Drive))로 이동시킴으로써 메모리 부족 현상을 해결하는 메모리 관리 방식을 의미할 수 있다. 다만, 메모리 부족 여부의 판단을 이로 한정하는 것은 아니고, 재설정가능 메모리 관리자(752)는 OS 메모리 관리자(755)로부터 메모리 풀의 상태를 수신하고, 잔여 메모리 크기에 기초하여 메모리 부족 여부를 판단할 수도 있다. 예를 들어, 재설정가능 메모리 관리자(752)는 가용한 시스템 메모리의 크기가 임계 크기 미만인 경우, 메모리 부족인 것으로 결정할 수 있다.
단계(704)에서 재설정가능 메모리 관리자(752)는, 가속기 장치 드라이버(751)에게 재설정에 관해 알릴 수 있다. 예를 들어, 재설정가능 메모리 관리자(752)는 시스템 메모리 부족인 경우, 가속기 장치 드라이버(751)에게 메모리 장치(720)에서 가속기 모드로 설정된 메모리 영역 또는 메모리 랭크에 대해 재설정할 것임을 통지할 수 있다.
단계(705)에서 가속기 장치 드라이버(751)는, 해당 메모리 장치(720)의 메모리 영역 또는 메모리 랭크의 상태를 비가용(not available)으로 변경 또는 마크(mark)할 수 있다.
단계(706)에서 재설정가능 메모리 관리자(752)는, 메모리 재설정기(753)(memory reconfigurator)에게, 메모리 장치(720)에서 가용한 메모리 영역으로 결정된 제1 메모리 영역을 시스템 메모리 영역(771)으로서 익스포트(export)하도록 요청할 수 있다.
단계(707)에서 메모리 재설정기(753)는 운영체제(711) 코어의 메모리 핫 플러그(754)를 사용하여 제1 메모리 영역을 메모리 풀에게 익스포트할 수 있다. 예를 들어, 메모리 재설정기(753)는, 시스템 메모리로 바꾸려고 했던 메모리 영역(예: 제1 메모리 영역)을 운영체제(711)에게 온라인으로 변경할 수 있다.
단계(708)에서 OS 메모리 관리자(755)는 제1 메모리 영역을 활성화할 수 있다. 예를 들어, OS 메모리 관리자(755)는 온라인으로 설정된 제1 메모리 영역을 시스템 메모리 풀에 추가할 수 있다. 달리 말해, OS 메모리 관리자(755)는, 기존 시스템 메모리 영역(771)을 갖는 메모리 풀에, 가속기 모드로부터 시스템 램 모드로 재설정된 메모리 영역(772)으로서 제1 메모리 영역을 추가할 수 있다.
일 실시예에 따른 호스트 프로세서는 메모리 장치(720)의 일부 랭크 또는 일부 메모리 영역만 재설정할 수도 있다. 예를 들어, 재설정가능 메모리 관리자(752)는, 메모리 장치(720)의 일부 랭크 또는 일부 메모리 영역(예: 4개의 메모리 랭크들을 갖는 메모리 장치(720)에서 1번 랭크의 절반 영역 및 0번 랭크의 전체 영역)의 재설정이 요구되는 것으로 판단할 수 있다. 재설정가능 메모리 관리자(752)는 전술한 단계(702)에서 가속기 장치 드라이버(751)로부터 제공된 정보를 이용할 수 있다. 또한, 단계(705)에서 가속기 장치 드라이버(751)는 메모리 랭크의 일부 메모리 영역만 락킹할 수 있다. 단계(706)에서 메모리 재설정기(753)는 재설정을 위해 타겟팅된 메모리 랭크 중에서도 일부 메모리 영역(예: 제1 메모리 영역)만 시스템 램 모드로 재설정할 수 있다.
도 7에서 설명된 동작들 중 일부는 설계에 따라 다른 순서로 수행되거나, 다른 동작과 함께 병렬적으로 수행될 수 있고, 생략될 수도 있다.
아래 도 8에서는 전술한 도 7에 따른 동작을 포함하는 호스트 프로세서의 시스템 메모리 부족과 관련된 일련의 동작들을 설명한다.
도 8은 일 실시예에 따른 호스트 프로세서에서 시스템 메모리 부족 여부에 따라 수행되는 동작의 흐름도를 도시한다.
단계(810)에서 호스트 프로세서는 시스템 메모리 부족 여부를 판단할 수 있다. 예를 들어, 호스트 프로세서는, 운영체제의 메모리 풀의 데이터를 스왑하려는 시도(attempt)를 검출하는 것에 기초하여, 운영체제의 시스템 메모리가 부족하다고 결정할 수 있다. 다만, 이로 한정하는 것은 아니고, 호스트 프로세서는 메모리 풀의 가용한 메모리 크기가 임계 크기 미만인 경우 시스템 메모리가 부족하다고 결정할 수도 있다.
단계(820)에서 호스트 프로세서는 가속 논리에 사용되지 않는 메모리 랭크가 검색되는지 판단할 수 있다. 호스트 프로세서는 가속기 모드로 사용 중인 메모리 랭크들 중에서 현재 가속 논리에 사용되지 않은 메모리 랭크를 탐색할 수 있다. 예를 들어, 미사용된 메모리 랭크가 있는 경우, 호스트 프로세서는 해당 미사용된 메모리 랭크의 메모리 영역을 전술한 제1 메모리 영역으로 결정할 수 있다.
단계(830)에서 호스트 프로세서는, 가속 논리에 사용되지 않은 메모리 랭크가 검색되지 않은 경우, 가속 논리에 사용된 메모리 랭크 중에서 가용 공간을 탐색할 수 있다. 예를 들어, 호스트 프로세서는 메모리 장치에서 가속기 모드로 설정된 메모리 랭크들 중 잔여 메모리 영역을 검색할 수 있다. 미사용된 메모리 랭크가 발견되지 않는 경우, 호스트 프로세서는 사용된 메모리 랭크 중 가용한 메모리 영역을 제1 메모리 영역으로 결정할 수 있다.
단계(840)에서 호스트 프로세서는 검색된 메모리 랭크를 시스템 메모리로 재설정할 수 있다. 호스트 프로세서는 검색된 메모리 랭크의 전체 영역이 가용한 지 여부 및 부분 영역이 가용한 지 여부에 기초하여 메모리 영역의 재설정을 수행할 수 있다. 예를 들어, 호스트 프로세서는 메모리 장치에서 가속 논리에 사용되지 않은 메모리 랭크를 감지하는 것에 기초하여 감지된 메모리 랭크에 대응하는 제1 메모리 영역을 메모리 풀에 추가할 수 있다. 가속 논리에 사용되지 않은 메모리 랭크가 가속기 모드인 경우, 호스트 프로세서는 해당 메모리 랭크의 가용한 전체 메모리 영역을 시스템 램 모드로 변경하고 메모리 풀에 추가할 수 있다. 다른 예를 들어, 호스트 프로세서는 가속 논리에 사용되고 있는 메모리 랭크 내의 제1 메모리 영역이 가용한 경우, 제1 메모리 영역에 대한 근접 메모리 프로세싱 유닛의 액세스를 제한하도록 제1 메모리 영역을 설정할 수 있다. 호스트 프로세서는 제1 메모리 영역을 재부팅 없이 메모리 풀에 추가할 수 있다. 호스트 프로세서는 도 7에서 전술한 동작을 통해 메모리 장치에서 가속기 모드로 설정됐던 제1 메모리 영역을 시스템 램 모드로 재설정할 수 있다.
단계(850)에서 호스트 프로세서는 가속 논리를 위해 미사용된 메모리 랭크가 발견되지 않고 사용된 메모리 랭크 중 가용한 메모리 영역이 발견되지 않은 경우, 가용한 메모리 공간이 없다고 보고할 수 있다.
단계(860)에서 호스트 프로세서는 시스템 메모리가 부족하지 않은 경우, 일반 동작을 계속할 수 있다.
도 9는 일 실시예에 따른 메모리 장치에서 메모리 영역을 시스템 램 모드로부터 가속기 모드로 전환하는 동작을 설명한다.
단계(901)에서 재설정가능 메모리 관리자(952)는 가속 논리 실행 요청을 수신할 수 있다. 예를 들어, 재설정가능 메모리 관리자(952)는 전자 장치의 사용자로부터 가속 논리를 요청하는 입력을 수신할 수 있다. 다른 예를 들어, 전자 장치가 서버인 경우, 재설정가능 메모리 관리자(952)는 외부 장치로부터 가속 논리를 요청하는 입력을 수신할 수 있다.
단계(902)에서 재설정가능 메모리 관리자(952)는 시스템 메모리 영역(971)에 포함된 메모리 영역들 중 가속기 모드로 재설정할 제2 메모리 영역을 결정할 수 있다. 재설정가능 메모리 관리자(952)는 제2 메모리 영역의 데이터(예: 모든 데이터)를 마이그레이션(migrate)할 수 있다. 전술한 마이그레이션을 통해, 메모리 장치(920)의 메모리 영역의 데이터 손실이 방지될 수 있다.
참고로, 하나의 CPU 소켓이 여러 개의 코어를 포함하는 경우, NUMA(Non-Uniformed Memory Access) 노드에 따라 제2 메모리 영역이 결정될 수 있다. NUMA 노드는 같은 지역 메모리를 사용하는 CPU 코어들이 그룹핑된 노드를 나타낼 수 있다. 제2 메모리 영역은 임의의 한 NUMA 노드에서 사용되는 메모리 영역으로 결정될 수 있다.
단계(903)에서 OS 메모리 관리자(955)는 개별 메모리 영역을 오프라인으로 설정할 수 있다. 예를 들어, OS 메모리 관리자(955)는 제2 메모리 영역을 비활성화함으로써, 운영체제에게 보이지 않게 설정할 수 있다. 따라서, 제2 메모리 영역에 대한 운영체제에 기초한 액세스가 제한될 수 있다.
단계(904)에서 재설정가능 메모리 관리자(952)는, 메모리 재설정기(953)에게 오프라인으로 설정된 제2 메모리 영역을 가속기 모드로 재설정하도록 요청할 수 있다.
단계(905)에서 메모리 재설정기(953)는 OS 메모리 핫 플러그(954)를 통해, 제2 메모리 영역을 메모리 풀로부터 언플러그(unplug)할 수 있다. 메모리 재설정기(953)는 메모리 풀로부터 제2 메모리 영역을 배제할 수 있다.
단계(906)에서 재설정가능 메모리 관리자(952)는 제2 메모리 영역을 가속기 장치 드라이버(951)에게 반환(return back)할 수 있다.
단계(907)에서 가속기 장치 드라이버(951)는 제2 메모리 영역의 상태를 "가용(available)"으로 변경할 수 있다. 제2 메모리 영역은 가속기 모드로 설정될 수 있다. 가속기 모드로 설정된 메모리 영역을 가속기 메모리 영역(972)이라고 나타낼 수 있다. 도 9에서 시스템 램 모드로 유지된 메모리 영역은 시스템 메모리 영역(971)으로 도시된다.
따라서, 호스트 프로세서는 메모리 장치(920)에서 이미 시스템 메모리 영역(971)으로 사용 중이던 제2 메모리 영역을 가속기 메모리 영역(972)으로 재설정하고, 가속기 유닛(911)에 기초한 액세스를 제2 메모리 영역에 대해 허용할 수 있다.
참고로, 가속기 메모리 영역(972)과 시스템 메모리 영역(971)은 같은 메모리 랭크일 수도 있고, 서로 다른 메모리 랭크일 수도 있다. 호스트 프로세서가 메모리 사용률을 우선시하는 경우, 같은 메모리 랭크에서 가속기 메모리 영역(972)과 시스템 메모리 영역(971)을 설정할 수 있다. 호스트 프로세서가 가속 속도를 우선시하는 경우, 가속기 메모리 영역(972)과 시스템 메모리 영역(971)이 서로 다른 메모리 랭크에서 설정될 수 있다.
도 10은 일 실시예에 따른 호스트 프로세서에서 가속 논리 실행 요청 여부에 따라 수행되는 동작의 흐름도를 도시한다.
단계(1010)에서 호스트 프로세서는 가속 논리 실행 요청의 발생을 감지할 수 있다. 예를 들어, 호스트 프로세서는 전자 장치의 사용자 입력 또는 외부 장치로부터 가속 논리 실행 요청을 수신할 수 있다.
단계(1020)에서 호스트 프로세서는 미사용의 가용한 메모리 영역이 존재하는지 판단할 수 있다.
단계(1070)에서 호스트 프로세서는, 미사용된(unused) 메모리 랭크 중으로부터 가속 논리를 실행가능한 메모리 랭크를 감지한 경우, 근접 메모리 프로세싱 유닛으로 하여금 감지된 메모리 랭크 내의 제2 메모리 영역을 이용하여 가속 논리를 실행하도록 유발할 수 있다. 또한, 모든 메모리 랭크가 다른 작업(예: 운영체제 또는 어플리케이션 프로그램의 동작)을 위해 사용 중일 수 있다. 이 때, 호스트 프로세서는 각 메모리 랭크의 유휴 메모리 영역(idle memory region)의 크기가 요청된 가속 논리를 실행하기에 부족한 지 여부를 판단할 수 있다. 호스트 프로세서는 유휴 메모리 영역의 메모리 크기가 가속 논리를 실행하기에 충분한 경우, 해당 유휴 메모리 영역을 이용하여 단계(1070)에서 가속 논리를 실행할 수 있다. 호스트 프로세서는 유휴 메모리 영역의 메모리 크기가 가속 논리의 실행을 위해 요구되는 메모리 크기보다 큰 경우, 가속 논리를 실행하기에 충분하다고 결정할 수 있다.
다만, 호스트 프로세서는 유휴 메모리 영역의 크기가 가속 논리를 실행하기에 충분하지 않다고 판단되는 경우, 다른 작업에 사용된 후보 메모리 영역을 아래와 같이 정리(organize)함으로써 가속 논리의 실행을 위한 메모리 영역을 확보할 수 있다.
예를 들어, 단계(1030)에서 호스트 프로세서는 후보 메모리 영역을 발견할 수 있다. 호스트 프로세서는 메모리 풀에 사용된 메모리 랭크로부터 후보 메모리 영역을 탐색할 수 있다. 호스트 프로세서는 가속 논리의 실행에 요구되는 메모리 크기에 대응하고, 마이그레이션 가능한 데이터를 가지는 영역을 후보 메모리 영역으로서 찾을 수 있다. 호스트 프로세서는 후보 메모리 영역 중으로부터 제2 메모리 영역을 결정할 수 있다.
단계(1040)에서 호스트 프로세서는 선택된 메모리 영역(예: 제2 메모리 영역)을 재설정을 위해 락킹할 수 있다. 일 실시예에 따르면 호스트 프로세서는 메모리 풀로부터 제2 메모리 영역을 배제할 수 있다. 호스트 프로세서는 제2 메모리 영역에 대한 운영체제의 액세스를 제한할 수 있다. 예를 들어, 호스트 프로세서는 선택된 메모리 영역(예: 제2 메모리 영역)에 대해 운영체제에 기초한 액세스를 제한할 수 있다. 락킹된 제2 메모리 영역은 운영체제의 메모리 풀로부터 오프라인으로 설정될 수 있다.
단계(1050)에서 호스트 프로세서는 선택된 메모리 영역의 데이터를 마이그레이션할 수 있다. 예를 들어, 호스트 프로세서는 제2 메모리 영역의 데이터를 다른 메모리 영역(예: 다른 메모리 랭크)으로 마이그레이션할 수 있다. 따라서, 제2 메모리 영역에 저장됐던 데이터의 손실이 방지될 수 있다.
단계(1060)에서 호스트 프로세서는 선택된 메모리 영역을 가속 논리를 위해 재설정할 수 있다. 호스트 프로세서는 근접 메모리 프로세싱 유닛의 액세스를 허용하도록 제2 메모리 영역을 설정할 수 있다. 예를 들어, 호스트 프로세서는 제2 메모리 영역을 가속기 모드로 재설정할 수 있다. 메모리 장치의 가속기 유닛은 제2 메모리 영역에 대해 액세스가능(accessible)해질 수 있다.
단계(1070)에서 호스트 프로세서는 메모리 영역을 이용하여 가속 논리를 실행할 수 있다. 예를 들어, 호스트 프로세서는 근접 메모리 프로세싱 유닛으로 하여금 감지된 메모리 랭크 내의 제2 메모리 영역을 이용하여 가속 논리를 실행하도록 유발할 수 있다. 호스트 프로세서는 전술한 단계(1050)의 마이그레이션이 완료된 후에 제2 메모리 영역을 이용한 가속 논리의 실행을 유발할 수 있다.
도 11 및 도 12는 일 실시예에 따른 메모리 랭크 충돌을 완화하는 메모리 재설정을 도시한다.
도 11을 참조하여, 메모리 랭크(1114)의 제한사항을 설명한다. 예를 들어, 메모리 랭크(1114)의 일부 메모리 영역이 가속 모드로 사용되는 경우, 해당 메모리 영역은 일반 메모리(regular memory)로 사용될 수 없다. 다시 말해, 해당 메모리 영역에서 일반 읽기 요청 및/또는 쓰기 요청이 처리될 수 없다. 도 11에 도시된 바와 같이, 가속기 모드로 설정된 메모리 영역에 대한 일반 메모리 액세스(regular memory access)(1191)(예: 운영체제에 기초한 액세스)는 거부(deny)될 수 있다. 반면, 같은 메모리 랭크(1114)라고 하더라도, 가속 모드로 사용되는 범위와 교차하지 않는 메모리 범위의 메모리 영역은 일반 메모리로 사용 가능할 수 있다.
다만, 가속 논리의 실행과 병렬로 일반 메모리 액세스(1191)가 발생하는 경우, 메모리 표준(예: JEDEC(Joint Electron Device Engineering Council)))으로 인해 일반 메모리 액세스(1191)가 가속 요청보다 먼저 처리될 수 있다. 일반 메모리 액세스(1191)가 가속 요청보다 높은 우선순위를 가져야 하기 때문이다. 따라서, 가속 속도가 느려지는 메모리 랭크(1114) 충돌이 발생할 수 있다.
도 11에 도시된 메모리 장치(1100)를 참조하면, 3번 메모리 랭크(1114)의 일부 메모리 영역이 가속기 모드로 설정될 수 있다. 도 1 내지 도 10에서 전술한 바에 따라, 메모리 장치(1100)의 메모리 랭크(1114)에서 가속기 모드로 설정된 메모리 영역 외의 나머지 메모리 영역은 선택적으로 가속기 모드 또는 시스템 램 모드로 동적으로 재설정될 수 있다. 가속을 수행하는 동안, 가속에 사용되는 메모리 영역에 대한 일반 메모리 액세스(1191)는 허용되지 않을 수 있다. 다시 말해, 뉴럴 네트워크의 가속 연산에 사용되는 메모리 영역에 대한 일반 메모리 액세스(1191)는 거부될 수 있다. 다만, 가속에 사용되지 않는 메모리 영역에 대한 다른 액세스(1192)는 허용될 수 있다. 가속 연산에 사용되는 메모리 영역과 교차하지 않는, 다른 메모리 영역에 대한 액세스(1192)는 허용될 수 있다. 다만, 전술한 바와 같이 같은 메모리 랭크(1114)에 대해 가속 연산 및 일반 메모리 액세스(1191)가 발생하므로, 액세스 충돌로 인하여 병렬로 수행되는 가속 연산의 속도가 감소될 수 있다.
일 실시예에 따른 메모리 장치(1100)는 전술한 메모리 랭크(1114) 충돌을 카운트하는 충돌 카운터(1115)를 더 포함할 수 있다. 충돌 카운터(1115)는 버퍼 칩(1113)에 인접하게 배치될 수 있다. 버퍼 칩(1113)은 메모리 버퍼 유닛(1110)에서 메모리 랭크(1114) 별로 배치되는 칩으로서, 예시적으로 가속기 유닛, 컨트롤러, 및 버퍼를 포함할 수 있다. 호스트 프로세서 및/또는 메모리 장치(1100)는 충돌 카운터(1115)를 통해 수집된 메모리 랭크(1114) 충돌의 횟수 또는 충돌 비율에 기초하여 메모리 랭크(1114)를 가속기 전용으로 재설정할 수도 있다. 충돌 비율은 예시적으로 해당 메모리 랭크에 대한 전체 액세스 횟수 대비 충돌 횟수의 비율을 나타낼 수 있다. 가속기 장치 드라이버는 충돌 카운터(1115)의 레지스터에 액세스할 수 있다. 가속기 장치 드라이버는 임계값(예: 임계 충돌 횟수)와 모니터링된 충돌 횟수를 비교할 수 있다. 가속기 장치 드라이버는 메모리 랭크 충돌과 관련된 정보를 재설정가능 메모리 관리자에 보고할 수 있다. 재설정가능 메모리 관리자는 충돌되는 메모리 영역의 데이터를 다른 메모리 랭크로 이동시킬 수 있다.
도 12에서는 작업 별 및 메모리 랭크 별로 데이터를 정리하는 동작이 설명된다.
일 실시예에 따르면 호스트 프로세서는, 메모리 랭크(1210)가 시스템 메모리 영역 및 가속 논리를 위한 메모리 영역을 포함하는 경우, 다른 메모리 랭크(1220)에서 가용한 공간을 감지하는 것에 기초하여 다른 메모리 랭크(1220)로 시스템 메모리 영역의 데이터를 이동시킬 수 있다. 예를 들어, 호스트 프로세서는, 메모리 랭크(1210)의 메모리 영역을 이용한 가속 논리의 실행 동안 시스템 메모리 영역에 대한 액세스가 발생하는 메모리 랭크 충돌을 임계 횟수 이상 검출하는 경우, 다른 메모리 랭크(1220)에 대해 가용한 공간을 모니터링할 수 있다. 호스트 프로세서는, 모니터링 도중 다른 메모리 랭크(1220)에서 가용한 공간을 발견하는 경우, 발견된 가용한 공간으로 시스템 메모리 영역의 데이터를 이동시킬 수 있다. 따라서, 호스트 프로세서는 해당 메모리 랭크(1210)를 해당 가속 논리의 실행을 위해서만 전용으로 설정할 수 있다. 이 때, 다른 메모리 랭크(1220)에서도 다른 가속 논리가 실행 중이라면, 호스트 프로세서는 다른 가속 논리를 방해하지 않기 위해 해당 가속 논리가 완료될 때까지 대기했다가 데이터의 이동을 수행할 수 있다.
도 12에 도시된 예시를 참조하면, 0번 메모리 랭크(1210)에서 제1 가속 논리(Acc1) 및 제1 시스템 메모리(Mem1)을 위한 메모리 영역들이 설정되고, 1번 메모리 랭크(1220)에서 제2 가속 논리(Acc2), 및 제2 시스템 메모리(Mem2)을 위한 메모리 영역들이 설정될 수 있다. 1번 메모리 랭크(1220)의 제2 가속 논리(Acc2)가 먼저 완료되는 경우, 호스트 프로세서는 0번 메모리 랭크(1210)의 제1 시스템 메모리(Mem1)의 데이터를 1번 메모리 랭크(1220)로 이동시킴으로써, 0번 메모리 랭크(1210)를 가속기 전용으로 운용할 수 있다. 따라서, 메모리 랭크의 교차하지 않는 메모리 영역들에서 가속기 모드 및 시스템 램 모드가 공존하는 동안 발생하는 메모리 랭크 충돌이 감소될 수 있다. 참고로 도 12에서는 메모리 랭크 충돌 방지를 위해, 시스템 램의 데이터를 이동시키는 예시가 설명되었으나, 이로 한정하는 것은 아니다. 설계에 따라 가속기 모드로 설정된 메모리 영역의 재설정 및 데이터 이동이 수행될 수도 있다.
도 13은 일 실시예에 따른 메모리 동적 재설정의 리눅스 구현 예시를 도시한다.
메모리 장치(1320)는 근접 메모리 가속기 하드웨어를 포함할 수 있고, 예를 들어, AxDIMM(Acceleration in DIMM) 하드웨어로 구현될 수 있다. AxDIMM은 디바이스 레벨(device level)에서 메모리 영역의 모드를 가속기 모드 및 시스템 램 모드 간에 전환할 수 있다.
AxDIMM 하드웨어는 BIOS에 의한 직접 파일 액세스(direct file access, DAX) 장치(예: DAX 장치)로서 리눅스 OS(1311)에게 노출될 수 있다. DAX 장치는 AXDIMM 장치 컨트롤러(1352-1)의 구성 요소로 확장된 DAX 장치 드라이버(1352)에 의해 관리될 수 있다. 도 6, 도 7, 및 도 9에서 전술된 가속기 장치 드라이버(1351)는 AXDIMM 장치 컨트롤러(1352-1) 및 DAX 장치 드라이버(1352)를 인터페이싱할 수 있다. 전술한 메모리 재설정기는 메모리 재설정 기능을 제공하는 리눅스 DAX KMEM 드라이버(1353)로 구현될 수 있다. 메모리 관리자(1355)는 전술된 재설정가능 메모리 관리자로서, daxctl 도구(1301)의 daxctl 명령줄 유틸리티(예: $daxctl reconfigure-device dax0.0 -mode=system-ram 및 $daxctl reconfigure-device dax0.0 -mode=devdax)를 사용하여 메모리 장치(1320)(예: AxDIMM 장치)의 메모리 영역을 재설정할 수 있다.
예시적으로, 2 가지 주요 응용 프로그램은 GCC(GNU Compiler Collection) 및 DLRM(Deep Learning Recommendation Model)의 실행을 설명한다. GCC는 DLRM에 필요한 소프트웨어(예: Caffe2)를 구축하는 데 사용되는 도구 체인(tool chain)을 나타낼 수 있다. 특정 빌드 단계에서는 메모리가 소모되고 작업을 완료하려면 추가 AxDIMM 메모리 용량이 필요할 수 있다. DLRM은 AxDIMM 장치에서 SLS(SparseLengthSum) 가속으로 엄청난 성능 이점을 얻을 수 있다.
예시적으로, 호스트 프로세서는 리눅스 OS에 대해 daxctl 도구(1301)를 사용하여 AxDIMM 장치를 시스템 램으로 재설정할 수 있다. 호스트 프로세서는 GCC로 Caffe2를 빌드할 수 있다. 호스트 프로세서는 daxctl 도구(1301)를 사용하여 AxDIMM 장치를 가속기로 재설정할 수 있다. 호스트 프로세서는 메모리 장치(1320)에서 가속으로 DLRM을 실행할 수 있다.
일 실시예에 따르면 호스트 프로세서는 간단한 SLS 가속을 위한 작업을 실행하는 과정에서, 가속 모드로 메모리 장치를 인식할 수 있다. 호스트 프로세서는 메모리 장치를 전체적으로 또는 부분적으로 재설정함으로써 운영체제에게 시스템 메모리를 내보낼 수 있다. 호스트 프로세서는 내보낸 메모리를 시스템 메모리로 사용하여 주어진 작업을 수행할 수 있다. 호스트 프로세서는 주어진 작업이 완료된 후 내보낸 메모리를 다시 가속기 모드로 재설정할 수 있다. 전술한 동작들 동안, 전자 장치는 재부팅 없이 메모리 영역들을 재설정할 수 있다.
도 14는 일 실시예에 따른 메모리 장치의 동적 재설정 시나리오를 도시한다.
예를 들어, 벤더(Vendor)가 근접 메모리 가속 서비스를 제공하는 고성능 컴퓨팅(HPC, high performance computing) 클라우드 서비스를 보유할 수 있다. 벤더는 도 1 내지 도 13에서 전술한 가속기 유닛을 갖는 메모리 장치를 포함하는 전자 장치(예: 서버)를 제공할 수 있다. 서버는 128GB(GigaByte)의 메모리 장치 및 128GB의 다른 메모리 장치를 포함할 수 있다. 메모리 장치들 중 적어도 일부 장치는 근접 메모리 가속기를 포함할 수 있다. 도 14에 도시된 시나리오에서 서버가 3 개의 워크로드를 실행할 수 있다. 1번 워크로드(Workload#1)는 80GB의 메모리를 요구할 수 있다. 2번 워크로드(Workload#2)는 20GB의 메모리 및 가속 논리를 요구할 수 있다. 3번 워크로드(Workload#3)는 130GB의 메모리를 요구할 수 있다.
일 실시예에 따른 전자 장치는 제1 메모리 장치에서 1번 워크로드(Workload#1)를 실행하고, 제2 메모리 장치(1410)에서 2번 워크로드(Workload#2)를 실행(1411)할 수 있다. 전자 장치는 가속기 모드로 설정된 제2 메모리 장치(1410)를 이용하여 2번 워크로드(Workload#2)를 실행할 수 있다. 전자 장치는 재부팅이 필요 없으므로 1번 워크로드(Workload#1)가 완료되기 전에도 제2 메모리 장치(1410)를 재설정할 수 있다. 전자 장치는 제1 메모리 장치와는 독립적으로 제2 메모리 장치(1410)에서 2번 워크로드(Workload#2)가 완료되는 경우 3번 워크로드(Workload#3)를 실행(1412)할 수 있다. 따라서, 전자 장치는 재부팅 시간(1490) 및 다른 워크로드의 완료까지의 대기 시간을 기다릴 필요 없이 즉시 메모리 장치들을 필요에 따라 재설정할 수 있다. 전자 장치는 재부팅 시간을 절약하고, 병렬적으로 워크로드들을 개별적인 메모리 장치들 및 메모리 영역들에서 실행할 수 있다.
이상에서 설명된 실시예들은 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치, 방법 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(arithmetic logic unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPGA(field programmable gate array), PLU(programmable logic unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(OS) 및 상기 운영 체제 상에서 수행되는 소프트웨어 애플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 컨트롤러를 포함할 수 있다. 또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치, 또는 전송되는 신호 파(signal wave)에 영구적으로, 또는 일시적으로 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 저장할 수 있으며 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다.
위에서 설명한 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 또는 복수의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상과 같이 실시예들이 비록 한정된 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 이를 기초로 다양한 기술적 수정 및 변형을 적용할 수 있다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.

Claims (20)

  1. 전자 장치에 있어서,
    근접 메모리 프로세싱 유닛(near memory processing unit)을 포함하는 메모리 장치와 연결된 메모리 컨트롤러를 가지는 호스트 프로세서
    를 포함하고,
    상기 호스트 프로세서는,
    상기 메모리 장치의 적어도 일부 메모리 영역에 대한 운영체제의 액세스(access)를 선택적으로(selectively) 허용하게 상기 메모리 장치를 감지하고,
    상기 운영체제의 시스템 메모리 부족에 응답하여, 상기 메모리 장치의 제1 메모리 영역에 대해 허용된 상기 운영체제의 액세스에 기초하여 상기 제1 메모리 영역을 상기 운영체제의 메모리 풀에 추가하며,
    가속 논리(acceleration logic)의 실행 요청에 응답하여, 상기 근접 메모리 프로세싱 유닛이 상기 메모리 장치의 제2 메모리 영역에 직접 액세스하는 것을 허용하도록 상기 제2 메모리 영역을 설정(configure)하는,
    전자 장치.
  2. 제1항에 있어서,
    상기 호스트 프로세서는,
    상기 메모리 장치에서 상기 가속 논리에 사용되지 않은 메모리 랭크를 감지하는 것에 기초하여 상기 감지된 메모리 랭크에 대응하는 상기 제1 메모리 영역을 상기 메모리 풀에 추가하는,
    전자 장치.
  3. 제1항에 있어서,
    상기 호스트 프로세서는,
    상기 가속 논리에 사용되고 있는 메모리 랭크 내의 상기 제1 메모리 영역이 가용한 경우, 상기 제1 메모리 영역에 대한 상기 근접 메모리 프로세싱 유닛의 액세스를 제한하도록 상기 제1 메모리 영역을 설정하고,
    상기 제1 메모리 영역을 재부팅 없이 상기 메모리 풀에 추가하는,
    전자 장치.
  4. 제1항에 있어서,
    상기 호스트 프로세서는,
    상기 운영체제의 상기 메모리 풀의 데이터를 스왑하려는 시도(attempt)를 검출하는 것에 기초하여, 상기 운영체제의 시스템 메모리가 부족하다고 결정하는,
    전자 장치.
  5. 제1항에 있어서,
    상기 호스트 프로세서는,
    미사용된(unused) 메모리 랭크 중으로부터 상기 가속 논리를 실행가능한 메모리 랭크를 감지한 경우, 상기 근접 메모리 프로세싱 유닛으로 하여금 상기 감지된 메모리 랭크 내의 상기 제2 메모리 영역을 이용하여 상기 가속 논리를 실행하도록 유발하는,
    전자 장치.
  6. 제1항에 있어서,
    상기 호스트 프로세서는,
    상기 메모리 풀에 사용된 메모리 랭크로부터 후보 메모리 영역을 탐색하고,
    상기 후보 메모리 영역 중으로부터 상기 제2 메모리 영역을 결정하며,
    상기 근접 메모리 프로세싱 유닛으로 하여금 상기 감지된 메모리 랭크 내의 상기 제2 메모리 영역을 이용하여 상기 가속 논리를 실행하도록 유발하는,
    전자 장치.
  7. 제6항에 있어서,
    상기 호스트 프로세서는,
    상기 메모리 풀로부터 상기 제2 메모리 영역을 배제하고,
    상기 제2 메모리 영역에 대한 상기 운영체제의 액세스를 제한하고 상기 근접 메모리 프로세싱 유닛의 액세스를 허용하도록 상기 제2 메모리 영역을 설정하는,
    전자 장치.
  8. 제6항에 있어서,
    상기 호스트 프로세서는,
    상기 제2 메모리 영역을 락킹하고,
    상기 제2 메모리 영역의 데이터를 다른 메모리 영역으로 마이그레이션(migration)하며,
    마이그레이션이 완료된 후에 상기 제2 메모리 영역을 이용한 상기 가속 논리의 실행을 유발하는,
    전자 장치.
  9. 제1항에 있어서,
    상기 호스트 프로세서는,
    메모리 랭크가 시스템 메모리 영역 및 상기 가속 논리를 위한 메모리 영역을 포함하는 경우, 다른 메모리 랭크에서 가용한 공간을 감지하는 것에 기초하여 상기 다른 메모리 랭크로 상기 시스템 메모리 영역의 데이터를 이동시키는,
    전자 장치.
  10. 제9항에 있어서,
    상기 호스트 프로세서는,
    상기 메모리 랭크의 메모리 영역을 이용한 상기 가속 논리의 실행 동안 상기 시스템 메모리 영역에 대한 액세스가 발생하는 메모리 랭크 충돌을 임계 횟수 이상 검출하는 경우, 상기 다른 메모리 랭크에 대해 상기 가용한 공간을 모니터링하는,
    전자 장치.
  11. 호스트 프로세서에 의해 수행되는 방법에 있어서,
    상기 호스트 프로세서는,
    근접 메모리 프로세싱 유닛(near memory processing unit)을 포함하는 메모리 장치와 연결된 메모리 컨트롤러를 가지고,
    상기 방법은,
    상기 메모리 장치의 적어도 일부 메모리 영역에 대한 운영체제의 액세스(access)를 선택적으로(selectively) 허용하게 상기 메모리 장치를 감지하는 단계;
    상기 운영체제의 시스템 메모리 부족에 응답하여, 상기 메모리 장치의 제1 메모리 영역에 대해 허용된 상기 운영체제의 액세스에 기초하여 상기 제1 메모리 영역을 상기 운영체제의 메모리 풀에 추가하는 단계; 및
    가속 논리(acceleration logic)의 실행 요청에 응답하여, 상기 근접 메모리 프로세싱 유닛이 상기 메모리 장치의 제2 메모리 영역에 직접 액세스하는 것을 허용하도록 상기 제2 메모리 영역을 설정(configure)하는 단계
    를 포함하는 방법.
  12. 제11항에 있어서,
    상기 메모리 풀에 추가하는 단계는,
    상기 메모리 장치에서 상기 가속 논리에 사용되지 않은 메모리 랭크를 감지하는 것에 기초하여 상기 감지된 메모리 랭크에 대응하는 상기 제1 메모리 영역을 상기 메모리 풀에 추가하는 단계
    를 포함하는 방법.
  13. 제11항에 있어서,
    상기 메모리 풀에 추가하는 단계는,
    상기 가속 논리에 사용되고 있는 메모리 랭크 내의 상기 제1 메모리 영역이 가용한 경우, 상기 제1 메모리 영역에 대한 상기 근접 메모리 프로세싱 유닛의 액세스를 제한하도록 상기 제1 메모리 영역을 설정하는 단계; 및
    상기 제1 메모리 영역을 재부팅 없이 상기 메모리 풀에 추가하는 단계
    를 포함하는 방법.
  14. 제11항에 있어서,
    상기 운영체제의 상기 메모리 풀의 데이터를 스왑하려는 시도(attempt)를 검출하는 것에 기초하여, 상기 운영체제의 시스템 메모리가 부족하다고 결정하는 단계
    를 더 포함하는 방법.
  15. 제11항에 있어서,
    상기 제2 메모리 영역을 설정하는 단계는,
    미사용된(unused) 메모리 랭크 중으로부터 상기 가속 논리를 실행가능한 메모리 랭크를 감지한 경우, 상기 근접 메모리 프로세싱 유닛으로 하여금 상기 감지된 메모리 랭크 내의 상기 제2 메모리 영역을 이용하여 상기 가속 논리를 실행하도록 유발하는 단계
    를 더 포함하는 방법.
  16. 제11항에 있어서,
    상기 제2 메모리 영역을 설정하는 단계는,
    상기 메모리 풀에 사용된 메모리 랭크로부터 후보 메모리 영역을 탐색하는 단계;
    상기 후보 메모리 영역 중으로부터 상기 제2 메모리 영역을 결정하는 단계; 및
    상기 근접 메모리 프로세싱 유닛으로 하여금 상기 감지된 메모리 랭크 내의 상기 제2 메모리 영역을 이용하여 상기 가속 논리를 실행하도록 유발하는 단계
    를 포함하는 방법.
  17. 제16항에 있어서,
    상기 제2 메모리 영역을 결정하는 단계는,
    상기 메모리 풀로부터 상기 제2 메모리 영역을 배제하는 단계; 및
    상기 제2 메모리 영역에 대한 상기 운영체제의 액세스를 제한하고 상기 근접 메모리 프로세싱 유닛의 액세스를 허용하도록 상기 제2 메모리 영역을 설정하는 단계
    를 포함하는 방법.
  18. 제16항에 있어서,
    상기 제2 메모리 영역을 결정하는 단계는,
    상기 제2 메모리 영역을 락킹하는 단계; 및
    상기 제2 메모리 영역의 데이터를 다른 메모리 영역으로 마이그레이션(migration)하는 단계
    를 포함하고,
    상기 가속 논리를 실행하도록 유발하는 단계는,
    마이그레이션이 완료된 후에 상기 제2 메모리 영역을 이용한 상기 가속 논리의 실행을 유발하는 단계
    를 포함하는 방법.
  19. 제11항에 있어서,
    메모리 랭크가 시스템 메모리 영역 및 상기 가속 논리를 위한 메모리 영역을 포함하는 경우, 다른 메모리 랭크에서 가용한 공간을 감지하는 것에 기초하여 상기 다른 메모리 랭크로 상기 시스템 메모리 영역의 데이터를 이동시키는 단계
    를 더 포함하는 방법.
  20. 제11항 내지 제19항 중 어느 한 항의 방법을 수행하기 위한 명령어를 포함하는 하나 이상의 컴퓨터 프로그램을 저장한 컴퓨터 판독 가능 기록 매체.
KR1020220145055A 2022-11-03 2022-11-03 메모리 장치의 메모리 영역을 동적으로 재설정하는 장치 및 방법 KR20240063438A (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020220145055A KR20240063438A (ko) 2022-11-03 2022-11-03 메모리 장치의 메모리 영역을 동적으로 재설정하는 장치 및 방법
US18/327,323 US20240152278A1 (en) 2022-11-03 2023-06-01 Apparatus and method for dynamically reconfiguring memory region of memory device
EP23196828.0A EP4365747A1 (en) 2022-11-03 2023-09-12 Apparatus and method for dynamically reconfiguring memory region of memory device
CN202311340606.5A CN117991977A (zh) 2022-11-03 2023-10-16 用于动态地重配置存储器装置的存储器区域的设备和方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020220145055A KR20240063438A (ko) 2022-11-03 2022-11-03 메모리 장치의 메모리 영역을 동적으로 재설정하는 장치 및 방법

Publications (1)

Publication Number Publication Date
KR20240063438A true KR20240063438A (ko) 2024-05-13

Family

ID=88017715

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020220145055A KR20240063438A (ko) 2022-11-03 2022-11-03 메모리 장치의 메모리 영역을 동적으로 재설정하는 장치 및 방법

Country Status (4)

Country Link
US (1) US20240152278A1 (ko)
EP (1) EP4365747A1 (ko)
KR (1) KR20240063438A (ko)
CN (1) CN117991977A (ko)

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9274839B2 (en) * 2012-09-27 2016-03-01 Intel Corporation Techniques for dynamic physical memory partitioning

Also Published As

Publication number Publication date
CN117991977A (zh) 2024-05-07
EP4365747A1 (en) 2024-05-08
US20240152278A1 (en) 2024-05-09

Similar Documents

Publication Publication Date Title
US10909012B2 (en) System having persistent memory
Kang et al. Enabling cost-effective data processing with smart SSD
US8595723B2 (en) Method and apparatus for configuring a hypervisor during a downtime state
CN115039077A (zh) 为实时虚拟化执行环境迁移维护存储命名空间标识符
US20140025890A1 (en) Methods and structure for improved flexibility in shared storage caching by multiple systems operating as multiple virtual machines
US11726701B2 (en) Memory expander, heterogeneous computing device using memory expander, and operation method of heterogenous computing
JP2016530625A (ja) ロッキング機構を用いた効率的なタスク・スケジューリングのための方法、システム、およびプログラム
EP4123649A1 (en) Memory module, system including the same, and operation method of memory module
CN116342365A (zh) 用于经由使用可用设备存储器扩展系统存储器的技术
CN109983443B (zh) 实现分叉非易失性存储器快速驱动器的技术
US9330024B1 (en) Processing device and method thereof
Jung Exploring design challenges in getting solid state drives closer to cpu
US10983832B2 (en) Managing heterogeneous memory resource within a computing system
US10437495B1 (en) Storage system with binding of host non-volatile memory to one or more storage devices
KR20240063438A (ko) 메모리 장치의 메모리 영역을 동적으로 재설정하는 장치 및 방법
CN114398300B (zh) 方法、集成电路及计算机可读存储介质
US20230026837A1 (en) Optimizing Virtual Machine Scheduling on Non-Uniform Cache Access (NUCA) Systems
Ha et al. Dynamic capacity service for improving CXL pooled memory efficiency
CN115516436A (zh) 存储器中的推理
Bougioukou et al. Prototyping and performance evaluation of a dynamically adaptable block device driver for PCIe-based SSDs
KR102621484B1 (ko) I/o 프로세스의 스케줄링 방법 및 장치
US11941422B2 (en) Virtual non-uniform memory access (NUMA) locality table for NUMA systems
US11714753B2 (en) Methods and nodes for handling memory
US20230004417A1 (en) Method and apparatus to select assignable device interfaces for virtual device composition
US20230376238A1 (en) Computing system for managing distributed storage devices, and method of operating the same