KR20170008233A - 메모리 용량 압축을 이용하는 메모리 제어기들 및 관련된 프로세서-기반 시스템들 및 방법들 - Google Patents

메모리 용량 압축을 이용하는 메모리 제어기들 및 관련된 프로세서-기반 시스템들 및 방법들 Download PDF

Info

Publication number
KR20170008233A
KR20170008233A KR1020167032264A KR20167032264A KR20170008233A KR 20170008233 A KR20170008233 A KR 20170008233A KR 1020167032264 A KR1020167032264 A KR 1020167032264A KR 20167032264 A KR20167032264 A KR 20167032264A KR 20170008233 A KR20170008233 A KR 20170008233A
Authority
KR
South Korea
Prior art keywords
memory
compressed
data
physical buffer
controller
Prior art date
Application number
KR1020167032264A
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 KR20170008233A publication Critical patent/KR20170008233A/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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/04Addressing variable-length words or parts of words
    • 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
    • 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
    • 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
    • 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/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • 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/1056Simplification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/251Local memory within processor subsystem
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/30Providing cache or TLB in specific location of a processing system
    • G06F2212/305Providing cache or TLB in specific location of a processing system being part of a memory device, e.g. cache DRAM
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/401Compressed data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/608Details relating to cache mapping
    • 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/0638Organizing or formatting or addressing of data
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

본원에서 개시되는 양상들은 메모리 용량 압축을 이용하는 메모리 제어기들 및 관련된 프로세서-기반 시스템들 및 방법들을 포함한다. 특정한 양상들에서, 메모리 용량 압축을 제공할 수 있는 압축된 메모리 제어기가 이용된다. 일부 양상들에서, 효율적인 압축된 데이터 저장을 위해 물리적 버퍼 어드레스에서 시스템 메모리의 압축된 데이터를 허용하도록 물리적 버퍼 어드레스로의 물리적 어드레스(PA)의 부가적인 변환이 수행되는 라인-기반 메모리 용량 압축 방식이 이용될 수 있다. TLB(translation lookaside buffer)는 또한, 시스템 메모리의 물리적 버퍼 어드레스로 PA의 변환을 보다 효율적으로 수행하도록 시스템 메모리의 물리적 버퍼 어드레스에 대응하는 PA 태그들을 포함하는 TLB 엔트리를 저장하는데 이용될 수 있다. 특정 양상들에서, 라인-기반 메모리 용량 압축 방식, 페이지-기반 메모리 용량 압축 방식, 또는 하이브리드 라인-페이지-기반 메모리 용량 압축 방식이 이용될 수 있다.

Description

