KR20160083926A - 하이브리드 메모리 모듈, 및 그를 동작시키는 시스템 및 방법 - Google Patents

하이브리드 메모리 모듈, 및 그를 동작시키는 시스템 및 방법 Download PDF

Info

Publication number
KR20160083926A
KR20160083926A KR1020167014996A KR20167014996A KR20160083926A KR 20160083926 A KR20160083926 A KR 20160083926A KR 1020167014996 A KR1020167014996 A KR 1020167014996A KR 20167014996 A KR20167014996 A KR 20167014996A KR 20160083926 A KR20160083926 A KR 20160083926A
Authority
KR
South Korea
Prior art keywords
data
memory
volatile memory
controller
module
Prior art date
Application number
KR1020167014996A
Other languages
English (en)
Inventor
현 이
자예쉬 알 바크타
치 셰 천
제프리 씨 솔로몬
마리오 헤수스 마르티네스
하오 레
순 제이 최
Original Assignee
넷리스트 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 넷리스트 인코포레이티드 filed Critical 넷리스트 인코포레이티드
Publication of KR20160083926A publication Critical patent/KR20160083926A/ko

Links

Images

Classifications

    • 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/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0638Combination of memories, e.g. ROM and RAM such as to permit replacement or supplementing of words in one module by words in another module
    • 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/0871Allocation or management of cache space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1004Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • G06F11/108Parity data distribution in semiconductor storages, e.g. in SSD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • 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/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • 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/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2206/00Indexing scheme related to dedicated interfaces for computers
    • G06F2206/10Indexing scheme related to storage interfaces for computers, indexing schema related to group G06F3/06
    • G06F2206/1014One time programmable [OTP] memory, e.g. PROM, WORM
    • 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/1032Reliability improvement, data loss prevention, degraded operation etc
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7208Multiple device management, e.g. distributing data over multiple flash devices
    • 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/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays

Abstract

메모리 모듈은 컴퓨터 시스템에서의 메모리 채널에 커플링되도록 구성되며 컴퓨터 시스템에 대한 메인 메모리로서 기능하는 것이 가능한 휘발성 메모리 서브시스템, 컴퓨터 시스템에 대한 스토리지를 제공하는 비-휘발성 메모리 서브시스템, 및 휘발성 메모리 서브시스템, 비-휘발성 메모리 서브시스템, 및 C/A 버스에 커플링된 모듈 제어기를 포함한다. 모듈 제어기는 휘발성 메모리 서브시스템과 비-휘발성 메모리 서브시스템 사이의 인트라모듈 데이터 전송들을 제어하도록 구성된다. 모듈 제어기는 C/A 버스 상에서 C/A 신호들을 모니터링하고, 인트라-모듈 데이터 전송들이 메모리 제어기에 의한 휘발성 메모리 서브시스템에의 액세스들과 충돌하지 않도록 C/A 신호들에 따라서 인트라-모듈 데이터 전송들을 스케쥴링하도록 더 구성된다.

Description

