KR20180123625A - 하이브리드 메모리에서 쓰기 및 플러시 지원을 위한 시스템 및 방법 - Google Patents

하이브리드 메모리에서 쓰기 및 플러시 지원을 위한 시스템 및 방법 Download PDF

Info

Publication number
KR20180123625A
KR20180123625A KR1020180004966A KR20180004966A KR20180123625A KR 20180123625 A KR20180123625 A KR 20180123625A KR 1020180004966 A KR1020180004966 A KR 1020180004966A KR 20180004966 A KR20180004966 A KR 20180004966A KR 20180123625 A KR20180123625 A KR 20180123625A
Authority
KR
South Korea
Prior art keywords
write group
write
group table
memory
cache line
Prior art date
Application number
KR1020180004966A
Other languages
English (en)
Other versions
KR102506392B1 (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 삼성전자주식회사
Publication of KR20180123625A publication Critical patent/KR20180123625A/ko
Application granted granted Critical
Publication of KR102506392B1 publication Critical patent/KR102506392B1/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
    • G06F13/1694Configuration of memory controller to different memory types
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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
    • G06F12/0895Caches characterised by their organisation or structure of parts of caches, e.g. directory or tag array
    • 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
    • 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
    • G06F13/1673Details of memory controller using buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/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
    • 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/0683Plurality of storage devices
    • G06F3/0685Hybrid storage combining heterogeneous device types, e.g. hierarchical storage, hybrid arrays
    • 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
    • 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/10Providing a specific technical effect
    • G06F2212/1048Scalability
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/21Employing a record carrier using a specific recording technology
    • G06F2212/214Solid state disk
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/31Providing disk cache in a specific location of a storage system
    • G06F2212/313In storage device

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)
  • Memory System (AREA)
  • Static Random-Access Memory (AREA)

Abstract

메모리 모듈은 메모리 컨트롤러를 포함하고, 상기 메모리 컨트롤러는 호스트 레이어, 불휘발성 메모리에 연결된 미디어 레이어 및 상기 호스트 레이어, 상기 미디어 레이어 및 휘발성 메모리에 연결된 로직 코어를 포함하고, 상기 로직 코어는 복수의 행들을 포함하는 제1 쓰기 그룹 테이블을 저장하고, 상기 로직 코어는 캐시 라인 주소 및 쓰기 그룹 식별자를 포함하는 퍼시스턴트 쓰기 커맨드를 수신하고, 상기 퍼시스턴트 쓰기 커맨드와 연관된 데이터를 수신하고, 상기 휘발성 메모리의 상기 캐시 라인 주소로 상기 데이터를 쓰고, 상기 캐시 라인 주소를 제2 쓰기 그룹 테이블에 있는 복수의 버퍼들 중 상기 쓰기 그룹 식별자에 대응하는 선택된 버퍼에 저장하고, 유효한 엔트리들을 포함하는 상기 선택된 버퍼의 위치들을 식별하기 위해 상기 제1 쓰기 그룹 테이블의 상기 쓰기 그룹 식별자에 대응하는 행을 업데이트하도록 구성된다.

Description

