KR20190067088A - 메모리 제어 장치 및 이를 포함하는 컴퓨팅 디바이스 - Google Patents

메모리 제어 장치 및 이를 포함하는 컴퓨팅 디바이스 Download PDF

Info

Publication number
KR20190067088A
KR20190067088A KR1020180126267A KR20180126267A KR20190067088A KR 20190067088 A KR20190067088 A KR 20190067088A KR 1020180126267 A KR1020180126267 A KR 1020180126267A KR 20180126267 A KR20180126267 A KR 20180126267A KR 20190067088 A KR20190067088 A KR 20190067088A
Authority
KR
South Korea
Prior art keywords
memory
address
storage device
request
cache
Prior art date
Application number
KR1020180126267A
Other languages
English (en)
Other versions
KR102101622B1 (ko
Inventor
정명수
국동현
권미령
고성준
장지에
Original Assignee
주식회사 맴레이
연세대학교 산학협력단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 주식회사 맴레이, 연세대학교 산학협력단 filed Critical 주식회사 맴레이
Priority to US16/198,972 priority Critical patent/US10929291B2/en
Priority to CN201811488566.8A priority patent/CN109885254A/zh
Publication of KR20190067088A publication Critical patent/KR20190067088A/ko
Application granted granted Critical
Publication of KR102101622B1 publication Critical patent/KR102101622B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
    • 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/0893Caches characterised by their organisation or structure
    • 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/0683Plurality of storage devices
    • G06F3/0685Hybrid storage combining heterogeneous device types, e.g. hierarchical storage, hybrid arrays

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, 메모리 및 플래시 기반의 저장 장치를 포함하는 컴퓨팅 디바이스의 메모리 제어 장치가 제공된다. 메모리 제어 장치는 주소 관리기 및 인터페이스를 포함한다. 주소 관리기는 메모리의 메모리 공간과 저장 장치의 저장 공간을 확장 메모리 공간으로 통합하며, 메모리의 메모리 공간을 저장 장치의 저장 공간을 위한 캐시로 사용하여서 CPU로부터의 확장 메모리 공간으로의 메모리 요청을 처리한다. 인터페이스는 메모리 및 저장 장치로의 액세스에 사용된다.

Description

메모리 제어 장치 및 이를 포함하는 컴퓨팅 디바이스{MEMORY CONTROLLING DEVICE AND COMPUTING DEVICE INCLUDING THE SAME}
본 발명은 메모리 제어 장치 및 이를 포함하는 컴퓨팅 디바이스에 관한 것이다.
최근 영구 메모리(persistent memory) 기술은 데이터 센터 및 고성능 컴퓨터의 성능을 크게 향상시킬 수 있으므로 상당한 주목을 받고 있다. 특히 많은 컴퓨팅 영역에서 시스템 장애 및 고장으로부터의 복구를 위해 백엔드(back-end) 스토리지가 필요하다. 그런데 영구 메모리는 모든 메모리 상태를 자발적으로 즉각적으로 복구할 수 있으므로, 백엔드 스토리지에 대한 많은 수의 액세스 및 관련된 런타임 오버헤드를 제거할 수 있다.
최근 NVDIMM(non-volatile dual in-line memory module)-N, NVDIMM-P 등의 영구 메모리 기술이 제안되고 있다. 예를 들어, NVDIMM-N은 DRAM(dynamic random access memory)과 배터리로 구성되지만, 운영 체제(operating system, OS)로부터의 직접 액세스(direct access, DAX)와 같은 소프트웨어 지원을 필요로 한다. NVDIMM-N은 사용자가 볼 수 없고 전원 장애가 발행할 때 DRAM으로부터 데이터를 백업하는 데만 사용되는 소형 플래시 장치를 통합하고 있다. NVDIMM-P는 배터리 지원(battery-backed) DRAM을 3D XpointTM나 플래시와 같은 스토리지 클래스 메모리(storage class memory)와 함께 동일한 모듈에 배치하는 하드웨어 전용 솔루션으로, 스토리지 클래스 메모리가 제공하는 대용량의 이점을 얻기 위해 소프트웨어 지원을 필요로 하지 않는다. NVDIMM은 DRAM과 유사한 지연 시간 및 대역폭을 가지는 바이트 주소 지정이 가능한(byte-addressable) 지속성을 제공하기 때문에, 데이터베이스 관리 시스템(DBMS), 트랜잭션 처리, 그리고 체크포인트(checkpoint)와 같은 다양한 데이터 집약적 어플리케이션에 유용할 수 있다. 그러나 NVDIMM의 DRAM 용량은 배터리 기술의 열악한 확장성으로 인해 제한적이다. 예를 들어, 지난 20년 동안 DRAM의 저장 밀도는 수십 배 이상 증가했지만 리튬 이온 배터리의 에너지 밀도는 겨우 3배 증가했다.
확장 가능하면서도 영구적인 메모리 공간을 구축하기 위한 가능한 솔루션 중 하나는 NVDIMM을 SSD(solid-state drive) 및 메모리 맵 파일(memory-mapped files, MMFs)과 함께 사용하는 것이며, 이는 메모리 관리자나 파일 시스템에서 구현될 수 있다. 이를 통해 데이터 집약적 어플리케이션이 기존의 로드/저장 명령어(load/store instructions)로 많은 저장 공간에 액세스할 수 있다. 그러나 이러한 MMF 지원 영구 메모리는, NVDIMM 전용 솔루션과 비교하여, 사용자 레벨에서 데이터 집약적 어플리케이션의 성능을 평균적으로 48% 저하시킬 수 있다. 이러한 성능 저하는 로드/저장 명령어가 경험하는 긴 스톨뿐만 아니라, 사용자와 시스템 메모리 공간 사이에서의 소프트웨어 오버헤드 및 수많은 데이터 복사 작업으로 인해 발생한다.
본 발명이 이루고자 하는 과제는 메모리의 메모리 용량과 저장 장치의 저장 용량을 통합하여서 메모리 공간을 제공할 수 있는 메모리 제어 장치 및 이를 포함하는 컴퓨팅 디바이스를 제공하는 것이다.
본 발명의 한 실시예에 따르면, 중앙 프로세싱 유닛(central processing unit, CPU), 메모리 및 플래시 기반의 저장 장치를 포함하는 컴퓨팅 디바이스의 메모리 제어 장치가 제공된다. 상기 메모리 제어 장치는 주소 관리기와 상기 메모리 및 상기 저장 장치로의 액세스에 사용되는 인터페이스를 포함한다. 상기 주소 관리기는, 상기 메모리의 메모리 공간과 상기 저장 장치의 저장 공간을 확장 메모리 공간으로 통합하며, 상기 메모리의 메모리 공간을 상기 저장 장치의 저장 공간을 위한 캐시로 사용하여서 상기 CPU로부터의 상기 확장 메모리 공간으로의 메모리 요청을 처리한다.
상기 메모리 요청의 주소는 상기 저장 공간의 용량을 메모리 공간의 용량으로 사용하는 메인 메모리의 주소일 수 있다. 이 경우, 상기 주소 관리기는 상기 저장 장치의 저장 공간을 상기 메모리의 메모리 공간에 매핑함으로써 상기 메모리 요청을 처리할 수 있다.
상기 주소 관리기는 상기 메모리 요청의 주소에 기초해서 상기 캐시에서 히트(hit) 또는 미스(miss)를 조회하는 캐시 로직을 사용하여 상기 메모리의 메모리 공간과 상기 저장 장치의 저장 공간을 확장 메모리 공간으로 통합할 수 있다.
상기 주소 관리기는 상기 캐시 로직으로 하드웨어 캐시 로직을 사용하여 소프트웨어의 도움 없이 상기 메모리의 메모리 공간과 상기 저장 장치의 저장 공간을 확장 메모리 공간으로 통합할 수 있다.
상기 메모리 제어 장치는 큐 엔진을 더 포함할 수 있다. 이 경우, 상기 인터페이스는 상기 메모리를 위한 메모리 인터페이스 및 상기 저장 장치를 위한 저장 장치 인터페이스를 포함할 수 있다. 상기 메모리 요청이 상기 캐시에서 미스인 경우, 상기 주소 관리기는 상기 메모리 요청에 기초하여 상기 저장 장치를 위한 명령 구조를 가지는 명령을 생성하여 상기 큐 엔진으로 전달하고, 상기 큐 엔진은 상기 명령을 상기 저장 장치 인터페이스를 통해 상기 저장 장치로 전달할 수 있다. 상기 메모리 요청이 상기 캐시에서 히트인 경우, 상기 주소 관리기는 상기 캐시 로직으로부터 상기 메모리 요청의 주소에 해당하는 상기 메모리의 메모리 주소를 가져오고, 상기 메모리 주소를 가지는 상기 메모리 요청을 상기 메모리로 전달할 수 있다.
상기 큐 엔진은 상기 명령을 서브미션 큐로 제출하고 도어벨 레지스터를 울려서 상기 저장 장치로 전달할 수 있다.
상기 메모리 요청이 읽기 요청인 경우, 상기 명령은 상기 메모리에서 상기 저장 장치로 캐시 데이터를 방출하기 위한 제1 명령 및 상기 저장 장치로부터 상기 메모리로 대상 읽기 데이터를 읽기 위한 제2 명령을 포함할 수 있다. 상기 메모리 요청이 쓰기 요청인 경우, 상기 명령은 상기 메모리에서 상기 저장 장치로 상기 캐시 데이터를 방출하기 위한 상기 제1 명령을 포함할 수 있다.
상기 제1 명령은, 상기 캐시 로직의 복수의 세트 중 상기 메모리 요청의 주소에 대응하는 세트에 기록된 메모리 주소를 지시하는 포인터 및 상기 메모리 요청의 주소와 상기 메모리 요청의 주소에 대응하는 상기 세트에 기록된 값에 기초하여서 생성된 저장 장치 주소를 지시하는 논리 주소를 포함할 수 있다. 상기 제2 명령은, 상기 메모리 요청의 주소에 대응하는 상기 세트에 기록된 메모리 주소를 지시하는 포인터 및 상기 메모리 요청의 주소에 대응하는 저장 장치 주소를 지시하는 논리 주소를 포함할 수 있다.
상기 메모리 제어 장치는, 상기 메모리 요청이 상기 캐시에서 미스인 경우, 상기 메모리 요청에 기초하여 상기 저장 장치가 상기 메모리에 직접 액세스하기 위한 명령을 생성하는 저장 장치 명령 생성기를 더 포함할 수 있다. 이 경우, 상기 인터페이스는 메모리 인터페이스를 포함할 수 있다. 상기 메모리 인터페이스는 상기 메모리의 레지스터와 상기 저장 장치의 레지스터에 레지스터 기반 인터페이스로 연결될 수 있다. 상기 저장 장치 명령 생성기는 상기 명령을 상기 메모리 인터페이스를 통해 상기 저장 장치로 전달하여서 상기 저장 장치가 상기 레지스터 기반 인터페이스를 통해 상기 메모리에 상기 메모리 인터페이스를 통해 직접 액세스하도록 할 수 있다.
상기 명령은 소스 주소, 목적지 주소 및 요청 유형을 포함할 수 있다. 상기 소스 주소는 상기 메모리의 메모리 주소와 상기 저장 장치의 저장 장치 주소 중 어느 하나를 지시하고, 상기 목적지 주소는 상기 메모리 주소와 상기 저장 장치 주소 중 다른 하나를 지시하며, 상기 요청 유형은 읽기 또는 쓰기를 지시할 수 있다. 상기 저장 장치의 컨트롤러의 제어에 따라, 상기 소스 주소로부터 상기 목적지 주소로 데이터가 전달될 수 있다.
상기 메모리 제어 장치는, 상기 저장 장치로 상기 명령이 전달되는 경우에 설정되는 잠금 레지스터를 더 포함할 수 있다. 상기 잠금 레지스터가 설정된 경우, 상기 메모리 제어 장치가 상기 메모리에 액세스하는 것이 차단될 수 있다.
상기 메모리 요청이 상기 캐시에서 미스인 경우, 상기 메모리 요청이 상기 저장 장치와 상기 메모리에서 처리되도록 명령이 상기 저장 장치로 전달될 수 있다. 상기 명령은 저널 태그를 포함하고, 상기 명령이 상기 저장 장치로 전달될 때 상기 저널 태그는 제1값으로 설정되고, 상기 명령이 상기 저장 장치에서 완료될 때 상기 저널 태그는 제2값으로 설정될 수 있다.
상기 메모리는 상기 캐시 로직이 저장된 고정된 메모리 영역을 포함할 수 있다.
상기 캐시 로직은 복수의 인덱스에 각각 대응하는 복수의 세트를 포함하고, 각 세트는 태그를 포함할 수 있다. 이 경우, 상기 메모리 요청의 주소가 적어도 대상 태그 및 대상 인덱스로 분해될 수 있다. 또한 상기 주소 관리기는 상기 복수의 세트 중 상기 대상 인덱스와 동일한 인덱스를 가지는 세트에 저장된 태그와 상기 대상 태그가 동일한 경우에 히트로 판단하고, 상기 저장된 태그와 상기 대상 태그가 다른 경우에 미스로 판단할 수 있다.
각 세트는 대응하는 캐시 영역이 현재 사용 중인지를 지시하는 비지(busy) 비트를 더 포함할 수 있다. 상기 메모리 요청의 미스에 따라 상기 메모리에서 상기 저장 장치로 캐시 데이터를 방출하는 경우, 상기 주소 관리기는 상기 복수의 세트 중 상기 메모리 요청의 주소에 대응하는 대상 세트의 상기 비지 비트를 소정 값으로 설정하고, 상기 캐시 데이터를 상기 메모리의 소정 영역에 복제하고, 상기 캐시 데이터의 방출을 위한 포인터를 상기 소정 영역을 지시하도록 갱신할 수 있다.
상기 CPU로부터 상기 대상 세트에 대응하는 캐시 영역으로의 쓰기 요청을 수신한 경우, 상기 주소 관리기는 상기 대상 세트의 비지 비트를 참조하여 상기 비지 비트가 상기 소정 값인 경우 상기 쓰기 요청을 대기시키고, 상기 소정 영역에서 상기 캐시 데이터의 방출이 완료된 후에 상기 쓰기 요청을 처리할 수 있다.
본 발명의 다른 실시예에 따르면, 위에서 설명한 메모리 제어 장치, 상기 CPU, 상기 메모리, 그리고 상기 저장 장치를 포함하는 컴퓨팅 디바이스가 제공된다.
본 발명의 또 다른 실시예에 따르면, CPU, 메모리 및 플래시 기반의 저장 장치를 포함하는 컴퓨팅 디바이스의 메모리 제어 장치가 제공된다. 상기 메모리 제어 장치는, 주소 관리기, 상기 저장 장치를 위한 큐를 관리하는 큐 엔진, 상기 메모리를 위한 메모리 인터페이스, 그리고 상기 저장 장치를 위한 저장 장치 인터페이스를 포함한다. 상기 주소 관리기는, 상기 메모리의 메모리 공간과 상기 저장 장치의 저장 공간을 확장 메모리 공간으로 통합하며, 상기 메모리의 메모리 공간을 상기 저장 장치의 저장 공간을 위한 캐시로 사용하여서 상기 CPU로부터의 상기 확장 메모리 공간으로의 메모리 요청을 처리한다. 상기 주소 관리기는 상기 메모리 요청의 주소에 기초해서 상기 캐시에서 히트(hit) 또는 미스(miss)를 조회하는 캐시 로직을 사용한다. 상기 캐시 로직에서 히트인 경우, 상기 주소 관리기는 상기 메모리 요청의 주소에 대응하는 상기 캐시 로직의 엔트리에 기초해서 상기 메모리 요청을 상기 메모리 인터페이스를 통해 상기 메모리로 전달한다. 상기 캐시 로직에서 미스인 경우, 상기 주소 관리기는 상기 메모리 요청의 주소에 대응하는 상기 캐시 로직의 엔트리에 기초해서 상기 메모리 요청으로부터 상기 저장 장치를 위한 명령 구조를 가지는 명령을 생성한다. 상기 큐 엔진은 상기 명령을 상기 저장 장치 인터페이스를 통해 상기 저장 장치로 전달한다.
상기 주소 관리기는, 상기 캐시 로직으로 하드웨어 캐시 로직을 사용하여 소프트웨어의 도움 없이 상기 메모리의 메모리 공간과 상기 저장 장치의 저장 공간을 확장 메모리 공간으로 통합할 수 있다.
본 발명의 또 다른 실시예에 따르면, CPU를 포함하는 컴퓨팅 디바이스의 메모리 제어 장치가 제공된다. 상기 메모리 제어 장치는, 제1 레지스터 및 메모리 영역을 포함하는 메모리, 제2 레지스터 및 플래시 매체를 포함하는 저장 장치, 주소 관리기, 저장 장치 명령 생성기, 그리고 메모리 인터페이스를 포함한다. 상기 주소 관리기는, 상기 메모리의 메모리 공간과 상기 저장 장치의 저장 공간을 확장 메모리 공간으로 통합하며, 상기 메모리의 메모리 공간을 상기 저장 장치의 저장 공간을 위한 캐시로 사용하여서 상기 CPU로부터의 상기 확장 메모리 공간으로의 메모리 요청을 처리한다. 상기 메모리 인터페이스는, 상기 메모리를 위한 인터페이스이며, 상기 제1 레지스터와 상기 제2 레지스터 기반 인터페이스로 연결된다. 상기 메모리 요청이 상기 캐시에서 히트인 경우, 상기 주소 관리기는 상기 메모리 요청의 주소에 대응하는 상기 캐시 로직의 엔트리에 기초해서 상기 메모리 요청을 상기 메모리 인터페이스를 통해 상기 메모리로 전달한다. 상기 메모리 요청이 상기 캐시에서 미스인 경우, 상기 저장 장치 명령 생성기는 상기 메모리 요청의 주소에 대응하는 상기 캐시 로직의 엔트리에 기초해서 상기 저장 장치가 상기 메모리에 직접 액세스하기 위한 명령을 생성하고, 상기 명령을 상기 레지스터 기반 인터페이스를 통해 상기 저장 장치로 전달하여서 상기 저장 장치가 상기 레지스터 기반 인터페이스를 통해 상기 메모리에 직접 액세스하도록 한다.
상기 주소 관리기는 상기 캐시 로직으로 하드웨어 캐시 로직을 사용하여 소프트웨어의 도움 없이 상기 메모리의 메모리 공간과 상기 저장 장치의 저장 공간을 확장 메모리 공간으로 통합한다.
본 발명의 한 실시예에 따르면, 메모리의 메모리 용량과 저장 장치의 저장 용량을 통합하여서 메모리 공간을 제공할 수 있다. 또한 소프트웨어의 도움 없이 하드웨어 자동화를 통해 메모리의 메모리 용량과 저장 장치의 저장 용량을 통합하여서 메모리 공간을 제공할 수 있다.
도 1 및 도 2는 각각 영구 메모리를 사용하는 컴퓨팅 디바이스의 개략적인 블록도이다.
도 3은 사용자 어플리케이션이 SSD로 NVDIMM을 확장하는 데 필요한 소프트웨어 지원 및 스토리지 스택을 나타내는 도면이다.
도 4는 SSD의 구조를 나타내는 블록도이다.
도 5는 SSD의 데이터 경로를 설명하는 도면이다.
도 6은 SSD에 구현된 소프트웨어 아키텍처를 나타내는 도면이다.
도 7은 본 발명의 한 실시예에 따른 컴퓨팅 디바이스의 개략적인 블록도이다.
도 8은 본 발명의 한 실시예에 따른 메모리 제어 장치의 동작을 나타내는 흐름도이다.
도 9는 본 발명의 한 실시예에 따른 컴퓨팅 디바이스의 메모리를 나타내는 도면이다.
도 10은 본 발명의 한 실시예에 따른 메모리 제어 장치의 캐시 로직을 나타내는 도면이다.
도 11은 본 발명의 한 실시예에 따른 컴퓨팅 디바이스에서 메모리와 저장 장치 사이에서의 데이터 전달의 한 예를 나타내는 도면이다.
도 12는 본 발명의 한 실시예에 따른 컴퓨팅 디바이스에서 메모리와 저장 장치 사이에서의 데이터 전달의 다른 예를 나타내는 도면이다.
도 13, 도 14 및 도 15는 본 발명의 한 실시예에 따른 메모리 제어 장치에서의 전원 장애 복구 절차를 설명하는 도면이다.
도 16은 본 발명의 다른 실시예에 따른 컴퓨팅 디바이스의 개략적인 블록도이다.
도 17은 본 발명의 다른 실시예에 따른 컴퓨팅 디바이스에서 레지스터 기반 인터페이스를 나타내는 도면이다.
도 18은 본 발명의 다른 실시예에 따른 메모리 제어 장치의 동작을 나타내는 흐름도이다.
아래에서는 첨부한 도면을 참고로 하여 본 발명의 실시예에 대하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에 한정되지 않는다. 그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
도 1 및 도 2는 각각 영구 메모리를 사용하는 컴퓨팅 디바이스의 개략적인 블록도이다.
도 1 및 도 2를 참고하면, 컴퓨팅 디바이스는 중앙 처리 유닛(central processing unit, CPU)(110), 영구 메모리(121 또는 122), 저장 장치(130) 및 메모리 제어 장치(140)를 포함한다.
메모리 제어 장치(140)는 영구 메모리(121 또는 122)와 저장 장치(130)를 CPU(110)와 연결하며, 예를 들면 노스브릿지(northbridge) 또는 메모리 컨트롤러 허브(memory controller hub, MCH)일 수 있다.
영구 메모리(121 또는 122)는 예를 들면 NVDIMM(non-volatile dual in-line memory module)일 수 있으며, 메모리 버스(150)를 통해 메모리 제어 장치(140)에 연결된다. 메모리 버스(150)는 예를 들면 DIMM(dual in-line memory module) 메모리 버스일 수 있다.
도 1에 도시한 것처럼, 영구 메모리(121)는 NVDIMM-N일 수 있다. NVDIMM-N(121)은 JEDEC(joint electron device engineering council) 표준에 따른 영구 메모리 모듈로, DRAM 모듈(121a), 플래시 모듈(121b), 슈퍼 커패시터(121c), 전력 관리기(121d), NVDIMM 컨트롤러(121e), DIMM 커넥터(121f) 및 멀티플렉서(MUX)(121g)를 포함한다.
NVDIMM-N(121)은 DRAM 모듈(121a)과 플래시 모듈(121b)을 통합한다. 플래시 모듈(121b)은 DRAM 모듈(121a)의 백업 저장 매체로서, DRAM 모듈(121a)과 동일한 용량을 가지며 사용자가 볼 수 없다. 슈퍼 커패시터(121c)는 정전이 발생할 때 DRAM 모듈(121a)의 백업 동작을 위한 에너지원으로 사용되며, 전력 관리기(121d)는 슈퍼 커패시터(121c)의 전력을 관리한다. DIMM 커넥터(121f)는 NVDIMM-N(121)을 메모리 버스(150)에 연결하며, 멀티플렉서(121g)는 메모리 DIMM 커넥터(121f)와 DRAM 모듈(121a) 사이에 위치하며, 백업 및 복원 작업이 수행될 때 DRAM 모듈(121a)을 메모리 버스(150)에서 분리한다. NVDIMM 컨트롤러(121e)는 DRAM 모듈(121a)의 액세스 및 DRAM 모듈(121a)과 플래시 모듈(121b) 사이의 백업 및 복원 작업을 제어한다.
도 2에 도시한 것처럼, 영구 메모리는 NVDIMM-N(122)일 수 있다. NVDIMM-P(122)는 DRAM 모듈(122a), 스토리지 클래스 메모리 모듈(storage class memory, SCM)(122b), 슈퍼 커패시터(122c), 전력 관리기(122d), NVDIMM 컨트롤러(122e) 및 DIMM 커넥터(122f)를 포함한다.
NVDIMM-P(122)는 DRAM 모듈(122a)과 SCM 모듈(122b)을 통합하며, NVDIMM-N(121)과 달리 SCM 모듈(122b)의 저장 공간을 사용자에게 노출시킨다. SCM 모듈(122b)은 예를 들면 온보드 컨트롤러를 가지는 3D XpointTM일 수 있다.
DRAM 모듈(121a, 122a)은 정상 동작 모드에서 NVDIMM(121, 122)로의 메모리 요청을 처리하므로, NVDIMM(121, 122)은 DRAM과 유사한 지연 시간 및 프로토콜 관리 기능을 제공할 수 있다. 예기치 않은 정전이 발생하면 DRAM 모듈(121a, 122a)은 슈퍼 커패시터(121c, 122c)로부터 전력을 공급받아서, NVDIMM 컨트롤러(121e, 122e)가 DRAM 모듈(121a, 122a)로부터 플래시 모듈(121b) 또는 SCM 모듈(122b)로의 백업 작업을 완료할 때까지 상태를 유지한다. 전력이 복원된 후, NVDIMM 컨트롤러(121e, 122e)는 플래시 모듈(121b) 또는 SCM 모듈(122b)에서 DRAM 모듈(121a, 122a)로의 복원 작업을 시작한다.
저장 장치(130)는 예를 들면 SSD, 특히 초저지연(ultra-low latency, ULL) 플래시와 같은 고성능 SSD일 수 있다. SSD(130)는 메모리 제어 장치(140)의 다른 부분, 즉 PCIe(peripheral component interconnect express) 루트 컴플렉스(root complex)(141)에 연결된다. PCIe 인터페이스는 현대 컴퓨터 시스템에서 메모리 버스로 취급되지만, 입출력(input/output, I/O) 트랜잭션을 위해 CPU(110)와 SSD(130) 사이에서 4KB 이상의 데이터 패킷을 전송한다. I/O 액세스의 단위(granularity)는 페이지 또는 블록이므로, 사용자 어플리케이션은 NVMe(non-volatile memory) 드라이버 위의 I/O 런타임 라이브러리, 파일 시스템 및 블록 계층을 포함하는 OS의 전체 스토리지 스택을 거쳐 SSD(130)에 액세스할 수 있다. NVMe 드라이버는 PCIe를 통한 데이터 패킷의 전달을 관리하고, 도어벨 레지스터, 큐 속성(attributes), 각 큐의 대상 주소 및 NVMe 컨트롤러 정보를 포함하여 PCIe 베이스 라인 주소 레지스터(baseline address registers, BARs)를 통해 SSD(130)의 NVMe 컨트롤러와 통신한다.
도 3은 사용자 어플리케이션이 SSD로 NVDIMM을 확장하는 데 필요한 소프트웨어 지원 및 스토리지 스택을 나타내는 도면이다.
리눅스(Linux) 시스템의 MMF(memory-mapped file) 모듈("mmap"이라고도 함)은 SSD(306)로 NVDIMM의 영구 메모리 공간을 확장하는데 사용될 수 있다. 도 3에 도시한 것처럼, 프로세스(301)가 SSD(306)에 대한 파일 디스크립터(file descriptor, fd)로 mmap()을 호출하면(S310), MMF 모듈은 메모리 관리 구조(예를 들면, mm_struct)에 가상 메모리 영역(virtual memory area, VMA)을 할당하여서 메모리 관리 구조로 표시되는 프로세스 주소 공간(가상 공간)에 새로운 매핑을 생성한다. 즉, MMF 모듈은 프로세스 메모리와 대상 파일 사이의 매핑을 설정하여 파일 디스크립터(fd)를 가상 메모리 영역(VMA)에 링크(link)한다(S320). 프로세스가 로드/저장 명령어(ld/st)로 가상 메모리 영역(VMA)에서 지정한 메모리에 액세스할 때, NVDIMM에서 데이터를 사용할 수 없으면 페이지 폴트(page fault)가 트리거된다(S330).
페이지 폴트가 발생하면, 메모리 관리 장치(memory management unit, MMU) 핸들러(302)가 호출(invoke)되어 가상 메모리 영역(VMA)에 새 페이지를 할당한다(S340). 새 페이지는 사용 중이 아닌 페이지 풀(free page pool)에서 할당된다. 가상 메모리 영역(VMA)이 대상 파일에 링크되어 있으므로, MMU 핸들러(302)는 파일 디스크립터(fd)와 연관된 파일 메타데이터를 검색하고 그 액세스에 대한 잠금(lock)을 획득한다(S350). 그런 다음 MMU 핸들러(302)는 해당 파일 시스템(FS)(303)의 폴트 핸들러와 통신하여 SSD(306)에서 페이지를 읽는다. 파일 시스템(303)은 bio라고 하는 블록 I/O 요청 구조(block I/O request structure)를 초기화하고, 이를, 다중 소프트웨어 큐에 걸쳐 I/O 요청을 스케줄링하는, 다중 큐 블록 I/O 큐잉(multi-queue block I/O queueing, blk-mq) 계층(304)에 제출한다(S360). 대상 시스템의 설계에 따라, 하나 이상의 소프트웨어 큐가, NVMe 드라이버(305)가 관리하는, 하드웨어 디스패치 큐에 매핑될 수 있다. blk-mp 계층(304)은 I/O 요청을 NVMe 드라이버(305)로 전달하고(S370), NVMe 드라이버(305)는 I/O 요청에 따른 명령을 SSD(306)로 발행한다(S380). SSD(306)에서 I/O 요청(즉, bio)의 서비스가 완료되고 실제 데이터가 할당된 페이지 메모리의 새 영역에 로드되면, MMU 핸들러(302)는 페이지 테이블 엔트리(page table entry, PTE)를 생성하고, 페이지 테이블 엔트리에 새 페이지 주소를 기록하고(S390), 프로세스를 재개한다.
이와 같이, MMF 모듈은 하나 이상의 SSD를 가진 NVDIMM의 영구 메모리 공간을 확장하는 데 사용될 수 있다. 그러나 이러한 접근 방식은, 페이지 폴트, 파일 시스템 액세스, 컨텍스트 스위칭 및 데이터 복사로 인한 높은 오버헤드로 인해, 고성능 SSD가 가져 오는 이점 중 상당 부분을 무효화할 수 있다.
다음 SSD에 대해서 도 4 내지 도 6을 참고로 하여 설명한다.
도 4는 SSD의 구조를 나타내는 블록도이며, 도 5는 SSD의 데이터 경로를 설명하는 도면이고, 도 6은 SSD에 구현된 소프트웨어 아키텍처를 나타내는 도면이다.
도 4를 참고하면, 최첨단(state-of-the-art) SSD, 예를 들면 ULL 플래시는 플래시 매체(플래시 컴플렉스)로 많은 수의 플래시 패키지(410)를 사용하고 이들을 채널(CH1, CH2, CH3, CH4)이라고 하는 다수의 시스템 버스에 연결한다. 도 4에서는 설명의 편의상 네 개의 채널(CH1-CH4)과 각 채널(CHi)에 연결된 두 개의 플래시 패키지(410)를 도시하였다. 각 플래시 패키지(410)는 빠른 응답 시간 및 낮은 대기 시간을 위해 다수의 다이(420)를 포함하고, 다수의 다이(420)는 공유 버스(421)에 연결되어 있다. 또한 각 다이(420)는 다수의 플레인(430)을 포함할 수 있다. 도 4에서는 설명의 편의상 하나의 플래시 패키지(410)가 세 개의 다이(420)를 포함하고, 각 다이(420)가 두 개의 플레인(430)을 포함하는 것으로 도시하였다. 또한 다수의 채널(CH1-CH4)는 SSD의 컨트롤러(440)에 연결되고, 컨트롤러(440)는 캐시로 DRAM(450)을 사용할 수 있다. 대용량 병렬 처리(parallelism) 및 높은 I/O 성능을 제공하기 위해, SSD의 컨트롤러(440)는 호스트에서 제공된 I/O 요청 집합을 다수의 채널(CH1-CH4), 플래시 패키지(410), 다이(420) 및 플레인(430)으로 확산한다.
또한 SSD는 이러한 다중 채널 및 다중 웨이 아키텍처를 채택하지만 데이터 경로 및 채널 스트라이핑(stripping)을 최적화한다. 특히 ULL 플래시는 호스트의 4KB I/O 요청을 두 개의 동작으로 분할하고, 이들을 동시에 두 개의 채널로 발행한다. 이렇게 하면 직접 메모리 액세스(direct memory access, DMA) 지연 시간(latency)을 절반만큼 효과적으로 줄일 수 있다. 대부분의 고성능 SSD는 MLC(multiple-level cell) 또는 TLC(triple-level cell)를 사용하지만, ULL 플래시는 Z-NAND라는 새로운 유형의 플래시 매체를 사용한다. Z-NAND는 3D 플래시 구조를 활용하여 SLC(single-level cell) 기술을 제공하지만 I/O 회로(circuitry) 및 메모리 인터페이스를 최적화하여 짧은 지연 시간을 구현한다. 특히, Z-NAND는 수직 NAND(V-NAND) 아키텍처라고 하는 48개의 스택된 워드 라인 레이어를 사용하여 SLC 메모리를 구현한다. 고유한 NAND 플래시 아키텍처와 첨단 제조 기술 덕분에, Z-NAND의 읽기 및 쓰기 지연 시간(3us 및 100us)은 기존 V-NAND 플래시 메모리보다 각각 15배 및 7배 더 낮다.
또한 ULL 플래시는 다중 채널 앞에 대형 DRAM 모듈을 구현하고, 다수의 인터페이스 컨트롤러 및 펌웨어 모듈에 의해 관리되는 NVMe 기반 I/O 서비스를 지원한다. ULL 플래시는 NVMe 인터페이스를 통해 대용량 병렬 처리, 낮은 지연 시간 및 높은 대역폭을 제공한다. DRAM 모듈의 관리는 NVM 프로토콜 핸들링과 밀접하게 결합되어 있으며, ULL 플래시 컨트롤러 또는 펌웨어가 데이터에 대해 DMA를 수행한 후 호스트 측 DRAM과 SSD 내부 DRAM 모두에 동일한 데이터가 있을 수 있다.
도 5를 참고하면, NVMe 인터페이스는 CPU마다 큐를 생성할 수 있다. 이 큐는 SQ(submission queue)와 CQ(completion queue)의 쌍으로 이루어지며, 각각 64K개의 엔트리를 가진다. 이들은 단순 FIFO(first in first out) 큐이며, 각 엔트리는 PRP(physical region page) 포인터로 참조된다. I/O 요청의 크기가 4KB NVMe 패킷보다 큰 경우 데이터는 단일 PRP 포인터 대신 PRP 리스트로 참조될 수 있다.
도 5에서 SQ와 CQ의 헤드(head) 포인터와 테일 포인터는 각각 엔트리 0(즉, h0, t0)에서 시작하는 것으로 가정한다. 요청이 SQ(즉, SQ의 t0)에 발행되면 호스트(즉, 호스트의 NVMe 드라이버)(501)는 테일(tail) 포인터를 t1로 증가시키고(S510), SSD의 새로운 테일 포인터와 함께 해당 도어벨 레지스터(503)를 울려서(S520), SSD 내의 NVMe 컨트롤러가 호스트측 SQ와 쌍을 이루는 SSD측 SQ를 동기화할 수 있다. SSD NVMe 컨트롤러는 SQ의 헤드 포인터(h0)가 포인트하는 엔트리(엔트리 0)으로부터 I/O 요청을 가져온다(S530). 이에 따라, SQ의 헤드 포인터(h1)는 다음 엔트리(엔트리 0)을 포인트한다. 각 엔트리에 대한 데이터가 PRP가 포인트하는 호스트측 DRAM에 존재하므로, SSD는 I/O 요청을 위해 DMA를 처리한 다음, 플래시 매체 및 플래시 펌웨어가 요청을 처리한다(S540).
서비스가 완료되면, SSD의 NVMe 컨트롤러(502)는 SQ와 쌍을 이루는 CQ에 완료 결과가 제출되면 CQ의 테일 포인터를 t0에서 t1으로 이동하고(S550), 메시지 신호 인터럽트(message signaled interrupt, MSI)를 통해 호스트에 이벤트를 알린다(S560). 호스트는 인터럽트 서비스 루틴(interrupt service routine, ISR)으로 점프하고 CQ 테일 포인터를 동기화한다(S570). ISR은 요청을 완료하고, CQ의 헤드 포인터를 갱신하고(즉, 증가시키고)(S570), 새로운 헤드 포인터와 함께 해당 도어벨 레지스터(504)를 울려서 호스트측 I/O 프로세싱이 완료되었음을 알린다(S580). 마지막으로, SSD의 NVMe 컨트롤러(502)는 내부 데이터를 해제하고 CQ의 헤드 포인터를 증가시킨다. 각 I/O 요청에 대한 데이터는 호스트측 DRAM에 상주할 수 있지만, NVMe 인터페이스는 호스트측 DRAM에 캐시된 데이터에 대한 지식이 없다. 따라서 호스트측 DRAM에서 I/O 요청이 서비스될 수 있더라도, NVMe 인터페이스는 요청을 큐에 넣고 처리한다.
도 6을 참고하면, SSD 내의 펌웨어 계층 맨 위에 있는 호스트 인터페이스 계층(host interface layer, HIL)(610)은 내부 NVMe 컨트롤러와 협동하여서 NVMe 큐(611)의 NVMe 명령(CMD)을 파싱하고 NVMe 큐(611)를 관리하는데 책임이 있다. 파싱된 NVMe 명령(CMD)은 I/O 요청, 길이 및 읽기/쓰기를 지시하는 요청 유형(R/W)을 포함할 수 있다. HIL(610)은 또한 임의의 길이일 수 있는 I/O 요청을 서브요청으로 분할할 수 있다. 서브요청의 크기는 펌웨어 모듈이 관리하는 단위 I/O 크기와 일치할 수 있다. 파싱된 (및 분할된) 요청은 플래시 변환 계층(flash translation layer, FTL)(620)으로 전달된다. FTL(620)은 주어진 논리 주소, 예를 들면 논리 블록 주소(logical block address, LBA)를 물리 주소, 예를 들면 물리 페이지 번호(physical page number, PPN)로 변환한다. 각 서브요청의 주소가 PPN으로 변환된 후, 플래시 인터페이스 계층(flash interface layer, FIL)(630)은 요청을 제출하고 행/열 주소, I/O 명령, 관리(administrative) 명령 및 DMA 전달과 같은 다수의 플래시 명령을 구성하는 트랜잭션을 관리한다. 이러한 I/O 처리 동안, FTL 또는 FIL은, 구현 및 설계 전략에 따라, 요청을 다수의 내부 자원(예를 들면, 채널, 플래시 패키지, 다이, 플레인 등)에 스트라이핑하여(stripe) 낮은 지연 시간 및 높은 대역폭을 달성할 수 있다.
다음 본 발명의 한 실시예에 따른 컴퓨팅 디바이스의 메모리 제어 장치에 대해서 도 7 내지 도 15를 참고로 하여 설명한다.
도 7은 본 발명의 한 실시예에 따른 컴퓨팅 디바이스의 개략적인 블록도이며, 도 8은 본 발명의 한 실시예에 따른 메모리 제어 장치의 동작을 나타내는 흐름도이다. 도 7에 도시한 컴퓨팅 디바이스는 가능한 컴퓨팅 디바이스의 한 예이며, 본 발명의 실시예에 따른 컴퓨팅 디바이스는 다른 다양한 구조로 구현될 수 있다.
도 7을 참고하면, 본 발명의 한 실시예에 따른 컴퓨팅 디바이스는 CPU(710), 메모리(720), 저장 장치(730) 및 메모리 제어 장치(740)를 포함한다.
메모리(720)는 CPU(710)에 의해 액세스되어 사용되는 메인 메모리일 수 있다. 한 실시예에서, 메모리(720)는 DRAM과 같은 휘발성 메모리일 수 있다. 다른 실시에에서, 메모리(720)는 영구 메모리일 수 있으며, 영구 메모리는 예를 들면 NVDIMM일 수 있다.
저장 장치(730)는 SSD와 같은 플래시 기반의 저장 장치로, 예를 들면 ULL 플래시일 수 있다.
메모리 제어 장치(740)는 메모리(720)와 저장 장치(730)를 CPU(710)와 연결하며, 예를 들면 노스브릿지(northbridge) 또는 메모리 컨트롤러 허브(memory controller hub, MCH)일 수 있다. 메모리 제어 장치(740)는 메모리(720)의 메모리 용량과 저장 장치(730)의 저장 용량을 단일 메모리 공간으로 통합하는 메모리 오버 스토리지(memory-over-storage, MoS)를 제공하며, 이러한 메모리 공간은 작업(working) 메모리 확장으로 사용될 수 있다. 어떤 실시예에서, 메모리 제어 장치(740)는 메모리 용량과 저장 장치(730)의 저장 용량을 통합하여 메모리 공간을 확장하기 위해서, 모든 필요한 하드웨어를 자동화(automate)할 수 있다. 어떤 실시예에서, 메모리(720)가 영구 메모리인 경우, 메모리 공간은 영구 메모리 확장으로 사용될 수 있다.
메모리 제어 장치(740)는 저장 장치(730)의 저장 공간을 메모리(720)의 메모리 공간에 매핑함으로써 호스트, 예를 들면 CPU(710)의 메모리 관리 장치(memory management unit, MMU)로부터의 모든 메모리 요청을 처리한다. 따라서, 어떤 실시예에서, 메모리 요청의 주소는 저장 장치(730)의 주소를 지시할 수 있다. 어떤 실시예에서, MMU는 CPU(710)가 메모리에 액세스하는 것을 관리하는 장치로, CPU(710)와 같은 칩에 형성되거나 CPU(710)와 별도의 칩에 형성될 수 있다. 메모리 제어 장치(740)는 메모리(720)의 메모리 공간을 저장 장치(730)의 캐시로 사용한다. 이에 따라, CPU(710)의 MMU 또는 저장 장치(730)가 메모리(720)에 액세스하여 대상 데이터를 전송할 수 있다. 캐시 미스의 경우, 메모리 제어 장치(740)는 NVMe 명령 및 I/O 요청 큐를 내부적으로 관리하면서 모든 NVMe 관련 프로토콜 및 인터페이스 관리 정보를 OS로부터 숨기므로, MMU에서 요청한 데이터는 항상 메모리(720)에 의해 서비스될 수 있다.
다시 도 7을 참고하면, 메모리 제어 장치(740)는 주소 관리기(741), 메모리 컨트롤러(742) 및 큐 엔진(743)을 포함한다. 메모리 컨트롤러(742)는 메모리 인터페이스(744)를 통해 메모리(720)에 연결되어, 메모리(720)로 전달되거나 메모리(720)로부터 전달되는 데이터의 흐름을 관리한다. 큐 엔진(743)은 저장 장치 인터페이스(745)를 통해 저장 장치(730)에 연결된다. 한 실시예에서, 메모리 인터페이스(744)는 DDR(double data rate) 인터페이스일 수 있으며, 저장 장치 인터페이스(745)는 PCIe 루트 컴플렉스와 PCIe 인터페이스일 수 있다.
주소 관리기(741)는 저장 장치(730)의 저장 용량을 CPU(710), 특히 CPU(710)의 MMU에 노출시켜 바이트 주소 지정 가능한 주소 공간(byte-addressable address space)을 제공할 수 있다. 메모리(720)를 캐시로 사용하므로, 주소 관리기(741)는 수신한 메모리 요청을 어디로 전달할지를 결정하기 위해서 캐시 로직, 예를 들면 하드웨어 캐시 로직을 사용할 수 있다. 또한 주소 관리기(741)는 메모리(720)에서 데이터가 저장된 영역을 지시하는 PRP를 관리한다. 어떤 실시예에서, 주소 관리기(741)는 수신한 메모리 요청을 전달해야 할지를 결정하는 하드웨어 캐시 로직을 채용하여서 하드웨어 자동화(hardware automation)를 구현할 수 있다.
도 7 및 도 8을 참고하면, 메모리 제어 장치(740)가 호스트로부터 메모리 요청을 수신하면(S810), 주소 관리기(741)는 메모리 요청의 호스트가 누구인지를 확인한다(S820). CPU(710)의 MMU와 저장 장치(730)가 메모리(720)에 액세스하여 대상 데이터를 전송할 수 있으므로, 주소 관리기(741)는 메모리 요청의 호스트가 누구인지를 확인한다(S820).
메모리 요청이 저장 장치(730)에 의해 생성된 경우(S820), 주소 관리기(741)는 메모리 요청이 직접 메모리(720)에 액세스하도록 한다(S830). 즉, 저장 장치(730)의 컨트롤러, 예를 들면 NVMe 컨트롤러가 주소 관리기(741)가 관리하는 PRP를 참조함으로써 메모리(720)에 액세스하여 데이터 전달을 수행할 수 있다.
메모리 요청이 MMU에 의해 생성된 경우(S820), 주소 관리기(741)는 메모리 요청의 주소로 캐시 로직을 검색한다(S840). 캐시 로직의 검색 결과가 캐시 히트인 경우(S850), 메모리 요청은 메모리 컨트롤러(742)로 전달된다(S860). 어떤 실시예에서, 메모리 요청의 주소는 메모리(720)의 용량과 저장 장치(730)의 저장 용량이 통합된 메모리 공간의 주소 공간, 즉 MoS 주소 공간에서의 주소일 수 있다. 따라서 CPU(710), 즉 MMU는 저장 장치(730)의 저장 용량을 메인 메모리의 메모리 공간으로 보고 메모리 요청을 생성할 수 있다. 즉, 메모리 요청의 주소는 저장 장치(730)의 저장 용량을 메모리 공간의 용량으로 가지는 메인 메모리의 주소일 수 있다. 이러한 메모리 요청의 주소는 바이트 지정 가능한 주소일 수 있다. 예를 들면, 현재 컴퓨팅 디바이스에서 2~64 GB의 용량을 가지는 메모리(720)가 사용되는 반면, SSD와 같은 저장 장치(730)는 TB(terabyte) 용량을 지원하므로, 컴퓨팅 디바이스는 TB 용량을 가지는 메인 메모리를 사용하는 것처럼 동작할 수 있다.
이 경우, 캐시 히트인 경우, 캐시 로직으로부터 메모리 요청의 주소에 대응하는 메모리 주소가 획득되고, 메모리 주소가 메모리 컨트롤러(742)로 전달될 수 있다. 메모리 주소는 메모리(720)에 액세스하기 위한 주소이다. 그러면 메모리 컨트롤러(742)는 메모리 인터페이스(744)를 통해 메모리(720)에 액세스하여 데이터를 전달한다(S865).
캐시 로직의 검색 결과가 캐시 미스인 경우(S850), 주소 관리기(741)는 메모리 요청으로부터 메모리(720)와 저장 장치(730) 사이에서의 데이터 전달을 위한 새로운 I/O 요청(즉, 명령)을 생성해서 큐 엔진(743)으로 발행한다(S870). 이에 따라, 큐 엔진(743)은 PCIe 루트 컴플렉스와 인터페이스를 통해 저장 장치(730)로 명령을 제공하여, 저장 장치(730)에서 메모리(720)로 또는 메모리(720)에서 저장 장치(730)로 데이터가 전달된다(S880). 데이터 전달이 완료되면, 메모리 제어 장치(800)는 메모리 시스템 버스(예를 들면, AXI(advanced extensible interface))를 통해 MMU에 완료를 알려서, MMU가 스톨된 명령을 재개할 수 있다(S890). 즉, 읽기 요청의 경우, MMU는 메모리(720), 즉 대응하는 캐시 영역으로부터 대상 데이터를 읽을 수 있으며, 쓰기 요청의 경우 MMU는 메모리(720), 즉 대응하는 캐시 영역에 대상 데이터를 쓸 수 있다.
어떤 실시예에서, 주소 관리기(741)는 큐 엔진(743)으로 발행할 I/O 요청을 저장 장치(730)를 위한 명령 구조, 예를 들면 NVMe 명령 구조의 정보 필드를 채워서 생성할 수 있다. 한 실시예에서, 주소 관리기(741)는 읽기 또는 쓰기를 지시하는 필드(예를 들면, opcode 필드)에 읽기 또는 쓰기를 지시하는 정보를 채우고, 메모리 주소, 저장 장치 주소 및 페이지 크기(예를 들면, 4KB)를 각각 PRP, LBA 및 길이 필드에 채울 수 있다.
이렇게 생성된 명령(NVMe 명령)은 큐 엔진(743)에 의해 SQ에 입력될 수 있다. 또한 큐 엔진(743)은 저장 장치(730)에 I/O 요청의 도착을 알리기 위해 도어벨 레지스터를 울릴 수 있다. I/O 요청의 처리 완료에 따라 대응하는 인터럽트가 저장 장치(730)의 컨트롤러로부터 전달될 때마다, 큐 엔진은 대응하는 CQ를 동기화하고, CQ 및 SQ의 대상 엔트리를 지울 수 있다.
도 9는 본 발명의 한 실시예에 따른 컴퓨팅 디바이스의 메모리를 나타내는 도면이다.
도 9를 참고하면, 어떤 실시예에서, 메모리(720)의 특정 메모리 영역(721)이 고정(pin)되고, 고정된 메모리 영역(pinned memory region)(721)이 메모리 제어 장치의 동작에 사용될 수 있다. 메모리(720)는 고정된 메모리 영역(721) 외에 캐시로 사용되는 캐시 메모리 영역(722)을 포함할 수 있다. 한 실시예에서, 고정된 메모리 영역(721)은 메모리(720)의 상위 메모리 영역에 할당될 수 있으며, 예를 들면 512MB가 할당될 수 있다. 캐시 메모리 영역(722)은 메모리(720)의 나머지 영역에 할당될 수 있으며, 메모리 제어 장치(도 7의 740)의 주소 관리기(도 7의 741)에 의해 MoS 주소 공간에 매핑될 수 있다.
어떤 실시예에서, 고정된 메모리 영역(721)은 SQ와 CQ를 위한 버퍼(721a), 예를 들면 링 버퍼(ring buffer)를 포함할 수 있다.
메모리 제어 장치(740)를 설계할 때 발생할 수 있는 문제로 전원 장애 관리(power failure management)가 있을 수 있다. SSD와 같은 저장 장치는 데이터 지속성(persistency) 및 일관성(consistency)을 보장하는 블록 저장 장치로 취급되지만, 파일 시스템을 통해 액세스된다. 특히, 파일 시스템 및 다른 관련 구성 요소는 저널링(journaling)을 사용하여 일관성을 지원한다. 메모리 제어 장치(740)는 MMF(memory-mapped file) 및 파일 시스템 지원을 제거할 수 있으므로, 전원 장애가 발생하면 SSD 내부 DRAM의 데이터가 손실될 수 있다. 메모리 제어 장치(740)는 요청마다 강제 유닛 액세스(force unit access, FUA)를 태깅함으로써 데이터 지속성을 강화할 수 있지만, 이렇게 하면, NVMe 인터페이스의 모든 큐 기능을 비활성화하여 SSD 성능을 크게 저하시킬 수 있다.
이러한 문제를 해결하기 위해서, 한 실시예에서, 고정된 메모리 영역(721)이 CPU의 MMU에 보이지 않도록 할 수 있다. 초기화 프로세스 동안, 메모리 제어 장치(740)는 고정된 메모리 영역(721)의 SQ 및 CQ, 그리고 이들의 포인터를 검토한다. 전원 장애가 없다면, SQ와 CQ의 테일 포인터는 주어진 런타임에서 큐 관리 및 일관성 위반을 피하기 위해 큐 엔트리의 동일한 위치를 참조한다. 전원 장애가 발생하면, SQ와 CQ 테일 포인터가 큐 엔트리의 다른 위치(즉, 오프셋)을 참조할 수 있다. 따라서 전원 장애가 발생한 후에 전원 복원시에, 메모리 제어 장치(740)은 MMU가 볼 수 없는 공간, 즉 고정된 메모리 영역(721)에서 SQ와 CQ 테일 포인터 사이의 오프셋 차이를 확인한다. 메모리 제어 장치(740)는 오프셋 차이에 기초해서 보류 중인 모든 요청을 검출하고, 이들을 저장 장치(730)로 다시 발행할 수 있다.
어떤 실시예에서, 고정된 메모리 영역(721)은 캐시 로직에 사용할 태그 어레이(721c)를 포함할 수 있다.
어떤 실시예에서, 고정된 메모리 영역(721)은 PRP 풀(721b)을 포함할 수 있다. 캐시 메모리 영역(722)의 대상 페이지가 PRP 풀(721b)로 복사되고, 대상 페이지가 복사된 엔트리가 PRP에 의해 참조될 수 있다.
어떤 실시예에서, 고정된 메모리 영역(721)은 MSI(message signaled interrupt) 테이블(721d)을 포함할 수도 있다. MSI 테이블(721d)은 인터럽트 자원의 정보를 포함할 수 있으며, 인터럽트 자원은 예를 들면 인터럽트 벡터, 주소 및 마스크일 수 있다. 저장 장치(730)가 초기화될 때, 저장 장치(730)의 컨트롤러는 MSI 테이블을 읽어서 자신의 MSI 구성(configuration)에 채울 수 있다.
도 10은 본 발명의 한 실시예에 따른 메모리 제어 장치의 캐시 로직을 나타내는 도면이다.
도 10을 참고하면, 어떤 실시예에서, 메모리 제어 장치의 주소 관리기(도 7의 741)는 태그 어레이(1000)를 포함하는 캐시 로직을 사용할 수 있다. 태그 어레이(1000)는 복수의 웨이(1011, 1012, 1013, 1014)를 포함하며, 각 웨이는 어레이 인덱스에 대응하는 복수의 세트를 포함한다. 도 10의 예에서는 태그 어레이(1000)가 4개의 웨이(1011-1014)를 포함하고, 각 웨이가 어레이 인덱스에 128개의 세트를 포함하는 것으로 가정하였다. 어떤 실시예에서, 태그 어레이(1000)는 메모리(도 9의 720)의 고정된 메모리 영역(도 9의 721)에 형성될 수 있다. 각 세트는 메모리(720), 특히 메모리(720)의 캐시 메모리 영역(722)에서 소정 크기의 블록을 지시할 수 있으며, 태그 및 메모리 주소를 포함한다. MMU로부터 수신되는 메모리 요청의 주소는 태그, 어레이 인덱스 및 오프셋으로 분해될 수 있다. 예를 들어 각 웨이가 128개의 세트를 포함하는 경우, 어레이 인덱스는 7 비트를 가질 수 있다. 이 경우, 예를 들어 64 비트 주소는 36 비트의 태그, 7 비트의 어레이 인덱스 및 31 비트의 오프셋으로 분해될 수 있다.
메모리 제어 장치의 주소 관리기(741)는 수신한 메모리 요청의 주소에서 분해한 어레이 인덱스를 사용하여서 태그 어레이(1000)의 복수의 웨이(1011-1014)에서 어레이 인덱스에 대응하는 세트의 엔트리를 검색한다. 주소 관리기(741)는 복수의 웨이(1011-1014)의 대응하는 세트에서 가져온 태그와 수신한 요청의 주소에서 분해한 태그를 비교한다.
비교 결과, 어느 하나의 웨이로부터의 태그와 수신한 요청의 태그가 일치하면, 주소 관리기(741)는 캐시 히트로 판단하고, 일치한 태그가 저장된 세트로부터 메모리 주소를 가져온다. 캐시 히트의 경우, 주소 관리기(741)는 수신한 요청을 메모리, 즉 메모리의 캐시 메모리 영역(도 9의 722)에서 처리할 수 있도록 태그 어레이(1000)에서 가져온 메모리 주소를 메모리 컨트롤러(도 7의 742)로 발행한다.
수신한 요청의 태그가 모든 웨이로부터의 태그와 일치하지 않으면, 주소 관리기(741)는 캐시 미스로 판단한다. 캐시 미스의 경우, 주소 관리기(741)는 새로운 I/O 요청을 생성한다.
한 실시예에서, 메모리 요청이 읽기 요청인 경우, 주소 관리기(741)는 두 개의 I/O 요청을 생성할 수 있다. 두 개의 I/O 요청은 메모리, 즉 메모리의 캐시 메모리 영역(722)에서 데이터를 방출(evict)하여 저장 장치(도 7의 730)에 쓰기 위한 쓰기 요청, 그리고 저장 장치(도 7의 730)에서 데이터를 읽어서 메모리, 즉 메모리의 캐시 메모리 영역(722)에 채우기 위한 읽기 요청을 포함할 수 있다. 어떤 실시예에서, 쓰기 요청의 PRP(메모리 주소)는 어레이 인덱스에 대응하는 세트에 기록된 메모리 주소(즉, 대응하는 캐시 영역의 메모리 주소)에 해당하고, LBA(저장 장치 주소)는 메모리 요청의 어레이 인덱스와 어레이 인덱스에 대응하는 세트에 기록된 태그에 기초하여서 생성된 저장 장치 주소에 해당할 수 있다. 또한 읽기 요청의 PRP(메모리 주소)는 어레이 인덱스에 대응하는 세트에 기록된 메모리 주소(즉, 대응하는 캐시 영역의 메모리 주소)에 해당하고, LBA(저장 장치 주소)는 메모리 요청의 주소에 해당할 수 있다. 이 경우, LBA는 저장 장치(730)의 FTL에 의해 물리 주소(예를 들면, PPA)로 변환될 수 있다. 저장 장치(730)는 쓰기 요청에 따라 캐시 메모리 영역(722)에서 방출될 데이터를 저장 장치(730)의 플래시 매체에 쓰고, 읽기 요청에 따라 저장 장치(730)의 플래시 매체에 저장된 대상 데이터를 읽어서 캐시 메모리 영역(722)에 대응하는 영역에 쓴다. 예를 들면, 저장 장치(730)는 쓰기 요청에 포함된 PRP가 참조하는 캐시 메모리 영역(722)의 데이터를 쓰기 요청에 포함된 저장 장치 주소(LBA)에 대응하는 저장 장치(730)의 플래시 매체에 쓰고, 또한 읽기 요청에 포함된 저장 장치 주소(LBA)에 대응하는 저장 장치(730)의 플래시 매체로부터 대상 데이터를 읽어서 읽기 요청에 포함된 PRP가 참조하는 캐시 메모리 영역(722)에 쓸 수 있다. 이에 따라 대상 데이터가 캐시 메모리 영역(722)에서 사용 가능해지면, 메모리 제어 장치(740)는 대상 데이터를 시스템 버스에 배치하고(place), MMU의 대응하는 명령 및 주소 버스를 설정하여서 CPU에 완료를 알릴 수 있다.
한 실시예에서, 메모리 요청이 쓰기 요청인 경우, 주소 관리기 (741)는 I/O 요청으로 쓰기 요청을 생성할 수 있다. 쓰기 요청은 메모리, 즉 메모리의 캐시 메모리 영역(722)에서 데이터를 방출하여 저장 장치(730)에 쓰기 위한 요청일 수 있다. 어떤 실시예에서, 쓰기 요청의 PRP(메모리 주소)는 어레이 인덱스에 대응하는 세트에 기록된 메모리 주소에 해당하고, LBA(저장 장치 주소)는 메모리 요청의 어레이 인덱스와 어레이 인덱스에 대응하는 세트에 기록된 태그에 기초하여서 생성된 저장 장치 주소에 해당할 수 있다. 저장 장치(730)는 쓰기 요청에 따라 캐시 메모리 영역(722)에서 방출될 데이터를 저장 장치(730)의 플래시 매체에 쓴다. 예를 들면, 저장 장치(730)는 쓰기 요청에 포함된 PRP가 참조하는 캐시 메모리 영역(722)의 데이터를 쓰기 요청에 포함된 저장 장치 주소(LBA)에 대응하는 저장 장치(730)의 플래시 매체에 쓸 수 있다. 이에 따라, 주소 관리기(741)는 메모리 요청의 대상 데이터가 방출된 캐시 메모리 영역(722)에 써질 수 있도록 태그 어레이(1000)에서 가져온 메모리 주소를 메모리 컨트롤러(742)로 발행할 수 있다.
어떤 실시예에서, 도 10에 도시한 것처럼, 캐시 로직은 비교기(1021, 1022, 1023, 1024), OR 게이트(1030), 다중화기(1040) 및 인코더(1050)를 더 포함할 수 있다. 한 실시예에서, 비교기(1021-1024), OR 게이트(1030), 다중화기(1040) 및 인코더(1050)는 주소 관리기(741)에 형성될 수 있다. 복수의 비교기(1021-1024)는 복수의 웨이(1011-1014)에 각각 대응하며, 각 비교기(1021-1024)는 대응하는 웨이(1011-1014)에서 가져온 태그와 수신한 메모리 요청의 태그를 비교하여 비교 결과에 따라 '1' 또는 '0'을 출력한다. 예를 들면, 각 비교기(1021-1024)는 두 태그가 동일한 경우 '1'(즉, 캐시 히트)을 출력하고, 다른 경우 '0'(즉, 캐시 미스)을 출력할 수 있다. OR 게이트(1030)는 복수의 비교기(1021-1024)의 출력으로부터 캐시 히트 또는 캐시 미스를 최종 출력한다. 복수의 비교기(1021-1024) 중 어느 하나가 '1'을 출력하면, OR 게이트(1030)는 '1'(즉, 캐시 히트)를 출력하고, 복수의 비교기(1021-1024) 모두가 '0'을 출력하면, OR 게이트(940)는 '0'(즉, 캐시 미스)를 출력할 수 있다. 인코더(1050)는 비교기(1021-1024)에서 출력되는 값을 인코딩하여 복수의 웨이(1011-1014) 중 캐시 히트에 해당하는 웨이를 지시하는 값을 다중화기(1040)로 전달할 수 있다. 다중화기(1040)는 복수의 웨이(1011-1014) 중 캐시 히트에 해당하는 웨이, 즉 '1'을 출력한 비교기에 대응하는 웨이에서 가져온 메모리 주소를 출력할 수 있다.
어떤 실시예에서, 각 세트는 대응하는 캐시 영역이 현재 사용 중인지를 지시하는 비지 비트(busy bit)를 엔트리로 더 포함할 수 있다. SQ와 CQ를 포함하는 NVMe 데이터 구조는 어플리케이션이나 OS에 의해 덮어 쓸(overwrite) 수 있는 메모리(720)의 영역에 매핑될 수 있다. 이로 인해, 잠재적으로 메모리 제어 장치(740)의 정확성 문제가 발생할 수 있다. 또한 메모리(720)의 데이터는 PRP를 통해 저장 장치(730)에서 쓰여지거나 저장 장치(730)로부터 로드될지라도, 메모리 제어 장치(740)가 해당 데이터를 방출(evict)하는 경우 일치하지 않을 수 있다. 데이터가 전달되고 있는 메모리(720)를 보호하기 위해, 메모리 제어 장치(740)은 각 엔트리의 비지 비트를 통해 데이터 전달 상태를 추적할 수 있다. 한 실시예에서, 큐 엔진(743)이 명령을 발행할 때마다 비지 비트가 설정되며, 명령에 따른 I/O 서비스가 완료될 때(예를 들면, MSI를 통해 완료가 보고되고 CQ의 헤드 포인트가 갱신될 때) 비지 비트가 해제될 수 있다. 따라서 비지 비트가 설정되면, 메모리 제어 장치(740)는 해당 데이터가 방출되지 않도록 제외할 수 있다.
이와 같이, 본 발명의 한 실시예에 따르면, 메모리의 메모리 용량 및 저장 장치의 저장 용량을 확장 메모리 공간으로 통합하여 작업 메모리 확장 또는 영구 메모리 확장으로 사용할 수 있다. 이 경우, CPU는 저장 장치의 저장 용량을 메인 메모리의 메모리 용량으로 사용하면서 바이트 지정 가능한 주소로 확장 메모리 공간에 액세스할 수 있다. 어떤 실시예에서, 기존의 저장 장치와 메모리 및 인터페이스의 변경 없이 확장 메모리 공간으로 통합할 수 있다. 어떤 실시예에서, 하드웨어 캐시 로직 등을 사용한 하드웨어 자동화를 통해 소프트웨어의 도움 없이 확장 메모리 공간으로 통합할 수 있다.
도 11은 본 발명의 한 실시예에 따른 컴퓨팅 디바이스에서 메모리와 저장 장치 사이에서의 데이터 전달의 한 예를 나타내는 도면이며, 도 12는 본 발명의 한 실시예에 따른 컴퓨팅 디바이스에서 메모리와 저장 장치 사이에서의 데이터 전달의 다른 예를 나타내는 도면이다.
도 11을 참고하면, MMU(1101)가 MoS 주소 공간의 0xF0(어레이 인덱스 및 태그가 각각 0x0 및 0xF)에서 읽기를 요청할 수 있다(S1110). 이때, 캐시 로직의 태그 어레이(도 10의 1000)에서 0x0의 어레이 인덱스에 대응하는 세트의 태그로 0xE가 저장되어 있고, 메모리 주소로 0xA가 저장되어 있는 것으로 가정한다. 그러면 캐시 미스가 발행하므로, 주소 관리기(741)는 저장 장치(도 7의 730)의 컨트롤러(예를 들면, NVMe 컨트롤러)(731)로 전달될 쓰기 요청과 읽기 요청을 생성한다(S1120, S1130). 태그 어레이(1000)에서 0x0의 어레이 인덱스에 대응하는 세트의 태그로 0xE가 저장되어 있으므로, 쓰기 요청은 캐시에 존재하는 데이터(예를 들면, MoS 주소 공간의 0xE0(어레이 인덱스 및 태그가 각각 0x0 및 0xE)에 존재하는 페이지, 즉 메모리에서 0xA에 존재하는 페이지)를 저장 장치(730)의 플래시 매체(732)로 방출하는 요청이며, 읽기 요청은 0xF0에 대응하는 플래시 매체의 페이지를 0x0의 어레이 인덱스에 대응하는 캐시에 채우는 요청일 수 있다.
읽기 요청 이후에, MMU는 MoS 주소 공간의 0xF0에서의 데이터를 갱신하기 위해서 0xF0에서 쓰기를 요청할 수 있다(S1140). 이 경우, 캐시에서 아직 데이터가 방출되지 않았거나 방출 중에 있으므로, 캐시 미스가 발생할 수 있다. 캐시 미스에 따라, 주소 관리기(741)는 캐시에 존재하는 데이터를 저장 장치(730)로 방출하기 위한 쓰기 요청을 생성할 수 있다(S1150). 쓰기 요청은 캐시에 존재하는 데이터(예를 들면, MoS 주소 공간의 0xE0에 존재하는 페이지, 즉 메모리(720)에서 0xA에 존재하는 페이지)를 저장 장치(730)의 플래시 매체(732)로 방출하는 요청일 수 있다. 그러면 주소 관리기(741)는 캐시에 동일한 데이터를 방출하게 된다. 즉, 중복 방출(redundant eviction의 문제가 발행할 수 있다.
따라서, 큐 엔진(743)은 쓰기 요청(S1120), 읽기 요청(S1130) 및 쓰기 요청(S1150)에 해당하는 3개의 명령(예를 들면, NVMe 명령)을 포함할 수 있다. 3개의 명령은 저장 장치의 컨트롤러(731)에 의해 FIFO 순서로 처리될 수 있다. 그러나 저장 장치(730) 내에서 명령의 완료 처리는 다른 레벨의 플래시 병렬 처리 및 저장 장치 내부 작업으로 인해 비순차적일(out-of-order) 수 있다. 또한 저장 장치(730)의 컨트롤러(732)가 완료 순서에 기초하여 데이터를 메모리(720)로 전달하기 때문에, 저장 장치의 컨트롤러(731)와 주소 관리기(741)가 메모리(720)의 동일한 위치에 액세스함으로써 방출 해저드(eviction hazard)가 발생할 수 있다. 위의 예에서, 쓰기 요청(S1120)에 따라 캐시에 저장된 데이터(즉, MoS 주소 공간의 0xE0에서의 데이터)가 방출되어 저장 장치(730)의 플래시 매체(732)로 써지고(S1160), 쓰기 요청(S1150)에 따라 캐시에 저장된 데이터(즉, MoS 주소 공간의 0xE0에서의 데이터)가 방출되어 저장 장치(730)의 플래시 매체(732)로 데이터가 써질 수 있다(S1170). 캐시에서 데이터가 방출되었으므로, MMU(1101)로부터의 쓰기 요청(S1140)에 따라 주소 관리기(741)는 MoS 주소 공간의 0xF0에 MMU(1101)로부터의 데이터를 쓰기 위해 메모리(720)에 액세스할 수 있다(S1180). 이때, 읽기 요청(S1130)에 따라, 저장 장치의 컨트롤러(731)가 MoS 주소 공간의 0xF0에 저장 장치(730)로부터의 데이터를 쓰기 위해서 메모리(720)에 액세스할 수 있다(S1190). 이와 같이, 저장 장치의 컨트롤러(731)와 주소 관리기(741)가 메모리(720)의 동일한 위치에 액세스함으로써 방출 해저드가 발생할 수 있다.
어떤 실시예에서, 이러한 중복 방출 및 방출 해저드를 방지하기 위해서, 도 9를 참고로 하여 설명한 것처럼, 고정된 메모리 영역(도 9의 721)이 PRP 풀(721c)을 포함할 수 있으며, 도 10을 참고로 하여 설명한 것처럼, 태그 어레이의 각 세트는 비지 비트를 포함할 수 있다.
도 12를 참고하면, 도 11을 참고로 하여 설명한 것처럼, 주소 관리기(741)가 MMU(1101)로부터 0xF0에서의 읽기 요청을 수신하면(S1210), 캐시 미스에 따라 캐시 방출을 위한 쓰기 요청과 캐시에 데이터를 채우기 위한 읽기 요청을 생성할 수 있다(S1220, S1230). 큐 엔진(743)이 쓰기 요청에 해당하는 명령을 저장 장치(730)로 발행할 때, 주소 관리기(741)는 태그 어레이에서 대응하는 세트의 비지 비트를 토글(예를 들면, '0'에서 '1'로 설정)하고, MoS 주소 공간의 0xE0에 존재하는 페이지를 고정된 메모리 영역(721)에 할당된 PRP 풀(721b)에 복제(clone)하여 대상 데이터를 캐시로부터 격리할 수 있다(S1240). 또한 주소 관리기(741)는 PRP 값을 복제된 페이지의 위치로 갱신하여서 PRP가 PRP 풀(721b)에 복제된 위치를 참조하도록 하고, 이를 큐 엔진(743)에 제출할 수 있다(S1240). 이와 같이 PRP 풀로 PRP를 갱신함으로써, 메모리(720)와 저장 장치의 플래시 매체(732) 사이의 DMA 동안 데이터의 일관성이 유지될 수 있다.
다음, 주소 관리기(741)가 0xF0에서의 쓰기 요청을 수신하면, 도 11을 참고로 하여 설명한 것처럼 캐시 미스가 발생할 수 있다(S1250). 그러면 주소 관리기(741)는 태그 어레이의 대응하는 세트의 비지 비트를 참조하여 데이터가 방출 중에 있음을 인식하고, 쓰기 요청을 대기 큐(1102)에 넣을 수 있다(S1260). 어떤 실시예에서, 대기 큐(1102)는 고정된 메모리 영역(도 9의 721)에 형성될 수 있다.
따라서, 큐 엔진(743)은 쓰기 요청(S1220) 및 읽기 요청(S1230)에 해당하는 2개의 명령을 포함할 수 있다. 쓰기 요청(S1120)에 따라 PRP 풀(721c)에 복제된 데이터(즉, MoS 주소 공간의 0xE0에서의 데이터)가 방출되어 저장 장치(730)의 플래시 매체(732)로 써질 수 있다(S1290). 이때, 쓰기 요청(1250)은 대기 큐에서 대기하고 있으므로, 중복 방출이 발생하지 않는다. 또한 읽기 요청(S1230)에 따라, 저장 장치의 컨트롤러(731)가 저장 장치의 플래시 매체(732)에 저장된 데이터를 MoS 주소 공간의 0xF0에 쓸 수 있다(S1270). 이때, 쓰기 요청(1250)은 대기 큐(1102)에서 대기하고 있으므로, 방출 해저드가 발생하지 않는다. 또한 읽기 요청(S1230)에 따른 명령의 I/O 서비스가 완료되면, 주소 관리기(741)는 비지 비트를 지우고(즉, '1'에서 '0'으로 설정하고), 대기 큐(1102)에 있는 쓰기 요청을 다시 큐 엔진(743)으로 제출한다(S1280). 이때, 읽기 요청(1230)에 따라 캐시에 데이터가 저장되어 있으므로, 캐시 히트가 발생하고, 캐시에 저장된 데이터(즉, MoS 주소 공간의 0xF0에 저장된 데이터)가 서비스될 수 있다.
도 13, 도 14 및 도 15는 본 발명의 한 실시예에 따른 메모리 제어 장치에서의 전원 장애 복구 절차를 설명하는 도면이다.
MoS 주소 공간이 작업 메모리 확장(work memory expansion)으로 사용되는 경우, 큐 관리에 대한 상당한 오버헤드는 없을 수 있다. 그러나 MoS 주소 공간이 저장 장치(즉, 영구 메모리 확장)로 사용되는 경우, 데이터 연속성에 대한 보장이 필요할 수 있다. 이를 위해, 메모리 제어 장치(도 7의 740)는 캐시 로직이 저장 장치(도 7의 730)의 데이터를 갱신해야 할 때마다 명령(예를 들면, NVMe 명령)을 플러시해야 할 수 있다. 이러한 문제를 해결하기 위해, 어떤 실시예에서 큐 엔진(도 7의 743)으로 발행되는 명령의 엔트리에 저널 태그가 추가될 수 있다. 한 실시예에서, 저널 태그는 NVMe 명령 구조의 예약된 비트에 추가될 수 있다. 저널 태그는 해당 명령이 저장 장치(730)에 의해 완료되었는지를 나타내는 정보를 유지할 수 있다. 예를 들면, 큐 엔진(743)이 저장 장치(730)로 명령, 즉 I/O 요청을 보낼 때마다, 저널 태그가 소정 값(예를 들면, '1')로 설정되고, 저장 장치(730)에서 완료를 지시하는 인터럽트(예를 들면, MSI)가 도착할 때 완료에 해당하는 명령의 저널 태그가 해제(예를 들면, '0'으로 설정)될 수 있다.
예를 들면, 도 13을 참고하면, 큐 엔진(743)의 SQ에 네 개의 명령(CMD1, CMD2, CMD3, CMD4)이 저장 장치(730)로 발행되어서, SQ의 헤드 포인터와 테일 포인터가 동일한 위치(즉, 다섯 번째 엔트리)를 지시하고 있다. 이에 따라, 저장 장치(730)에서 명령(CMD1, CMD2, CMD3, CMD4)이 처리되고, 이 중 세 개의 명령(CMD1, CMD3, CMD4)이 완료되어서 CQ의 헤드 포인터와 테일 포인터가 동일한 위치(즉, 네 번째 엔트리)를 지시하고 있다. 이에 따라, 세 개의 명령(CMD1, CMD3, CMD4)의 저널 태그(JT)는 해제되어 '0'으로 변경되지만, 완료되지 않은 명령(CMD2)의 저널 태그(JT)는 여전히 설정된 상태, 즉 '1'로 유지되고 있다. 이때, 전원 장애가 발생하면, 저장 장치(730)와 메모리 제어 장치(740)는 명령(CMD2)을 완료할 수 없다.
고정된 메모리 영역(도 9의 721)의 버퍼(721a)에 SQ를 위한 데이터가 저장되므로, 전원 복구 시에서, 메모리 제어 장치(740)는 고정된 메모리 영역(721)의 버퍼(721a)를 확인하여 저널 태그(JT)가 '1'인 명령이 있는지 판단한다. 저널 태그(JT)가 '1'인 명령(CMD2)이 있으면, 도 14에 도시한 것처럼, 메모리 제어 장치(740)는 해당 명령(CMD2)를 가져오고, I/O 서비스를 위한 새로운 SQ와 CQ를 할당한다.
다음, 도 15에 도시한 것처럼, 메모리 제어 장치(740)는 해당 명령(CMD2)을 큐 엔진(743)으로 발행하여 새로 할당된 SQ에 입력한다. 이에 따라, 큐 엔진(743)은 SQ의 테일 포인터를 증가시키고 도어벨 레지스터를 울려서, 전원 장애가 발생할 때 완료되지 않은 명령(CMD2)을 처리할 수 있다.
다음 본 발명의 다른 실시예에 따른 컴퓨팅 디바이스의 메모리 제어 장치에 대해서 도 16 내지 도 18을 참고로 하여 설명한다.
도 16은 본 발명의 다른 실시예에 따른 컴퓨팅 디바이스의 개략적인 블록도이며, 도 17은 본 발명의 다른 실시예에 따른 컴퓨팅 디바이스에서 레지스터 기반 인터페이스를 나타내는 도면이고, 도 18은 본 발명의 다른 실시예에 따른 메모리 제어 장치의 동작을 나타내는 흐름도이다.
도 7을 참고로 하여 설명한 메모리 제어 장치(740)는 기존의 메모리 인터페이스(744), 예를 들면 DDR 인터페이스와 기존의 저장 장치 인터페이스(745), 예를 들면 PCIe 인터페이스를 활용하여서 많은 작업 메모리 공간을 제공할 수 있다. 이 경우, 기존의 저장 장치(730) 및 메모리(720)를 수정하지 않아도 된다는 장점을 가진다. 그러나 캐시 미스의 경우, 대상 데이터는 DDR 모듈(예를 들면, DDR 컨트롤러 및 DDR 인터페이스) 및 PCIe 모듈(예를 들면, 루트 컴플렉스, 트랜잭션 계층, 데이터 링크 계층 및 물리 계층)을 통과한다. DDR, 특히 DDR4의 최대 대역폭은 채널 당 19.2GB/s이지만, SSD와 같은 저장 장치는 4개 레인을 가진 PCIe 3.0을 사용하므로 NVMe의 최대 대역폭은 3.97GB/s이다. 따라서 캐시 미스가 발생할 때마다 메모리 제어 장치(740)의 성능이 PCIe 대역폭으로 제한될 수 있다. 또한 메모리(720)의 데이터가 저장 장치(730)로 전달되기 위해서 데이터가 인코딩되어 PCIe 패킷으로 캡슐화되므로, 캐시 미스가 있는 경우 지연 시간이 길어질 수 있다.
이와 같이, DDR 컨트롤러와 저장 장치의 NVMe 컨트롤러 사이에서 데이터를 이동하면 인터페이스 지연 시간이 길어서 메모리 제어 장치의 성능이 저하될 수 있다. 또한 메모리 제어 장치가 이미 메모리(720)에 데이터를 보유하고 있어도, 요청이 여전히 저장 장치(730) 내부의 메모리(예를 들면, DRAM)에 복사될 수 있다. 이는 블록 스토리지 사용 케이스에서 성능을 크게 향상시킬 수 있지만, 추가 에너지 소비를 유발하고 저장 장치(730)의 내부 복잡성을 증가시킬 수 있다. 특히, 저장 장치(730)의 내부 DRAM은 32개의 플래시 칩으로 구성된 플래시 매체보다 더 많은 전력을 필요로 할 수 있다.
이러한 문제를 해결하기 위해, 본 발명의 다른 실시예에 따르면, 도어벨 레지스터 대신 새로운 레지스터 기반 인터페이스(register-based interface)를 사용하고, 저장 장치를 메모리 인터페이스에 연결할 수 있다. 이 경우, 저장 장치로부터 플래시 매체와 컨트롤러를 풀어주고(unleash) 데이터 경로를 메모리에 직접 연결할 수 있다. 이러한 방법을 통해 저장 장치는 메모리 제어 장치의 개입 없이 메모리의 메모리 영역에 직접 액세스할 수 있으며, NVMe 큐의 모든 기능을 사용하면서 저장 장치에서 내부 DRAM 버퍼를 제거할 수 있다.
구체적으로, 도 16을 참고하면, 본 발명의 다른 실시예에 따른 컴퓨팅 디바이스(1600)는 CPU(1610), 메모리(1620), 저장 장치(1630) 및 메모리 제어 장치(1640)를 포함한다. 아래에서는 도 7을 참고로 하여 설명한 컴퓨팅 디바이스(700)와 유사한 기능에 대해서는 설명을 생략한다.
메모리 제어 장치(1640)는 주소 관리기(1641), 메모리 컨트롤러(1642), 저장 장치 명령 생성기(1643) 및 잠금(lock) 레지스터(1644)를 포함한다. 메모리 컨트롤러(1642)와 저장 장치 명령 생성기(1643)는 메모리 인터페이스(1645)를 통해 메모리(1620) 및 저장 장치(1630)에 각각 연결된다. 이에 따라, 저장 장치(1630)는 메모리 인터페이스(1645)를 통해 메모리(1620)에 직접 액세스할 수 있다. 한 실시예에서, 메모리 인터페이스(1645)는 DDR 인터페이스일 수 있다.
주소 관리기(1641)는, 메모리 제어 장치(1640)가 개시할 필요가 있는 I/O 요청, 예를 들면 캐시 미스의 메모리 요청을 기초로, 저장 장치 명령 생성기(1643)를 제어하여서 소스 및 목적지 주소와 I/O 명령을 캡쳐하는 일련의 레지스터를 쓸 수 있다. 그러면 저장 장치(1630)의 컨트롤러, 예를 들면 NVMe 컨트롤러는 메모리(1620)의 소스 주소에서 대상 데이터를 가져 오고, 이를 플래시 매체에 기록할 수 있도록 저장 장치(730)의 FTL로 전달할 수 있다.
어떤 실시예에서, 일반적인 저장 장치(예를 들면, SSD)에서 내부 메모리(예를 들면, DRAM)을 관리하는데 사용되는 인터페이스를 메모리(720)와 저장 장치(730) 사이의 인터페이스로 사용할 수 있다. 그러면 메모리(720)는 저장 장치 명령 생성기(1643)와 저장 장치(1630)의 컨트롤러 모두에 의해 액세스될 수 있다.
도 17을 참고하면, 어떤 실시예에서, 메모리(1620)는 컨트롤 로직(1631), 주소 레지스터(1622), 데이터 래치(1623) 및 메모리 영역(1624)을 포함할 수 있으며, 저장 장치(1630)은 컨트롤러(1631), 명령 레지스터(1632), 주소 레지스터(1633), 데이터 버퍼(1634) 및 플래시 매체(1635)를 포함할 수 있다.
어떤 실시예에서, 메모리 제어 장치(1640)와 메모리(1620) 및 저장 장치(1630)은 레지스터 기반 인터페이스로 연결될 수 있다. 메모리 인터페이스(1645)에서 명령을 전달하는 핀(예를 들면, WE(write enable) 핀), 컨트롤 로직(1621)의 핀 및 명령 레지스터(1632)의 핀이 버스를 통해 연결될 수 있다. WE 핀을 통해 WE 신호 외에 CAS(column address strobe) 신호 및 RAS(row address strobe) 신호가 전달될 수 있다. 메모리 인터페이스(1645)에서 주소(A[15:0])를 전달하는 핀, 주소 레지스터(1622)의 핀 및 주소 레지스터(1633)의 핀이 버스를 통해 연결될 수 있다. 메모리 인터페이스(1645)에서 데이터(D[63:0])를 전달하는 핀, 데이터 래치(1623)의 핀 및 데이터 버퍼(1634)의 핀이 버스를 통해 연결될 수 있다.
도 17 및 도 18을 참고하면, 캐시 로직의 검색 결과가 캐시 미스인 경우(S1850), 주소 관리기(1641)는 메모리 요청을 저장 장치 명령 생성기(1643)로 전달하여, 저장 장치 명령 생성기(1643)가 메모리 요청에 기초하여 새로운 명령을 생성하도록 제어한다(S1870). 도 15에서 단계 S1810, S1820, S1830, S1840, S1850 및 S1860은 각각 도 8을 참고로 하여 설명한 단계 S810, S820, S830, S840, S850 및 S860과 동일한 동작을 수행하므로, 그 설명을 생략한다.
저장 장치 명령 생성기(1643)는 메모리 요청에 기초해서 소스 주소와 목적지 주소 및 요청 유형을 지시하는 명령(예를 들면, I/O 명령)을 생성하여 메모리 인터페이스(1645)를 통해 저장 장치(1630)로 전달한다(S1875). 예를 들면, 메모리 인터페이스(1645)가 DDR 인터페이스인 경우, 소스 주소는 RAS 신호 타이밍(tRAS)에서 주소 신호를 통해 전달되고, 목적지 주소는 CAS 신호 타이밍(tCAS)에서 주소 신호를 통해 전달될 수 있다. 이러한 RAS 신호와 CAS 신호는 DDR 인터페이스에 의해 정의된 클록 주기를 기초로 전달될 수 있다. 또한 명령은 읽기 또는 쓰기를 지시할 수 있으며, WE 신호를 통해 전달될 수 있다. 어떤 실시예에서, 소스 주소와 목적지 주소의 쌍은 메모리 주소(예를 들면, PRP)와 저장 장치 주소(예를 들면, LBA)의 쌍에 해당한다. 예를 들면, 메모리 요청에 따라 저장 장치(1630)의 데이터를 읽어서 메모리(1620)에 쓰는 경우, 소스 주소는 저장 장치 주소가 되고, 목적지 주소는 메모리 주소가 될 수 있다. 또한 메모리 요청에 따라 메모리(1620)의 데이터를 읽어서 저장 장치(1630)에 쓰는 경우(즉, 메모리(1620)의 데이터를 방출하는 경우), 소스 주소는 메모리 주소가 되고, 목적지 주소는 저장 장치 주소가 될 수 있다.
어떤 실시예에서, 도 8 내지 도 10을 참고로 하여 설명한 것처럼, 메모리 요청이 읽기 요청인 경우, 저장 장치 명령 생성기(1643)는 두 개의 I/O 명령을 생성할 수 있다. 두 개의 I/O 명령은 메모리(1620), 즉 메모리의 캐시 메모리 영역(도 9의 722)에서 데이터를 방출하여 저장 장치(1630)에 쓰기 위한 읽기 명령, 그리고 저장 장치(1630)에서 데이터를 읽어서 메모리(1620), 즉 메모리의 캐시 메모리 영역(722)에 채우기 위한 쓰기 명령을 포함할 수 있다. 한 실시예에서, 읽기 명령과 함께 전달되는 소스 주소와 목적지 주소는 각각 메모리 주소와 저장 장치 주소에 해당하며, 메모리 주소(PRP)는 메모리 요청의 어레이 인덱스에 대응하는 세트에 기록된 메모리 주소에 해당하고, 저장 장치 주소(LBA)는 메모리 요청의 어레이 인덱스와 어레이 인덱스에 대응하는 세트에 기록된 태그에 기초하여서 생성된 저장 장치 주소에 해당할 수 있다. 또한 쓰기 명령과 함께 전달되는 소스 주소와 목적지 주소는 각각 저장 장치 주소와 메모리 주소에 해당하며, 메모리 주소(PRP)는 메모리 요청의 어레이 인덱스에 대응하는 세트에 기록된 메모리 주소에 해당하고, 저장 장치 주소(LBA)는 메모리 요청의 주소에 해당할 수 있다. 메모리 요청이 쓰기 요청인 경우, 저장 장치 명령 생성기(1643)는 I/O 명령으로 읽기 명령을 생성할 수 있다. 쓰기 명령은 메모리(1620), 즉 메모리의 캐시 메모리 영역(722)에서 데이터를 방출하여 저장 장치(1630)에 쓰기 위한 명령일 수 있다. 한 실시예에서, 읽기 명령과 함께 전달되는 소스 주소와 목적지 주소는 각각 메모리 주소와 저장 장치 주소에 해당하며, 메모리 주소(PRP)는 메모리 요청의 어레이 인덱스에 대응하는 세트에 기록된 메모리 주소에 해당하고, 저장 장치 주소(LBA)는 메모리 요청의 어레이 인덱스와 어레이 인덱스에 대응하는 세트에 기록된 태그에 기초하여서 생성된 저장 장치 주소에 해당할 수 있다.
저장 장치(1630)는 명령 레지스터(1632)와 주소 레지스터(1633)를 더 포함할 수 있다. 명령 레지스터(1632)는 메모리 제어 장치(1640)에서 전달된 명령, 예를 들면 WE 신호를 저장하고, 주소 레지스터(1633)는 메모리 제어 장치(1640)에서 전달된 소스 주소와 목적지 주소, 예를 들면 RAS 및 CAS와 같은 스트로브 신호를 저장할 수 있다.
이와 같이, 명령과 주소가 저장 장치(1630)로 전달된 이후(즉, 명령과 주소에 대한 지정된 수의 클록 주기 이후)에, 메모리 제어 장치(1640)의 저장 장치 명령 생성기(1643)는 잠금 레지스터(1644)를 잠금에 해당하는 값(예를 들면, '1')으로 설정할 수 있다(S1880). 메모리(1620)는 저장 장치(1630)의 컨트롤러(1631), 예를 들면 NVMe 컨트롤러에 의해 액세스될 수도 있으며, 또한 메모리 제어 장치(1640)에 의해 액세스될 수도 있으므로, 잠금 레지스터(1644)를 통해 메모리(1620)가 동시에 액세스되는 것을 방지할 수 있다. 잠금 레지스터(1644)의 설정은 저장 장치(1630)의 컨트롤러(1631)가 버스 마스터를 인수하는 것을 지시할 수 있으며, 이에 따라 컨트롤러(1631)가 메모리 인터페이스(1645), 예를 들면 DDR 인터페이스의 메모리 타이밍을 기초로 메모리(1620)에 액세스할 수 있다. 또한 메모리 제어 장치(1640)가 메모리(1620)에 액세스하는 것이 차단될 수 있다.
명령의 요청 유형이 읽기인 경우, 저장 장치(1630)의 컨트롤러(1631)는 메모리(1620)와 즉시 통신을 시작할 수 있다. 컨트롤러(1631)는 명령 레지스터(1632)에 기록된 요청 유형(즉, 읽기)에 따라 읽기 명령을 메모리(1620)의 컨트롤 로직(1621)에 쓰고, 주소 레지스터(1633)에 기록된 메모리 주소(즉, 소스 주소)를 메모리(1620)의 주소 레지스터(1622)에 쓸 수 있다. 따라서 메모리(1620)의 메모리 영역(1624)에서 읽은 메모리 주소에 해당하는 데이터는 메모리(1620)의 데이터 래치(1623)에서 저장 장치(1630)의 데이터 버퍼(1634)로 전달될 수 있다. 그러면 컨트롤러(1631)는 데이터 버퍼(1634)에 저장된 데이터를 플래시 매체(1635)에 쓸 수 있다.
명령의 요청 유형이 쓰기인 경우, 컨트롤러(1631)는 저장 장치(1630)의 플래시 매체에서 읽기 서비스가 완료된 후에 메모리(1620)와 통신을 시작할 수 있다. 컨트롤러(1631)는 명령 레지스터(1632)에 기록된 요청 유형(즉, 쓰기)에 따라 쓰기 명령을 메모리(1620)의 컨트롤 로직(1621)에 쓰고, 주소 레지스터(1633)에 기록된 메모리 주소(즉, 목적지 주소)를 메모리(1620)의 주소 레지스터(1622)에 쓸 수 있다. 따라서 플래시 매체(1635)에서 읽어서 데이터 버퍼(1634)에 저장된 데이터가 메모리(1620)의 데이터 래치(1623)로 전달되어 메모리(1620)의 메모리 영역(1624)에 저장될 수 있다.
메모리(1620)와 저장 장치(1630) 사이에서 데이터 전달이 완료된 후에(S1885), 컨트롤러(1631)는 잠금 레지스터(1644)를 해제한다. 즉, 컨트롤러(1631)는 잠금 레지스터(1644)를 잠금 해제에 해당하는 값(예를 들면, '0')로 설정할 수 있다(S1890). 이와 같이, 잠금 레지스터(1644)를 사용함으로써, 저장 장치(1630)의 컨트롤러(1631)와 메모리 제어 장치(1640)의 메모리 컨트롤러(1642)가 동시에 버스를 사용하는 경우를 피할 수 있다. 이러한 레지스터 기반 인터페이스는 데이터 전달과 관련된 오버헤드를 줄일 수 있지만, 잠금 레지스터(1644)가 설정되는 기간을 최소화할 필요가 있다. 플래시 매체(1635)의 지연 시간이 메모리(1620)의 지연 시간보다 상대적으로 더 길기 때문에, 컨트롤러(1631)는, 플래시 트랜잭션의 전체 지연 시간을 대기하는 대신, 데이터 전달을 위해 데이터 및 캐시 레지스터와 같은 데이터 버퍼(1634)를 사용할 수 있다.
데이터 전달이 완료되면, 메모리 제어 장치(1600)는 메모리 시스템 버스(예를 들면, AXI)를 통해 MMU에 완료를 알려서, MMU가 스톨된 명령을 재개할 수 있다(S1895).
다시 도 17을 참고하면, 어떤 실시예에서, 메모리(1620)와 저장 장치(1630)를 기능하도록 하기 위한 핀, 예를 들면 CS(chip select) 핀이 사용될 수 있다. CS 핀으로 전달되는 CS 신호의 값으로 마스터와 슬레이브를 설정할 수 있다. 한 실시예에서, 메모리 제어 장치(1640)가 잠금을 소유하고 있는 경우(즉, 잠금 레지스터(1644)가 잠금 해제된 경우), 메모리(1620)의 CS 핀을 인에이블(enable)에 해당하는 값(예를 들면, '1')로 설정하고, 저장 장치(1630)의 CS 핀을 디스에이블(disable)에 해당하는 값(예를 들면, '0')으로 설정하면, 메모리 제어 장치(1640)가 마스터로 동작하고 메모리(1620)가 슬레이브로 동작할 수 있다. 즉, 메모리 제어 장치(1640)가 메모리(1620)에 액세스할 수 있다. 메모리 제어 장치(1640)가 잠금을 소유하고 있는 경우, 메모리(1620)의 CS 핀을 '0'로 설정하고, 저장 장치(1630)의 CS 핀을 '1'로 설정하면, 메모리 제어 장치(1640)가 마스터로 동작하고 저장 장치(1630)가 슬레이브로 동작할 수 있다. 즉, 메모리 제어 장치(1640)가 저장 장치(1630)에 액세스할 수 있다. 저장 장치(1630)가 잠금을 넘겨 받은 경우(즉, 잠금 레지스터(1644)가 설정된 경우), 메모리 제어 장치(1640)는 메모리(1620)의 CS 핀을 '1'로 설정하면, 저장 장치(1630)가 마스터로 메모리(1620)가 슬레이브로 동작할 수 있다. 즉, 저장 장치(1630)가 메모리(1620)로 액세스할 수 있다.
이와 같이, 본 발명의 다른 실시예에 따르면, 메모리의 메모리 용량 및 저장 장치의 저장 용량을 확장 메모리 공간으로 통합하여 작업 메모리 확장 또는 영구 메모리 확장으로 사용할 수 있다. 어떤 실시예에서, 레지스터 기반 인터페이스를 통해 데이터 전달에 의해 발생하는 오버헤드를 제거할 수 있으며, 또한 저장 장치 내의 DRAM을 제거하여 DRAM에 의한 에너지 비효율성을 개선할 수 있다. 어떤 실시예에서, 하드웨어 캐시 로직 등을 사용한 하드웨어 자동화를 통해 소프트웨어의 도움 없이 확장 메모리 공간으로 통합할 수 있다.
한편, 본 발명의 실시예에 따른 메모리 제어 장치를 실제 하드웨어에 구현하여서 성능을 측정한 결과에 대해서 설명한다. 성능 측정을 위해 빈커트(Binkert) 등이 제안한 gem5 시뮬레이터(gem5 simulator)에서 메인 메모리를 8GB DRAM 기반 NVDIMM으로 교체하고, 800GB ULL 플래시 프로토타입(800GB ULL-Flash prototype)을 저장 장치로 사용한다. 구체적인 상세는 아래 표 1과 같다.
구성요소 상세
OS Linux 4.9, Ubuntu 14.10
CPU quad-core, 2GHz
메모리 NVDIMM, DDR4, 8GB
저장 장치 ULL-Flash, PCIe 3.0x4, 800GB
플래시 3us read, 100us write
이 경우, 도 7을 참고로 하여 설명한 메모리 제어 장치와 도 16을 참고로 하여 설명한 메모리 장치는 기존의 MMF 기반으로(즉, 소프트웨어 기반으로) 메모리와 저장 장치를 하이브리드로 설계한 경우보다 각각 97% 및 119% 더 높은 MIPS(million instructions per second)를 제공하는 반면, 대규모 데이터 집약형 어플리케이션에 대해서 각각 41% 및 45% 더 적은 시스템 에너지를 소비하는 것이 확인된다.
이상에서 본 발명의 실시예에 대하여 상세하게 설명하였지만 본 발명의 권리범위는 이에 한정되는 것은 아니고 다음의 청구범위에서 정의하고 있는 본 발명의 기본 개념을 이용한 당업자의 여러 변형 및 개량 형태 또한 본 발명의 권리범위에 속하는 것이다.

Claims (21)

  1. 중앙 프로세싱 유닛(central processing unit, CPU), 메모리 및 플래시 기반의 저장 장치를 포함하는 컴퓨팅 디바이스의 메모리 제어 장치로서,
    상기 메모리의 메모리 공간과 상기 저장 장치의 저장 공간을 확장 메모리 공간으로 통합하며, 상기 메모리의 메모리 공간을 상기 저장 장치의 저장 공간을 위한 캐시로 사용하여서 상기 CPU로부터의 상기 확장 메모리 공간으로의 메모리 요청을 처리하는 주소 관리기, 그리고
    상기 메모리 및 상기 저장 장치로의 액세스에 사용되는 인터페이스
    를 포함하는 메모리 제어 장치.
  2. 제1항에서,
    상기 메모리 요청의 주소는 상기 저장 공간의 용량을 메모리 공간의 용량으로 사용하는 메인 메모리의 주소이며,
    상기 주소 관리기는 상기 저장 장치의 저장 공간을 상기 메모리의 메모리 공간에 매핑함으로써 상기 메모리 요청을 처리하는 메모리 제어 장치.
  3. 제1항에서,
    상기 주소 관리기는 상기 메모리 요청의 주소에 기초해서 상기 캐시에서 히트(hit) 또는 미스(miss)를 조회하는 캐시 로직을 사용하여 상기 메모리의 메모리 공간과 상기 저장 장치의 저장 공간을 확장 메모리 공간으로 통합하는 메모리 제어 장치.
  4. 제3항에서,
    상기 주소 관리기는 상기 캐시 로직으로 하드웨어 캐시 로직을 사용하여 소프트웨어의 도움 없이 상기 메모리의 메모리 공간과 상기 저장 장치의 저장 공간을 확장 메모리 공간으로 통합하는 메모리 제어 장치.
  5. 제3항에서,
    큐 엔진을 더 포함하며,
    상기 인터페이스는 상기 메모리를 위한 메모리 인터페이스 및 상기 저장 장치를 위한 저장 장치 인터페이스를 포함하고,
    상기 메모리 요청이 상기 캐시에서 미스인 경우, 상기 주소 관리기는 상기 메모리 요청에 기초하여 상기 저장 장치를 위한 명령 구조를 가지는 명령을 생성하여 상기 큐 엔진으로 전달하고, 상기 큐 엔진은 상기 명령을 상기 저장 장치 인터페이스를 통해 상기 저장 장치로 전달하며,
    상기 메모리 요청이 상기 캐시에서 히트인 경우, 상기 주소 관리기는 상기 캐시 로직으로부터 상기 메모리 요청의 주소에 해당하는 상기 메모리의 메모리 주소를 가져오고, 상기 메모리 주소를 가지는 상기 메모리 요청을 상기 메모리로 전달하는
    메모리 제어 장치.
  6. 제5항에서,
    상기 큐 엔진은 상기 명령을 서브미션 큐로 제출하고 도어벨 레지스터를 울려서 상기 저장 장치로 전달하는 메모리 제어 장치.
  7. 제5항에서,
    상기 메모리 요청이 읽기 요청인 경우, 상기 명령은 상기 메모리에서 상기 저장 장치로 캐시 데이터를 방출하기 위한 제1 명령 및 상기 저장 장치로부터 상기 메모리로 대상 읽기 데이터를 읽기 위한 제2 명령을 포함하며,
    상기 메모리 요청이 쓰기 요청인 경우, 상기 명령은 상기 메모리에서 상기 저장 장치로 상기 캐시 데이터를 방출하기 위한 상기 제1 명령을 포함하는
    메모리 제어 장치.
  8. 제6항에서,
    상기 제1 명령은, 상기 캐시 로직의 복수의 세트 중 상기 메모리 요청의 주소에 대응하는 세트에 기록된 메모리 주소를 지시하는 포인터 및 상기 메모리 요청의 주소와 상기 메모리 요청의 주소에 대응하는 상기 세트에 기록된 값에 기초하여서 생성된 저장 장치 주소를 지시하는 논리 주소를 포함하며,
    상기 제2 명령은, 상기 메모리 요청의 주소에 대응하는 상기 세트에 기록된 메모리 주소를 지시하는 포인터 및 상기 메모리 요청의 주소에 대응하는 저장 장치 주소를 지시하는 논리 주소를 포함하는
    메모리 제어 장치.
  9. 제3항에서,
    상기 메모리 요청이 상기 캐시에서 미스인 경우, 상기 메모리 요청에 기초하여 상기 저장 장치가 상기 메모리에 직접 액세스하기 위한 명령을 생성하는 저장 장치 명령 생성기를 더 포함하며,
    상기 인터페이스는 메모리 인터페이스를 포함하고,
    상기 메모리 인터페이스는 상기 메모리의 레지스터와 상기 저장 장치의 레지스터에 레지스터 기반 인터페이스로 연결되며,
    상기 저장 장치 명령 생성기는 상기 명령을 상기 메모리 인터페이스를 통해 상기 저장 장치로 전달하여서 상기 저장 장치가 상기 레지스터 기반 인터페이스를 통해 상기 메모리에 상기 메모리 인터페이스를 통해 직접 액세스하도록 하는
    메모리 제어 장치.
  10. 제9항에서,
    상기 명령은 소스 주소, 목적지 주소 및 요청 유형을 포함하며,
    상기 소스 주소는 상기 메모리의 메모리 주소와 상기 저장 장치의 저장 장치 주소 중 어느 하나를 지시하고, 상기 목적지 주소는 상기 메모리 주소와 상기 저장 장치 주소 중 다른 하나를 지시하며, 상기 요청 유형은 읽기 또는 쓰기를 지시하고,
    상기 저장 장치의 컨트롤러의 제어에 따라, 상기 소스 주소로부터 상기 목적지 주소로 데이터가 전달되는
    메모리 제어 장치.
  11. 제9항에서,
    상기 저장 장치로 상기 명령이 전달되는 경우에 설정되는 잠금 레지스터를 더 포함하며,
    상기 잠금 레지스터가 설정된 경우, 상기 메모리 제어 장치가 상기 메모리에 액세스하는 것이 차단되는
    메모리 제어 장치.
  12. 제3항에서,
    상기 메모리 요청이 상기 캐시에서 미스인 경우, 상기 메모리 요청이 상기 저장 장치와 상기 메모리에서 처리되도록 명령이 상기 저장 장치로 전달되며,
    상기 명령은 저널 태그를 포함하고,
    상기 명령이 상기 저장 장치로 전달될 때 상기 저널 태그는 제1값으로 설정되고, 상기 명령이 상기 저장 장치에서 완료될 때 상기 저널 태그는 제2값으로 설정되는
    메모리 제어 장치.
  13. 제3항에서,
    상기 메모리는 상기 캐시 로직이 저장된 고정된 메모리 영역을 포함하는 메모리 제어 장치.
  14. 제3항에서,
    상기 캐시 로직은 복수의 인덱스에 각각 대응하는 복수의 세트를 포함하고,
    각 세트는 태그를 포함하며,
    상기 메모리 요청의 주소가 적어도 대상 태그 및 대상 인덱스로 분해되고,
    상기 주소 관리기는 상기 복수의 세트 중 상기 대상 인덱스와 동일한 인덱스를 가지는 세트에 저장된 태그와 상기 대상 태그가 동일한 경우에 히트로 판단하고, 상기 저장된 태그와 상기 대상 태그가 다른 경우에 미스로 판단하는
    메모리 제어 장치.
  15. 제14항에서,
    각 세트는 대응하는 캐시 영역이 현재 사용 중인지를 지시하는 비지(busy) 비트를 더 포함하며,
    상기 메모리 요청의 미스에 따라 상기 메모리에서 상기 저장 장치로 캐시 데이터를 방출하는 경우, 상기 주소 관리기는 상기 복수의 세트 중 상기 메모리 요청의 주소에 대응하는 대상 세트의 상기 비지 비트를 소정 값으로 설정하고, 상기 캐시 데이터를 상기 메모리의 소정 영역에 복제하고, 상기 캐시 데이터의 방출을 위한 포인터를 상기 소정 영역을 지시하도록 갱신하는
    메모리 제어 장치.
  16. 제15항에서,
    상기 CPU로부터 상기 대상 세트에 대응하는 캐시 영역으로의 쓰기 요청을 수신한 경우, 상기 주소 관리기는 상기 대상 세트의 비지 비트를 참조하여 상기 비지 비트가 상기 소정 값인 경우 상기 쓰기 요청을 대기시키고, 상기 소정 영역에서 상기 캐시 데이터의 방출이 완료된 후에 상기 쓰기 요청을 처리하는 메모리 제어 장치.
  17. 제1항 내지 제16항 중 어느 한 항에 따른 상기 메모리 제어 장치,
    상기 CPU,
    상기 메모리, 그리고
    상기 저장 장치
    를 포함하는 컴퓨팅 디바이스.
  18. 중앙 프로세싱 유닛(central processing unit, CPU), 메모리 및 플래시 기반의 저장 장치를 포함하는 컴퓨팅 디바이스의 메모리 제어 장치로서,
    상기 메모리의 메모리 공간과 상기 저장 장치의 저장 공간을 확장 메모리 공간으로 통합하며, 상기 메모리의 메모리 공간을 상기 저장 장치의 저장 공간을 위한 캐시로 사용하여서 상기 CPU로부터의 상기 확장 메모리 공간으로의 메모리 요청을 처리하는 주소 관리기,
    상기 저장 장치를 위한 큐를 관리하는 큐 엔진,
    상기 메모리를 위한 메모리 인터페이스, 그리고
    상기 저장 장치를 위한 저장 장치 인터페이스를 포함하며,
    상기 주소 관리기는 상기 메모리 요청의 주소에 기초해서 상기 캐시에서 히트(hit) 또는 미스(miss)를 조회하는 캐시 로직을 사용하며,
    상기 캐시 로직에서 히트인 경우, 상기 주소 관리기는 상기 메모리 요청의 주소에 대응하는 상기 캐시 로직의 엔트리에 기초해서 상기 메모리 요청을 상기 메모리 인터페이스를 통해 상기 메모리로 전달하고,
    상기 캐시 로직에서 미스인 경우, 상기 주소 관리기는 상기 메모리 요청의 주소에 대응하는 상기 캐시 로직의 엔트리에 기초해서 상기 메모리 요청으로부터 상기 저장 장치를 위한 명령 구조를 가지는 명령을 생성하며, 상기 큐 엔진은 상기 명령을 상기 저장 장치 인터페이스를 통해 상기 저장 장치로 전달하는
    메모리 제어 장치.
  19. 제18항에서,
    상기 주소 관리기는 상기 캐시 로직으로 하드웨어 캐시 로직을 사용하여 소프트웨어의 도움 없이 상기 메모리의 메모리 공간과 상기 저장 장치의 저장 공간을 확장 메모리 공간으로 통합하는 메모리 제어 장치.
  20. 중앙 프로세싱 유닛(central processing unit, CPU)을 포함하는 컴퓨팅 디바이스의 메모리 제어 장치로서,
    제1 레지스터 및 메모리 영역을 포함하는 메모리,
    제2 레지스터 및 플래시 매체를 포함하는 저장 장치,
    상기 메모리의 메모리 공간과 상기 저장 장치의 저장 공간을 확장 메모리 공간으로 통합하며, 상기 메모리의 메모리 공간을 상기 저장 장치의 저장 공간을 위한 캐시로 사용하여서 상기 CPU로부터의 상기 확장 메모리 공간으로의 메모리 요청을 처리하는 주소 관리기,
    저장 장치 명령 생성기, 그리고
    상기 메모리를 위한 인터페이스이며, 상기 제1 레지스터와 상기 제2 레지스터 기반 인터페이스로 연결되는 메모리 인터페이스를 포함하며,
    상기 메모리 요청이 상기 캐시에서 히트인 경우, 상기 주소 관리기는 상기 메모리 요청의 주소에 대응하는 상기 캐시 로직의 엔트리에 기초해서 상기 메모리 요청을 상기 메모리 인터페이스를 통해 상기 메모리로 전달하고,
    상기 메모리 요청이 상기 캐시에서 미스인 경우, 상기 저장 장치 명령 생성기는 상기 메모리 요청의 주소에 대응하는 상기 캐시 로직의 엔트리에 기초해서 상기 저장 장치가 상기 메모리에 직접 액세스하기 위한 명령을 생성하고, 상기 명령을 상기 레지스터 기반 인터페이스를 통해 상기 저장 장치로 전달하여서 상기 저장 장치가 상기 레지스터 기반 인터페이스를 통해 상기 메모리에 직접 액세스하도록 하는
    메모리 제어 장치.
  21. 제20항에서,
    상기 주소 관리기는 상기 캐시 로직으로 하드웨어 캐시 로직을 사용하여 소프트웨어의 도움 없이 상기 메모리의 메모리 공간과 상기 저장 장치의 저장 공간을 확장 메모리 공간으로 통합하는 메모리 제어 장치.
KR1020180126267A 2017-12-06 2018-10-22 메모리 제어 장치 및 이를 포함하는 컴퓨팅 디바이스 KR102101622B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
US16/198,972 US10929291B2 (en) 2017-12-06 2018-11-23 Memory controlling device and computing device including the same
CN201811488566.8A CN109885254A (zh) 2017-12-06 2018-12-06 存储器控制设备和包括其的计算设备

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR20170166935 2017-12-06
KR1020170166935 2017-12-06

Publications (2)

Publication Number Publication Date
KR20190067088A true KR20190067088A (ko) 2019-06-14
KR102101622B1 KR102101622B1 (ko) 2020-04-17

Family

ID=66846608

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180126267A KR102101622B1 (ko) 2017-12-06 2018-10-22 메모리 제어 장치 및 이를 포함하는 컴퓨팅 디바이스

Country Status (2)

Country Link
KR (1) KR102101622B1 (ko)
CN (1) CN109885254A (ko)

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11126379B2 (en) 2019-11-25 2021-09-21 SK Hynix Inc. Memory system
US11194520B2 (en) 2017-10-27 2021-12-07 SK Hynix Inc. Memory system and operating method thereof
US11366763B2 (en) 2019-02-27 2022-06-21 SK Hynix Inc. Controller including cache memory, memory system, and operating method thereof
US11436148B2 (en) 2020-06-30 2022-09-06 SK Hynix Inc. Memory controller and method of operating the same
US11436150B2 (en) 2020-05-29 2022-09-06 Research & Business Foundation Sungkyunkwan University Method for processing page fault by processor
US11449235B2 (en) 2020-06-25 2022-09-20 SK Hynix Inc. Storage device for processing merged transactions and method of operating the same
US11494313B2 (en) 2020-04-13 2022-11-08 SK Hynix Inc. Cache memory including dedicated areas, storage device and method for storing data in the dedicated areas of the cache memory
US11573891B2 (en) 2019-11-25 2023-02-07 SK Hynix Inc. Memory controller for scheduling commands based on response for receiving write command, storage device including the memory controller, and operating method of the memory controller and the storage device
US11599464B2 (en) 2020-05-21 2023-03-07 SK Hynix Inc. Memory controller and method of operating the same
KR102639415B1 (ko) * 2023-07-18 2024-02-23 메티스엑스 주식회사 프로세서에서 단일 트랜잭션으로부터 변환된 복수의 트랜잭션들을 처리하는 방법 및 이를 수행하기 위한 프로세서
CN117707991A (zh) * 2024-02-05 2024-03-15 苏州元脑智能科技有限公司 一种数据读写方法、系统、设备及存储介质
US11934309B2 (en) 2020-04-13 2024-03-19 SK Hynix Inc. Memory controller, storage device including the memory controller, and method of operating the memory controller and the storage device

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113267677A (zh) * 2021-06-16 2021-08-17 嘉兴军创电子科技有限公司 一种实时宽带频谱分析及存储的方法及装置
CN114153775B (zh) * 2021-12-10 2024-02-09 中国兵器工业集团第二一四研究所苏州研发中心 一种基于AXI总线的FlexRay控制器

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20050063653A (ko) * 2003-12-22 2005-06-28 한국전자통신연구원 자동 재송신 요청 송수신 장치 및 그 방법
US20170060434A1 (en) * 2015-08-27 2017-03-02 Samsung Electronics Co., Ltd. Transaction-based hybrid memory module
US20170357604A1 (en) * 2016-06-08 2017-12-14 Samsung Electronics Co., Ltd. System and method for operating a drr-compatible asynchronous memory module
US20180089087A1 (en) * 2016-09-26 2018-03-29 Samsung Electronics Co., Ltd. Byte-addressable flash-based memory module

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7716411B2 (en) * 2006-06-07 2010-05-11 Microsoft Corporation Hybrid memory device with single interface
US9189385B2 (en) * 2010-03-22 2015-11-17 Seagate Technology Llc Scalable data structures for control and management of non-volatile storage
KR20120079682A (ko) * 2011-01-05 2012-07-13 삼성전자주식회사 디램 캐시를 포함하는 메모리 장치 및 이를 포함하는 시스템
WO2016121026A1 (ja) * 2015-01-28 2016-08-04 株式会社日立製作所 ストレージ装置、計算機システム、及び、方法
KR102450555B1 (ko) * 2015-11-09 2022-10-05 삼성전자주식회사 스토리지 장치 및 그것의 동작 방법

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20050063653A (ko) * 2003-12-22 2005-06-28 한국전자통신연구원 자동 재송신 요청 송수신 장치 및 그 방법
US20170060434A1 (en) * 2015-08-27 2017-03-02 Samsung Electronics Co., Ltd. Transaction-based hybrid memory module
US20170357604A1 (en) * 2016-06-08 2017-12-14 Samsung Electronics Co., Ltd. System and method for operating a drr-compatible asynchronous memory module
US20180089087A1 (en) * 2016-09-26 2018-03-29 Samsung Electronics Co., Ltd. Byte-addressable flash-based memory module

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11194520B2 (en) 2017-10-27 2021-12-07 SK Hynix Inc. Memory system and operating method thereof
US11366763B2 (en) 2019-02-27 2022-06-21 SK Hynix Inc. Controller including cache memory, memory system, and operating method thereof
US11126379B2 (en) 2019-11-25 2021-09-21 SK Hynix Inc. Memory system
US11573891B2 (en) 2019-11-25 2023-02-07 SK Hynix Inc. Memory controller for scheduling commands based on response for receiving write command, storage device including the memory controller, and operating method of the memory controller and the storage device
US11934309B2 (en) 2020-04-13 2024-03-19 SK Hynix Inc. Memory controller, storage device including the memory controller, and method of operating the memory controller and the storage device
US11494313B2 (en) 2020-04-13 2022-11-08 SK Hynix Inc. Cache memory including dedicated areas, storage device and method for storing data in the dedicated areas of the cache memory
US11599464B2 (en) 2020-05-21 2023-03-07 SK Hynix Inc. Memory controller and method of operating the same
US11436150B2 (en) 2020-05-29 2022-09-06 Research & Business Foundation Sungkyunkwan University Method for processing page fault by processor
US11449235B2 (en) 2020-06-25 2022-09-20 SK Hynix Inc. Storage device for processing merged transactions and method of operating the same
US11436148B2 (en) 2020-06-30 2022-09-06 SK Hynix Inc. Memory controller and method of operating the same
KR102639415B1 (ko) * 2023-07-18 2024-02-23 메티스엑스 주식회사 프로세서에서 단일 트랜잭션으로부터 변환된 복수의 트랜잭션들을 처리하는 방법 및 이를 수행하기 위한 프로세서
CN117707991A (zh) * 2024-02-05 2024-03-15 苏州元脑智能科技有限公司 一种数据读写方法、系统、设备及存储介质
CN117707991B (zh) * 2024-02-05 2024-04-26 苏州元脑智能科技有限公司 一种数据读写方法、系统、设备及存储介质

Also Published As

Publication number Publication date
KR102101622B1 (ko) 2020-04-17
CN109885254A (zh) 2019-06-14

Similar Documents

Publication Publication Date Title
KR102101622B1 (ko) 메모리 제어 장치 및 이를 포함하는 컴퓨팅 디바이스
US11954363B2 (en) Quasi-volatile memory device with a back-channel usage
KR101893544B1 (ko) 물리적 로우에 함께 저장된 태그 및 데이터를 구비한 dram 캐시
CN110730956B (zh) 用于降低存储器系统中的页面迁移开销的机制
US8868843B2 (en) Hardware filter for tracking block presence in large caches
US9645739B2 (en) Host-managed non-volatile memory
US20130254477A1 (en) Method for reducing latency of accessing data stored in a file system on a computer storage device by caching file system permission information in the computer storage device
US10824568B2 (en) Speculative pre-fetching of flash translation layer tables for use with solid state systems
KR20140012175A (ko) 메모리 시스템 제어기를 구비하는 장치 및 관련 방법
US10152422B1 (en) Page-based method for optimizing cache metadata updates
US20160291881A1 (en) Method and apparatus for improving disk array performance
US11016905B1 (en) Storage class memory access
WO2019128958A1 (zh) 缓存替换技术
US10929291B2 (en) Memory controlling device and computing device including the same
JP7242170B2 (ja) メモリープールを有するコンピューティングシステムのためのメモリー分割
US10606488B2 (en) Selective data flush in a storage device
Zhang et al. Revamping storage class memory with hardware automated memory-over-storage solution
CN114077557A (zh) 执行读取/写入操作的方法和托管客户端装置的计算系统
US20220374150A1 (en) Adjustable timer component for semiconductor devices
US11704246B2 (en) Memory system for maintaining data consistency and operation method thereof
US20230409478A1 (en) Method and apparatus to reduce latency of a memory-side cache
Li et al. A NUMA-aware Key-Value Store for Hybrid Memory Architecture
Zhang et al. HAMS: Hardware Automated Memory-over-Storage for Large-scale Memory Expansion
Xu et al. Caiti: I/O Transit Caching for Persistent Memory-Based Block Device

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right