메모리 용량 압축을 이용하는 메모리 제어기들 및 관련된 프로세서-기반 시스템들 및 방법들{MEMORY CONTROLLERS EMPLOYING MEMORY CAPACITY COMPRESSION, AND RELATED PROCESSOR-BASED SYSTEMS AND METHODS}
우선권 출원들
[0001] 본 출원은 2014년 5월 21일 출원되고 발명의 명칭이 “MEMORY CONTROLLERS EMPLOYING MEMORY CAPACITY AND/OR BANDWIDTH COMPRESSION, AND RELATED PROCESSOR-BASED SYSTEMS AND METHODS”인 미국 가특허 출원 번호 제62/001,545호를 우선권으로 청구하며, 이는 그 전체가 인용에 의해 본원에 포함된다.
[0002] 본 출원은 또한, 2014년 12월 16일 출원되고 발명의 명칭이 “MEMORY CONTROLLERS EMPLOYING MEMORY CAPACITY AND/OR BANDWIDTH COMPRESSION, AND RELATED PROCESSOR-BASED SYSTEMS AND METHODS”인 미국 가특허 출원 번호 제62/092,326 호를 우선권으로 청구하며, 이는 그 전체가 인용에 의해 본원에 포함된다.
[0003] 본 출원은 또한, 2014년 12월 16일 출원되고 발명의 명칭이 “MEMORY CONTROLLERS EMPLOYING MEMORY CAPACITY AND/OR BANDWIDTH COMPRESSION WITH NEXT READ ADDRESS PREFETCHING, AND RELATED PROCESSOR-BASED SYSTEMS AND METHODS”인 미국 가특허 출원 번호 제62/092,409호를 우선권으로 청구하며, 이는 그 전체가 인용에 의해 본원에 포함된다.
[0004] 본 출원은 또한, 2015년 5월 19일 출원되고 발명의 명칭이 “MEMORY CONTROLLERS EMPLOYING MEMORY CAPACITY COMPRESSION, AND RELATED PROCESSOR-BASED SYSTEMS AND METHODS”인 미국 특허 출원 번호 제14/716,001호를 우선권으로 청구하며, 이는 그 전체가 인용에 의해 본원에 포함된다.
본 개시의 분야
[0005] 본 개시의 기술은 일반적으로, 컴퓨터 메모리 시스템들에 관한 것으로서, 특히 메모리에 대한 메모리 액세스 인터페이스를 중앙 처리 장치(CPU)들에 제공하기 위한 컴퓨터 메모리 시스템의 메모리 제어기들에 관한 것이다.
[0006] 마이크로프로세서들은 매우 다양한 애플리케이션들에서 계산 작업들을 수행한다. 통상적인 마이크로프로세서 애플리케이션은 소프트웨어 명령들을 실행하는 하나 또는 그 초과의 중앙 처리 장치들(CPU들)을 포함한다. 소프트웨어 명령들은 메모리의 위치로부터 데이터를 패치(fetch)하고, 패치된 데이터를 이용하여 하나 또는 그 초과의 CPU 동작들을 수행하고, 결과를 생성하도록 CPU에 지시한다. 결과는 그 후 메모리에 저장될 수 있다. 예들로서, 이 메모리는 CPU에 대해 로컬적인 캐시, CPU 블록의 CPU들 간의 공유 로컬 캐시, 다수의 CPU 블록 간의 공유 캐시, 또는 마이크로프로세서의 메인 메모리일 수 있다.
[0007] 이와 관련하여, 도 1은 CPU-기반 시스템(12)을 포함하는 예시적인 SOC(system-on-a-chip)(10)의 개략도이다. CPU-기반 시스템(12)은 이 예에서 복수의 CPU 블록들(14(1)-14(N))을 포함하며, 여기서 'N'은 원하는 임의의 수의 CPU 블록들(14)과 동일하다. 각각의 CPU 블록(14(1)-14(N))은 2개의 CPU들(16(1), 16(2)) 및 공유 레벨 2(L2) 캐시(18(1)-18(N))를 각각 포함한다. 공유 레벨 3(L3) 캐시(20)는 또한, 각각의 CPU 블록들(14(1)-14(N)) 또는 이들 간에 공유되는 임의의 것에 의해 이용되는 캐시된 데이터를 저장하기 위해 제공된다. CPU 블록들(14(1)-14(N)) 각각이 공유 L3 캐시(20)는 물론 다른 공유 자원들에 액세스하도록 허용하는 내부 시스템 버스(22)가 제공된다. 내부 시스템 버스(22)를 통해 CPU 블록들(14(1)-14(N))에 의해 액세스될 수 있는 다른 공유 자원들은, 메인 외부 메모리(예를 들어, DDR(double-rate DRAM(dynamic random access memory))에 액세스하기 위해 메모리 제어기(24), 주변기기들(26), 다른 저장소(28), PCI-e(express PCI(peripheral component interconnect)) 인터페이스(30), DMA(direct memory access) 제어기(32), 및 IMC(34)를 포함할 수 있다.
[0008] 도 1의 CPU-기반 시스템(12)에서 실행중인 CPU-기반 애플리케이션들은 복잡도 및 성능 면에서 증가하고, 공유 L2 캐시(18) 및 공유 L3 캐시(20)와 메모리 제어기(24)를 통해 액세스 가능한 외부 메모리의 메모리 용량 요건들을 또한 증가시킬 수 있다. 그러나 CPU-기반 시스템에 부가적인 메모리 용량을 제공하는 것은 집적 회로 상에서 메모리를 위해 필요한 영역 및 비용들을 증가시킨다. 예를 들어, CPU-기반 시스템, 예컨대, SOC에서 제공되는 도 1의 CPU-기반 시스템(12)의 경우에, 부가적인 메모리 용량을 부가하는 것은 SOC 패키징을 증가시킬 수 있다. 데이터 압축은 물리적 메모리 용량을 증가시킴 없이 CPU-기반 시스템의 유효 메모리 용량을 증가시키기 위해 이용될 수 있다. 그러나 데이터 압축은 CPU 메모리 액세스 횟수들을 감소시키고, 이에 따라 CPU 성능을 감소시킬 수 있는데, 그 이유는 데이터가 압축된 형태로 저장되고 그러면 메모리 액세스 동안 압축되지 않아야 하기 때문이다.
[0009] 따라서, CPU 성능에 관한 영향을 또한 최소화하면서, CPU-기반 애플리케이션의 복잡도 및 성능 요건들이 증가함에 따라 물리적 메모리 크기의 증가를 완화하면서 CPU-기반 시스템의 메모리 용량을 증가시키는 것이 바람직할 것이다.
[0010] 본원에서 개시되는 양상들은 메모리 용량 압축을 이용하는 메모리 제어기들 및 관련된 프로세서-기반 시스템들 및 방법들을 포함한다. 특정한 양상들에서, 메모리 용량 압축을 제공할 수 있는 압축된 메모리 제어기가 이용된다. 일부 양상들에서, 효율적인 압축된 데이터 저장을 위해 물리적 버퍼 어드레스에서 시스템 메모리의 압축된 데이터를 허용하도록 물리적 버퍼 어드레스로의 물리적 어드레스(PA)의 부가적인 변환이 수행되는 라인-기반 메모리 용량 압축 방식이 이용될 수 있다. TLB(translation lookaside buffer)는 또한, 시스템 메모리의 물리적 버퍼 어드레스로 PA의 변환을 보다 효율적으로 수행하도록 시스템 메모리의 물리적 버퍼 어드레스에 대응하는 PA 태그들을 포함하는 TLB 엔트리를 저장하는데 이용될 수 있다. 특정 양상들에서, 라인-기반 메모리 용량 압축 방식, 페이지-기반 메모리 용량 압축 방식, 또는 하이브리드 라인-페이지-기반 메모리 용량 압축 방식이 이용될 수 있다. 특수 메모리 압축 용량 방식들, 예컨대, 제로-라인 압축(zero-line compression)이 데이터 압축을 추가로 최적화하기 위해 이용될 수 있다.
[0011] 이와 관련하여, 일 양상에서, 압축된 메모리 제어기가 제공된다. 압축된 메모리 제어기는 시스템 메모리에 액세스하도록 구성된 메모리 인터페이스를 포함한다. 압축된 메모리 제어기는 또한 압축된 제어기를 포함한다. 압축된 제어기는 시스템 버스를 통해 시스템 메모리에서 액세스될 PA를 포함하는 메모리 액세스 요청을 수신하도록 구성된다. 압축된 제어기는 추가로, 시스템 메모리의 PA에 각각 대응하는 복수의 물리적 버퍼 어드레스들을 포함하는 마스터 디렉토리의 엔트리의 물리적 버퍼 어드레스와 PA의 맵핑(mapping)에 기초하여, 물리적 버퍼 어드레스로 수신된 메모리 액세스 요청의 수신된 PA를 변환하도록 구성된다. 압축된 제어기는 또한 수신된 메모리 액세스 요청을 수행하기 위해 물리적 버퍼 어드레스에 기초하여 시스템 메모리에 액세스하도록 구성된다.
[0012] 다른 양상에서, 압축된 메모리 제어기가 제공된다. 압축된 메모리 제어기는 시스템 메모리에 액세스하기 위한 수단 및 압축하기 위한 수단을 포함한다. 압축하기 위한 수단은 시스템 버스를 통해 시스템 메모리에서 액세스될 PA를 포함하는 메모리 액세스 요청을 수신하기 위한 것이다. 압축하기 위한 수단은 또한, 수신된 메모리 액세스 요청을 수행하기 위해 메모리 인터페이스를 통해 PA에 기초한 시스템 메모리에 액세스하기 위한 것이다. 압축하기 위한 수단은 또한, 시스템 메모리의 PA에 각각 대응하는 복수의 물리적 버퍼 어드레스들을 포함하는 마스터 디렉토리의 엔트리의 물리적 버퍼 어드레스와 PA의 맵핑에 기초하여, 물리적 버퍼 어드레스로 수신된 메모리 액세스 요청의 수신된 PA를 변환하기 위한 것이다. 압축하기 위한 수단은 또한, 수신된 메모리 액세스 요청을 수행하기 위해 시스템 메모리의 물리적 버퍼 어드레스에 액세스하기 위한 것이다.
[0013] 다른 양상에서, 중앙 처리 장치(CPU)-기반 시스템의 시스템 메모리에 대한 메모리 액세스 요청을 위한 데이터를 압축하는 방법이 제공된다. 방법은 시스템 버스를 통해 시스템 메모리에서 액세스될 PA를 포함하는 메모리 액세스 요청을 수신하는 단계를 포함한다. 방법은 추가로, 시스템 메모리의 PA에 각각 대응하는 복수의 물리적 버퍼 어드레스들을 포함하는 마스터 디렉토리의 엔트리의 물리적 버퍼 어드레스와 PA의 맵핑에 기초하여, 물리적 버퍼 어드레스로 수신된 메모리 액세스 요청의 수신된 PA를 변환하는 단계를 포함한다. 방법은 또한 수신된 메모리 액세스 요청을 수행하도록 물리적 버퍼 어드레스에 기초하여 시스템 메모리에 액세스하는 단계를 포함한다.
[0014] 다른 양상에서, CPU 시스템이 제공된다. CPU 시스템은 시스템 버스, 시스템 버스에 통신 가능하게 커플링되는 적어도 하나의 CPU 코어 및 시스템 버스에 통신 가능하게 커플링되는 압축된 메모리 제어기를 포함한다. CPU 시스템은 또한 시스템 버스에 통신 가능하게 커플링되는 시스템 메모리를 포함한다. 시스템 메모리는 메모리 데이터를 저장하도록 구성된다. CPU 시스템은 추가로, 태그 어레이 및 데이터 어레이에서 복수의 TLB(translation lookaside buffer) 엔트리들로 구성된 TLB를 포함한다. 복수의 TLB 엔트리들 중의 각각의 TLB 엔트리는, PA에 대응하는 태그 어레이의 태그 및 PA에 대응하는 데이터를 압축하기 위해 시스템 메모리에 대한 적어도 하나의 물리적 버퍼 어드레스를 포함하는 마스터 디렉토리로부터의 엔트리를 저장하도록 구성된다. CPU 시스템은 또한 시스템 버스에 통신 가능하게 커플링되는 캐시를 포함한다. 캐시는 PA에 대응하는 압축되지 않은 메모리 데이터를 저장하도록 각각 구성되는 복수의 캐시 엔트리들을 포함한다. 캐시는, 시스템 버스를 통해 적어도 하나의 CPU 코어 및 압축된 메모리 제어기로부터 메모리 액세스 요청을 수신하도록 구성된다. 캐시는 추가로, PA가 캐시의 캐시 엔트리에 포함된 경우 수신된 메모리 액세스 요청의 PA에 대응하는 메모리 데이터를 제공하도록 구성된다. 압축된 메모리 제어기는 시스템 버스를 통해 시스템 메모리에서 액세스될 PA를 포함하는 메모리 액세스 요청을 수신하도록 구성된다. 메모리 액세스 요청의 PA가 캐시의 캐시 엔트리에 포함되지 않는 경우, 압축된 메모리 제어기는 추가로, 수신된 메모리 액세스 요청에 대한 PA가 TLB의 TLB 엔트리에 포함되는지를 결정하도록 구성된다. PA가 TLB의 TLB 엔트리에 포함된 경우, 압축된 메모리 제어기는 TLB를 포함하는 TLB 엔트리의 물리적 버퍼 어드레스로서 수신된 메모리 액세스 요청의 수신된 PA를 변환하도록 구성된다. PA가 TLB의 TLB 엔트리에 포함되지 않는 경우, 압축된 메모리 제어기는 마스터 디렉토리의 PA에 대응하는 엔트리의 물리적 버퍼 어드레스의 물리적 버퍼 어드레스로서 수신된 메모리 액세스 요청의 수신된 PA를 변환하도록 구성된다. 압축된 메모리 제어기는 추가로, 수신된 메모리 액세스 요청을 수행하도록 물리적 버퍼 어드레스에 기초하여 시스템 메모리에 액세스하도록 구성된다.
[0015] 다른 양상들에서, 소형 데이터 블록 압축에 매우 적합할 수 있는 압축 방법들 및 포맷이 개시된다. 이 압축 방법들 및 포맷들은 본원에서 개시되는 메모리 용량 및/또는 메모리 대역폭 압축 양상들에 대해 이용될 수 있다.
[0016] 이들 압축된 메모리 제어기들 및 압축 방식들의 일부 또는 전부를 통해, CPU 성능에 관한 영향을 또한 최소화하면서, CPU-기반 애플리케이션의 복잡도 및 성능 요건들이 증가함에 따라 물리적 메모리 크기의 증가를 완화하면서 CPU-기반 시스템의 메모리 용량을 증가시키는 것이 가능할 수 있다.
[0017] 도 1은 중앙 처리 장치(CPU)-기반 시스템을 포함하는 예시적인 SOC(system-on-a-chip)의 개략도이다.
[0018] 도 2는 복수의 CPU들 및 메모리 용량 및/또는 메모리 대역폭 압축을 이용하는 압축된 메모리 제어기를 갖는 예시적인 CPU-기반 시스템을 포함하는 SOC의 개략도이다.
[0019] 도 3은 도 2의 압축된 메모리 제어기의 보다 상세한 개략도이며, 여기서 압축된 메모리 제어기는 추가로, 메모리 용량 및/또는 메모리 대역폭 압축을 제공하는데 이용되는 선택적인 내부 메모리에 통신 가능하게 커플링된다.
[0020] 도 4는 도 3의 압축된 메모리 제어기에 의해 구현될 수 있는 예시적인 라인-기반 버퍼 메모리 용량 압축 방식의 개략도이다.
[0021] 도 5는 페이지-기반 버퍼 메모리 용량 압축 방식을 제공하기 위해 도 3의 압축된 메모리 제어기에 의해 액세스 가능한 압축된 메모리에 저장된 예시적인 DP(data page)의 개략도이다.
[0022] 도 6은 페이지-기반 버퍼 메모리 용량 압축 방식을 제공하기 위해 도 3의 압축된 메모리 제어기에 의해 액세스 가능하고 압축된 메모리에 저장된 압축된 데이터 페이지에 대한 DPA(data page address)들에 물리적 어드레스(PA)들을 상관시키도록 구성된 예시적인 TLB(translation lookaside buffer)의 개략도이다.
[0023] 도 7은 도 4 내지 도 6을 비롯해서, 페이지-기반 또는 라인-기반 버퍼 메모리 용량 압축 방식에서 이용될 수 있는 예시적인 프리(free) 리스트 버퍼의 개략도이다.
[0024] 도 8은 도 3의 압축된 메모리 제어기에 의해 구현될 수 있는 예시적인 하이브리드 라인/페이지-기반 버퍼 메모리 용량 압축 방식의 개략도이다.
[0025] 도 9는 도 8의 하이브리드 라인/페이지-기반 버퍼 메모리 용량 압축 방식을 제공하는 압축된 캐시 라인들을 저장하기 위해, 도 3의 압축된 메모리 제어기에 의해 액세스 가능한 압축된 메모리에 저장된, 복수의 데이터 메모리 블록들을 각각 포함하는 복수의 데이터 버퍼(DB)들로 구성된 예시적인 데이터 페이지(DP)의 개략도이다.
[0026] 도 10은 메모리 액세스를 위해, 도 8의 하이브리드 라인/페이지-기반 버퍼 메모리 용량 압축 방식에 따라, 도 9의 할당된 데이터 페이지(DP) 내의 할당된 DB로 PA를 변환하는 도 3의 압축된 메모리 제어기의 예시적인 프로세스를 예시하는 흐름도이다.
[0027] 도 11a는 압축된 메모리 제어기의 어드레스 변환으로 인한 성능 손실을 보상하기 위해 선택적인 레벨 L4 캐시를 부가적으로 포함하는 도 3의 SOC의 예를 예시한다.
[0028] 도 11b는 히트 또는 미스가 L4 캐시에서 결정되기 이전에 PA를 룩업하도록 압축된 메모리 제어기에서 L4 캐시 및 TLB(translation lookaside buffer)를 프라이밍(priming)하는 도 11a의 SOC의 예를 도시한다.
[0029] 도 12는 예시적인 동적 메모리 사이징의 개략도이다.
[0030] 도 13은 도 3의 압축된 메모리 제어기에 의해 구현될 수 있는 예시적인 메모리 대역폭 압축 방식의 개략도이다.
[0031] 도 14는 압축된 메모리 제어기의 어드레스 변환으로 인한 성능 손실을 보상하기 위해 선택적인 레벨 L4 캐시를 포함하는 도 3의 SOC의 예를 예시한다.
[0032] 도 15 내지 도 21은 예시적인 데이터 블록 압축 포맷들 및 방식들을 예시하며, 이들 중 임의의 것은 메모리 데이터 블록들을 압축하고 압축된 메모리 데이터 블록들을 압축해제하기 위해 압축된 메모리 제어기에 의해 이용될 수 있다.
[0033] 이제 도면 그림들을 참조하여, 본 개시의 여러 예시적인 양상들이 설명된다. "예시적인"인 이란 단어는, “예, 인스턴스 또는 예시로서 기능하는” 것을 의미하도록 본원에서 사용된다. 본원에서 "예시적인" 것으로 설명되는 임의의 양상은 반드시 다른 양상들에 비해 선호되거나 유리한 것으로 해석될 필요는 없다.
[0034] 본원에서 개시되는 양상들은 메모리 용량 압축을 이용하는 메모리 제어기들 및 관련된 프로세서-기반 시스템들 및 방법들을 포함한다. 특정한 양상들에서, 메모리 용량 압축을 제공할 수 있는 압축된 메모리 제어기가 이용된다. 일부 양상들에서, 효율적인 압축된 데이터 저장을 위해 물리적 버퍼 어드레스에서 시스템 메모리의 압축된 데이터를 허용하도록 물리적 버퍼 어드레스로의 물리적 어드레스(PA)의 부가적인 변환이 수행되는 라인-기반 메모리 용량 압축 방식이 이용될 수 있다. TLB(translation lookaside buffer)는 또한, 시스템 메모리의 물리적 버퍼 어드레스로 PA의 변환을 보다 효율적으로 수행하도록 시스템 메모리의 물리적 버퍼 어드레스에 대응하는 PA 태그들을 포함하는 TLB 엔트리를 저장하는데 이용될 수 있다. 특정 양상들에서, 라인-기반 메모리 용량 압축 방식, 페이지-기반 메모리 용량 압축 방식, 또는 하이브리드 라인-페이지-기반 메모리 용량 압축 방식이 이용될 수 있다. 특수 메모리 압축 용량 방식들, 예컨대, 제로-라인 압축(zero-line compression)이 데이터 압축을 추가로 최적화하기 위해 이용될 수 있다.
[0035] 이와 관련하여, 도 2는 도 1의 CPU-기반 시스템(12)과 유사한, 복수의 CPU 블록들(14(1)-14(N))을 갖는 예시적인 CPU-기반 시스템(12')을 포함하는 SOC(10')의 개략도이다. 도 2의 CPU-기반 시스템(12')은 도 1과 도 2 간의 공통 엘리먼트 번호들에 의해 언급되는 도 1의 CPU-기반 시스템(12)과 일부 공통적인 컴포넌트들을 포함하며, 이에 따라 다시 설명되지 않을 것이다. 그러나 도 2의 CPU-기반 시스템(12')에서, 압축된 메모리 제어기(36)가 제공된다. 압축된 메모리 제어기(36)는 시스템 메모리(38)에 대한 액세스를 제어한다. 시스템 메모리(38)는 비-제한적인 예로서, 하나 또는 그 초과의 DDR(double data rate) DRAM들(dynamic random access memories)(40(1)-40(R))(이하 DRAM(40(1)-40(R)))을 포함할 수 있다. 압축된 메모리 제어기(36)는 이 예에서, 아래에서 그리고 본원에서 개시되는 양상들에 따라 메모리 용량 및/또는 메모리 대역폭 압축을 이용한다. 아래의 예시적인 양상들에서 보다 상세히 논의되는 바와 같이, 압축된 메모리 제어기(36)는, 도 1의 CPU-기반 시스템(12)을 초과하여 물리적 메모리 크기를 증가시켜야 할 필요가 없을 뿐만 아니라, CPU 성능에 관한 영향을 최소화하거나 영향을 주지 않는 방식으로, CPU-기반 시스템(12')이 메모리 용량을 효과적으로 증가시키도록 허용한다. 도 1의 CPU-기반 시스템(12)의 메모리 제어기(24)와 유사하게, 도 2의 CPU-기반 시스템(12')의 압축된 메모리 제어기(36)는 내부 시스템 버스(22)를 통해 CPU 블록들(14(1)-14(N))에 의해 공유된다.
[0036] 추가로, 도 2에 관하여, 각각의 CPU 블록(14(1)-14(N))의 CPU들(16(1) 및 16(2))은 단일 하드웨어 스레드 또는 다수의 하드웨어 스레드를 포함할 수 있다. 다수의 하드웨어 스레드들이 CPU들(16(1) 및 16(2)) 각각에서 제공되는 경우, CPU들(16(1) 및 16(2))의 레이턴시는 결과적으로 증가될 수 있다. 따라서, CPU 블록들(14(1)-14(N))의 각각의 CPU(16(1) 및 16(2))에 다수의 스레드들에 대한 스레드 정보를 저장하기 위해 CPU-기반 시스템(12)의 CPU 블록들(14(1)-14(N))에, 공유 캐시 메모리의 증가된 메모리 용량을 제공하는 것이 바람직할 수 있다. 이와 관련하여, 아래에서 보다 상세히 논의된 바와 같이, CPU-기반 시스템(12')은 또한 모든 CPU 블록들(14(1)-14(N))에 대한 공유 캐시 메모리인 압축된 캐시(42)를 포함할 수 있다. 이 예에서, 압축된 캐시(42)는 L3 캐시이다. 압축된 캐시(42)를 제공함으로써, 공유 캐시의 메모리 용량은, 예를 들어, 도 1의 CPU-기반 시스템(12)의 공유 L3 캐시(20)를 초과하여 물리적 메모리 크기를 증가시켜야 할 필요 없이도 증가될 수 있다.
[0037] 따라서, 요약하면, 도 2의 CPU-기반 시스템(12')에서 압축된 메모리 제어기(36) 및/또는 압축된 캐시(42)를 제공함으로써, CPU-기반 시스템(12')의 메모리 용량은, 도 1의 CPU-기반 시스템(12)을 초과하여 물리적 메모리 크기를 최소로 증가시키거나 증가시켜야 할 필요가 없을 뿐만 아니라, CPU 성능에 영향을 주지 않거나 영향을 최소화하는 방식으로, 증가될 수 있다. 본 개시의 잔여부는 도 2의 CPU-기반 시스템(12')의 압축된 메모리 제어기(36) 및/또는 압축된 캐시(42)의 예시적인 양상들 및 특징들을 논의할 것이다.
[0038] 이와 관련하여, 도 3은 도 2의 압축된 메모리 제어기(36)의 예시적인 내부 컴포넌트들의 보다 상세한 개략도를 예시한다. 이 예에서, 압축된 메모리 제어기(36)는 도 2의 CPU 블록들(14(1)-14(N))을 포함하는 반도체 다이들(46(1), 46(2))과 별개의 반도체 다이(44) 상에 제공된다. 대안적으로, 압축된 메모리 제어기(36)는 CPU 블록들(14(1)-14(N))과의 공통 반도체 다이에 포함될 수 있다. 다이 구성들과 무관하게, 압축된 메모리 제어기(36)는 CPU 블록들(14(1)-14(N))이 내부 시스템 버스(22)를 통해 압축된 메모리 제어기(36)에 대해 메모리 액세스 요청들을 행하고, 압축된 메모리 제어기(36)를 통해 메모리로부터 데이터를 수신할 수 있도록 제공된다.
[0039] 도 3을 계속 참조하여, 압축된 메모리 제어기(36)는 DRAM(40(1)-40(R))로서 도 2 및 도 3에서 도시되는 시스템 메모리(38)에 대한 메모리 액세스를 위한 동작들을 제어한다. 압축된 메모리 제어기(36)는 메모리 액세스 요청들을 서비스하는데 이용되는 복수의 DRAM 인터페이스들((48(1)-48(P))(예를 들어, DDR 인터페이스들)을 포함한다. 이와 관련하여, 압축된 메모리 제어기(36)는 이 예에서 압축된 제어기(50)를 포함한다. 압축된 제어기(50)는 도 2의 CPU 블록들(14(1)-14(N))로부터의 메모리 액세스 요청들에 대한 응답으로, 시스템 메모리(38)에 저장된 데이터의 압축 및 시스템 메모리(38)로부터 리트리브된 데이터의 압축해제를 제어한다. 이러한 방식으로, CPU 블록들(14(1)-14(N))에는 압축된 메모리 제어기(36)에 의해 액세스되는 메모리의 실제 용량보다 더 큰 가상 메모리 어드레스 공간이 제공될 수 있다. 압축된 제어기(50)는 또한 내부 시스템 버스(22)를 통해 CPU 블록들(14(1)-14(N))에 제공된 정보의 대역폭 압축을 수행하도록 구성될 수 있다.
[0040] 아래에서 보다 상세히 논의될 바와 같이, 압축된 제어기(50)는 메모리 용량 및/또는 대역폭 압축을 제공하기 위한 임의의 수의 압축 기술들 및 알고리즘들을 수행할 수 있다. 로컬 메모리(52)는 이러한 압축 기술들 및 알고리즘들을 수행하기 위해 압축된 제어기(50)에 의해 필요한 데이터 구조들 및 다른 정보를 위해 제공된다. 이와 관련하여, 이 예에서 정적 랜덤 액세스 메모리(SRAM)(54)의 형태로 제공되는 로컬 메모리(52)는 또한, 압축 기술들 및 알고리즘들을 수행하기 위해 압축된 제어기(50)에 의해 필요한 데이터 구조들 및 다른 정보를 저장하도록 압축된 메모리 제어기(36)에 제공된다. 로컬 메모리(52)는 압축된 제어기(50)가 압축 기술들 및 알고리즘들을 수행하는데 필요할 수 있는 데이터 구조들 및 다른 데이터 저장소들을 위해 이용되기에 충분한 크기로 이루어진다. 로컬 메모리(52)는 또한 압축된 메모리 제어기(36) 내의 내부 사용을 위해 부가적인 캐시 메모리를 제공하도록 레벨 4(L4) 캐시와 같은 캐시를 포함하기 위해 파티셔닝될 수 있다. 따라서, L4 제어기(55)는 또한 레벨 4 캐시(L4)에 대한 액세스를 제공하도록 압축된 메모리 제어기(36)에 제공될 수 있다. 아래에서 보다 상세히 논의될 바와 같이, 강화된 압축 기술들 및 알고리즘들은 더 큰 내부 메모리를 요구할 수 있다. 예를 들어, 로컬 메모리(52)는 128 kB(kilobytes)일 수 있다.
[0041] 추가로, 도 3에서 도시된 바와 같이, 그리고 아래에서 보다 상세히 설명될 바와 같이, 선택적인 부가적 내부 메모리(56)가 또한 압축된 메모리 제어기(36)를 위해 제공될 수 있다. 부가적인 내부 메모리(56)는 예로서 DRAM으로 제공될 수 있다. 아래에서 보다 상세히 논의될 바와 같이, 부가적인 내부 메모리(56)는 CPU-기반 시스템(12)의 메모리 용량 및/또는 메모리 대역폭 압축을 증가시키기 위해 메모리 압축 및 압축해제 방식들을 제공하는 압축된 메모리 제어기(36)에 대한 로컬 메모리(52)에서보다 더 크거나 부가적인 양의 데이터 구조들 및 다른 데이터의 저장을 용이하게 할 수 있다. 내부 메모리 제어기(58)는 압축에 이용하기 위한 부가적인 내부 메모리(56)에 대한 메모리 액세스들을 제어하도록 압축된 메모리 제어기(36)에서 제공된다. 내부 메모리 제어기(58)는 CPU 블록들(14(1)-14(N))에 대해 액세스 가능 또는 보기 가능하지 않을 수 있다.
[0042] 따라서, 도 3에 관하여 요약하면, 압축 데이터 구조 정보를 저장하는데 이용하기 위해 로컬 메모리(52) 및 부가적인 내부 메모리(56)에 대한 액세스를 압축된 메모리 제어기(36)에 제공하는 것은 부가적인 물리적 메모리를 제공하는 것보다 더 낮은 비용으로 증가된 메모리 용량을 위한 메모리 용량 압축을 제공할 수 있다. CPU-기반 시스템(12')의 물리적 메모리의 증가를 회피하는 것은, 부가적인 물리적 메모리를 제공하는 것에 비교하면, 전력 소비를 절감하고 패키지 풋프린트 및 비용을 감소시킬 수 있다. 압축된 메모리 제어기(36)에 의해 제공되는 메모리 용량 및/또는 대역폭 압축은 CPU 블록들(14(1)-14(N))의 동작들을 제어하는 운영 체제에 투명하다.
[0043] 추가로, 도 3의 압축된 메모리 제어기(36)는 또한 메모리 대역폭 압축 및 제로 라인 압축을 수행할 수 있다. 로컬 메모리(52)는 이러한 압축을 위해 이용되는 더 큰 데이터 구조들을 저장하는데 이용될 수 있다. 예를 들어, 대역폭 압축은, 데이터가 또한 압축되지 않는 경우, 더 큰 데이터 구조들을 저장하는 압축된 메모리 제어기(36)에 의해 달성될 수 있다. 예를 들어, 128 바이트가 전송되는 경우, 64 바이트는 메모리 대역폭을 감소시키도록 대역폭 압축 방식으로 전송될 수 있지만, 128 바이트 블록 중 다른 64 바이트는 사용되지 않은 채로 유지될 수 있으며, 이에 따라 증가된 압축된 데이터 구조를 제공한다. 그러나 메모리 용량 압축이 또한 이용되는 경우, 128 바이트 블록 중 잔여 64 바이트는 다른 메모리 블록을 위해 재사용될 수 있다. 증가된 메모리 대역폭은 메모리 액세스 레이턴시를 감소시키고, 레이턴시에 대한 영향을 최소화하거나 레이턴시에 영향을 미치지 않고도, 더 많은 CPU들(16(1), 16(2)) 또는 그 각각의 스레드들이 동일한 수의 메모리 채널들에 액세스하도록 허용할 수 있다. 아니면, 메모리 채널들의 수는, 이러한 압축이 압축된 메모리 제어기(36)에 의해 수행되지 않는 경우의 훨씬 다수의 메모리 채널들에 비교하여 유사한 레이턴시 결과들을 달성하면서 감소될 수 있으며, 그리하여 시스템 레벨 전력을 감소시킨다.
[0044] 도 3에서 압축된 메모리 제어기(36)에 의한 이용을 위해 부가적인 내부 메모리(56)를 제공함으로써, 압축된 메모리 제어기(36)에 의한 압축을 수행하기 위해 이용되는 훨씬 더 큰 양의 데이터 구조들 및 데이터는, 압축으로 인한 레이턴시 효과들을 추가로 감소시키기 위해 이용 가능하게 될 수 있다. 부가적인 CPU들(16(1), 16(2)) 및/또는 그 내부의 하드웨어 스레드들은, 압축을 통한 증가된 유효 메모리 용량 및/또는 메모리 채널들의 감소를 갖는 도 3의 CPU-기반 시스템(12')에 제공될 수 있다. 압축된 메모리 제어기(36)에 의한 압축을 수행하기 위해 이용되는 데이터 구조들 및 데이터를 위해 더 많은 메모리가 필요한 경우, 부가적인 내부 메모리(56)가 위에서 논의된 바와 같이 제공될 수 있다. 그러나 부가적인 내부 메모리(56)는 예를 들어, 상이한 반도체 다이와 같이 압축된 메모리 제어기(36) 외부에 있기 때문에, 부가적인 내부 메모리(56)에 대한 메모리 액세스 레이턴시는 로컬 메모리(52)보다 더 클 수 있지만, 부가적인 내부 메모리(56)의 증가된 크기는, 강화된 압축 및/또는 CPU들(16(1), 16(2)) 및/또는 CPU(16) 당 하드웨어 스레드들이 훨씬 더 많이 수용되도록 허용할 수 있다.
[0045] 로컬 메모리(52) 및 부가적인 내부 메모리(56)를 비롯해서, 도 3의 압축된 메모리 제어기(36)의 메모리 용량 및/또는 대역폭 압축을 위해 제공되는 자원들 각각은, 자원들 및 영역, 전력 소비, 메모리 용량 압축을 통한 감소된 메모리 용량 및 메모리 대역폭 압축을 통한 증가된 성능 간의 원하는 밸런스를 달성하도록 개별적으로, 또는 서로 결합하여 이용될 수 있다. 메모리 용량 및 메모리 대역폭 압축은 필요에 따라 인에이블되거나 디스에이블될 수 있다. 추가로, 압축된 메모리 제어기(36)에 의한 이용을 위해 위에서 설명되는 자원들은 메모리 용량 및/또는 대역폭 압축 효율, 전력 소비 및 성능 간의 원하는 트레이드오프들을 달성하기 위해 인에이블 또는 디스에이블될 수 있다. 압축된 메모리 제어기(36)에 대해 이용 가능한 이 자원들을 이용하는 예시적인 메모리 용량 및/또는 대역폭 압축 기술들이 이제 논의될 것이다.
[0046] 다음 판독 어드레스 프리패칭(prefetching)을 갖는 메모리 용량 및/또는 대역폭 압축을 이용하는 메모리 제어기들을 논의하기 전에, 도 2 및 도 3의 압축된 메모리 제어기(36)에 의해 이용될 수 있는 상이한 타입들의 메모리 압축 방식들의 몇 개의 예들이 도 4 내지 도 21에 관하여 먼저 논의된다. 다음 판독 어드레스 프리패칭을 갖는 메모리 용량 및/또는 대역폭 압축을 이용하는 메모리 제어기 및 관련된 프로세서-기반 시스템들 및 방법들은 이들 상이한 메모리 압축 방식들과 함께 이용될 수 있다.
[0047] 이와 관련하여, 도 4는 도 3의 압축된 메모리 제어기(36)에 의해 구현될 수 있는 예시적인 라인-기반 버퍼 메모리 용량 압축 방식(60)(이하 "라인-기반 압축 방식(60)")의 개략도이다. 아래에서 보다 상세히 논의될 바와 같이, 라인-기반 압축 방식(60)은, 도 2의 CPU-기반 시스템(12')의 이용 가능한 물리적 메모리보다 더 많은 메모리 용량을 제공하기 위해, CPU 운영 체제들에서 이용되는 물리적 어드레스(PA)에, 가상 어드레스(VA) 이상의 새로운 변환 레벨을 부가한다. 액세스된 메모리 위치의 물리적 어드레스(PA)는 부가적으로 물리적 버퍼 어드레스(PBA)로 변환된다. PBA는 압축된 메모리 제어기(36)로 CPU(16)에 의해 제공되는 PA에 대한 압축된 데이터가 상주하는, 압축된 메모리 제어기(36)에 의해 액세스 가능한 압축된 메모리(예를 들어, 시스템 메모리(38))에 대한 어드레스(도 4의 PB ADDRESS)를 포함한다. 따라서, 압축된 메모리 제어기(36)에서 PBA의 이러한 부가적인 변환 층을 제공함으로써, 시스템 메모리(38)는, 보통은 시스템 메모리(38)에서 물리적으로 액세스 가능하게 되는 더 많은 PA들을 효과적으로 저장할 수 있다.
[0048] 이와 관련하여, 도 4를 참조하여, 이 라인-기반 압축 방식(60)에서, 압축된 메모리 제어기(36)는 시스템 메모리(38)에 압축된 데이터를 저장하고 이로부터의 압축된 데이터에 액세스한다. 이 예에서, 압축된 메모리 제어기(36)는 메모리 액세스 시에 어드레싱되는 각각의 PA에 대해 한 번에 (압축되지 않은 형태의) 128 바이트 메모리 데이터 블록들의 메모리 라인 크기에 액세스하도록 구성된다. 이는, 이 예에서, DRAM 형태의 시스템 메모리(38)가 한 번에 128 바이트를 액세스할 때 효율적이기 때문일 수 있다. 대안적으로, 메모리 데이터 블록들은 예를 들어, 64 바이트와 같은 다른 바이트 길이일 수 있다. 본 예로 돌아와서, 압축된 메모리 제어기(36)는, 압축된 메모리 제어기(36)에 의해 액세스 가능한 물리적 메모리의 크기 이상으로 압축된 메모리 제어기(36)로 어드레싱 가능한 유효 메모리 용량을 증가시키도록 시스템 메모리(38)의 128 바이트 메모리 데이터 블록을 압축한다.
[0049] 도 4를 계속 참조하면, 모든 128 바이트 메모리 데이터 블록이 동일한 압축 바이트 크기로 압축된 메모리 제어기(36)에 의해 압축되는 것은 아닐 수 있다는 것에 주의한다. 일부 메모리 데이터 블록들은 이용된 압축 방식 및 메모리 데이터 블록에 포함된 데이터의 성질에 의존하여 다른 것들보다 더 작은 크기들로 압축될 수 있다. 따라서, 이 예에서, 시스템 메모리(38)는 PBA에 의해 각각 어드레싱 가능한 다중 비트-길이 풀들(62(1)-62(Q))로 분할된다. 풀들(62(1)-62(Q)은 각각 물리적 버퍼들(PB들)에 압축된 형태로 128-바이트 데이터 블록들의 압축된 데이터를 저장한다. 각각의 PB 풀(62(1)-62(Q))은, 더 작은 크기들로 압축될 수 있는 메모리 데이터 블록들이 함께 그룹핑되어 압축 이후에도 미사용 비트 저장소를 방지할 수 있도록 상이한 크기의 압축된 데이터를 저장하기 위해 제공된다. PB 풀들(62(1)-62(Q))이 도 4에서 인접한 PB들로 그룹핑되는 것으로 도시되지만, PB 풀들(62(1)-62(Q))이 인접한 PB들을 포함하도록 요구되는 것은 아니란 점에 주의한다. 아래에서 보다 상세히 논의되는 바와 같이 각각의 PB 풀(62(1)-62(Q))의 크기는 압축된 메모리 제어기(36)에 의해 동적으로 지정(assign)될 수 있다.
[0050] 이 예에서, PB 풀(62(1))은 압축된 32-바이트까지 저장될 수 있는 압축된 메모리 데이터 블록을 저장하기 위해 이용된다. PB 풀(62(2))은 압축된 64-바이트까지 저장될 수 있는 압축된 메모리 데이터 블록을 저장하기 위해 이용된다. PB 풀(62(3))은 96-바이트까지 저장될 수 있는 압축된 메모리 데이터 블록을 저장하기 위해 이용된다. PB 풀(62(4))은 128-바이트까지 저장될 수 있는 압축된 메모리 데이터 블록을 저장하기 위해 이용되며, 이는 그의 네이티브(native) 128-바이트 길이 아래로 압축될 수 없는 임의의 메모리 데이터 블록들을 포함할 것이다. 각각의 PB 풀(62(1)-62(Q))은 PB 풀(62(1)-62(Q))에 대해 지정된 데이터 압축 크기 내로 압축된 메모리 제어기(36)에 의해 압축되는 PB들을 포함한다. 아래에서 보다 상세히 설명되는 바와 같이, 각각의 PB 풀(62(1)-62(Q))은 또한, 기록 트랜잭션들 동안 프리 PBA들에 미래의 PB들을 저장하기 위해 압축된 메모리 제어기(36)에 의해 이용되도록 그 각각의 PB 풀(62(1)-62(Q))에 프리 PBA들의 리스트를 포함하는 각각의 프리 노드 리스트(64(1)-64(Q))(도 4에서 단지 64(1)만이 도시됨)를 포함한다.
[0051] 제공되는 PB 풀들(62)의 수("Q")는 설계 및 메모리 데이터 블록 크기에 의존하여 변동될 수 있다는 것에 주의한다. 예를 들어, 메모리 데이터 블록 크기가 256 바이트인 경우, 8(eight)개의 PB 풀들(62)이 제공되며, 각각은 32 바이트들의 증분(예를 들어, 32 바이트, 64 바이트, 96 바이트, ... 256 바이트)으로 압축된 메모리 데이터 블록들을 저장하도록 구성된다. 주어진 메모리 데이터 블록 크기에 대해 PB 풀들(62)의 수를 증가시키는 것은, 메모리 데이터 블록 크기가 더 작은 바이트 크기들로 분할되기 때문에 증가된 메모리 압축 비를 제공할 수 있지만, 훨씬 다수의 PB 풀들(62)을 관리하는데 있어 오버헤드를 또한 증가시킬 수 있다. 또한, 메모리 설계 시에 메모리 데이터 블록 크기를 증가시키는 것은, 개선된 메모리 압축 비를 달성할 수 있지만, 각각의 PB 풀(62(1)-62(Q))의 크기를 또한 감소시키거나, 또는 원하는 PB 풀(62(1)-62(Q)) 크기를 허용하기 위해 각각의 PB 풀(62(1)-62(Q))를 제공하도록 더 많은 메모리를 요구할 수 있다.
[0052] 도 4의 라인-기반 압축 방식(60)의 초기화 시에, 모든 PB들은 프리 노드 리스트(64)에 포함되며, 이는 어떠한 PB들도 PA에 아직 할당되지 않았음을 의미한다. 메모리 트랜잭션 동작들 동안, 압축된 메모리 제어기(36)는 CPU(16)(도 2)로부터의 수신된 PA에 기초한 메모리 액세스들을 위해 PB들에 액세스하도록 시스템 메모리(38)에 액세스한다. 압축된 메모리 제어기(36)는 요청 CPU(16)에게, 내부 시스템 버스(22)를 통해 압축되지 않은 데이터를 제공하기 위해 PB들을 압축해제할 수 있다. 대안적으로, 압축된 메모리 제어기(36)는 메모리 대역폭 압축을 또한 수행하면서, 요청 CPU(16)에게, 내부 시스템 버스(22)를 통해 압축되지 않은 형태로 PB를 제공할 수 있다. 시스템 메모리(38)의 PB들이 PBA에 의해 액세스 가능하기 때문에, 압축된 메모리 제어기(36)는 메모리 액세스 요청 시에 PA에 대응하는 올바른 PB에 액세스하도록 메모리 액세스 요청에 대해 수신된 PA의 PBA로의 변환을 수행해야 한다. 이와 관련하여, PA-PBA 변환을 저장하는 마스터 디렉토리(66)는 시스템 메모리(38)에서 제공될 수 있다. 압축된 메모리 제어기(36)는, PB가 PB의 압축 크기에 기초하여 기록 트랜잭션 동안 이전에 설정되고 PB 풀(62(1)-62(Q))에 저장되었을 때 PA에 지정된 대응하는 PBA를 획득하기 위해 마스터 디렉토리(66)의 룩업을 수행하도록 변환된 PA를 이용한다. PBA는 인접한 PB들이 인접한 PBA들에 대응해야 할 필요 없이, 메모리 액세스들이 발생할 때 임의의 PB에 압축된 데이터를 저장하는 가요성(flexibility)을 제공하도록 지정된 PB 풀(62(1)-62(Q))의 임의의 PB와 연관될 수 있다. 이는 더 뛰어난 압축 레이트들이 달성되도록 허용한다.
[0053] 도 4를 계속 참조하여, 마스터 디렉토리(66)가 액세스되도록 요구함 없이, 압축된 메모리 제어기(36)가 최근에 변환된 PBA들로 PA를 보다 빨리 변환하도록 허용하는 것이 바람직할 수 있다. 이와 관련하여, 이 예에서, 로컬 메모리(52)는 이 예에서, TLB(translation lookaside buffer)(68)를 제공하도록 n-웨이 연관 캐시로서 구성될 수 있다. 이와 관련하여, 로컬 메모리(52)의 TLB(68)는 n-웨이 캐시와 같이 구성될 수 있는 SRAM(54)의 형태로 제공될 수 있다. TLB(68)는 거기에 포함된 TLB 엔트리들(74)의 부분으로서 PA들의 태그들(72)과 함께 태그 어레이(70)를 포함한다. 각각의 태그(72)에 대해 마스터 디렉토리(66)로부터의 PBA들 및 대응하는 어드레스 길이(78)의 데이터 엔트리들을 각각 포함하는 복수의 TLB 엔트리들(74)을 포함하는 데이터 어레이(76)가 SRAM(54)에서 제공된다. SRAM(54)에서 제공되는 n-웨이 연관 TLB(68)의 폭은, PBA의 원하는 어드레스 길이(78)는 물론 각각의 TLB 엔트리(74)에 저장된 PBA들의 원하는 양을 용이하게 하도록 제공된다. PBA들의 어드레스 길이(78)는 PB 풀들(62(1)-62(Q))에서 PB들이 어느 입도(granularity)(예를 들어, 페이지, 바이트 등)로 액세스되는지를 결정한다.
[0054] 이와 관련하여, 도 4를 계속 참조하면, 압축된 메모리 제어기(36)가 메모리 액세스를 수행할 때, 압축된 메모리 제어기(36)는 SRAM(54)의 태그 어레이(70)에서 룩-업을 수행하도록 변환된 PA를 이용한다. 태그 어레이(70)의 TLB 엔트리(74)가 변환된 PA에 매칭하는 태그(72)를 갖는 경우, TLB 히트가 TLB(68)에서 발생한다. 따라서, 마스터 디렉토리(66)에 포함된 PA에 대한 대응하는 PBA는 태그(72)에 대응하는 TLB 엔트리(74)의 데이터 어레이(76)에 포함된다. 이 시나리오에서, 압축된 메모리 제어기(36)는 PA를 PBA들로 변환하기 위해 마스터 디렉토리(66)에 액세스할 필요가 없고, 이에 따라, 시스템 메모리(38)의 마스터 디렉토리(66)에 액세스하는 것은 SRAM(54)에 액세스하는 것보다 더 뛰어날 수 있기 때문에 수반되는 레이턴시를 감소시킨다. 압축된 메모리 제어기(36)는, 시스템 메모리(38)에서 어드레싱할 PB가 어느 것인지 그리고 최대(full) 압축된 메모리 데이터를 저장하기 위해 PB에 지정된 바이트를 얼마나 많이 판독할지를 알기 위해 매칭하는 TLB 엔트리(74)의 PBA 및 대응하는 어드레스 길이(78)를 이용할 수 있다. 트랜잭션이 판독 트랜잭션인 경우, 압축된 라인은 PBA 위치에서 시스템 메모리(38)로부터 판독된다. 트랜잭션이 기록 트랜잭션인 경우, 압축된 데이터는 시스템 메모리(38)의 PB의 PBA에 저장된다.
[0055] TLB 미스가 도 4의 TLB(68)에서 발생하는 경우, 압축된 메모리 제어기(36)는 마스터 디렉토리(66)의 룩-업을 수행하기 위해 PA를 이용한다. TLB 엔트리(74)가 교체 정책에 따라 TLB(68)로부터 제거(evict)된다. PA에 대응하는 마스터 디렉토리(66)의 PBA는 TLB(68)에 배치된다. PA에 대해 마스터 디렉토리(66)로부터 획득된 PB 시작 포지션 및 어드레스 길이(78)는 PB의 압축된 데이터에 액세스하기 위해 압축된 메모리 제어기(36)에 의해 이용된다. 트랜잭션이 판독 트랜잭션인 경우, 압축된 라인은 PBA 위치에서 시스템 메모리(38)로부터 판독된다.
[0056] 트랜잭션이 기록 트랜잭션인 경우, 압축된 데이터는 시스템 메모리(38)의 PB의 PBA에 저장된다. PBA에서 PB의 길이가 압축된 라인의 압축 크기와 동일한 경우, 압축된 라인은 시스템 메모리(38)의 PBA 위치에서 동일한 PB들로 기록될 수 있다. PBA에서 PB의 길이가 압축된 라인의 압축 크기와 상이한 경우, 압축된 메모리 제어기(36)는 시스템 메모리(38)에 기초하여 다른 PB 풀(62(1)-62(Q))의 프리 노드 리스트(64)에서 시스템 메모리(38)에 저장될 압축된 라인을 수용할 프리 PB를 발견할 것이다. 프리 노드 리스트(64)의 동작은 도 7에서 아래에서 보다 상세히 논의될 것이다. 거기서 논의된 바와 같이, 프리 PB들을 포함하는 로컬 풀 버퍼(local pull buffer)는 대응하는 풀의 프리 노드 리스트로부터 보충될 수 있다.
[0057] SRAM(54)의 TLB 엔트리(74) 크기는 예들로서, 64 바이트, 128 바이트, 또는 256 바이트와 같이 원하는 임의의 크기일 수 있다. 이 예에서, TLB 엔트리(74)는 마스터 디렉토리(66)로부터 4(four)개의 PBA들을 포함하는데, 그 이유는, 압축된 메모리 제어기(36)는 도 4에서 도시된 바와 같이, 시스템 메모리(38)로부터 SRAM(54)으로 한 번에 4(four)개의 PBA들을 로딩하도록 구성되기 때문이다. 인코딩(80)의 2(two) 비트는 PBA가 어느 PB 풀(62(1)-62(4))에 대응하는지를 표시하기 위해 도 4에서 도시된 바와 같이 각각의 PBA에서 제공된다. 압축된 메모리 제어기(36)는 그 후, 대응하는 PB 풀(62(1)-62(4))에서 PBA의 위치의 올바른 PB에 액세스하도록 PA에 대응하는 PBA를 이용한다.
[0058] 도 4의 이 예에서, 모두 0들(즉, 제로 라인)인 PA에 대한 메모리 데이터에 대한 특수한 경우가 제공될 수 있다. 이 경우에, 압축된 메모리 제어기(36)는 특수한 경우로서 SRAM(54)의 PA에 대해 PBA 어드레스 0으로서 PBA를 인코딩할 수 있으며, 이는 어떠한 PB도 지정되지 않았음을 의미한다. 압축된 메모리 제어기(36)는 모두 0인 PA에 대응하는 메모리 데이터로서 PBA의 0 PB 어드레스를 인지한다. 따라서, 모두 0들인 메모리 데이터는, 유효 0 바이트로 압축되는데, 그 이유는 PB 어드레스 0의 PB는 압축된 메모리 제어기(36)에 대해 이용되도록 요구되지 않기 때문이다. 따라서, PB 풀들(62(1)-62(Q))은 모두 0들인 메모리 데이터에 대해 액세스될 필요가 없다. 제로 라인 압축 경우에 대해 시스템 메모리(38)에 액세스할 필요가 없는 결과로서 전력 소비가 또한 감소된다.
[0059] 특정한 PB 풀(62(1)-62(Q))에서 이용 가능한 PB들이 고갈되는 경우, 압축된 메모리 제어기(36)는 다른 PB 풀(62(1)-62(Q))의 다른 PBA들에 PA를 지정하도록 구성될 수 있다. 이 기능성은 압축된 메모리 제어기(36)에 의한 백그라운드 작업의 부분으로서 제공될 수 있다. 고갈은, 주어진 PB 풀(62(1)-62(Q))에서 이용 가능한 잔여 PB들이 전혀 존재하지 않기 이전에 다른 PB 풀(62(1)-62(Q))의 다른 PBA들로 PA를 지정하는 것이 바람직할 수 있기 때문에, 특정한 PB 풀(62(1)-62(Q))의 이용 가능한 PB들이 임계치 아래로 떨어진다는 것을 의미한다. 주어진 PB 풀(62(1)-62(Q))이 고갈되는 경우, 다른 PB 풀(62(1)-62(Q))의 다른 PB들이 이용 가능하게 될 수 있다. 예를 들어, 메모리 데이터가 압축된 메모리 제어기(36)에 의해 32-바이트 또는 그 미만으로 압축되고, 예로서 32 바이트 PB 풀(62(1))에 추가로 이용 가능한 PB들이 전혀 없는 경우, 압축된 메모리 제어기(36)는 PB 분할 동작에서 PB 풀(62(1))에 대해 2(two)개의 32바이트 PB들로 64 바이트 PB 풀(62(2))의 PB를 재지정할 수 있다. 그러나 예로서, 128 바이트 PB 풀(62(4))에서 추가로 이용 가능한 PB들이 전혀 없는 경우, 압축된 메모리 제어기(36)는 머지(merge) PB 동작에서 PB 풀(62(4))에 대한 하나의 128 바이트 PB를 형성하도록 64 바이트 PB 풀(62(3))의 2(two)개의 PB들을 재지정할 수 있다. 그러나 64 바이트 PB 풀(62(3))의 2개의 64 바이트 PB들은 이 예에서, 머지 PB 동작에서 128 바이트 PB 풀(62(4))에 재지정되기 위해 인접해야 한다.
[0060] 라인-기반 압축 방식(60)의 하나의 특징은, (예를 들어, 페이지-당 베이시스(per-page basis)에 대조적으로) PB들이 PB 풀들(62(1)-62(Q))에서 라인-당 베이시스로 액세스되기 때문에, PBA들에서 제공되는 더 큰 PB 어드레스들이 SRAM(54)에 저장된다는 것이다. 따라서, SRAM(54)에 의해 제공되는 TLB(68)의 크기는, 훨씬 다수의 비트들이 각각의 TLB 엔트리(74)의 각각의 PBA에 저장되기 때문에, 결과적으로 클 수 있다. 압축된 메모리 제어기(36)에 의해 수행된 메모리 용량 압축에서 PA-PBA 어드레스 변환을 제공하기 위해 더 작은 TLB(68)를 갖는 것이 바람직할 수 있다.
[0061] 이와 관련하여, 도 5를 참조하여, 페이지-기반 버퍼 메모리 용량 압축 방식(82)(이하 "페이지-기반 압축 방식(82)")은 압축된 데이터를 저장 및 액세스하도록 도 3의 압축된 메모리 제어기(36)에 의해 수행될 수 있다. 페이지-기반 압축 방식(82)은 도 4의 라인-기반 압축 방식(60)과 유사하고, 도 2의 CPU-기반 시스템(12')에서 제공된 동일 자원들을 이용할 수 있다. 따라서, 본원에서 논의되는 페이지-기반 압축 방식(82)은 도 2 및 도 3을 참조할 것이다. 아래에서 보다 상세히 논의될 바와 같이, 페이지-기반 압축 방식(82)을 제공하는 것은, SRAM(54)에 저장된 어드레스들이 버퍼 라인들 대신 전체 메모리 페이지의 TLB(68) 어드레스로서 작용하기 때문에, 도 4의 라인-기반 압축 방식(60)보다 더 작은 TLB(68) 크기가 도 3의 SRAM(54)에서 제공되도록 허용한다. 따라서, SRAM(54)에 저장된 어드레스들의 크기들은 최대 어드레스 길이가 되어야 할 필요가 없다. 그러나 페이지-기반 압축 방식(82)에서, 메모리 페이지 크기(예를 들어, 1kB, 2kB, 3kB, 4kB)의 데이터 페이지들(DP)의 풀들은, 예를 들어, 도 4의 예에서, 32, 64, 96, 및 128 바이트의 더 낮은 바이트 크기들의 라인-크기 PB들의 할당된 풀들 대신, 시스템 메모리(38)(도 3)에서 할당된다. 또한, 도 4의 라인-기반 압축 방식(60)과 유사하게, 페이지-기반 압축 방식(82)은 시스템 메모리(38)에서 DP 풀들을 유지한다.
[0062] 도 5를 참조하면, 페이지-기반 압축 방식(82)에 대해 단일 DP를 포함하는 시스템 메모리(38)가 도시된다. 이 예에서, DP는 크기가 2kB이다. 시스템 메모리(38)의 DP는, 이 예에서 32 바이트인 균등 크기의 64(sixty-four)개의 물리적 버퍼들(PB)로 분할된다. 물리적 버퍼(PB)는, 압축된 데이터가 DP 내의 연속적 PB들에 스패닝할 수 있다는 것을 제외하면, 위의 라인-기반 압축 방식(60)의 PB와 유사하다. 라인 0은 도 5의 예시적인 DP에서 하나의 32 바이트 PB만을 점유한다. 라인 1은 도 5의 예시적인 DP에서 3(three)개의 연속적인 32 바이트 PB들을 점유한다. 라인 31은 2(two)개의 연속적인 32 바이트 PB들을 점유한다. 하나 초과의 PB에 스패닝하는 라인들은 항상 DP의 인접한 PB들에 저장된다. DP들 및 거기에 저장된 PB들은 압축된 메모리 제어기(36)에 의해 PA들로부터 변환될 수 있는 DPA들(data page addresses)에 의해 어드레싱 가능하다. 도 4의 마스터 디렉토리(66)와 유사하게, DP들을 저장한 시스템 메모리(38)의 부분은, 마스터 디렉토리가 시스템 메모리(38)에 저장된 액세스되는 압축된 DP들에 대한 PDA들로 PA를 변환하는데 이용될 것이다.
[0063] 도 6은, 최근에 변환된 PA들에 대해 DPA(data page addresses)로 PA들을 보다 빠르게 변환하기 위해 SRAM(54)에서 제공될 수 있는 TLB(84)를 예시한다. TLB(84)는 캐시와 유사하게 구성되지만, TLB 엔트리들(86)을 갖는다. TLB(84)의 각각의 TLB 엔트리(86)는 시스템 메모리(38)의 DP를 표현한다. PA들은 각각의 유효 TLB 엔트리(86)의 태그 어레이(90)의 태그들(88)에 포함된다. DPA들은 PA들에 대응하는, TLB(84)의 데이터 어레이(92)의 TLB 엔트리(86)에 저장된다. DPA는, DPA가 시스템 메모리(38)의 페이지를 어드레싱할 필요가 있기 때문에, PB의 최대 어드레스 비트 크기보다 더 적은 비트들로 저장될 수 있다. 도 6에서 도시된 바와 같이, 도 5에서 도시된 DPA의 DP에 대응하는, 메모리 페이지의 PB들에 대응하는 복수의 라인 포지션들 (예를 들어, L0 Pos, L1 Pos, … Ln Pos) 및 대응하는 라인 길이들(예를 들어, L0 Len, L1 Len, … Ln Len)를 포함하는 관리 정보(94)는 각각의 DPA에 대해 제공된다. 라인 포지션은 DP의 라인의 시작을 표시하고 라인 길이는 DP의 라인에 포함된 PB들의 수를 표시한다. TLB(84)에서 TLB 미스 시에, TLB(84)는 도 4의 라인-기반 압축 방식(60)의 TLB 엔트리(74)와 유사한, DPA와 연관된 TLB 엔트리(86)로 로딩된다.
[0064] 도 5 및 도 6의 페이지-기반 압축 방식(82)은 또한, 도 4의 라인-기반 압축 방식(60)에서의 프리 노드 리스트(64)와 유사하게, 메모리 페이지를 압축하는데 이용하기 위해 시스템 메모리(38)의 프리 DP들을 할당하도록 프리 노드 리스트를 이용한다. 페이지-기반 압축 방식(82)의 메모리 페이지들을 압축하기 위해 이용하도록 시스템 메모리(38)의 프리 DP들을 할당하는데 이용될 수 있는 예시적인 프리 노드 리스트(96)가 도 7에서 도시된다. 거기서 예시된 바와 같이, 프리 노드 리스트(96)는 링크된 리스트이다. 프리 노드 리스트(96)에서 DPA 프리 리스트들(98(1)-98(R))의 수는 모든 DP들에 대한 모든 DPA들을 커버하기에 충분하도록 제공된다. 이 예에서, DPA 프리 리스트들(98(1)-98(R))은 실제로, 그 자체가 프리 리스트 DP들로서 또한 알려진 DP들이다. DPA 프리 리스트들(98(1)-98(R))이 DP와 동일한 크기를 갖는 DPA들로 분리되는 것으로서 도시되지만, 반드시 연속적인 DPA들이 주어진 DP에 지정될 필요는 없다. 각각의 DPA 프리 리스트(98(1)-98(R)) 내에 프리 DPA들(100(1)-100(R))의 리스트가 있다. 새로운 DPA들이 DP의 PB에 압축된 데이터를 저장하기 위해 지정될 필요가 있을 때, DP 크기에 대응하는 프리 노드 리스트(96)로부터의 하나 또는 그 초과의 프리 DPA들(100(1)-100(R))이 로컬 풀 버퍼(102)에 풀링된다. 헤드 포인터(104)는 프리 노드 리스트(96)를 횡단하도록 헤드 프리 DPA(100(1))에서 제공된다. DP 크기에 따른 로컬 푸시(push) 버퍼(108)는 대응하는 풀에 대해 최근에 프리해진 DPA를 포함한다. DPA 프리 리스트(98) 내에 포함된 모든 DPA들이 로컬 풀 버퍼(102)로 전달될 때, DP는 로컬 푸시 버퍼(108)를 통해 프리 노드 리스트(64)로 스스로 리턴할 수 있다. 테일(tail) 포인터(106)는, DP의 DB에 더 이상 지정되지 않는 DPA들의 프리-업(free-up)이 로컬 푸시 버퍼(108)로부터 프리 노드 리스트(96)의 테일로 푸시되도록 허용하기 위해 제공된다. 도 7의 페이지-기반 압축 방식(82)과 유사한 방식이 또한, 도 4의 라인-기반 압축 방식(60)에 대한 프리 노드 리스트(64)로서 이용될 수 있다. 페이지-기반 메모리 압축 방식(82)에 대한 프리 노드 리스트(96)로부터 풀링된 DPA들에는 한 번에 메모리 페이지가 지정될 수 있는 반면에, 도 4의 라인-기반 압축 방식(60)에 대한 프리 노드 리스트(64)로부터 풀링된 DPA들에는 한 번에 버퍼 라인이 지정될 수 있다. 또한, DP들의 다음 그룹의 로컬 풀 버퍼(102) 및 로컬 푸시 버퍼(108)가 유지되기 때문에, 이는 압축된 메모리 제어기(36)가, 예를 들어, 효율성 목적들을 위해 DRAM으로부터 단일 버스트에서 프리 노드 리스트(96)에 프리 DP들을 포인팅하는 메인 포인터들을 기록하거나 판독하도록 허용한다 .
[0065] 도 4의 라인-기반 압축 방식(60) 또는 도 5 및 도 6의 페이지-기반 압축 방식(82) 중 어느 하나에 있어서, 거기서 제공될 수 있는 다른 특징은, (라인-기반 압축 방식(60)에 대한) DB들 또는 (페이지-기반 압축 방식(82)에 대한) DP들을 저장하는데 이용되는 시스템 메모리(38)가 (라인-기반 압축 방식(60)에 대한) DBA들 또는 (페이지-기반 압축 방식(82)에 대한) DPA들의 프리 노드 리스트(64 또는 96)를 저장하는데 이용될 수 있다는 것이다. 이는 프리 노드 리스트들(64 또는 96)을 저장하기 위한 메모리를 절약한다. 도 7의 프리 노드 리스트(96)를 참조하면, 헤드 포인터(104)는 압축된 메모리 제어기(36)가 시스템 메모리(38)에 관하여 DP 내에 저장된 DP 프리 노드들의 시작을 인지하도록 허용한다. 테일 포인터(106)는 압축된 메모리 제어기(36)가 시스템 메모리(38)에 관하여 DP 내에 저장된 DP 프리 노드들의 끝을 인지하도록 허용한다. 프리 노드 리스트(96)로부터 새롭게 할당된 DPA는 시스템 메모리(38)의 프리 노드 리스트(96)의 끝에 부가되어서, 할당된 DPA는, 압축된 메모리 제어기(36)가 할당될 새로운 DPA를 요청할 때 재할당되지 않게 될 것이다. DPA 포인터가 프리 노드 리스트(96)에서 프리-업될 때, 그것은 프리 노드 리스트(96)에 리턴된다. 테일에서 프리 노드 리스트(64)가 가득 찰 때, 새로운 프리 DP는 로컬 풀 버퍼(102)로부터 할당되고 프리 노드 리스트(64)에 부가될 수 있다. 도 4의 프리 노드 리스트(64)는 도 4의 시스템 메모리(38)의 DB들 내에 유사하게 저장되고 거기서 압축된 메모리 제어기(36)에 의해 액세스될 수 있다.
[0066] 단지 더 작은 DP들만이 시스템 메모리(38)에서 이용 가능할 때 필요한 경우 더 큰 DP들을 생성하기 위한 DP 관리의 다른 방법은 DP들의 쌍들을 유지하는 것이다. 예를 들어, 1Kb DP는 3kB DP와 페어링될 수 있다. 2kB DP는 다른 2kB DP와 페어링될 수 있다. 시스템 메모리(38) 내에서, 최대 페이지 크기(예를 들어, 4kB)보다 더 작은 점유된 DP들은 대응하는 PA에 대한 백 포인터(back pointer)를 유지할 수 있다. 백그라운드 작업에서, DP들의 임계치 할당이 도달되면, 압축된 메모리 제어기(36)는 프리 노드 리스트(96)를 스캔하고 프리 DP 쌍을 또한 갖는 프리 DP들(100)을 물색(look for)할 수 있다. 프리 DP(100) 및 그의 쌍은 시스템 메모리(38)에서 더 큰 DP를 제공하도록 조합될 수 있다. 제 2 임계치가 도달되는 경우, 백그라운드 작업에서, 압축된 메모리 제어기(36)는 프리 노드 리스트(96)를 스캔하고, 그것이 압축된 데이터로 점유되었는지를 확인하기 위해 대응하는 DP 쌍의 다른 DP를 조사할 수 있다. 만약 그렇다면, 압축된 메모리 제어기(36)는 테일 포인터(106)를 PA로 지향시키고, 동일한 DP 크기에 대해 프리 노드 리스트(96)로부터 다른 DP로 점유된 DP를 이동시키고, 2(two)개의 인접한 DP들을 더 큰 DP로 머징하고, 프리 노드 리스트(96)를 업데이트할 수 있다. 압축된 메모리 제어기(36)는 그 후 점유된 DP에 대해 새로운 DPA를 포인팅하도록 마스터 디렉토리(66) 및 선택적으로 TLB(68)를 업데이트하기 위해 PA에 대한 테일 포인터(106)를 이용할 수 있다.
[0067] 도 4에 관하여 위에서 설명된 라인-기반 압축 방식(60) 및 도 5 내지 도 7에 관하여 위에서 설명된 페이지-기반 압축 방식(82) 둘 다의 특징을 포함하는 메모리 용량 압축 방식을 제공하는 것이 바람직할 수 있다. 이와 관련하여, 도 8은 도 3의 압축된 메모리 제어기(36)에 의해 구현될 수 있는 예시적인 하이브리드 라인/페이지-기반 버퍼 메모리 용량 압축 방식(110)의 개략도이다. 아래에서 논의되는 바와 같이, 하이브리드 라인/페이지-기반 버퍼 메모리 용량 압축 방식(110)은 라인-기반 버퍼 메모리 용량 압축 방식 및 페이지-기반 버퍼 메모리 용량 압축 방식 둘 다의 특징들을 포함한다. 하이브리드 라인/페이지-기반 버퍼 메모리 용량 압축 방식(110)은 공통 엘리먼트 번호들로 표시되는, 도 4에서 예시된 라인-기반 압축 방식(60)과의 공통 컴포넌트들을 포함한다.
[0068] 이와 관련하여, 도 8을 참조하면, 하이브리드 라인/페이지-기반 버퍼 메모리 용량 압축 방식(110)에서, 압축된 메모리 제어기(36)는 메모리 액세스 시에 어드레싱되는 각각의 PA에 대해 한 번에 (압축되지 않은 형태의) 128 바이트 메모리 데이터 블록들을 액세스하도록 구성된다. 시스템 메모리(38)는 TLB(68)의 데이터 어레이(76)에서 TLB 엔트리(74)의 버퍼 포인터(114)에 의해 각각 어드레싱 가능한 동일 크기(예를 들어, 1kB)의 다수의 물리적 블록들(PB들)(112(1)-112(Q))로 분할된다. 각각의 PA는 시스템 메모리(38)의 대응하는 복수의 PB들(112(1)-112(Q))(예를 들어, 각각 1kB)에 각각 대응하는 복수의 버퍼 포인터들(114(1)-114(S))에 맵핑되는 페이지 어드레스(예를 들어, 4kB)이다. 따라서, PA 페이지 어드레스를 다수의 PB들(112(1)-112(Q))로 분할함으로써, 각각의 PB(112)는 라인-기반 메모리 용량 압축 방식과 유사한 이익을 달성하도록 동일한 크기를 가질 수 있지만, 데이터 압축은, 페이지-기반 메모리 용량 압축 방식과 같이 데이터 페이지 크기 토대로(예를 들어, 4kB) 압축된 메모리 제어기(36)에 의해 여전히 관리된다. 추가로, 아래에서 논의되는 바와 같이, 각각의 PB(112) 내의 메모리 데이터 블록 각각은 동일한 크기(예를 들어, 32 바이트)이다.
[0069] 도 9는, 도 8의 하이브리드 라인/페이지-기반 버퍼 메모리 압축 방식(110)에 따라 시스템 메모리(38)에서 제공되는 복수의 1kB PB들(112(1)-112(4))로 구성된 4kB 크기의 예시적인 데이터 페이지(DP)의 개략도이다. 여기서 도시된 바와 같이, 각각의 PB(112(1)-112(4))는 각각이 동일한 크기(예를 들어, 이 예에서 각각 32 바이트)인 복수의 메모리 데이터 블록들(116)을 포함한다. PB들(112(1)-112(4))이 시스템 메모리(38)에서 인접하게 저장하기 위해 주어진 PA에 대응하도록 요구되는 것은 아니란 것에 주의한다. 데이터 페이지(DP)가 동일한 크기의 PB들(112(1)-112(4))로 구성되기 때문에, PB들(112(1)-112(4))의 사이징(sizing)은 압축된 메모리 제어기(36)에 의해 동적으로 지정되어야 할 필요는 없다.
[0070] 이 예에서, 각각의 PB(112(1)-112(Q))은 압축된 32-바이트까지 저장될 수 있는 압축된 메모리 데이터 블록을 저장하기 위해 이용된다. 압축된 메모리 데이터 블록들이 32 바이트 아래로 압축될 수 없기 때문에, 주어진 PB(112) 내의 인접한 메모리 데이터 블록들(116)은 압축된 데이터의 저장을 위해 지정될 수 있다. TLB(68)의 각각의 TLB 엔트리(74)는 이 예에서 4(four)개까지의 버퍼 포인터들(114(1)-114(4))인(예를 들어, 4kB의 PA 어드레스 페이지 크기의 경우, PB들(112(1)-112(4))은 각각 1kB임) 복수의 버퍼 포인터들(114(1)-114(S))을 포함하도록 구성된다. 버퍼 포인터들(114(1)-114(4)은 인접한 PB들(112(1)-112(4))을 포인팅해야 할 필요는 없다. 주어진 PA에 대해 TLB 엔트리(74)의 버퍼 포인터들(114(1)-(114(4))은 필요한 경우, 할당될 때 특정 PB(112(1)-112(4))를 포인팅하도록 압축된 메모리 제어기(36)에 의해 세팅된다. TLB 엔트리들(74)은 앞서 설명된 바와 같이 마스터 디렉토리(66)로부터 채워진다. PB(112)가 할당되지 않은 경우, 태그(72)에 대한 TLB 엔트리(74)의 대응하는 버퍼 포인터(114)는 널(null)일 것이거나, 또는 일부 다른 정보는, 버퍼 포인터(114)에 대응하는 PB(112)가 압축된 메모리 제어기(36)에 의해 아직 할당되지 않았다고 표시할 것이다.
[0071] 도 9를 계속 참조하면, PA가 압축된 메모리 제어기(36)에 의해 수신될 때, PA는 PA에 대응하는 TLB 엔트리(74)를 룩업 하도록 TLB(68)의 태그들(72)에 비교된다. 압축된 메모리 제어기(36)는, 대응하는 DP에 대한 TLB 엔트리(74)를 참고하고 대응하는 PB 내의 PA에 대응하는 PB(112(1)-112(4))의 어드레스를 결정하도록 PA의 어드레스를 이용한다. 예를 들어, 도 9에서 도시된 바와 같이, PA가 TLB(68)의 선택된 TLB 엔트리(74)의 제 4 버퍼 포인터(114(4))에 대응하는 경우, 버퍼 포인터(114(4))는 시스템 메모리(38)의 PB(112(4))를 포인팅할 것이다. 각각의 TLB 엔트리(74)에 저장되고 압축된 데이터의 페이지에 대응하는 페이지 정보(118)는 추가로, PA에 기초하여 압축된 메모리 제어기(36)에 의해 액세스될 수 있다. 페이지 정보(118)는 이 예에서, 데이터 페이지 당 32(thirty-two)개의 TLB 엔트리(74)가 존재하기 때문에, 이 예에서 32(thirty-two)개의 엔트리를 포함한다. 페이지 정보(118)의 캐시 라인은 선택된 PB(112(4))의 압축된 메모리 데이터의 길이 및 시작 메모리 데이터 블록(116)을 결정하기 위해 PA에 따라 액세스되는 워드에 기초하여 액세스된다. 이 예에서, PA에 대응하는 압축된 메모리 데이터는, (비트를 절감하기 위해) 3(three)의 길이를 의미하는 '2'의 값을 갖는 시작 메모리 데이터 블록(116)(Bl# '96')에 대응하며, 압축된 메모리 데이터는 메모리 데이터 블록(116)(Bl# '96') 에서 시작하는 3(three) 바이트라는 것을 의미한다.
[0072] 도 10은 메모리 액세스를 위해, 도 8의 하이브리드 라인/페이지-기반 버퍼 메모리 용량 압축 방식(110)에 따라, 도 9의 할당된 DP 내의 할당된 PB(112)로 PA를 변환하는 도 3의 압축된 메모리 제어기(36)의 예시적인 프로세스를 예시하는 흐름도이다. 여기서 예시된 바와 같이, 압축된 메모리 제어기(36)는 입력 데이터(120)로서 PA를 수신한다(블록 122). PA는 판독 또는 기록 메모리 트랜잭션으로서 옵코드(opcode)를 갖는다(블록 122) 입력 데이터(120)는 메모리 트랜잭션이 기록 트랜잭션인 경우 압축 길이를 또한 포함할 수 있다(블록 122). 압축된 메모리 제어기(36)는 시작 블록 번호 및 판독 또는 기록 트랜잭션의 옵코드를 갖는 PB(112)로 PA를 컨버팅하도록 도 8 및 도 9에서 예시된 바와 같은 TLB(68)를 참고한다(블록 124). PA가 TLB(68)에 포함되지 않은 경우, 압축된 메모리 제어기(36)는 새롭게 수신된 PA에 대한 공간(room)을 만들기 위해 TLB(68)의 기존의 TLB 엔트리(74)를 퇴거시킨다(블록 126). 퇴거된 TLB 엔트리(74)는 TLB 엔트리(74)가 더티(dirty)인 경우 마스터 디렉토리(66)에 다시 저장된다(블록 126). 수신된 PA에 대응하는 마스터 디렉토리(66)의 TLB 엔트리(74)는 마스터 디렉토리(66)로부터 패치되고 TLB(68)에 넣어진다(블록 126).
[0073] 도 10을 계속 참조하면, PA가 TLB(68)에 포함된 경우, 또는 블록(126)의 퇴거 프로세스가 완료된 경우, 압축된 메모리 제어기(36)는 메모리 액세스가 판독 또는 기록 동작인지를 결정한다(블록 128). 메모리 액세스가 판독 동작인 경우, 압축된 메모리 제어기(36)는, 압축된 메모리 데이터를 판독하기 위해 TLB(68)의 페이지 정보(118) 및 버퍼 포인터(114)에 대응하는 메모리 데이터 블록들(116)에 액세스하도록 TLB 엔트리(74)를 이용하고, 프로세스는 완료된다(블록 130). 메모리 트랜잭션이 기록 동작인 경우, 압축된 메모리 제어기(36)는 입력 데이터(120)로부터의 압축된 길이가 변경되었는지를 결정한다(블록 132). 아닌 경우, 압축된 메모리 제어기(36)는, 압축된 메모리 데이터를 기록하기 위해 TLB(68)의 페이지 정보(118) 및 버퍼 포인터(114)에 대응하는 메모리 데이터 블록(들)(116)에 액세스하도록 TLB 엔트리(74)를 이용하고, 프로세스는 완료된다(블록 130). 입력 데이터(120)로부터의 압축된 길이가 변경(블록 132)되었고 증가(블록 134)되었다고 압축된 메모리 제어기(36)가 결정하는 경우, 압축된 메모리 제어기(36)는 PA에 대응하는 시스템 메모리(38)의 현재 메모리 데이터 블록(들)(116)을 프리(free)시키고 새로운 메모리 데이터 블록들(116)을 PA에 할당하고(블록 136), TLB(68) 및 대응하는 TLB 엔트리(74)에 대한 더티 비트를 업데이트한다(블록 138). 입력 데이터(120)로부터의 압축된 길이가 증가되지 않는다고(블록 134) 압축된 메모리 제어기(36)가 결정한 경우, 압축된 메모리 제어기(36)는 PA에 대응하는 시스템 메모리(38)의 과도한 메모리 데이터 블록(들)(116)을 프리시키고(블록 140)(또는 대안적으로, 모든 메모리 데이터 블록(들)(116)을 프리시키고 시스템 메모리(38)의 새로운 메모리 데이터 블록들(116)을 재할당함), PA에 대응하는 페이지 정보(118)의 메모리 데이터 블록(116)의 길이를 업데이트하고 TLB(68)의 TLB 엔트리(74)의 더티 비트들을 세팅한다(블록 140).
[0074] 수신된 PA를 시스템 메모리(38)에 존재하는 압축된 PA로 변환하기 위한 압축된 메모리 제어기(36)의 동작으로 인한 임의의 성능 손실을 보상할 수 있는 부가적인 캐시를 도 2의 SOC(10')에 제공하는 것이 또한 바람직할 수 있다. 이와 관련하여, 도 11a는 도 2의 SOC(10')와 같은 대안적인 SOC(10(1))의 예를 예시하지만, 도 11a의 SOC(10(1))는 부가적으로, 이 예에서 L4 캐시인 선택적인 캐시(142)를 포함한다. 압축된 메모리 제어기(36)는, 레이턴시를 최소화하기 위해 (압축된 PA(CPA)(144)로서 여기서 지칭되는) 마스터 디렉토리(66) 또는 TLB(68) 및 L4 캐시(142) 둘 다의 PA를 동시에 룩업할 수 있다. L4 캐시(142)의 어드레스들은 압축되지 않은 PA들이다. L4 캐시(142)의 PA 히트 시에, CPA(144)의 PA 룩업은 리던던트(redundant)하다. L4 캐시(142)의 PA 미스 시에, CPA(144)의 PA 룩업은 변환된 압축된 PA를 획득하기 위해 요구된다.
[0075] L4 캐시(142) 및 CPA(144) 둘 다에 액세스하는 CPU(16)의 부가적인 레이턴시를 방지하기 위해, L4 캐시(142) 및 CPA(144) 둘 다는 프라이밍(prime)될 수 있다. 이와 관련하여, 도 11b는 히트 또는 미스가 공유 L3 캐시(42)에서 결정되기 이전에 PA를 룩업하도록 압축된 메모리 제어기(36)에서 L4 캐시(142) 및 CPA(144)를 프라이밍하는 도 11a의 SOC(10(1)의 예를 예시한다. 공유 L3 캐시(42)가 판독 동작을 위해 CPU(16)에 의해 액세스될 때, L4 캐시(142) 및 CPA(144)는 PA의 얼리(early) 룩업을 행함으로써 프라이밍될 수 있다. 이 룩업들의 결과들은 L4 캐시(142)와 연관된 이력 버퍼(146) 및 CPA(144)와 연관된 CPA 이력 버퍼(148)에 저장될 수 있다. 예로서, 이력 버퍼(146) 및/또는 CPA 이력 버퍼(148)는 적은 레이턴시를 갖는 레지스터들로부터 구축될 수 있다. CPA(144)에서 미스 시에, 선택적인 프리-패치가 마스터 디렉토리(66)에서 압축된 메모리 제어기(36)에 의해 수행될 수 있다. CPA(144)의 이러한 프라이밍은 개선된 CPA(144) 판독 히트 레이트를 제공할 수 있다. 공유 L3 캐시(42)에서 미스가 발생할 때, 이력 버퍼(146)는 히트가 L4 캐시(142)에서 발생했는지를 결정하도록 검사된다. L4 캐시(142)에서 히트가 발생한 경우, L4 캐시(142)로부터의 데이터가 리턴된다. L4 캐시(142)에서 미스가 발생한 경우, CPA 이력 버퍼(148)가 그 후 검사된다. CPA 이력 버퍼(144)의 검사에 기초하여 CPA(144)에서 히트가 발생한 경우, 압축된 PA는 CPA(144)로부터 직접 판독될 수 있고; 그렇지 않으면(즉, L4 캐시(142) 미스 및 CPA(144) 미스), 마스터 디렉토리(66)는 실행될 판독 동작에 대한 압축된 PA를 획득하기 위해 압축된 메모리 제어기(36)에 의해 판독된다.
[0076] 본원에서 개시되는 압축된 메모리 제어기(36)에 의해 제공되는 메모리 용량 압축으로 인해, 물리적으로 존재하는 메모리 공간보다 더 많은 메모리 물리적 어드레스 공간이 운영 체제(OS)에 대해 이용 가능하게 된다. 예를 들어, OS에는 16Gb의 메모리 공간이 주어질 수 있지만, 단지 8Gb의 물리적 시스템 메모리(38)만이 제공될 수 있다. 압축 비가 변함에 따라(즉, 악화됨), 시스템 메모리(38)의 모든 프리 DP들이 줄어들 수 있다. 압축된 메모리 제어기(36)가 게스트(guest) OS로부터 메모리를 되찾을 수 있는 능력을 제공하는 것이 바람직하다. 그러나 일부 기본적인 동작 원리들 또는 규칙들은 다음과 같이 요구될 수 있다. 예를 들어, 제 1 예시적인 규칙은, 이미 OS에 지정된 DP들은 OS로부터 빼앗을 수 없다고 규정하는 것이 바람직할 수 있다. 또한, 다른 예시적인 규칙은, OS에 의한 페이지들의 뷰(view)가 최대의 비-변환된 어드레스(예를 들어, VA는 VA이고, PA는 PA임)로서 유지되는 것을 규정하는 것일 수 있다. 즉, 압축된 메모리 제어기(36)에 의해 수행된 압축 및 시스템 메모리(38)에서 DP들을 발생시킬 수 있는 근본적인 메모리 단편화는 OS로부터 은닉되고 압축된 메모리 제어기(36)의 하드웨어에 의해 완전히 핸들링된다. 추가로, 다른 예시적인 규칙으로, OS에 의한 기록은 항상 성공적적이야 하는데, 이는 시스템 메모리(38)가 VA 공간보다 더 적을 때조차도 OS의 최대 PA 공간이 기록 가능하게 되어야 한다는 것을 의미한다.
[0077] 이와 관련하여, OS가 이 규칙을 따르게 하도록 허용하기 위해, 압축 드라이버는 동적 메모리 사이징을 허용하도록 CPU(16) 상에서 실행중인 각각의 OS에 설치될 수 있다. 압축 드라이버는 OS에 대한 확장이며, OS의 메모리 관리 방식에 영향을 주지 않는다. 시스템 메모리(38)가 프리(free) 압축된 PB들 상에서 로우(low)로 실행중일 때, 이는 OS로부터 페이지를 요청하는 발룬(balloon) 드라이버들에 관한 압박을 증가시킨다. 이 압축 드라이버들은 OS로부터 더 많은 메모리를 요청한다. 압축 드라이버가 더 많은 메모리를 획득할 때, 이들은 그것을 고정(pin)하며, 이는, 페이지가 디스크로 스왑 아웃(swap out)될 수 없고 이에 따라 VA-PA 변환 맵핑은 OS에 의해 유지되어야 한다는 것을 의미한다. 압축 드라이버들은 그 후 고도로 압축 가능한 패턴들을 메모리에 기록한다. 따라서, 어떠한 하이퍼바이저(hypervisor) 또는 변환 지원도 요구되지 않는다. 위에서 논의된 DP 관리 방식들은 DP들을 필요한 프리 DP들로 재할당하는데 이용될 수 있다. "긴급" 발룬은 버스트들을 흡수하기 위해 유지될 수 있다.
[0078] 도 12는 예시적인 동적 메모리 사이징의 개략도이다. 예를 들어, 도 1의 SOC(10)의 CPU(16) 상에서 실행될 수 있는 호스트 OS(150)가 제공된다. 호스트 OS(150)는 하나 또는 그 초과의 게스트 OS들(152(1)-152(T))을 지원한다. 호스트 OS(150)는 시스템 메모리(38)에 대한 인터페이스를 게스트 OS들(152(1)-152(T))에 제공한다. 도 12의 예에서, 시스템 메모리(38)는 호스트 OS(150)에 할당될 수 있는 32 GB 어드레싱 가능하게 될 수 있지만, 크기는 예상된 2x 압축 비를 이용하여 16GB이다. 하이퍼바이저로서 호스트 OS(150)에서 실행중인 메모리 제어기 드라이버(154)는 버퍼 풀들, 게스트 OS(152(1)-152(T)) 속성들, 서비스 품질(QoS) 요건들, 할당된 메모리 크기(PA들) 및 메모리 결함들을 셋업함으로써 하드웨어를 초기화한다.
[0079] 도 12를 계속 참조하면, 데이터 압축 드라이버(DCD)(156(1)-156(T))가 각각의 게스트 OS(152(1)-152(T)) 상에 설치된다. 압축된 메모리 제어기(36)가 시스템 메모리(38)의 프리 압축된 메모리 버퍼들 상에서 로우로 실행중일 때, 압축된 메모리 제어기(36)는 압박 데이터(pressure data)(158)의 형태로 게스트 OS들(152(1)-152(T))에 표시를 제공하며, 이는 데이터 압축 구동기들(156(1)-156(T)) 상의 압박을 증가시킨다. 압축된 메모리 제어기(36)는 프리 버퍼 상태를 모니터링하고 압박 데이터(158)를 각각의 게스트 OS(152(1)-152(T))에 제공한다. 이는 각각의 데이터 압축 드라이버(156(1)-156(T))에 지정된 메모리-맵핑 레지스터일 수 있다. 버퍼들의 프리 풀이 시스템 메모리(38)에서 고갈되고 있다고 압축된 메모리 제어기(36)가 검출하면, 압축된 메모리 제어기(36)는 속성들에 의존하여 각각의 게스트 OS(152(1)-152(T))에 대한 압박 레지스터 값을 증가시킬 수 있다.
[0080] 이에 응답하여, 게스트 OS들(152(1)-152(T))의 데이터 압축 드라이버들(156(1)-156(T))은 호스트 OS(150)로부터 보다 많은 메모리를 요청하며, 이는 시스템 메모리(38)를 이용하는 다른 소스들로부터 메모리를 프리시키게 하도록 호스트 OS(150) 상의 압박을 어서트한다. 예를 들어, 호스트 OS(150)는 메모리를 프리시키도록 페이지 캐싱 및 프로세스 힙(process heap)을 이용할 수 있다. 데이터 압축 드라이버들(156(1)-156(T))은 예로서 압박 레지스터 값에 비례하는 레벨로 그 각각의 게스트 OS(152(1)-152(T))로부터의 페이지들을 요청하도록 구성될 수 있다. 게스트 OS들(152(1)-152(T))은 페이지들을 제공할 수 있고, 필요한 경우, 페이지 캐시와 같은 다른 풀들로부터 페이지를 프리시킬 수 있다. 게스트 OS들(152(1)-152(T))은 또한 힙(heap) 등으로부터 이용되는 페이지들을 페이지-아웃(page-out)할 수 있다.
[0081] 데이터 압축 드라이버들(156(1)-156(T))이 시스템 메모리(38)로부터 더 많은 메모리를 획득하면, 이들은 그것을 고정하고 그 후 고도로 압축 가능한 패턴들을 시스템 메모리(38)에 기록할 수 있다. 이와 관련하여, 데이터 압축 드라이버들(156(1)-156(T))은 제로들(0들)을 페이지에 기록할 수 있고, 압축된 메모리 제어기(36)는 근본적인 버퍼들을 프리 풀로 효과적으로 프리시킬 수 있다. 따라서, 어떠한 하이퍼바이저(hypervisor) 또는 변환 지원도 요구되지 않는다. 위에서 논의된 DP 관리 방식들은 DP들을 필요한 프리 DP들로 재할당하는데 이용될 수 있다. "긴급" 발룬은 버스트들을 흡수하기 위해 유지될 수 있다.
[0082] 위에서 언급된 바와 같이, 압축된 메모리 제어기(36)는 또한 메모리 대역폭 압축 방식들을 이용할 수 있다. 예를 들어, 내부 시스템 버스(22) 상의 대역폭을 감소시키기 위해, 내부 시스템 버스(22)와 같은 메모리 버스 상에서 128 바이트 데이터 블록을 압축하는 것이 바람직할 수 있다. 대역폭을 감소시키는 것은 또한 버스 레이턴시를 감소시키고 전력 소비를 감소시킬 수 있다. CPU들(16) 및/또는 CPU들(16)에서 제공되는 하드웨어 스레드들의 수는, CPU(16) 성능에 영향을 주지 않고도 또한 증가될 수 있을 수 있다. 아니면 대안적으로, 주어진 버스 대역폭에 대한 메모리 채널의 수를 감소시키는 옵션이 제공될 수 있다.
[0083] 이와 관련하여, 도 13은 메모리 대역폭 압축을 제공하기 위해 도 3의 압축된 메모리 제어기(36)에 의해 구현될 수 있는 예시적인 메모리 대역폭 압축 방식(160)의 개략도이다. 메모리 용량 압축 방식의 이 예에서, 데이터는, 압축된 또는 압축되지 않은 형태로 시스템 메모리(38)의 PA 위치에 저장된다. 이와 관련하여, 복수의 데이터 라인들(162)로 구성된 시스템 메모리(38)가 제공된다. 데이터 라인(162)은 수신된 PA에 의해 압축된 메모리 제어기(36)에 의해 액세스 가능하다. ECC 압축 표시자(166)는 데이터 라인(162)의 압축된 형태로 저장되었는지 여부를 표시하기 위해 각각의 데이터 라인(162)과 관련하여 저장된다. 이러한 방식으로, 시스템 메모리(38)에 대한 메모리 액세스 요청을 수행할 때, 압축된 메모리 제어기(36)는 데이터 라인(162)가 메모리 액세스 요청의 프로세싱의 부분으로서 압축되는지를 결정하기 위해 어드레싱될 물리적 어드레스에 대응하는 데이터 라인(162)과 연관되는 ECC 압축 표시자(166)를 검사할 수 있다.
[0084] PA에 대응하는 시스템 메모리(38)의 데이터의 데이터 라인(162) 당 하나의 엔트리(165)를 포함하는 마스터 디렉토리(66)가 여전히 또한 제공된다. 마스터 디렉토리(66)는 또한, 데이터 라인(162)이 데이터 라인(162)에 압축된 채로 저장되었는지, 그리고 그렇다면, 다수의 압축 길이들이 지원되는 경우 압축 길이를 나타내기 위해 엔트리(165) 당 1(one)개의 압축 표시자(166)를 포함한다. 예를 들어, 데이터 라인(162)이 길이 면에서 128 바이트이고 거기에 저장된 데이터가 64 바이트 또는 그 미만으로 압축될 수 있는 경우, 시스템 메모리(38)에 저장된 데이터에 대응하는 마스터 디렉토리(66)의 압축 표시자(166)는, 데이터가 128 바이트 데이터 라인(162) 중 처음 64 바이트들에 저장되었음을 표시하도록 세팅될 수 있다.
[0085] 도 13을 계속 참조하여, 기록 동작 동안, 압축된 메모리 제어기(36)는 시스템 메모리(38)에 기록될 메모리 블록을 압축할 수 있다. 예를 들어, 데이터(예를 들어, 128 바이트 또는 256 바이트)가 압축된다. 데이터 블록이 시스템 메모리(38)의 버스트 크기(예를 들어, 64 바이트)보다 작거나 동일한 경우, 64 바이트가 기록되고, 그렇지 않으면 128 바이트가 기록된다. 256 바이트는 압축된 데이터 크기에 의존하여 64, 128, 192, 또는 256 바이트로서 기록될 수 있다. 시스템 메모리(38)의 데이터 라인(162)과 연관되는 ECC 압축 표시자(166)는 데이터 라인(162)의 데이터가 압축되었는지 여부를 나타내기 위해 또한 세팅될 수 있다.
[0086] 판독 동작 예 동안, 압축된 메모리 제어기(36)는 시스템 메모리(38)로부터 액세스될 데이터의 부분을 판독할 수 있다. 판독될 데이터가 ECC 압축 표시자(166)에 의해 표시된 바와 같이 시스템 메모리(38)에서 압축된 경우, 판독된 데이터의 부분이 압축된 형태로라도 전체 데이터 블록이기 때문에 판독 동작이 완료된다. 압축된 데이터가 대역폭 압축을 달성하기 위해 압축된 형태로 (도 2의) 내부 시스템 버스(22) 상에서 압축된 메모리 제어기(36)에 의해 제공될 수 있다. 판독된 데이터의 부분이 시스템 메모리(38)에서 압축되지 않은 경우, 이는, 판독될 메모리 라인의 부가적인 부분들이 또한 시스템 메모리(38)로부터 판독되어야 하기 때문에, 레이턴시에 영향을 미친다. 시스템 메모리(38)로부터 2번의 액세스들에서 데이터를 판독하는 것이 양호한지 또는 레이턴시 영향을 방지하기 위해 시스템 메모리(38)로부터 최대량의 데이터를 판독하는 것이 양호한지를 시스템이 "러닝(learn)"하도록 구성될 수 있는 트레이닝 매커니즘(training mechanism)은 다수의 어드레스 범위들을 위해 전개될 수 있다.
[0087] 이 예에서, 캐시 엔트리들(170)을 포함하는 압축 표시자(CI) 캐시(168)가 또한 제공될 수 있다. CI 캐시(168)는 시스템 메모리(38) 외부의 별개의 캐시에서 제공된다. CI 캐시(168)는, 시스템 메모리(38)의 데이터 라인(162)이 압축된 형태로 또는 압축되지 않은 형태로 저장되었는지를 나타내기 위해 시스템 메모리(38)의 데이터 라인(162) 당 하나의 캐시 엔트리(170)를 포함하는 캐시이다. 이러한 방식으로, 시스템 메모리(38)에 대한 메모리 액세스 요청을 수행할 때, 압축된 메모리 제어기(36)는 먼저, 데이터 라인(162)을 판독해야 할 필요 없이, 메모리 액세스 요청의 프로세싱의 부분으로서 시스템 메모리(38)에서 PA의 데이터 라인(162)이 압축되었는지를 결정하기 위해 어드레싱될 PA에 대응하는 CI 캐시(168)의 캐시 엔트리(170)를 검사할 수 있다. 따라서, 데이터 라인(162)이 압축된 채로 저장되었음을 CI 캐시(168)가 표시하는 경우, 압축된 메모리 제어기(36)는 전체 데이터 라인(162)을 판독할 필요가 없고, 이에 따라 레이턴시를 감소시킨다. 데이터 라인(162)이 압축되지 않은 채로 저장되었다고 CI 캐시(168)가 표시하는 경우, 압축된 메모리 제어기(36)는 전체 데이터 라인(162)을 판독할 수 있다. CI 캐시(168)에서 미스가 발생한 경우, 마스터 디렉토리(66)에서 액세스되는 데이터 라인(162)에 대응하는 대응 ECC 압축 표시자(166)가 참고되고 동일한 PA에 대한 후속 메모리 액세스 요청들에 대해 CI 캐시(168)에 로딩될 수 있다.
[0088] 예를 들어, CI 캐시(168)는 정규 캐시로서 구성될 수 있다. CI 캐시(168)는 태그 어레이를 포함할 수 있고, n-웨이들 또는 다른 웨이들로 구성될 수 있다. CI 캐시(168)는 압축된 메모리 제어기(36)에 의해 구현될 수 있는 퇴거 정책을 가질 수 있다. CI 캐시(168)의 각각의 캐시 라인(172)은 다수의 캐시 엔트리(170)를 저장할 수 있다. 각각의 캐시 엔트리(170)는, 캐시 엔트리(170)와 연관된 시스템 메모리(38)의 데이터 라인(162)이 압축되었는지를 표시하기 위해 및/또는 캐시 엔트리(170)에 대응하는 데이터에 대한 압축 크기에 대한 옵션들을 표현하기 위해(예를 들어, 데이터가 32, 64, 96, 또는 128 바이트로 압축될 수 있는 경우 4(four)개의 옵션들을 대한 2(two)개의 캐시 표시자들) 하나의 압축 표시자(174)를 포함한다. 이 예에서, ECC 압축 표시자(166)는, 이 정보가 캐시 엔트리들(170)의 압축 표시자(174)에 또한 저장되기 때문에 리던던트하다는 것에 주의한다. 예를 들어, 데이터 라인(162)이 길이면에서 128 바이트이고 거기에 저장된 데이터가 64 바이트 또는 그 미만으로 압축될 수 있는 경우, 시스템 메모리(38)의 데이터 라인(162)에 대응하는 CI 캐시(168)의 캐시 엔트리(170)의 압축 표시자(174)는, 데이터가 128 바이트데이터 라인(162) 중 처음 64 바이트들에 저장되었음을 표시하도록 세팅될 수 있다.
[0089] CI 캐시(168)가 이용될 때 판독 동작의 다른 예에서, 압축된 메모리 제어기(36)는, 데이터 블록이 압축된 경우, 다수의 128-바이트 메모리 블록들에 대해, 데이터 라인(162)에서 기억하는 CI 캐시(168)를 유지한다(예를 들어, 128-바이트 블록 당 1비트 또는 256-바이트 블록 당 2비트). CI 캐시(168)는 4K 페이지에 따라 어드레싱될 수 있다(이 예에서 하나의 페이지-어드레스 및 플래그들에 대한 32-비트 엔트리들). 판독 동작을 위해, CI 캐시(168)는 액세스될 어드레스가 CI 캐시(168)에 포함되는지를 알기 위해 검사된다. 요청된 데이터가 CI 캐시(168)에 있는 경우, 압축된 메모리 제어기(36)는 CI 캐시(168)의 캐시 엔트리(170)에 따라 시스템 메모리(38)로부터 데이터의 양을 판독할 수 있다. 요청된 데이터가 CI 캐시(168)에 있지 않은 경우, 2개의 예시적인 옵션들이 있다. 최악의 경우의 시나리오를 가정하면, 압축된 메모리 제어기(36)는 최대 캐시 엔트리(170) 크기(예를 들어, 128 바이트)를 판독할 수 있다. 대안적으로, 압축된 메모리 제어기(36)는 위에서 논의된 2-액세스 판독 프로세스에 따라 판독할 수 있다. 러닝 확장이 또한 이용될 수 있다. 판독될 데이터가 CI 캐시(168)에 있지 않은 경우, CI 캐시(168)는 다음과 같이 업데이트될 수 있다. 캐시 엔트리(170)는 알려진 기술들(예를 들어, LRU, 의사(pseudo)-LRU 등)에 따라 CI 캐시(168)로부터 퇴거될 수 있다. 퇴거된 캐시 엔트리(170)는 메모리에 기록될 필요가 없다는 점에 주의한다(그것은 단지 CI 캐시(168)로부터 제거될 수 있음). 시스템 메모리(38)로부터 방금 판독되었던 블록을 제외하고, 모든 캐시 엔트리들(170)이 그의 실제 크기로 세팅되는 최대 판독 크기로 세팅되는 새로운 캐시 엔트리(170)가 생성될 수 있다. 최적화로서, 이 퇴거는, 시스템 메모리(38)로부터 판독된 블록이 압축되지 않은 경우(즉, 그의 최대 크기), 스킵될 수 있다.
[0090] 도 13을 계속 참조하면, 제공된 CI 캐시(168)로 시스템 메모리(38)의 데이터 라인(162)에 기록 시에, 압축된 메모리 제어기(36)는 압축된 크기로 항상 기록하도록 구성될 수 있으며, 캐시 엔트리(170)가 시스템 메모리(38)에서 압축되었는지 또는 아닌지를 나타내기 위한 ECC 압축 표시자(166)를 갖는다. 압축 표시자(174)가 데이터 라인(162)과 연관되는 CI 캐시(168)의 캐시 엔트리(170)에 존재하는 경우, 압축 표시자(174)는 CI 캐시(168)에서 업데이트된다. 압축 표시자(174)가 데이터 라인(162)과 연관된 캐시 엔트리(170)에 대한 CI 캐시(168)에 존재하지 않는 경우, CI 캐시(168)는 업데이트될 수 있다. 압축된 길이가 빈(bin)-크기(예를 들어, 64B)보다 더 큰 경우, CI 캐시(168)는 업데이트된다. 하나의 캐시 엔트리(170)가 퇴거되고, 새로운 캐시 라인(172)은 마스터 디렉토리(66)로부터의 CI 캐시(168)에 설치될 수 있다. 대응하는 데이터 라인(162)에 대한 압축 표시자(174)가 CI 캐시(168)에서 업데이트된다. 압축된 길이가 빈-크기 이하인 경우, CI 캐시(168)는 그것이 가능할지라도 업데이트되지 않아야 한다. 예를 들어, CI 캐시(168)는 (100%(즉, 항상)까지 구성될 수 있는) 특정 확률로 업데이트될 수 있다. 확률이 100%로 세팅된 경우, 마스터 디렉토리(66)는 일부 경우들에서 항상 정확할 수 있다. 그렇지 않으면, 마스터 디렉토리(66)는 실제 압축된 라인 길이보다 더 큰 압축된 라인 길이를 표현할 것이다. 이는 메모리 판독들 동안 마스터 디렉토리(66)를 업데이트하는데 있어서의 대역폭 대 대역폭 절감들 간의 트레이드오프이다.
[0091] 도 13을 계속 참조하면, 시스템 메모리(38)로부터의 판독 시에, ECC 압축 표시자(166)가 액세스된 데이터 라인(162)에 대한 CI 캐시(168)의 캐시 엔트리(170)에 존재하는 경우, 이는, 이 데이터 라인(162)에 대한 압축된 크기 정보가 알려져 있다는 것을 의미한다. 이와 관련하여, 캐시 라인(172)이 판독 크기를 결정하기 위해 CI 캐시(168)로부터 액세스되고, 그 데이터의 양은 대응하는 데이터 라인(162)으로부터 판독될 수 있다. 압축 표시자(174)가 CI 캐시(168)의 액세스된 캐시 라인(172)에 존재하지 않는 경우, 압축된 메모리 제어기(36)는 시스템 메모리(38)로부터 최대 라인 크기를 판독하고, 데이터가 압축되었는지 또는 아닌지를 결정하기 위해 ECC 압축 표시자(166)를 이용한다. 동시에, 압축된 메모리 제어기(36)는 구성 가능한 확률(예를 들어, 10%)로 마스터 디렉토리(66)로부터 CI 캐시(168)를 리프레시할 수 있다.
[0092] 대안적으로, 압축된 메모리 제어기(36)는 시스템 메모리(38)의 ECC 압축 표시자(166)를 이용하지 않도록 구성될 수 있다. 이 예에서, 마스터 디렉토리(66)는, 라인이 시스템 메모리(38)에서 압축되었는지 또는 아닌지를 항상 반영할 것이다. 시스템 메모리(38)에 대한 기록 트랜잭션 시에, 압축된 데이터는 압축된 메모리 제어기(36)에 의해 항상 기록될 것이다. 압축된 메모리 제어기(36)는 CI 캐시(168)의 압축 표시자(174)를 항상 업데이트할 것이며, 이는 필요한 경우 퇴거를 야기하고 마스터 디렉토리(66)가 액세스되게 한다. 시스템 메모리(38)에 대한 판독 트랜잭션 시에, 압축된 메모리 제어기(36)는 CI 캐시(168)의 압축 표시자(174)를 항상 먼저 판독하도록 구성되고, 존재하지 않는 경우, 캐시 라인(172)이 CI 캐시(168)로부터 퇴거될 것이고, CI 캐시(168)가 액세스될 것이다. 그 후, 라인은 ECC 압축 표시자(166)에서 특정된 길이에 기초하여 시스템 메모리(38)로부터 판독된다.
[0093] 판독 동작의 다른 예에서, 압축된 메모리 제어기(36)는, 블록이 압축된 경우, 다수의 128-바이트 메모리 블록들에 대해, 기억하는 CI 캐시(168)를 유지할 수 있다(예를 들어, 128-바이트 블록 당 1비트 또는 256-바이트 블록 당 2비트). CI 캐시(168)는 4K 페이지에 따라 어드레싱될 수 있다(하나의 페이지-어드레스 및 플래그들에 대한 32-비트 엔트리들). 판독 동작을 위해, CI 캐시(168)는 액세스될 어드레스가 CI 캐시(168)에 포함되는지를 알기 위해 검사된다. 요청된 데이터가 CI 캐시(168)에 있는 경우, 압축된 메모리 제어기(36)는 CI 캐시(168)의 캐시 엔트리(170)에 따라 시스템 메모리(38)로부터 데이터의 양을 판독할 수 있다. 요청된 데이터가 CI 캐시(168)에 있지 않은 경우, 2개의 예시적인 옵션들이 있다. 최가의 경우의 시나리오를 가정하면, 압축된 메모리 제어기(36)는 최대 캐시 엔트리(170) 크기(예를 들어, 128 바이트)를 판독할 수 있다. 대안적으로, 압축된 메모리 제어기(36)는 위에서 논의된 2-액세스 판독 프로세스에 따라 판독할 수 있다. 러닝 확장이 또한 이용될 수 있다. 판독될 데이터가 CI 캐시(168)에 있지 않은 경우, CI 캐시(168)는 다음과 같이 업데이트될 수 있다. 캐시 엔트리(170)는 알려진 기술들(예를 들어, LRU, 의사-LRU 등)에 따라 CI 캐시(168)로부터 퇴거될 수 있다. 퇴거된 캐시 엔트리(170)는 메모리에 기록될 필요가 없다는 점에 주의한다(그것은 단지 CI 캐시(168)로부터 제거될 수 있음). 시스템 메모리(38)로부터 방금 판독되었던 블록을 제외하고, 모든 캐시 엔트리들(170)이 그의 실제 크기로 세팅되는 최대 판독 크기로 세팅되는 새로운 캐시 엔트리(170)가 생성될 수 있다. 최적화로서, 이 퇴거는, 시스템 메모리(38)로부터 판독된 블록이 압축되지 않은 경우(즉, 그의 최대 크기), 스킵될 수 있다.
[0094] 도 13을 계속 참조하면, 시스템 메모리(38)에 기록 시에, 압축된 메모리 제어기(36)는 압축된 크기로 항상 기록하도록 구성될 수 있으며, 캐시 엔트리(170)가 시스템 메모리(38)에서 압축되었는지 또는 아닌지를 나타내기 위한 ECC 압축 표시자(166)를 갖는다. 압축 표시자(174)가 액세스된 캐시 엔트리(170)에 대한 CI 캐시(168)에 존재하는 경우, 압축 표시자(174)는 CI 캐시(168)에서 업데이트된다. 압축 표시자(174)가 CI 캐시(168)에 존재하지 않는 경우, CI 캐시(168)가 업데이트될 수 있다. 압축된 길이가 빈(bin)-크기(예를 들어, 64B)보다 더 큰 경우, CI 캐시(168)는 업데이트된다. 하나의 캐시 엔트리(170)가 퇴거되고, 새로운 캐시 라인(172)은 마스터 디렉토리(66)에 설치될 수 있다. 대응하는 데이터 라인(162)에 대한 압축 표시자(174)가 CI 캐시(168)에서 업데이트된다. 압축된 길이가 빈-크기 이하인 경우, CI 캐시(168)는 그것이 가능할지라도 업데이트되지 않아야 한다. 예를 들어, CI 캐시(168)는 (100%(즉, 항상)까지 구성될 수 있는) 특정 확률로 업데이트될 수 있다. 확률이 100%로 세팅된 경우, 마스터 디렉토리(66)는 일부 경우들에서 항상 정확할 수 있다. 그렇지 않으면, 마스터 디렉토리(66)는 실제 압축된 라인 길이보다 더 큰 압축된 라인 길이를 표현할 것이다. 이는 메모리 판독들 동안 마스터 디렉토리(66)를 업데이트하는데 있어서의 대역폭 대 대역폭 절감들 간의 트레이드오프이다.
[0095] 도 13을 계속 참조하면, 시스템 메모리(38)로부터의 판독 시에, ECC 압축 표시자(166)가 액세스된 데이터 라인(162)에 대한 CI 캐시(168)에 존재하는 경우, 이는, 이 데이터 라인(162)에 대한 압축된 크기 정보가 알려져 있다는 것을 의미한다. 이와 관련하여, 캐시 라인(172)이 판독 크기를 결정하기 위해 CI 캐시(168)로부터 액세스되고, 그 데이터의 양은 대응하는 데이터 라인(162)으로부터 판독될 수 있다. 압축 표시자(174)가 CI 캐시(168)의 액세스된 캐시 라인(172)에 존재하지 않는 경우, 압축된 메모리 제어기(36)는 시스템 메모리(38)로부터 최대 라인 크기를 판독하고, 데이터가 압축되었는지 또는 아닌지를 결정하기 위해 ECC 압축 표시자(166)를 이용한다. 동시에, 압축된 메모리 제어기(36)는 구성 가능한 확률(예를 들어, 10%)로 마스터 디렉토리(66)로부터 CI 캐시(168)를 리프레시할 수 있다.
[0096] 대안적으로, 압축된 메모리 제어기(36)는 시스템 메모리(38)의 ECC 압축 표시자(166)를 이용하지 않도록 구성될 수 있다. 이 예에서, 마스터 디렉토리(66)는, 라인이 시스템 메모리(38)에서 압축되었는지 또는 아닌지를 항상 반영할 것이다. 시스템 메모리(38)에 대한 기록 트랜잭션 시에, 압축된 데이터는 압축된 메모리 제어기(36)에 의해 항상 기록될 것이다. 압축된 메모리 제어기(36)는 CI 캐시(168)의 압축 표시자(174)를 항상 업데이트할 것이며, 이는 필요한 경우 퇴거를 야기하고 마스터 디렉토리(66)가 액세스되게 한다. 시스템 메모리(38)에 대한 판독 트랜잭션 시에, 압축된 메모리 제어기(36)는 CI 캐시(168)의 압축 표시자(174)를 항상 먼저 판독하도록 구성되고, 존재하지 않는 경우, 캐시 라인(172)이 CI 캐시(168)로부터 퇴거될 것이고, 마스터 디렉토리(66)가 액세스될 것이다. 그 후, 라인은, ECC 압축 표시자(166)에서 특정된 길이에 기초하여 시스템 메모리(38)로부터 판독된다.
[0097] 메모리 대역폭 압축 방식에 대한 부가적인 캐시를 제공하는 것이 또한 바람직할 수 있다. 이와 관련하여, 도 14는 도 2의 SoC(10')와 같은 대안적인 SoC(10(2))의 예를 예시하지만, 도 14의 SoC(10(2))는 부가적으로, 이 예에서 L4 캐시인 선택적인 캐시(142)를 포함한다. 압축된 메모리 제어기(36)는 레이턴시를 최소화하기 위해 L4 캐시(142) 및 CI 캐시(168) 둘 다의 PA를 동시에 룩 업할 수 있다. L4 캐시(142)의 어드레스들은 압축되지 않은 PA들이다. L4 캐시(142)의 PA 히트 시에, CI 캐시(168)의 PA 룩업은 리던던트하다. L4 캐시(142)의 PA 미스 시에, CI 캐시(168)의 PA 룩업은 시스템 메모리(38)로부터 데이터를 획득하기 위해 요구된다. 또한, L4 캐시(142) 및 CI 캐시(168) 둘 다에 액세스하는 CPU(16)의 부가적인 레이턴시를 방지하기 위해, L4 캐시(142) 및 CI 캐시(168)는 도 11b에 관하여 위에서 설명된 프라이밍과 유사하게 프라이밍될 수 있다.
[0098] 위에서 논의된 바와 같이, 압축을 최적화하기 위한 특수 경우로서 모두 0들의 메모리 데이터 블록의 압축을 제공하는 것이 바람직할 수 있다. 예를 들어, 메모리 데이터 블록(예를 들어, 128 바이트)이 모두 0들인 경우, 데이터는 판독 또는 기록되지 않지만, 모든 0들로서 별개의 데이터 구조에 표시된다. 제로-비트는, 메모리 라인이 압축되어 메모리 데이터 블록 당 1(one) 비트를 부가하는지를 나타내기 위해 시스템 메모리(38)에 제공될 수 있다. 압축된 메모리 제어기(36)는 예를 들어, 블록이 모두 0인 경우 128 바이트 메모리 블록들의 수를 기억하는 캐시를 유지할 수 있다. 기록 동작에 대해, 메모리 데이터 블록의 라인이 모두 0들인 경우, 압축된 메모리 제어기(36)는 시스템 메모리(38)에 라인을 기록하는 것이 아니라 CI 캐시(168)가 업데이트된다. 판독 동작에 대해, CI 캐시(168)의 제로-비트가 라인에 대해 검사된다. 라인이 CI 캐시(168)에 있는 경우, 제로-비트에 의존하여, 라인이 시스템 메모리(38)로부터 판독되거나, 또는 모든 0들이 리턴된다. 라인이 CI 캐시(168)에 있지 않은 경우, 그것은 시스템 메모리(38)로부터 판독된다. 라인이 0인 경우, CI 캐시(168)는 업데이트될 수 있다. CI 캐시(168)는 알려진 기술들(LRU, 의사(pseudo)-LRU 등)에 따라 TLB 엔트리(74)를 퇴거하도록 업데이트될 수 있다. 라인이 퇴거되는 경우, 그의 제로-비트 세트를 갖는 모든 라인들이 메인 메모리에 기록될 필요는 없다. 이는 라이트-올-제로 큐(write-all-zeros queue)로서 구성될 수 있다. 가능한 최적화는 2(two) 비트들을 이용할 것이고, 여기서 1비트는 라인 모두 0인 경우를 나타내고, 다른 비트는 라인이 더티(즉, 메인 메모리에 아직 기록되어 있지 않음)인 경우를 나타낸다. 압축된 메모리 제어기(36)의 백그라운드 작업은 CI 캐시(168)를 검사하고, "라이트-올-제로" 큐에 더티-비트들을 갖는 라인들을 큐잉한다. 위에서 설명된 메모리 대역폭 압축 방식들을 통해, 상이한 메모리 압축 방식들은 원하는 대로 압축된 메모리 제어기(36)에 의해 이용될 수 있다. 예를 들어, 64, 128, 및 256 바이트와 같은 작은 데이터 블록들에 대해 최적화되는 메모리 압축 방식들을 이용하는 것이 바람직할 수 있는데, 그 이유는 위의 예들에서 설명된 캐시 라인들이 예로서 이 크기들을 포함하기 때문이다.
[0099] 이와 관련하여, 도 15는 빈발 패턴 압축 데이터 압축 방식(180)을 예시한다. 이와 관련하여, 압축될 소스 데이터 포맷(182)의 소스 데이터는 예로서 128바이트로 도시된다. 압축 데이터 포맷(184)이 아래에서 도시된다. 압축된 데이터 포맷(184)은 프리픽스 코드(Px) 및 DaTax로서 프리픽스 뒤의 데이터의 포맷으로 제공된다. 프리픽스는 3-비트이다. 프리픽스 코드들은, 빈발 패턴 인코딩 표(188)의 프리픽스 코드 열(186)에서 도시되며, 이 표는 프리픽스 코드 열(186)에서의 주어진 프리픽스 코드에 대해 인코딩된 패턴 열(190)에서의 인코딩된 패턴을 도시한다. 인코딩된 패턴에 대한 데이터 크기는, 빈발 패턴 인코딩 표(188)의 데이터 크기 열(192)에서 제공된다.
[00100] 도 16은 32-비트 빈발 패턴 압축 데이터 압축 방식(194)을 예시한다. 이와 관련하여, 압축될 소스 데이터 포맷(196)의 소스 데이터는 예로서 128바이트로 도시된다. 압축 데이터 포맷(198)이 아래에서 도시된다. 압축된 데이터 포맷(198)은 프리픽스(Px) 및 DaTax로서 프리픽스 바로 뒤의 데이터의 포맷으로 제공된다. 새로운 압축된 데이터 포맷(200)이 프리픽스 코드들(Px), 데이터(Datax), 플래그들 및 패턴들의 상이한 포맷으로 제공되며, 이는 효율성 목적으로 함께 그룹핑되도록 구성된다. 프리픽스 코드는 3-비트이다. 프리픽스 코드들은, 프리픽스 코드 열(202)에서 주어진 프리픽스 코드에 대해 패턴 인코딩된 열(206)에서 인코딩된 패턴을 도시하는 빈발 패턴 인코딩 표(204)의 프리픽스 코드 열(202)에서 도시된다. 인코딩된 패턴에 대한 데이터 크기는, 빈발 패턴 인코딩 표(204)의 데이터 크기 열(208)에서 제공된다. 프리픽스 코드 000은, 새로운 압축된 데이터 포맷(200)에서 32-비트의 최대 크기의 데이터일 수 있는 압축되지 않은 패턴을 나타낸다. 프리픽스 코드 001은 새로운 압축된 데이터 포맷(200)의 데이터에서 0비트로서 제공될 수 있는 모두 0의 데이터 블록을 나타낸다. 3-비트 프리픽스를 통해, 프리픽스 코드들(010-111)은, 이 예에서 각각 0, 4, 8, 12, 16, 및 24 비트의 패턴들인, 소스 데이터에서 인지되는 다른 특정 패턴들을 인코딩하는데 이용될 수 있다.
[00101] 도 17은 32-비트 빈발 패턴 압축 데이터 압축 매커니즘(210)의 예를 예시한다. 이와 관련하여, 압축될 소스 데이터 포맷(212)의 소스 데이터는 예로서 128바이트로 도시된다. 압축 데이터 포맷(214)이 아래에서 도시된다. 압축된 데이터 포맷(214)은 프리픽스(Px) 및 DaTax로서 프리픽스 바로 뒤의 데이터의 포맷으로 제공된다. 새로운 압축된 데이터 포맷(216)이 프리픽스 코드들(Px), 데이터(Datax), 플래그들 및 패턴들의 상이한 포맷으로 제공되며, 이는 효율성 목적으로 함께 그룹핑되도록 구성된다. 프리픽스 코드는 3-비트이다. 프리픽스 코드들은, 프리픽스 코드 열(218)에서 주어진 프리픽스 코드에 대해 패턴 인코딩된 열(222)에서 인코딩된 패턴을 도시하는 빈발 패턴 인코딩 표(220)의 프리픽스 코드 열(218)에서 도시된다. 인코딩된 패턴에 대한 데이터 크기는, 빈발 패턴 인코딩 표(220)의 데이터 크기 열(224)에서 제공된다. 프리픽스 코드 000은, 새로운 압축된 데이터 포맷(216)에서 32-비트의 최대 크기의 데이터일 수 있는 압축되지 않은 패턴을 나타낸다. 프리픽스 코드 001은 새로운 압축된 데이터 포맷(216)의 데이터에서 0비트로서 제공될 수 있는 모두 0의 데이터 블록을 나타낸다. 프리픽스 코드 010은 특정 패턴인 패턴 0xFFFFFFFF를 나타내며, 이에 따라 새로운 압축된 데이터 포맷(216)에 따라 압축된 데이터에서 0-비트 데이터 크기를 요구한다. 다른 패턴들은 프리픽스 코드(011-111)에 대한 빈발 패턴 인코딩 표(220)에서 도시된다. 새로운 압축된 데이터 포맷(216)에서 플래그 필드는, 프리픽스 코드들(001-111)에 대한 패턴들 중 어느 것이 압축된 데이터의 데이터 부분들(즉, DataX)에 존재하는지를 표시한다. 패턴이 압축된 데이터에 존재하는 경우, 패턴들은, 추후에 압축되지 않은 데이터를 재생하기 위해 참고될 수 있는 새로운 압축된 데이터 포맷(216)에 저장된다. 데이터 필드는 새로운 압축된 데이터 포맷(216)의 데이터 필드와 연관되는 프리픽스 코드에 따라 압축된 데이터를 포함한다.
[00102] 도 18은 64-비트 빈발 패턴 압축 데이터 압축 방식(226)의 다른 예를 예시한다. 이와 관련하여, 압축될 소스 데이터 포맷(228)의 소스 데이터는 예로서 128바이트로 도시된다. 새로운 압축된 데이터 포맷(230)이 프리픽스 코드들(Px), 데이터(Datax), 플래그들 및 패턴들의 상이한 포맷으로 제공되며, 이는 효율성 목적으로 함께 그룹핑되도록 구성된다. 프리픽스 코드는 4비트이다. 프리픽스 코드들은 빈발 패턴 인코딩 표(236)의 프리픽스 코드 열들(232, 234)에서 도시되며, 이 표는 프리픽스 코드 열들(232, 234)에서 주어진 프리픽스 코드에 대해 패턴 인코딩된 열들(238, 240)에서 인코딩된 패턴을 도시한다. 인코딩된 패턴에 대한 데이터 크기는, 빈발 패턴 인코딩 표(236)의 데이터 크기 열들(242, 244)에서 제공된다. 프리픽스 코드 0000은 새로운 압축된 데이터 포맷(230)의 데이터에서 0비트로서 제공될 수 있는 모두 0의 데이터 블록을 나타낸다. 다른 패턴들은 ASCII 패턴들을 빈번하게 발생시키기 위해 ASCII 패턴들을 포함하는 프리픽스 코드들 0001-1111에 대한 빈발 패턴 인코딩 표(236)에서 도시된다. 새로운 압축된 데이터 포맷(230)에서 플래그 필드는, 프리픽스 코드들(0001-1111)에 대한 패턴들 중 어느 것이 압축된 데이터의 데이터 부분들(즉, DataX)에 존재하는지를 표시한다. 패턴이 압축된 데이터에 존재하는 경우, 패턴들은, 추후에 압축되지 않은 데이터를 재생하기 위해 참고될 수 있는 새로운 압축된 데이터 포맷(230)에 저장된다. 데이터 필드는 새로운 압축된 데이터 포맷(230)의 데이터 필드와 연관되는 프리픽스 코드에 따라 압축된 데이터를 포함한다.
[00103] 도 19는 64-비트 빈발 패턴 압축 데이터 압축 방식(246)의 다른 예를 예시한다. 이와 관련하여, 압축될 소스 데이터 포맷(248)의 소스 데이터는 예로서 128바이트로 도시된다. 새로운 압축된 데이터 포맷(250)이 프리픽스 코드들(Px), 데이터(Datax), 플래그들 및 패턴들의 상이한 포맷으로 제공되며, 이는 효율성 목적으로 함께 그룹핑되도록 구성된다. 프리픽스 코드는 4비트이다. 프리픽스 코드들은, 빈발 패턴 인코딩 표(256)의 프리픽스 코드 열들(252, 254)에서 도시되며, 이 표는 프리픽스 코드 열들(252, 254)에서 주어진 프리픽스 코드에 대해 패턴 인코딩된 열들(258, 260)에서 인코딩된 패턴을 도시한다. 인코딩된 패턴에 대한 데이터 크기는, 빈발 패턴 인코딩 표(256)의 데이터 크기 열들(262, 264)에서 제공된다. 프리픽스 코드 0000은 새로운 압축된 데이터 포맷(250)의 데이터에서 0비트로서 제공될 수 있는 모두 0의 데이터 블록을 나타낸다. 다른 패턴들은 고정된 패턴들의 결합들을 포함할 수 있는 프리픽스 코드들 0001-1111에 대한 빈발 패턴 인코딩 표(256)에서 도시된다. 새로운 압축된 데이터 포맷(250)에서 플래그 필드는, 프리픽스 코드들(0001-1111)에 대한 패턴들 중 어느 것이 압축된 데이터의 데이터 부분들(즉, DataX)에 존재하는지를 표시한다. 패턴이 압축된 데이터에 존재하는 경우, 패턴들은, 추후에 압축되지 않은 데이터를 재생하기 위해 데이터 압축 동안 참고될 수 있는 새로운 압축된 데이터 포맷(250)에 저장된다. 프리픽스 코드(P0-P31)는 압축되지 않는 포맷의 최대 길이 데이터를 재생하기 위해 대응하는 데이터(Datax)와 함께 이용되는 패턴들에 링크될 수 있다. 데이터 필드는 새로운 압축된 데이터 포맷(250)의 데이터 필드와 연관되는 프리픽스 코드에 따라 압축된 데이터를 포함한다.
[00104] 도 19의 빈발 패턴 압축 데이터 압축 방식(246)에서 이용될 수 있는 고정된 패턴들의 예들은, 고정된 패턴들이 패턴 열(268)에 있어서, 그 길이가 길이 열(270)에서 제공되고, 패턴의 정의가 패턴 정의 열(272)에서 제공되는 도 20의 표(266)에서 도시된다. 플래그 정의들은, 압축된 메모리 제어기(36)가 압축되지 않은 데이터를 재생하는데 이용되는 정의에 대해 프리픽스 코드에 링크된 주어진 패턴을 상관시키도록 허용하기 위해 플래그 정의 표(274)에서 도시된다. 플래그 정의 표(274)는, 플래그 열(276)에서 주어진 플래그에 대한 비트들, 플래그 값 열(278)에서 주어진 플래그에 대한 비트들의 값 및 플래그 정의 열(280)에서 주어진 플래그에 대한 플래그 정의를 포함한다.
[00105] 도 21은 64-비트 빈발 패턴 압축 데이터 압축 방식(282)의 다른 예를 예시한다. 이와 관련하여, 압축될 소스 데이터 포맷(284)의 소스 데이터는 예로서 128바이트로 도시된다. 새로운 압축된 데이터 포맷(286)이 프리픽스 코드들(Px), 데이터(Datax), 플래그들 및 패턴들의 상이한 포맷으로 제공되며, 이는 효율성 목적으로 함께 그룹핑되도록 구성된다. 프리픽스 코드는 4비트이다. 프리픽스 코드들은, 빈발 패턴 인코딩 표(292)의 프리픽스 코드 열들(288, 290)에서 도시되며, 이 표는 프리픽스 코드 열들(288, 290)에서 주어진 프리픽스 코드에 대해 패턴 인코딩된 열들(294, 296)에서 인코딩된 패턴을 도시한다. 인코딩된 패턴에 대한 데이터 크기는, 빈발 패턴 인코딩 표(292)의 데이터 크기 열들(298, 300)에서 제공된다. 프리픽스 코드 0000은 새로운 압축된 데이터 포맷(286)의 데이터에서 0비트로서 제공될 수 있는 모두 0의 데이터 블록을 나타낸다. 프리픽스 코드 1111은 새로운 압축된 데이터 포맷(286)에서 압축되지 않은 데이터 블록을 나타낸다. 다른 패턴들은 거기서 도시된 정의된 패턴들의 결합들을 포함할 수 있는 프리픽스 코드들 0001-1110에 대한 빈발 패턴 인코딩 표(292)에서 도시된다. 새로운 압축된 데이터 포맷(286)에서 플래그 필드는, 프리픽스 코드들(0000-1110)에 대한 패턴들 중 어느 것이 압축된 데이터의 데이터 부분들(즉, DataX)에 존재하는지를 표시한다. 패턴이 압축된 데이터에 존재하는 경우, 패턴들은, 추후에 압축되지 않은 데이터를 재생하기 위해 참고될 수 있는 새로운 압축된 데이터 포맷(286)에 저장된다. 새로운 압축된 데이터 포맷(286)은 패턴들 0-5만을 포함하는 것으로서 도시되는데, 그 이유는 이들이 이 예에서, 소스 데이터에 존재하는 프리픽스 코드들 0000-1110에 대해 참작되는 유일한 패턴들이기 때문이다. 데이터 필드는 새로운 압축된 데이터 포맷(286)의 데이터 필드와 연관되는 프리픽스 코드에 따라 압축된 데이터를 포함한다.
[00106] 당업자들은 추가로, 본원에서 개시되는 양상과 관련하여 설명되는 다양한 예시적인 로직 블록들, 모듈들, 회로들 및 알고리즘들이 전자 하드웨어, 메모리에 또는 다른 컴퓨터-판독 가능 매체에 저장되고 프로세서 또는 다른 프로세싱 디바이스에 의해 실행되는 명령들, 또는 이 둘의 조합으로서 구현될 수 있다는 것을 인지할 것이다. 본원에서 개시되는 메모리는 임의의 타입 및 크기의 메모리일 수 있고 원하는 임의의 타입의 정보를 저장하도록 구성될 수 있다. 이러한 상호 교환성을 명확하게 예시하기 위해, 다양한 예시적인 컴포넌트, 블록, 모듈, 회로 및 단계는 그의 기능성의 견지에서 대체로 위에서 설명되었다. 이러한 기능성이 어떻게 구현되는지는 특정 애플리케이션, 설계 선택들 및/또는 전체 시스템에 부과되는 설계 제약들에 의존한다. 당업자는 각각의 특정 애플리케이션 마다 다양한 방식들로 설명된 기능을 구현할 수 있지만, 이러한 구현 결정은 본 개시의 범위를 벗어나게 하는 것으로 해석되어서는 안 된다.
[00107] 본원에서 개시된 양상들과 관련하여 설명된 다양한 예시적인 로직 블록, 모듈, 및 회로들은, 프로세서, 디지털 신호 프로세서(DSP), 주문형 집적 회로(ASIC), 필드 프로그래밍 가능 게이트 어레이(FPGA), 또는 기타 프로그래밍 가능 로직 디바이스, 이산 게이트 또는 트랜지스터 로직, 이산 하드웨어 컴포넌트, 또는 본원에서 설명된 기능을 수행하도록 설계된 이들의 임의의 조합으로 구현 또는 수행될 수 있다. 프로세서는 마이크로프로세서일 수 있지만, 대안적으로, 프로세서는 임의의 종래의 프로세서, 제어기, 마이크로제어기, 또는 상태 머신일 수 있다. 프로세서는 또한 컴퓨팅 디바이스들의 조합, 예를 들어, DSP와 마이크로프로세서의 조합, 복수의 마이크로프로세서들, DSP 코어와 연결된 하나 또는 그 초과의 마이크로프로세서들 또는 임의의 다른 이러한 구성으로서 구현될 수 있다.
[00108] 본원에서 개시되는 양상들은 하드웨어 및 하드웨어에 저장된 명령들로 구현될 수 있으며, 예를 들어, RAM(Random Access Memory), 플래시 메모리, ROM(Read Only Memory), EPROM(Electrically Programmable ROM), EEPROM(Electrically Erasable Programmable ROM), 레지스터들, 하드 디스크, 제거 가능 디스크, CD-ROM, 또는 당 업계에 알려진 임의의 다른 형태의 컴퓨터 판독 가능 매체에 상주할 수 있다. 예시적인 저장 매체는 프로세서에 커플링되어, 프로세서는 저장 매체로부터 정보를 판독하고, 저장 매체에 정보를 기록할 수 있다. 대안적으로, 저장 매체는 프로세서에 통합될 수 있다. 프로세서 및 저장 매체는 ASIC에 상주할 수 있다. ASIC는 원격 스테이션에 상주할 수 있다. 대안적으로, 프로세서 및 저장 매체는 원격 스테이션, 기지국 또는 서버에 이산 컴포넌트로서 상주할 수 있다.
[00109] 또한, 본원의 예시적인 양상에서 설명된 동작 단계들은 예들 및 논의를 제공하기 위해 설명된다는 것이 주의된다. 설명된 동작들은 예시된 시퀀스 이외의 다른 수많은 다른 시퀀스들에서 수행될 수 있다. 또한, 단일 동작 단계에서 설명된 동작들은 실제로 다수의 다른 단계들에서 수행될 수 있다. 부가적으로, 예시적인 양상들에서 논의된 하나 또는 그 초과의 동작 단계들은 결합될 수 있다. 흐름도 다이어그램에 예시되는 동작 단계들은 당업자에게 쉽게 자명하게 될 바와 같이 수많은 다른 변형들이 가해질 수 있다는 것이 이해될 것이다. 당업자는, 정보 및 신호들이 다양한 상이한 기술들 및 기법들을 이용하여 표현될 수 있다는 것을 또한 이해할 것이다. 예를 들어, 위의 설명 전반에 걸쳐 참조될 수 있는 데이터, 명령들, 커맨드들, 정보, 신호들, 비트들, 심볼들 및 칩들은 전압들, 전류들, 전자기파들, 자기 필드들 또는 자기 입자들, 광 필드들 또는 광 입자들, 또는 이들의 임의의 조합으로 표현될 수 있다.
[00110] 본 개시의 이전 설명은 임의의 당업자가 본 개시를 실시하거나 또는 이용할 수 있도록 제공된다. 본 개시에 대한 다양한 변형은 당업자에게 쉽게 명백할 것이며, 여기에 정의된 일반적인 원리들은 본 개시의 사상 또는 범위를 벗어나지 않고 다른 변동들에 적용될 수도 있다. 따라서, 본 개시는 본원에서 설명된 예들 및 설계들로 제한되도록 의도된 것이 아니라, 본원에서 개시된 원리들 및 신규한 특징들에 부합하는 최광의의 범위로 허여될 것이다.

Claims (27)

  1. 압축된 메모리 제어기로서,
    시스템 메모리에 액세스하도록 구성된 메모리 인터페이스; 및
    제어기를 포함하며, 상기 제어기는
    시스템 버스를 통해 상기 시스템 메모리에서 액세스될 물리적 어드레스(PA)를 포함하는 메모리 액세스 요청을 수신하도록;
    수신된 메모리 액세스 요청에 대한 PA가 TLB(translation lookaside buffer)의 복수의 TLB 엔트리들 중의 TLB 엔트리에 포함되는지를 결정하도록 ― 상기 복수의 TLB 엔트리들 중의 각각의 TLB 엔트리는 마스터 디렉토리로부터 엔트리를 저장하도록 구성되고, 상기 마스터 디렉로리는,
    PA에 대응하는 태그 어레이의 태그;
    상기 PA에 대응하는 시스템 메모리의 적어도 하나의 물리적 버퍼 어드레스; 및
    상기 시스템 메모리의 복수의 상이한 크기의 물리적 버퍼 풀들 중의 물리적 버퍼 풀을 표시하는 풀(pool) 표시자를 포함하고, 각각의 상이한 크기의 물리적 버퍼 풀은 압축된 데이터의 상이한 압축 크기에 대응함 ― ;
    상기 PA가 상기 TLB의 TLB 엔트리에 포함된 경우, 상기 PA를 포함하는 TLB 엔트리의 적어도 하나의 물리적 버퍼 어드레스의 물리적 버퍼 어드레스로서 상기 수신된 메모리 액세스 요청의 수신된 PA를 변환(translate)하도록;
    상기 PA가 상기 TLB의 TLB 엔트리에 포함되지 않은 경우, PA에 각각 대응하는 복수의 물리적 버퍼 어드레스들을 포함하고 복수의 데이터 라인들로 구성된 시스템 메모리의 데이터 라인 어드레스를 포함하는 마스터 디렉토리의 엔트리의 물리적 버퍼 어드레스와 상기 PA의 맵핑(mapping)에 기초하여, 물리적 버퍼 어드레스로 상기 수신된 메모리 액세스 요청의 수신된 PA를 변환하도록; 그리고
    상기 수신된 메모리 액세스 요청을 수행하도록 상기 물리적 버퍼 어드레스에 기초하여 상기 시스템 메모리의 데이터 라인 어드레스에 액세스하도록 구성되는,
    압축된 메모리 제어기.
  2. 제 1 항에 있어서,
    상기 제어기는, 상기 수신된 메모리 액세스 요청을 수행하기 위해 상기 마스터 디렉토리의 엔트리와 연관된 길이 및 상기 물리적 버퍼 어드레스에 대한 오프셋에 기초하여 상기 시스템 메모리에 액세스하도록 구성되는,
    압축된 메모리 제어기.
  3. 제 1 항에 있어서,
    상기 제어기는, 기록 데이터 및 상기 시스템 메모리에 기록될 PA를 포함하는 메모리 기록 동작을 포함하는 메모리 액세스 요청을 수신하도록 구성되고,
    상기 제어기는, 추가로,
    상기 메모리 기록 동작에서 수신된 기록 데이터를 압축된 기록 데이터로 압축하도록; 그리고
    상기 압축된 기록 데이터에 기초하여 상기 메모리 기록 동작에 대해 상기 시스템 메모리의 이용 가능한 물리적 버퍼 어드레스를 결정하도록 구성되고,
    상기 압축된 메모리 제어기는 상기 메모리 기록 동작에 대한 압축된 기록 데이터를 저장하기 위해 결정된 이용 가능한 물리적 버퍼 어드레스에 기초하여 상기 시스템 메모리에 액세스하도록 구성되는,
    압축된 메모리 제어기.
  4. 제 3 항에 있어서,
    상기 제어기는 추가로,
    상기 PA에 대응하는 마스터 디렉토리의 엔트리에 상기 메모리 기록 동작에 대한 물리적 버퍼 어드레스를 저장하기 위해 상기 마스터 디렉토리를 업데이트하도록 구성되는,
    압축된 메모리 제어기.
  5. 제 3 항에 있어서,
    상기 메모리 제어기는,
    상기 마스터 디렉토리의 엔트리와 연관된 길이 및 상기 물리적 버퍼 어드레스에 대한 오프셋을 저장하도록 추가로 구성됨으로써 상기 마스터 디렉토리를 업데이트하도록 구성되는,
    압축된 메모리 제어기.
  6. 제 3 항에 있어서,
    상기 제어기는 추가로,
    상기 메모리 기록 동작에 대한 기록 데이터가 고정된 패턴인지를 결정하도록 구성되고,
    상기 메모리 기록 동작에 대해 기록 데이터가 고정된 패턴인 경우, 상기 제어기는,
    상기 메모리 기록 동작에 대한 고정된 패턴을 표시하기 위해 상기 PA에 대응하는 마스터 디렉토리의 엔트리를 업데이트하도록; 그리고
    상기 시스템 메모리의 물리적 버퍼 어드레스에 상기 메모리 기록 동작에 대한 압축된 기록 데이터를 기록하지 않도록 구성되는,
    압축된 메모리 제어기.
  7. 제 3 항에 있어서,
    상기 제어기는,
    상기 메모리 기록 동작에 대한 물리적 버퍼 어드레스의 풀 표시자에 대응하는 물리적 버퍼 풀의 이용 가능한 물리적 버퍼 어드레스를 결정하도록; 그리고
    상기 물리적 버퍼 어드레스에 기초하여 시스템 메모리에 상기 메모리 기록 동작에 대한 압축된 기록 데이터를 저장하기 위해 상기 시스템 메모리의 물리적 버퍼 어드레스의 풀 표시자에 대응하는 물리적 버퍼 풀에 액세스하도록 구성되는,
    압축된 메모리 제어기.
  8. 제 7 항에 있어서,
    상기 제어기는,
    상기 물리적 버퍼 어드레스로부터의 오프셋에 기초하여 시스템 메모리에 상기 메모리 기록 동작에 대한 압축된 기록 데이터를 저장하기 위해 상기 시스템 메모리의 물리적 버퍼 어드레스의 풀 표시자에 대응하는 물리적 버퍼 풀에 액세스하도록 구성되는,
    압축된 메모리 제어기.
  9. 제 7 항에 있어서,
    상기 제어기는,
    상기 시스템 메모리의 적어도 하나의 프리(free) 물리적 버퍼 어드레스를 표시하는 물리적 버퍼 풀에 대응하는 프리 노드 리스트로부터 상기 메모리 기록 동작에 대한 물리적 버퍼 풀의 이용 가능한 물리적 버퍼 어드레스를 결정하도록 구성되는,
    압축된 메모리 제어기.
  10. 제 9 항에 있어서,
    상기 제어기는 추가로,
    상기 프리 노드 리스트의 이용 가능한 물리적 버퍼 어드레스의 수가 정의된 임계치 아래로 떨어질 때 운영 체제(OS)에 통지하도록 구성되는,
    압축된 메모리 제어기.
  11. 제 9 항에 있어서,
    상기 물리적 버퍼 풀의 이용 가능한 물리적 버퍼 어드레스를 결정하는 것에 대한 응답으로, 상기 제어기는,
    상기 이용 가능한 물리적 버퍼 어드레스에 대한 로컬 풀 버퍼(local pull buffer) 내로 상기 프리 노드 리스트로부터의 적어도 하나의 프리 물리적 버퍼를 풀링(pull)하도록 구성되는,
    압축된 메모리 제어기.
  12. 제 9 항에 있어서,
    상기 프리 노드 리스트는 상기 시스템 메모리에 저장되는,
    압축된 메모리 제어기.
  13. 제 1 항에 있어서,
    상기 제어기는,
    상기 시스템 메모리에서 판독될 PA를 포함하는 메모리 판독 동작을 포함하는 메모리 액세스 요청을 수신하도록;
    압축된 판독 데이터를 판독하기 위해 상기 물리적 버퍼 어드레스에 기초하여 시스템 메모리에 액세스하도록;
    상기 압축된 판독 데이터를 압축되지 않은 판독 데이터로 압축해제하도록; 그리고
    상기 메모리 판독 동작에 대해 상기 시스템 버스 상에서 상기 압축되지 않은 판독 데이터를 제공하도록 구성되는,
    압축된 메모리 제어기.
  14. 제 13 항에 있어서,
    상기 제어기는 추가로,
    상기 메모리 판독 동작에 대한 압축된 판독 데이터가 미리 정의된 고정된 패턴을 포함하는지를 결정하도록 구성되고,
    상기 메모리 판독 동작에 대한 압축된 판독 데이터가 상기 미리 정의된 고정된 패턴을 포함하는 경우, 상기 제어기는 추가로,
    상기 압축된 판독 데이터를 판독하도록 상기 물리적 버퍼 어드레스에 기초하여 시스템 메모리에 액세스하지 않도록 구성되는,
    압축된 메모리 제어기.
  15. 제 1 항에 있어서,
    상기 메모리 액세스 요청은 메모리 기록 동작으로 구성되고,
    상기 제어기는,
    이용 가능한 물리적 버퍼 어드레스에 대한 메모리 기록 동작의 압축 라인 크기에 기초하여 복수의 상이한 크기의 물리적 버퍼 풀들 중에서 물리적 버퍼 풀을 선택하도록 구성되는,
    압축된 메모리 제어기.
  16. 제 15 항에 있어서,
    상기 선택된 물리적 버퍼 풀이 어떠한 이용 가능한 물리적 버퍼 어드레스들도 포함하지 않는 경우, 상기 제어기는,
    더 큰 물리적 버퍼에 지정된 다른 물리적 버퍼 풀로부터의 물리적 버퍼 어드레스를 할당하기 위해 지정된 물리적 버퍼 풀을 선택하도록 구성되는,
    압축된 메모리 제어기.
  17. 제 16 항에 있어서,
    상기 제어기는 추가로,
    상기 물리적 버퍼 어드레스가 상기 더 큰 물리적 버퍼에 지정된 물리적 버퍼 풀에서 이용 가능하지 않은 경우,
    상기 더 큰 물리적 버퍼에 지정된 물리적 버퍼 어드레스에 대한 물리적 버퍼 풀에 대응하는 프리 노드 리스트에 상기 물리적 버퍼 어드레스를 리턴하도록 구성되는,
    압축된 메모리 제어기.
  18. 제 1 항에 있어서,
    상기 제어기는,
    상기 시스템 메모리의 데이터 페이지 어드레스로부터의 시작 포지션 및 길이에 기초하여, 상기 마스터 디렉토리의 물리적 버퍼 어드레스로 상기 수신된 메모리 액세스 요청의 수신된 PA를 변환하도록; 그리고
    상기 수신된 메모리 액세스 요청을 수행하도록 상기 시스템 메모리의 데이터 페이지 어드레스로부터 상기 시작 포지션에서 상기 길이의 압축된 데이터에 액세스하도록 구성되는,
    압축된 메모리 제어기.
  19. 제 18 항에 있어서,
    상기 데이터 페이지 어드레스는 데이터 페이지 크기로 각각 지정된 복수의 데이터 페이지들 중의 시스템 메모리의 데이터 페이지를 포함하는,
    압축된 메모리 제어기.
  20. 제 18 항에 있어서,
    상기 제어기는,
    상기 수신된 PA의 적어도 일부에 기초하여 마스터 디렉토리의 데이터 페이지 어드레스와 연관된 복수의 시작 위치들 및 길이들로부터 시작 위치 및 길이를 선택하도록 추가로 구성됨으로써 상기 수신된 PA를 변환하도록 구성되는,
    압축된 메모리 제어기.
  21. 제 1 항에 있어서,
    상기 제어기는,
    상기 수신된 메모리 액세스 요청의 상기 수신된 PA에 대응하는 데이터 페이지, 상기 데이터 페이지의 시작 데이터 블록 및 상기 시작 데이터 블록으로부터의 데이터 블록 길이에 기초하여 블록 어드레스를 포함하는 물리적 버퍼 어드레스로 상기 수신된 PA를 변환하도록; 그리고
    상기 수신된 메모리 액세스 요청을 수행하도록 상기 시스템 메모리의 페이지 버퍼의 블록 어드레스로부터의 상기 시작 데이터 블록에서 상기 데이터 블록 길이의 압축된 데이터에 액세스하도록 구성되는,
    압축된 메모리 제어기.
  22. 제 21 항에 있어서,
    상기 제어기는, 복수의 균등한 크기의 데이터 페이지들 중의 데이터 페이지, 상기 수신된 PA에 대응하는 데이터 페이지, 상기 데이터 페이지의 시작 데이터 블록 및 상기 시작 데이터 블록으로부터의 데이터 블록 길이에 기초하여 상기 블록 어드레스를 포함하는 물리적 버퍼 어드레스로 상기 수신된 메모리 액세스 요청의 수신된 PA를 변환하도록 구성되는,
    압축된 메모리 제어기.
  23. 제 1 항에 있어서,
    상기 PA가 상기 TLB의 TLB 엔트리에 포함되지 않는 경우, 상기 제어기는, 추가로,
    상기 TLB의 TLB 엔트리를 퇴거(evict)시키도록; 그리고
    상기 수신된 메모리 액세스 요청에 대한 PA에 대응하는 마스터 디렉토리의 엔트리를 저장하도록 구성되는,
    압축된 메모리 제어기.
  24. 제 1 항에 있어서,
    집적 회로(IC)에 통합되는,
    압축된 메모리 제어기.
  25. 제 1 항에 있어서,
    셋톱 박스, 엔터테인먼트 유닛, 내비게이션 디바이스, 통신 디바이스, 고정 위치 데이터 유닛, 모바일 위치 데이터 유닛, 모바일 전화, 셀룰러 전화, 컴퓨터, 휴대용 컴퓨터, 데스크톱 컴퓨터, 개인용 디지털 보조기기(PDA), 모니터, 컴퓨터 모니터, 텔레비전, 튜너, 라디오, 위성 라디오, 음악 플레이어, 디지털 음악 플레이어, 휴대용 음악 플레이어, 디지털 비디오 플레이어, 비디오 플레이어, 디지털 비디오 디스크(DVD) 플레이어, 및 휴대용 디지털 비디오 플레이어로 구성된 그룹으로부터 선택된 디바이스에 통합되는,
    압축된 메모리 제어기.
  26. 중앙 처리 장치(CPU)-기반 시스템의 시스템 메모리에 대한 메모리 액세스 요청을 위한 데이터를 압축하는 방법으로서,
    시스템 버스를 통해 상기 시스템 메모리에서 액세스될 물리적 어드레스(PA)를 포함하는 메모리 액세스 요청을 수신하는 단계;
    수신된 메모리 액세스 요청에 대한 PA가 TLB(translation lookaside buffer)의 복수의 TLB 엔트리들 중의 TLB 엔트리에 포함되는지를 결정하는 단계 ― 상기 복수의 TLB 엔트리들 중의 각각의 TLB 엔트리는 마스터 디렉토리로부터의 엔트리를 저장하도록 구성되고, 상기 마스터 디렉토리는,
    PA에 대응하는 태그 어레이의 태그;
    상기 PA에 대응하는 시스템 메모리의 적어도 하나의 물리적 버퍼 어드레스; 및
    상기 시스템 메모리의 복수의 상이한 크기의 물리적 버퍼 풀들 중의 물리적 버퍼 풀을 표시하는 풀 표시자를 포함하고, 각각의 상이한 크기의 물리적 버퍼 풀은 압축된 데이터의 상이한 압축 크기에 대응함 ― ;
    상기 PA가 상기 TLB의 TLB 엔트리에 포함된 경우, 상기 PA를 포함하는 TLB 엔트리의 물리적 버퍼 어드레스로서 상기 수신된 메모리 액세스 요청의 수신된 PA를 변환하는 단계;
    상기 PA가 상기 TLB의 TLB 엔트리에 포함되지 않은 경우, PA에 각각 대응하는 복수의 물리적 버퍼 어드레스들을 포함하고 복수의 데이터 라인들로 구성된 시스템 메모리의 데이터 라인 어드레스를 포함하는 마스터 디렉토리의 엔트리의 물리적 버퍼 어드레스와 상기 PA의 맵핑(mapping)에 기초하여, 물리적 버퍼 어드레스로 상기 수신된 메모리 액세스 요청의 수신된 PA를 변환하는 단계; 및
    상기 수신된 메모리 액세스 요청을 수행하도록 상기 물리적 버퍼 어드레스에 기초하여 상기 시스템 메모리의 데이터 라인 어드레스에 액세스하는 단계를 포함하는,
    중앙 처리 장치(CPU)-기반 시스템의 시스템 메모리에 대한 메모리 액세스 요청을 위한 데이터를 압축하는 방법.
  27. 중앙 처리 장치(CPU) 시스템으로서,
    시스템 버스;
    상기 시스템 버스에 통신 가능하게 커플링되는 적어도 하나의 CPU 코어;
    상기 시스템 버스에 통신 가능하게 커플링되는 메모리 제어기;
    상기 시스템 버스에 통신 가능하게 커플링되는 시스템 메모리 ― 상기 시스템 메모리는 메모리 데이터를 저장하도록 구성됨 ― ;
    태그 어레이 및 데이터 어레이에서 복수의 TLB(translation lookaside buffer) 엔트리들로 구성된 TLB ― 상기 복수의 TLB 엔트리들 중의 각각의 TLB 엔트리는 마스터 디렉토리로부터 엔트리를 저장하도록 구성되고, 상기 마스터 디렉토리는,
    PA에 대응하는 태그 어레이의 태그;
    상기 PA에 대응하는 시스템 메모리의 적어도 하나의 물리적 버퍼 어드레스; 및
    상기 시스템 메모리의 복수의 상이한 크기의 물리적 버퍼 풀들 중의 물리적 버퍼 풀을 표시하는 풀 표시자를 포함하고, 각각의 상이한 크기의 물리적 버퍼 풀은 압축된 데이터의 상이한 압축 크기에 대응함 ― ;
    상기 시스템 버스에 통신 가능하게 커플링되는 캐시 ― 상기 캐시는 상기 PA에 대응하는 압축되지 않은 메모리 데이터를 저장하도록 각각 구성되는 복수의 캐시 엔트리들을 포함하고, 상기 캐시는,
    상기 시스템 버스를 통해 상기 적어도 하나의 CPU 코어 및 상기 메모리 제어기로부터 메모리 액세스 요청을 수신하도록; 그리고
    상기 PA가 상기 캐시의 캐시 엔트리에 포함된 경우 수신된 메모리 액세스 요청의 PA에 대응하는 압축되지 않은 메모리 데이터를 제공하도록 구성됨 ― ; 및
    상기 메모리 제어기는, 상기 시스템 버스를 통해 상기 시스템 메모리에서 액세스될 PA를 포함하는 메모리 액세스 요청을 수신하도록 구성되고,
    상기 메모리 액세스 요청의 PA가 상기 캐시의 캐시 엔트리에 포함되지 않는 경우, 상기 메모리 제어기는, 추가로,
    상기 수신된 메모리 액세스 요청에 대한 PA가 상기 TLB의 TLB 엔트리에 포함되는지를 결정하도록;
    상기 PA가 상기 TLB의 TLB 엔트리에 포함된 경우, 상기 PA를 포함하는 TLB 엔트리의 물리적 버퍼 어드레스로서 상기 수신된 메모리 액세스 요청의 수신된 PA를 변환하도록;
    상기 PA가 상기 TLB의 TLB 엔트리에 포함되지 않은 경우, PA에 각각 대응하는 복수의 물리적 버퍼 어드레스들을 포함하고 복수의 데이터 라인들로 구성된 시스템 메모리의 데이터 라인 어드레스를 포함하는 마스터 디렉토리의 엔트리의 물리적 버퍼 어드레스와 상기 PA의 맵핑에 기초하여, 상기 물리적 버퍼 어드레스로 상기 수신된 메모리 액세스 요청의 수신된 PA를 변환하도록; 그리고
    상기 수신된 메모리 액세스 요청을 수행하도록 상기 물리적 버퍼 어드레스에 기초하여 시스템 메모리의 데이터 라인 어드레스에 액세스하도록 구성되는,
    중앙 처리 장치(CPU) 시스템.

KR1020167032264A 2014-05-21 2015-05-20 메모리 용량 압축을 이용하는 메모리 제어기들 및 관련된 프로세서-기반 시스템들 및 방법들 KR20170008233A (ko)

Applications Claiming Priority (9)

Application Number Priority Date Filing Date Title
US201462001545P 2014-05-21 2014-05-21
US62/001,545 2014-05-21
US201462092326P 2014-12-16 2014-12-16
US201462092409P 2014-12-16 2014-12-16
US62/092,326 2014-12-16
US62/092,409 2014-12-16
US14/716,001 US10838862B2 (en) 2014-05-21 2015-05-19 Memory controllers employing memory capacity compression, and related processor-based systems and methods
US14/716,001 2015-05-19
PCT/US2015/031717 WO2015179483A1 (en) 2014-05-21 2015-05-20 Memory controllers employing memory capacity compression, and related processor-based systems and methods

Publications (1)

Publication Number Publication Date
KR20170008233A true KR20170008233A (ko) 2017-01-23

Family

ID=53276320

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167032264A KR20170008233A (ko) 2014-05-21 2015-05-20 메모리 용량 압축을 이용하는 메모리 제어기들 및 관련된 프로세서-기반 시스템들 및 방법들

Country Status (6)

Country Link
US (1) US10838862B2 (ko)
EP (1) EP3146433A1 (ko)
JP (1) JP6505132B2 (ko)
KR (1) KR20170008233A (ko)
CN (1) CN106462494B (ko)
WO (1) WO2015179483A1 (ko)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9740621B2 (en) 2014-05-21 2017-08-22 Qualcomm Incorporated Memory controllers employing memory capacity and/or bandwidth compression with next read address prefetching, and related processor-based systems and methods
US10503661B2 (en) 2014-05-21 2019-12-10 Qualcomm Incorporated Providing memory bandwidth compression using compressed memory controllers (CMCs) in a central processing unit (CPU)-based system
US9703722B2 (en) * 2014-11-14 2017-07-11 Cavium, Inc. Method and system for compressing data for a translation look aside buffer (TLB)
US10884945B2 (en) * 2015-06-30 2021-01-05 International Business Machines Corporation Memory state indicator check operations
US20170161203A1 (en) * 2015-12-03 2017-06-08 Intel Corporation Increased memory capacity
JP6605323B2 (ja) * 2015-12-24 2019-11-13 ルネサスエレクトロニクス株式会社 半導体装置、データ処理システム及び半導体装置の制御方法
US10474385B2 (en) 2016-02-23 2019-11-12 Google Llc Managing memory fragmentation in hardware-assisted data compression
US10067706B2 (en) * 2016-03-31 2018-09-04 Qualcomm Incorporated Providing memory bandwidth compression using compression indicator (CI) hint directories in a central processing unit (CPU)-based system
US10191850B2 (en) 2016-03-31 2019-01-29 Qualcomm Incorporated Providing memory bandwidth compression using multiple last-level cache (LLC) lines in a central processing unit (CPU)-based system
US20180060235A1 (en) * 2016-08-30 2018-03-01 Intel Corporation Non-volatile memory compression devices and associated methods and systems
US10191682B2 (en) * 2016-09-08 2019-01-29 Qualcomm Incorporated Providing efficient lossless compression for small data blocks in processor-based systems
US10176090B2 (en) 2016-09-15 2019-01-08 Qualcomm Incorporated Providing memory bandwidth compression using adaptive compression in central processing unit (CPU)-based systems
US10236917B2 (en) * 2016-09-15 2019-03-19 Qualcomm Incorporated Providing memory bandwidth compression in chipkill-correct memory architectures
US10055158B2 (en) * 2016-09-22 2018-08-21 Qualcomm Incorporated Providing flexible management of heterogeneous memory systems using spatial quality of service (QoS) tagging in processor-based systems
US10061698B2 (en) * 2017-01-31 2018-08-28 Qualcomm Incorporated Reducing or avoiding buffering of evicted cache data from an uncompressed cache memory in a compression memory system when stalled write operations occur
US10198362B2 (en) * 2017-02-07 2019-02-05 Qualcomm Incorporated Reducing bandwidth consumption when performing free memory list cache maintenance in compressed memory schemes of processor-based systems
CN106980541B (zh) * 2017-03-10 2019-11-19 浙江大学 一种大页内存压缩回收系统及方法
US10169246B2 (en) * 2017-05-11 2019-01-01 Qualcomm Incorporated Reducing metadata size in compressed memory systems of processor-based systems
CN110609708B (zh) * 2018-06-15 2023-10-27 伊姆西Ip控股有限责任公司 用于数据处理的方法、设备和计算机可读介质
US20190243780A1 (en) * 2019-04-10 2019-08-08 Vinodh Gopal Scalable application-customized memory compression
CN110399314B (zh) * 2019-06-25 2021-10-15 苏州浪潮智能科技有限公司 一种cpu、一种电子设备以及一种cpu缓存控制方法
CN113448891B (zh) * 2020-03-25 2023-07-21 澜起科技股份有限公司 存储器控制器以及用于监测对存储模块的访问的方法
CN111597128B (zh) * 2020-05-21 2023-07-14 北京泽石科技有限公司 固态非易失存储设备中数据的管理方法以及管理装置
US11875036B2 (en) 2021-01-13 2024-01-16 Samsung Electronics Co., Ltd. Computing system including host and storage system and having increased write performance
CN115525417A (zh) * 2021-06-24 2022-12-27 北京图森智途科技有限公司 数据通信方法、通信系统及计算机可读存储介质
WO2023055459A1 (en) * 2021-09-29 2023-04-06 Micron Technology, Inc. Early detection of compression status using inline metadata
US11829292B1 (en) 2022-01-10 2023-11-28 Qualcomm Incorporated Priority-based cache-line fitting in compressed memory systems of processor-based systems
US11868244B2 (en) * 2022-01-10 2024-01-09 Qualcomm Incorporated Priority-based cache-line fitting in compressed memory systems of processor-based systems

Family Cites Families (64)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2831602B2 (ja) * 1995-01-13 1998-12-02 富士通株式会社 圧縮データ管理装置及び圧縮データ管理方法
US5696927A (en) 1995-12-21 1997-12-09 Advanced Micro Devices, Inc. Memory paging system and method including compressed page mapping hierarchy
JPH09259040A (ja) 1996-03-25 1997-10-03 Sharp Corp キャッシュメモリ装置
US6212603B1 (en) 1998-04-09 2001-04-03 Institute For The Development Of Emerging Architectures, L.L.C. Processor with apparatus for tracking prefetch and demand fetch instructions serviced by cache memory
US6341325B2 (en) 1999-01-12 2002-01-22 International Business Machines Corporation Method and apparatus for addressing main memory contents including a directory structure in a computer system
US6353871B1 (en) 1999-02-22 2002-03-05 International Business Machines Corporation Directory cache for indirectly addressed main memory
US6523102B1 (en) 2000-04-14 2003-02-18 Interactive Silicon, Inc. Parallel compression/decompression system and method for implementation of in-memory compressed cache improving storage density and access speed for industry standard memory subsystems and in-line memory modules
US7047382B2 (en) 2000-11-29 2006-05-16 Quickshift, Inc. System and method for managing compression and decompression and decompression of system memory in a computer system
US6779049B2 (en) * 2000-12-14 2004-08-17 International Business Machines Corporation Symmetric multi-processing system with attached processing units being able to access a shared memory without being structurally configured with an address translation mechanism
US6735673B2 (en) 2002-01-10 2004-05-11 Hewlett-Packard Development Company, L.P. Apparatus and methods for cache line compression
US6640283B2 (en) 2002-01-16 2003-10-28 Hewlett-Packard Development Company, L.P. Apparatus for cache compression engine for data compression of on-chip caches to increase effective cache size
US6944740B2 (en) 2002-03-27 2005-09-13 International Business Machines Corporation Method for performing compressed I/O with memory expansion technology
US6795897B2 (en) 2002-05-15 2004-09-21 International Business Machines Corporation Selective memory controller access path for directory caching
US6981119B1 (en) 2002-08-29 2005-12-27 Advanced Micro Devices, Inc. System and method for storing performance-enhancing data in memory space freed by data compression
JP3808058B2 (ja) 2003-05-27 2006-08-09 インターナショナル・ビジネス・マシーンズ・コーポレーション 複数のホストが圧縮データを記憶するメモリ・セクタの集合を共用できるようにするための装置
US7512750B2 (en) 2003-12-31 2009-03-31 Intel Corporation Processor and memory controller capable of use in computing system that employs compressed cache lines' worth of information
US7702964B2 (en) 2004-05-11 2010-04-20 Qualcomm Incorporated Compression of data traces for an integrated circuit with multiple memories
US7225297B2 (en) 2004-05-28 2007-05-29 International Business Machines Corporation Compressed cache lines incorporating embedded prefetch history data
CN100414519C (zh) * 2004-11-24 2008-08-27 中国科学院计算技术研究所 一种从虚拟地址向物理地址变换的方法及其装置
US20060143396A1 (en) 2004-12-29 2006-06-29 Mason Cabot Method for programmer-controlled cache line eviction policy
US7636813B2 (en) 2006-05-22 2009-12-22 International Business Machines Corporation Systems and methods for providing remote pre-fetch buffers
US7533497B2 (en) * 2006-07-10 2009-05-19 Dallaire Industries Ltd. Snubber system for windows
US8122216B2 (en) 2006-09-06 2012-02-21 International Business Machines Corporation Systems and methods for masking latency of memory reorganization work in a compressed memory system
US7975109B2 (en) * 2007-05-30 2011-07-05 Schooner Information Technology, Inc. System including a fine-grained memory and a less-fine-grained memory
EP2259251A4 (en) 2008-03-07 2011-07-27 Victor Company Of Japan SERVER DEVICE, TERMINAL, PLAYBACK DEVICE
US8595437B1 (en) 2008-11-21 2013-11-26 Nvidia Corporation Compression status bit cache with deterministic isochronous latency
US8700862B2 (en) 2008-12-03 2014-04-15 Nvidia Corporation Compression status bit cache and backing store
US7987162B2 (en) 2009-03-06 2011-07-26 Bluearc Uk Limited Data compression in a file storage system
US8341501B2 (en) 2009-04-30 2012-12-25 International Business Machines Corporation Adaptive endurance coding of non-volatile memories
TWI435215B (zh) 2009-08-26 2014-04-21 Phison Electronics Corp 下達讀取指令與資料讀取方法、控制器與儲存系統
US8341380B2 (en) 2009-09-22 2012-12-25 Nvidia Corporation Efficient memory translator with variable size cache line coverage
US8627041B2 (en) 2009-10-09 2014-01-07 Nvidia Corporation Efficient line and page organization for compression status bit caching
US8838853B2 (en) * 2010-01-18 2014-09-16 Marvell International Ltd. Access buffer
CN102906714A (zh) 2010-05-05 2013-01-30 马维尔国际贸易有限公司 缓存存储适配器架构
CH703561A1 (de) * 2010-08-06 2012-02-15 Ferag Ag Vorrichtung zur Ausrichtung eines flächigen Produktes.
US8880847B2 (en) 2010-09-28 2014-11-04 Texas Instruments Incorporated Multistream prefetch buffer
US8683135B2 (en) 2010-10-31 2014-03-25 Apple Inc. Prefetch instruction that ignores a cache hit
US8356153B2 (en) * 2010-11-19 2013-01-15 International Business Machines Corporation Adaptive wear leveling via monitoring the properties of memory reference stream
US8539163B1 (en) 2010-12-17 2013-09-17 Amazon Technologies, Inc. Speculative reads
WO2012168960A1 (en) 2011-06-07 2012-12-13 Hitachi, Ltd. Semiconductor storage apparatus and method of controlling semiconductor storage apparatus
US10031850B2 (en) 2011-06-07 2018-07-24 Sandisk Technologies Llc System and method to buffer data
US9164676B2 (en) 2011-11-30 2015-10-20 International Business Machines Corporation Storing multi-stream non-linear access patterns in a flash based file-system
KR101888074B1 (ko) 2012-01-09 2018-08-13 삼성전자주식회사 저장 장치 및 불휘발성 메모리 장치, 그리고 그것의 동작 방법
US8751830B2 (en) 2012-01-23 2014-06-10 International Business Machines Corporation Memory address translation-based data encryption/compression
FR2992453B1 (fr) * 2012-06-22 2014-07-04 Ldl Technology Dispositif de communication d'un systeme de surveillance des roues d'un vehicule et procede de communication
US9148172B2 (en) 2012-06-22 2015-09-29 Micron Technology, Inc. Data compression and management
US9003123B2 (en) 2012-06-26 2015-04-07 Arm Limited Data processing apparatus and method for reducing storage requirements for temporary storage of data
US8830716B2 (en) 2012-09-29 2014-09-09 Intel Corporation Intelligent far memory bandwith scaling
JP6323445B2 (ja) 2013-03-15 2018-05-16 日本電気株式会社 ストレージ装置と方法及びプログラム
CN104133780B (zh) 2013-05-02 2017-04-05 华为技术有限公司 一种跨页预取方法、装置及系统
CN107608912B (zh) 2013-08-20 2020-10-16 华为技术有限公司 内存物理地址查询方法和装置
US10817178B2 (en) * 2013-10-31 2020-10-27 Hewlett Packard Enterprise Development Lp Compressing and compacting memory on a memory device wherein compressed memory pages are organized by size
CN104866497B (zh) 2014-02-24 2018-06-15 华为技术有限公司 分布式文件系统列式存储的元数据更新方法、装置、主机
US9740621B2 (en) 2014-05-21 2017-08-22 Qualcomm Incorporated Memory controllers employing memory capacity and/or bandwidth compression with next read address prefetching, and related processor-based systems and methods
US10503661B2 (en) 2014-05-21 2019-12-10 Qualcomm Incorporated Providing memory bandwidth compression using compressed memory controllers (CMCs) in a central processing unit (CPU)-based system
US10372613B2 (en) 2014-05-30 2019-08-06 Sandisk Technologies Llc Using sub-region I/O history to cache repeatedly accessed sub-regions in a non-volatile storage device
US9639472B2 (en) 2014-07-15 2017-05-02 International Business Machines Corporation Prefetch list management in a computer system
US20160025310A1 (en) * 2014-07-25 2016-01-28 David Gurrola Accessory Clip System
US9658963B2 (en) 2014-12-23 2017-05-23 Intel Corporation Speculative reads in buffered memory
US9569357B1 (en) 2015-01-08 2017-02-14 Pure Storage, Inc. Managing compressed data in a storage system
KR20160104387A (ko) 2015-02-26 2016-09-05 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법
US10303622B2 (en) 2015-03-06 2019-05-28 Hewlett Packard Enterprise Development Lp Data write to subset of memory devices
JP2017072981A (ja) 2015-10-07 2017-04-13 富士通株式会社 情報処理装置、キャッシュ制御方法およびキャッシュ制御プログラム
US10282808B2 (en) 2016-05-27 2019-05-07 Intel Corporation Hierarchical lossless compression and null data support

Also Published As

Publication number Publication date
CN106462494B (zh) 2019-07-30
JP2017516232A (ja) 2017-06-15
EP3146433A1 (en) 2017-03-29
US10838862B2 (en) 2020-11-17
WO2015179483A1 (en) 2015-11-26
JP6505132B2 (ja) 2019-04-24
US20150339228A1 (en) 2015-11-26
CN106462494A (zh) 2017-02-22

Similar Documents

Publication Publication Date Title
US10838862B2 (en) Memory controllers employing memory capacity compression, and related processor-based systems and methods
US9740621B2 (en) Memory controllers employing memory capacity and/or bandwidth compression with next read address prefetching, and related processor-based systems and methods
JP6599898B2 (ja) 中央処理装置(cpu)搭載システム内の圧縮メモリコントローラ(cmc)を使用したメモリ帯域圧縮の提供
USRE43483E1 (en) System and method for managing compression and decompression of system memory in a computer system
KR101379596B1 (ko) Tlb 프리페칭
US8392658B2 (en) Cache implementing multiple replacement policies
US8601223B1 (en) Techniques for servicing fetch requests utilizing coalesing page table entries
JP6859361B2 (ja) 中央処理ユニット(cpu)ベースシステムにおいて複数のラストレベルキャッシュ(llc)ラインを使用してメモリ帯域幅圧縮を行うこと
US20210089470A1 (en) Address translation methods and systems
US9430394B2 (en) Storage system having data storage lines with different data storage line sizes
US20160224241A1 (en) PROVIDING MEMORY BANDWIDTH COMPRESSION USING BACK-TO-BACK READ OPERATIONS BY COMPRESSED MEMORY CONTROLLERS (CMCs) IN A CENTRAL PROCESSING UNIT (CPU)-BASED SYSTEM
WO2021061446A1 (en) Storage management apparatus, storage management method, processor, and computer system
US10198362B2 (en) Reducing bandwidth consumption when performing free memory list cache maintenance in compressed memory schemes of processor-based systems
US10140211B2 (en) Cache device and method for storing tag data and cache data in cache device
US10152261B2 (en) Providing memory bandwidth compression using compression indicator (CI) hint directories in a central processing unit (CPU)-based system
US9934150B1 (en) Data caching circuit and method
US7769979B1 (en) Caching of page access parameters