하이브리드 메모리에서 쓰기 및 플러시 지원을 위한 시스템 및 방법{SYSTEMS AND METHODS FOR WRITE AND FLUSH SUPPORT IN HYBRID MEMORY}
본 발명은 메모리 컨트롤러에 관한 것으로, 좀 더 상세하게는, 휘발성 및 불휘발성 구성요소들을 포함하는 하이브리드 컴퓨터 메모리를 위한 메모리 컨트롤러 및 그것의 동작 방법에 관한 것이다.
퍼시스턴트 메모리를 포함하는 불휘발성 듀얼 인라인 메모리 모듈(NVDIMM-P; Non-Volatile Dual In-line Memory Module with Persistent memory)은 전원이 꺼지는 경우 컨텐츠를 잃어버리는 휘발성 부분과 전원이 꺼지더라도(예를 들어, 예기치 않은 정전, 시스템 충돌, 또는 일반적인 셧다운) 컨텐츠를 유지하는 불휘발성 부분을 포함할 수 있는 컴퓨터 시스템을 위한 랜덤 액세스 메모리(random-access memory)의 유형이다. 몇몇 경우에서, NVDIMM-P은 불휘발성 메모리로서 메모리에 매핑된 플래시 메모리(예를 들어, NAND 플래시 또는 ZNAND 플래시) 및 휘발성 메모리로서 동적 랜덤 액세스 메모리(DRAM; dynamic random access memory)를 포함할 수 있다. 몇몇 경우에서, 정적 랜덤 액세스 메모리(SRAM; static random access memory)는 휘발성 부분으로서 작용할 수 있고, 그리고/또는 상 변환 메모리(PCM; phse-change memory)는 불휘발성 부분으로서 작용할 수 있다. NVDIMM-P 모듈에 저장된 데이터는 "퍼시스턴트 DRAM"(예를 들어, 바이트별 주소 지정 가능한)으로서 접근되거나 또는 컴퓨터 시스템이 솔리드 스테이트 드라이브(SSD; solid state drive)와 같은 퍼시스턴트 스토리지 디바이스의 데이터뿐만 아니라 하드 드라이브들 및 광학 드라이브들과 같은 회전 미디어의 데이터에 접근하는 방식과 유사한 블록 단위 접근을 통해 접근될 수 있다.
NVDIMM-P 디바이스들에 대한 표준들은 JEDEC 솔리드 스테이트 기술 협회(Solid State Technology Association)(또는 JEDEC)에 의해 정의된다. 이러한 표준들은 NVDIMM-P를 따르는 디바이스들에 접근하기 위한 다수의 명령들을 포함한다.
본 발명은 상술된 기술적 과제를 해결하기 위한 것으로써, 본 발명은 호스트 프로세서로부터 수신된 커맨드들에 응답하여 NVDIMM-P의 휘발성 및 불휘발성 부분들에 쓰여진 데이터를 관리하는 시스템 및 방법을 제공할 수 있다.
본 발명의 하나의 실시 예에 따른 메모리 모듈은 휘발성 메모리, 불휘발성 메모리 및 메모리 컨트롤러를 포함하고, 상기 메모리 컨트롤러는 호스트 레이어, 상기 불휘발성 메모리에 연결된 미디어 레이어 및 상기 호스트 레이어, 상기 미디어 레이어 및 상기 휘발성 메모리에 연결된 로직 코어를 포함하고, 상기 로직 코어는 복수의 행들을 포함하는 제1 쓰기 그룹 테이블을 저장하고, 상기 로직 코어는 상기 호스트 레이어를 통해 캐시 라인 주소 및 쓰기 그룹 식별자를 포함하는 퍼시스턴트(persistent) 쓰기 커맨드를 수신하고, 상기 호스트 레이어를 통해 상기 퍼시스턴트 쓰기 커맨드와 연관된 데이터를 수신하고, 상기 퍼시스턴트 쓰기 커맨드에 응답하여 상기 휘발성 메모리의 상기 캐시 라인 주소로 상기 데이터를 쓰고, 상기 캐시 라인 주소를 제2 쓰기 그룹 테이블에 있는 복수의 버퍼들 중 상기 쓰기 그룹 식별자에 대응하는 선택된 버퍼에 저장하고, 유효한 엔트리들을 포함하는 상기 선택된 버퍼의 위치들을 식별하기 위해 상기 제1 쓰기 그룹 테이블의 상기 쓰기 그룹 식별자에 대응하는 행을 업데이트하도록 구성된다.
상기 로직 코어는 복수의 행들을 포함하는 제0 쓰기 그룹 테이블을 더 저장하고, 상기 제0 쓰기 그룹 테이블의 상기 행들 각각은 대응하는 쓰기 그룹과 연관되고, 상기 제0 쓰기 그룹 테이블의 상기 행들 각각은 상기 대응하는 쓰기 그룹과 연관된 상기 제1 쓰기 그룹 테이블 및 상기 제2 쓰기 그룹 테이블의 행들을 식별하는 행 비트맵을 포함할 수 있다.
상기 로직 코어는 상기 제0 쓰기 그룹 테이블에서, 상기 쓰기 그룹 식별자에 대응하는 행 비트맵을 검색하고, 상기 대응하는 행 비트맵은 상기 쓰기 그룹 식별자와 연관된 상기 제2 쓰기 그룹 테이블의 버퍼들을 식별하고, 상기 대응하는 행 비트맵에 기초하여, 상기 쓰기 그룹 식별자와 연관된 상기 버퍼들 중 하나의 버퍼가 이용 가능한 공간을 가지는지 여부를 판단하고, 상기 버퍼들 중 상기 버퍼가 이용 가능한 공간을 가진다고 판단되는 경우, 상기 버퍼를 상기 선택된 버퍼로서 선택하고, 상기 쓰기 그룹 식별자와 연관된 상기 버퍼들이 이용 가능한 공간을 가지지 않는다고 판단되는 경우, 상기 제2 쓰기 그룹 테이블에서 이용 가능한 버퍼가 있는지 여부를 판단하고, 상기 제2 쓰기 그룹 테이블에서 이용 가능한 버퍼가 있다고 판단되는 경우, 상기 이용 가능한 버퍼를 상기 쓰기 그룹 식별자와 연관짓기 위해 상기 대응하는 행 비트맵을 업데이트하고, 상기 이용 가능한 버퍼를 상기 선택된 버퍼로서 선택하도록 구성될 수 있다.
상기 퍼시스턴트 쓰기 커맨드는 퍼시스트 플래그(persist flag)를 더 포함하고, 상기 로직 코어는 상기 퍼시스트 플래그가 설정된 것인지 여부를 판단하고, 상기 퍼시스트 플래그가 설정된 것으로 판단되는 경우, 상기 쓰기 그룹 식별자와 연관된 상기 제2 쓰기 그룹 테이블에서 하나 이상의 버퍼들을 검색하고, 상기 버퍼들 각각은 하나 이상의 캐시 라인 주소를 저장하고, 상기 쓰기 그룹 식별자와 연관된 상기 하나 이상의 버퍼들의 상기 하나 이상의 캐시 라인 주소들 각각에 대해, 상기 휘발성 메모리의 상기 캐시 라인 주소에 있는 상기 데이터를 상기 불휘발성 메모리로 쓰도록 구성될 수 있다.
상기 메모리 모듈은 캐시 메타데이터 메모리를 더 포함하고, 상기 로직 코어는 상기 제2 쓰기 그룹 테이블에 저장된 캐시 라인 주소 각각에 대한 퍼시스트 상태를 상기 캐시 메타데이터 메모리에 저장하도록 구성될 수 있다.
상기 퍼시스턴트 쓰기 커맨드는 퍼시스트 플래그를 더 포함하고, 상기 로직 코어는 상기 퍼시스트 플래그가 설정된 것인지 여부를 판단하고, 상기 퍼시스트 플래그가 설정된 것으로 판단되는 경우, 상기 쓰기 그룹 식별자와 연관된 하나 이상의 버퍼들을 검색하고, 상기 버퍼들 각각은 하나 이상의 캐시 라인 주소를 저장하고, 상기 쓰기 그룹 식별자와 연관된 상기 하나 이상의 버퍼들의 상기 하나 이상의 캐시 라인 주소들 각각에 대해, 상기 캐시 라인 주소에 대응하는 상기 퍼시스트 상태가 설정된 것인지 여부를 판단하고, 상기 캐시 라인 주소에 대응하는 상기 퍼시스트 상태가 설정된 것으로 판단되는 경우, 상기 휘발성 메모리의 상기 캐시 라인 주소의 상기 데이터를 상기 불휘발성 메모리로 쓰고, 상기 캐시 라인 주소에 대응하는 상기 퍼시스트 상태가 설정되지 않은 것으로 판단되는 경우, 상기 캐시 라인 주소의 상기 데이터를 상기 불휘발성 메모리로 쓰지 않도록 구성될 수 있다.
상기 메모리 모듈은 불휘발성 듀얼 인라인 메모리 모듈(NVDIMM; non-volatile dual in-line memory module)일 수 있다.
본 발명의 하나의 실시 예에 따른 메모리 모듈은 휘발성 메모리, 불휘발성 메모리 및 메모리 컨트롤러를 포함하고, 상기 메모리 컨트롤러는 호스트 레이어, 상기 불휘발성 메모리와 연결된 미디어 레이어 및 상기 호스트 레이어, 상기 미디어 레이어 및 상기 휘발성 메모리와 연결된 로직 코어를 포함하고, 상기 로직 코어는 복수의 행들을 포함하는 제1 쓰기 그룹 테이블을 저장하고, 상기 로직 코어는 상기 호스트 레이어를 통해 쓰기 그룹 식별자를 포함하는 플러시(flush) 커맨드를 수신하고, 상기 쓰기 그룹 식별자와 대응하는 상기 제1 쓰기 그룹 테이블의 하나 이상의 행들을 검색하고, 상기 하나 이상의 행들 각각은 제2 쓰기 그룹 테이블의 대응하는 버퍼에 있는 유효한 엔트리들을 식별하는 헤드 포인터(head pointer) 및 테일 포인터(tail pointer)를 포함하고, 상기 제2 쓰기 그룹 테이블에서 상기 쓰기 그룹 식별자와 연관된 하나 이상의 버퍼들을 검색하고, 상기 하나 이상의 버퍼들 각각은 상기 제1 쓰기 그룹 테이블의 대응하는 행의 상기 헤드 포인터 및 상기 테일 포인터에 의해 식별되는 상기 유효한 엔트리들에 하나 이상의 캐시 라인 주소를 저장하고, 상기 쓰기 그룹 식별자와 연관된 상기 하나 이상의 버퍼들의 상기 하나 이상의 캐시 라인 주소들 각각에 대해, 상기 휘발성 메모리의 상기 캐시 라인 주소의 데이터를 상기 불휘발성 메모리로 쓰도록 구성된다.
상기 로직 코어는 상기 대응하는 버퍼를 비우기 위해 상기 쓰기 그룹 식별자에 대응하는 상기 제1 쓰기 그룹 테이블의 상기 행의 상기 헤드 포인터 및 상기 테일 포인터를 동일한 값으로 업데이트하도록 더 구성될 수 있다.
본 발명의 하나의 실시 예에 따른 메모리 모듈은 휘발성 메모리, 불휘발성 메모리 및 메모리 컨트롤러를 포함하고, 상기 메모리 컨트롤러는 호스트 레이어, 상기 불휘발성 메모리와 연결된 미디어 레이어 및 상기 호스트 레이어, 상기 미디어 레이어 및 상기 휘발성 메모리와 연결된 로직 코어를 포함하고, 상기 로직 코어는 복수의 행들을 포함하는 제1 쓰기 그룹 테이블을 저장하고, 상기 로직 코어는 상기 호스트 레이어를 통해 플러시(flush) 커맨드를 수신하고, 상기 제1 쓰기 그룹 테이블의 각각의 행에 대해 제2 쓰기 그룹 테이블에서 대응하는 버퍼를 검색하고, 상기 제1 쓰기 그룹 테이블의 각각의 행은 상기 제2 쓰기 그룹 테이블의 상기 대응하는 버퍼에 있는 유효한 엔트리들을 식별하는 헤드 포인터 및 테일 포인터를 포함하고, 상기 대응하는 버퍼의 상기 유효한 엔트리들 각각에 대해, 대응하는 캐시 라인 주소를 검색하고 상기 휘발성 메모리의 상기 캐시 라인 주소의 데이터를 상기 불휘발성 메모리로 쓰고, 상기 대응하는 버퍼를 비우기 위해 상기 제1 쓰기 그룹 테이블의 상기 행의 상기 헤드 포인터 및 상기 테일 포인터를 동일한 값으로 업데이트하도록 구성된다.
휘발성 메모리, 불휘발성 메모리 및 메모리 컨트롤러를 포함하고, 상기 메모리 컨트롤러는 호스트 레이어, 상기 불휘발성 메모리에 연결된 미디어 레이어 및 상기 호스트 레이어, 상기 미디어 레이어 및 상기 휘발성 메모리에 연결된 로직 코어를 포함하고, 상기 로직 코어는 복수의 행들을 포함하는 제1 쓰기 그룹 테이블을 저장하고, 상기 로직 코어는 상기 휘발성 메모리 및 상기 불휘발성 메모리를 제어하도록 구성되는 메모리 모듈을 동작하는 방법에 있어서, 본 발명의 하나의 실시 예에 따른 방법은 상기 메모리 컨트롤러가 캐시 라인 주소 및 쓰기 그룹 식별자를 포함하는 퍼시스턴트(persistent) 쓰기 커맨드를 수신하는 단계, 상기 메모리 컨트롤러가 상기 퍼시스턴트 쓰기 커맨드에 연관된 데이터를 수신하는 단계 및 상기 퍼시스턴트 쓰기 커맨드에 응답하여 상기 캐시 라인 주소의 상기 휘발성 메모리로 상기 데이터를 쓰는 단계, 상기 메모리 컨트롤러가 제2 쓰기 그룹 테이블에 있는 복수의 버퍼들 중 상기 쓰기 그룹 식별자에 대응하는 선택된 버퍼에 상기 캐시 라인 주소를 저장하는 단계, 상기 메모리 컨트롤러가 유효한 엔트리들을 포함하는 상기 선택된 버퍼의 위치들을 식별하기 위해 상기 제1 쓰기 그룹 테이블의 상기 쓰기 그룹 식별자에 대응하는 행을 업데이트하는 단계를 포함한다.
상기 로직 코어는 복수의 행들을 포함하는 제0 쓰기 그룹 테이블을 더 포함하고, 상기 제0 쓰기 그룹 테이블의 상기 행들 각각은 대응하는 쓰기 그룹과 연관되고, 상기 제0 쓰기 그룹 테이블의 상기 행들 각각은 행 비트맵을 포함하고, 상기 행 비트맵은 상기 대응하는 쓰기 그룹과 연관된 제1 쓰기 그룹 테이블 및 제2 쓰기 그룹 테이블의 행들을 식별할 수 있다.
상기 방법은 상기 제0 쓰기 그룹 테이블에서, 상기 쓰기 그룹 식별자에 대응하는 행 비트맵을 검색하는 단계, 상기 대응하는 행 비트맵은 상기 쓰기 그룹 식별자와 연관된 상기 제2 쓰기 그룹 테이블의 버퍼들을 식별하고, 상기 대응하는 행 비트맵에 기초하여 상기 쓰기 그룹 식별자와 연관된 상기 버퍼들 중 하나의 버퍼가 이용 가능한 공간을 가지는지 여부를 판단하는 단계, 상기 버퍼들 중 상기 버퍼가 이용 가능한 공간을 가지는 것으로 판단되는 경우, 상기 버퍼를 상기 선택된 버퍼로서 선택하는 단계 및 상기 버퍼들이 이용 가능한 공간을 가지지 않는 것으로 판단되는 경우, 상기 제2 쓰기 그룹 테이블에서 이용 가능한 버퍼가 있는지 여부를 판단하는 단계 및 상기 제2 쓰기 그룹 테이블에 이용 가능한 버퍼가 있는 것으로 판단되는 경우, 상기 이용 가능한 버퍼를 상기 선택된 버퍼로서 선택하는 단계를 더 포함할 수 있다.
상기 퍼시스턴트 쓰기 커맨드는 퍼시스트 플래그(persist flag)를 더 포함하고, 상기 방법은 상기 퍼시스트 플래그가 설정된 것인지 여부를 판단하는 단계, 상기 퍼시스트 플래그가 설정된 것으로 판단되는 경우, 상기 쓰기 그룹 식별자와 연관된 상기 제2 쓰기 그룹 테이블에서 하나 이상의 버퍼들을 검색하는 단계 및 상기 버퍼들 각각은 하나 이상의 캐시 라인 주소를 저장하고, 상기 쓰기 그룹 식별자와 연관된 상기 하나 이상의 버퍼들의 상기 하나 이상의 캐시 라인 주소들 각각에 대해, 상기 휘발성 메모리의 상기 캐시 라인 주소의 상기 데이터를 상기 불휘발성 메모리로 쓰는 단계를 더 포함할 수 있다.
상기 메모리 모듈은 캐시 메타데이터 메모리를 더 포함하고, 상기 방법은 상기 제2 쓰기 그룹 테이블에 저장된 캐시 라인 주소 각각에 대한 퍼시스트 상태를 상기 캐시 메타데이터 메모리에 저장하는 단계를 더 포함할 수 있다.
상기 퍼시스턴트 쓰기 커맨드는 퍼시스트 플래그를 더 포함하고, 상기 방법은 상기 퍼시스트 플래그가 설정된 것인지 여부를 판단하는 단계, 상기 퍼시스트 플래그가 설정된 것으로 판단되는 경우, 상기 쓰기 그룹 식별자와 연관된 하나 이상의 버퍼들을 검색하는 단계; 상기 버퍼들 각각은 하나 이상의 캐시 라인 주소를 저장하고, 상기 쓰기 그룹 식별자와 연관된 상기 하나 이상의 버퍼들의 상기 하나 이상의 캐시 라인 주소들 각각에 대해, 상기 캐시 라인 주소에 대응하는 상기 퍼시스트 상태가 설정된 것인지를 판단하는 단계, 상기 캐시 라인 주소에 대응하는 상기 퍼시스트 상태가 설정된 것으로 판단되는 경우, 상기 휘발성 메모리의 상기 캐시 라인 주소에 있는 상기 데이터를 상기 불휘발성 메모리로 쓰는 단계 및 상기 캐시 라인 주소에 대응하는 상기 퍼시스트 상태가 설정되지 않은 것으로 판단되는 경우, 상기 캐시 라인 주소에 있는 상기 데이터를 상기 불휘발성 메모리로 쓰는 것을 방지하는 단계를 더 포함할 수 있다.
상기 메모리 모듈은 불휘발성 듀얼 인라인 메모리 모듈(NVDIMM; non-volatile dual in-line memory module)일 수 있다.
휘발성 메모리, 불휘발성 메모리 및 메모리 컨트롤러를 포함하고, 상기 메모리 컨트롤러는 호스트 레이어, 상기 불휘발성 메모리에 연결된 미디어 레이어 및 상기 호스트 레이어, 상기 미디어 레이어 및 상기 휘발성 메모리에 연결된 로직 코어를 포함하고, 상기 로직 코어는 복수의 행들을 포함하는 제1 쓰기 그룹 테이블을 저장하고, 상기 로직 코어는 상기 휘발성 메모리 및 상기 불휘발성 메모리를 제어하도록 구성되는 메모리 모듈을 동작하는 방법에 있어서, 본 발명의 하나의 실시 예에 따른 방법은 상기 메모리 컨트롤러가 쓰기 그룹 식별자를 포함하는 플러시(flush) 커맨드를 수신하는 단계, 상기 쓰기 그룹 식별자에 대응하는 상기 제1 쓰기 그룹 테이블의 하나 이상의 행들을 검색하는 단계, 상기 하나 이상의 행들 각각은 상기 제2 쓰기 그룹 테이블의 대응하는 버퍼에 있는 유효한 엔트리들을 식별하는 헤드 포인터 및 테일 포인터를 포함하고, 상기 제2 쓰기 그룹 테이블에서 상기 쓰기 그룹 식별자와 연관된 하나 이상의 버퍼들을 검색하는 단계, 상기 하나 이상의 버퍼들 각각은 상기 제1 쓰기 그룹 테이블의 대응하는 행의 상기 헤드 포인터 및 상기 테일 포인터에 의해 식별되는 상기 유효한 엔트리들로 하나 이상의 캐시 라인 주소를 저장하고, 상기 쓰기 그룹 식별자와 연관된 상기 하나 이상의 버퍼들의 상기 하나 이상의 캐시 라인 주소들 각각에 대해, 상기 휘발성 메모리의 상기 캐시 라인 주소에 있는 데이터를 상기 불휘발성 메모리로 쓰는 단계를 포함한다.
상기 방법은 상기 대응하는 버퍼를 비우기 위해 상기 쓰기 그룹 식별자에 대응하는 상기 제1 쓰기 그룹 테이블의 상기 행의 상기 헤드 포인터 및 상기 테일 포인터를 동일한 값으로 업데이트하는 단계를 더 포함할 수 있다.
휘발성 메모리, 불휘발성 메모리 및 메모리 컨트롤러를 포함하고, 상기 메모리 컨트롤러는 호스트 레이어, 상기 불휘발성 메모리에 연결된 미디어 레이어 및 상기 호스트 레이어, 상기 미디어 레이어 및 상기 휘발성 메모리에 연결된 로직 코어를 포함하고, 상기 로직 코어는 복수의 행들을 포함하는 제1 쓰기 그룹 테이블을 저장하고, 상기 로직 코어는 상기 휘발성 메모리 및 상기 불휘발성 메모리를 제어하도록 구성되는 메모리 모듈을 동작하는 방법에 있어서, 본 발명의 하나의 실시 예에 따른 방법은 상기 메모리 컨트롤러가 플러시(flush) 커맨드를 수신하는 단계, 상기 제1 쓰기 그룹 테이블의 각 행에 대해, 제2 쓰기 그룹 테이블에 있는 대응하는 버퍼를 검색하는 단계, 상기 제1 쓰기 그룹 테이블의 각 행은 상기 제2 쓰기 그룹 테이블의 상기 대응하는 버퍼에 있는 유효한 엔트리들을 식별하는 헤드 포인터 및 테일 포인터를 포함하고, 상기 대응하는 버퍼의 상기 유효한 엔트리들 각각에 대해, 대응하는 캐시 라인 주소를 검색하고 상기 휘발성 메모리의 상기 캐시 라인 주소에 있는 데이터를 상기 불휘발성 메모리로 쓰는 단계 및 상기 대응하는 버퍼를 비우기 위해 상기 제1 쓰기 그룹 테이블의 상기 행의 상기 헤드 포인터 및 상기 테일 포인터를 동일한 값으로 업데이트하는 단계를 포함한다.
본 발명에 따르면, 휘발성 메모리로부터 불휘발성 메모리로 데이터가 중복하여 플러시되는 것을 피하고, 쓰기 그룹에 따라 휘발성 메모리로부터 불휘발성 메모리로 데이터를 플러시하는 성능을 향상시킬 수 있다.
도 1은 본 발명의 하나의 실시 예에 따른 호스트 시스템과 인터페이스하는 불휘발성 듀얼 인라인 메모리 모듈의 구성도이다.
도 2a는 본 발명의 하나의 실시 예에 따른 호스트 시스템과 인터페이스하는 불휘발성 듀얼 인라인 메모리 모듈의 블록도이다.
도 2b는 본 발명의 하나의 실시 예에 따라, 로직 코어 및 휘발성 메모리를 포함하는 NVMDIMM-P의 부분의 블록도이다.
도 3a 및 도 3b는 본 발명의 하나의 실시 예에 따른 제1 쓰기 그룹 테이블 및 제2 쓰기 그룹 테이블의 구성도이다.
도 4는 본 발명의 하나의 실시 예에 따른 제1 쓰기 그룹 테이블 및 제2 쓰기 그룹 테이블에서 "레코드(record)" 동작의 효과에 대한 구성도이다.
도 5는 본 발명의 하나의 실시 예에 따른 "레코드" 동작의 순서도이다.
도 6a는 본 발명의 하나의 실시 예에 따른 "플러시(flush)" 동작의 순서도이다.
도 6b는 본 발명의 하나의 실시 예에 따른 "라이트백(wirteback)" 동작의 순서도이다.
도 7은 본 발명의 하나의 실시 예에 따른 퍼시스턴트 쓰기(PWRITE) 커맨드의 실행의 순서도이다.
도 8은 본 발명의 하나의 실시 예에 따른 플러시(FLUSH) 커맨드의 실행의 순서도이다.
도 9는 본 발명의 하나의 실시 예에 따른 제0 쓰기 그룹 테이블, 제1 쓰기 그룹 테이블 및 제2 쓰기 그룹 테이블의 구성도이다.
도 10은 본 발명의 하나의 실시 예에 따른 제0 쓰기 그룹 테이블, 제1 쓰기 그룹 테이블 및 제2 쓰기 그룹 테이블을 포함하는 "레코드" 동작의 실행의 순서도이다.
도 11은 본 발명의 하나의 실시 예에 따른 제0 쓰기 그룹 테이블, 제1 쓰기 그룹 테이블 및 제2 쓰기 그룹 테이블을 포함하는 "플러시" 동작의 실행의 순서도이다.
이하에서는, 첨부된 도면들을 참조하여 실시 예들이 더 상세하게 설명될 것이다. 도면들에서 같은 참조 번호들은 같은 요소들을 지칭한다. 그러나, 본 발명은 다양한 형태로 구현될 수 있고, 본 명세서에서 설명된 실시 예들에 국한된 것으로 해석되어서는 안된다. 오히려, 이러한 실시 예들은 본 발명이 철저하고 완벽하게 이루어질 수 있도록 예시들로서 제공되고, 통상의 기술자에게 본 발명의 특징들과 양상들을 충분히 전달할 수 있다. 따라서, 본 발명의 특징들과 양상들의 완벽한 이해를 위해 통상의 기술자에게 필요하지 않은 프로세스들, 요소들, 그리고 기술들은 설명되지 않을 수 있다. 달리 언급되지 않으면, 같은 참조 숫자들은 첨부된 도면들 및 상세한 설명에서 같은 요소들을 나타내며, 따라서, 이에 대한 설명은 반복되지 않을 것이다.
본 명세서에서 "제0", "제1", "제2", "제3" 등의 용어들이 다양한 요소들, 구성요소들, 그리고/또는 섹션들을 설명하기 위해 사용되더라도, 이러한 요소들, 구성요소들, 그리고/또는 섹션들은 이러한 용어들에 의해 제한되지 않아야 한다. 이러한 용어들은 하나의 요소, 구성요소, 또는 섹션을 다른 요소, 구성요소, 또는 섹션과 구별하기 위해 사용된다. 따라서, 본 발명의 사상 및 범위를 벗어나지 않으면, 아래에서 설명되는 제1 요소, 제1 구성요소, 또는 제1 섹션은 제2 요소, 제2 구성요소, 또는 제2 섹션으로 지칭될 수 있다.
본 명세서에서 사용되는 용어는 오직 특정한 실시 예들을 설명하기 위한 목적이고 본 발명을 제한하려는 의도는 아니다. 본 명세서에서 사용된 바와 같이, 문맥이 명확하게 다른 것을 가리키지 않으면, 단수 형태들은 복수 형태를 포함하는 것으로 의도된다. "포함한다", "포함하는" 용어들은, 본 명세서에서 사용되는 경우, 기술된 특징들, 정수들, 단계들, 동작들, 요소들, 그리고/또는 구성요소들의 존재를 명시하지만, 하나 이상의 다른 특징들, 정수들, 단계들, 동작들, 요소들, 구성요소들, 그리고/또는 그것의 조합들의 존재 또는 추가를 못하게 하는 것은 아니다. 본 명세서에서 사용된 바와 같이, "그리고/또는" 용어는 하나 이상의 관련된 항목 및 모든 조합들을 포함한다. "적어도 하나"와 같은 표현들은, 요소들의 목록 앞에 있는 경우, 요소들의 전체 목록을 수정하고 개별 요소들의 목록을 수정하지 않는다.
본 명세서에서 사용된 바와 같이, "상당히", "약", 그리고 유사한 용어들은 근사의 용어들로서 사용되고, 정도의 용어로서 사용되지 않으며, 통상의 기술자들에 의해 인식되는 측정되거나 계산된 값들에서 고유한 편차들을 설명하기 위해 의도된다. 또한, 본 명세서의 실시 예들을 설명하는 경우, "할 수 있다"의 사용은 "본 발명의 하나의 이상의 실시 예들"을 지칭한다. 본 명세서에서 사용된 바와 같이, "사용", "사용하는", 그리고 "사용된" 용어들은 각각 "활용", "활용하는", 그리고 "활용된" 용어들과 동의어로 고려될 수 있다. 또한, "예시적인" 용어는 설명 또는 예시를 지칭하기 위한 것으로 의도된다.
본 명세서에서 설명되는 본 발명의 실시 예들에 따른 전자 또는 전기 디바이스들 그리고/또는 다른 관련된 디바이스들 또는 구성요소들은 임의의 적절한 하드웨어, 펌웨어(예를 들어, 주문형 집적회로(ASIC)), 소프트웨어, 또는 소프트웨어, 펌웨어, 그리고 하드웨어의 조합을 활용하여 구현될 수 있다. 예를 들어, 이러한 디바이스들의 다양한 구성요소들은 하나의 집적 회로(IC) 칩 또는 별도의 IC 칩들에서 형성될 수 있다. 또한, 이러한 디바이스들의 다양한 구성요소들은 연성 인쇄 회로 필름, 테이프 캐리어 패키지(TCP; tape carrier package), 인쇄 회로 기판(PCB)에서 구현될 수 있거나, 하나의 기반에서 형성될 수 있다.
도 1은 본 발명의 하나의 실시 예에 따른 호스트 시스템과 인터페이스를 하는 퍼시스턴트 메모리를 포함한 불휘발성 듀얼 인라인 메모리 모듈(NVDIMM-P)의 구성도이다. 도 2a는 본 발명의 하나의 실시 예에 따른 호스트 시스템과 인터페이스를 하는 퍼시스턴트 메모리를 포함한 불휘발성 듀얼 인라인 메모리 모듈의 블록도이다.
도 1 및 도 2a에서 도시된 바와 같이, NVDIMM-P(100)는 휘발성 메모리(110), 불휘발성 메모리(또는 퍼시스턴트 메모리)(120), 그리고 휘발성 메모리(110) 및 불휘발성 메모리(120) 양쪽으로 데이터를 쓰고 양쪽으로부터 데이터를 읽도록 구성되는 메모리 컨트롤러(130)를 포함한다. 메모리 컨트롤러(130)는 호스트 프로세서(200)와 인터페이스를 하도록 구성되는 호스트 레이어(132)(예를 들어, 행 어드레스 스트로브-열 어드레스 스트로브, 또는 RAS-CAS 인터페이스), NVDIMM-P 모듈을 제어하도록 구성되는 로직 코어(134), 그리고 불휘발성 메모리(120)와 인터페이스를 하도록 구성되는 미디어 레이어(136)를 포함한다. 몇몇 실시 예들에서, 메모리 컨트롤러(130)는 예를 들어, 필드 프로그램 가능 게이트 어레이(FPGA; field programmable gate array), 응용 주문형 집적 회로(ASIC), 또는 마이크로컨트롤러로 구현될 수 있다.
이하에서는, 휘발성 메모리(110)는 "캐시(cache)"로 지칭될 수 있고, 로직 코어(134)는 "캐시 레이어(cache layer)"로 지칭될 수 있다. 예를 들어, 정적 랜덤 액세스 메모리(SRAM)(휘발성 메모리(110))는 상 변환 메모리(PCM)(불휘발성 메모리(120))에 대한 쓰기 버퍼로서 작용할 수 있다. 다른 예로서, 동적 랜덤 액세스 메모리(DRAM) 캐시는 자주 사용되거나 최근 사용된 데이터를 읽거나 쓰는 경우, 성능을 향상시키기 위해 플래시 메모리(예를 들어, Z-NAND)와 연결될 수 있다.
도 2b는 본 발명의 실시 예에 따라, 로직 코어(134) 및 휘발성 메모리(110)를 포함하는 NVDIMM-P의 한 부분의 블록도이다. 도 2b에 도시된 바와 같이, 로직 코어(134)는 호스트 레이어(132)에 대한 인터페이스(134h), 미디어 레이어(136)에 대한 인터페이스(134m), 캐시 컨트롤러(134c), 프리패쳐(prefetcher)(134p), 메타데이터 캐시(로직 코어(134) 내부의 정적 랜덤 액세스 메모리 또는 SRAM(134s)으로서 구현되거나 정적 랜덤 액세스 메모리 또는 SRAM(134s)에 저장될 수 있음), L1 프리패치(prefetch) 버퍼(로직 코어(134) 내부의 SRAM(134s)에 저장됨으로써 구현될 수 있음), 및 휘발성 메모리(110)(예를 들어, 로직 코어(134) 외부의 동적 랜덤 액세스 메모리 또는 DRAM)와 인터페이스를 하도록 구성되는 휘발성 메모리 컨트롤러(134d)를 포함한다.
도 2b는 본 발명의 하나의 실시 예에 있어서, 휘발성 메모리(110)에 저장될 수 있는 다양한 유형의 데이터를 나타낸다. 이러한 데이터는 캐시된 데이터(112), 캐시 메타데이터(114), L2 읽기/쓰기 캐시(116), L3 쓰기 버퍼(118)를 포함한다.
NVDIMM-P(100), 특히 메모리 컨트롤러(130)는 메모리 컨트롤러(130)의 호스트 레이어(132)와 연결된 버스(250)(도 1 및 도 2a 참조)를 통해 호스트 프로세서(200)와 통신을 하도록 구성될 수 있다. 메모리 컨트롤러(130)는, 호스트 레이어(132)를 통해, NVDIMM-P로 데이터를 쓰고 NVDIMM-P로부터 데이터를 읽기 위해 호스트 프로세서(200)로부터 커맨드 및 데이터를 수신할 수 있다. 메모리 컨트롤러(130)는, 예를 들어, 휘발성 메모리(110) 그리고/또는 불휘발성 메모리(120)로 데이터를 쓰거나, 휘발성 메모리(110) 그리고/또는 불휘발성 메모리(120)로부터 데이터를 읽고 버스(250)를 통해 호스트 프로세서(200)로 데이터를 제공함으로써 커맨드에 응답할 수 있다. 데이터는 "퍼시스턴트 DRAM"으로서 접근되거나 블록 기반의 드라이브 접근 인터페이스를 통해 접근될 수 있는 캐시 라인 인터페이스(예를 들어, 메모리에 매핑된 플래시 및 DRAM)를 통해 캐시 라인들의 유닛들에 있는 NVDIMM-P(100)로 쓰여지고 읽혀질 수 있다.
데이터 지속성과 관련된 NVDIMM-P 표준에 정의된 커맨드들은 퍼시스턴트 쓰기 커맨드(예를 들어, NVDIMM-P 표준에 따른 PWRITE 커맨드) 및 플러시 커맨드(예를 들어, NVDIMM-P 표준에 따른 FLUSH 커맨드)를 포함한다. PWRITE 커맨드의 파라미터들은 데이터가 쓰여질 캐시 라인 어드레스(또는 메모리 어드레스), 쓰기 그룹 식별자(WGID), 및 "퍼시스트(persist)" 플래그(flag)를 포함한다. "오프(off)"(예를 들어, zero 또는 0)로 설정된 "퍼시스트(persist)" 플래그를 포함하는 PWRITE 커맨드에 응답하여, 메모리 컨트롤러(130)는 관련된 데이터를 NVDIMM-P(100)의 휘발성 메모리(110)로 저장하고, 커맨드에 의해 쓰여진 데이터의 지속성을 보장하지 않는다.
"온(on)"(예를 들어, one 또는 1)으로 설정된 "퍼시스트(persist)" 플래그를 포함하는 PWRITE 커맨드에 응답하여, 메모리 컨트롤러(130)는 관련된 데이터를 NVDIMM-P(100)의 불휘발성 메모리(120)로 저장("플러시")하고, PWRTIE 커맨드에서 제공된 쓰기 그룹 식별자(WGID)를 포함하는 다른 모든 데이터를 휘발성 메모리(110)로부터 불휘발성 메모리(120)로 저장(예를 들어, 쓰기 또는 플러시)한다(예를 들어, 이전에 PWRITE 커맨드를 사용하여 NVDIMM-P(100)로 쓰여진 데이터 및 같은 WGID를 갖는 데이터). NVDIMM-P(100)는 "온(on)"으로 설정된 퍼시스트 플래그를 포함하는 PWRTIE 커맨드가 완료된 경우, 호스트 프로세서(200)로 확인 응답을 할 수 있다.
FLUSH 커맨드의 파라미터들은 불휘발성 메모리(120)로 모든 쓰기들(예를 들어, 휘발성 메모리(110)로 쓰여진 모든 데이터)을 플러시할 것인지; 모든 퍼시스턴트 쓰기들(예를 들어, 0으로 설정된 퍼시스트 비트를 포함하는 PWRITE 커맨드를 이용하여 수행된 모든 쓰기들)을 플러시할 것인지; 또는 주어진 WGID와 관련된 모든 퍼시스턴트 쓰기들(예를 들어, PWRITE 커맨드와 유사하지만 추가 데이터가 없는)을 플러시할 것인지를 나타내는 설정을 포함할 수 있다. FLUSH 동작이 완료된 경우, NVDIMM-P(100)는 호스트 프로세서(200)로 확인을 제공할 수 있다.
"온(on)"으로 설정된 "퍼시스트(persist)"를 포함하는 PWRITE 커맨드에 응답하여 데이터를 플러시하는 경우, 또는 WGID에 기초하여 FLUSH 커맨드에 응답하여 데이터를 플러시 하는 경우, 메모리 컨트롤러(130)는 휘발성 메모리(110)에서 플러시될 데이터, 즉, 주어진 WGID와 관련된 모든 데이터를 식별한다.
휘발성 메모리(110)가 작으면, 휘발성 데이터에 대한 검색은 매칭하는 WGID를 가지는 모든 데이터에 대해 휘발성 메모리(110) 전체를 스캔함으로써 달성될 수 있다. 예를 들어, SRAM 쓰기 버퍼(예를 들어, L3 쓰기 버퍼(118))는 약 256개의 캐시 엔트리들(entries)을 포함할 수 있고, 이는, 현재의 메모리 기술에 기초하여, 합리적인 시간 이내(예를 들어, 상당한 레이턴시(latency) 또는 상당한 성능 오버헤드(overhead) 없이)에 스캔하기에 충분히 작다.
그러나, 휘발성 메모리(110)가 크면, 모든 휘발성 데이터를 스캔하는 것은 비실용적일 수 있다. 예를 들어, 8 기가바이트(GB) DRAM 캐시는 약 4백만 캐시 라인 엔트리들을 가질 수 있고, 모든 4백만 캐시 라인 엔트리들을 스캔하는 데 요구되는 시간은 엄청나게 길 수 있고 NVDIMM-P(100)에서 상당한 레이턴시를 발생시킬 수 있다(예를 들어, 메모리 컨트롤러(130)는, 스캔이 완료될 때까지, 활성화를 막거나 대기할 수 있다. 따라서, 수신될 수 있고 메모리 컨트롤러(130)의 커맨드 큐(queue)에서 대기할 수 있는 다음 커맨드들을 수행하기 위한 레이턴시를 증가시킬 수 있다).
이와 같이 본 발명의 실시 예들은, 예를 들어, 1로 설정된 퍼시스트 비트를 가지는 PWRITE 커맨드 또는 특정 WGID에 대한 FLUSH 커맨드에 응답하여 불휘발성 메모리(120)로 플러시되는 휘발성 메모리(110)의 엔트리들을 식별하는 오버헤드를 감소시키기 위한 시스템 및 방법과 관련된다. 이는, 불휘발성 메모리(120)로 쓰기 그룹들을 플러시하기 위해 필요한 시간을 감소시킴으로써, NVDIMM-P(100)의 응답 속도를 충분하게 향상시킨다. 이는 데이터의 플러시를 가속화함으로써 처리량을 향상시킬 수 있고, 커맨드 큐에서 다음 커맨드들의 차단(blocking)을 감소시킨다.
본 발명의 몇몇 실시 예들은 휘발성 메모리(110)로 쓰여진 데이터의 상태를 추적하기 위한 특수한 데이터 구조의 사용과 관련된다. 본 발명의 다른 실시 예들은 상당히 감소된 계산 오버헤드를 가지는 PWRITE 및 FLUSH 커맨드들을 지원하기 위한 데이터 구조에 저장된 데이터를 활용하는 시스템 및 방법과 관련된다. 따라서, PWRITE 및 FLUSH와 같은 NVDIMM-P 커맨드들의 효율적인 실행을 가능하게 한다.
본 발명의 하나의 실시 예에 있어서, 데이터 구조는 제1 쓰기 그룹 테이블(L1WGT) 및 제2 쓰기 그룹 테이블(L2WGT)를 포함한다. 도 3a 및 도 3b는 본 발명의 하나의 실시 예에 따른 제1 쓰기 그룹 테이블(L1WGT)(304) 및 제2 쓰기 그룹 테이블(L2WGT)(306)의 구성도이다. 도 3a 및 도 3b에 도시된 바와 같이, 데이터 구조는 각 WGID에 속하는 캐시 라인들을 추적하기 위해 사용되며, 이에 따라, 임의의 주어진 WGID와 관련된 캐시 라인들의 식별을 단순하게 한다.
제1 쓰기 그룹 테이블(L1WGT)은 메모리 컨트롤러(130)에 있는 정적 랜덤 액세스 메모리(SRAM)(134s)에 저장될 수 있고, WGID(예를 들어, 64 비트 값)으로부터 페이지(page) 엔트리(예를 들어, 제2 쓰기 그룹 테이블(L2WGT)에서의 엔트리들의 비트 맵(map))로 매핑한다. 제1 쓰기 그룹 테이블(L1WGT)은 더 빠른 접근을 위해 SRAM에 기초될 수 있고, 본 발명의 실시 예들은 이에 한정되지 않는다. 제2 쓰기 그룹 테이블(L2WGT)은 L2 읽기/쓰기 캐시(116)와 같이, NVDIMM-P(100)의 휘발성 메모리(110)(또는 메모리 컨트롤러(130)의 별도의 동적 메모리(DRAM))에 저장될 수 있고, 페이지 엔트리로부터 NVDIMM-P(100)의 휘발성 메모리(110) 내부의 캐시 라인 주소(또는 데이터 주소)로 매핑한다. 몇몇 실시 예들에서, 비용 고려 사항들, 성능 요구 사항들 및 용량 요구 사항들(예를 들어, SRAM이 DRAM보다 더 빠르고 더 비싸며, 예를 들어, FPGA 또는 ASIC 내부에서 이용 가능한 메모리의 양이 제한됨)에 기초하여 제2 쓰기 그룹 테이블(L2WGT)은 정적 메모리(SRAM)에 저장된다. 본 발명의 몇몇 실시 예들에 있어서, 제2 쓰기 그룹 테이블(L2WGT)이 메모리 주소들 또는 휘발성 메모리(110)의 캐시 메타데이터 영역(114) 내부의 위치들에 매핑되는 간접지정(indirection)의 추가 단계가 있고, 캐시 메타데이터 영역(114)은 캐시 라인 주소들을 저장한다.
도 3b는 본 발명의 하나의 실시 예에 따른 제1 쓰기 그룹 테이블(L1WGT) 및 제2 쓰기 그룹 테이블(L2WGT)의 상세한 구성도이다. 도 3b에 도시된 예시에서, 제1 쓰기 그룹 테이블(L1WGT)은 64개의 엔트리들을 포함하고, 엔트리는 0부터 63까지(WGID[0], WGID[1], …, WGID[63]) 번호가 붙여진 각 쓰기 그룹 식별자에 대한 것이다. 도 3b의 제1 쓰기 그룹 테이블(L1WGT)에서 각 엔트리는 제2 쓰기 그룹 테이블(L2WGT)의 행들 중 하나와 대응하고 대응하는 제2 쓰기 그룹 테이블(L2WGT)의 행의 내부에 있는 헤드(head) 엔트리(헤드 포인터(pointer))에 대한 포인터 및 테일(tail) 엔트리(테일 포인터)에 대한 포인터를 포함한다(예를 들어, 제1 쓰기 그룹 테이블(L1WGT)의 각 엔트리는 대응하는 제2 쓰기 그룹 테이블(L2WGT)의 행의 엔트리[0]의 메모리 위치에 대응하는 암시적인 오프셋(offset)을 포함할 수 있고 헤드 및 테일의 특정 위치는 포인터 산술 연산으로 계산될 수 있다).
상술한 바와 같이 제2 쓰기 그룹 테이블(L2WGT)은 속도 및 용량과 같은 성능 요구 사항들에 기초하여 SRAM 또는 DRAM에 저장될 수 있다. 몇몇 실시 예들에서, 제2 쓰기 그룹 테이블(L2WGT)은 다수의 링 버퍼들을 포함하며 각각의 링(ring) 버퍼는 대응하는 쓰기 그룹과 관련된다. 도 3b에 도시된 예시에서, 64개의 링 버퍼들이 있고, 각 링 버퍼는 WGID[0] 부터 WGID[63]으로 표시된 64개의 쓰기 그룹들 중 다른 하나에 대응한다. 각 링 버퍼는 다수의 엔트리들을 포함하고(도 3b에 도시된 실시 예에서, 각 링 버퍼는 65개의 엔트리들을 포함한다: 엔트리[0]부터 엔트리[64]), 각 엔트리는 캐시 라인 주소(예를 들어, 28 비트 주소)를 저장한다. 도시된 실시 예에서, 유효한 엔트리들은 헤드 및 테일에 의해 경계가 이루어진다(예를 들어, 헤드로부터 테일-1까지의 범위 밖의 엔트리들은 유효하지 않은 것으로 간주됨).
예를 들어, 도 3b에 도시된 제0 쓰기 그룹(WGID[0])을 고려하면, 제1 쓰기 그룹 테이블(L1WGT)은 1의 헤드 포인터 및 3의 테일 포인터를 저장하며, 이는 링 버퍼에서 엔트리들은 엔트리[1]에서 시작하고 엔트리[3]에서 종료함을 나타낸다. 대응하는 제2 쓰기 그룹 테이블(L2WGT)의 행을 고려하면, 엔트리[1]에서 헤드 엔트리는 0x0000000 캐시 라인 주소를 저장하고, 엔트리[2]에서의 다음 엔트리는 0x0000001 캐시 라인 주소를 저장하고 엔트리[3]에서의 다음 엔트리는 링 버퍼의 테일이다.
본 발명의 다른 실시 예에서, 제2 쓰기 그룹 테이블(L2WGT)는 헤드 엔트리가 항상 제0번째 요소(예를 들어, 엔트리[0])이고 제1 쓰기 그룹 테이블(L1WGT)은 테일의 위치만 저장하는 어레이(array)를 이용하여 구현될 수 있다.
본 발명이 64개의 쓰기 그룹들(예를 들어, 64개의 WGID들)을 포함하는 실시 예에 대하여 설명되지만, 본 발명의 실시 예들은 이에 한정되지 않으며 64개의 쓰기 그룹들보다 적거나 64개의 쓰기 그룹들보다 많은 것으로 구현될 수 있다. 예를 들어, 본 발명의 몇몇 실시 예들은 255개의 쓰기 그룹들 또는 256개의 쓰기 그룹들을 포함할 수 있다.
엔트리들의 상태에 대한 정보 저장
호스트 프로세서(200)가 휘발성 메모리(110)로부터 불휘발성 메모리(120)로 캐시 라인을 플러시하기 위해 NVDIMM-P로 커맨드를 전달하면, 그러나 NVDIMM-P(100)는 호스트 프로세서(200)에 알리지 않고 불휘발성 메모리(120)로 캐시 라인을 이미 썼다면(예를 들어, 예를 들어, 캐시가 가득 찬 경우 캐시 축출로 인한), 캐시 라인을 플러싱 하는 것은 불필요할 수 있다. 이것이 잘못된 결과를 초래하지 않을 수 있지만, 무관한 동작은 성능을 저하시킬 수 있고 무관한 쓰기는 불휘발성 메모리(120)의 수명을 감소시킬 수 있다(예를 들어, 플래시 메모리의 제한된 쓰기 싸이클(cycle)의 횟수를 불필요하게 소모함으로써). 이와 같이, 본 발명의 몇몇 실시 예들에서, 메모리 컨트롤러(130)는 추가 쓰기가 필요한지 여부를 판단하기 위해 추가 메타데이터를 저장하고, 이 데이터는 메모리 컨트롤러(130)가 불휘발성 메모리(120)로 이미 쓰여진 데이터를 식별하도록 한다. 따라서, 메모리 컨트롤러(130)는 불휘발성 메모리(120)로 불필요한 쓰기를 수행하는 것을 방지하고, 불휘발성 메모리(120)의 수명을 증가시킨다.
본 발명의 몇몇 실시 예에서, 메모리 컨트롤러(130)는 휘발성 메모리(110)의 캐시 메타데이터(114)의 각 엔트리에 대한 "퍼시스트 상태"를 저장한다. 퍼시스트 상태는 대응하는 캐시 라인이 아직 퍼시스턴트로 만들어진 것은 아니지만(예를 들어, 불휘발성 메모리(120)로 플러시함으로써), 퍼시스턴트로서 표시되어 있는지를 나타낸다(예를 들어, PWRITE 커맨드에 의해). 예를 들어, 이것은 0으로 설정된 퍼시스트를 포함하는 PWRITE 커맨드에 의해 쓰여진 데이터에 대응한다.
표 1은 휘발성 메모리(110)에 저장된 다양하게 가능한 데이터의 상태들을 나타내고 메모리 컨트롤러(130)가 캐시 축출(WRITE 또는 FLUSH 커맨드에 의한 것이 아닌) 및 PWRITE 또는 FLUSH 커맨드들에 응답하여 휘발성 메모리(110)로부터 불휘발성 메모리(120)(라이트백을 수행)로 데이터를 쓰는지 여부를 나타낸다.
상태 축출(PWRITE/FLUSH에 의한 것이 아닌) PWRITE/FLUSH
유효하지 않은(Invalid) 라이트백하지 않음 라이트백하지 않음
클린(Clean) 라이트백하지 않음 라이트백하지 않음
더티(Dirty) 불휘발성 메모리로 라이트백 라이트백하지 않음
퍼시스트(Persist) 불휘발성 메모리로 라이트백 불휘발성 메모리로 라이트백
표 1과 같이, 캐시 라인이 "유효하지 않은(invalid)" 상태인 경우, 메모리 컨트롤러(130)가 불휘발성 메모리(120)로 유효하지 않은 데이터를 쓸 필요가 없으므로, 축출 또는 PWRITE 또는 FLUSH에 응답하여 불휘발성 메모리(120)로 라이트백하지 않는다.
상태가 "클린(clean)"인 경우, 휘발성 메모리(110)의 데이터는 대응하는 불휘발성 메모리(120)의 데이터와 일치한다(즉, 동일한 데이터). 이와 같이, 메모리 컨트롤러(130)는 휘발성 메모리(110)로부터 불휘발성 메모리(120)로 데이터를 라이트백할 필요가 없다.
상태가 "더티(dirty)"인 경우, 휘발성 메모리(110)의 데이터는 변경되었고 불휘발성 메모리(120)와 불일치한다. 이와 같이, 이 데이터가 캐시(휘발성 메모리(110))로부터 축출된 경우, 메모리 컨트롤러(130)는 데이터 손실을 방지하기 위해 불휘발성 메모리(120)로 데이터를 쓴다. 그러나, 이 데이터가 퍼시스턴트로서 표시되지 않았기 때문에, PWRITE 또는 FLUSH 커맨드에 응답하여 데이터를 라이트백하지 않는다.
상태가 "퍼시스트(persist)"인 경우, 데이터는 캐시 축출인 경우(그렇지 않으면 퍼시스트된 데이터가 손실될 수 있으므로) 및 PWRITE 또는 FLUSH 커맨드인 경우에 불휘발성 메모리(120)로 쓰여진다. 퍼시스턴트로서 표시된 데이터가 불휘발성 메모리(120)로 쓰여진 후에, 다음 PWRITE 또는 FLUSH 커맨드에 의해 데이터가 다시 라이트백되지 않도록 데이터는 메타데이터에서 "클린(clean)" 상태로 설정될 수 있다.
위의 표 1에서 도시된 네 개의 다른 상태들이 있기 때문에, 몇몇 실시 예들에서 메모리 컨트롤러(130)는 예를 들어, 세 개의 비트들을 사용하여 네 개의 상태들(유효하지 않은, 클린, 더티, 퍼시스트)을 추적할 수 있다. 표 2는 다른 상태들의 부호화를 나타내고, 이들 상태들은 본 발명의 하나의 실시 예에 따라, L2 읽기/쓰기 캐시(116) 및 L3 쓰기 버퍼(118)를 위한 캐시 메타데이터(114) 내부에 저장될 수 있다.'
읽기/쓰기 캐시(RWC) 쓰기 버퍼(WB)
상태 유효 비트 더티 비트 퍼시스트
비트
유효 비트[32] 더티 비트 퍼시스트 비트
유효하지 않은 0 X X 모두 0 X X
클린 1 0 0 모두 1 0 0
더티(더티이지만 퍼시스트가 아닌) 1 1 0 일부 0이 아님 1 0
퍼시스트(더티이면서 퍼시스트) 1 1 1 일부 0이 아님 1 1
표 2에 도시된 바와 같이, 네 개의 상태들은 하나 이상의 "유효" 비트들, "더티" 비트, 및 "퍼시스트" 비트의 조합을 사용하여 나타낼 수 있다. 예를 들어, 읽기/쓰기 캐시(RWC)의 경우에서 하나의 유효 비트, 하나의 더티 비트 [유효, 더티], 및 하나의 퍼시스트 비트는 네 개의 상태들을 나타낼 수 있다: [0, X, X]는 "유효하지 않은" 상태("X"는 값이 무시될 수 있다는 것을 나타내고, 예를 들어, 0 또는 1, 즉, 유효 비트가 0인 것은 상태가 "유효하지 않다"는 것을 나타내기에 충분함)를 나타내고, [1, 0, 0]은 "클린" 상태를 나타내고, [1, 1, 0]은 "더티"이지만 "퍼시스트"가 아닌 상태를 나타내고, [0, 1, 1]은 "퍼시스트" 또는 "더티 및 퍼시스트" 상태를 나타낸다.
유사하게, 쓰기 버퍼(WB)의 경우, 상태는 다수의 유효 비트들(예를 들어, 32 비트들), 더티 비트, 퍼시스트 비트로부터 유추될 수 있다. 모든 유효 비트들이 0인 경우, 데이터는 "유효하지 않은" 상태이다. 모든 유효 비트들이 1이고, 더티 비트가 0이고, 퍼시스트 비트가 0인 경우, 데이터는 "클린" 상태이다. 모든 유효 비트들이 0인 것은 아니고, 더티 비트가 1, 퍼시스트 비트가 0인 경우, 데이터는 "더티" 상태이다, 모든 유효 비트들이 0인 것은 아니고, 더티 비트가 1, 퍼시스트 비트가 1인 경우, 데이터는 "퍼시스트" 상태이다.
상술한 바와 같이, 데이터가 캐시로부터 축출된 후, 예를 들어, 메타데이터의 값들을 적절하게 수정함으로써, 데이터의 상태는 클린으로 변경될 수 있다. 예를 들어, 읽기/쓰기 캐시(116)의 경우, "퍼시스트" 상태로부터 데이터 축출을 수행한 후, 메타데이터 값들은 [0, 1, 1]("퍼시스트" 상태)로부터 [1, 0, 0]("클린" 상태)로 변경될 수 있다.
네 개의 함수들을 이용하여 PWRITE 및 FLUSH 실행하기
본 발명의 실시 예들은 쓰기 그룹 테이블들 및 캐시 라인 메타데이터와 함께 PWRITE 및 FLUSH 커맨드들의 실행을 지원하기 위해 사용되는 네 개의 함수들과 관련된다.
record(wgid, address) - 쓰기 그룹 테이블에 있는 캐시 라인 주소를 기록
flush(wgid) - 특정 WGID와 연관된 캐시 라인들을 플러시
flushPersist() - 모든 퍼시스턴트 캐시 라인들(예를 들어, "퍼시스트 상태"로 설정된 캐시 라인들)을 플러시
flushAll() - 모든 캐시 라인들(예를 들어, 퍼시스턴트 이든 또는 퍼시스턴트가 아니든)을 플러시
도 4는 본 발명의 하나의 실시 예에 따른 제1 쓰기 그룹 테이블 및 제2 쓰기 그룹 테이블에서의 "레코드(record)" 동작에 대한 구성도이다. 특별히, 도 4는 쓰기 그룹 식별자에 대한 WGID[1] 파라미터들 및 주소(캐시 라인 주소)에 대한 0x0000004를 가지는 record(wgid, address) 함수를 호출하는 효과를 도시한다. 도 3b에 도시된 상태와 비교하여 변경된 쓰기 그룹 테이블의 부분들은 어두운 색 또는 검은 색 배경으로 도시된다.
도 5는 본 발명의 하나의 실시 예에 따른 "레코드(record)" 동작(500)의 순서도이다. 도 5는 다양한 동작들이 어떻게 수행될 수 있는지를 나타내는 C와 같은 수도코드(pseudocode)의 라인들을 포함한다.
도 4 및 도 5를 참조하면, 레코드 동작은 쓰기 그룹 ID(wgid) 및 캐시 라인 주소와 함께 호출된다. 502 단계에서, 메모리 컨트롤러는 제1 쓰기 그룹 테이블(L1WGT)으로부터 주어진 wgid에 대응하는 헤드 및 테일 값들을 검색한다. 도 4에 도시된 예에서, WGID[1]에 대한 헤드는 L1WGT의 위치(402)에 저장되고, 테일은 L1WGT의 위치(404)에 저장된다. 도 3b를 참조하면, WGID[1]에 대한 헤드는 0이었고 테일은 1이었다.
504 단계에서, 메모리 컨트롤러(130)는 주어진 쓰기 그룹 ID와 관련된 버퍼가 가득 찼는지 여부를 판단한다. 예를 들어, 테일의 위치가 헤드의 위치 바로 전이면, 링 버퍼는 가득 찼다고 판단될 수 있다(그리고 (tail+1) % ring_buf_size == head에 의해 계산될 수 있음).
버퍼가 가득 찼다면, 506 단계에서 메모리 컨트롤러(130)는 레코드 동작이 실패했다는 것을 가리키는 거짓(false)을 반환할 수 있고, 레코드 동작이 종료한다.
버퍼가 가득 차지 않으면, 508 단계에서 메모리 컨트롤러(130)는 주어진 쓰기 그룹에 대응하는 제2 쓰기 그룹 테이블(L2WGT)의 행의 테일 위치에 주어진 주소를 저장한다. 수도코드(pseudocode)에서, 이것은 L2WGT[wgid][tail]=address일 수 있고, 도 4에 도시된 예시에서, 이것은 주소 0x0000004를 WGID[1]에 대응하는 제2 쓰기 그룹 테이블(L2WGT)의 열에 있는 테일(Entry[1])에 대응하는 위치(406)로 쓰는 것과 대응한다.
510 단계에서, 메모리 컨트롤러(130)는 제1 쓰기 그룹 테이블(L1WGT)에 있는 테일의 위치를 증가시킨다. 이와 같이, 도 4의 위치(404)에서 보여지는 테일은 1에서 2로 증가되고, 상응하게, 테일은 이제 도 4의 위치(408)로 도시된 Entry[2]에 위치한다.
512 단계에서, 메모리 컨트롤러(130)는 레코드 동작이 성공했다는 것을 가리키는 참(true)을 반환하고 레코드 동작은 종료한다.
도 6a는 본 발명의 하나의 실시 예에 따른 "플러시(flush)" 동작(600)의 순서도이다. 도 6a에서 도시된 바와 같이, "flush" 함수는 쓰기 그룹 ID(wgid)를 입력으로서 취할 수 있고, 라이트백 동작을 이용하여 wgid와 관련된 모든 캐시 라인들을 플러시하고, 버퍼를 지운다. 더 구체적으로, 하나의 실시 예에서, 610 단계에서, 메모리 컨트롤러(130)는 제1 쓰기 그룹 테이블(L1WGT)에서 주어진 wgid에 대한 헤드 및 테일 값들을 검색한다. 620 단계에서, 메모리 컨트롤러(130)는 헤드부터 테일까지의 값들에 대해 반복하는 루프(loop)를 시작한다. 루프에서 현재의 위치는 "pos"로 표시된다. 상술한 바와 같이, 몇몇 실시 예들에서, 버퍼는 링 버퍼로서 구현될 수 있고, 테일 위치는 헤드보다 작은 값으로 나타낼 수 있다. 이러한 경우, 610 단계에서의 반복은 버퍼 내부의 모든 유효한 값들에 대해 반복하기 위해 이를 고려할 수 있다.
630 단계에서, 메모리 컨트롤러(130)는 버퍼의 현재의 위치(pos)에서 주소에 대한 메타데이터에서 퍼시스트 상태가 설정되었는지 여부를 판단한다. 그렇다면, 640 단계에서 메모리 컨트롤러(130)는 주소에 있는 데이터를 불휘발성 메모리(120)로 쓴다(라이트백 수행). 퍼시스트 상태가 설정되지 않으면(예를 들어, 거짓(false)), 메모리 컨트롤러(130)는 주소에 있는 데이터를 불휘발성 메모리(120)로 쓰지 않는다(예를 들어, 불휘발성 메모리(120)에 데이터가 이미 저장되어 있기 때문에). 어느 경우든지, 660 단계에서, 메모리 컨트롤러는 평가할 버퍼의 위치가 더 많은지를 판단한다(예를 들어, pos가 테일보다 작으면). 그렇다면, 메모리 컨트롤러는 헤드부터 테일까지 다음 위치를 식별하기 위해 620 단계를 계속한다. 모든 위치들이 평가되었다면, 670 단계에서 메모리 컨트롤러는 헤드 및 테일을 동일한 값으로 설정함으로써 버퍼를 비운다(예를 들어, 주어진 쓰기 그룹 ID(wgid)에 대응하는 제1 쓰기 그룹 테이블(L1WGT)의 행에서 헤드 및 테일의 값들을 0으로 설정).
쓰기 그룹 테이블이 각 쓰기 그룹 ID와 연관된 모든 데이터의 메모리 위치들을 저장하므로, 메모리 컨트롤러(130)는 어느 데이터가 주어진 쓰기 그룹에 속하는지를 확인하기 위해 휘발성 메모리(110) 전체를 스캔할 필요가 없다. 대신에, 주어진 쓰기 그룹과 연관된 모든 데이터를 확인하는 것은 단지 쓰기 그룹과 연관된 쓰기 그룹 테이블에 저장된 주소들의 모음을 검색하는 것 만을 포함한다.
도 6b는 본 발명의 하나의 실시 예에 따른 "라이트백" 동작(640)의 순서도이다. 캐시 라인 주소가 주어지면, 메모리 컨트롤러(130)는 데이터를 확인, 확인된 데이터를 불휘발성 메모리(120)로 쓰기, 및 수정된 데이터의 상태와 연관된 메타데이터를 업데이트함으로써 캐시 라인 주소와 연관된 데이터의 라이트백을 수행한다. 도 6b에 도시되지 않더라도, 본 발명의 몇몇 실시 예들에서, 캐시 라인 주소는 메타데이터 주소로 변경되고, 메타데이터 주소에 위치하는 메타데이터는 휘발성 메모리(110)에서 대응하는 데이터의 위치 및 불휘발성 메모리(120)에서 대응하는 위치의 확인뿐만 아니라 캐시 라인과 연관된 메타데이터 상태들(또는 "비트들")(예를 들어, 하나 이상의 유효 상태들, 더티 상태, 및 퍼시스트 상태)을 식별할 수 있다.
642 단계에서, 메모리 컨트롤러(130)는 주소(address)에서 임의의 유효하지 않은 데이터가 있는지 여부를 판단하기 위해 메타데이터를 확인한다(예를 들어, 하나 이상의 유효 비트들 중 어떤 하나라도 거짓(false)으로 설정되었는지 여부). 그렇다면, 644 단계에서 휘발성 메모리(110)에 있는 데이터는 불휘발성 메모리(120)의 데이터로 업데이트된다. 모든 경우에서, 646 단계에서, 메모리 컨트롤러(130)는 주소에 있는 데이터를 휘발성 메모리(110)로부터 불휘발성 메모리(120)로 이동하고, 648 단계에서 메모리 컨트롤러(130)는 유효 상태를 참(예를 들어, 모두 1), 더티 상태를 거짓(예를 들어, 0), 그리고 퍼시스트 상태를 거짓(예를 들어, 0)으로 설정하기 위해 메타데이터를 업데이트한다.
본 발명의 몇몇 실시 예들은, 아래에 더 상세하게 설명된 바와 같이, record(wgid, address) 및 flush(wgid) 함수들에 관하여 위에서 설명된 기법들 및 동작들에 기초하여 PWRITE 및 FLUSH 커맨드들을 실행한다.
도 7은 본 발명의 하나의 실시 예에 따른 PWRITE 커맨드의 실행의 순서도이다. 메모리 컨트롤러(130)가 PWRITE 커맨드를 수신하는 경우, 메모리 컨트롤러(130)가 메타데이터에서 주어진 주소를 "퍼시스트" 상태로 설정하고 record 함수가 PWRITE를 쓰기 그룹 테이블로 기록하기 위해 사용되는 것을 제외하고, 모든 동작들은 보통의 쓰기(WRITE)와 대체로 동일하다. 하나의 실시 예에서, PWRITE 커맨드는 주소(address), 쓰기 그룹 ID(WGID), 퍼시스트(persist) 플래그, 및 몇몇 관련된 데이터(data)를 포함한다. 702 단계에서 메모리 컨트롤러(130)는 데이터를 주소로 쓴다(보통의 XWRITE 커맨드와 같이). 704 단계에서, 메모리 컨트롤러(130)는 주소에 대응하는 메타데이터를 퍼시스트 상태로 설정한다(예를 들어, 퍼시스트 상태를 참(예를 들어, 1)으로 설정하거나, 읽기/쓰기 캐시의 경우, 위의 표 2에 보여지는 바와 같이, 유효 및 더티 상태들을 각각 0 및 1로 설정). 706 단계에서, 메모리 컨트롤러는 위의 도 5에 대하여 설명된 레코드 동작(500)을 이용하여 PWRITE를 쓰기 그룹 테이블(예를 들어, L1WGT 및 L2WGT)로 레코드한다. 708 단계에서, 메모리 컨트롤러(130)는 PWRITE 커맨드에서 퍼시스트 플래그가 설정되었는지 여부를 판단한다. 그렇다면, 710 단계에서 메모리 컨트롤러(130)는 주어진 WGID와 연관된 모든 데이터를 불휘발성 메모리(120)로 플러시하기 위해 위의 도 6a에 대하여 설명된 플러시 동작(600)을 이용한다. 모든 경우, 커맨드는 완료된다(예를 들어, 퍼시스트 플래그가 PWRITE 커맨드에서 설정되지 않았다면, 플러시 동작을 수행할 필요 없다).
도 8은 본 발명의 하나의 실시 예에 따른 FLUSH 커맨드의 실행의 순서도이다. 도 8에 도시된 바와 같이, FLUSH 커맨드로 제공된 파라미터들에 기초하여, FLUSH 커맨드는 특정 쓰기 그룹 ID(wgid)와 연관된 모든 데이터를 플러시할 수 있고, 설정(예를 들어, 참으로 설정)된 퍼시스트 상태를 가진 모든 데이터를 플러시할 수 있고, 또는 휘발성 메모리(110)의 모든 데이터를 플러시할 수 있다. 802 단계에서, 메모리 컨트롤러(130)는, 파라미터들로부터, FLUSH 커맨드가 특정 쓰기 그룹을 플러시하기 위한 것인지, 퍼시스트로 표시된 모든 데이터를 플러시하기 위한 것인지, 또는 휘발성 메모리(110)의 모든 데이터를 플러시하기 위한 것인지를 판단한다.
메모리 컨트롤러(130)가 FLUSH 커맨드를 특정 쓰기 그룹을 플러시하기 위한 것으로 판단한다면, 804 단계에서, 메모리 컨트롤러는 위의 도 6a에 대하여 설명된 flush 함수를 이용하여 특정된 쓰기 그룹을 플러시하고, FLUSH 커맨드의 실행은 완료된다.
메모리 컨트롤러(130)가 FLUSH 커맨드를 퍼시스트로 표시된 데이터를 플러시하는 것으로 판단한다면, 메모리 컨트롤러는 쓰기 그룹 테이블(예를 들어, L1WGT)에서 모든 쓰기 그룹 ID들(wgid_i)에 대해 반복하는 루프를 시작한다. 808 단계에서, 메모리 컨트롤러(130)는 위의 도 6a에서 설명된 flush 함수를 이용하여 현재의 쓰기 그룹(예를 들어, 현재의 wgid_i)를 플러시한다. 810 단계에서, 메모리 컨트롤러(130)는 처리할 쓰기 그룹들이 더 있는지 여부를 판단한다. 그렇다면, 메모리 컨트롤러(130)는 다음 쓰기 그룹들을 선택하기 위해 806 단계를 반복한다. 처리할 쓰기 그룹들이 더 없다면, FLUSH 커맨드의 실행은 완료된다.
메모리 컨트롤러(130)가 FLUSH 커맨드가 휘발성 메모리(110)에 저장된 모든 데이터를 플러시하는 것으로 판단한다면, 812 단계에서, 메모리 컨트롤러(130)는 메타데이터에서 엔트리들에 대해 반복함으로써 모든 휘발성 메모리(110)에 대해 반복하는 루프를 시작한다. 메타데이터의 각 엔트리에 대하여, 메모리 컨트롤러(130)는, 814 단계에서, 대응하는 데이터가 더티인지 여부를 판단한다. 그렇다면, 816 단계에서 메모리 컨트롤러(130)는 위의 도 6b에서 설명한 바와 같이 i번째 데이터에 대해 라이트백 동작(640)을 수행한다. 818 단계에서, 메모리 컨트롤러(130)는 처리할 메타데이터의 엔트리들이 더 있는지를 판단한다. 그렇다면, 메모리 컨트롤러(130)는 다음 엔트리들을 선택하기 위해 812 단계로 돌아가 반복한다. 처리할 엔트리들이 더 없다면(예를 들어, 메타데이터의 모든 엔트리들이 처리된 후), 820 단계에서 메모리 컨트롤러(130)는 이러한 모든 엔트리들을 삭제하기 위해 쓰기 그룹 테이블의 엔트리들에 대해 루프를 시작한다(모든 데이터가 불휘발성 메모리(120)로 플러시되었기 때문에). 특별히, 822 단계에서 메모리 컨트롤러(130)는, 예를 들어, L1WGT의 헤드 및 테일을 동일한 값으로 설정함으로써(예를 들어, 모두 0으로 설정), 현재의 쓰기 그룹에 대한 버퍼를 비운다. 824 단계에서, 메모리 컨트롤러(130)는 비울 쓰기 그룹들이 더 있는지를 판단한다. 그렇다면, 메모리 컨트롤러는 다음 쓰기 그룹을 선택하기 위해 820 단계로 돌아가 반복한다. 엔트리들이 더 없다면(예를 들어, 모든 쓰기 그룹들의 버퍼들이 비워진 후), FLUSH 커맨드 실행은 완료된다.
이와 같이, 본 발명의 실시 예들은 휘발성 메모리(110)에 저장된 데이터의 퍼시스트 상태에 대한 정보를 저장하는 메타데이터 및 각 쓰기 그룹과 연관된 캐시 라인 주소들에 대한 정보를 저장하는 쓰기 그룹 테이블의 사용을 통해 JEDEC NVDIMM-P 스팩의 PWRITE 및 FLUSH 커맨드들의 효율적인 실행을 가능하게 한다. 따라서, 쓰기 그룹과 연관된 데이터의 식별을 포함하는 커맨드들의 실행을 가속화하고 오버헤드를 감소시킨다.
본 발명의 몇몇 실시 예들은 쓰기 그룹 테이블이 일치되지 않게 되는 것을 야기시킬 수 있는 레이스(race) 조건들을 방지하는 것과 관련된다. 몇몇 실시 예들에서, 메모리 컨트롤러(130)는 동시에 다수의 커맨드들을 처리할 수 있다. 그러나, 두 개의 쓰기가 동시에 수행된다면, 쓰기 그룹 테이블들은 쓰기 동작들의 다양한 부분들이 수행되는 경우의 특정 순서에 의존하여 실제 데이터와 일치하지 않는 상태로 유지될 수 있다. 이러한 몇몇 레이스 조건들은 메모리 컨트롤러(130)가 라이트백 동작(640)을 수행하는 동안 휘발성 메모리(110)를 잠금으로써(예를 들어, 쓰기 커맨드들을 대기시킴으로써) 방지될 수 있다. 이와 같이, 본 발명의 몇몇 실시 예들에 있어서, 메모리 컨트롤러(130)는 데이터를 휘발성 메모리(110)로부터 불휘발성 메모리(120)로 이동시키고 데이터가 불휘발성 메모리(120)로 이동되었다는 것을 가리키는 메타데이터를 업데이트하는 라이트백 동작(640)(예를 들어, 도 6b에 도시된 바와 같이)을 수행하는 동안, 메모리 컨트롤러는 라이트백 동작(640)이 완료될 때까지 다른 모든 쓰기 커맨드들(예를 들어, XWRITE 및 PWRITE 커맨드들)을 지연시킨다.
본 발명의 하나의 실시 예에 있어서, 메모리 컨트롤러(130)는 라이트백 동작(640)을 수행하는 동안 다른 커맨드들(예를 들어, 읽기 커맨드들 또는 쓰기가 아닌 다른 커맨드들)에 응답하는 것을 지속할 수 있다. 호스트 프로세서(200)로부터 수신된 모든 커맨드들은 수행될 때까지 메모리 컨트롤러(130)의 커맨드 큐에 저장될 수 있다. 일반적인 조건 하에서, 메모리 컨트롤러(130)는 커맨드 버퍼에서 가장 먼저 수신된 커맨드들을 먼저 실행하는 선입 선출(FIFO) 방식에 따라 커맨드들을 실행할 수 있다. 그러나, 라이트백 동작 동안 휘발성 메모리의 잠금을 실행하기 위해, 메모리 컨트롤러(130)는 라이트백 동작 동안 커맨드 버퍼로부터 오직 쓰기가 아닌 커맨드들(예를 들어, 읽기 커맨드들)만을 실행할 수 있다. 라이트백 동작이 완료된 후, 메모리 컨트롤러(130)는 라이트백 동작 동안 실행되지 않았던 커맨드 버퍼에 있는 임의의 쓰기 커맨드들을 실행할 수 있다.
본 발명의 다른 실시 예들은 특정 쓰기 그룹에 대한 버퍼가 가득 찬 경우(예를 들어, 제2 쓰기 그룹 테이블의 행이 가득 찬 경우) 또는 단편화(예를 들어, 많은 쓰기 그룹들이 사용 중이지만, 제2 쓰기 그룹 테이블(L2WGT)에서 몇몇 쓰기 그룹들은 열린 다수의 슬롯들(slots)을 가짐)로 인하여 쓰기 그룹 테이블이 채워지는 것으로 인하여 특정 쓰기 그룹과 연관된 캐시 라인들을 불휘발성 메모리(120)로 미리 플러시하는 것(또는 가비지 컬렉팅(garbage collecting))과 관련된다. 예를 들어, 이것은 wgid와 연관된 버퍼가 가득 찬 경우 flush(wgid)를 실행함으로써 유발될 수 있다. 더 상세하게는, 본 발명의 몇몇 실시 예들에 있어서, 메모리 컨트롤러(130)는 버퍼가 가득 차자마자 버퍼를 플러시하도록 구성된다. 예를 들어, 엔트리를 버퍼로 추가하고 제1 쓰기 그룹 테이블(L1WGT)이 테일의 새로운 위치를 식별하도록 업데이트한 후에, 테일이 헤드 바로 전에 위치한다면(예를 들어, (tail+1) % ring_buf_size == head), 버퍼는 가득 찬다. 이 경우, 가득 찬 버퍼를 불휘발성 메모리(120)로 플러시하기 위해 flush(wgid) 동작(600)은 즉시 유발될 수 있다. 본 발명의 몇몇 실시 예들에 있어서, 메모리 컨트롤러(130)는 제1 쓰기 그룹 테이블(L1WGT)의 엔트리들에 대해 반복하고 가득 찬 버퍼가 검색되는 경우 관련된 버퍼들을 플러시 함으로써 가득 찬 버퍼들(예를 들어, (tail+1) % ring_buf_size == head)이 있는지 여부를 주기적으로 판단한다. 본 발명의 이러한 실시 예들에 있어서, PWRTIE 커맨드는 메모리 컨트롤러(130)가 새로운 엔트리를 이미 가득 찬 버퍼로 기록하도록 시도하는 것을 야기시킬 수 있다. 그렇다면, 메모리 컨트롤러(130)는 새로운 쓰기를 기록하기 전에 먼저 버퍼를 플러시한다(버퍼를 비우기 위해).
L0WGT를 가지는 쓰기 그룹 테이블을 확장
상술한 실시 예들에 있어서, 각 쓰기 그룹들에 대한 버퍼는 동일한 크기였다. 본 발명의 다른 실시 예에 따르면, 버퍼들의 크기들에 있어서 유연성을 증가시키기 위해, 제2 쓰기 그룹 테이블(L2WGT)의 제0 이상의 행들은 임의의 주어진 쓰기 그룹에 할당될 수 있다. 이와 같이, 특정 쓰기 그룹과 연관된 엔트리들의 개수는 제2 쓰기 그룹 테이블(L2WGT)의 임의의 주어진 행의 개수(예를 들어, 도 3b에 도시된 바와 같이, 65개의 엔트리들)보다 커질 수 있다.
본 발명의 하나의 실시 예는 제0 쓰기 그룹 테이블(L0WGT)을 포함한다. 본 발명의 하나의 실시 예에 있어서, 제0 쓰기 그룹 테이블(L0WGT)은 빠른 접근을 제공하기 위해 정적 랜덤 액세스 메모리(SRAM)에 저장된다. 제0 쓰기 그룹 테이블(L0WGT)은 쓰기 그룹 ID(wgid)에 의해 색인된다. 각 쓰기 그룹 ID는 제1 그리고/또는 제2 쓰기 그룹 테이블들(L1WGT 및 L2WGT)의 어느 행이 해당 WGID와 매핑되는지를 나타내는 비트맵(bitmap)과 연관된다.
도 9는 본 발명의 하나의 실시 예에 따른 제0 쓰기 그룹 테이블(902), 제1 쓰기 그룹 테이블(904) 및 제2 쓰기 그룹 테이블(906)의 구성도이다. 예를 들어, 비트맵에서 각 위치는 제1 및 제2 쓰기 그룹 테이블(L1WGT 및 L2WGT)의 다른 행과 대응한다. 도 9에 도시된 예에 있어서, WGID[0]은 비트맵 64b1100_..._000("_..._"는 0으로 설정된 사이의 비트들을 가리킴)과 연관되고, 제0 및 제1 위치들의 두 개의 1들은 행들 0 및 1이 WGID[0]에 매핑된 것을 나타낸다. 다른 예로서, WGID[1]은 행 2가 WGID[1]에 매핑된 것을 나타내는 비트맵 64b0010_..._0000과 연관된다. 제3 예시로서, WGID[2]는 마지막 행(행 63)이 WGID[2]에 매핑된 것을 나타내는 비트맵 64b0000_..._0001과 연관된다. 제4 예시로서, WGID[63]는 WGID[63]에 매핑된 행들이 없는 것을 나타내는 비트맵 64b0000_..._0000과 연관된다.
본 발명의 하나의 실시 예에 있어서, 제1 및 제2 쓰기 그룹 테이블들의 각 행은 기껏해야 하나의 쓰기 그룹과 매핑된다(예를 들어, 각 행은 정확히 0개 또는 1개 쓰기 그룹에 매핑되고, 1 개 쓰기 그룹을 초과하여 매핑되는 행은 없다). 제1 및 제2 쓰기 그룹 테이블들(L1WGT 및 L2WGT)의 행들 중 사용 중인 행들을 추적하기 위해, 하나의 실시 예에 있어서, 글로벌(global) 비트맵(908)은 대응하는 글로벌 비트맵(908)의 위치들을 1로 설정함으로써 제1 및 제2 쓰기 그룹 테이블들(904 및 906)의 어느 행들이 쓰기 그룹에 할당되었는지를 추적하기 위해 사용된다. 쓰기 그룹에 할당되지 않은 행들은 0으로 설정된 대응하는 글로벌 비트맵의 위치들을 가진다. 도 9에서 도시된 예에 있어서, 제0 및 제1 행들은 WGID[0]에 할당되고, 제2 행은 WGID[1]에 할당되고, 제63 행은 WGID[2]에 할당되기 때문에, 글로벌 비트맵은 64b1110_..._0001 형태를 가지며, 이것은 또한 비트에 대한 배타적 논리합(XOR) 또는 모든 개별 비트맵들의 합이다.
본 발명의 몇몇 실시 예들은 도 9에 도시된 바와 같이 제0 쓰기 그룹 테이블(L0WGT)을 사용하기 위해 조정된 레코드 및 플러시 동작의 수정된 버전과 관련된다.
더 상세하게, 제0 쓰기 그룹 테이블(902)을 포함하는 경우, record 함수는 해당 WGID와 매핑된 링 버퍼들을 검색하기 위해 먼저 제0 쓰기 그룹 테이블(L0WGT)에 접근한다. 이러한 각 링 버퍼의 헤드 및 테일은 이용 가능한 공간을 가지는 버퍼를 찾기 위해 확인될 수 있다. 모든 할당된 버퍼들이 가득 차면, 추가 버퍼는 해당 WGID에 할당될 수 있고(예를 들어, 글로벌 비트맵에서 할당되지 않은 행을 검색함으로써), 해당 WGID와 연관된 비트맵을 포함하는 제0 쓰기 그룹 테이블 및 WGID에 대한 행의 할당을 나타내는 글로벌 비트맵을 업데이트할 수 있다.
도 10은 본 발명의 하나의 실시 예에 따른 제0 쓰기 그룹 테이블, 제1 쓰기 그룹 테이블 및 제2 쓰기 그룹 테이블을 포함하는 시스템에서 "레코드(record)" 동작의 실행의 순서도이다. 도 10에 도시된 바와 같이, 레코드 동작은 파라미터들로서 쓰기 그룹 ID(wgid) 및 주소(address)를 가질 수 있다. 1002 단계에서, 메모리 컨트롤러(130)는 제0 쓰기 그룹 테이블(L0WGT)에서 주어진 wgid에 대응하는 행 비트맵을 검색한다. 1004 단계에서, 메모리 컨트롤러(130)는 비트맵의 0이 아닌 위치들에 의해 식별된 바와 같이, 쓰기 그룹에 할당된 제1 및 제2 쓰기 그룹 테이블들의 행들에 대하여 반복하기 위한 루프를 시작한다. 1006 단계에서, 메모리 컨트롤러(130)는 도 5와 관련하여 위에서 설명된 record 함수(500)와 상당히 동일한, 그러나 쓰기 그룹 대신에 행 숫자를 가지도록 조정된 record 함수를 이용하여 주어진 주소를 할당된 행들의 현재의 행으로 기록하기 위한 시도를 한다. 도 5에 도시된 바와 같이, record 함수(500)는 부울 값(예를 들어, 참 또는 거짓)을 반환하고, 여기서 참은 레코드 동작의 성공을 나타내고 거짓은 레코드 동작의 실패를 나타낸다. 레코드 동작이 성공하면(예를 들어, 주소가 현재의 행에 기록되었다면), 추가 조치는 필요하지 않으며, 메모리 컨트롤러(130)는 1008 단계에서 레코드 동작의 성공을 나타내는 참을 반환한다.
그러나, 레코드 동작이 실패하면(예를 들어, 행이 가득 찼으므로), 메모리 컨트롤러(130)는, 1010 단계에서, 고려할 더 할당된 행들이 있는지 여부를 판단한다. 그렇다면, 메모리 컨트롤러(130)는 다음 행을 선택하고 다시 레코드를 시도하기 위해 1004 단계로 돌아간다. 이와 같이, record 함수(500)는 특정된 쓰기 그룹 식별자(WGID)와 연관된 제2 쓰기 그룹 테이블(L2WGT)의 버퍼들 중 하나가 주어진 주소에 대해 이용 가능한 공간을 갖는지를 판단하고, 버퍼들 중 하나가 이용 가능한 공간을 가진다고 판단한 것에 응답하여, 주어진 주소를 식별된 버퍼로 기록(저장)한다.
그러나, 시도할 더 할당된 행들이 없다면(예를 들어, 할당된 모든 행들이 가득 차거나 할당된 행들이 없다면), 메모리 컨트롤러는 이용 가능한 공간을 가지는 할당된 행들이 없다고 판단한다. 이와 같이, 1012 단계에서, 메모리 컨트롤러(130)는 글로벌 비트맵을 확인함으로써 임의의 할당되지 않은 행들이 있는지 여부를 판단한다. 임의의 할당되지 않은 행들이 없다면, 레코드 동작은 실패하고 1014 단계에서, 메모리 컨트롤러(130)는 거짓을 반환한다. 그러나, 적어도 하나의 이용 가능한 행이 있다면(예를 들어, 글로벌 비트맵에서 0에 의해 식별된 바와 같이, 임의의 쓰기 그룹들에 아직 할당되지 않은 행 또는 버퍼), 1016 단계에서 메모리 컨트롤러(130)는 이러한 이용 가능한 행들의 하나(예를 들어, 가장 낮은 숫자를 갖는 행 또는 버퍼)를 "new_row"로서 선택한다. 1018 단계에서, 메모리 컨트롤러(130)는 선택된 행에 대응하는 비트를 1로 설정함으로써 현재의 쓰기 그룹에 대한 행 비트맵을 업데이트한다. 따라서, 선택된 행("new_row")을 쓰기 그룹에 할당할 수 있다. 1020 단계에서, 메모리 컨트롤러(130)는 선택된 행에 대응하는 글로벌 비트맵의 위치를 1로 업데이트함으로써 선택된 행을 사용 중인 것으로 표시한다. 1022 단계에서, 메모리 컨트롤러(130)는 실질적으로 동일한 record 함수(500)를 사용하여 주소를 선택된 행에 기록하고 결과를 반환한다.
유사하게, 제0 쓰기 그룹 테이블(L0WGT)에 대해 flush(wgid) 함수를 실행하는 경우, 메모리 컨트롤러(130)는 해당 WGID에 할당된 버퍼들을 찾기 위해 먼저 L0WGT에 접근하고 각 값에 대한 라이트백 동작을 수행하기 위해 이러한 버퍼들 각각에 저장된 값들을 반복한다. 또한, 메모리 컨트롤러(130)는 쓰기 그룹들로부터 쓰기 그룹 테이블의 비워진 행들을 할당해제 하기 위해 버퍼들이 할당이 해제되는 경우(예를 들어, 플러시 동작에 의해 버퍼들이 비워지는 경우) 제0 쓰기 그룹 테이블(L0WGT)을 업데이트할 수 있다(예를 들어, 플러시된 WGID에 대한 비트맵과 글로벌 비트맵 사이의 비트에 대한 XOR을 수행하고, 플러시된 WGID에 대한 모든 비트맵의 비트들을 0으로 설정함으로써 업데이트할 수 있음).
도 11은 본 발명의 하나의 실시 예에 따른 제0 쓰기 그룹 테이블, 제1 쓰기 그룹 테이블 및 제2 쓰기 그룹 테이블을 포함하는 시스템에서 "플러시(flush)" 동작의 실행의 순서도이다. 110 단계에서, 메모리 컨트롤러(130)는 제0 쓰기 그룹 테이블(L0WGT)에서 주어진 wgid에 대응하는 행 비트맵을 검색한다. 1104 단계에서, 메모리 컨트롤러(130)는, 비트맵의 0이 아닌 위치들에 의해 식별된 바와 같이, 쓰기 그룹에 할당된 제1 및 제2 쓰기 그룹 테이블들의 행들에 대해 반복하는 루프를 시작한다. 1106 단계에서, 메모리 컨트롤러(130)는 쓰기 그룹에 할당된 현재의 행에 대해 플러시 동작을 수행한다. 플러시 동작은 도 6a에서 도시된 플러시 동작(600)의 약간 수정된 버전이고, 플러시는 파라미터로서 쓰기 그룹 ID보다 행 숫자를 취한다. 1108 단계에서, 메모리 컨트롤러(130)는 처리될 임의의 추가 행들이 있는지 여부를 판단한다. 있다면, 메모리 컨트롤러(130)는 쓰기 그룹에 할당된 다음 행을 선택하기 위해 1104 단계로 돌아간다. 없다면, 메모리 컨트롤러는 현재의 쓰기 그룹으로 이전에 현재의 쓰기 그룹에 할당되었던 행들을 지금은 지금은 이용 가능한 것으로 표시하기 위해 글로벌 비트맵을 업데이트한다. 1112 단계에서, 쓰기 그룹의 플러시가 완료된 이후, 메모리 컨트롤러(130)는 현재의 쓰기 그룹에 할당된 행들이 없음을 나타내기 위해 제0 쓰기 그룹 테이블(L0WGT)에서 현재의 쓰기 그룹의 행 비트맵의 모든 비트들을 0으로 설정한다.
이와 같이, 본 발명의 실시 예들은 특정된 쓰기 그룹을 가지는 NVDIMM-P 모듈로 쓰여진 데이터를 연관짓고, 주어진 특정 쓰기 그룹과 매칭하는 데이터에 대해 모든 휘발성 메모리를 스캔하는 것을 피하고 불휘발성 메모리로 데이터가 이미 쓰여진 경우 불휘발성 메모리로 데이터가 중복하여 플러시되는 것을 피함으로써, 쓰기 그룹에 따라 휘발성 메모리로부터 불휘발성 메모리로 데이터를 플러시하는 성능을 향상시키기 위한 시스템 및 방법과 관련된다.
다른 것으로 정의되지 않는다면, 본 명세서에서 사용된 모든 용어들(기술적 및 과학적 용어들을 포함하는)은 본 발명이 속하는 기술 분야의 통상의 지식을 가진 사람에 의해 일반적으로 이해되는 것과 동일한 의미를 가진다. 일반적으로 사용되는 사전에서 정의된 것과 같은 용어들은 관련된 분야 그리고/또는 본 명세서의 문맥에서의 의미와 일치하는 의미를 가지는 것으로서 해석되어야 하고, 본 명세서에서 명시적으로 정의되지 않는 한, 이상적이거나 지나치게 형식적인 의미에서 해석되어서는 안 된다.
본 발명의 실시 예들이 도시되고 설명되었지만, 다음의 청구항들에 의해 정의된 바와 같이 본 발명의 사상 및 범위를 벗어나지 않는 설명된 실시 예들에 대한 수정 및 변화는 이루어질 수 있다.