하이브리드 메모리 모듈, 및 그를 동작시키는 시스템 및 방법{HYBRID MEMORY MODULE AND SYSTEM AND METHOD OF OPERATING THE SAME}
관련 출원들에 대한 상호 참조
본 출원은 "Dynamic Random Access to Non-Volatile Memory"란 발명의 명칭으로 2013년 11월 7일에 출원된, 미국 가특허 출원번호 제 61/901,439호, "Memory Channel Storage"란 발명의 명칭으로 2014년 1월 21일에 출원된 미국 가특허 출원번호 제 61929942호, "Apparatus and Methods for Transferring Storage Content"란 발명의 명칭으로 2014년 8월 22일에 출원된 미국 가특허 출원번호 제 62/041,024호, "Memory Channel Storage"란 발명의 명칭으로 2014년 9월 26일에 출원된 미국 가특허 출원번호 제 62/056,469호, 및 "Hybrid Mobile Memory for Random Access"란 발명의 명칭으로 2014년 10월 22일에 출원된 미국 가특허 출원번호 제 62/067,411호에 대해 우선권을 주장하며, 이의 각각은 본원에 전체적으로 참조로 포함된다. 본 출원은 "High Density DIMMs"란 발명의 명칭으로 2011년 7월 28일에 출원된 미국 가특허 출원번호 제 61/512,871호, 및 "Flash DRAM Hybrid Memory Module"란 발명의 명칭으로 2012년 7월 26일에 출원된 미국 특허출원 번호 제 13/559,476호에 관련되며, 이의 각각은 본원에 전체적으로 참조로 포함된다.
분야
본 개시물은 일반적으로 메모리 모듈들, 좀더 구체적으로는 휘발성 및 비-휘발성 서브시스템들 양자를 가지는 하이브리드 메모리 모듈들, 및 그를 동작시키는 시스템 및 방법에 관한 것이다.
네트워크 서버들, 개인용 컴퓨터들, PDA들, 모바일 폰들, 비디오 게임들, 과학적 기구, 산업 로봇공학, 의료 전자공학, 및 기타 등등과 같은, 컴퓨터 시스템들은 최적의 성능을 위해 그들의 시스템 또는 메인 메모리들의 용량 및 처리량, 및 그들에 액세스하는 속도에 많이 의존한다. 현재, 동적 랜덤-액세스 메모리 (DRAM) 는 시스템 메모리로서 일반적으로 사용된다. DRAM 은 데이터의 각각의 비트를 집적 회로에서의 별개의 커패시터에 저장하는 랜덤-액세스 메모리의 형태이다. 커패시터는 통상적으로 0 및 1 로 불리는, 비트의 2개의 값들을 나타내기 위해 이들 2개의 상태들이 취해지도록, 충전되거나 또는 방전될 수 있다. 커패시터들이 전하를 누설하기 때문에, 커패시터 전하가 주기적으로 리프레시되지 않는 한 결국 정보가 사라진다. 이 리프레시 요구사항 때문에, 그것은 SRAM 및 다른 정적 메모리와는 대조적으로 동적 메모리이다.
DRAM 의 구조적 단순성은 수십억개의 트랜지스터와 커패시터 쌍들이 단일 메모리 칩 상에 넣어질 수 있기 때문에, DRAM 칩들이 아주 높은 밀도들에 도달가능하게 한다. 한편, DRAM 은 휘발성 메모리이다 - 이것은 전원이 제거될 때 그의 데이터를 빨리 상실한다. 전기적으로 소거되고 재프로그래밍될 수 있는 전자 비-휘발성 컴퓨터 저장 매체의 형태인, 플래시 메모리에 비해, DRAM 은 또한 더 비싸다. 예를 들어, 고밀도 DRAM 은 고성능 플래시 디바이스들보다 10배정도 더 많이 비쌀 수 있다. 더욱이, 플래시 칩들은 DRAM 칩들보다 더 높은 밀도를 가질 수 있어, 동일한-사이즈의 메모리 모듈로 하여금 더 큰 메모리 용량을 얻도록 더 많이 패킹가능하게 한다.
플래시 메모리의 2개의 주요 유형들, 즉, NAND 및 NOR 로직 게이트들로 뒤에서 부르는 NAND 유형 및 NOR 유형이 존재한다. NOR 유형은 단일 기계어 (바이트) 가 독립적으로 기록되거나 또는 판독될 수 있도록 허용한다. NAND 유형 플래시 메모리는 일반적으로 전체 디바이스보다 더 작은, 블록들 (또는, 페이지들) 에 기록되고 판독될 수도 있다. NAND 플래시는 또한 감소된 소거 및 기록 시간들을 가지며, 셀 당 더 적은 칩 영역을 요하며, 따라서 NOR 플래시보다 비트 당 더 많은 저장 밀도 및 더 낮은 비용을 가능하게 한다. 더욱이, NAND 플래시는 또한 NOR 플래시의 내구력보다 최대 10배의 내구력을 갖는다. 따라서, NAND 플래시가 NOR 플래시보다 더 널리 사용되고 있다.
그의 이점들에 더해서, 플래시 메모리는 또한 메인 메모리로서 유용하게 하는데 많은 도전들을 제기하는 어떤 한계들을 가진다. 플래시 메모리, 특히 NAND 플래시의 하나의 제한은, 단지 한꺼번에 "블록" 을 소거시킬 수 있다는 점이다. 블록을 소거하는 것은 일반적으로 그 블록에서의 모든 비트들을 1 로 설정한다. 새로 소거된 블록에서 시작하여, 그 블록 내 임의의 로케이션이 바이트 또는 단어로 무작위 액세스 방식으로 한번에 프로그래밍될 수 있다. 그러나, 일단 비트가 0 으로 설정되었으면, 단지 전체 블록을 소거함으로써, 1 로 다시 변경될 수 있다. 다시 말해서, 플래시 메모리는 임의의 랜덤-액세스 재기록 또는 소거 동작들을 제공하지 않는다.
다른 제한은 플래시 메모리가 (P/E 사이클들로서 일반적으로 기록되는) 유한한 개수의 프로그램-소거 사이클들을 가진다는 점이다. 대부분 시중에서 입수가능한 플래시 제품들은 웨어 (wear) 가 저장의 무결성을 악화시키기 시작하기 전에 대략 어떤 개수의 사이클들 (예컨대, 100,000 P/E 사이클들) 을 견디도록 보장된다. 일부 칩 펌웨어 또는 파일 시스템 드라이버들은 기록들을 카운팅하여 기록 동작들을 섹터들 사이에 퍼지게 하기 위해서 블록들을 동적으로 재맵핑함으로써 소위 웨어 레벨링 기법을 수행한다. 휴대형 소비자 디바이스들에 있어, 이들 웨어-아웃 (wear-out) 관리 기법들은 일반적으로 플래시 메모리의 수명을 디바이스 자체의 수명을 넘어서 연장하며, 이들 애플리케이션들에서 일부 데이터 손실이 허용될 수도 있다. 그러나, 고신뢰성 데이터 저장을 위해, 다수의 프로그래밍 사이클들을 겪어야만 할 플래시 메모리를 이용하는 것은 권할 만하지 않다.
도 1 은 어떤 실시형태들에 따른, 컴퓨터 또는 서버 시스템의 블록도이다.
도 2 는 어떤 실시형태들에 따른, 휘발성 메모리 서브시스템, 비-휘발성 메모리 서브시스템 및 모듈 제어기를 가지는 하이브리드 메모리 모듈의 블록도이다.
도 3 은 어떤 실시형태들에 따른, 하이브리드 메모리 모듈에서의 휘발성 메모리 서브시스템의 블록도이다.
도 4 는 어떤 실시형태들에 따른, 하이브리드 메모리 모듈에서의 모듈 제어기의 블록도이다.
도 5 는 어떤 실시형태들에 따른, 컴퓨터 또는 서버 시스템의 소프트웨어 스택의 블록도이다.
도 6 은 어떤 실시형태들에 따른, 하이브리드 메모리 모듈에 의해 지원되는 상이한 데이터 경로들을 예시하는 블록도이다.
도 7a 및 도 7b 는 어떤 실시형태들에 따른, 컴퓨터/서버 시스템에서의 페이지-인 및 페이지-아웃 프로세스들을 각각 예시하는 플로우차트들이다.
도 8 은 어떤 실시형태들에 따른, 데이터 액세스 충돌들을 피하기 위해 정상 메모리 액세스들을 가지는 페이지-인 데이터 흐름의 인터리빙을 예시하는 블록도이다.
도 9 는 메모리 채널 상에서 시스템 메모리 및/또는 스토리지를 제공하기 위해 함께 사용되는 다수의 HVDIMM들을 예시하는 블록도이다.
도 10 은 어떤 실시형태들에 따른, 메모리 연관 테이블을 예시하는 다이어그램이다.
도 11 은 어떤 실시형태들에 따른, 컴퓨터 또는 서버 시스템에서의 메모리 구조를 예시하는 다이어그램이다.
도 12 는 메모리 윈도우 동작 동안 하이브리드 메모리 모듈에서의 메모리 공간들을 예시하는 다이어그램이다.
도 13 은 어떤 실시형태들에 따른, 예시적인 DMA 제어기의 블록도이다.
도 14 는 어떤 실시형태들에 따른, 메모리 윈도우 동작 프로세스들을 예시하는 플로우차트이다.
도 15a 및 도 15b 는 어떤 실시형태들에 따른, 모듈 제어기에 의해 하이브리드 메모리 모듈에서의 메모리 윈도우를 개방하고 폐쇄하도록 실행되는 프로세스들을 각각 예시하는 플로우차트들이다.
도 16 은 추가적인 실시형태들에 따른, 하이브리드 메모리 모듈을 예시하는 블록도이다.
도 17a 및 도 17b 는 어떤 실시형태들에 따른, 데이터를 하이브리드 메모리 모듈에서의 비-휘발성 메모리 서브시스템에 기록하고 그로부터 데이터를 판독하는 RAID 3 프로세스들을 각각 예시하는 플로우차트들이다.
도 18 내지 도 20 은 어떤 실시형태들에 따른, 모듈 제어기에 의해 수행되는 에러 검출/보정 루틴들을 예시하는 블록도들이다.
도 21 내지 도 22 는 종래의 SSD 또는 플래시 동작을 예시한다.
도 23 내지 도 26 은 어떤 실시형태들에 따른, 하이브리드 메모리 모듈에서의 메모리 윈도우 동작들을 예시한다.
도 27 은 어떤 실시형태들에 따른, 라운드-로빈 웨어 레벨링 (round-robin wear leveling) 기법의 단순화된 예를 예시한다.
도 28 은 다른 하이브리드 메모리 모듈 또는 임의의 다른 저장 디바이스들에 그들의 개개의 네트워크 인터페이스 회로들을 통해서 직접 커플링된 하이브리드 메모리 모듈을 예시한다.
도 29 는 개개의 네트워크 인터페이스 회로들을 통해서 인트라넷 네트워크에 직접 커플링되는 인트라넷 네트워크에서 서버 시스템에서의 하나 이상의 하이브리드 메모리 모듈들을 예시한다.
도 1 에 나타낸 바와 같이, 어떤 실시형태들에 따른 컴퓨터 또는 서버 시스템 (컴퓨터 시스템) (100) 은 시스템 버스에 커플링된, 중앙 처리 유닛 (CPU) 또는 프로세서, 메모리 제어기 (MC), 및 하나 이상의 메모리 모듈들을 포함한다. 하나 이상의 메모리 모듈들은 시스템 메모리를 제공하며, 스토리지를 추가로 제공할 수도 있다. 어떤 실시형태들에서, MC 는 CPU 에 통합될 수도 있다. 추가적인 실시형태들에서, 컴퓨터 시스템은 또한 시스템 버스에 또한 커플링된 직접 데이터 관리 제어기 (DMA) 를 포함할 수도 있다. MC 및/또는 DMA 를 가지거나 또는 가지지 않는 CPU, 또는 부분적으로 또는 잠시, 컴퓨터 시스템 (100) 이 이하에서 종종 "시스템 (System)" 또는 "시스템 (system)" 으로서 지칭된다.
어떤 실시형태들에서, 컴퓨터 시스템 (100) 은 네트워크 카드 및 하나 이상의 I/O 디바이스들, 예컨대, 키보드, 모니터, 터치스크린, 마이크로폰, 스피커, 등을 더 포함할 수도 있다. 네트워크 카드는 CPU 에 통합되거나 또는 통합되지 않을 수도 있으며, 컴퓨터 시스템 (100) 과 로컬 및/또는 광역 네트워크들 사이에 네트워크 인터페이스 기능들 (유선 또는 무선) 을 제공한다. 컴퓨터 시스템 (100) 은 노스 브릿지 (north bridge) 를 통해서 시스템 버스에, 그리고, 사우스 브릿지를 통하여 하나 이상의 저장 디바이스들, 예컨대 하드 드라이브, CD/DVD 드라이브, 및 USB 드라이브에 커플링되는 PCI 버스를 더 포함할 수도 있다.
도 2 는 어떤 실시형태들에 따른, 컴퓨터/서버 시스템의 시스템 메모리 및/또는 스토리지를 제공하는데 사용될 수 있는 HypervaultTM 이중-인-라인 메모리 모듈 (HVDIMM) (200) 의 블록도이다. 도 2 에 나타낸 바와 같이, HVDIMM (200) 은 하나 이상의 인쇄 회로 보드들을 포함할 수도 있는 모듈 보드 (201) 상에 탑재된, 휘발성 메모리 서브시스템 (HV-DRAM) (210), 비-휘발성 메모리 서브시스템 (HV-플래시 (220)) (220), 및 모듈 제어 서브시스템 (HV 제어기) (230) 을 포함한다. HVDIMM (200) 은 또한 데이터 버퍼 (HV-DB) 를 포함할 수도 있으며, 또한 네트워크 인터페이스 제어기 (HV-NIC) 를 포함할 수도 있다. 어떤 실시형태에서, HV-DB (240) 는 DRAM 메모리, 예컨대 테라바이트 (terabyte) DRAM 메모리 (TBM) 를 포함한다. HV-DRAM (210) 및 HV 제어기 (230) 는 서로에, 시스템에, 그리고 (이중 화살표 파선들로 표시된 바와 같은) 데이터 신호 라인들 및 (이중 또는 단일-화살표 실선들로 표시된 바와 같은) 제어/어드레스 (C/A) 신호들 라인들을 통해서 HV-플래시 (220) 에 커플링된다. 도 2 에 나타낸 바와 같이, 데이터 신호 라인들 (251, 252, 및 253) 은, HV 제어기 (230) 및 HV-DB (240) 와 함께, HV-DRAM (210) 와 HV-플래시 (220) 사이에 전용 데이터 경로를 형성함으로써, 데이터가 메모리 채널 또는 CPU 를 거치지 않고 휘발성 서브시스템과 비-휘발성 서브시스템 사이에 전송되도록 허용한다. 어떤 실시형태에서, 전용 데이터 경로는 고대역폭 데이터 경로이다.
또한 도 2 에 나타낸 바와 같이, HVDIMM (200) 은 스위치들, 즉, FET-A (예컨대, 필드-효과 트랜지스터 또는 FET 스위치들) 를 더 포함한다. 어떤 실시형태들에서, HVDIMM (200) 에 2개의 스위치들의 세트들, 즉, 데이터 스위치들 및 지령/어드레스 스위치들이 존재한다. 이들 스위치들은 빠른 스위치들이어야 할 필요가 없으며, 그러나 그들은 상대적으로 짧은 입력 대 출력 지연 시간을 지원해야 한다. 어떤 실시형태들에서, 스위치들의 세트들 양쪽에 대한 신호 전파 시간은 지연 시간이 그 시스템으로부터 숨겨질 수 있도록 데이터 기간의 아주 작은 부분 (예컨대, 200-300 ps) 이어야 한다.
도 2 에 나타낸 바와 같이, 시스템으로부터의 데이터는 HV-DRAM (210) 데이터 입력/출력 (I/O) (미도시) 에 직접 접속되지만, 시스템 지령/어드레스 신호들은, HV-DRAM (210) 이 예를 들어, 시스템이 HVDIMM (200) 에서의 메모리 공간들에 액세스하는 정상 동작들 동안 시스템으로부터, 또는 예를 들어, HVDIMM (200) 이 전원 장애 이후 콘텐츠를 HVDRAM 에 백업하거나 또는 전원이 회복된 후 콘텐츠를 DRAM 에 다시 복원하는 백업/복원 동작들 동안 HV 제어기 (230) 로부터, 지령/어드레스를 수신할 수 있도록, FET 스위치들을 통해서 HV-DRAM (210) 에 접속된다. FET 스위치들은 HV 제어기 (230) 에 의해 제어될 수 있다.
어떤 실시형태들에서, HV-플래시 (220) 는 가상 복제에 대한 에러 정정 능력을 향상시킬 뿐만 아니라 빠른 액세스를 지원하도록 파티셔닝된 MLC NAND 플래시를 포함한다. 어떤 실시형태들에서, HV-플래시 (220) 는 예를 들어, 256GB/512GB 의 메인 플래시 및 32GB 의 스크래치 플래시를 포함한다. 메인 플래시는 DRAM 으로의 HVDIMM (200) 상의 직접 데이터 버스를 가지는 대형 스토리지로서 기능할 수 있다. 스크래치 플래시는 아래에서 설명되는 바와 같이 HV-플래시 (220) 에서의 플래시 메모리 셀들의 수명 시간을 연장하는 메커니즘을 촉진한다.
도 3 은 어떤 실시형태들에 따른, HV-DRAM (210) 서브시스템의 블록도이다. 도 3 에 나타낸 바와 같이, HV-DRAM (210) 서브시스템은 DRAM 디바이스들 (310), MC 또는 HV 제어기 (230) 와 인터페이스하기 위한 등록된 제어 디바이스 (RCD) 또는 제어 레지스터 (320), 및 로드-감소 데이터 버퍼들 (LRDB) (330) 을 포함한다. 어떤 실시형태에서, RCD (320) 는 HV-DRAM (210) 이 표준 시스템 메모리 인터페이스와 호환할 수 있도록 JEDEC DDR4 LRDIMM (JEDEC DDR4 LRDIMM (Joint Electron Device Engineering Council Double Data Rate 4 Load Reduction Dual In-Line Memory Module) 표준과 같은 산업 표준에 따른 레지스터인 표준 레지스터일 수 있다. 어떤 실시형태들에서, 본원에 전체적으로 포함되는, 동일인 소유의 미국 특허 제 8,516,185호에서 설명된 데이터 송신 회로들이 LRDB (330) 로서 사용될 수 있다. 도 3 은 LRDB (330) 를 하나의 유닛으로서 나타내지만, 실제는, LRDB (330) 는 미국 특허 제 8,516,185호에서 설명된 바와 같은, 모듈 보드 (201) 에 걸쳐서 분포되고 메모리 디바이스들의 개개의 그룹들에 커플링된 다수의 유닛들을 포함할 수 있다.
어떤 실시형태들에서, HV-DRAM (210) 은 HVDIMM (200) 이 시스템 메모리를 제공하기 위해 사용될 때 HVDIMM (200) 에 메인 메모리 기능들을 제공한다. 어떤 실시형태들에서, HV-DRAM (210) 은 HVDIMM (200) 이 스토리지를 제공하는데 사용될 때 HV-플래시 (220) 에 대한 버퍼 메모리로서 기능한다. 어떤 실시형태들에서, DRAM 으로부터의 캐시-라인-와이드 판독들 (wide reads) 은 플래시에 맵핑된다. 그러나, 표준 DRAM 모듈 (예컨대, JEDEC DDR4 LRDIMM) 과 HV-DRAM (210) 사이에 차이들이 존재한다. 어떤 실시형태들에서, HV-DRAM (210) 는 지령/어드레스 스위치들 (FET-A) 에 더해서, 데이터 스위치들 (FET-D) 을 포함할 수도 있다. 데이터 스위치 FET-D 는 DRAM 데이터 버퍼들 (LR-DB) 과 DRAM 사이에 커플링되며, 한편 지령/어드레스 스위치 FET-A 는 메모리 채널 C/A 버스와 RCD (320) 사이에 커플링된다. FET 스위치들, 즉, FET-A 및 FET-D 는, HVDIMM (200) 을 상이한 동작 모드들 사이에 전이하도록 HV 제어기 (230) 에 의해 제어될 수 있다. 어떤 실시형태들에서, 이들 스위치들, 즉, FET-A 및 FET-D 중 어느 하나 또는 양자가 요구되지 않으며, DRAM, HV 제어기 (230), 및/또는 LRDB (330) 에서의 관련된 I/O들을 트리스테이트 (tristate) 함으로써 상이한 동작의 모드들이 달성될 수 있다.
도 4 는 주문형 집적회로 (ASIC) 디바이스 또는 프로그래밍가능 필드 게이트 어레이 (FPGA) 디바이스를 포함할 수 있는 HV 제어기 (230) 의 블록도이다. 도 4 에 나타낸 바와 같이, HV 제어기 (230) 는 제어 로직 (410), 데이터 버퍼 (420), 로컬 메모리 (430) 및 레지스터들 (440) 을 포함한다. HV 제어기 (230) 는 DRAM 인터페이스 (450), 플래시 인터페이스 (460), 시스템 관리 버스 인터페이스 (470), 및 네트워크 인터페이스 (480) 를 더 포함한다. 어떤 실시형태들에서, HV 제어기 (230) 는 HV-DRAM (210) 과 HV-플래시 (220) 사이의 데이터 전송들을 제어한다. 그것은 로컬 메모리 온칩 메모리 공간에 어드레스 관리 테이블을 유지하고, FET 스위치들을 동작시키고, 그리고 적합한 지령들을 HV-플래시 (220) 및 HV-DRAM (210) 로 그들 간의 데이터 전송들을 위해 발생시킨다.
어떤 실시형태들에서, HV 제어기 (230) 는 또한 아래에서 설명하는 바와 같이, HVDIMM (200) 레벨 불량 (bad) 블록 테이블을 로컬 메모리에 유지하고 스크래치 플래시를 관리한다. 어떤 실시형태들에서, HV 제어기 (230) 는 플래시에 저장된 데이터의 무결성을 보장하기 위해 에러 검출/보정 루틴들을 실행하고, 메인 플래시에서의 프로그램/소거 동작들을 최소화/감소시키기 위해 HV-플래시 (220) 블록 사용을 평균화함으로써 및/또는 스크래치 플래시를 이용함으로써 플래시 수명 연장 동작들을 수행하도록 구성된다.
어떤 실시형태들에서, 제어 로직 (410) 은 로직 회로들을 포함하며, 아래에서 추가로 설명하는 바와 같이, CPU 에 의해 전통적으로 이루어지는 컴퓨팅 작업 중 일부를 오프-로드함으로써, DRAM 메모리 공간을 절감하고 메모리 채널에서의 데이터 트래픽을 감소시키도록, 플래시로부터 DRAM 으로 전송될 데이터를 사전-프로세싱하는 하나 이상의 프로세싱 유닛들을 더 포함할 수도 있다.
어떤 실시형태들에서, HVDIMM (200) 은 전원 장애 이벤트들에 응답하여 데이터를 DRAM 에 백업하도록 동작될 수 있다. HV 제어기 (230) 는 DRAM 에서의 데이터가 플래시로 전송되고 있을 때 DLL-오프 모드에서 동작되도록 HV-DRAM (210) 에 올바른 타이밍들을 제공한다. HV 제어기 (230) 는 또한 백업 및 복원 프로세스들에 대한 적합한 동작 프로시저를 제공한다. FET 스위치들, 즉, FET-A 는, C/A 버스로부터 RCD (320) 및 HV 제어기 (230) 를 분리하고, 그리고 RCD (320) 로 하여금 백업 및 복원 프로세스들 동안 HV 제어기 (230) 로부터 C/A 신호들을 수신가능하도록 구성될 수 있다.
어떤 실시형태들에서, HVDIMM (200) 은 시스템이 예를 들어, I2C 프로토콜 또는 임의의 다른 시스템 제어 버스 인터페이스를 이용하여 시스템 관리 (SM) 버스를 통해서 그에 액세스가능하도록 구성된다. 예를 들어, 시스템은 또한 HV 제어기 (230) 에서의 어떤 레지스터들을 설정함으로써 HV 제어기 (230) 를 구성하기 위해 SM 버스를 이용할 수 있다. HV 제어기 (230) 는 또한 미리 구성된 인터럽트 신호를 이용하여, 또는 HV 제어기 (230) 의 시스템 버스 인터페이스에서의, 또는 DMA 에서의 미리 정의된 상태 레지스터를 업데이트함으로써, SM 버스를 이용하여 어떤 동작이 완료되는 시점 또는 에러가 조우되는 시점을 시스템에 통지할 수 있다.
어떤 실시형태들에서, HV 제어기 (230) 는 또한 HVDIMM (200) 과 로컬 또는 광역 네트워크들에서의 다른 저장 디바이스들 사이의 직접 데이터 전송들을 촉진하도록, HVNIC 와 연계하여 HVDIMM (200) 과 임의의 로컬 또는 광역 네트워크들 사이의 네트워크 인터페이스들을 관리한다. 어떤 실시형태들에서, HV 제어기 (230) 는 네트워크 인터페이스를 포함하며 및/또는 HV-DRAM (210) 및/또는 HV-플래시 (220) 로부터 데이터를 취할 수 있는 네트워크 인터페이스 카드 (HV-NIC) 에 커플링되며, 적합한 소스 및 목적지 어드레스들을 가지는 네트워크 패킷들을 구성한다. 일반적으로, 소스 어드레스는 시스템에 의해 미리 구성된다. 어떤 실시형태들에서, HV-NIC 또는 네트워크 인터페이스 및 HV 제어기 (230) 의 일부 또는 모두 다른 구성요소들이 동일한 ASIC 또는 FPGA 에 내장될 수 있다.
도 1 에 나타낸 하드웨어 구성요소들에 더해서, 컴퓨터 시스템 (100) 은 또한 소프트웨어/펌웨어 구성요소들을 포함한다. 어떤 실시형태들에서, 소프트웨어/펌웨어 구성요소들은 하드웨어 계층 (501) 상의 소프트웨어/펌웨어 계층들 (500) 의 스택으로서 대략 표시될 수 있다. 도 5 에 나타낸 바와 같이, 소프트웨어/펌웨어 계층들의 스택은 운영 시스템 계층 (520) 상에 위치하는 애플리케이션들 계층 (510) 을 포함한다. 애플리케이션들 (510) 은 특정의 태스크들을 수행하는 소프트웨어 프로그램들이다. 운영 시스템 (520) 은 컴퓨터 시스템 (100) 의 하드웨어 및 소프트웨어 리소스들을 관리하고 컴퓨터 시스템 (100) 의 하드웨어 구성요소들과 애플리케이션 프로그램들 (510) 사이에 중재자로서 기능한다.
운영 시스템 (520) 은 다른 소프트웨어 프로그램들 (또는, 프로세스들) 로부터의 입력/출력 요청들을 관리하는 컴퓨터 프로그램들이며, 그리고 그 요청들을 컴퓨터 시스템 (100) 의 CPU 및/또는 다른 하드웨어 구성요소들에 대한 데이터 프로세싱 명령들로 변환하는, 커널 (521) 을 포함한다. 커널은 커널의 서비스들과 경쟁하는 모든 요청들 또는 완료된 I/O 동작들을 처리하는 인트럽트 핸들러, 어느 프로그램들이 커널의 프로세싱 시간을 어떤 순서로 공유하는지를 결정하는 스케쥴러, 및 각각의 프로세스에, 그것이 스케쥴링될 때 컴퓨터의 사용을 실제로 부여하는 감독기 (supervisor) 를 포함할 수 있다. 커널은 또한 메모리 또는 스토리지에서의 운영 시스템의 어드레스 공간들의 관리기를 포함할 수도 있다. 커널의 서비스들은 시스템 콜들로서 종종 지칭되는 규정된 프로그램 인터페이스들의 세트를 통해서 운영 시스템의 다른 부분들에 의해 또는 애플리케이션들에 의해 요청된다.
어떤 실시형태들에서는 어떤 종류의 영구 메모리 (예컨대, 프로그래밍가능 판독 전용 메모리 (PROM), 또는 전기적으로 프로그래밍가능 판독전용 메모리 (EPROM)) 에 저장되는 펌웨어인, 그리고 시스템 하드웨어 구성요소들을 초기화하고 테스트하고 컴퓨터 시스템 (100) 이 부팅될 때 대용량 메모리 디바이스로부터 운영 시스템을 로드하는 프로그램 코드들을 포함하는, 기본적인 입력/출력 시스템 (BIOS) 계층 (530) 이 커널과 하드웨어 계층 사이에 있다. 바이오스 (BIOS) 는 시스템 메모리 및 입출력 디바이스들과 같은 하드웨어 구성요소들과 상호작용하기 위해 애플리케이션 프로그램들 및 운영 시스템들에 일관된 방법을 제공하도록, 하드웨어 구성요소들에 추상화 계층을 추가로 제공할 수도 있다.
어떤 실시형태들에서, 소프트웨어 스택은 예를 들어, 커널에 HV 드라이버 (550) 를 더 포함한다. HV 드라이버 (550) 는 HVDIMM (200) 에의 시스템 액세스를 제어하기 위한 소프트웨어 프로그램이다. 따라서, HVDIMM (200) 은 BIOS 에 대한 임의의 변경들을 요함이 없이 표준 DIMM (예컨대, DDR4 LRDIMM) 처럼 동작할 수 있다. HV 드라이버 (550) 는 CPU 에서의 메모리 공간 (560), 또는 룩업 테이블들 또는 다른 구성 정보를 저장하는데 사용되며 그리고 HV 드라이버 (550) 가 필요에 따라 협의하고 및/또는 업데이트할 수 있는 컴퓨터/서버 시스템에서의 하나 이상의 다른 메모리 디바이스들에 액세스한다. 어떤 실시형태들에서, 드라이버는 시스템 콜들을 인터럽트하여 HV-플래시 (220) 및/또는 HV-DB (240) 에 액세스하고, 시스템 콜들에 응답하여 그리고 그 시스템이 사용하고 있는 메모리 인터페이스 표준 (예컨대, JEDEC DDR4 LRDIMM 표준) 에 따라서, 메모리 제어기에게 제어, 어드레스 및 데이터 신호들을 전송하도록 명령한다. 어떤 실시형태들에서, FET 스위치들, 즉, FET-A 는, RCD (320) 및 HV 제어기 (230) 양쪽으로 하여금 정상 시스템 동작 동안 MC 로부터 C/A 신호들을 수신하도록 구성되며, HV 제어기 (230) 는 메모리 제어기로부터의 C/A 신호들을 모니터링하고 HV-플래시 (220) 및/또는 HV-DB (240) 에 액세스하는 시스템 콜들에 응답하여 편성된 C/A 신호들을 인식하여 처리하도록 구성된다.
예를 들어, HVDIMM (200) 에 의해 지원되는 상이한 데이터 경로들을 예시하는 도 6 에 나타낸 바와 같이. 파선/점선들은 시스템이 표준 메모리 인터페이스를 통해서 HV-DRAM (210) 과의 판독/기록 동작들을 수행하는 정상 시스템 판독/기록 데이터 경로 (610) 를 나타낸다. 점선들은 HVDIMM (200) 이 HV 제어기 (230) 의 제어 하에서, 그리고 예를 들어, 스왑인될 데이터에 대해 메인 메모리에 공간을 형성하도록 데이터를 메인 메모리로부터 스토리지로 이동시키라는 시스템 요청에 응답하여, 데이터를 HV-DRAM (210) 로부터 HV-DB (240) 및/또는 HV 플래시로 전송하는 페이지-아웃 (또는, 스왑-아웃 (swap-out)) 데이터 경로 (620) 를 나타낸다. 파선들 (630) 은 HVDIMM (200) 이 HV 제어기 (230) 의 제어 하에서, 그리고 하나 이상의 소프트웨어 프로그램들에 의한 무작위 액세스를 위해 데이터를 스토리지로부터 메인 메모리로 이동시키라는 시스템 요청에 응답하여, 데이터를 HV-DB (240) 또는 HV-플래시 (220) 로부터 메인 메모리로 전송하는 페이지인 (또는, 스왑-인 (swap-in)) 데이터 경로를 나타낸다.
어떤 실시형태들에서, 메인 메모리에의 정상 시스템 액세스는 HV 드라이버 (550) 또는 HV 제어기 (230) 로부터의 많은 관련 없이, 시스템과 HV-DRAM (210) 사이에 수행된다. 어떤 실시형태들에서, 컴퓨터 시스템 (100) 에서의 메모리 인터페이스들은 대 (per) 지령 핸드쉐이크 제공 없이 슬레이브 인터페이스들이 되도록 설계된다. 따라서, 시스템은 임의의 온-DIMM (인트라모듈) 활동들이 DRAM I/O들을 점유하고 있는지 여부에 관한 지식을 가지고 있지 않다. 예를 들어, DRAM I/O들이 데이터를 메인 메모리와 스토리지 사이에 전송하기 위해 점유중에 있으면, 그리고 시스템 (메모리 제어기) 이 DRAM들이 시스템 지령을 실행할 준비가 되어 있을 것이라는 기대로 데이터 판독 또는 기록 지령을 개시하면, DRAM들은 시스템 판독/기록 동작을 실행하는데 실패할 것이며 시스템은 '메모리 고장' 을 경험할 것이며, 이는 시스템 고장을 초래할 것이다.
어떤 실시형태들에서, 스왑-인 또는 스왑-아웃 동작과 같은 HV-플래시 (220) 또는 HV-DB (240) 를 수반하는 동작들에 대해, HV 드라이버 (550) 및 HV 제어기 (230) 는 메인 메모리에의 정상 시스템 액세스와 충돌을 초래함이 없이 메인 메모리로 또는 그로부터 데이터를 이동시키도록 함께 동작한다. 어떤 실시형태들에서, HV-드라이버는 DRAM (메인 메모리) 과 플래시 (스토리지) 사이에 데이터를 전송하도록 요구할 때 메모리 액세스 요청을 메모리 제어기에 전송하고 그리고 이 요청을 DRAM 및 플래시 어드레스들에 제공한다. 메모리 제어기는 정상 시스템 메모리 액세스 요청들과 HV-드라이버 요청들을 인터리브할 수도 있다.
어떤 실시형태들에서, 데이터를 HV-플래시 (220) 로부터 HV-DRAM (210) 으로 전송하라는 페이지-인 지령을 수신한 후, HV-제어기는 메모리 제어기로부터의 메모리 판독/기록 지령들을 모니터링한다. 기록 지령에 대한 메모리 어드레스가 페이지-인 지령에서의 목표 DRAM 어드레스와 매칭하면, HV-제어기는 시스템으로부터의 기록 데이터를 플래시로부터의 데이터로 대체한다. 한편, 데이터를 HV-DRAM (210) 로부터 HV-플래시 (220) 로 전송하라는 페이지-아웃 지령을 수신한 후, HV-제어기는 메모리 제어기로부터의 메모리 판독/기록 지령을 모니터링한다. 판독 지령에 대한 메모리 어드레스가 페이지-아웃 지령에서의 소스 DRAM 어드레스와 매칭하면, HV-제어기는 DRAM 판독 데이터를 스눕 (snoop) 하고, DRAM 판독 데이터를 플래시로 전송한다.
예를 들어, 도 7a 에 나타낸 바와 같이, 페이지-인 요청이 발해질 때, HV 드라이버는 페이지-인 요청을 인터럽트하고, 스토리지에서의 소스 어드레스 범위 및 메인 메모리에서의 목적지 어드레스를 포함할 수도 있는 페이지-인 요청에 따라서, 페이지-인 지령 및 메모리-맵핑된 I/O (MMIO) 신호 값들을 편성할 것이다. HV 드라이버 (550) 는 메모리 제어기에게 페이지-인 지령을 HVDIMM (200) 으로 발하도록 명령한다. 페이지-인 지령은 표준 기록 지령과 동일한 C/A 신호들의 세트를 이용하며, 그러나 동시에, 이것이 응답할 DERAM 디바이스들 (310) 에 대한 정상 기록 지령이 아니라는 것을 표시하기 위해 하나 이상의 지정된 C/A 신호들 (예컨대, 칩 선택 신호(들)) 이 어서트되거나 또는 디어서트된다. 메모리 제어기는 페이지-인 지령을, 마치 표준 기록 지령인 것처럼 스케쥴링하여 전송할 것이다. HV-DRAM (210) 에서의 RCD (320) 는 이 페이지-인 지령을 인식하도록 구성되며 C/A 신호들을 DERAM 디바이스들 (310) 로 포워딩하지 않을 것이다. 한편, HV 제어기 (230) 는 C/A 신호들을 모니터링하고 있으며 HV-DRAM (210) 과 HV-플래시 (220) 또는 HV-DB (240) 사이의 데이터 전송을 제어함으로써 페이지-인 지령에 따라서 행동할 것이다.
어떤 실시형태들에서, HV 제어기 (230) 는 지령을 페이지-인하는 것에 응답하여, 페이지-인 지령과 연관된 데이터 신호들을 HV 제어기 (230) 로 안내하도록 FET 스위치들, 즉, FET-D 를 설정할 수도 있다. 이들 데이터 신호들은 HV 드라이버 (550) 에 의해 편성된 MMIO 값들을 나타내며, HV-플래시 (220) 에서의 어느 어드레스로부터 데이터를 취할지 및 HV-DRAM (210) 에서의 어느 어드레스들에 데이터를 배치할지와 같은, 스왑-인 (swap-in) 요청에 관련된 추가적인 정보/명령들을 포함한다. 어떤 실시형태들에서, MMIO 신호들을 수신한 후, HV 제어기 (230) 는 요청된 페이지-인 데이터가 HV-DB (240) 에 이미 로드되었는지 여부를 체킹할 수도 있으며, 그렇지 않으면, HV 제어기 (230) 는 HV-플래시 (220) 로부터의 페이지-인 데이터를 판독하고 판독 동작과 기록 동작 사이의 페이지-인 데이터에 대한 임시 스토리지로서 HV 제어기 (230) 에서의 데이터 버퍼 (420) 를 이용하여 HV-DB (240) 로의 페이지-인 데이터를 기록함으로써, HV-플래시 (220) 로부터 HV-DB (240) 로의 데이터 전송을 개시하고 제어할 것이다. 어떤 실시형태들에서, 모든 페이지-인 데이터가 HV-DB (240) 로 전송된 후, HV 제어기 (230) 는 페이지-인 데이터 중 일부를 HV 제어기 (230) 에서의 데이터 버퍼 (420) 에 다시 로드하고, HV-DRAM (210) 이 메모리 제어기에 의한 정상 메모리 동작들을 수행하도록 FET-D 스위치들을 리셋하고, 그리고 데이터를 HV-DRAM (210) 에 기록하라는 메모리 제어기로부터의 지령을 대기할 수도 있다.
어떤 실시형태들에서, HV 드라이버 (550) 는 페이지-인 데이터가 HV-플래시 (220) 로부터 HV-DB (240) 로 전송될 수 있도록 어떤 시간의 양을 대기하도록 구성된다. HV 드라이버 (550) 는 얼마나 많은 데이터가 페이지-인되고 있는지에 기초하여 시간의 양을 결정할 수도 있다. 그 뒤에, HV 드라이버 (550) 는 메모리 제어기에게 더미 기록 지령을 스케쥴링하여 HVDIMM (200) 으로 전송하도록 명령할 것이다. 어떤 실시형태들에서, 더미 기록 지령은 더미 데이터가 뒤따르거나 또는 메모리 제어기로부터의 어떤 데이터도 뒤따르지 않는 것을 제외하고는, 정상 기록 지령과 유사하다. HV 제어기 (230) 는 더미 기록 지령을, 페이지-인 데이터가 배치되어야 하는 동일한 어드레스들에 안내되기 때문에, 인식할 것이다. 이에 응답하여, HV 제어기 (230) 는 FET-D 스위치들을 설정할 것이며 페이지-인 데이터를 DERAM 디바이스들 (310) 에 제공할 것이다. 따라서, 메모리 제어기로부터의 더미 데이터가 무시되거나 또는 폐기된다. 어떤 실시형태들에서, HV 제어기 (230) 는 데이터가 DERAM 디바이스들 (310) 의 CAS 레이턴시 파라미터들에 따라서 DRAM I/O들에 나타나도록, 더미 기록 지령을 수신한 후 어떤 시간 기간, 페이지-인 데이터를 DERAM 디바이스들 (310) 로 출력한다. 더미 기록 지령과 연관된 페이지-인 데이터가 DRAM 에 기록되어진 후, HV 제어기 (230) 는 DRAM 이 정상 시스템 메모리 동작들을 수행하도록 FET-D 스위치들을 리셋할 것이다.
어떤 실시형태들에서, HV 제어기 (230) 는 메모리 제어기로부터의 메모리 지령들을 모니터링하고 그에 따라서 데이터 액세스 충돌들을 피하도록 온-DIMM (인트라-모듈) 데이터 전송들을 스케쥴링하도록 구성된다. 어떤 실시형태들에서, HV 제어기 (230) 는 페이지-인 데이터를 DRAM I/O들에 배치할 때, 이러한 데이터 액세스 충돌들에 의해 야기되는 시스템 고장을 피하도록, 시스템 메모리 액세스들을 피하면서 작동할 것이다. 예를 들어, 도 8 에 예시된 바와 같이, 데이터 A 내지 G 가 HV-DB (240) (TBM) 로부터 메인 메모리 (MM) 로 페이지-인되고 있음에 따라서, 시스템은 또한 데이터 M, M+1, M+2, M+3 를 메인 메모리 (MM) 에 기록하라는 메모리 액세스 지령들을 발하고 있을 수도 있다. 메모리 제어기는 다음과 같이 시스템으로부터의 메모리 지령들을 스케쥴링하고 HV 드라이버 (550) 로부터의 더미 기록 지령들을 스케쥴링할 수도 있다:
CAS TBM A (미도시) - 이것은 데이터 A 를 TBM 으로부터 메인 메모리 (MM) 로 전송하라는 HV 드라이버 (550) 로부터의 더미 기록 지령임;
CAS TBM B - 이것은 데이터 B 를 TBM 으로부터 메인 메모리 (MM) 로 전송하라는 HV 드라이버 (550) 로부터의 더미 기록 지령임;
CAS sys M - 이것은 데이터 M 을 시스템으로부터 MM 에 기록하라는 정상 기록 지령임;
CAS TBM C - 이것은 데이터 C 를 TBM 으로부터 메인 메모리 (MM) 로 전송하라는 HV 드라이버 (550) 로부터의 더미 기록 지령임;
CAS sys M+1 - 이것은 데이터 M+1 을 시스템으로부터 MM 에 기록하라는 정상 기록 지령임;
CAS sys M+2 - 이것은 데이터 M+2 를 시스템로부터 MM 에 기록하라는 정상 기록 지령임;
CAS TBM D - 이것은 데이터 C 를 TBM 으로부터 메인 메모리 (MM) 로 전송하라는 HV 드라이버 (550) 로부터의 더미 기록 지령임;
CAS TBM E - 이것은 데이터 C 를 TBM 으로부터 메인 메모리 (MM) 로 전송하라는 HV 드라이버 (550) 로부터의 더미 기록 지령임;
CAS TBM G - 이것은 데이터 C 를 TBM 으로부터 메인 메모리 (MM) 로 전송하라는 HV 드라이버 (550) 로부터의 더미 기록 지령임;
CAS sys M+3 - 이것은 데이터 M+3 을 시스템으로부터 MM 에 기록하라는 정상 기록 지령임; 및
CAS TBM H (미도시) - 이것은 데이터 H 를 TBM 으로부터 메인 메모리 (MM) 로 전송하라는 HV 드라이버 (550) 로부터의 더미 기록 지령임. 시스템이 CAS TBM B 지령을 발하기 전에, HV 제어기 (230) (도면에서 "FPGA" 로서 지칭됨) 는 데이터 A, 데이터 B, 및 데이터 C 를 HV 제어기로 출력하기 위해, CAS TBM A', CAS TBM B', 및 CAS TBM C' 지령들을 TBM 으로 발하였을 수도 있다. HV 제어기는 ("TBM 으로부터의 FPGA pg-in 입력" 에서 데이터 블록들 A 및 B 로 나타낸 바와 같은) TBM 으로부터의 데이터 A 및 데이터 B 를 사전 로드하고 그것을 HV 제어기에서의 데이터 버퍼 (420) 에 배치할 수도 있다. 그 뒤에, 데이터 C 가 HV 제어기로부터의 CAS TBM C' 에 응답하여 TBM 으로부터 출력된다.
HV 제어기는 HV 제어기가 시스템으로부터의 CAS sys M 지령을 관측하였을 때 CAS TBM D' 를 TBM 으로 계속 발한다. 이에 응답하여, HV 제어기는 DES/NOP 지령을 TBM 으로 발하여 TBM 과 MM 사이의 데이터 전송을 중단시킨다. 따라서, FPG페이지-인 (Pg-in) 출력이 FPGA Pg-in 출력에서 데이터 B 와 데이터 C 사이의 간극으로 나타낸 바와 같이, 중단되며, 시스템 데이터 M (Sys) 이 MM 입력에서 수신된다. 그 뒤에, HV 제어기는 그것이 시스템으로부터의 CAS sys M+1 그리고 그후에 CAS sys M+2 를 관측하였을 때 CAS TBM E' 를 TBM 으로 계속 발한다. 이에 응답하여, HV 제어기는 TBM 이 데이터를 HV 제어기로 출력하는 것을 중단하라는 2개의 연속된 DES/NOP 지령들을 발한다. 그 결과, 어떤 데이터도 데이터 E 와 데이터 F 사이에서 TBM 으로부터 출력되지 않으며, 데이터 C 와 데이터 D 사이에서 어떤 데이터도 HV 제어기로부터 MM 으로 구동되지 않아, MM 이 시스템 데이터 M+1 및 M+2 (Sys) 를 취하도록 MM 으로의 HV 제어기 출력에 간극을 남긴다.
어떤 실시형태들에서, HV 제어기 (230) 는 HV-DRAM (210) 과 HV-플래시 (220) 사이의 음영을 친 데이터 전송 동작들을 수행하도록 더 구성된다. 예를 들어, 시스템 지령이 데이터가 HV-플래시 (220) 로부터 전송되는데 필요로 하는 어드레스로서 사전 프로그래밍되어 있는 DRAM 어드레스를 목표로 할때, HV 제어기 (230) 는 이 사전 프로그래밍된 어드레스에의 적합한 시스템 액세스를 가능하게 하기 위해서 이러한 전송을 수행할 것이다.
페이지-아웃 동작들은 도 7b 에 예시된 바와 같이, 유사하게, 그러나 반대 방향으로 그리고 상이한 순서로, 수행될 수 있다. 따라서, 페이지-아웃/페이지-인 프로세스는 페이지-인 및 페이지-아웃 데이터가 메모리 채널 또는 CPU 를 거치지 않고 메인 메모리와 HVDIMM (200) 상의 스토리지 사이에 전송될 수 있기 때문에, PCIe SSD 또는 종래의 메모리 채널 스토리지를 이용하는 것보다 수십배 더 빠를 수 있다. 게다가, HV-플래시 (220) 와 HV-DRAM (210) 사이의 데이터 전송이 또한 메인 메모리 채널 및 CPU 를 해방하기 때문에, 시스템 성능이 더욱 향상된다. 어떤 실시형태들에서, HV-플래시 (220) 에서의 데이터는 DRAM 포맷으로 저장되며, 따라서 데이터가 HV-플래시 (220) 와 HV-DRAM (210) 사이에 이동되고 있음에 따라서, CPU 에 의해 통상적으로 수행되는, 데이터 포맷을 변환할 필요가 전혀 없다.
어떤 실시형태들에서, 도 9 에 나타낸 바와 같이, 다수의 HVDIMM들 (200), 예컨대, HVDIMM 1, HVDIMM 2, 등이, 시스템 메모리 및/또는 시스템 제어/어드레스 버스 및 시스템 데이터 버스를 포함하는 시스템 버스를 통해서 CPU/MC 에 커플링된 스토리지를 제공하기 위해 함께 사용될 수 있다. 운영 시스템이 모든 HVDIMM (200s) 의 플래시 공간을 통합된 HVDIMM (200) 스토리지로서 보기 때문에, 시스템은 어느 물리적인 플래시 디바이스들이 어느 물리적인 HVDIMM (200) 상에 로케이트되는 지를 알 수 없을 수도 있다. 그 결과, HV 드라이버 (550) 는 하나의 HVDIMM (200) 상의 DRAM 어드레스 및 다른 HVDIMM (200) 상의 플래시 어드레스를 가지는 페이지-아웃 지령을 발할 수 있다.
이 이슈를 해결하기 위해, 어떤 실시형태들에서, HV 드라이버 (550) 는 도 10 에 나타낸 바와 같은, 메모리 연관 테이블을 작성한다. 운영 시스템이 HVDIMM (200s) 의 모두에 제공된 스토리지를 하나의 스토리지 디스크 (이를테면, K-디스크) 로서 보기 때문에, 드라이버는 K-디스크를 개개의 HVDIMM (200) 과 각각 연관된, 복수의 서브-디스크들 K1, K2, … Kn 으로 파티션할 수 있다. 예를 들어, 도 10 에 나타낸 바와 같이, 메모리 연관 테이블은 CPU 당 24 엔트리들을 가지는데, 어떤 실시형태들에서는 CPU 당 DIMM 소켓의 개수이다. 각각의 엔트리는 개개의 HVDIMM (200) 에 대응하며, 서브-디스크 개수, HVDIMM (200) ID, DIMM 상의 HV-DRAM (210) 에 대한 최소 및 최대 어드레스 한계들, 및 DIMM 상의 HV-플래시 (220) 에 대한 최소 및 최대 어드레스 한계들을 포함한다. 따라서, 메모리 연관 테이블을 참조함으로써, HV 드라이버 (550) 는 동일한 HVDIMM (200) 상의 HV-DRAM (210) 및 HV-플래시 (220) 의 어드레스 한계들 내 데이터를 스왑하려고 시도할 것이다.
일반적으로, 비용/성능/전력의 이유들로, 컴퓨터/서버 시스템에서의 메모리들은 더 빠르고 더 작은 메모리들이 메모리 코어들 (예컨대, 제 1 계층 캐시) 내에 (또는, 가깝게) 로케이트되도록 계층들에 배열되며, 메모리가 코어로부터 물리적으로 그리고 전자적으로 더 멀리 떨어짐에 따라서 밀도 및 액세스 시간이 증가한다. CPU/MC 패키지에 캐시 메모리들의 계층들이 있으며, 시스템 버스에서의 전용 메모리 채널을 통해서 MC 에 접속되는 메모리 모듈(들) 은 메인 메모리로서 간주되며, 이 메모리는 CPU 에 의한 동적 무작위 데이터 액세스를 제공한다. 저장 디바이스들은 CPU 로부터 멀리 떨어져 있으며, 하드 디스크 디바이스들 (HDD), 고체-상태 저장 디바이스들 (SSD), 등과 같은, 시스템에서의 대개 아주 큰 메모리들이며, 그러나 그들은 동적 무작위 액세스 능력들을 제공하지 않는다.
컴퓨터 시스템 (100) 에서의 메모리들은 HVDIMM (200) 에 의해 제공되는 스토리지가 CPU 로부터 멀리 떨어져 있지 않다는 점을 제외하고는 도 11 에 나타낸 바와 같이 다소 유사하게 구조화되며, 스토리지로부터의 데이터가 사우스 브릿지, 또는 PCI 버스, 또는 심지어 메모리 채널을 거치지 않고, 무작위 액세스를 위해 HV-DRAM (210) 으로 이동될 수 있다. 더욱이, HVDIMM (200) 은 HV-DB (240) 를 제공하는데, 이 HV-DB 는 HV-DRAM (210) 이 유지할 공간을 가지지 않는 데이터를 저장함으로써 HV-DRAM (210) 에 대한 캐시 메모리로서 기능할 수 있고, 메모리 제어기로부터의 더미 기록 지령에 응답하여 요구될 때 DRAM 으로 빨리 이동될 수 있다.
어떤 실시형태들에서, HVDIMM (200) 은 컴퓨터 시스템에 매우 큰, 구성가능한, 확장가능한, 동적 무작위 액세스 시스템 메모리를 제공하도록 구성된다. HVDIMM (200) 은 신규한 메모리 캐시 계층 기법들, 즉, 메모리 윈도우 기법들을 포함하며, 여기서 HV-DRAM (210) 은 컴퓨터 시스템에 의한 동적 액세스를 위해 HV-플래시 (220) 의 인접한 및 완전한 섹션들을 유지한다. 따라서, HV-플래시 (220) 는 컴퓨터 시스템이 HV-플래시 (220) 에서의 메모리 윈도우 (MW) 를 개방하고 시스템에 의한 동적 무작위 액세스를 위해 HV-플래시 (220) 에 저장된 요구되는 데이터를 메모리 윈도우를 통해서 HV-DRAM (210) 으로 보낼 수 있도록, HV-DRAM (210) 으로의 데이터 볼트 (vault) 로서 기능한다.
어떤 실시형태들에서, HVDIMM (200) 은 2개의 유형들의 동작들, 즉, 위에서 설명한 바와 같은, 표준 메모리 동작 (SMO), 및 메모리 윈도우 동작 (MWO) 을 동시에 수행할 수 있다. SMO 동안, HVDIMM (200) 은 표준 프로토콜 (예컨대, JEDEC DDR4 LRDIMM 프로토콜) 을 통해서 표준 메인 메모리 공간을 제공한다. MWO 동안, 도 12 에 나타낸 바와 같이, HV-플래시 (220) 에서, 플래시 세그먼트 또는 블록과 같은, 특정의 메모리 영역 (MW) 이 컴퓨터 시스템에 의한 고속 동적 무작위 액세스를 지원하도록 개방된다. 특정의 메모리 영역에서의 요청된 데이터가 플래시로부터 DRAM 으로 이동된다. 시스템이 DRAM 공간이 허용되는 것보다 더 많은 MW들을 개방하도록 요청하면, 시스템은 HVDIMM (200) 이 적어도 최근에 사용된 (LRU) DRAM 영역을 오버라이트시키거나, 또는 특정의 DRAM 로케이션을 오버라이트시키도록 하는 옵션을 갖는다. 특정의 지속기간 동안 (디폴트로) 어떤 더 많은 개방된 페이지들도 존재하지 때, 또는 시스템이 특히 데이터를 저장하도록 요청할 때 DRAM 영역으로부터의 데이터가 HV-DRAM (210) 으로부터 HV-플래시 (220) 로 되이동된다. MWO 는 HVDIMM (200) 제어기 (HV 제어기 (230)) 에 의해 제어되는 백그라운드 동작일 수 있다.
따라서, 컴퓨터 시스템에게, HV-플래시 (220) 는 또한 데이터가 별개의 저장 유닛으로부터 메인 메모리로 이동될 필요가 없기 때문에, 그리고 플래시에서의 임의의 특정의 메모리 영역으로부터의 데이터가 MW 를 개방하라는 시스템으로부터의 요청 시 메모리 채널을 통해서 액세스가능할 수 있기 때문에, 초고속 액세스 스토리지로서 간주될 수 있다. 어떤 실시형태들에서, 시스템은 어떤 사이즈를 가지는 MW 를 개방하라는 단일 요청을 행할 수 있다.
일 실시형태에서, HVDIMM (200) 은 멀티-랭크 (예컨대, 2-랭크) DIMM 이며, HV 제어기 (230) 는 HV 제어기 (230) 가 MWO 를 수행하는 동안 시스템이 액세스 하나의 랭크에 액세스할 수 있도록, 각각의 랭크를 독립적으로 제어한다. 일반적으로, 그러나, MWO 는 더 나은 메모리 관리를 위해 양쪽의 랭크들 상에서 협력하여 실행되는 것이 선호된다. 시스템이 랭크 당 또는 양쪽의 랭크들 상에서 연합하여 MWO 를 실행하는지 여부에 관계없이, HV 제어기 (230) 는 MWO 의 완료를 나타내기 위해 그의 내부 (랭크 당) 레지스터 비트들을 설정할 수 있다. 위에서 언급한 바와 같이, 시스템은 또한 레지스터 비트들을 설정하는 대신, 또는 추가하여, MWO 가 완료될 때 인트럽트 신호를 발생하도록 HV 제어기 (230) 를 구성할 수 있다.
어떤 실시형태들에서, HV 제어기 (230) 는 또한 HVDIMM (200) 에 대한 부트-업 프로세스를 제어한다. 2개의 부트의 유형들; 프레시 부트 (Fresh boot) (깨끗한 셧다운 이후의 부팅) 및 리부트 (Reboot) (전원 장애 이후의 부팅) 이 존재한다. 프레시 부트의 경우 (HVDIMM (200) 에 어떤 유효한 데이터도 존재하지 않는 경우) 와는 달리, 리부트 (Reboot) 는 HV 제어기 (230) 가 전력-손실 시에 HV-DRAM (210) 에 있었던 동일한 데이터로 HVDRAM (210) 을 팝퓰레이트하도록 요청한다.
HVDIMM (200) 은 2개의 아주 상이한 동작 주파수들, 즉, HV 모드 주파수 및 LRDIMM 모드 주파수를 가질 수 있다. HV 모드 주파수는 HV-DRAM (210) 과 HV-플래시 (220) 사이에 데이터를 전송하는데 사용되는 반면, LRDIMM 모드 주파수는 HVDIMM (200) 과 시스템 사이에 데이터를 전송하는데 사용된다. 어떤 실시형태들에서, HV-DRAM (210) 은 2개의 동작 모드들, 즉, 표준 동작 모드 및 MW 모드를 갖는다. 표준 동작 모드 동안, HV-DRAM (210) 은 초기화 및 훈련 (training) 프로토콜들을 포함한 표준 메모리 동작들 (예컨대, JEDEC DDR4 LRDIMM 동작들) 을 완전히 지원한다. HV-DRAM (210) 이 MW 모드에 있을 때, HV-DRAM (210) 은 동작 주파수 (HV 모드 주파수) 의 MW 모드가 표준 동작 모드 주파수를 커버하는 DLL 의 주파수 범위보다 매우 낮기 (예컨대, 더 낮은 크기이기) 때문에 그의 DLL 턴 오프로 동작한다. HV 제어기 (230) 는 MW 동작들에 대해 HV 모드 주파수를 이용하며, 그 동안 DRAM 및 RCD (320) 가 JEDEC DLL-오프 동작 상태에 들어간다.
어떤 실시형태들에서, MWO 의 시작은 시스템으로부터의 요청에 의해 개시된다. 도 5 는 어떤 실시형태들에 따른, 통합된 MC 를 가지는 CPU 에서의 어떤 구성요소들의 블록도이다. MC 와 HVDIMM (200) 사이의 메모리 채널이 HV-플래시 (220) 에서의 전체 메모리 공간을 어드레싱하기에 충분한 개수의 어드레스 비트들을 허용하지 않을 수도 있기 때문에, 시스템은 어느 HV-플래시 (220) 의 영역들이 무작위 액세스를 위해 HV-DRAM (210) 에 복사되었는지에 관한 룩업 테이블을 보유할 수도 있다. 도 7a 에 나타낸 바와 같이, 시스템이 HV-플래시 (220) 에서의 어떤 메모리 영역에 액세스하도록 요구할 때, 시스템은 메모리 영역에 저장된 데이터가 HV-DRAM (210) 에서의 어떤 영역에 복사되었는지 여부, 즉, MW 가 시스템이 데이터에 액세스하도록 하기 위해 HV-플래시 (220) 에서 개방되는지 여부를 결정하기 위해, 룩업 테이블을 체킹할 것이다. 응답이 예이면, MC 는 DRAM 에서의 메모리 영역에 액세스하기 위해 메모리 동작들을 계속 수행할 것이다. 응답이 아니오이면, 시스템은 HVDIMM (200) 에서의 MW 를 개방하라는 요청을 전송할 것이다. 요청은 메모리 영역의 시작 어드레스 및 메모리 영역의 사이즈와 같은 액세스될 HV-플래시 (220) 에서의 메모리 영역의 식별, 및 메모리 영역으로부터의 데이터가 전송될 DRAM 에서의 목적지 어드레스를 포함할 것이다. 시스템이 하나 보다 많은 MW들을 요구하면, 하나 보다 많은 요청들이 차례로 전송될 수 있다. 어떤 실시형태들에서, 요청은 I2C 버스 또는 임의의 다른 시스템 관리/제어 버스를 통해서 HVDIMM (200) 에서의 HV 제어기 (230) 로 직접 전송된다. 어떤 다른 실시형태들에서, 요청은 MW 가 개방 중인 동안 시스템이 메모리 채널을 통해서 다른 메모리 동작들을 계속 수행할 수 있도록, DMA 제어기로 송신되어 프로세싱된다.
어떤 실시형태에서, DMA 제어기는 MWO 프로세스들의 어떤 양태들을 제어하는데 사용된다. 도 13 은 예시적인 DMA 제어기의 블록도이다. 어떤 실시형태들에서, (DMA) 제어기는 HVDIMM (200) 에서의 MWO 를 개시하고 모니터링하기 위해 CPU/MC 와 함께 사용될 수 있다. DMA 없이, CPU/MC 는 MWO 의 부분 또는 전체 지속기간 동안 점유될 수 있으며, 따라서 다른 태스크들을 수행하는데 이용불가능하다. DMA 와 함께, CPU 는 DMA 으로 데이터 전송 요청을 간단히 개시하고 그후 전송이 프로세싱 중인 동안 다른 동작들을 수행할 수 있다. 데이터 전송이 이루어질 때, CPU 는 DMA 제어기로부터의 인터럽트에 의해 통지를 받는다. 따라서, DMA 는 CPU 로부터 광범위한 메모리 동작들을 오프로드할 수 있다. 디스크 드라이브 제어기들, 그래픽스 카드들, 네트워크 카드들 및 사운드 카드들을 포함한, 많은 하드웨어 시스템들은 DMA 를 이용한다. DMA 는 또한 멀티-코어 프로세서들에서의 인트라-칩 데이터 전송에 사용된다. DMA 채널들을 가지는 컴퓨터들은 DMA 채널들이 없는 컴퓨터들보다 휠씬 더 적은 CPU 오버헤드를 가지는 디바이스들로 또는 그로부터 데이터를 전송할 수 있다. 이와 유사하게, 멀티-코어 프로세서 내부의 프로세싱 엘리먼트는 그의 프로세서 시간을 점유함이 없이 그의 로컬 메모리로 그리고 그로부터 데이터를 전송함으로써, 계산 및 데이터 전송이 병렬로 진행되도록 할 수 있다.
어떤 실시형태들에서, 도 14 에 나타낸 바와 같이, DMA 는 HVDIMM (200) 에서의 MW (MW) 를 개방하라는 CPU/MC 로부터의 요청을 수신한다. DMA 는 그 요청을 버퍼하고 동일한 또는 새로 편성된 (reformulated) 요청을 I2C 버스를 통해서 HV 제어기 (230) 로 포워딩할 수 있다. DMA 는 HVDIMM (200) 에서의 연관된 MWO 를 능동적으로 모니터링하고 MW 가 개방되는 때를 인트럽트를 통해서 CPU/MC 에 통지할 수 있다.
제한된 내구성 (endurance) 및 느린 기록들과 같은 플래시 메모리들과 연관된 특성들은 HVDIMM (200) 이 CPU 상에서 실행하는 운영 시스템 (OS) 으로부터의 지원을 얻는 것을 필요로 할 수 있다. OS 는 또한 플래시의 약한 특성들을 숨길 때를 알 수 있도록 DRAM 과 플래시 사이의 페이지들의 이동의 지식을 필요로 할 수도 있다. 부트 업 시, OS 는 DRAM 에서의 메모리 페이지들을 할당해야 한다. 어떤 페이지에의 기록 후, OS 는 또한 그 페이지에의 다음 기록이 수행될 수 있는 추정된 시간을 알아야 한다. OS 는 또한 DRAM 페이지들 및 플래시 페이지들에 대한 페이지-테이블 엔트리들을 설정해야 할 수도 있다. 이들 태스크들의 일부 또는 모두가 이들 활동들을 추적하는, 상태 레지스터들, 내부 메모리들 및 제어 로직 (410) 을 포함하는 DMA 에 오프로드될 수 있다.
예를 들어, DMA 는 얼마나 오랫동안 HV 제어기 (230) 가 어떤 양의 데이터를 HV-플래시 (220) 로부터 HV-DRAM (210) 로 전송하는 것을 필요로하는지에 관한 정보를 저장할 수 있다. 따라서, DMA 는 메모리 윈도우가 동적 무작위 액세스를 위해 개방되었다고 CPU/MC 에게 말하기 전에 HV 제어기 (230) 로부터 통지를 수신하기를 대기할 필요가 없다. 대안적으로 또는 추가적으로, DMA 는 이러한 데이터 전송들의 각각을 완료하는데 요구되는 시간이 더욱 예측가능하기 때문에, 메모리 윈도우를 개방하라는 요청을, 미리 결정된 사이즈 (예컨대, 4KB) 의 데이터의 더 작은 청크에 대해 다수의 요청들 각각으로 분할할 수 있다.
따라서, HVDIMM (200) 은 시스템으로 하여금 동적 동작을 위해 HV-플래시 (220) 블록에서의 메모리 윈도우를 개방시키는 것이 가능하다. 시스템은 시작 어드레스 및 데이터 사이즈를 HV 로 전송하며, HV 제어기 (230) 는 데이터를 포함하는 메모리의 블록을 개방하고 요청된 데이터의 양을 HV-DRAM (210) 으로 전송한다. 어떤 실시형태들에서, HV-플래시 (220) 블록 당 최소 전송 사이즈는 32KB 이고, 최대 사이즈는 HV-플래시 (220) 블록 사이즈 (예컨대, 4MB) 이다. 따라서, HV-플래시 (220) 블록 당 전송 사이즈가 8GB DRAM 에 대해 32KB 이면, 시스템은 250K HV-플래시 (220) 블록들에게 동시에 개방할 수 있다.
어드레스 유형 설명 바이트의 #
블록에 대한 HV-플래시 물리 어드레스 64K 블록들 2
블록 당 시스템 (가상 물리) 어드레스 2
블록 당 메모리 윈도우에 대한 32KB 유닛의 바이트 사이즈를 가지는 HV-플래시 오프셋 어드레스들 총 16 X 1 바이트 오프셋 어드레스 16
32KB 유닛의 HV-플래시 오프셋 어드레스에 대한 DRAM 어드레스 (로우 어드레스) 총 16 X 2 바이트 어드레스 32
폐쇄된 32KB 유닛의 HV-플래시 오프셋 어드레스에 대한 32G 스크래치 플래시 어드레스 총 16 X 3 바이트들 48
어떤 실시형태들에서, HV 제어기 (230) 는 HV-플래시 (220) 어드레스 관리를 제공하고, 시스템에 알려져 있는 가상-물리 어드레스들과 비교하여 물리적인 HV-플래시 (220) 어드레스들을 추적하도록 구성된다. 이것은 시스템 (가상-물리) 어드레스를 임의의 특정의 플래시 블록의 어드레스를 추적하기 위한 HV-플래시 (220) 물리적인 어드레스에, 그리고 각각의 개방된 (그리고 HV-DRAM (210) 에 복사된) 각각의 블록 내 메모리 로케이션의 오프셋 어드레스에 맵핑하는 어드레스 맵핑 테이블을 생성하고 업데이트함으로써 이루어질 수 있다. HV 제어기 (230) 는 오프셋 어드레스들을 이용하여, 데이터를 HV-DRAM (210) 로부터 플래시 메모리의 특정의 블록 내 적합한 로케이션들에 정확하게 다시 위치시킨다. 테이블 1 은 어떤 실시형태들에 따른, 몇 개의 어드레스 유형들에 대한 설명 및 사이즈들을 열거한다.
도 15a 는 어떤 실시형태들에 따른, HV 제어기 (230) 에 의해 실행되는, 시스템에 의한 동적 무작위 어드레스를 위해 HV-플래시 (220) 에서의 메모리 윈도우를 개방하는 어떤 프로세스들을 예시한다. 어떤 실시형태들에서, HV 제어기 (230) 는 메모리 윈도우로부터의 데이터가 DRAM 으로 성공적으로 전송되어진 후 메모리 윈도우가 개방되었는지를 DMA 또는 CPU/MC 에게 통지할 수도 있다. 다른 실시형태들에서, HV 제어기 (230) 는 CPU/MC 가 DMA 로부터 인트럽트를 또는 HV 제어기 (230) 로부터 직접 통지를 수신하여 메모리 윈도우로 메모리 동작도 시작하게 될 때 데이터 전송이 완료되도록, 메모리 윈도우에 대한 요청 및 이력적 정보에 기초하여 전송이 완료될 때의 시간을 예측하고, 전송의 완료 전에 통지를 DMA 또는 CPU/MC 로 전송할 수도 있다.
도 15b 는 어떤 실시형태들에 따른, HV 제어기 (230) 에 의해 실행되는, 메모리 윈도우를 폐쇄하는 어떤 프로세스들을 예시한다. 시스템은 I2C 인터페이스 또는 일부 다른 시스템 제어 버스 인터페이스를 통해서 HV-플래시 (220) 영역을 폐쇄하도록 요청할 수도 있다. 요청은 메모리 윈도우의 시작 HV-DRAM (210) 어드레스 및 사이즈를 포함할 수도 있다. 어떤 실시형태들에서, 시스템이 하나의 메모리 윈도우를 폐쇄하지만 HV-플래시 (220) 블록 내 다른 메모리 윈도우들을 개방된 채로 두도록 요구하면, HV 제어기 (230) 는 블록 내 모든 메모리 윈도우들이 폐쇄될 때까지 HV-플래시 (220) 블록을 폐쇄하지 (업데이트하지) 않을 것이다.
예를 들어, 전력 손실로 인한 갑작스러운 시스템 고장의 경우, HV 제어기 (230) 는 또한 데이터를 HV-DRAM (210) 으로부터 HV-플래시 (220) 로 이동시키고 개방된 블록들을 폐쇄시키는 책임을 맡을 수도 있다. 어떤 업데이트된 HV-DRAM (210) 데이터도 HV-플래시 (220) 에 저장되지 않았으면, HV 제어기 (230) 가 이동시킬 필요가 있을 수도 있는 데이터의 최대 사이즈는 DRAM 사이즈, 예컨대, 8GB 만큼 클 수 있다.
어떤 실시형태들에서, HV-DRAM (210) 에서의 메모리 윈도우에 대한 공간을 만들기 위해, 어떤 DRAM 페이지들은 플래시로 이동되는 것을 필요로 할 수도 있다. HV 제어기 (230) 는 하나 이상의 사전-소거된 플래시 페이지들을 실행하고 하나 이상의 DRAM 페이지들을 플래시에 복사할 것이다. 복사는 CPU 를 감속하거나 또는 실속시킴이 없이 완료될 수 있다. DRAM 페이지들의 작은 복사본들이 또한 제어부에 대한 OS 를 위해 DRAM 에 또는 HVDIMM (200) 에서의 캐시-버퍼/스크래치-패드에, 스테이지되거나 또는 유지될 수 있다.
어떤 실시형태들에서, 도 16 에 나타낸 바와 같이, HV 제어기 (230) 는 내장 프로세서 (1610) 및 연관된 하드웨어 (예컨대, FPGA SOC 의 부분으로서 통합된 이중 ARM cortex A9 코어 구성) 을 포함하며, 탐색, 정렬, 스크리닝, 분류, 구조화, 포맷팅, 등과 같은 온-DIMM (인트라-모듈) 데이터 처리를 제공하는 코-프로세서로서 기능할 수 있다. 따라서, 시스템 CPU 에 의해 전통적으로 수행되는 어떤 태스크들이 전체 시스템 성능이 현저하게 향상될 수 있도록 코-프로세서로 오프로드될 수 있다. 이러한 태스크들의 예들은 인-메모리 압축/압축해제 (예컨대, DRAM 의 하나의 세그먼트에서의 데이터 및 DRAM 의 다른 세그먼트에서의 프로세싱된 데이터의 소스), 인-메모리 암호화/해독; 보안 인증, 등을 포함하지만, 이에 한정되지 않는다. 코-프로세서가 시스템 CPU 의 관련 없이 DRAM 메인 메모리 또는 플래시 스토리지에 직접 액세스하기 때문에, 코-프로세서는 시스템-전체적인 오버헤드 없이 온-DIMM 메모리들에서의 데이터를 압축하고, 암호화하고, 그리고 인증할 수 있다.
어떤 실시형태에서, 시스템 소프트웨어에 노출된 애플리케이션 프로그래밍 인터페이스들 (API) 을 가지는 소프트웨어 또는 펌웨어 패키지들이 온-DIMM 컴퓨팅/프로세싱을 지원하기 위해 제공된다. 소프트웨어 또는 펌웨어 패키지들은 코프로세서에 의해 실행되며, 예를 들어, 데이터 압축 SDK, 데이터 암호화 SDK, 데이터 인증 SDK, 등과 같은, 소프트웨어 개발 키트들 (SDK) 를 포함할 수도 있다. 펌웨어 패키지들은 HVDIMM (200) 상에 저장될 수 있거나 또는 그들은 시스템으로부터 다운로드될 수 있다. 소프트웨어 또는 펌웨어 패키지들은 상이한 특징들을 지원하도록 구성될 수 있으며 구성들 (예컨대, 라이센스 비트들, 인에이블된 기능들을 나타내는 비트들) 은 HVDIMM (200) 상의 OTP (onetime programmable device) 에 저장될 수 있다. 예를 들어, HV 제어기 (230) 는 OTP 에 저장된 대응하는 구성 비트들에 의해 규정된 압축 알고리즘의 형태를 이용하여, HVDIMM (200) 상의 메인 메모리 또는 스토리지에 저장된 데이터의 어떤 블록 또는 섹션을 압축하거나 또는 압축해제할 수 있다.
추가적인 예로서, CPU 가 온-DIMM 스토리지에 저장된 대량의 데이터를 수반하는 탐색 프로세스를 실행하고 있을 때, HV 제어기 (230) 는 데이터가 온-DIMM 스토리지로부터 메인 메모리로 전송됨에 따라서 CPU 에 의해 처리될 데이터 사이즈를 감소시키기 위해 데이터를 사전-스크린할 수 있다. HV 제어기 (230) 는 또한 데이터 범주화 및 컬렉션 시간을 감소시키기 위해 데이터를 정렬할 수 있다. HV 제어기 (230) 는 또한 메타 데이터 정보의 빠른 쿼리를 지원하기 위해 데이터를 탐색할 수 있다. 추가적인 예에서, 탐색 기준들에 관련되는 것으로 간주되는 단지 엔트리들이 ECC 를 거쳐서 메인 메모리에 로드되도록 요구하도록, 스토리지로부터의 데이터가 사전탐색될 수 있다.
추가적인 실시형태들에서, HV 제어기 (230) 는 (예를 들어, 이더넷 인터페이스 제어기일 수 있는) HV-NIC 를 이용하여, 데이터가 시스템 CPU 를 거치지 않고, 네트워크로부터, 스토리지로, 메인 메모리로, 또는 양쪽으로 동시에 직접 로드될 수 있도록, 또는 반대의 경우로도 로드될 수 있도록, 네트워크와 온-DIMM 메모리 사이의 직접 데이터 전송, 및 온-DIMM 코프로세서를 이용한 데이터 추출/보정을 제공한다. 따라서, HVDIMM (200) 은 클러스터 환경에서 효율적인 데이터 공유를 지원한다.
예를 들어, 다수의 HVDIMM (200s) 은 분산 컴퓨팅 환경에서 DataNode 를 각각 나타내는 CPU들의 클러스터들 상에서의 데이터 세트들의 저장 및 대량 프로세싱을 위한 개방-소스 소프트웨어 프레임워크인, 하둡 (Hadoop) 프로세싱 프레임워크에서 사용될 수 있다. 각각의 DataNode 는 예를 들어, 192 GB 의 메인 메모리 및 3-6 TB 의 메모리 채널 스토리지를 함께 포함할 수 있는 다수의 HVDIMM (200s) 을 포함할 수 있다. 다수의 HVDIMM (200s) 상에서의 플래시와 DRAM 사이의 병렬 데이터 전송 때문에, 초고속 메모리 채널 스토리지 처리량 (예컨대, 각각의 2 CPU 서버 당 39 GB) 가 달성될 수 있다. 더욱이, HVDIMM (200) 상의 스토리지는 스토리지가 메모리 채널을 통해서 액세스되기 때문에 (DRAM들에 액세스하기 위한 레이턴시에 비견할 만한) 아주 낮은 레이턴시로 액세스될 수 있다. 데이터가 스토리지 채널 또는 PCI 인터페이스를 거칠 필요 없이 HV-DRAM (210) 과 HV-플래시 (220) 사이에 이동되기 때문에, 아주 큰 데이터의 블록들 (예컨대, 최고 1 GB) 이 판독 우세한 (dominated) 동작들에서 액세스될 수 있다.
어떤 실시형태들에서, 도 16 에 나타낸 바와 같이, HVDIMM (200) 은 온-DIMM 데이터 프로세싱, 및 빠른 '페이지 스왑' 및 '요구 페이지 (demand page)' 동작들을 지원하기 위해 메인 메모리와 HVDIMM (200) 상의 스토리지 사이에 높은 대역폭 전용 데이터 경로 (1620) 를 제공한다. 추가적인 실시형태에서, 온-DIMM 데이터 버퍼 (HV-DB (240)) 는 온-DIMM 프로세싱을 위한 임시 스토리지로서 기능하는 테라비트 메모리 (TBM) 와 같은 아주 큰 데이터 버퍼일 수 있다. 어떤 실시형태들에서, 도 16 에 나타낸 바와 같이, HVDIMM (200) 은 또한 HV-DRAM (210) 을 거치지 않고, HV 제어기 (230) 및 HV-DB (240) 를 통해서 시스템과 HV-플래시 (220) 사이에 데이터 전송을 가능하게 하기 위해서 다른 데이터 경로 (1630) 를 제공한다.
추가적인 실시형태들에서, 도 16 에 나타낸 바와 같이, 어떤 실시형태들에서, HVDIMM (200) 상의 플래시 스토리지는 내장된 멀티-미디어 인터페이스, 플래시 제어기 및 플래시 메모리를 각각 가지는 다수의 (예컨대, 9) 표준 내장된 멀티-미디어 카드 (eMMC) 패키지들을 포함한다. HV 제어기 (230) 는 또한 증가된 플래시 수명 시간을 초래하는, 동적 하드웨어-기반 에러 정정, 풀 데이터 복구 및 데이터 복원을 제공하는 독립적인 디스크들 (예컨대, RAID 3) 회로 (1640) 의 내장 용장 어레이를 포함한다. RAID 3 는 또한 데이터 복제에 대한 최소화된 요구사항을 특징으로 한다.
eMMC들은 일반적으로 하드웨어에서 에러 정정을 지원한다. 그러나, eMMC들 중 하나가 판독 동작 동안 그의 패키지에서의 플래시 메모리로부터의 데이터에서 어떤 에러들을 정정할 수 없을 때 이슈들이 일어날 수 있다. 어떤 서버 시스템들에서, 스토리지 네트워크들은 저장 시스템 레벨에서 에러들의 추가적인 보정을 가능하게 하기 위해 리던던시들 (예컨대, RAID) 로 형성된다. 지금까지, eMMC들은 플래시 스토리지를 형성하기 위해 사용되었으며, 플래시 스토리지가 에러 표시와 함께 미정정된 데이터를 출력할 것이기 때문에 이러한 리던던시들이 도움이 되었다. 그러나, eMMC 는, 데이터에서 에러들을 정정할 수 없으면, 출력 데이터를 발생할 수 없다. 따라서, eMMC 로부터의 분실된 비트는 시스템 고장 및/또는 복구불가능한 데이터 에러를 초래할 수 있다.
이 문제를 해결하기 위해서, 어떤 실시형태들에 따른 HVDIMM (200) 은 eMMC들의 나머지 ("데이터 eMMC들", 예컨대, 도 2 에서 첫번째 내지 8번째 eMMC들) 에 저장된 데이터와 연관된 패리티 비트들을 저장하는데 사용되는 적어도 하나의 패리티 eMMC (1650) (예컨대, 도 2 에서 9번째 eMMC) 를 포함한다. HVDIMM (200) 은 예를 들어, HV 제어기 (230) 에서의 에러 정정 (예컨대, RAID 3) 회로를 더 포함한다. 어떤 실시형태들에서, RAID 3 회로는 또한 도 2 에 나타낸 바와 같이, TBM 및/또는 메인 메모리를 포함할 수도 있는 시스템과 스토리지 사이의 데이터 경로들에 포함된다.
어떤 실시형태에서, 도 17a 에 나타낸 바와 같이, 기록 데이터가 스토리지에 기록될 때, RAID 3 회로는 예를 들어, TBM 으로부터 기록 데이터의 각각의 세트 (예컨대, 8 바이트들) 를 수신하고, 데이터 바이트들의 각각의 세트에 대한 패리티 바이트를 발생시킨다. RAID 3 회로는 그후 개개의 eMMC 회로들에 저장하기 위한 그의 연관된 패리티 바이트와 함께 데이터 바이트들을 출력한다. 판독 동작 동안, 도 17b 에 나타낸 바와 같이, HV 제어기 (230) 는 eMMC들로 하여금 판독 데이터를 출력하도록 명령하는 제어 및 어드레스 신호들을 출력한다. RAID 3 회로는 데이터 eMMC들로부터 데이터 바이트들의 세트들을, 그리고 패리티 eMMC 로부터 패리티 바이트들을 수신할 것이다. 병렬로 수신된 데이터 바이트들의 각각의 세트에 대해, RAID 3 회로는 데이터 바이트들의 세트가 데이터 eMMC들 중 하나로부터의 바이트를 손실 중인지를 결정할 것이다. 어떤 데이터 바이트도 손실중이 아니면, RAID 3 회로는 그의 의도된 경로를 따라서 데이터 바이트들의 세트를 이동시킬 것이다. 데이터 바이트가 데이터 eMMC들 중 하나로부터 손실중이면, RAID 3 회로는 데이터 바이트들의 세트 및 데이터 바이트들의 세트와 병렬로 수신된 패리티 바이트로부터, 분실된 데이터 바이트를 복원하고, 복원된 데이터 바이트들의 세트를 발생시킬 것이며, 그 복원된 데이터 바이트들의 세트는 메인 메모리 또는 시스템으로 포워딩하기 위해 TBM 에 위치되거나, 또는 온-DIMM 프로세서에 의한 추가적인 프로세싱을 위해 HV 제어기 (230) 에서의 버퍼 메모리에 저장된다.
HV-DB (240) 는 HV-DB (240) 에서의 데이터 전송들을 더 빠르고 더 효율적으로 만들기 위해서, 데이터를 일시적으로 저장하는데 사용된다. 일반적으로 데이터가 시스템으로 및 그로부터 전송되는 속도보다 더 느린 속도에서 플래시 메모리에 그리고 플래시 메모리로 데이터가 전송될 수도 있기 때문에, HV-DB (240) 는 플래시 메모리로/로부터의 데이터를 버퍼하는데 사용되며, 따라서 시스템이 감속하고 데이터가 스토리지 서브시스템에 기록되거나 또는 그로부터 판독되는 것을 대기할 필요가 없다. 시스템이 데이터를 스토리지 서브시스템에 기록할 때, 데이터는 플래시 데이터 I/O 속도보다 아주 더 빠른 DRAM 데이터 I/O 속도로 HV-DB (240) 에 버퍼된다. 버퍼된 데이터는 플래시 메모리에 예를 들어, 선입선출 방식으로 기록된다. 판독 방향에 대해서도 마찬가지이다. 따라서, 스토리지 서브시스템으로부터 판독하는 동안, CPU 는 HV-DB (240) 버퍼가 DRAM 속도에서 메인 메모리 또는 시스템으로 전송하기 위한 미리 결정된 데이터의 양을 버퍼할 때까지, 메인 메모리와 함께 다른 프로세스들에 참가할 수 있다. 한편, 데이터가 메인 메모리로부터 스토리지로 전송중일 때, 데이터는 시스템 또는 HV 제어기 (230) 로부터의 제어/어드레스 (C/A) 신호들의 세트에 따라서 DRAM 으로부터 판독되고 HV 제어기 (230) 로부터의 C/A 신호들의 다른 세트에 따라서 HV-DB (240) 에 기록된다. DRAM 은 다른 태스크들에 대해 시스템과 결합될 수 있지만, HV 제어기 (230) 는 HV-DB (240) 로부터 데이터를 판독하고 데이터를 스토리지에 기록함으로써 데이터를 HV-DB (240) 로부터 스토리지로 전송할 수 있다.
HVDIMM (200) 에서의 구성요소들, 예컨대, HV 제어기 (230), 메인 메모리 서브시스템 (또는, 휘발성 메모리 서브시스템), HV-DB (240), 스토리지 서브시스템 (또는, 비휘발성 메모리 서브시스템) 은 동일한 인쇄 회로 보드 상에 탑재될 수 있거나 또는 그들 사이에 빠르고 매끄러운 데이터 전송이 가능하도록 서로 아주 근접하게 배치될 수 있다.
NAND 플래시는 NAND 게이트들의 기하학적 구조에서의 물리적인 효과들에 의해 발생되는 무작위 에러들로 인해 낮은-신뢰성 이슈들을 일으키기 쉬울 수 있다. 따라서, 어떤 실시형태들에서, 데이터 무결성을 향상시키기 위해, HV 제어기 (230) 는 HV-플래시 (220) 에 저장된 데이터에서의 에러들을 검출하여 정정하기 위해 에러 검출/보정 루틴들의 세트를 실행하도록 구성된다. 예를 들어, 데이터가 HV-DRAM (210) 로부터 HV-플래시 (220) 로 전송될 때마다, HV 제어기 (230) 는 데이터에 대해 에러 정정 코딩을 수행할 것이다. 어떤 실시형태들에서, 도 18 에 나타낸 바와 같이, 데이터 비트들은 그룹화되며, 데이터 비트들의 각각의 그룹은 3차원의 매트릭스로 배열된다. 주기적 리던던시 체크 (CRC) 코드들은 3차원의 매트릭스에 대해 X, Y 및 Z 축 각각을 따라서 미리 결정된 알고리즘을 이용하여 계산될 수 있다. CRC 코드들은 그후 데이터와 함께 HV-플래시 (220) 에 저장된다. 어떤 실시형태들에서, HV 제어기 (230) 는 데이터가 DRAM 으로부터 플래시로 전송되고 있는 동안 CRC 계산을 위해 데이터의 복사본을 저장하는 온칩 메모리 공간들 (예컨대, 1k-2k 의 SRAM) 및/또는 시프트 레지스터들을 포함한다.
데이터가 HV-플래시 (220) 로부터 HV-DRAM (210) 로 전송될 때, HV 제어기 (230) 는 데이터의 각각의 그룹을 동일한 매트릭스 포맷으로 다시 정렬시킬 것이며, CRC 코드들은 도 8 에 나타낸 바와 같이 축의 각각을 따라서 동일한 미리 결정된 알고리즘을 이용하여 다시 계산된다. 새로 계산된 CRC 코드들은 데이터로 수신된 대응하는 CRC 코드들과 비교된다. 데이터에 어떤 에러도 존재하지 않으면, 새로 계산된 CRC 코드들은 데이터로 수신된 대응하는 CRC 코드들을 매칭할 것이다. 수신된 데이터가 도 19 및 도 20 에 나타낸 바와 같이 하나 이상의 에러들을 포함하면, 새로 계산된 CRC 코드들과 수신된 CRC 코드들 사이에 부정합이 존재할 것이다. 데이터가 매트릭스 포맷으로 배열되면, CRC 코드들에서의 이러한 부정합은 잘못된 데이터 비트의 로케이션을 식별하는데 사용될 수 있으며, 식별된 로케이션에서의 잘못된 데이터 비트를 간단히 플리핑함으로써 보정이 이루어질 수 있다.
도 19 는 데이터 매트릭스의 X-Y 평면에서의 비트들 중 하나 (예컨대, 비트 D210) 가 잘못된 예시적인 상황을 예시한다. 이것은 에러를 가지는 비트 로케이션을 정확히 찾아내기 위해 단지 X 및 Y 방향들에서의 CRC 체크로 검출될 수 있다. 도 19 에 나타낸 바와 같이, 비트 D210 는 X 방향을 따른 비트들 D010, D110, D210, … 및 D710 의 로우의 부분이고, 또한 Y 방향을 따른 비트들 D200, D210, D220, …, D290 의 칼럼의 부분이다. 따라서, 비트들의 로우에 대한 새로 계산된 CRC 코드 (CRC810, CRC910, 및 CRCA10) 및 비트들의 칼럼에 대한 새로 계산된 CRC 코드 (CRC2A0, CRC2B0, 및 CRC2C0) 양자가 데이터로 수신된 대응하는 CRC 코드들과 매칭하지 않지만, 동일한 X-Y 평면에서 모든 다른 새로 계산된 CRC 코드들이 데이터로 수신된 대응하는 CRC 코드들과 매칭하면, 에러의 로케이션은 도 19 에 나타낸 바와 같이, 비트들의 로우와 비트들의 칼럼의 교차점, 즉, D210 에 있을 것이다.
도 20 은 데이터 매트릭스에서 동일한 X-Y 평면에서의 2개의 데이터 비트들 (예컨대, 비트 D210 및 비트 D600) 이 잘못된 예시적인 상황을 예시한다. 비트 에러들의 로케이션들을 제대로 정확히 찾아내기 위해, CRC 체크가 X, Y 및 Z 방향들에서 수행되는 것을 필요로 한다. 도 10 에 나타낸 바와 같이, 이 상황에서 바로 X 및 Y 방향들에서 수행된 CRC 체크는 비트 에러의 4개의 가능한 로케이션들 (예컨대, D200, D210, D600 및 D610) 을 나타낼 것이다. Z 방향에서의 추가적인 CRC 체크가 따라서 비트 에러의 정확한 로케이션들 (예컨대, D210 및 D600) 을 정확히 찾아내는데 사용된다.
어떤 실시형태들에서, HV 제어기 (230) 는 HV-플래시 (220) 로부터 HV-DRAM (210) 로 전송되고 있는 데이터의 복사본들에 대해 CRC 체크들을 수행한다. 따라서, HV 제어기 (230) 가 비트 에러를 검출할 때까지, 잘못된 데이터 비트가 DRAM 에 이미 기록되었을 수도 있다. 비트 에러를 정정하기 위해, HV 제어기 (230) 는 DRAM 으로부터 잘못된 비트를 포함하는 데이터의 세그먼트를 판독하고 잘못된 비트를 수정하고 그후 데이터 세그먼트를 DRAM 에 되기록하는 판독-수정-기록 동작을 수행할 수 있다.
위에서 언급한 바와 같이, 플래시 메모리는 유한한 개수의 프로그램-소거 사이클들을 가지며, 빈번한 소거/기록 동작들은 플래시 메모리 셀들이 웨어 아웃하도록 하여, 신뢰성 이슈들을 초래할 수 있다. HV-플래시 (220) 의 수명을 연장하기 위해, HVDIMM (200) 은 (도 12 에 나타낸 바와 같은) 메인 플래시에 추가하여 스크래치 플래시를 포함하며, HV 제어기 (230) 는 데이터가 HV-DRAM (210) 과 HV-플래시 (220) 사이에 전후로 이동될 때 에러 검출/보정 프로세스를 실행하도록 구성된다. 아래에 설명되는 에러 검출/보정 프로세스를 이용함으로써, HVDIMM (200) 은 가능한 한 메인 플래시에 대한 프로그램/소거 (P/E) 동작들을 회피함으로써 플래시 수명을 감소시키지 않고 플래시에 대한 무작위 업데이트들을 지원할 수 있다.
어떤 실시형태들에서는, 플래시 블록이 찰 때 업데이트된 (수정된) 데이터를 유지하기 위해 스크래치 플래시가 채용된다. 스크래치 플래시에서의 수정된 데이터가 시스템이 블록을 폐쇄할 준비가 되었을 때 플래시 블록에 포함될 수 있다. 예를 들어, 특정의 태스크/애플리케이션이 플래시 블록에서의 100 플래시 페이지들의 각각에 대해 100 업데이트들을 필요로 하면, 10,000 업데이트들이 요구될 것이다. 블록에 25 개의 초기 미채워진 페이지 영역들이 존재하면, 이 태스크/애플리케이션은 400 P/E 동작들을 필요로 하며, 그것은 3.2GB 재기록될 데이터에 이른다. 그러나, 수정된 데이터가 스크래치 플래시에 저장되면, 그 블록은 단지 1 P/E 동작을 필요로 한다. 스크래치 플래시 영역에 대해서는, 단지 10,000 페이지들이 기록될 것이며, 그것은 단지 80MB 의 재기록될 데이터에 이를 것이다.
어떤 실시형태들에서, 스크래치 플래시는, 스토리지 또는 메인 플래시와 달리, 그것이 표준 플래시 동작들을 따르더라도, 블록 컨셉을 따를 필요가 없다. 따라서, 각각의 페이지 업데이트가 다음 개방된 (미기록된) 페이지 공간에 기록된다. 기록된 페이지는 페이지가 다시 업데이트되고 업데이트된 페이지가 새로운 로케이션에 기록될 때, 또는 페이지가 스토리지 플래시에서의 블록을 폐쇄하는 시스템에 의해 스토리지에 복사될 때 '오래된 (old)' 으로서 마크된다. 스크래치 플래시에서 물리적인 블록에서의 모든 페이지들이 '오래된 (old)' 으로서 마크될 때, 블록은 소거되고 그후 개방된 (또는, 이용가능) 으로서 마크된다. 어떤 실시형태들에서, 대부분 '오래된' 페이지들을 포함하는 블록에 대해, '오래된' 으로 마크되지 않은 페이지들은 그 블록이 소거될 수 있도록 새로운 로케이션에 복사된다.
도 21 내지 도 22 는 산업 표준 대체 알고리즘에 따라서, 시스템이 플래시 블록 (블록 K) 에서의 세그먼트를 개방하도록 요청할 때, 시스템이 플래시 블록으로 대체될 메인 메모리 (DRAM) 에서의 블록 (블록 N) 을 선택해야 하는 종래의 SSD 또는 플래시 동작을 예시한다. 플래시에서의 새로운 블록이 블록 N 이 블록 K 에서의 데이터에 의해 대체되기 전에 블록 N 에서의 데이터를 수용하도록 개방된다. 블록 N 이 원래 취해진 플래시에서의 다른 블록이 그후 소거된다.
도 23 내지 도 24 는 어떤 실시형태들에 따른, HVDIMM (200) 에서의 메모리 윈도우 동작을 예시한다. 여기서, 메인 플래시에서 새로운 세그먼트를 개방하라는 시스템 요청에 응답하여, 블록이 HV-DRAM (210) 에서 선택되지만, 단지 선택된 세그먼트에 대해 요구되는 DRAM 블록에서의 페이지들 (예컨대, 세그먼트 Y 에 대한 X 페이지들) 이 실제로 대체 대상이다. 세그먼트 Y 로부터의 데이터가 DRAM 에서의 X 페이지들에 의해 유지된 공간에 기록되기 전에, X 페이지들이 스크래치 플래시에 기록된다. 따라서, 데이터가 HV-DRAM (210) 과 HV-플래시 (220) 사이에 페이지 단위로 이동되며, 어떤 비-휘발성 메모리에서의 새로운 블록들도 동적 무작위 액세스를 위해 개방될 때 새로운 세그먼트가 기록되거나 또는 소거되도록 요구되지 않는다.
어떤 지점에서, 현재의 스크래치 플래시 블록은 데이터가 플래시로부터 DRAM 으로 페이지 단위로 이동됨에 따라서 채워질 수도 있다. 예를 들어, 도 25 에 나타낸 바와 같이, 메모리 윈도우 동작이 M+1 페이지들이 DRAM 에서 대체되도록 명령하고 현재의 스크래치 블록 j 가 단지 채워지지 않은 채로 남아 있는 M 페이지들을 가지면, M+1 페이지들의 제 1 M 페이지들은 블록 j 에 기록될 수 있는 반면, M+1 번째 페이지는 스크래치 플래시에서 블록 j+1 에 기록된다.
HV 제어기 (230) 는 메인 플래시, DRAM 및 스크래치 플래시 사이에 데이터 이동들을 추적하도록 구성된다. 시스템이 DRAM 에서의 블록을 폐쇄하도록 요청할 때, 플래시에서의 새로운 블록이 DRAM 에서 폐쇄될 블록에 데이터를 수용하기 위해 개방된다. 폐쇄될 블록에서의 데이터의 일부가 스크래치 플래시에 삽입되었을 수도 있기 때문에, HV 제어기 (230) 는 도 26 에 예시된 바와 같이, DRAM 으로부터의 폐쇄될 블록에서의 데이터를 폐쇄될 블록으로부터 취해서 스크래치 플래시에 저장된 데이터와 병합하도록 더 구성된다. 병합된 데이터가 플래시에서 새로운 블록에 저장되며, DRAM 에서의 소거될 블록이 취해진 플래시에서 오래된 블록이 따라서 소거된다.
메인 플래시의 수명을 연장하기 위해 스크래치 플래시를 이용하는 것에 더해서, HV 제어기 (230) 는 또한 HV-플래시 (220) 에서의 각각의 블록의 평균 사용 시간을 동등하게 함으로써 웨어 레벨링을 수행하도록 구성된다. 어떤 실시형태들에서, 이러한 웨어 레벨링은 라운드 로빈 방법에 의해 이루어질 수 있다. HV 제어기 (230) 는 그의 어드레스 맵핑 관리 능력들, 및 상대적으로 큰 메모리 공간을 이용하여, 연관된 어드레스 변화들을 추적한다.
도 27 은 어떤 실시형태들에 따른, HVDIMM (200) 라운드-로빈 웨어 레벨링 기법의 단순화된 예를 예시한다. 도 27 에 나타낸 바와 같이, 이벤트 진행 경우들 1 및 2 양쪽은 메모리 윈도우 동작들에 대해 개방된 블록들 0 및 2 를 갖는다. 이벤트 진행 경우 1 에서, 파일 A 는 먼저 폐쇄되지만 이벤트 진행 경우 2 에서는, 파일 C 가 먼저 폐쇄된다. 따라서, 경우 1 에 대해, 파일 A 는 제 1 빈 (소거된) 블록 (B#3) 에 기록된다. 경우 2 에 대해, 파일 C 는 블록 B#3 에 기록된다.
메인 메모리로서 사용되는 것 대신, 또는 그에 추가하여, HVDIMM (200) 은 또한 인트라넷 네트워크 내에서 직접 데이터 전송들을 촉진하기 위해 저장 디바이스로서 사용될 수 있다.
클라우드 네트워킹 및 컴퓨팅에서의 최근의 발달들은 데이터를 전송하고 저장하는 효율적인 방법들을 필요로 한다. 클라우드 환경이 데이터베이스 뿐만 아니라 계산력을 공유하는 많은 상이한 유형들의 애플리케이션들을 지원하기 때문에, 임의의 특정의 서버 또는 스토리지 병목이 클라우드 네트워크의 전체 성능에 충격을 줄 수 있다.
2개의 유형들의 데이터 전송들, 즉, 인트라넷 및 인터넷이 존재한다. 인트라넷은 컴퓨팅 리소스들 및 정보를 공유하는 조직 내 폐쇄된 네트워크를 제공하며, 반면 인터넷 네트워크들은 인트라넷들 사이에 또는 조직들 사이에 존재한다.
(조직들 사이의) 인터넷 데이터 전송들은 일반적으로 데이터 전송 레이턴시를 덜 걱정한다. 한편, 인트라넷 데이터 전송들은 즉각적인 응답들을 필요로 하며 데이터 전송 레이턴시에 대해 덜 관대하다. 이것은 태스크가 공유된 운영 시스템, 프로그램, 및 데이터베이스를 이용하는 병렬 계산을 위해 다수의 서버들로 보내질 때 특히 들어맞는다. 이러한 경우, 태스크를 정확하게 실행하기 위해 이들 서버들 사이에 데이터 코히런시가 요구된다. 따라서, 하나의 서버에서의 임의의 데이터 전송 레이턴시가 태스크 실행을 감속시킬 수 있다.
또한 인트라넷에서 2개의 유형들의 데이터 전송들: 각각의 개개의 서버 내에서의 데이터 전송들 및 여러 서버들 사이의 데이터 전송들이 존재한다. 여러 서버들 사이의 데이터 전송들은 정보, 동작 시스템들, 또는 컴퓨팅 리소스들을 공유하기 위해 인터넷 프로토콜 기술을 이용한다. 서버 내에서의 데이터 전송들은 일반적으로 CPU 에 의해 처리되며, 메모리 디바이스들과 네트워크 접속들 사이에 CPU 를 통해서 일어난다.
현재, 인트라넷 서버들 사이에 데이터를 전송하는 것은 송신하는 서버 CPU 에게 스토리지로부터 또는 메인 메모리로부터 데이터를 수집하고, 데이터를 패킷화하고, 그것을 네트워크 상으로 흘러 들어가도록 한다. 수신하는 서버 CPU 는 데이터를 추출하여 그것을 스토리지 또는 메인 메모리에 저장하는 것을 필요로 한다. 서버 내 데이터를 전송하는 것은 CPU 가 CPU 에 커플링된 하나의 메모리로부터 데이터를 판독하고 데이터를 CPU 에 또한 커플링된 다른 메모리 디바이스에 기록하도록 한다.
예를 들어, CPU 상에서 실행하는 프로세스들이 시스템이 이용가능한 메모리보다 더 많은 메모리를 할당하려고 시도할 때, OS 는 스토리지에 또는 그로부터 메모리 페이지들을 스왑할 것이다. 페이지가 대체용으로 선택되고 "페이지 아웃" 이 다시 참조 표시되면, 그것은 페이지 인 되어야 (스토리지로부터 판독되어야) 한다. 이것은 I/O 완료를 대기하는 것을 수반할 것이며, 전체 응답 시간은 다음의 합계이다:
(페이지 아웃 시간) + (페이지 인 시간)
여기서,
(페이지 아웃 시간) = (메모리 시간)+(CPU 시간)+(버스 시간)+(스토리지 시간)
(페이지 인 시간) = (스토리지 시간)+(버스 시간)+(CPU 시간)+(메모리 시간).
양쪽의 경우들에서, 데이터가 CPU 를 거칠 필요가 없으면 데이터 전송 레이턴시가 감소될 것이다. 다시 말해서, 직접 데이터 전송이 메모리 디바이스로부터 네트워크로 일어나면, 서버들 사이의 데이터 전송 레이턴시가 최소화될 것이다. 데이터가 CPU 를 거치지 않고 메모리 디바이스들 사이에 직접 전송되면, 서버 내에서의 데이터 전송 레이턴시가 또한 감소될 수 있다.
인트라넷 네트워크에서, CPU 상에서 실행하는 프로세스가 시스템이 이용가능한 것보다 더 많은 메모리를 할당하려고 시도하면, OS 는 IO 스토리지에 그리고 그로부터 메모리 페이지들을 스왑할 것이다. 페이지가 대체용으로 선택되고 "페이지 아웃" 이 다시 참조되면, 그것은 다시 페이지 인 되어야 한다. 이것은 I/O 완료를 대기하는 것을 수반할 것이며, 그러나 전체 응답 시간은 이제 다음의 합계이다:
(페이지 아웃 시간) + (페이지 인 시간)
여기서,
(페이지 아웃 시간) = (메모리 시간)+(HV 시간)+(스토리지 시간)
(페이지 인 시간) = (스토리지 시간)+(HV 시간)+(메모리 시간)
따라서, 전체 응답 시간이 현저하게 단축된다.
어떤 실시형태들에서, HV 제어기 (230) 는 HV-NIC 를 통해서 네트워크 인터페이스 ("ShareTM 직접 DIMM 인터페이스") 를 제공함으로써 상이한 HVDIMM들 (200) 사이에 데이터 전송들을 촉진하도록 구성된다. 예를 들어, 도 28 에 나타낸 바와 같이, (좌측 상의) HVDIMM (200) 은 그들의 개개의 NIC 디바이스들을 통해서 (우측 상의) 다른 HVDIMM (200) 또는 임의의 다른 저장 디바이스들에 직접 커플링될 수 있으며, HVDIMM (200) 에서의 HV 제어기 (230) 는 하나의 HVDIMM (200) 상의 DRAM 과 다른 HVDIMM (200) 에서의 플래시 사이에, 하나의 HVDIMM (200) 상의 DRAM 과 다른 HVDIMM (200) 상의 DRAM 사이에, 하나의 DIMM 상의 플래시와 다른 DIMM 상의 플래시 사이에, 또한 HVDIMM (200) 과 임의의 다른 저장 디바이스들 사이에, 위에서 설명한 기법과 유사한 기법들을 이용하여 데이터를 전송하도록 구성된다.
게다가, HV 제어기 (230) 는 또한 상이한 서버 시스템들 사이의 데이터 전송들을 촉진하도록 구성된다. 예를 들어, 도 29 에 나타낸 바와 같이, 인트라넷 네트워크에서 각각의 서버 시스템에서의 HVDIMM(들) (200) 은 그들의 개개의 HV-NIC 디바이스들 및/또는 다른 네트워크 인터페이스 디바이스를 통해서 인트라넷 네트워크에 직접 커플링될 수 있다. 따라서, 특정의 서버에서 각각의 HVDIMM (200) 상의 HV 제어기 (230) 는 상이한 서버들에서의 HVDIMM (200s) 사이에 직접 데이터 전송을 개시하고 제어할 수 있다.

Claims (22)

  1. 컴퓨터 시스템에 사용하기 위한 메모리 모듈로서,
    상기 컴퓨터 시스템은 메모리 채널에 커플링된 메모리 제어기를 포함하며, 상기 메모리 채널은 데이터 버스 및 제어/어드레스 (C/A) 버스를 포함하며,
    상기 메모리 모듈은,
    상기 메모리 채널에 커플링되며 상기 컴퓨터 시스템에 대한 메인 메모리로서 기능하는 것이 가능한 휘발성 메모리 서브시스템;
    상기 컴퓨터 시스템에 스토리지를 제공하는 비-휘발성 메모리 서브시스템; 및
    상기 휘발성 메모리 서브시스템, 상기 비-휘발성 메모리 서브시스템, 및 상기 메모리 채널에 커플링된 모듈 제어기를 포함하며,
    상기 모듈 제어기는 상기 메모리 채널을 통해 수신된 페이지-인 지령에 응답하여 상기 비-휘발성 메모리 서브시스템으로부터 제 1 데이터를 판독하고,
    상기 모듈 제어기는 상기 C/A 버스를 통해 수신된 더미 기록 메모리 지령에 응답하여 상기 휘발성 메모리 서브시스템으로 상기 제 1 데이터의 적어도 하나의 부분을 제공하며,
    상기 더미 기록 메모리 지령은 상기 휘발성 메모리 서브시스템으로 하여금 상기 제 1 데이터의 상기 적어도 하나의 부분을 수신하게 하는, 컴퓨터 시스템에 사용하기 위한 메모리 모듈.
  2. 제 1 항에 있어서,
    상기 휘발성 메모리 서브시스템과 상기 비-휘발성 메모리 서브시스템 사이에서 데이터 전송들을 위한 전용 데이터 경로를 더 포함하며,
    상기 전용 데이터 경로는 상기 휘발성 메모리 서브시스템과 상기 모듈 제어기 사이의 제 1 데이터 신호 라인들, 및 상기 모듈 제어기와 상기 비-휘발성 메모리 서브시스템 사이의 제 2 데이터 신호 라인들을 포함하고,
    상기 전용 데이터 경로는 상기 데이터 버스를 포함하지 않으며,
    상기 제 1 데이터는 상기 제 1 데이터 신호 라인들을 통해 상기 비-휘발성 메모리 서브시스템들로부터 판독되고,
    상기 제 1 데이터의 상기 적어도 하나의 부분은 상기 제 2 데이터 신호 라인들을 통해 상기 휘발성 메모리 서브시스템으로 제공되는, 컴퓨터 시스템에 사용하기 위한 메모리 모듈.
  3. 제 2 항에 있어서,
    상기 모듈 제어기에 커플링된 데이터 버퍼를 더 포함하며,
    상기 전용 데이터 경로는 또한 상기 데이터 버퍼와 상기 모듈 제어기 사이의 제 3 데이터 신호 라인들을 포함하고,
    상기 제 1 데이터의 상기 적어도 하나의 부분은 상기 휘발성 메모리 서브시스템으로 제공되기 전에 상기 데이터 버퍼에 저장되는, 컴퓨터 시스템에 사용하기 위한 메모리 모듈.
  4. 제 3 항에 있어서,
    상기 데이터 버퍼는 상기 제 3 데이터 신호 라인들 및 C/A 신호 라인들의 세트를 통해서 상기 모듈 제어기에 커플링되고,
    상기 모듈 제어기는 상기 데이터 버퍼로 하여금 상기 휘발성 메모리 서브시스템으로 상기 제 1 데이터의 상기 적어도 하나의 부분을 제공하기 전에 상기 제 1 데이터의 상기 적어도 하나의 부분을 출력하게 하기 위해 상기 C/A 신호 라인들의 세트를 통해 상기 데이터 버퍼로 메모리 지령을 발하는, 컴퓨터 시스템에 사용하기 위한 메모리 모듈.
  5. 제 4 항에 있어서,
    상기 모듈 제어기는 상기 메모리 제어기에 의해 상기 휘발성 메모리 서브시스템에 액세스하기 위한 하나 이상의 메모리 지령들에 응답하여 상기 휘발성 메모리 서브시스템으로 상기 제 1 데이터의 하나 이상의 부분들을 제공하는 것을 지연시키도록 구성되는, 컴퓨터 시스템에 사용하기 위한 메모리 모듈.
  6. 제 1 항에 있어서,
    상기 모듈 제어기는 적어도 하나의 프로세서를 포함하며,
    상기 모듈 제어기는 상기 휘발성 메모리 서브시스템으로 상기 제 1 데이터의 상기 적어도 하나의 부분을 제공하기 전에 상기 비-휘발성 메모리 서브시스템으로부터 판독된 상기 제 1 데이터를 사전-프로세싱하도록 구성되는, 컴퓨터 시스템에 사용하기 위한 메모리 모듈.
  7. 제 6 항에 있어서,
    상기 모듈 제어기는 기준들의 세트에 따라서 상기 비-휘발성 메모리 서브시스템으로부터 판독된 상기 제 1 데이터를 탐색하도록 구성되며,
    상기 제 1 데이터의 상기 적어도 하나의 부분은 상기 기준들의 세트를 만족시키는 상기 비-휘발성 메모리 서브시스템으로부터의 상기 제 1 데이터의 부분을 포함하는, 컴퓨터 시스템에 사용하기 위한 메모리 모듈.
  8. 제 2 항에 있어서,
    상기 비-휘발성 메모리 서브시스템은 데이터를 저장하는 비-휘발성 메모리 패키지들의 제 1 세트를 포함하는 복수의 비-휘발성 메모리 패키지들, 및 상기 데이터와 연관된 패리티 비트들을 저장하는 적어도 하나의 비-휘발성 메모리 패키지를 포함하고,
    상기 전용 데이터 경로는 상기 패리티 비트들을 사용하여 상기 비-휘발성 메모리 시스템으로부터 손상된 데이터를 복원하는 에러 정정 회로를 더 포함하는, 컴퓨터 시스템에 사용하기 위한 메모리 모듈.
  9. 제 1 항에 있어서,
    상기 모듈 제어기는 상기 C/A 버스를 통해 수신된 더미 판독 메모리 지령에 응답하여 상기 휘발성 메모리 서브시스템으로부터 제 2 데이터를 판독하며,
    상기 더미 판독 메모리 지령은 상기 휘발성 메모리 서브시스템으로 하여금 상기 제 2 데이터를 출력하게 하고,
    상기 모듈 제어기는 상기 메모리 채널을 통해 수신된 페이지-아웃 지령에 따라 상기 비-휘발성 메모리 서브시스템으로 상기 제 2 데이터를 저장하는, 컴퓨터 시스템에 사용하기 위한 메모리 모듈.
  10. 제 9 항에 있어서,
    데이터 버퍼를 더 포함하고,
    상기 데이터 버퍼는 DRAM 을 포함하며,
    상기 메모리 모듈은 상기 제 2 데이터가 상기 휘발성 메모리 서브시스템으로부터 판독된 후 그리고 상기 비-휘발성 메모리 서브시스템으로 저장되기 전에 상기 데이터 버퍼로 저장되도록 구성되는, 컴퓨터 시스템에 사용하기 위한 메모리 모듈.
  11. 제 9 항에 있어서,
    상기 모듈 제어기는 상기 제 2 데이터를 상기 비-휘발성 메모리 서브시스템으로 DRAM 포맷으로 저장하도록 구성되는, 컴퓨터 시스템에 사용하기 위한 메모리 모듈.
  12. 제 1 항에 있어서,
    네트워크 인터페이스 회로를 더 포함하며,
    상기 메모리 모듈은 상기 네트워크 인터페이스 회로를 통해서 다른 메모리 모듈에 직접 커플링하며 그리고 상기 네트워크 인터페이스 회로를 통해서 다른 메모리 모듈로부터 데이터를 수신하고 다른 메모리 모듈로 데이터를 송신하도록 구성되는, 컴퓨터 시스템에 사용하기 위한 메모리 모듈.
  13. 제 1 항에 있어서,
    네트워크 인터페이스 회로를 더 포함하며,
    상기 메모리 모듈은 상기 네트워크 인터페이스 회로를 통해서 컴퓨터 네트워크에 직접 커플링하며 그리고 상기 네트워크 인터페이스 회로를 통해서 상기 컴퓨터 네트워크로부터 데이터를 수신하고 상기 컴퓨터 네트워크로 데이터를 송신하도록 구성되는, 컴퓨터 시스템에 사용하기 위한 메모리 모듈.
  14. 컴퓨터 시스템에서 메모리 채널을 통해 메모리 제어기에 커플링된 메모리 모듈에 의해 수행되는 방법으로서,
    상기 메모리 채널은 데이터 버스 및 제어/어드레스 (C/A) 버스를 포함하고,
    상기 메모리 모듈은 휘발성 메모리 서브시스템 및 비-휘발성 메모리 서브시스템을 포함하며,
    상기 방법은,
    상기 C/A 버스를 통해 상기 메모리 제어기로부터 제 1 지령을 수신하는 단계;
    상기 제 1 지령이 상기 비-휘발성 메모리 서브시스템으로부터 상기 휘발성 메모리 서브시스템으로 데이터를 전송하라는 지령인 것에 응답하여, 상기 비-휘발성 메모리 서브시스템으로부터 상기 제 1 지령에 의해 요청된 제 1 데이터를 판독하는 단계;
    상기 C/A 버스를 통해 상기 메모리 제어기로부터 적어도 하나의 제 2 지령을 수신하는 단계; 및
    상기 적어도 하나의 제 2 지령이 상기 제 1 지령과 연관되는 것에 응답하여, 상기 휘발성 메모리 서브시스템으로 상기 제 1 데이터의 적어도 하나의 부분을 제공하는 단계를 포함하는, 컴퓨터 시스템에서 메모리 채널을 통해 메모리 제어기에 커플링된 메모리 모듈에 의해 수행되는 방법.
  15. 제 14 항에 있어서,
    상기 C/A 버스를 통해 상기 메모리 제어기로부터 제 3 지령을 수신하는 단계;
    상기 제 3 지령이 상기 휘발성 메모리 서브시스템으로부터 상기 비-휘발성 메모리 서브시스템으로 데이터를 전송하라는 지령인 것에 응답하여, 상기 데이터 버스를 통해 상기 메모리 제어기로부터 상기 제 3 지령과 연관된 추가의 정보를 수신하는 단계;
    상기 C/A 버스를 통해 상기 메모리 제어기로부터 적어도 하나의 제 4 지령을 수신하는 단계; 및
    상기 적어도 하나의 제 4 지령이 상기 제 3 지령과 연관되는 것에 응답하여, 상기 휘발성 메모리 서브시스템으로부터 제 2 데이터를 수신하고 상기 비-휘발성 메모리 서브시스템으로 상기 제 2 데이터를 저장하는 단계를 더 포함하는, 컴퓨터 시스템에서 메모리 채널을 통해 메모리 제어기에 커플링된 메모리 모듈에 의해 수행되는 방법.
  16. 메모리 채널을 통해서 메모리 모듈에 커플링된 메모리 제어기를 가지는 컴퓨터 시스템에서 프로세서에 의해 실행가능한 컴퓨터 판독가능 프로그램 명령들을 저장하는 컴퓨터 판독가능 매체로서,
    상기 메모리 채널은 데이터 버스 및 제어/어드레스 (C/A) 버스를 포함하고,
    상기 메모리 모듈은 상기 메모리 채널에 커플링된 휘발성 메모리 서브시스템, 상기 휘발성 메모리 서브시스템에 커플링된 모듈 제어기, 및 상기 모듈 제어기에 커플링된 비-휘발성 메모리 서브시스템을 포함하며, 상기 컴퓨터 판독가능 프로그램 명령들은, 상기 프로세서에 의해 실행될 때 상기 메모리 제어기로 하여금, 방법을 수행하도록 하며,
    상기 방법은,
    페이지-인 지령을 상기 C/A 버스를 통해서 상기 메모리 모듈로 송신하는 단계;
    상기 데이터 버스 상으로 상기 페이지-인 지령과 연관된 페이지-인 정보를 출력하는 단계로서, 상기 페이지-인 지령은 상기 모듈 제어기로 하여금 상기 페이지-인 정보에 따라 상기 비-휘발성 메모리 서브시스템으로부터 페이지-인 데이터를 판독하도록 하는, 상기 페이지-인 정보를 출력하는 단계; 및
    더미 기록 지령을 상기 메모리 모듈로 발하는 단계를 포함하며,
    상기 더미 기록 지령은 상기 페이지-인 지령과 연관되고, 상기 모듈 제어기로 하여금 상기 휘발성 메모리 서브시스템으로 상기 페이지-인 데이터를 출력하도록 하는, 컴퓨터 판독가능 매체.
  17. 제 16 항에 있어서,
    상기 방법은,
    페이지-아웃 지령을 상기 메모리 모듈로 상기 메모리 채널을 통해서 송신하는 단계;
    상기 데이터 버스 상으로 상기 페이지-아웃 지령과 연관된 페이지-아웃 정보를 출력하는 단계; 및
    더미 판독 지령을 상기 메모리 모듈로 발하는 단계를 더 포함하며,
    상기 더미 판독 지령은 상기 페이지-아웃 지령과 연관되고, 상기 모듈 제어기로 하여금 상기 휘발성 메모리 서브시스템으로부터 페이지-아웃 데이터를 수신하도록 하는, 컴퓨터 판독가능 매체.
  18. 제 14 항에 있어서,
    상기 메모리 모듈은 데이터 버퍼를 더 포함하고,
    상기 방법은,
    상기 휘발성 메모리 서브시스템으로 상기 제 1 데이터의 상기 적어도 하나의 부분을 제공하기 전에 상기 데이터 버퍼로 상기 제 1 데이터의 상기 적어도 하나의 부분을 저장하는 단계를 더 포함하는, 컴퓨터 시스템에서 메모리 채널을 통해 메모리 제어기에 커플링된 메모리 모듈에 의해 수행되는 방법.
  19. 제 18 항에 있어서,
    상기 메모리 모듈은 모듈 제어기를 더 포함하고,
    상기 방법은,
    상기 적어도 하나의 제 2 지령을 수신하기 전에 상기 모듈 제어기로 상기 데이터 버퍼로부터 상기 제 1 데이터의 상기 적어도 하나의 부분의 하나 이상의 버스트를 사전 로드하는 단계를 더 포함하는, 컴퓨터 시스템에서 메모리 채널을 통해 메모리 제어기에 커플링된 메모리 모듈에 의해 수행되는 방법.
  20. 제 18 항에 있어서,
    상기 데이터 버퍼로 하여금 상기 제 1 데이터의 상기 적어도 하나의 부분의 제 1 버스트를 출력하도록 하기 위해 상기 데이터 버퍼로 제 1 판독 지령을 발하는 단계;
    상기 제 1 판독 지령을 발하는 단계에 후속하여 그리고 제 3 메모리 지령에 응답하여 상기 데이터 버퍼로 넌-옵 (non-op) 지령을 발하는 단계로서, 상기 제 3 메모리 지령은 상기 컴퓨터 시스템이 상기 휘발성 메모리 서브시스템에 액세스하라는 메모리 지령인, 상기 넌-옵 지령을 발하는 단계; 및
    상기 넌-옵 지령을 발하는 단계에 후속하여 상기 데이터 버퍼에 제 2 판독 지령을 발하는 단계로서, 상기 제 3 판독 지령은 상기 데이터 버퍼로 하여금 상기 제 1 데이터의 상기 적어도 하나의 부분의 제 2 버스트를 출력하도록 하는, 상기 제 2 판독 지령을 발하는 단계를 더 포함하는, 컴퓨터 시스템에서 메모리 채널을 통해 메모리 제어기에 커플링된 메모리 모듈에 의해 수행되는 방법.
  21. 제 14 항에 있어서,
    기준들의 세트에 따라서 상기 비-휘발성 메모리 서브시스템으로부터 판독된 상기 제 1 데이터를 탐색하는 단계를 더 포함하고,
    상기 제 1 데이터의 상기 적어도 하나의 부분은 상기 기준들의 세트를 만족시키는 상기 비-휘발성 메모리 서브시스템으로부터의 상기 제 1 데이터의 부분을 포함하는, 컴퓨터 시스템에서 메모리 채널을 통해 메모리 제어기에 커플링된 메모리 모듈에 의해 수행되는 방법.
  22. 제 14 항에 있어서,
    상기 제 1 데이터는 패리티 비트들과 함께 상기 비-휘발성 메모리 서브시스템으로부터 판독되고,
    상기 방법은 상기 패리티 비트들 중 하나 이상을 사용하여 상기 제 1 데이터의 손상된 부분들을 복원하는 단계를 더 포함하는, 컴퓨터 시스템에서 메모리 채널을 통해 메모리 제어기에 커플링된 메모리 모듈에 의해 수행되는 방법.
KR1020167014996A 2013-11-07 2014-11-07 하이브리드 메모리 모듈, 및 그를 동작시키는 시스템 및 방법 KR20160083926A (ko)

Applications Claiming Priority (13)

Application Number Priority Date Filing Date Title
US201361901439P 2013-11-07 2013-11-07
US61/901,439 2013-11-07
US201461929942P 2014-01-21 2014-01-21
US61/929,942 2014-01-21
US201461989941P 2014-05-07 2014-05-07
US61/989,941 2014-05-07
US201462041024P 2014-08-22 2014-08-22
US62/041,024 2014-08-22
US201462056469P 2014-09-26 2014-09-26
US62/056,469 2014-09-26
US201462067411P 2014-10-22 2014-10-22
US62/067,411 2014-10-22
PCT/US2014/064698 WO2015070110A2 (en) 2013-11-07 2014-11-07 Hybrid memory module and system and method of operating the same

Publications (1)

Publication Number Publication Date
KR20160083926A true KR20160083926A (ko) 2016-07-12

Family

ID=53042341

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167014996A KR20160083926A (ko) 2013-11-07 2014-11-07 하이브리드 메모리 모듈, 및 그를 동작시키는 시스템 및 방법

Country Status (5)

Country Link
US (1) US11243886B2 (ko)
EP (1) EP3066570A4 (ko)
KR (1) KR20160083926A (ko)
CN (3) CN111274063B (ko)
WO (1) WO2015070110A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180046363A (ko) * 2016-10-27 2018-05-08 삼성전자주식회사 Dram 기반 프로세싱 장치를 위한 확장 아키텍처

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9971511B2 (en) 2016-01-06 2018-05-15 Samsung Electronics Co., Ltd. Hybrid memory module and transaction-based memory interface
KR20180078512A (ko) * 2016-12-30 2018-07-10 삼성전자주식회사 반도체 장치
US20190114232A1 (en) * 2017-10-17 2019-04-18 Christopher Squires Local and offloaded snapshots for volatile memory
CN113360432B (zh) * 2020-03-03 2024-03-12 瑞昱半导体股份有限公司 数据传输系统
CN112115077B (zh) * 2020-08-31 2022-04-19 瑞芯微电子股份有限公司 一种dram内存驱动优化方法和装置
CN115686164A (zh) * 2021-07-26 2023-02-03 瑞昱半导体股份有限公司 供电端装置、供电系统以及非暂态电脑可读取媒体
CN114416453B (zh) * 2022-01-20 2022-11-15 无锡众星微系统技术有限公司 一种基于外设接口的芯片硬件调试方法和装置

Family Cites Families (69)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5119480A (en) * 1989-11-13 1992-06-02 International Business Machines Corporation Bus master interface circuit with transparent preemption of a data transfer operation
US5696917A (en) 1994-06-03 1997-12-09 Intel Corporation Method and apparatus for performing burst read operations in an asynchronous nonvolatile memory
JPH08278916A (ja) 1994-11-30 1996-10-22 Hitachi Ltd マルチチャネルメモリシステム、転送情報同期化方法及び信号転送回路
US5586291A (en) * 1994-12-23 1996-12-17 Emc Corporation Disk controller with volatile and non-volatile cache memories
US5758149A (en) 1995-03-17 1998-05-26 Unisys Corporation System for optimally processing a transaction and a query to the same database concurrently
US5822251A (en) * 1997-08-25 1998-10-13 Bit Microsystems, Inc. Expandable flash-memory mass-storage using shared buddy lines and intermediate flash-bus between device-specific buffers and flash-intelligent DMA controllers
US6571244B1 (en) 1999-10-28 2003-05-27 Microsoft Corporation Run formation in large scale sorting using batched replacement selection
US20100146256A1 (en) * 2000-01-06 2010-06-10 Super Talent Electronics Inc. Mixed-Mode ROM/RAM Booting Using an Integrated Flash Controller with NAND-Flash, RAM, and SD Interfaces
US20050280623A1 (en) 2000-12-18 2005-12-22 Renesas Technology Corp. Display control device and mobile electronic apparatus
JP4817510B2 (ja) 2001-02-23 2011-11-16 キヤノン株式会社 メモリコントローラ及びメモリ制御装置
JP4230122B2 (ja) 2001-03-30 2009-02-25 株式会社ルネサステクノロジ マイクロコンピュータ、書込み方法及び消去方法
TWI240864B (en) 2001-06-13 2005-10-01 Hitachi Ltd Memory device
US6614685B2 (en) 2001-08-09 2003-09-02 Multi Level Memory Technology Flash memory array partitioning architectures
US7254562B2 (en) 2002-07-11 2007-08-07 Hewlett-Packard Development Company, L.P. Rule-based packet selection, storage, and access method and system
JP2004062928A (ja) 2002-07-25 2004-02-26 Hitachi Ltd 磁気ディスク装置及び記憶システム
JP4499982B2 (ja) * 2002-09-11 2010-07-14 株式会社日立製作所 メモリシステム
US7136973B2 (en) * 2004-02-04 2006-11-14 Sandisk Corporation Dual media storage device
US7535759B2 (en) 2004-06-04 2009-05-19 Micron Technology, Inc. Memory system with user configurable density/performance option
US20060075057A1 (en) * 2004-08-30 2006-04-06 International Business Machines Corporation Remote direct memory access system and method
US7301831B2 (en) 2004-09-15 2007-11-27 Rambus Inc. Memory systems with variable delays for write data signals
US7493441B2 (en) 2005-03-15 2009-02-17 Dot Hill Systems Corporation Mass storage controller with apparatus and method for extending battery backup time by selectively providing battery power to volatile memory banks not storing critical data
CA2602900A1 (en) 2005-04-06 2006-10-12 Merck & Co., Inc. Multi-fielded web browser-based searching of data stored in database
US7464225B2 (en) 2005-09-26 2008-12-09 Rambus Inc. Memory module including a plurality of integrated circuit memory devices and a plurality of buffer devices in a matrix topology
US7562271B2 (en) 2005-09-26 2009-07-14 Rambus Inc. Memory system topologies including a buffer device and an integrated circuit memory device
US7490177B2 (en) 2006-01-23 2009-02-10 Infineon Technologies Ag System method for performing a direct memory access for automatically copying initialization boot code in a new memory architecture
JP2007219802A (ja) 2006-02-16 2007-08-30 Hitachi Global Storage Technologies Netherlands Bv 記憶装置、そのコントローラ、および、その制御方法
US7716411B2 (en) 2006-06-07 2010-05-11 Microsoft Corporation Hybrid memory device with single interface
US7554855B2 (en) * 2006-12-20 2009-06-30 Mosaid Technologies Incorporated Hybrid solid-state memory system having volatile and non-volatile memory
KR100851545B1 (ko) 2006-12-29 2008-08-11 삼성전자주식회사 커맨드 및 어드레스 핀을 갖는 낸드 플래시 메모리 및그것을 포함한 플래시 메모리 시스템
US7564722B2 (en) * 2007-01-22 2009-07-21 Micron Technology, Inc. Memory system and method having volatile and non-volatile memory devices at same hierarchical level
US8543742B2 (en) * 2007-02-22 2013-09-24 Super Talent Electronics, Inc. Flash-memory device with RAID-type controller
US8427891B2 (en) 2007-04-17 2013-04-23 Rambus Inc. Hybrid volatile and non-volatile memory device with a shared interface circuit
WO2008139441A2 (en) * 2007-05-12 2008-11-20 Anobit Technologies Ltd. Memory device with internal signal processing unit
US8874831B2 (en) 2007-06-01 2014-10-28 Netlist, Inc. Flash-DRAM hybrid memory module
US8301833B1 (en) * 2007-06-01 2012-10-30 Netlist, Inc. Non-volatile memory module
US8074034B2 (en) * 2007-07-25 2011-12-06 Agiga Tech Inc. Hybrid nonvolatile ram
US7882324B2 (en) 2007-10-30 2011-02-01 Qimonda Ag Method and apparatus for synchronizing memory enabled systems with master-slave architecture
JP4729062B2 (ja) * 2008-03-07 2011-07-20 株式会社東芝 メモリシステム
US8417870B2 (en) * 2009-07-16 2013-04-09 Netlist, Inc. System and method of increasing addressable memory space on a memory board
US8219740B2 (en) 2008-06-25 2012-07-10 International Business Machines Corporation Flash sector seeding to reduce program times
US8037380B2 (en) * 2008-07-08 2011-10-11 International Business Machines Corporation Verifying data integrity of a non-volatile memory system during data caching process
US8457128B2 (en) 2009-04-08 2013-06-04 Ixia Capturing packets with parallel capture engines
US7944729B2 (en) 2009-01-28 2011-05-17 Seagate Technology Llc Simultaneously writing multiple addressable blocks of user data to a resistive sense memory cell array
US8180981B2 (en) * 2009-05-15 2012-05-15 Oracle America, Inc. Cache coherent support for flash in a memory hierarchy
KR101605381B1 (ko) * 2009-09-28 2016-03-23 삼성전자주식회사 비휘발성 메모리 장치, 이를 구비하는 비휘발성 메모리 시스템
WO2011121948A1 (ja) 2010-03-29 2011-10-06 パナソニック株式会社 光ディスク記録装置及び記録信号生成装置
JP2011242884A (ja) * 2010-05-14 2011-12-01 Toshiba Corp メモリシステム及びそのデータ転送方法
EP2601475B1 (en) 2010-08-04 2018-10-03 Trijicon, Inc. Fused optic
US9141526B2 (en) * 2010-09-16 2015-09-22 International Business Machines Corporation Reclaiming units by searching units for a predetermined criterion and storing data from a valid subunit
US9002826B2 (en) 2010-10-27 2015-04-07 Qualcomm Incorporated Media file caching for an electronic device to conserve resources
JP2012155541A (ja) * 2011-01-26 2012-08-16 Toshiba Corp データ記憶装置、メモリ制御装置及びメモリ制御方法
US8595415B2 (en) * 2011-02-02 2013-11-26 Micron Technology, Inc. At least semi-autonomous modules in a memory system and methods
JP5295286B2 (ja) * 2011-02-23 2013-09-18 株式会社日立製作所 記憶装置およびそれを搭載した計算機
US20120221767A1 (en) * 2011-02-28 2012-08-30 Apple Inc. Efficient buffering for a system having non-volatile memory
US8924627B2 (en) * 2011-03-28 2014-12-30 Western Digital Technologies, Inc. Flash memory device comprising host interface for processing a multi-command descriptor block in order to exploit concurrency
JP2014513484A (ja) * 2011-04-29 2014-05-29 エルエスアイ コーポレーション 暗号化トランスポート・ソリッドステート・ディスク・コントローラ
TWI467372B (zh) * 2011-07-06 2015-01-01 Phison Electronics Corp 指令執行方法、記憶體控制器與記憶體儲存裝置
US8935491B2 (en) 2011-07-15 2015-01-13 Throughputer, Inc. Memory architecture for dynamically allocated manycore processor
CN102541678B (zh) * 2011-12-30 2013-09-18 中国人民解放军国防科学技术大学 多通道与非型快闪并行存储控制器
US20130329491A1 (en) 2012-06-12 2013-12-12 Jichuan Chang Hybrid Memory Module
US9128822B2 (en) 2012-06-22 2015-09-08 Winbond Electronics Corporation On-chip bad block management for NAND flash memory
US9405684B1 (en) 2012-09-28 2016-08-02 Emc Corporation System and method for cache management
US9092320B2 (en) 2012-10-15 2015-07-28 Hitachi, Ltd. Storage system which includes non-volatile semiconductor storage medium, and storage control method of storage system
US20140189202A1 (en) 2012-12-28 2014-07-03 Hitachi, Ltd. Storage apparatus and storage apparatus control method
US9741442B2 (en) 2013-03-12 2017-08-22 Sandisk Technologies Llc System and method of reading data from memory concurrently with sending write data to the memory
US9176877B2 (en) * 2013-04-15 2015-11-03 International Business Machines Corporation Provision of early data from a lower level cache memory
US9129674B2 (en) 2013-06-27 2015-09-08 Intel Corporation Hybrid memory device
US9336135B1 (en) 2013-07-24 2016-05-10 NXGN Data, Inc. Systems and methods for performing search and complex pattern matching in a solid state drive
US9779138B2 (en) 2013-08-13 2017-10-03 Micron Technology, Inc. Methods and systems for autonomous memory searching

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180046363A (ko) * 2016-10-27 2018-05-08 삼성전자주식회사 Dram 기반 프로세싱 장치를 위한 확장 아키텍처
US11934669B2 (en) 2016-10-27 2024-03-19 Samsung Electronics Co., Ltd. Scaling out architecture for DRAM-based processing unit (DPU)

Also Published As

Publication number Publication date
CN111208951A (zh) 2020-05-29
EP3066570A4 (en) 2017-08-02
US20200042456A1 (en) 2020-02-06
WO2015070110A4 (en) 2016-01-07
CN105934747B (zh) 2020-03-06
CN111274063B (zh) 2024-04-16
CN111309256A (zh) 2020-06-19
EP3066570A2 (en) 2016-09-14
CN105934747A (zh) 2016-09-07
WO2015070110A2 (en) 2015-05-14
CN111176585A (zh) 2020-05-19
CN111309256B (zh) 2024-04-30
WO2015070110A3 (en) 2015-11-19
CN111274063A (zh) 2020-06-12
US11243886B2 (en) 2022-02-08

Similar Documents

Publication Publication Date Title
US10380022B2 (en) Hybrid memory module and system and method of operating the same
US11243886B2 (en) Hybrid memory module and system and method of operating the same
US10248328B2 (en) Direct data move between DRAM and storage on a memory module
US10198350B2 (en) Memory module having volatile and non-volatile memory subsystems and method of operation
US20170336990A1 (en) Multi-tier scheme for logical storage management
US20120278664A1 (en) Memory system
CN107710175B (zh) 存储器模块以及操作系统和方法
US20190324859A1 (en) Method and Apparatus for Restoring Data after Power Failure for An Open-Channel Solid State Drive
US20230385192A1 (en) Memory module having volatile and non-volatile memory subsystems and method of operation
US10769074B2 (en) Computer memory content movement
US10838646B2 (en) Method and apparatus for presearching stored data
US11733920B2 (en) NVMe simple copy command support using dummy virtual function
CN112912834B (zh) 存取单元和管理片段存储器操作
CN111176585B (zh) 混合内存模块以及操作混合内存模块的系统和方法
CN111208951B (zh) 混合内存模块以及操作混合内存模块的系统和方法
US11513725B2 (en) Hybrid memory module having a volatile memory subsystem and a module controller sourcing read strobes to accompany read data from the volatile memory subsystem
US11966582B2 (en) Data storage device that detects and releases bottlenecks
US20240094911A1 (en) Dynamic And Shared CMB And HMB Allocation
US20240143512A1 (en) Write buffer linking for easy cache reads

Legal Events

Date Code Title Description
WITB Written withdrawal of application