Claims (20)

  1. 휘발성 메모리;
    불휘발성 메모리; 및
    메모리 컨트롤러를 포함하고,
    상기 메모리 컨트롤러는,
    호스트 레이어;
    상기 불휘발성 메모리에 연결된 미디어(media) 레이어; 및
    상기 호스트 레이어, 상기 미디어 레이어 및 상기 휘발성 메모리에 연결된 로직 코어를 포함하고,
    상기 로직 코어는 복수의 행들을 포함하는 제1 쓰기 그룹 테이블을 저장하고, 상기 로직 코어는:
    상기 호스트 레이어를 통해 캐시 라인 주소 및 쓰기 그룹 식별자를 포함하는 퍼시스턴트(persistent) 쓰기 커맨드를 수신하고;
    상기 호스트 레이어를 통해 상기 퍼시스턴트 쓰기 커맨드와 연관된 데이터를 수신하고;
    상기 퍼시스턴트 쓰기 커맨드에 응답하여:
    상기 휘발성 메모리의 상기 캐시 라인 주소로 상기 데이터를 쓰고;
    상기 캐시 라인 주소를 제2 쓰기 그룹 테이블에 있는 복수의 버퍼들 중 상기 쓰기 그룹 식별자에 대응하는 선택된 버퍼에 저장하고;
    유효한 엔트리들을 포함하는 상기 선택된 버퍼의 위치들을 식별하기 위해 상기 제1 쓰기 그룹 테이블의 상기 쓰기 그룹 식별자에 대응하는 행을 업데이트하도록 구성되는 메모리 모듈.
  2. 제 1 항에 있어서,
    상기 로직 코어는 복수의 행들을 포함하는 제0 쓰기 그룹 테이블을 더 저장하고,
    상기 제0 쓰기 그룹 테이블의 상기 행들 각각은 대응하는 쓰기 그룹과 연관되고,
    상기 제0 쓰기 그룹 테이블의 상기 행들 각각은 상기 대응하는 쓰기 그룹과 연관된 상기 제1 쓰기 그룹 테이블 및 상기 제2 쓰기 그룹 테이블의 행들을 식별하는 행 비트맵을 포함하는 메모리 모듈.
  3. 제 2 항에 있어서,
    상기 로직 코어는,
    상기 제0 쓰기 그룹 테이블에서, 상기 쓰기 그룹 식별자에 대응하는 행 비트맵을 검색하고, 상기 대응하는 행 비트맵은 상기 쓰기 그룹 식별자와 연관된 상기 제2 쓰기 그룹 테이블의 버퍼들을 식별하고;
    상기 대응하는 행 비트맵에 기초하여, 상기 쓰기 그룹 식별자와 연관된 상기 버퍼들 중 하나의 버퍼가 이용 가능한 공간을 가지는지 여부를 판단하고;
    상기 버퍼들 중 상기 버퍼가 이용 가능한 공간을 가진다고 판단되는 경우, 상기 버퍼를 상기 선택된 버퍼로서 선택하고;
    상기 쓰기 그룹 식별자와 연관된 상기 버퍼들이 이용 가능한 공간을 가지지 않는다고 판단되는 경우,
    상기 제2 쓰기 그룹 테이블에서 이용 가능한 버퍼가 있는지 여부를 판단하고;
    상기 제2 쓰기 그룹 테이블에서 이용 가능한 버퍼가 있다고 판단되는 경우,
    상기 이용 가능한 버퍼를 상기 쓰기 그룹 식별자와 연관짓기 위해 상기 대응하는 행 비트맵을 업데이트하고,
    상기 이용 가능한 버퍼를 상기 선택된 버퍼로서 선택하도록 구성되는 메모리 모듈.
  4. 제 1 항에 있어서,
    상기 퍼시스턴트 쓰기 커맨드는 퍼시스트 플래그(persist flag)를 더 포함하고,
    상기 로직 코어는 상기 퍼시스트 플래그가 설정된 것인지 여부를 판단하고, 상기 퍼시스트 플래그가 설정된 것으로 판단되는 경우:
    상기 쓰기 그룹 식별자와 연관된 상기 제2 쓰기 그룹 테이블에서 하나 이상의 버퍼들을 검색하고, 상기 버퍼들 각각은 하나 이상의 캐시 라인 주소를 저장하고;
    상기 쓰기 그룹 식별자와 연관된 상기 하나 이상의 버퍼들의 상기 하나 이상의 캐시 라인 주소들 각각에 대해, 상기 휘발성 메모리의 상기 캐시 라인 주소에 있는 상기 데이터를 상기 불휘발성 메모리로 쓰도록 구성되는 메모리 모듈.
  5. 제 1 항에 있어서,
    캐시 메타데이터 메모리를 더 포함하고,
    상기 로직 코어는 상기 제2 쓰기 그룹 테이블에 저장된 캐시 라인 주소 각각에 대한 퍼시스트 상태를 상기 캐시 메타데이터 메모리에 저장하도록 구성되는 메모리 모듈.
  6. 제 5 항에 있어서,
    상기 퍼시스턴트 쓰기 커맨드는 퍼시스트 플래그를 더 포함하고,
    상기 로직 코어는 상기 퍼시스트 플래그가 설정된 것인지 여부를 판단하고, 상기 퍼시스트 플래그가 설정된 것으로 판단되는 경우:
    상기 쓰기 그룹 식별자와 연관된 하나 이상의 버퍼들을 검색하고, 상기 버퍼들 각각은 하나 이상의 캐시 라인 주소를 저장하고;
    상기 쓰기 그룹 식별자와 연관된 상기 하나 이상의 버퍼들의 상기 하나 이상의 캐시 라인 주소들 각각에 대해:
    상기 캐시 라인 주소에 대응하는 상기 퍼시스트 상태가 설정된 것인지 여부를 판단하고;
    상기 캐시 라인 주소에 대응하는 상기 퍼시스트 상태가 설정된 것으로 판단되는 경우, 상기 휘발성 메모리의 상기 캐시 라인 주소의 상기 데이터를 상기 불휘발성 메모리로 쓰고;
    상기 캐시 라인 주소에 대응하는 상기 퍼시스트 상태가 설정되지 않은 것으로 판단되는 경우, 상기 캐시 라인 주소의 상기 데이터를 상기 불휘발성 메모리로 쓰지 않도록 구성되는 메모리 모듈.
  7. 제 1 항에 있어서,
    상기 메모리 모듈은 불휘발성 듀얼 인라인 메모리 모듈(NVDIMM; non-volatile dual in-line memory module)인 메모리 모듈.
  8. 휘발성 메모리;
    불휘발성 메모리; 및
    메모리 컨트롤러를 포함하고,
    상기 메모리 컨트롤러는,
    호스트 레이어;
    상기 불휘발성 메모리와 연결된 미디어 레이어; 및
    상기 호스트 레이어, 상기 미디어 레이어 및 상기 휘발성 메모리와 연결된 로직 코어를 포함하고, 상기 로직 코어는 복수의 행들을 포함하는 제1 쓰기 그룹 테이블을 저장하고, 상기 로직 코어는:
    상기 호스트 레이어를 통해 쓰기 그룹 식별자를 포함하는 플러시(flush) 커맨드를 수신하고;
    상기 쓰기 그룹 식별자와 대응하는 상기 제1 쓰기 그룹 테이블의 하나 이상의 행들을 검색하고, 상기 하나 이상의 행들 각각은 제2 쓰기 그룹 테이블의 대응하는 버퍼에 있는 유효한 엔트리들을 식별하는 헤드 포인터(head pointer) 및 테일 포인터(tail pointer)를 포함하고;
    상기 제2 쓰기 그룹 테이블에서 상기 쓰기 그룹 식별자와 연관된 하나 이상의 버퍼들을 검색하고, 상기 하나 이상의 버퍼들 각각은 상기 제1 쓰기 그룹 테이블의 대응하는 행의 상기 헤드 포인터 및 상기 테일 포인터에 의해 식별되는 상기 유효한 엔트리들에 하나 이상의 캐시 라인 주소를 저장하고;
    상기 쓰기 그룹 식별자와 연관된 상기 하나 이상의 버퍼들의 상기 하나 이상의 캐시 라인 주소들 각각에 대해, 상기 휘발성 메모리의 상기 캐시 라인 주소의 데이터를 상기 불휘발성 메모리로 쓰도록 구성되는 메모리 모듈..
  9. 제 8 항에 있어서,
    상기 로직 코어는 상기 대응하는 버퍼를 비우기 위해 상기 쓰기 그룹 식별자에 대응하는 상기 제1 쓰기 그룹 테이블의 상기 행의 상기 헤드 포인터 및 상기 테일 포인터를 동일한 값으로 업데이트하도록 구성되는 메모리 모듈.
  10. 휘발성 메모리;
    불휘발성 메모리; 및
    메모리 컨트롤러를 포함하고,
    상기 메모리 컨트롤러는,
    호스트 레이어;
    상기 불휘발성 메모리와 연결된 미디어 레이어; 및
    상기 호스트 레이어, 상기 미디어 레이어 및 상기 휘발성 메모리와 연결된 로직 코어를 포함하고, 상기 로직 코어는 복수의 행들을 포함하는 제1 쓰기 그룹 테이블을 저장하고, 상기 로직 코어는:
    상기 호스트 레이어를 통해 플러시(flush) 커맨드를 수신하고,
    상기 제1 쓰기 그룹 테이블의 각각의 행에 대해:
    제2 쓰기 그룹 테이블에서 대응하는 버퍼를 검색하고, 상기 제1 쓰기 그룹 테이블의 각각의 행은 상기 제2 쓰기 그룹 테이블의 상기 대응하는 버퍼에 있는 유효한 엔트리들을 식별하는 헤드 포인터 및 테일 포인터를 포함하고;
    상기 대응하는 버퍼의 상기 유효한 엔트리들 각각에 대해, 대응하는 캐시 라인 주소를 검색하고 상기 휘발성 메모리의 상기 캐시 라인 주소의 데이터를 상기 불휘발성 메모리로 쓰고;
    상기 대응하는 버퍼를 비우기 위해 상기 제1 쓰기 그룹 테이블의 상기 행의 상기 헤드 포인터 및 상기 테일 포인터를 동일한 값으로 업데이트하도록 구성되는 메모리 모듈.
  11. 휘발성 메모리, 불휘발성 메모리 및 메모리 컨트롤러를 포함하고, 상기 메모리 컨트롤러는 호스트 레이어, 상기 불휘발성 메모리에 연결된 미디어 레이어 및 상기 호스트 레이어, 상기 미디어 레이어 및 상기 휘발성 메모리에 연결된 로직 코어를 포함하고, 상기 로직 코어는 복수의 행들을 포함하는 제1 쓰기 그룹 테이블을 저장하고, 상기 로직 코어는 상기 휘발성 메모리 및 상기 불휘발성 메모리를 제어하도록 구성되는 메모리 모듈을 동작하는 방법에 있어서,
    상기 메모리 컨트롤러가 캐시 라인 주소 및 쓰기 그룹 식별자를 포함하는 퍼시스턴트(persistent) 쓰기 커맨드를 수신하는 단계;
    상기 메모리 컨트롤러가 상기 퍼시스턴트 쓰기 커맨드에 연관된 데이터를 수신하는 단계; 및
    상기 퍼시스턴트 쓰기 커맨드에 응답하여:
    상기 캐시 라인 주소의 상기 휘발성 메모리로 상기 데이터를 쓰는 단계;
    상기 메모리 컨트롤러가 제2 쓰기 그룹 테이블에 있는 복수의 버퍼들 중 상기 쓰기 그룹 식별자에 대응하는 선택된 버퍼에 상기 캐시 라인 주소를 저장하는 단계;
    상기 메모리 컨트롤러가 유효한 엔트리들을 포함하는 상기 선택된 버퍼의 위치들을 식별하기 위해 상기 제1 쓰기 그룹 테이블의 상기 쓰기 그룹 식별자에 대응하는 행을 업데이트하는 단계를 포함하는 방법.
  12. 제 11 항에 있어서,
    상기 로직 코어는 복수의 행들을 포함하는 제0 쓰기 그룹 테이블을 더 포함하고,
    상기 제0 쓰기 그룹 테이블의 상기 행들 각각은 대응하는 쓰기 그룹과 연관되고,
    상기 제0 쓰기 그룹 테이블의 상기 행들 각각은 행 비트맵을 포함하고, 상기 행 비트맵은 상기 대응하는 쓰기 그룹과 연관된 제1 쓰기 그룹 테이블 및 제2 쓰기 그룹 테이블의 행들을 식별하는 방법.
  13. 제 12 항에 있어서,
    상기 제0 쓰기 그룹 테이블에서, 상기 쓰기 그룹 식별자에 대응하는 행 비트맵을 검색하는 단계; 상기 대응하는 행 비트맵은 상기 쓰기 그룹 식별자와 연관된 상기 제2 쓰기 그룹 테이블의 버퍼들을 식별하고,
    상기 대응하는 행 비트맵에 기초하여 상기 쓰기 그룹 식별자와 연관된 상기 버퍼들 중 하나의 버퍼가 이용 가능한 공간을 가지는지 여부를 판단하는 단계;
    상기 버퍼들 중 상기 버퍼가 이용 가능한 공간을 가지는 것으로 판단되는 경우, 상기 버퍼를 상기 선택된 버퍼로서 선택하는 단계; 및
    상기 버퍼들이 이용 가능한 공간을 가지지 않는 것으로 판단되는 경우,
    상기 제2 쓰기 그룹 테이블에서 이용 가능한 버퍼가 있는지 여부를 판단하는 단계; 및
    상기 제2 쓰기 그룹 테이블에 이용 가능한 버퍼가 있는 것으로 판단되는 경우, 상기 이용 가능한 버퍼를 상기 선택된 버퍼로서 선택하는 단계를 더 포함하는 방법.
  14. 제 11 항에 있어서,
    상기 퍼시스턴트 쓰기 커맨드는 퍼시스트 플래그(persist flag)를 더 포함하고,
    상기 퍼시스트 플래그가 설정된 것인지 여부를 판단하는 단계; 상기 퍼시스트 플래그가 설정된 것으로 판단되는 경우:
    상기 쓰기 그룹 식별자와 연관된 상기 제2 쓰기 그룹 테이블에서 하나 이상의 버퍼들을 검색하는 단계; 및 상기 버퍼들 각각은 하나 이상의 캐시 라인 주소를 저장하고,
    상기 쓰기 그룹 식별자와 연관된 상기 하나 이상의 버퍼들의 상기 하나 이상의 캐시 라인 주소들 각각에 대해, 상기 휘발성 메모리의 상기 캐시 라인 주소의 상기 데이터를 상기 불휘발성 메모리로 쓰는 단계를 더 포함하는 방법.
  15. 제 11 항에 있어서,
    상기 메모리 모듈은 캐시 메타데이터 메모리를 더 포함하고,
    상기 제2 쓰기 그룹 테이블에 저장된 캐시 라인 주소 각각에 대한 퍼시스트 상태를 상기 캐시 메타데이터 메모리에 저장하는 단계를 더 포함하는 방법.
  16. 제 15 항에 있어서,
    상기 퍼시스턴트 쓰기 커맨드는 퍼시스트 플래그를 더 포함하고,
    상기 퍼시스트 플래그가 설정된 것인지 여부를 판단하는 단계; 상기 퍼시스트 플래그가 설정된 것으로 판단되는 경우:
    상기 쓰기 그룹 식별자와 연관된 하나 이상의 버퍼들을 검색하는 단계; 상기 버퍼들 각각은 하나 이상의 캐시 라인 주소를 저장하고,
    상기 쓰기 그룹 식별자와 연관된 상기 하나 이상의 버퍼들의 상기 하나 이상의 캐시 라인 주소들 각각에 대해:
    상기 캐시 라인 주소에 대응하는 상기 퍼시스트 상태가 설정된 것인지를 판단하는 단계;
    상기 캐시 라인 주소에 대응하는 상기 퍼시스트 상태가 설정된 것으로 판단되는 경우, 상기 휘발성 메모리의 상기 캐시 라인 주소에 있는 상기 데이터를 상기 불휘발성 메모리로 쓰는 단계; 및
    상기 캐시 라인 주소에 대응하는 상기 퍼시스트 상태가 설정되지 않은 것으로 판단되는 경우, 상기 캐시 라인 주소에 있는 상기 데이터를 상기 불휘발성 메모리로 쓰는 것을 방지하는 단계를 더 포함하는 방법.
  17. 제 11 항에 있어서,
    상기 메모리 모듈은 불휘발성 듀얼 인라인 메모리 모듈(NVDIMM; non-volatile dual in-line memory module)인 방법.
  18. 휘발성 메모리, 불휘발성 메모리 및 메모리 컨트롤러를 포함하고, 상기 메모리 컨트롤러는 호스트 레이어, 상기 불휘발성 메모리에 연결된 미디어 레이어 및 상기 호스트 레이어, 상기 미디어 레이어 및 상기 휘발성 메모리에 연결된 로직 코어를 포함하고, 상기 로직 코어는 복수의 행들을 포함하는 제1 쓰기 그룹 테이블을 저장하고, 상기 로직 코어는 상기 휘발성 메모리 및 상기 불휘발성 메모리를 제어하도록 구성되는 메모리 모듈을 동작하는 방법에 있어서,
    상기 메모리 컨트롤러가 쓰기 그룹 식별자를 포함하는 플러시(flush) 커맨드를 수신하는 단계;
    상기 쓰기 그룹 식별자에 대응하는 상기 제1 쓰기 그룹 테이블의 하나 이상의 행들을 검색하는 단계; 상기 하나 이상의 행들 각각은 상기 제2 쓰기 그룹 테이블의 대응하는 버퍼에 있는 유효한 엔트리들을 식별하는 헤드 포인터 및 테일 포인터를 포함하고,
    상기 제2 쓰기 그룹 테이블에서 상기 쓰기 그룹 식별자와 연관된 하나 이상의 버퍼들을 검색하는 단계; 상기 하나 이상의 버퍼들 각각은 상기 제1 쓰기 그룹 테이블의 대응하는 행의 상기 헤드 포인터 및 상기 테일 포인터에 의해 식별되는 상기 유효한 엔트리들로 하나 이상의 캐시 라인 주소를 저장하고,
    상기 쓰기 그룹 식별자와 연관된 상기 하나 이상의 버퍼들의 상기 하나 이상의 캐시 라인 주소들 각각에 대해, 상기 휘발성 메모리의 상기 캐시 라인 주소에 있는 데이터를 상기 불휘발성 메모리로 쓰는 단계를 포함하는 방법.
  19. 제 18 항에 있어서,
    상기 대응하는 버퍼를 비우기 위해 상기 쓰기 그룹 식별자에 대응하는 상기 제1 쓰기 그룹 테이블의 상기 행의 상기 헤드 포인터 및 상기 테일 포인터를 동일한 값으로 업데이트하는 단계를 더 포함하는 방법.
  20. 휘발성 메모리, 불휘발성 메모리 및 메모리 컨트롤러를 포함하고, 상기 메모리 컨트롤러는 호스트 레이어, 상기 불휘발성 메모리에 연결된 미디어 레이어 및 상기 호스트 레이어, 상기 미디어 레이어 및 상기 휘발성 메모리에 연결된 로직 코어를 포함하고, 상기 로직 코어는 복수의 행들을 포함하는 제1 쓰기 그룹 테이블을 저장하고, 상기 로직 코어는 상기 휘발성 메모리 및 상기 불휘발성 메모리를 제어하도록 구성되는 메모리 모듈을 동작하는 방법에 있어서,
    상기 메모리 컨트롤러가 플러시(flush) 커맨드를 수신하는 단계;
    상기 제1 쓰기 그룹 테이블의 각 행에 대해:
    제2 쓰기 그룹 테이블에 있는 대응하는 버퍼를 검색하는 단계; 상기 제1 쓰기 그룹 테이블의 각 행은 상기 제2 쓰기 그룹 테이블의 상기 대응하는 버퍼에 있는 유효한 엔트리들을 식별하는 헤드 포인터 및 테일 포인터를 포함하고,
    상기 대응하는 버퍼의 상기 유효한 엔트리들 각각에 대해, 대응하는 캐시 라인 주소를 검색하고 상기 휘발성 메모리의 상기 캐시 라인 주소에 있는 데이터를 상기 불휘발성 메모리로 쓰는 단계; 및
    상기 대응하는 버퍼를 비우기 위해 상기 제1 쓰기 그룹 테이블의 상기 행의 상기 헤드 포인터 및 상기 테일 포인터를 동일한 값으로 업데이트하는 단계를 포함하는 방법.
KR1020180004966A 2017-05-09 2018-01-15 하이브리드 메모리에서 쓰기 및 플러시 지원을 위한 시스템 및 방법 KR102506392B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201762503835P 2017-05-09 2017-05-09
US62/503,835 2017-05-09
US15/669,851 2017-08-04
US15/669,851 US11175853B2 (en) 2017-05-09 2017-08-04 Systems and methods for write and flush support in hybrid memory

Publications (2)

Publication Number Publication Date
KR20180123625A true KR20180123625A (ko) 2018-11-19
KR102506392B1 KR102506392B1 (ko) 2023-03-07

Family

ID=64096702

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180004966A KR102506392B1 (ko) 2017-05-09 2018-01-15 하이브리드 메모리에서 쓰기 및 플러시 지원을 위한 시스템 및 방법

Country Status (5)

Country Link
US (1) US11175853B2 (ko)
JP (1) JP7115899B2 (ko)
KR (1) KR102506392B1 (ko)
CN (1) CN108874701B (ko)
TW (1) TWI771387B (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021085717A1 (ko) * 2019-11-01 2021-05-06 연세대학교 산학협력단 비휘발성 메모리를 이용한 로그 구조 병합 트리 기반의 데이터 베이스의 데이터 처리 방법
KR20210133675A (ko) * 2020-04-29 2021-11-08 한국전자통신연구원 컴퓨팅 시스템 및 그 동작 방법

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10216685B1 (en) * 2017-07-19 2019-02-26 Agiga Tech Inc. Memory modules with nonvolatile storage and rapid, sustained transfer rates
US11194524B2 (en) * 2017-09-15 2021-12-07 Qualcomm Incorporated Apparatus and method for performing persistent write operations using a persistent write command
US10996888B2 (en) * 2017-10-31 2021-05-04 Qualcomm Incorporated Write credits management for non-volatile memory
KR102495539B1 (ko) * 2018-07-16 2023-02-06 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작방법
US10573391B1 (en) * 2018-12-03 2020-02-25 Micron Technology, Inc. Enhanced flush transfer efficiency via flush prediction
KR20200074464A (ko) * 2018-12-17 2020-06-25 에스케이하이닉스 주식회사 데이터 저장 장치 및 동작 방법, 이를 포함하는 스토리지 시스템
US10521383B1 (en) * 2018-12-17 2019-12-31 Micron Technology, Inc. Handling operation collisions in a non-volatile memory
CN111352865B (zh) * 2018-12-24 2022-05-24 北京忆芯科技有限公司 存储控制器的写缓存
US10936496B2 (en) 2019-06-07 2021-03-02 Micron Technology, Inc. Managing collisions in a non-volatile memory system with a coherency checker
US11074181B2 (en) * 2019-07-01 2021-07-27 Vmware, Inc. Dirty data tracking in persistent memory systems
US10846222B1 (en) 2019-07-01 2020-11-24 Vmware, Inc. Dirty data tracking in persistent memory systems
US11526299B2 (en) * 2019-12-19 2022-12-13 Micron Technology, Inc. Elastic buffer for media management of a memory sub-system
KR20210097010A (ko) * 2020-01-29 2021-08-06 삼성전자주식회사 키-값 스토리지 장치들에 대한 입출력 성능을 향상을 위한 키 값 객체 입출력들 그룹화
CN111324306B (zh) * 2020-02-16 2021-04-20 西安奥卡云数据科技有限公司 一种基于nvdimm的数据分类缓存分配方法
CN111753337B (zh) * 2020-07-02 2023-02-21 上海电器科学研究所(集团)有限公司 一种储能电池管理系统意外断电soc处理方法
WO2022183308A1 (en) * 2021-03-01 2022-09-09 Micron Technology, Inc. Two-stage buffer operations supporting write commands
CN113721839B (zh) * 2021-07-23 2024-04-19 阿里巴巴达摩院(杭州)科技有限公司 用于处理图数据的计算系统和存储分层方法
US11687463B2 (en) * 2021-10-29 2023-06-27 Dell Products L.P. Management of flushing working set based on barrier in page descriptor ring
US20230251963A1 (en) * 2022-02-04 2023-08-10 National Technology & Engineering Solutions Of Sandia, Llc Architectural support for persistent applications
US11966590B2 (en) 2022-02-25 2024-04-23 Samsung Electronics Co., Ltd. Persistent memory with cache coherent interconnect interface

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110055458A1 (en) * 2009-09-03 2011-03-03 248 Solid State, Inc. Page based management of flash storage
KR20170026746A (ko) * 2015-08-27 2017-03-09 삼성전자주식회사 메모리 모듈의 동작 방법, 및 메모리 모듈을 제어하는 프로세서의 동작 방법, 및 사용자 시스템

Family Cites Families (20)

* 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
US7930513B2 (en) 2006-11-04 2011-04-19 Virident Systems Inc. Writing to asymmetric memory
US9223642B2 (en) 2013-03-15 2015-12-29 Super Talent Technology, Corp. Green NAND device (GND) driver with DRAM data persistence for enhanced flash endurance and performance
US8700840B2 (en) 2009-01-05 2014-04-15 SanDisk Technologies, Inc. Nonvolatile memory with write cache having flush/eviction methods
US8219776B2 (en) * 2009-09-23 2012-07-10 Lsi Corporation Logical-to-physical address translation for solid state disks
CN102576333B (zh) * 2009-10-05 2016-01-13 马维尔国际贸易有限公司 非易失性存储器中的数据高速缓存
JP2011154547A (ja) * 2010-01-27 2011-08-11 Toshiba Corp メモリ管理装置及びメモリ管理方法
DE112012002622B4 (de) * 2011-06-24 2017-01-26 International Business Machines Corporation Aufzeichnungseinheit für lineare Aufzeichnung zum Ausführen optimalen Schreibens beim Empfangen einer Reihe von Befehlen, darunter gemischte Lese- und Schreibbefehle, sowie Verfahren und Programm für dessen Ausführung
CN107608910B (zh) 2011-09-30 2021-07-02 英特尔公司 用于实现具有不同操作模式的多级存储器分级结构的设备和方法
CN107368433B (zh) 2011-12-20 2021-06-22 英特尔公司 2级存储器分级结构中的存储器侧高速缓存的动态部分断电
BR112014013606B1 (pt) * 2011-12-28 2021-11-03 Intel Corporation Método, dispositivo e sistema para distribuir armazenamentos de dados entre memória volátil e memória não volátil
CN104011691B (zh) 2011-12-29 2016-12-14 英特尔公司 非易失性ram盘
US9552176B2 (en) 2013-04-12 2017-01-24 Microsoft Technology Licensing, Llc Block storage using a hybrid memory device
US9129674B2 (en) * 2013-06-27 2015-09-08 Intel Corporation Hybrid memory device
US10191822B2 (en) 2014-02-20 2019-01-29 Rambus Inc. High performance persistent memory
US9916185B2 (en) * 2014-03-18 2018-03-13 International Business Machines Corporation Managing processing associated with selected architectural facilities
US9880754B2 (en) 2014-07-09 2018-01-30 Dell Products, Lp System and method for enabling transportability of a non volatile dual inline memory module
US10078448B2 (en) 2015-07-08 2018-09-18 Samsung Electronics Co., Ltd. Electronic devices and memory management methods thereof
JP6479608B2 (ja) * 2015-08-28 2019-03-06 東芝メモリ株式会社 メモリ装置およびメモリ制御方法
CN105468539B (zh) * 2015-11-19 2018-10-23 上海新储集成电路有限公司 一种混合内存写操作的实现方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110055458A1 (en) * 2009-09-03 2011-03-03 248 Solid State, Inc. Page based management of flash storage
KR20170026746A (ko) * 2015-08-27 2017-03-09 삼성전자주식회사 메모리 모듈의 동작 방법, 및 메모리 모듈을 제어하는 프로세서의 동작 방법, 및 사용자 시스템

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021085717A1 (ko) * 2019-11-01 2021-05-06 연세대학교 산학협력단 비휘발성 메모리를 이용한 로그 구조 병합 트리 기반의 데이터 베이스의 데이터 처리 방법
KR20210133675A (ko) * 2020-04-29 2021-11-08 한국전자통신연구원 컴퓨팅 시스템 및 그 동작 방법

Also Published As

Publication number Publication date
CN108874701B (zh) 2023-04-28
JP2018190412A (ja) 2018-11-29
KR102506392B1 (ko) 2023-03-07
TW201903612A (zh) 2019-01-16
JP7115899B2 (ja) 2022-08-09
US20180329651A1 (en) 2018-11-15
US11175853B2 (en) 2021-11-16
TWI771387B (zh) 2022-07-21
CN108874701A (zh) 2018-11-23

Similar Documents

Publication Publication Date Title
KR102506392B1 (ko) 하이브리드 메모리에서 쓰기 및 플러시 지원을 위한 시스템 및 방법
US11055230B2 (en) Logical to physical mapping
JP6832187B2 (ja) データストレージサブシステムにおけるキャッシングのための方法およびシステム
US8688894B2 (en) Page based management of flash storage
US6745283B1 (en) Disk drive for dynamically allocating memory accessed concurrently by a host interface and a disk interface to facilitate large host commands
US9836403B2 (en) Dynamic cache allocation policy adaptation in a data processing apparatus
US6339813B1 (en) Memory system for permitting simultaneous processor access to a cache line and sub-cache line sectors fill and writeback to a system memory
US8495301B1 (en) System and method for scatter gather cache processing
US5778430A (en) Method and apparatus for computer disk cache management
US7640395B2 (en) Maintaining write ordering in a system
US7191306B2 (en) Flash memory, and flash memory access method and apparatus
JP4246922B2 (ja) 保護機能付き最近最低使用頻度置換方法
US20060129763A1 (en) Virtual cache for disk cache insertion and eviction policies and recovery from device errors
JPS5845611A (ja) 周辺メモリ・システム
WO2012081731A1 (en) Semiconductor storage device
CN109952565B (zh) 内存访问技术
US10430346B2 (en) DDR storage adapter
JP2022050016A (ja) メモリシステム
TW202217576A (zh) 儲存裝置的動態緩衝區快取
US20080301372A1 (en) Memory access control apparatus and memory access control method
CN113254363A (zh) 具有部分逻辑到物理地址转换表的非易失性存储控制器
US10503651B2 (en) Media cache band cleaning
US11579792B2 (en) Data movement between different cell regions in non-volatile memory
JP2010160544A (ja) キャッシュメモリシステム及びキャッシュメモリの制御方法
JP6027479B2 (ja) 半導体メモリ装置

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
GRNT Written decision to grant