WO2002044902A2 - System and method for managing compression and decompression of system memory in a computer system - Google Patents

System and method for managing compression and decompression of system memory in a computer system Download PDF

Info

Publication number
WO2002044902A2
WO2002044902A2 PCT/US2001/045147 US0145147W WO0244902A2 WO 2002044902 A2 WO2002044902 A2 WO 2002044902A2 US 0145147 W US0145147 W US 0145147W WO 0244902 A2 WO0244902 A2 WO 0244902A2
Authority
WO
WIPO (PCT)
Prior art keywords
page
compressed
compression
memory
cmmu
Prior art date
Application number
PCT/US2001/045147
Other languages
French (fr)
Inventor
Thomas A. Dye
Ii Manuel J. Alvarez
Peter D. Geiger
Original Assignee
Interactive Silicon, Inc.
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 Interactive Silicon, Inc. filed Critical Interactive Silicon, Inc.
Priority to AU2002227084A priority Critical patent/AU2002227084A1/en
Publication of WO2002044902A2 publication Critical patent/WO2002044902A2/en

Links

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/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/10Address translation
    • 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

Definitions

  • the uncompressed page or data may be provided directly to the accessing processor or I/O master from the CODEC to satisfy the access. Alternatively, the uncompressed page or data may be stored back in system memory and accessed from there.
  • the DMA channel may read the uncompressed page from the CODEC and copy it into an unused page in system memory pointed to by an entry in an Uncompressed Page Free List (UPFL).
  • UPFL Uncompressed Page Free List
  • Figure 4d is a block diagram of an embodiment of a computer system where the CMMU is included in the CPU subsystem and the CODEC is included in the memory controUer;
  • Figure 4e is a block diagram of an embodiment of a computer system where the CMMU and the CODEC are included in the memory controUer;
  • Figure 5a is a block diagram Ulustrating a computer system configuration with the CMMU in the CPU according to one embodiment
  • the CPU 100 may include a CMMU 214 that is implemented separately from the CPU MMU 212, and that interfaces with CPU MMU 212 to manage the compression/decompression of data using a CODEC 216.
  • the memory controller 211 in bridge 208 may include the CODEC 216.
  • the memory controUer 211 in bridge 208 may include both the. CMMU 214 and the CODEC 216.
  • the memory controUer 211 in bridge 208 may include the CMMU 214.
  • the memory 218 may include a CODEC 216.
  • a portion of the system memory 218, referred to as the compressed cache 240 may store compressed memory pages.
  • the compressed cache 240 may be located in the memory subsystem 200 of the computer.
  • the CMMU 214 may aUocate the compressed cache 240.
  • the compressed cache 240 may be aUocated within the normal memory map of the computer system.
  • Compressed pages may be stored in the compressed cache 240. Pages are generally 4096 bytes. In alternate embodiments, page sizes can be any size as desired by the operating system software.
  • Figure 8 shows one embodiment of the system memory address space, wherein a portion 404 of the address space is used to store the operating system and a portion 402 is used for general system memory.
  • the system memory portion 402 may store applications and other data.
  • a Page Translation Table (PTT) 422 may reside in physical memory 400 and may include a list of Page Translation Entries (PTEs).
  • PTEs Page Translation Entries
  • a PTE may exist for each page in system memory.
  • Each PTE may include a pointer to either a compressed page or uncompressed page located in physical memory 400.
  • the operating system 404 may be aware of the increased size of system memory 402.
  • a kernel driver may be used to ensure that the operating system is able to safely use the entire system memory space 402 without overflowing physical memory 400.
  • the operating system may be aware of the increased size of system memory 402
  • it may be desired to maintain a ratio between compressed and uncompressed memory to provide the increased size of system memory 402.
  • the CMMU 214 may dynamically decide when to compress and or decompress pages of memory to maintain the desired compression ratio and thus the increased size of system memory 402.
  • the operating system 404 may not be aware of the increased size of system memory 402.
  • only the kernel driver may be aware of the increased size of system memory 402.
  • FIG 12 illustrates one embodiment of a PTE 424.
  • PTE 424 may include several elements.
  • PTE 424 may include a page pointer 432 that may be used to indicate a compressed or uncompressed page associated with the PTE 424.
  • PTE 424 may include a next pointer 434 and previous pointer 436 that may be used in mamtaining various lists, e.g. LRU lists.
  • LRU lists may be used by the CMMU 410 to maintain LRU information across the entire system memory address space. Mamtaining LRU information in this manner may enable the CMMU 410 to employ a replacement strategy realizing much higher uncompressed page hit rates than otherwise possible.
  • the CMMU 410 may write the system address into the PTE 424 and marks the PTE 424 as VaUd and not Compressed. In other words, the system address may become the pointer to the uncompressed page.
  • Enabled and not VaUd may indicate the VM has previously written the uncompressed page, e.g. to I/O.
  • the page may not be compressed because this is a Most Recently Used (MRU) page.
  • PTE 424 attributes 430 may include a Highly Compressible attribute which may be used to mark pages to be very highly compressible so that the pages take up much less space in the memory. In one embodiment, this attribute is a single bit attribute.
  • the data from an inactive page that has been marked highly compressible has been written to non-volatile storage (e.g. a disk).
  • the PTE 424 for the page has been marked highly compressible.
  • a field in the attributes 430 may be used to indicate the page as "highly compressed".
  • this highly compressed attribute field may be a 1-bit field. The memory formerly occupied by the page may be freed for use by other processes
  • the PTC may be fully associative. In a fully associative cache, compares are performed on aU entries in the cache in paraUel. In one embodiment, if the PTC is very large, then a highly set associative cache at least equal to the product of the set associativity of the processor's largest cache times the maximumnumber of processors supported by the system may be used. In one embodiment, the rate at hichPTEs 424 are reloaded into the PTC may be substantially lower than the rate at which processors reload tiieir TLB entries. Thus, the latency added to reload a PTE 424 into the PTC may only occur when the processor has to perform a reload of a TLB entry or handle a page fault.
  • TLB Translation Lookaside Buffer
  • the PTC caches the most recently used (MRU) 32MB of system memory, then 8K PTEs 424, or 96KBs of SRAM, would be needed based on 4KB pages and 12B PTEs 424.
  • MRU most recently used
  • the CMMU 410 may copy the contents of contiguous compressed blocks currently in use by other compressed pages into unused blocks from the CBFL 440.
  • the CMMU 410 may check the CBFL 440 to ensure there are enough unused blocks to hold a page before copying the contiguous compressed blocks.
  • page-to-block and block-to-page conversions may only occur when there are insufficient unused blocks on the CBFL 440, or when the UPFL is empty, respectively.
  • a kernel driver may be used to tune the CMMU 410 by keeping each of these hsts sufficiently large. The kernel driver may accompHsh this usmg a CMMU API.
  • the CMMU 410 may replace the LRU PTE 424 in the PTC 412 to make room for the new PTE 424.
  • the DMA channel 414 may read the appropriate number of linked compressed blocks and copy them into the CODEC 416.
  • the CODEC 416 may decompress the compressed page in real-time. In one embodiment, a paraUel decompression algorithm as described below may be used.
  • the DMA channel 414 may read the uncompressed page from the CODEC 416 and copy it into an unused page pointed to by the Uncompressed Page Free List (UPFL).
  • the compressed blocks pointers may be returned to the Compressed Block Free List (CBFL) 440.
  • the CMMU 410 may update the PTE 424 to point to the uncompressed page.
  • the CMMU 410 may update the CLRUL 450 and ULRUL appropriately.
  • the CMMU 410 may pass the pointer to the uncompressed page to the memory controller.
  • the memory controUer may use this pointer to
  • the above described method of handling the PTE 424 pointing to a compressed page may only be performed on memory operations that a kernel driver detects as VM requests to activate a stale page. In another embodiment, the above-described method may be performed on all memory operations.
  • the CMMU 410 may perform a PTC lookup. If the PTE 424 is already in the PTC 412, then the CMMU 410 may load the pointer to the uncompressed page into the DMA channel 414. If the PTE 424 is not akeady in the PTC 412, then the CMMU 410 may read the PTE 424 from the PTT 422 in physical memory.
  • the method maintains a current count of prior matches that occurred when previous symbols were compared with entries in the history table.
  • the method may also maintain a count flag for each entry in the history table.
  • the match information is determined for each of the plurality of symbols based on the current count, the count flags and the compare results.
  • the output compressed data may comprise a count value and an entry pointer.
  • the entry pointer points to the entry in the history table that produced the contiguous match, and the count value indicates a number of matching symbols in the contiguous match.
  • the count value may be output as an encoded value, wherein more often occurring counts are encoded with fewer bits than less often occurring counts.
  • the non-matching symbols may be output as the compressed data.

Abstract

A method and system for allowing a processor or I/O master to address more system memory than physically exists are described. A Compressed Memory Management Unit (CMMU) may keep least recently used pages compressed, and most recently and/or frequently used pages uncompressed in physical memory. The CMMU translates system addresses into physical addresses, and may manage the compression and/or decompression of data at the physical addresses as required. The CMMU may provide data to be compressed or decompressed to a compression/decompression engine. In some embodiments, the data to be compressed or decompressed may be provided to a plurality of compression/decompression engines that may be configured to operate in parallel. The CMMU may pass the resulting physical address to the system memory controller to access the physical memory. A CMMU may be integrated in a processor, a system memory controller or elsewhere within the system.

Description

TITLE: SYSTEM AND METHOD FOR MANAGING COMPRESSION AND DECOMPRESSION OF SYSTEM MEMORY IN A COMPUTER SYSTEM
Field of the Invention The present invention relates to memory systems, and more particularly to an integrated compressed memory management unit comprising a compression / decompression circuit where the unit operates to improve performance of a computing system by the storage of compressed system memory data in system memory or physical memory.
Description of the Related Art Computer system and memory subsystem architectures have remained relatively unchanged for many years.
While memory density has increased and the cost per storage bit has decreased over time, there has not been a significant improvement to the effective operation of the memory subsystem or the software which manages the memory subsystem The majority of computing systems presently use a software implemented memory management unit which performs virtual memory functions. In a virtual memory system, the non-volatile memory (e.g., hard disk) is used as a secondary memory to provide the appearance of a greater amount of system memory. In a virtual memory system, as system memory becomes full, least recently used (LRU) pages are swapped to the hard disk. These pages can be swapped back to the system memory when needed.
Software-implemented compression and decompression technologies have also been used to reduce the size of data stored on the disk subsystem or in the system memory data. Current compressed data storage implementations use the system's CPU executing a software program to compress information for storage on disk. However, a software solution typically uses too many CPU compute cycles and/or adds too much bus traffic to operate both compression and decompression in the present application(s). This compute cycle problem increases as applications increase in size and complexity. In addition, there has been no general-purpose use of compression and decompression for in-memory system data. Prior art systems have been specific to certain data types. Thus, software compression has been used, but this technique limits CPU performance and has restricted use to certain data types.
Similar problems exist for programs that require multiple applications of software threads to operate in parallel. Software compression does not address heavy loaded or multi-threaded applications, which require high CPU throughput. Other hardware compression solutions have not focused on "in-memory" data (data which reside in the active portion of the memory and software hierarchy). These solutions have typically been I O data compression devices located away from the system memory or memory subsystem. In general, the usage of hardware compression has been restricted to slow input and output devices usually located at the I/O subsystem, such as the hard drive.
Mainframe computers have used data compression for acceleration and reduction of storage space for years. These systems require high dollar compression modules located away from the system memory and do not compress in- memory data in the same memory subsystem for improved performance. Such high dollar compression subsystems use multiple separate engines running in parallel to achieve compression speeds at super computer rates. Multiple separate, serial compression and decompression engines running in parallel are cost prohibitive for general use servers, workstations, desktops, or mobile units.
Lower cost semiconductor devices have been developed that use compression hardware. However, these devices do not operate fast enough to run at memory speed and thus lack the necessary performance for in-memory data. Such compression hardware devices are limited to serial operation at compression rates that work for slow I/O devices such as tape backup units. The problem with such I/O compression devices, other than tape backup units, is that portions of the data to compress are often too small of a block size to effectively see the benefits of compression. This is especially true in disk and network subsystems. To operate hardware compression on in-memory data at memory bus speeds requires over an order of magnitude more speed than present day state-of-the-art compression hardware.
Prior Art Computer System Architecture
Figure 1 illustrates a block diagram example of a prior art computer hardware and software operating system hierarchy of present day computing systems. The prior art memory and data storage hierarchy comprises the CPU Subsystem 100, the main memory subsystem 200, and the disk subsystem 300. The CPU subsystem 100 may comprise an LI cache memory 120 and an L2 cache memory 130 coupled to the CPU 110 and the CPU's local bus 135. The CPU subsystem 100 is coupled to the main memory subsystem 200 through the CPU local bus 135. The main memory subsystem 200 is also coupled to the disk subsystem 300. The main memory subsystem 200 comprises the memory controller 210, for controlling the main system memory banks, active pages of memory 220, inactive pages of memory 230, and a dynamically defined page fault boundary 232. The page fault boundary 232 is dynamically controlled by the virtual memory manager software 620 to optimize the balance between active and inactive pages in the system memory and "stale" pages stored on disk. The memory subsystem 200 is coupled to the I/O or disk subsystem 300 by the I/O peripheral bus interface 235, which may be one of multiple bus standards or server/workstation proprietary I O bus interfaces, e.g., the PCI bus. For purpose of illustration, the I/O disk subsystem 300 comprises the disk controller 310, the optional disk cache memory 320, and the actual physical hard disk or disk array 330 which is used to store nonvolatile /non-active pages. In general, multiple subsections of CPU 100, memory 200, and disk 300 subsystems may be used for larger capacity and/or faster operation.
The prior art drawing of Figure 1 also illustrates the software operating system 600. The typical operating system (OS) comprises multiple blocks. Figure 1 shows a few of the relevant OS blocks, including the virtual memory manager (VMM) 620, file system 640, and disk drivers 660.
The operation of prior art systems for storage and retrieval of active and non-active pages from either the system memory or the disk is now described for reference. Again referring to the prior art system of Figure 1, the VMM 620 is responsible for allocation of active pages and reallocation of inactive pages. The VMM 620 defines page fault boundary 232 separating the active pages 220 and the inactive pages 230 located in both the system memory subsystem 200 and disk subsystem 300. An active page may be defined as an area or page of memory, typically 4096 bytes, which is actively used by the CPU during appUcation execution. Active pages reside between or within system memory or CPU cache memory. An inactive page may be defined as an area or page of memory, typically 4096 bytes, which is not directly accessed by the CPU for application execution. Inactive pages may reside in the system memory, or may be stored locally or on networks on storage media such as disks. The page fault boundary 232 is dynamically allocated during run time operation to provide the best performance and operation as defined by many industry standard algorithms such as the LRU/LFU lazy replacement algorithm for page swapping to disk. As applications grow, consuming more system memory than the actual available memory space, the page fault boundaries 232 are redefined to store more inactive pages 230 in the disk subsystem 300 or across networks. Thus, the VMM 620 is responsible for the placement of the page fault boundary 232 and the determination of active pages 220 and inactive pages 230, which reside in memory and on the disk subsystem 300. The file system software 640, among other tasks, and along with the disk drivers 660, are responsible for the effective movement of inactive pages between the memory subsystem 200 and the disk subsystem 300. The file system software 640 may have an interface that is caUed by the VMM 620 software for the task of data movement to and from the computer disk and network subsystems. The file system 640 software maintains file allocation tables and bookkeeping to locate inactive pages that have been written to disk. In order for the file system to operate, the file system caUs the software disk drivers 660 for DMA control of data movement and physical disk control. Instructions are programmed into the disk controUer 310 of the disk subsystem 300 by the file system 640 software. Thus, when application data exceeds the available system memory space, the VMM 620 allocates and reaUocates active and inactive pages for best operation of appUcation data and instructs the file system 640 to instruct the disk driver 660 to carry out the DMA operation and page movement tasks.
Figure 2 iUusrrates a block diagram example of a prior art computer system memory configuration with a Host Bus or CPU local bus 135 coupled to a Memory Controller. Four standard DIMMs are shown instaUed in the memory slots. In this system, data written to system memory is received from the host bus by the memory controUer and written to one or more of the DIMMs "as is", with the possible inclusion of error correction inforrnation. The memory controUer may include error correction and detection logic (ECC) to detect errors on data read back from memory. This is generaUy accompUshed by appending error detection data to the written data; for example, a 64-bit write to memory may have 8-bit error detection data appended to the 64 bits.
The amount of system memory avaUable for executing processes within Prior Art computer systems is generally limited by the amount of physical memory installed in the system It is desirable to provide a method of increasing the effective size of system memory without increasing actual physical memory, and to thus aUow processors and or I/O masters of the system to address more system memory than physicaUy exists.
Summary of the Invention
The present invention comprises various embodiments of a system, such as a computer system, that includes a Compressed Memory Management Unit (CMMU) and one or more compression / decompression engines. In various embodiments, the CMMU may be comprised either in the CPU, the system memory controUer, or on a separate chip. Where the computer system includes multiple CPUs, the CMMU may be comprised in one or a pluraUty of the CPUs. The one or more compression / decompression engines may be comprised in the CPU, the system memory controUer, or in the memory subsystem, e.g., on one or more memory modules, or elsewhere in the system. The Compressed Memory Management Unit (CMMU) may operate in conjunction with die one or more compression / decompression engines to aUow a processor or I/O master to address more system memory than physically exists. The CMMU may translate system addresses received in system memory accesses into physical addresses. The CMMU may pass the resulting physical address to the system memory controUer to access physical memory (system memory). In one embodiment, the CMMU may manage system memory on a page granularity. The CMMU may increase the effective size of system memory by storing the least recently used pages in a compressed format in system memory (and possibly also on the hard drive), and storing the most recently and frequently used pages uncompressed in system memory. The most recently and frequently used data may also be cached in one or more locations, such as in an LI, L2, and or L3 cache.
In one embodiment, a programmable compression ratio may be used in determining the amount by which the system memory address space can be increased. In one embodiment, the CMMU may monitor the actual compression ratio and, if the actual ratio drops below a threshold compression ratio, may act to compress one or more uncompressed pages to thus maintain the desired programmed compression ratio.
In some embodiments, the operating system may be aware of the increased size of system memory provided by the CMMU. In embodiments where the operating system is aware, a kernel driver may be used to ensure that the operating system may safely use the entire system memory space without overflowing physical memory. In other embodiments, the operating system may not be aware of the increased size of system memory. In embodiments where the operating system is not aware of the increased size of system memory, only the kernel driver may be aware of the increased size of system memory. The kernel driver may selectively compress system memory pages into a portion of the system memory, referred to as a compressed cache. In one embodiment, the compressed cache may dynamicaUy vary in size. In one embodiment where the operating system is not aware of the increased size of system memory, the
CMMU may allocate additional space by using physical addresses above locations of physical memory. In yet other embodiments, the operating system may be aware of the increased size of a first portion of the system memory, but not be aware of the increased size of the second portion of the system memory provided by the CMMU.
In one embodiment, the CMMU may be integrated into a system memory controUer. For example, the CMMU may be integrated into PC chipset logic, e.g. a North Bridge and/or South Bridge. In another errώodiment, the
CMMU may be integrated into a CPU or CPU chip.
The CMMU may include, but is not limited to, the foUowing hardware components: a Page Translation Cache (PTC) and one or more scatter/gather DMA channels. In one embodiment, the CMMU may include a compression/decompression engine (CODEC). In one embodiment, the PTC may be f Uy associative. Software resources that the CMMU manages may include, but are not limited to: a Page Translation Table (PTT) comprising
Page Translation Entries (PTEs), Uncompressed Pages (UPs), and Compressed Blocks (CBs). The PTC may include one or more , recently or frequently used PTEs from the PTT, and may thus reduce the overhead of accessing a frequently or recently used PTE from the PTT stored in physical memory. In one embodiment, the unused UPs may be linked together to form an Uncompressed Page Free List (UPFL). In one embodiment, the unused CBs may be linked together to form a Compressed Block Free List (CBFL). In one embodiment, the PTEs that reference uncompressed pages may be linked together to form an Uncompressed Least Recently Used (LRU) List (ULRUL). In one ernbo iment, the PTEs that reference compressed blocks may be linked together to form a Compressed LRU List (CLRUL).
When a processor or I/O master generates an access to system memory, the CMMU may translate the system memory address of the access into a physical memory address. In translating the system memory address, the CMMU may perform a PTC lookup. If the PTE is already in the PTC, and if the PTE points to an uncompressed page, then the CMMU may pass the pointer to the uncompressed page from the PTE to the memory controUer. The memory controUer may use this pointer to directly access physical memory for the access. If the PTE is not already in the PTC, then the CMMU may read the PTE from the PTT located in physical memory. The CMMU may then write or cache the PTE to the PTC as a recently or frequently used PTE. Once the PTE is obtained, either from the PTC or read from the PTT, the PTE may be used to access the uncompressed page. In the case of a read, the uncompressed page may be readily returned to the requesting processor or I/O master.
If the PTE points to a compressed page, then the CMMU may read the PTE from the PTT located in physical memory into the PTC (if it was not already cached in the PTC), and may load the pointer to the first compressed block from the PTE into the DMA channel. The DMA channel may read the appropriate number of linked compressed blocks and copy them into the CODEC. The CODEC may decompress the compressed page substantiaUy in real-time. For example, the CODEC may decompress the compressed page at a sufficient speed such that, to the accessing processor or I/O master, there is no detectable delay in the memory access, or in one embodiment less than a 5% delay detected in the memory access, or in one embodiment less than a 20% delay detected in the memory access. In one embodiment, a parallel decompression algorithm as described below may be used.
After decompression has been performed, the uncompressed page or data may be provided directly to the accessing processor or I/O master from the CODEC to satisfy the access. Alternatively, the uncompressed page or data may be stored back in system memory and accessed from there. In addition, after decompression, the DMA channel may read the uncompressed page from the CODEC and copy it into an unused page in system memory pointed to by an entry in an Uncompressed Page Free List (UPFL). The compressed blocks pointers may be returned to a Compressed
Block Free List (CBFL). The CMMU may update the PTE to point to the uncompressed page. In an embodiment where the uncompressed page is written back to system memory and accessed from there, the CMMU may update the CLRUL and ULRUL appropriately. The CMMU may pass the pointer to the uncompressed page to the memory controller, and the memory controller may use this pointer to directly access physical memory. Thus, when a request for a compressed page occurs, the compressed page is decompressed in the memory controller in real time, and the resulting uncompressed page may be either 1) provided directly to the requestor and stored back in system memory or 2) stored back in system memory and accessed from there.
When the CMMU needs to compress an uncompressed page, for example, to free up additional space in system memory, the CMMU may perform a PTC lookup. If the PTE is already in the PTC, then the CMMU may obtain the PTE from the PTC and load the pointer to the uncompressed page from the PTE into the DMA channel. If the PTE is not already in the PTC, then the CMMU may read the PTE from the PTT located in physical memory. In one embodiment, the CMMU may then load or cache the PTE into the PTC. The DMA channel may read the uncompressed page from physical memory and load it into the CODEC. The CODEC may compress the page in realtime, e.g. at memory speed. In one embodiment, a parallel compression/decompression algorithm may be used as described herein. The DMA channel may read the compressed page from the CODEC and copy it into linked compressed blocks from the CBFL. The address of the uncompressed page may be returned to the UPFL. The CMMU may update the PTE in physical memory to point to the first compressed block of the compressed page. The CMMU may update the CLRUL and ULRUL as needed. Thus, when additional space is desired in system memory, the CMMU may operate to read uncompressed pages (preferably least recently used uncompressed pages), compress them, and store them back into the system memory as compressed pages, thus freeing up space in system memory.
In one embodiment where the operating system is aware of the increased size of system memory, the CMMU may be initialized and enabled by BIOS. In one embodiment where the operating system is not aware of the increased size of system memory, the CMMU may be initialized and enabled during BIOS. In another embodiment where the operating system is not aware of the increased size of system memory, the CMMU may be initialized and enabled after the operating system has booted.
As noted above, in an embodiment where the operating system is aware of the increased size of system memory, the kernel driver may be used to ensure that the operating system is able to safely use the entire system memory space without overflowing physical memory. In one embodiment, the kernel driver may accompHsh this by ensuring that a mirώnum average compression ratio across the entire system memory space is maintained. In one embodiment, the CMMU may provide an AppUcation Programming Interface (API) that enables a kernel driver to initiate various CMMU operations.
In one embodiment, one or more Compression Decompression engines (CODECs) may be optimized to perform page-based compressions and decompressions. If a system memory page is uncompressible, then the CMMU keeps the page uncompressed. In one embodiment, a plurality of DMA-based CODECs may be included. In one embodiment, the one or more CODECs may include at least one paraUel data compression and decompression engine, designed for the reduction of data bandwidth and storage requirements and for compressing / decompressing data at a high rate.
In one embodiment, one or more pages may be very highly compressed so that the pages take up much less space in the memory. In one embodiment, this may be performed by setting an attribute in the page translation entry that references the page. In one embodiment, the attribute is a single bit that may be set to indicate the page is highly compressed. In one embodiment, setting this attribute forces the page to be compressed to the maximum amount so that the page takes zero space. A highly compressed page may be represented by an entry in the page table that does not actuaUy point to any blocks of memory. Any compressed or uncompressed blocks formerly occupied by the page may be returned to the memory for use by other processes. In one embodiment, marking pages as Highly Compressible may occur when the operating system is aware of compression, and the current or actual compression ratio is near or below a threshold compression ratio. In one embodiment, a pool of pages that are inactive and clean may be available to be highly compressed to meet the required compression ratio.
The CMMU may monitor the performance of compressibility in the system. The amount of data that can be active for any one program may be restricted, and a pool of inactive pages that represent the least recently used active pages may be maintained. Some of these pages may be compressed and some of them may be uncompressed. Active pages may be dirty or clean. Inactive pages represent real pages and comprise real data. If an active page is dirty, the page may need to be written back to disk (i.e. made clean) before moving to the inactive pool. Thus, the inactive pages by definition are clean. These inactive pages may be invahdated and marked to be very highly compressible without naaking any memory aUocations or requiring action by or notification to the operating system.
In one embodiment, when decompressing a page, if the page is marked as highly compressed (e.g. the Highly Compressed attribute is set in the page translation entry, a "zeroed" page may be synthesized by the CMMU) rather than having the decompression engine decompress the highly compressed page. After the zeroed page is synthesized, data may be read from the non-volatile storage to the page. This data may include data that was previously written back to the non-volatile storage during the process of highly compressing the page.
In one embodiment, the system may include a plurality of compression decompression engines (CODECs) that may each implement one of a pluraUty of compression algorithms and a corresponding decompression algorithm. In one embodiment, a page translation entry for a page may indicate the particular compression algorithm that was used to compress the page. In one embodiment the page translation entry may include an attribute, which may be referred to as a CODEC selector attribute, that may be set to cause a particular compression algorithm to be used to compress the page, and thus also indicates the corresponding decompression algorithm. In one embodiment, two or more different compression algorithms may be performed on the data, and one of the compression algorithms may then be selected as the desired compression algorithm for the data. The desired compression algorithm for the data may be selected, for example, based on compression ratio. In other words, the compression algorithm that yields the highest compression ratio for the data may be selected. Other criteria, or a combination of two or more criteria, may be used to select a compression algorithm from the plurality of different compression algorithms. For example, the fastest compression algorithm may be selected. When the data needs to be decompressed, the page translation entry may be examined to determine the appropriate decompression algorithm for the data, and the compressed page or pages containing the data may then be routed to one or more CODECs that implement the appropriate decompression algorithm to be decompressed. In one embodiment, the plurality of CODECs may perform the compression or decompression of the page in paraUeLIn one embodiment, the system may include a plurality of compression/decompression engines (CODECs) that may each implement a substantially similar compression algorithm and a corresponding decompression algorithm. In mis embodiment, a page of data to be compressed or decompressed may be divided into portions, and each of the portions may be compressed or decompressed by a different CODEC. After the portions are compressed or decompressed, the uncompressed or compressed portions of the page are merged to form the uncompressed or compressed page. In one embodiment, the plurality of CODECs may perform the compression or decompression of the portions of the page inparaUel.
Brief Description of the Drawings A better understanding of the present invention can be obtained when the foUowing detailed description of the preferred embodiment is considered in conjunction with the foUowing drawings, in which:
Figure 1 iUustrates the prior art computer data memory and storage hierarchy from the CPU cache, to the main system memory to the disk subsystem;
Figure 2 is a block diagram iUustrating a prior art system memory configuration; Figure 3 iUustrates an exemplary computer system which implements one embodiment of the present invention;
Figure 4a is a block diagram of an embodiment of a computer system where the CMMU (Compressed Memory Management Unit) is included in the CPU Memory Management Unit (MMU) and the Compression/Decompression engine (CODEC) is included in the CPU subsystem; Figure 4b is a block diagram of an embodiment of a computer system where the CMMU is included in the
CPU MMU and the CODEC is included in the memory controUer;
Figure 4c is a block diagram of an embodiment of a computer system where the CMMU is included in the CPU MMU and the CODEC is included in the memory;
Figure 4d is a block diagram of an embodiment of a computer system where the CMMU is included in the CPU subsystem and the CODEC is included in the memory controUer;
Figure 4e is a block diagram of an embodiment of a computer system where the CMMU and the CODEC are included in the memory controUer;
Figure 4f is a block diagram of an embodiment of a computer system where the CMMU is included in the memory controller and the CODEC is included in the memory; Figure 4g is a block diagram of an embodiment of a computer system where the CMMU is included between the memory controUer and the memory and the CODEC is included in the memory;
Figure 4h is a block diagram of an embodiment of a computer system where the CMMU is included in the memory controUer and there are multiple DMA channels between the memory controller and the memory; Figure 4i is a block diagram of an embodiment of a computer system where the CMMU is included in the memory controUer, there are multiple DMA channels between the CPU subsystem and the memory controUer, and there are multiple DMA channels between the memory controller and the memory;
Figure 5a is a block diagram Ulustrating a computer system configuration with the CMMU in the CPU according to one embodiment;
Figure 5b is a block diagram iUustrating a computer system configuration with the CMMU in the memory controller according to one embodiment;
Figure 6 is a block diagram of a CMMU according to one embodiment;
Figure 7 is a block diagram iUustrating a CMMN and a CODEC coupled by multiple DMA channels according to one embodiment;
Figure 8 illustrates an embodiment where the operating system is aware of the increased size of system memory provided by the CMMU;
Figure 9 iUustrates an embodiment where the operating system is not aware of the increased size of system memory provided by the CMMU; Figure 10 illustrates a CMMU integrated into a system memory controller according to one embodiment;
Figure 11 illustrates software resources that the CMMU may manage in physical memory according to one embodiment;
Figure 12 iUustrates a Page Translation Entry (PTE) including several elements according to one embodiment;
Figure 13 Ulustrates a CMMU placing unused compressed blocks on a Compressed Block Free List (CBFL) according to one embodiment;
Figure 14 iUustrates PTEs that point to compressed pages and linked together to form a Compressed LRU List (CLRUL) according to one embodiment; and
Figure 15 illustrates a fully associative mechanism for managing compressed and uncompressed pages of memory according to one embodiment.
Detailed Description of the Preferred Embodiment
Incorporation by Reference
The following patents and patent appUcations are hereby incorporated by reference in their entirety as though fuUy and completely set forth herein.
U.S. Patent No. 6,173,381 titled "Memory ControUer Including Embedded Data Compression and Decompression Engines" issued on January 9, 2001, whose inventor is Thomas A. Dye.
U.S. Patent No. 6,170,047 titled "System and Method for Managing System Memory and or Non-volatile Memory Using a Memory ControUer with Integrated Compression and Decompression CapabUities" issued on January 2, 2001, whose inventor is Thomas A. Dye.
U.S. patent appUcation Serial No. 09/239,658 titled "Bandwidth Reducing Memory ControUer Including Scalable Embedded ParaUel Data Compression and Decompression Engines" whose inventors are Thomas A. Dye, Manuel J. Alvarez π and Peter Geiger and was filed on January 29, 1999.
U.S. Patent No. 6,208,273 titled "System and Method for Performing Scalable Embedded Parallel Data Compression" issued on March 27, 2001, whose inventors are Thomas A. Dye, Manuel J. Alvarez JJ and Peter Geiger. U.S. patent appUcation Serial No. 09/491,343 titled "System and Method for Performing Scalable Embedded ParaUel Data Decompression" whose inventors are Thomas A. Dye, Manuel J. Alvarez II and Peter Geiger, and was filed on January 26, 2000.
U.S. patent appUcation Serial No. 09/550,380 titled "ParaUel 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-Li e Memory Modules" whose inventors are Thomas A. Dye, Manuel J. Alvarez II and Peter Geiger, and was filed April 14, 2000.
Figure 3 - Exemplary Computer System Figure 3 Ulustrates an exemplary computer system that may implement embodiments of the present invention.
Embodiments of the present invention may be implemented in any of various systems, such as a computer system, Internet apphance, network appUance, personal digital assistant (PDA), television, telephone, such as a wireless telephone, or in general, any device that includes a memory.
Figures 4A-4I - Exemplary Computer System Architectures
Figures 4A-4I iUustrate several embodiments of system architecture that include a Compressed Memory Management Unit (CMMU) 214. As shown in Figures 4A-4I, the systems may include a CPU 100 coupled to a bridge 208. CPU 100 may include a Memory Management Unit (MMU) 212. The bridge 208 may include a memory controller 211. The bridge 208 may include additional logic or functionality, such as North Bridge and/or South Bridge functionality. The bridge 208 may couple to a systemmemory 218. The memory controller 211 in the bridge 208 may couple to system memory 218 and may manage accesses to the system memory. The bridge 208 may couple to an I/O bus 235. A hard drive or other non-volatile memory 300 may couple to the I O bus 235. A video device and on or more other I/O device may also couple to the I/O bus 235. The various embodiments may also include one or more compression/decompression engines (CODEC) 216 that may perform data compression and decompression under control of the CMMU 214. In one embodiment, at least one of the one or more CODECs may be a parallel compression/decompression engine that may perform parallel data compression and decompression under control of the CMMU 214.
In one embodiment as Ulustrated in Figure 4A, the CPU Memory Management Unit (MMU) 212 may include a CMMU 214 as described herein. In this embodiment, the CPU 100 may also include CODEC 216. In one embodiment as Ulustrated in Figure 4B, the CPU Memory Management Unit (MMU) 212 may include a CMMU 214 as described herein. In this embodiment, the memory controller 211 in bridge 208 may include a CODEC 216. In one embodiment as Ulustrated in Figure 4C, the CPU Memory Management Unit (MMU) 212 may include a CMMU 214 as described herein. In this embodiment, the memory 218 may include a CODEC 216. In one embodiment as Ulustrated in Figure 4D, the CPU 100 may include a CMMU 214 that is implemented separately from the CPU MMU 212, and that interfaces with CPU MMU 212 to manage the compression/decompression of data using a CODEC 216. In this embodiment, the memory controller 211 in bridge 208 may include the CODEC 216. In one embodiment as Ulustrated in Figure 4E, the memory controUer 211 in bridge 208 may include both the. CMMU 214 and the CODEC 216. In one embodiment as Ulustrated in Figure 4F, the memory controUer 211 in bridge 208 may include the CMMU 214. In this embodiment, the memory 218 may include a CODEC 216. In one embodiment as Ulustrated in Figure 4G, the CMMU 214 may be coupled between the bridge 208 and memory 218. In this embodiment, memory 218 may include a CODEC 216. In one embodiment, as Ulustrated in Figure 4H, the CMMU 214 may be included in the memory controUer 211. In this enibodiment, there may be a plurahty of DMA channels 250 coupling the memory 218 to the bridge 208 that may be used by the CMMU 214 in transferring memory. In one embodiment, as Ulustrated in Figure 41, the CMMU 214 may be included in the memory controller 211. In this embodiment, there may be a pluraUty of DMA channels 250 between the memory 218 to the bridge 208 and a plurality of DMA channels 252 between the bridge 208 and the CPU subsystem 100 that may be used by the CMMU 214 in transferring memory.
Figures 5A-5B - Computer System with Compressed Cache
Figure 5 A illustrates a computer system with a Compressed Memory Management Unit (CMMU) 214 embedded in a CPU according to one embodiment. The computer system of Figure 5 A includes a CPU subsystem 100, a memory subsystem 200, and a nonvolatile memory subsystem 300. The CPU subsystem 100 may be coupled to the memory subsystem 200, which may be coupled to the disk subsystem 300. The CPU subsystem 100 includes a CPU 110 and may also include one or more caches such as an LI cache 120 and an L2 cache 130. The CPU 210 may include a Compressed Memory Management Unit (CMMU) 214. In another embodiment, the CMMU 214 may be included in the CPU subsystem external to the CPU 110.
In one embodiment, the CMMU 214 may be driven by hardware control logic internal to the CPU subsystem 100. In one embodiment, the hardware control logic may be integrated in the CPU 210. In another embodiment, the CMMU 214 may be controUed by software, for example a driver, executable within the CPU 110.
The memory subsystem 200 may include memory controUer 211 and system memory 218 (also referred to as main memory or RAM). Within the memory subsystem 200 of one embodiment, the memory controller 210 may be coupled to system memory 218. System memory 218 may be comprised of one or more volatile memory devices such as DIMMs, SIMMs, SDDJMMs, IMMs, or C-DIMMs (compression enabled DIMMs). System memory 218 may store active pages 220, inactive pages 230, and compressed cache 240.
Figure 5B Ulustrates a computer system with a Compressed Memory Management Unit (CMMU) 214 embedded in a memory controller 211 according to one embodiment. The computer system of Figure 5B includes a
CPU subsystem 100, a memory subsystem 200, and a nonvolatile memory subsystem 300. As indicated in Figure 5B, the CPU subsystem 100 may be coupled to the memory subsystem 200, which may be coupled to the disk subsystem 300 The CPU subsystem 100 includes a CPU 110 and may also include one or more caches such as an LI cache 120 and an L2 cache 130. The memory subsystem includes memory controUer 211 and system memory 218 (also referred to as main memory or RAM). Within the memory subsystem of one embodiment, the memory controUer 210 may be coupled to system memory 218. System memory 218 may be comprised of one or more volatile memory devices such as DIMMs, SIMMs, SDDIMMs, RIMMS, or C-DIMMs (compression enabled DIMMs). System memory 218 may store active pages 220, inactive pages 230, and compressed cache 240. The memory controUer 211 may include the CMMU 214. In one embodiment, the CMMU 214 may be driven by hardware control logic internal to the memory controUer 211. In another embodiment, the CMMU 214 may be controUed by software, for example a driver, executable within the CPU 110.
In the embodiments Ulustrated in Figures 5A and 5B, a portion of the system memory 218, referred to as the compressed cache 240, may store compressed memory pages. Thus the compressed cache 240 may be located in the memory subsystem 200 of the computer. In one embodiment, the CMMU 214 may aUocate the compressed cache 240. The compressed cache 240 may be aUocated within the normal memory map of the computer system. Compressed pages may be stored in the compressed cache 240. Pages are generally 4096 bytes. In alternate embodiments, page sizes can be any size as desired by the operating system software.
Instead of swapping inactive pages to the nonvolatile memory 330, embodiments of the system and method as described herein may operate to store inactive pages in a compressed format in the compressed cache 240. In addition, pages from the compressed cache 240, which are maintained in compressed format, can be moved to disk or network in such format for future data storage, retrieval, or transmission over LANs or WANs. Thus, a second order benefit is achieved by storage of compressed pages in the I/O subsystem 300 instead of non-compressed pages.
Computer Architecture of Several Embodiments
The present invention provides various embodiments of a Compressed Memory Management Unit (CMMU) 214 that allows a processor or I/O master to address more system memory than physicaUy exists. Figure 6 is a block diagram iUustrating the architecture of a CMMU 214 according to one embodiment. Note that CODEC 216 may be integrated in the CMMU 214 or alternatively may be external to the CMMU 214. Figure 7 illustrates a CMMU 214 coupled to a CODEC 214 via multiple DMA channels.
The CMMU 214 may increase the effective size of system memory by keeping the least recently used pages compressed, and the most recently and frequently used pages uncompressed in physical memory. The CMMU 214 may also increase the effective speed of system memory by storing least recently used pages in a compressed format in system memory. A processor or I/O master accesses system memory using a system address. The CMMU 214 translates the system address into a physical address. The CMMU 214 passes the resulting physical address to the system memory controller 211 to access physical memory 218 (also called system memory). The CMMU 214 may decompress compressed data to produce uncompressed data for the memory access. The CMMU 214 may also compress uncompressed data to produce compressed data for storing in physical memory 218. One or more software sources may be used for the management of the compressed and uncompressed data in physical memory 218. In one embodiment, the CMMU 214 manages system memory 218 on page granularity. In one embodiment, the page size is programmable.
In one embodiment, the maximum compression ratio that can be achieved by the CMMU 214 is programmable. The compression ratio may influence the amount by which the system memory address space can be increased. In some embodiments, since the compressibuity of system memory 218 may vary, a kernel driver may be used to ensure that a minimum compression ratio is maintained. For example, if the CMMU 214 were programmed to achieve a maximum compression ratio of 16: 1 , then the size of the system memory address space may be increased by 4 times. In other words, the kernel driver may ensure a minimum compression ratio of 4: 1.
Figure 8 shows one embodiment of the system memory address space, wherein a portion 404 of the address space is used to store the operating system and a portion 402 is used for general system memory. The system memory portion 402 may store applications and other data. In one embodiment, a Page Translation Table (PTT) 422 may reside in physical memory 400 and may include a list of Page Translation Entries (PTEs). In one embodiment, a PTE may exist for each page in system memory. Each PTE may include a pointer to either a compressed page or uncompressed page located in physical memory 400. In some embodiments, as Ulustrated in Figure 8, the operating system 404 may be aware of the increased size of system memory 402. In one embodiment, a kernel driver may be used to ensure that the operating system is able to safely use the entire system memory space 402 without overflowing physical memory 400. In embodiments where the operating system is aware of the increased size of system memory 402, it may be desired to maintain a ratio between compressed and uncompressed memory to provide the increased size of system memory 402. In these embodiments, the CMMU 214 may dynamically decide when to compress and or decompress pages of memory to maintain the desired compression ratio and thus the increased size of system memory 402. In some embodiments, as illustrated in Figure 9, the operating system 404 may not be aware of the increased size of system memory 402. In these embodiments, only the kernel driver may be aware of the increased size of system memory 402. In yet other embodiments, the operating system may be aware of the increased size of a portion of system memory, but not be aware of another portion of system memory with increased size. In these embodiments, the kernel driver may be aware of aU portions of system memory in which compression is being used to virtuaUy increase the size of system memory. Some embodiments may provide for a pluraUty modes of operation, which may include a mode where the operating system is aware of the increased size of memory 402, a mode where the operating system is not aware of the increased size of system memory 402, and a "mixed mode" where the operating system is only aware of the increased size of a portion of system memory 402.
In some embodiments, a kernel driver may selectively compress system memory pages into a compressed cache 406 that, in one embodiment, is allowed to dynamically vary in size. In one embodiment, the kernel driver may not compete with, or allocate system memory 402 away from, the operating system 404. In one embodiment where the operating system 404 is not aware of the increased size of system memory 402, the CMMU 214 may aUocate additional space by using physical addresses above locations of physical memory. In one embodiment where the operating system 404 is not aware, the Virtual Memory (VM) system may directly control the Compressed L3 cache. In one embodiment, immediate data required for directory information may be held on-chip (e.g. eDRAM). hi another embodiment, an on-chip (e.g. eDRAM) Most Recently Used (MRU) uncompressed page cache may be used. In one embodiment, this cache may be dynamically controUed, e.g. by the CMMU 214.
Figure 10 illustrates embodiments where a CMMU 410 is integrated into a system memory controller 420. The CMMU 410 may comprise the foUowing hardware components: a Page Translation Cache (PTC) 412, one or more scatter/gather DMA channels 414, and a compression/decompression engine (CODEC) 416. The CMMU 410 may interact with the memory controller 420 to manage the system memory, including management of PTT 426, scattered UPs 426 and CBs 428. In one embodiment, the PTC 412 may be fully associative.
In one embodiment, the Compressed Memory Management Unit (CMMU) 410 may manage system memory on a page basis. In one embodiment, the CMMU 410 may allow an arbitrary number of pages to be compressed or uncompressed in system memory at any time. The number of compressed pages may be based on the compressibihty of the data. In general, as the compressibihty of the least recently used pages increases, the number of most recently and frequently used uncompressed pages can be increased.
In one embodiment, each uncompressed system page may be mapped to a page in physical memory 400. The page may be located anywhere in physical memory. Each compressed system page may be mapped to one or more smaUer compressed blocks. Each compressed block may be located anywhere in physical memory. During normal operations, physical memory may -become fragmented, so the compressed blocks may not be contiguous. Therefore, in one embodiment, the compressed blocks may be linked together.
Figure 11 Ulustrates resources that the CMMU 410 may manage in physical memory. These resources include, but are not limited to: a Page Translation Table (PTT) 422 comprising Page Translation Entries (PTEs) 424, Uncompressed Pages (UPs) 426, and Compressed Blocks (CBs) 428. As shown, PTEs 424 may include Uncompressed PTEs (UPTEs) 424b that reference UPs 426 in system memory, and may also include compressed PTEs (CPTEs) 424a that reference CBs 428. In one embodiment, the unused UPs 426 may be linked together to form an Uncompressed Page Free List (UPFL). In one embodiment, the unused CBs 428 may be linked together to form a Compressed Block Free List (CBFL). In one embodiment, the PTEs 424 that reference uncompressed pages 426 may be linked together to form an Uncompressed Least Recently Used List (ULRUL). In one embodiment, the PTEs 424 that reference compressed blocks 428 may be linked together to form a Compressed LRU List (CLRUL) 450, as Ulustrated in Figure 14.
In one embodiment, the Page Translation Table (PTT) 422 may be anchored anywhere in physical memory 400. PTT 422 may include a contiguous list of Page Translation Entries (PTEs) 424. In one embodiment, a PTE 424 may exist for each page in system memory. Each PTE 424 may include a pointer to either a compressed page 428 or uncompressed page 426 located in physical memory 400. In one embodiment, there may be two or more PTTs. In one embodiment, there may be one PTT for PTEs to compressed pages (CPTEs) 424a and one PTT for PTEs to uncompressed pages (UPTEs) 424b. In one embodiment, each table may be assigned a lookup virtual address range for entries. Figure 12 illustrates one embodiment of a PTE 424. Each PTE 424 may include several elements. PTE 424 may include a page pointer 432 that may be used to indicate a compressed or uncompressed page associated with the PTE 424. In one embodiment, PTE 424 may include a next pointer 434 and previous pointer 436 that may be used in mamtaining various lists, e.g. LRU lists. One or more LRU lists may be used by the CMMU 410 to maintain LRU information across the entire system memory address space. Mamtaining LRU information in this manner may enable the CMMU 410 to employ a replacement strategy realizing much higher uncompressed page hit rates than otherwise possible.
Each PTE may include one or more attributes 430. In one embodiment, attributes 430 may include a Compressed attribute that may be used to indicate whether the PTE 424 points to a compressed page 428 or uncompressed page 426. In one embodiment, attributes 430 may include Enabled and Valid attributes. If the PTE 424 is not Enabled as indicated by the Enabled attribute, then the CMMU 410 may use the system address to access physical memory directly. In one embodiment, the Enabled attribute may provide a mechanism for preventing certain system memory pages from ever being compressed, for example, critical operating system resources. If the PTE 424 is Enabled but not Valid as indicated by the Enabled and VaUd attributes, then the CMMU 410 may only use the system address the first time the system memory page is accessed. Once the page has been accessed, the CMMU 410 may write the system address into the PTE 424 and marks the PTE 424 as VaUd and not Compressed. In other words, the system address may become the pointer to the uncompressed page. In one embodiment, Enabled and not VaUd may indicate the VM has previously written the uncompressed page, e.g. to I/O. In this embodiment, the page may not be compressed because this is a Most Recently Used (MRU) page. In one embodiment, PTE 424 attributes 430 may include a Highly Compressible attribute which may be used to mark pages to be very highly compressible so that the pages take up much less space in the memory. In one embodiment, this attribute is a single bit attribute. In one embodiment, setting this attribute forces the page to be compressed to the maximum amount so that the page takes zero space. An optimaUy compressed page may be represented by an entry in the page table that does not actuaUy point to any blocks of memory. Any compressed or uncompressed blocks formerly occupied by the page are thus returned to memory for use. In one embodiment, marking pages as Highly Compressible may occur when the OS 400 is aware of compression (as Ulustrated in Figure 8), and the compression ratio is near or below the operating system's expected level. In this embodiment, a pool of pages that are inactive and clean may be maintained. These pages are available to be highly compressed to meet the required compression ratio. Thus, in embodiments where the operating system is aware of the increased size of memory, the operating system is "aware" in order to interact with the CMMU in dynamically mamtaining a compression ratio. The operating system may not be directly aware that compression is being performed; rather, the operating system may only be aware that the memory appears larger than the actual physical size of memory. In this embodiment, while the operating system is aware that memory is larger, it may not be aware of which pages are compressed or uncompressed. As an example of operation in an embodiment where the operating system is aware of the compression of memory, assume that the operating system currently desires a 2:1 compression ratio. To help maintain the 2:1 ratio, there may be an interrupt mechanism that may interrupt the kernel mode driver. When the interrupt handler is invoked, it can read the hardware (e.g. CMMU) to determine the current compression ratio. If the desired compression ratio is not currently being met, it may be necessary to free some pages. To free the pages, there may be an operating system caU that aUows the CMMU to start marking some pages to be very highly compressible. In embodiments where the operating system is not aware of the increased size of memory, the CMMU manages compression of memory without requiring operating system action.
There may be a pluraUty of programs ninning within the system. The programs each have a certain amount of active memory (e.g. pages in use). The CMMU may not be able to make active pages inactive and write them to disk in real time, as this may degrade system performance. Thus, the CMMU, through the interrupt mechanism, may monitor the performance of compressibihty in the system. The amount of data that can be active for any one program may be restricted, and a pool of inactive pages that represent the least recently used active pages may be maintained. Some of these pages may be compressed and some of them may be uncompressed. Active pages may be dirty or clean. Inactive pages represent real pages and comprise real data. If an active page is dirty, the page may need to be written back to disk (i.e. made clean) before moving to the inactive pool. Thus, the inactive pages by definition are clean. These inactive pages may be invaUdated and marked to be very highly compressible without making any memory allocations or requiring action by or notification to the operating system.
Thus, the data from an inactive page that has been marked highly compressible has been written to non-volatile storage (e.g. a disk). The PTE 424 for the page has been marked highly compressible. In one embodiment, a field in the attributes 430 may be used to indicate the page as "highly compressed". In one embodiment, this highly compressed attribute field may be a 1-bit field. The memory formerly occupied by the page may be freed for use by other processes
(or by the same process). At some point, it may be necessary to "decompress" the page, now represented by only the PTE 424 (i.e. there is no memory aUocated to the page). For example, a process may request one or more pages, and the PTE 424 may be used for the page. In one embodiment, if the Highly Compressed bit of a PTE 424 indicates that the page is highly compressed, rather than the decompression engine decompressing the highly compressed page represented by the PTE 424, a "zeroed" page may be synthesized by the CMMU. After the zeroed page is synthesized, data may be read from the non-volatile storage to the page. This data may include data that was previously written back to the non-volatile storage during the process of highly compressing the page.
Note that, in setting the highly compressed attribute field, the page is marked to be compressed as if the page was fiUed with aU zeroes to achieve maximum compression. The page itself, however, does not have to be fiUed with aU zeroes, nor does the page have to be compressed by the CODEC. In one embodiment, once the CMMU 410 is enabled, the PTT 422, Compressed Block Free List (CBFL) and Uncompressed Page Free List (UPFL) may no longer be directly accessible by a processor or I/O master. To faciUtate this, PTEs 424 that would normaUy point to these resources if marked not Enabled or not Valid, may be marked instead as Enabled, VaUd and Highly Compressible. In one embodiment, PTE 424 attributes 430 may include an Uncompressible attribute. If a page cannot be compressed, then the page may be marked Uncompressible. In one embodiment, future attempts by the CMMU 410 to compress the page marked as Uncompressible may be avoided. If the page is modified in the future by a processor or I O master, then the Uncompressible attribute may be un-marked to indicate the page is compressible.
In one embodiment, PTE 424 attributes 430 may include a Reused attribute. When a processor or I/O master accesses a page, the page may be marked as Reused. The CMMU 410 may scan the uncompressed PTEs 424 looking for pages that have not been Reused recently according to the Reused attribute. These pages may become candidates for compression. One embodiment may use multiple levels of re-use, and thus may have a Reused attribute that supports the multiple levels, for example, with multiple flags.
In one embodiment, PTE 424 attributes 430 may include Next Accessed or Previous Accessed attributes, which may be used to indicate whether the next or previous page was accessed immediately after this page the last time that this page was accessed. In one embodiment, PTE 424 attributes 430 may only include the Next Accessed attribute. In one embodiment, the Next Accessed and or Previous Accessed attributes may enable the CMMU 410 to predict the next page to be accessed. In one embodiment, this may used by the CMMU 410 to hide some or aU decompression latency associated with the next page accessed in the event that, the next page accessed is compressed. In one embodiment, the size of the PTT 422 may be based on a desired size of system memory 402. The foUowing is included for exemplary purposes only, and is not intended to be limiting in any way. If a system contains 1GB of physical memory 400 and the CMMU 410 is programmed to manage 4GB of system memory 402 based on a compression ratio of 4:1, 4KB pages and 12-Byte PTEs 424, then the PTT 422 may require 1MB of PTEs 424, which would occupy 12MB of physical memory 400. In one embodiment, PTE 424 attributes 430 may include an attribute that may be used to indicate a particular compression algorithm used on a page. In one embodiment, a system may include a plurality of compression decompression engines (CODECs) that may each implement one of a pluraUty of compression algorithms and its corresponding decompression algorithm. In one embodiment, this attribute, which may be referred to as a CODEC selector attribute, may be set to cause a particular compression algorithm to be used to compress the page, and thus also indicates the corresponding decompression algorithm. Alternatively, two or more alternative compression algorithms may be performed on the data, and one of the alternative compression algorithms may then be selected as the desired compression algorithm for the data. The optimal compression algorithm for the data may be selected, for example, based on compression ratio. In other words, the compression algorithm that yields the highest compression ratio for the data may be selected. Other criteria, or a combination of two or more criteria, may be used to select a compression algorithm from the pluraUty of alternative compression algorithms. For example, the fastest compression algorithm may be selected. When the data needs to be decompressed, the CODEC selector attribute may be used to determine the appropriate decompression algorithm for the data, and the compressed page or pages containing the data may then be routed to one or more CODECs that implement the decompression algorithm for decompression. Page Translation Cache
In one embodiment, a Page Translation Cache (PTC) may be used to cache the most recently and frequently used PTEs 424 from the PTT 422. In this embodiment, the most recently and frequently used PTEs 424 may be accessed from the PTC rather than from the PTT 422, reducing access latency. In one embodiment, the number of PTEs 424 in the PTC may be greater than the product of the number of
Translation Lookaside Buffer (TLB) entries in each processor times the maximum number of processors supported by the system. In one embodiment, the PTC may be fully associative. In a fully associative cache, compares are performed on aU entries in the cache in paraUel. In one embodiment, if the PTC is very large, then a highly set associative cache at least equal to the product of the set associativity of the processor's largest cache times the maximumnumber of processors supported by the system may be used. In one embodiment, the rate at hichPTEs 424 are reloaded into the PTC may be substantially lower than the rate at which processors reload tiieir TLB entries. Thus, the latency added to reload a PTE 424 into the PTC may only occur when the processor has to perform a reload of a TLB entry or handle a page fault.
The following is intended for exemplary purposes only and is not intended to be limiting in any way. In one embodiment, if the PTC caches the most recently used (MRU) 32MB of system memory, then 8K PTEs 424, or 96KBs of SRAM, would be needed based on 4KB pages and 12B PTEs 424.
Uncompressed Page and Compressed Block Free Lists
In one embodiment, physical memory may be partitioned into an arbitrary number of uncompressed pages and compressed blocks. In one embodiment, each PTE 424 may point either to an uncompressed page or to a first compressed block of a compressed page. In one embodiment, a portion (for example, the first four bytes) of a compressed block may point to the next compressed block of the compressed page. In one embodiment, a portion (for example, the second four bytes) of a compressed block may point back to a previous compressed block of the compressed page. This may provide the CMMU 410 with a mechanism to convert contiguous compressed blocks into uncompressed pages when needed. In one embodiment, the CMMU 410 may place unused uncompressed pages on an
Uncompressed Page Free List (UPFL). In one embocliment, as illustrated in Figure 13, the CMMU 410 may place unused compressed blocks on a Compressed Block Free List (CBFL) 440. As uncompressed pages and compressed blocks are needed, they may be pulled off these hsts, if avaUable. In one embocliment, a portion, for example, the first eight bytes, of a page or block may be used to build the free lists. In one embodiment, when a compressed page is decompressed, the compressed blocks may be decompressed and copied to the oldest page pointed to by the UPFL. The compressed blocks may then become the newest blocks on the CBFL 440. In one embocliment, when an uncompressed page is compressed, the uncompressed page may be compressed and copied into the oldest blocks on the CBFL 440. The uncompressed page may then become the newest page on the UPFL. In one embodiment, when an uncompressed page is compressed, the CMMU 410 may check if the CBFL 440 contains enough unused blocks to hold the compressed page. If there are enough unused blocks, then the CMMU 410 may transfer the compressed page into the unused blocks it needs. In one embodiment, if there are not enough unused blocks, then the CMMU 410 may convert an uncompressed page to compressed blocks. The CMMU 410 may convert an unused page from the UPFL, the original uncompressed page being compressed, or alternatively may convert the next LRU uncompressed page. Once the conversion is complete, and a sufficient number of unused compressed blocks are avaUable, the CMMU 410 may complete the compression transfer. Any unused compressed blocks may be added to the CBFL 440.
In one embodiment, when a compressed page is decompressed, the CMMU 410 may check if the UPFL contains at least one unused page to hold the uncompressed page. If there is an unused page, then the CMMU 410 may transfer the decompressed page into it. In one embodiment, if the UPFL is empty, then the CMMU 410 may use the next LRU uncompressed page. In one embodiment, if the UPFL is empty, then the CMMU 410 may convert enough contiguous compressed blocks to create a page. In one embodiment, enough contiguous compressed blocks may not be found in the CBFL 440. In one embodiment, the CMMU 410 may copy the contents of contiguous compressed blocks currently in use by other compressed pages into unused blocks from the CBFL 440. The CMMU 410 may check the CBFL 440 to ensure there are enough unused blocks to hold a page before copying the contiguous compressed blocks.
In one embodiment, if more unused blocks are needed, then the CMMU 410 may compress LRU uncompressed pages until enough unused compressed blocks are avaUable.
In one embodiment, page-to-block and block-to-page conversions may only occur when there are insufficient unused blocks on the CBFL 440, or when the UPFL is empty, respectively. In one embodiment, a kernel driver may be used to tune the CMMU 410 by keeping each of these hsts sufficiently large. The kernel driver may accompHsh this usmg a CMMU API.
Compressed LRU and Uncompressed LRU Lists
In one embodiment, PTEs 424 that point to uncompressed pages may be linked together to form an Uncompressed LRU List (ULRUL). In one embocliment, PTEs 424 that point to compressed pages may be linked together to form a Compressed LRU List (CLRUL) 450 as Ulustrated in Figure 14.
In one embodiment, when PTEs 424 are moved williin a list or to another list, the next and previous pointers associated with the affected PTEs 424 are updated. In one embodiment, to reduce overhead, PTEs 424 may only be moved when accompanied by a compression or decompression operation. In one embodiment, a compression or decompression operation may not accompany an LRU update when a processor or I/O master accesses an uncompressed page that does not happen to be the MRU page in the ULRUL. In one embodiment, every uncompressed page access updates the ULRUL. Alternatively, the PTE 424 may be marked Reused.
In one embodiment, the CMMU 410 may periodicaUy scan the ULRUL starting from the least recently used PTE 424. If the CMMU 410 finds a PTE 424 that is not marked as Reused, the system page address may be added to a Not Reused List (NRL). In one embodiment, the NRL may be a contiguous list of system addresses. In one embodiment, each NRL entry is four bytes. In one embodiment, the NRL is embodied as a hardware component and its length may be fixed. In another embodiment, the NRL is located in physical memory, and its length may be dynamically adjustable or programmable. In one embodiment, if the CMMU 410 finds a PTE 424 that is marked as Reused, the Reused attribute may be cleared. In one embodiment, whenever an uncompressed page needs to be compressed, the CMMU 410 may reference the NRL. When the CMMU 424 begins a new scan, it may overwrite the old NRL. If the NRL is empty, then the LRU uncompressed page on the ULRUL may be used. In one embodiment, once the NRL is fuU, the CMMU 410 may abort the current scan. In one embodiment, the generation and update of the NRL may be a memory controUer background task. In another embodiment, the generation and update may be under driver control. When a processor or I/O master accesses a compressed page, the page may be decompressed and become the MRU uncompressed page on the ULRUL. When replacing an uncompressed page or growing compressed space, the LRU uncompressed page may be compressed and become the MRU compressed page on the CLRUL 450. When shrinking compressed space, die MRU compressed page on the CLRUL 450 may be decompressed and become the LRU uncompressed page on the ULRUL. In one embodiment, when a kernel driver forces an uncompressed page to be compressed, the uncompressed page may be compressed and become a LRU compressed page on the CLRUL 450.
Figure 15 iUustrates a fuUy associative mechanism for managing compressed and uncompressed pages of memory. Using this fuUy associative mechanism, pages that are inactive and genuinely LRU are more likely to be compressed. The fuUy associative mechanism may also help in minimizing the degradation of system performance when compressing/decompressing pages of memory. In one embodiment, compressed and uncompressed pages of memory may be maintained using a fuUy associative page translation cache (PTC). In this embodiment, active pages (compressed and/or uncompressed) may not be where the operating system thinks they are, but instead may be cached by the CMMU in the fully associative PTC.
In die fuUy associative PTC, all compares are done in paraUel. Data from any address may be stored in any PTC location. In one embodiment, the entire address may be used as the tag. AU tags may be compared simultaneously
(associatively) with the requested address, and if one matches then its associated data may be accessed. The fully associative PTC may be used for aU pages in system memory.
An LRU algorithm may be used that spans aU of memory. The fuUy associative algorithm may be able to maintain LRU across the entire congruence class. In one embodiment, there is only one congruence class. . In one embodiment, a linked list, as Ulustrated in Figure 15, may be used to determine what the true associativity is. This list may be a doubly linked Ust. The linked Ust may be partitioned at a dynamic point based on the compressibiUty of the data into an uncompressed page Ust portion and a compressed page Hst portion. Pages within each Ust portion may be ordered from Most Recently Used (MRU) pages to Least Recently Used (LRU) pages. When deciding to change the ratio of compressed pages to uncompressed pages, pages may be switched at the boundary created by the partition (i.e. LRU uncompressed pages may become MRU compressed pages). Thus, overall, the Hst may be used to maintain all pages from MRU to LRU, with the MRU uncompressed pages being the MRU pages and the LRU compressed pages being the LRU pages.
Basic Operations The foUowing describes embodiments of a method of operation of a CMMU 410 as Ulustrated in Figure 10.
When a processor 390 or I/O master 392 accesses system memory, the CMMU 410 may translate the system memory address of the access into a physical address. The CMMU 410 may perform a Page Translation Cache (PTC) lookup. If the PTE 424 is already in the PTC and points to an uncompressed page, then the CMMU 410 may pass the pointer to the uncompressed page to the memory controUer. The memory controUer may use this pointer to directly access physical memory. The PTE 424 may be marked Reused. If the PTE 424 is not already in the PTC, then the CMMU
410 may read the PTE 424 from the PTT 422 located in physical memory. The CMMU 424 may replace the LRU PTE 424 in the PTC to make room for the new PTE 424. In one embodiment, this replacement may occur after the transaction is completed to avoid more CPU and I/O contention during the current transaction. In one embodiment, an address range for uncompressed data may be used that does not require any look-up or translation. If the PTE 424 points to a compressed page, then the CMMU 410 may read the PTE 424 from the PTT 422 located in physical memory into the PTC 412, and may load the pointer to the first compressed block into the DMA channel 414. If necessary, the CMMU 410 may replace the LRU PTE 424 in the PTC 412 to make room for the new PTE 424. The DMA channel 414 may read the appropriate number of linked compressed blocks and copy them into the CODEC 416. The CODEC 416 may decompress the compressed page in real-time. In one embodiment, a paraUel decompression algorithm as described below may be used. The DMA channel 414 may read the uncompressed page from the CODEC 416 and copy it into an unused page pointed to by the Uncompressed Page Free List (UPFL). The compressed blocks pointers may be returned to the Compressed Block Free List (CBFL) 440. The CMMU 410 may update the PTE 424 to point to the uncompressed page. The CMMU 410 may update the CLRUL 450 and ULRUL appropriately. The CMMU 410 may pass the pointer to the uncompressed page to the memory controller. The memory controUer may use this pointer to directly access physical memory.
In one embodiment, the above described method of handling the PTE 424 pointing to a compressed page may only be performed on memory operations that a kernel driver detects as VM requests to activate a stale page. In another embodiment, the above-described method may be performed on all memory operations. In compressing an uncompressed page, the CMMU 410 may perform a PTC lookup. If the PTE 424 is already in the PTC 412, then the CMMU 410 may load the pointer to the uncompressed page into the DMA channel 414. If the PTE 424 is not akeady in the PTC 412, then the CMMU 410 may read the PTE 424 from the PTT 422 in physical memory. In one embodiment, the CMMU 410 may not load the PTE 424 into the PTC 412. The DMA channel 414 may read the uncompressed page from physical memory and load it into the CODEC 416. The CODEC 416 may compress the page in real-time. In one embodiment, a paraUel compression algorithm as described below may be used. The DMA channel 414 may read the compressed page from the CODEC 416 and copy it into an appropriate number of linked compressed blocks from the CBFL 440. The uncompressed page may be returned to the UPFL. The CMMU 410 may update the PTE 424 in physical memory to point to the first compressed block of the compressed page. The CMMU 410 may update the CLRUL 450 and ULRUL as needed.
BIOS
In one embodiment where the operating system is aware of the increased size of system memory, the CMMU 410 may be initialized and enabled by BIOS. In one embodiment where the operating system is not aware of the increased size of system memory, the CMMU 410 may be initialized and enabled during BIOS. In another embodiment where the operating system is not aware of the increased size of system memory, the CMMU 410 may be initialized and enabled after the operating system has booted.
In one embodiment where BIOS initializes and enables the CMMU 410 before the operating system is booted, after BIOS has tested physical memory, BIOS may reserve a portion of physical memory for PTT 422 use. In one embodiment, BIOS may initialize the PTT 422 so that aU PTEs 424 are marked Enabled and InvaHd. BIOS may partition a portion of physical memory into compressed blocks and uncompressed pages. BIOS may link unused compressed blocks together to create a CBFL 440. BIOS may link unused uncompressed pages together to create die UPFL. BIOS may initialize and enable the CMMU 410. Initializing the CMMU 410 may include programming a maximum size of system memory and a maximum compression ratio. In one embodiment, once enabled, the PTEs 424 may become VaUd naturaUy over time as a processor 390 or I/O master 392 accesses system memory. In one embodiment, once enabled, the PTT 422, CBFL 440 and UPFL may be transparent to a processor 390 or I/O master 392.
In one embodiment, BIOS may prevent certain system memory pages from being compressed, such as critical operating system resources. For example, BIOS may mark the PTEs 424 associated with critical pages in the PTT 422 as not Enabled.
Kernel Driver
In one embocliment where the operating system is aware of the increased size of system memory, a kernel driver may be used to ensure that the operating system may safely use the entire system memory space without overflowing physical memory. In one embodiment, the kernel driver may accompHsh this by ensuring that a minimum average compression ratio across the entire system memory space is maintained.
In one embodiment, the CMMU 410 may include registers that indicate the number of compressed blocks and uncompressed pages that are currently in use. A kernel driver may use this information to determine the effective size of system memory. In one embodiment, if the average compression ratio drops below a programmable threshold, then a kernel driver may respond by: 1) aUocating system memory pages from the operating system 2) filling these memory pages with a highly compressible data code to force all processors to flush their caches associated with these pages, and 3) forcing the CMMU 410 to mark these pages as highly compressible so that no compressed blocks are wasted. In one embodiment, the kernel driver does not actually use these pages. The kernel driver may do this to control the average compression ratio of system memory. When the average compression ratio rises above a programmable threshold, then the kernel driver may deallocate these system memory pages back to the operating system.
In one embodiment where the operating system is aware of the increased size of system memory, in order for a kernel driver to access system memory beyond the amount of which the operating system is aware, the kernel driver may create its own processor PTEs 424. The kernel driver may use this space to selectively compress system memory pages into a compressed cache. The compressed cache may grow into the system memory space of which the operating system is not aware. As a result, the kernel driver may not compete with or aUocate system memory away from the operating system. This may eliminate the need for a kernel driver to guarantee a minimum compression ratio. Performance-sensitive applications that either aUocate non-paged system memory or are self-tuning based on the amount of system memory avaUable thus may not be affected. In one embodiment, the size of the compressed cache may be dynamic and may vary based on the compressibUity of system memory. In one embodiment, the compressed cache may grow as large as the maximum size of system memory minus the actual size of physical memory.
In one embodiment, when a kernel driver wants to compress a system memory page into a compressed cache that is not accessible by the operating system, the kernel driver may force the page to be conditionally compressed by initiating a special CMMU 410 operation. In one embodiment, if a minimum compression ratio specified in the Command Block is not achieved by the CODEC 416, then the CMMU 410 does not copy the compressed page into the compressed cache.
In one embodiment, using a compressed cache that is not accessible by the operating system may aUow a kernel driver to employ software caching algorithms without burdening the hardware to selectively choose which pages to aUocate or deallocate from a compressed cache. In one embodiment, using a compressed cache that is not accessible by the operating system may allow a kernel driver to manage the dynamic size of the compressed cache. In one embodiment, compressed caches managed by one or more kernel drivers may be used for various functions including local and remote disk caching, virtual memory caching, network caching, RAM disks, etc.
In one embocliment where BIOS does not enable the CMMU 410, the kernel driver may initialize and enable the CMMU 410. In this embocliment, the kernel driver may aUocate a small portion of system memory for PTT 422 use. In one embodiment, the kernel driver may initialize the PTT 422 so that aU PTEs 424 are marked Enabled and
Invalid. The kernel driver may allocate a small portion of system memory and partition it into compressed blocks and uncompressed pages. The kernel driver may link the unused compressed blocks together to create the CBFL 440, and the unused uncompressed pages together to create the UPFL. The kernel driver may initialize and enable the CMMU 410. In one embodiment, imtializing the CMMU 410 may include programming a maximum size of system memory and a maximum compression ratio. In one embodiment, once enabled, the PTEs 424 may become vahd naturaUy over time as a processor 390 or I/O master 392 accesses system memory. In one embodiment, once enabled, the PTT 422, CBFL 440 and UPFL may be transparent to a processor 390 or I/O master 392.
In one embodiment, a kernel driver may prevent certain system memory pages from being compressed, such as critical operating system resources. For example, the kernel driver may mark the PTEs 424 associated with critical pages in the PTT 422 as not Enabled.
CMMU API
In one embodiment, in addition to managing and handling accesses to the uncompressed and compressed pages in system memory, the CMMU 410 may have an AppUcation Programming Interface (API) that enables a kernel driver to initiate various CMMU 410 operations.
In one embodiment, when a kernel driver wants to initiate a CMMU 410 operation, it may set up a Command Block in system memory and write the system address of the Command Block into the appropriate CMMU 410 register. When the CMMU 410 is not busy, it may read the Command Block and perform the operation. When the operation is complete, the CMMU 410 may update the Status of the Command Block. In one embodiment, the CMMU 410 performs one operation at a time. In one embodiment, the kernel driver may manage the serialization of operations to the CMMU 410. The kernel driver may poU the Status of the Command Block to determine when the operation is complete. In one embodiment, the Command Block may reside in coherent system memory so that the kernel driver may cache the Status of the Command Block in the processor. The processor may come back out on the host bus when the CMMU 410 updates the Status of the Command Block, causing the corresponding cache line to be invalidated in the processor's cache.
Examples of CMMU 410 operations that may be initiated by a kernel driver include, but are not limited to operations to: 1) force a specific or LRU/MRU system memory page to be compressed/decompressed, 2) change the PTE 424 attributes of a system memory page, 3) compress/decompress and copy a system memory page to another system memory page location, 4) copy a compressed page "as is" to an uncompressed page without decompressing the page, 5) copy an uncompressed page "as is" to a compressed page without compressing the page, and 6) convert contiguous compressed blocks into an unused uncompressed page.
Scatter/Gather DMA Channel
In one embodiment, scatter/gather DMA channel 414 may not need to be coherent during compressed block transfers, since these transfers may be transparent to a processor 390 or I/O master 392. However, the uncompressed page transfers may need to be coherent in order to force a processor to flush any cache lines associated with the transfer.
If a processor 390 or I/O master 392 accesses the system memory page whUe it is being compressed, then die CMMU
410 may abort the compression operation. In one embocliment, there may be a plurality of scatter/gather DMA channels
414. In one embodiment, if the CMMU 410 decompresses a system memory page that is marked Zeros, then the scatter/gather DMA channel 414 may fill the uncompressed page with a data pattern, e.g. aU zeros.
In one embodiment, the scatter/gather DMA channel 414 may utilize a CODEC 416 that is integrated into the system memory controller 420 to compress or decompress a page using a single memory-to-memory DMA transfer.
Alternatively, the DMA channel 414 may utilize one or more CODECs 416 that reside elsewhere, for example, on one or more memory modules such as industry standard DIMMs, to compress or decompress a page using a memory-to-
CODEC and a CODEC-to-memory DMA transfer.
In one embodiment, if the memory controUer 420 executes processor 390 and I/O master 392 system memory accesses "in order", then the memory controUer 420 may stall aU subsequent system memory accesses if the current access is to a compressed page that has to be decompressed before it can be accessed. In one embodiment, the memory controUer may return a Deferred response for those system memory accesses that miss the PTC and thus require additional physical memory accesses.
Compression/Decompression Engine
In one embodiment, the Compression/Decompression Engine (CODEC) 416 may be optimized to perform page-based compressions and decompressions. If a system memory page is uncompressible, then the CMMU keeps the page uncompressed. The CMMU 410 may mark the system memory page's PTE 424 as Uncompressible. When the system memory page is modified by a processor 390 or I/O master 392, the CMMU 410 may mark the page not
Uncompressible (i.e. Compressible).
In one embodiment, a DMA-based CODEC 416 is unlikely to fuUy utilize the physical memory bus bandwidth avaUable, and thus multiple DMA-based CODECs 416 may be included. In one embodiment, there may be a DMA- based CODEC 416 for each processor in the system.
ParaUel compression decompression engine
In one embodiment, the CODEC 416 may be a parallel data compression and decompression engine, designed for the reduction of data bandwidth and storage requirements and for compressing / decompressing data at a high rate.
The parallel compression/decompression engine may alternatively be included in any of various devices, including a memory controller; memory modules; a processor or CPU; peripheral devices, such as a network interface card, modem, JDSN terminal adapter, ATM adapter, etc.; and network devices, such as routers, hubs, switches, bridges, etc., among others. In the present embodiment, the paraUel compression and decompression engine may be included on a CMMU as described above. In embodiments where the paraUel compression and decompression engine is included on another device, the CMMU may interface with the engine on the device to perform compression and decompression operations on memory transfers as needed. In one embodiment, the system may include a plurality of paraUel data compression and decompression engines.
Data transfers initiated by the CMMU on the system may be in either of two formats: compressed or normal (non-compressed). In one embodiment, the CMMU includes paraUel compression and decompression engines designed to process stream data at more than a single byte or symbol (character) at one time. These paraUel compression and decompression engines modify a single stream dictionary based (or history table based) data compression method, such as that described by Lempel and Ziv, to provide a scalable, high bandwidth compression and decompression operation. The parallel compression method examines a plurality of symbols in parallel, thus providing greatly increased compression performance.
Parallel Compression
The parallel data compression engine and method included on one embodiment of the CMMU operate to perform parallel compression of data. In one embodiment, the paraUel compression method first involves receiving uncompressed data, wherein the uncompressed data comprises a plurality of symbols. The method also may maintain a history table comprising entries, wherein each entry comprises at least one symbol. The method may operate to compare a pluraUty of symbols with entries in the history table in a paraUel fashion, wherein this comparison produces compare results. The method may then determine match information for each of the plurality of symbols based on the compare results. The step of deteπriinrng match information may involve determining zero or more matches of the plurahty of symbols with each entry in the history table. The method then outputs compressed data in response to the match information.
In one embodiment, the method maintains a current count of prior matches that occurred when previous symbols were compared with entries in the history table. The method may also maintain a count flag for each entry in the history table. In this embodiment, the match information is determined for each of the plurality of symbols based on the current count, the count flags and the compare results.
The step of determining match information may involve detemiining a contiguous match based on the current count and the compare results, as weU as deterrriining if the contiguous match has stopped matching. If the contiguous match has stopped matching, then the method updates the current count according to the compare results, and compressed data is output corresponding to the contiguous match. The step of deterrnining match i-nformation may also include resetting the count and count flags if the compare results indicate a contiguous match did not match one of the plurality of symbols. The count and count flags for all entries may be reset based on the number of the plurahty of symbols that did not match in the contiguous match.
For a contiguous match, the output compressed data may comprise a count value and an entry pointer. The entry pointer points to the entry in the history table that produced the contiguous match, and the count value indicates a number of matching symbols in the contiguous match. The count value may be output as an encoded value, wherein more often occurring counts are encoded with fewer bits than less often occurring counts. For non-matching symbols that do not match any entry in the history table, the non-matching symbols may be output as the compressed data.
The above steps may be repeated one or more times until no more data is available. When no more data is available, compressed data may be output for any remaining match in the history table. The paraUel data compression engine may be used to perform paraUel compression, operating on a pluraUty of symbols at a time. In one embodiment, the paraUel compression method accounts for symbol matches comprised entirely within a given plurahty of symbols, referred to as the "special case". Here presume that the plurahty of symbols includes a first symbol, a last symbol, and one or more middle symbols. The step of determining match information includes detecting if at least one contiguous match occurs with one or more respective contiguous middle symbols, and the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols. If this condition is detected, then the method selects the one or more largest non-overlapping contiguous matches involving the middle symbols. In this instance, compressed data is output for each of the selected matches involving the middle symbols.
The compression circuit of the paraUel data compression engine may include an input for receiving uncompressed data, a history table, a plurahty of comparators, a memory, match information logic, and an output for outputting compressed data. The input receives uncompressed data that comprises a plurahty of symbols. The history table comprises a plurality of entries, wherein each entry comprises at least one symbol. The plurahty of comparators are coupled to the history table and operate to compare a plurahty of symbols with each entry in the history table in a paraUel fashion, wherein the plurahty of comparators produce compare results. The memory maintains a current count of prior matches that occurred when previous symbols were compared with entries in the history table. The memory may also maintain a count flag or value for each entry in the history table. The match information logic is coupled to the plurality of comparators and the memory and operates to determine match information for each of the plurahty of symbols based on the current count, count flags and the compare results. The output is coupled to die match information logic for outputting compressed data in response to the match information. For more information on the paraUel compression operation, please see U.S. patent application Serial No.
09/421,968 titled "System and Method for Perfoπning Scalable Embedded ParaUel Data Compression", which was incorporated by reference above.
Parallel Decompression The parallel decompression engine and method implemented on a CMMU operate to decompress input compressed data in one or more decompression cycles, with a plurality of codes (tokens) typicaUy being decompressed in each cycle in paraUel. A parallel decompression engine may include an input for receiving compressed data, a history table (also referred to as a history window), and a plurahty of decoders for examining and decoding a plurality of codes (tokens) from the compressed data in parallel in a series of decompression cycles. A code or token may represent one or more compressed symbols or one uncompressed symbol. The paraUel decompression engine may also include preliminary select generation logic for generating a plurality of preliminary selects in paraUel. A preliminary select may point to an uncompressed symbol in the history window, an uncompressed symbol from a token in the current decompression cycle, or a symbol being decompressed in the current decompression cycle. The paraUel decompression engine may also include final select generation logic for resolving preliminary selects and generating a plurality of final selects in parallel. Each of the plurahty of final selects points either to an uncompressed symbol in the history window or to an uncompressed symbol from a token in the current decompression cycle. The paraUel decompression engine may also include uncompressed data output logic for generating the uncompressed data from the uncompressed symbols pointed to by the plurahty of final selects, and for storing the symbols decompressed in this cycle in the history window. The decompression engine may also include an output for outputting the uncompressed data produced in the decompression cycles.
The decompression engine may be divided into a series of stages. The decoders may be included in a first stage. The preliminary select generation logic may be included in a second stage. The final select generation logic may be included in a third stage. The output logic may be included in a fourth stage. Decompression of compressed data may begin in the decompression engine when the decompression engine receives a compressed input stream. The compressed input stream may then be decompressed in parallel in one or more decode (or decompression) cycles, resulting in a decompressed output stream.
In a decompression cycle, a plurality of tokens from the compressed data stream may be selected for the decompression cycle and loaded in the decompression engine, where N is the total number of decoders. The tokens may be selected continuously beginning with the first token in the input data stream. A section may be extracted from the compressed data stream to serve as input data for a decompression cycle, and the tokens may be extracted from the extracted section. For example, a section of four bytes (32 bits) may be extracted. A token may be selected from an input section of the input data stream for the decompression cycle if there is a decoder avaUable, and if a complete token is included in the remaining bits of the input section. If any of the above conditions fails, then the decompression cycle continues, and the token that faded one of the conditions is the first token to be loaded in the next decompression cycle.
As the tokens for the decompression cycle are selected, the tokens are passed to the decoders for decoding. One decoder may process one token in a decompression cycle. The decoders may decode the input tokens into start counts, indexes, index vahd flags, and data valid flags, with one copy of each from each decoder being passed to the next stage for each of the output bytes to be generated in the decompression cycle. The original input data bytes are passed from the decoders for later possible selection as output data. A data byte is valid only if the token being decoded on the decoder represents a byte that was stored in the token in uncompressed format by the compression engine that created the compressed data. In this case, the uncompressed byte is passed in the data byte for the decoder, the data byte vahd bit for the decoder is set, and the index vaUd bit for the decoder is cleared. Next, the information generated by the decoders is used to generate preliminary selects for the output bytes.
Overflow bits are also generated for each preliminary select. The preliminary selects and overflow bits are passed to the next stage, where the overflow bits are inspected for each of the preliminary selects. If the overflow bit of a preliminary select is not set, then the contents of the preUminary select point to one of the entries in the history window if the index valid bit is set for the output byte, or to one of the data bytes if the data byte vahd bit is set for the output byte. Prehminary selects whose overflow bits are not set are passed as final selects widiout modification. If the overflow bit is set, then the contents of the preliminary select are examined to determine which of the other preliminary selects is generating the data this prehminary select refers to. The contents of the correct preliminary select are then repUcated on this preliminary select, and the modified preliminary select is passed as a final select.
The final selects are used to extract the uncompressed symbols. The final selects may point either to symbols in the history window or to data bytes passed from the decoders. The uncompressed symbols are extracted and added to the uncompressed output symbols. A data vahd flag may be used for each of the output data symbols to signal if this output symbol is valid in this decompression cycle. The uncompressed output data may then be appended to the output data stream and written into the history window.
For more information on the parallel decompression operation, please see U.S. patent appUcation Serial No. 09/491,343 titled "System and Method for Performing Scalable Embedded ParaUel Data Decompression", which was incorporated by reference above.
Although the system and method of the present invention has been described in connection with the preferred embodiment, it is not intended to be limited to the specific form set forth herein, but on the contrary, it is intended to cover such alternatives, modifications, and equivalents, as can be reasonably included within the spirit and scope of the invention as defined by the appended claims.

Claims

What is claimed is:
1. A method for managing compression of pages of memory in a system comprising physical memory, wherein the physical memory comprises system memory, the method comprising: receiving a system memory access; locating a page translation entry for tiie system memory access in a page translation table; determining if a page in the physical memory and referenced by the page translation entry is compressed or uncompressed; if said determining indicates the page is compressed: decompressing the compressed page to produce a decompressed page; writing the decompressed page to the physical memory; and providing a first physical memory address of the decompressed page in the physical memory to fulfill the system memory access.
2. The method of claim 1, further comprising: if said determining indicates the page is uncompressed, providing a second physical memory address as indicated by the page translation entry to fulfill the system memory access.
3. The method of claim 1 , further comprising: if said determining indicates the page is uncompressed: deteπnining if the uncompressed page is to be compressed; if said determining indicates the page is to be compressed: compressing the uncompressed page to produce a compressed page; and writing the compressed page to the physical memory.
4. The method of claim 3, wherein said compressing the uncompressed page comprises: providing the uncompressed page to a compression engine; and die compression engine compressing the page to produce the compressed page.
5. The method of claim 4, wherein said providing the page to the compression engine comprises: a Direct Memory Access (DMA) channel reading the uncompressed page from the physical memory; and the DMA channel writing the uncompressed page to the compression engine.
6. The method of claim 4, wherein said writing the compressed page to the physical memory comprises: a Direct Memory Access (DMA) channel reading the compressed page from the compression engine; and the DMA channel copying the compressed page into one or more linked compressed blocks in the physical memory.
7. The method of claim 6, further comprising locating the one or more linked compressed blocks for storing die compressed page in a hst of available compressed blocks for storing compressed pages.
8. The method of claim 4, wherein said providing the page to the compression engine comprises: a pluraUty of Direct Memory Access (DMA) channels reading the uncompressed page from the physical memory; and the pluraUty of DMA channels writing the uncompressed page to the compression engine.
9. The method of claim 4, wherein said writing the compressed page to the physical memory comprises: a pluraUty of Direct Memory Access (DMA) channels reading the compressed page from die compression engine; and the plurahty of DMA channels copying the compressed page into one or more linked compressed blocks in the physical memory.
10. The method of claim 3, wherein said compressing the uncompressed page comprises: providing a different portion of the uncompressed page to each of a pluraUty of compression engines; and the pluraUty of compression engines compressing the provided uncompressed portions of the page to produce compressed portions of the page.
11. The method of claim 10, wherein each of the plurahty of compression engines implements a data compression algorithm, wherein the data compression algorithm is substantially the same for each of the plurality of compression engines.
12. The method of claim 10, wherein the plurality of compression engines compresses the uncompressed portions of the compressed page in paraUel.
13. The method of claim 10, further comprising combining the compressed portions of the page to produce the compressed page.
14. The method of claim 3, wherein said compressing the uncompressed page comprises: providing the uncompressed page to a plurality of compression engines, wherein each of the plurahty of compression engines implements a different compression algorithm; the plurahty of compression engines each compressing the uncompressed page using the compression algorithm implemented by the particular compression engine to produce a plurality of compressed pages compressed by different compression algorithms; selecting the compressed page from the plurality of compressed pages, wherein the selected compressed page has the highest compression ratio of the plurality of compressed pages.
15. The method of claim 14, further comprising marking the page translation entry associated with die selected compressed page to indicate die particular compression algorithm used in said compressing the page.
16. The method of claim 14, wherein the plurahty of compression engines compresses the page in paraUel.
17. The method of claim 1, wherein one or more recently used page translation entries from the page translation table are cached in a page translation cache, and wherein said locating a page translation entry comprises: searching for the page translation entry associated with die system memory address in the page translation cache; wherein, if said searching locates the page translation entry in the page translation cache, the page translation entry from the page translation cache is used in said determining if the page is compressed or uncompressed.
18. The method of claim 17, wherein, if the page translation entry is not located in the page translation cache, the method further comprises searching for the page translation entry in the page translation table; wherein, if said searching locates the page translation entry in the page translation table, the page translation entry from the page translation table is used in said determining if the page is compressed or uncompressed.
19. The method of claim 18, further comprising caching the page translation entry located in the page translation table to the page translation cache as a recently used page translation entry.
20. The method of claim 17, wherein the page franslation cache comprises a plurality of page translation entries, and wherein the page franslation cache is fully associative.
21. The method of claim 20, wherein said searching for the page translation entry associated with the system memory address in the page translation cache comprises comparing the system memory address with all page translation entries in the page franslation cache in parallel.
22. The method of claim 1, wherein said decompressing the page comprises: providing the page to a decompression engine; and the decompression engine decompressing the page to produce the decompressed page.
23. The method of claim 22, further comprising, if said deteimining indicates the page is compressed: prior to said providing the page to a decompression engine: examining the page translation entry to determine a compression algorithm used to compress the page; and selecting the decompression engine from a plurahty of decompression engines, wherein the decompression engine is configured to decompress data compressed using the determined compression algorithm
24. The method of claim 22, wherein the decompression engine is a paraUel decompression engine, wherein, in said decompressing the compressed page, the paraUel decompression engine decompresses portions of the page in paraUel.
25. The method of claim 22, wherein the page comprises one or more compressed blocks, and wherein said providing the page to the decompression engine comprises: a Direct Memory Access (DMA) channel reading the one or more compressed blocks; and the DMA channel copying the one or more compressed blocks to the decompression engine.
26. The method of claim 25, wherein the DMA channel reading the one or more compressed blocks comprises: loading a physical memory address of a first compressed block into the DMA channel; reading the first compressed block into the DMA channel; and reading one or more subsequent compressed blocks linked to the first compressed block into the DMA channel.
27. The method of claim 25, wherein said writing the decompressed page to the physical memory is performed by the DMA channel, and wherein said writing the decompressed page to the physical memory comprises the DMA channel reading the uncompressed page from the decompression engine.
28. The method of claim 22, wherein the page comprises one or more compressed blocks, and wherein said providing the page to the decompression engine comprises: a plurality of Direct Memory Access (DMA) channels reading the one or more compressed blocks; and the plurality of DMA channels copying the one or more compressed blocks to the decompression engine.
29. The method of claim 1, further comprising: providing a different portion of the compressed page to each of a pluraUty of decompression engines; and each of the plurality of decompression engines decompressing the portion of the compressed page provided to the particular decompression engine.
30. The method of claim 29, wherein each of the plurality of decompression engines implements a data decompression algorithm, wherein the data decompression algorithm is substantially the same for each of the plurality of decompression engines.
31. The method of claim 29, wherein the plurality of decompression engines decompresses the portions of the compressed page in paraUel.
32. The method of claim 29, further comprising combining the decompressed portions of the page to produce the decompressed page.
33. The method of claim 1, wherein said writing the decompressed page to the physical memory comprises: locating a currently unused page in the physical memory in a hst of currenfly unused pages for receiving uncompressed pages; and writing the decompressed page as an uncompressed page to the located currently unused page.
34. The method of claim 1, wherein the compression of pages of the memory in die system is operable to increase the effective size of the system memory by keeping least recently used data as compressed data in the physical memory and most recently and frequently used data as uncompressed data in the physical memory.
35. The method of claim 34, wherein the system further comprises an operating system, wherein the operating system is aware of the increased effective size of the system memory.
36. The method of claim 34, wherein the system further comprises an operating system, wherein the operating system is not aware of die increased effective size of the system memory.
37. The method of claim 34, wherein the system further comprises an operating system, wherein the operating system is aware of the increased effective size of a first portion of the system memory, and wherein the operating system is not aware of die increased effective size of a second portion of the system memory.
38. The method of claim 1, wherein said decompressing the compressed page to produce the decompressed page comprises: examining the page translation entry to determine if the page franslation entry indicates the page is highly compressed, wherein, during compression of the page to generate the highly compressed page, the physical memory occupied by the page is freed for use by one or more processes executing within the system; and if said examining determines the page is highly compressed: allocating a portion of the physical memory for the page; and writing data stored prior to said compressing the page to the page.
39. The method of claim 38, wherein the page franslation entry includes a highly compressed attribute field, wherein the highly compressed attribute field indicates if the page is highly compressed, wherein said exairrining the page franslation entry to determine if the page is highly compressed comprises exairiining die highly compressed attribute field.
40. The method of claim 39, wherein the highly compressed attribute field is a one-bit field.
41. A method for managing compression of pages of memory in a system comprising an operating system and physical memory, wherein the physical memory comprises system memory, the method comprising: locating a page translation entry in a page translation table, wherein the page translation entry references an uncompressed page in the physical memory; determining if the uncompressed page is to be compressed; if said determining indicates the page is to be compressed: compressing the uncompressed page to produce a compressed page; and writing the compressed page to the physical memory. wherein the compression of pages of the memory in the system is operable to increase the effective size of the system memory by keeping least recently used data as compressed data in the physical memory and most recently and frequently used data as uncompressed data in the physical memory; and wherein the operating system is not aware of the increased effective size of the system memory.
42. The method of claim 41, wherein said compressing the uncompressed page comprises: providing the uncompressed page to a compression engine; and the compression engine compressing the page to produce the compressed page.
43. The method of claim 42, wherein said providing the page to the compression engine comprises: one or more Direct Memory Access (DMA) channels reading the uncompressed page from the physical memory; and the one or more DMA channels writing the uncompressed page to the compression engine.
44. The method of claim 42, wherein said writing the compressed page to the physical memory comprises: one or more Direct Memory Access (DMA) channels reading the compressed page from the compression engine; and the one or more DMA channels copying the compressed page into one or more linked compressed blocks in die physical memory.
45. The method of claim 44, further comprising locating the one or more linked compressed blocks for storing the compressed page in a Ust of avaUable compressed blocks for storing compressed pages.
46. The method of claim 41, wherein said compressing the uncompressed page comprises: providing a different portion of the uncompressed page to each of a plurality of compression engines; and the pluraUty of compression engines each compressing the portion of the page which the particular compression engine was provided; and combining the compressed portions of the page to produce die compressed page.
47. The method of claim 46, wherein the plurahty of compression engines compress the portions of the compressed page in paraUel.
48. The method of claim 41, wherein said compressing the uncompressed page comprises: providing the uncompressed page to a pluraUty of compression engines, wherein each of the plurality of compression engines implements a different compression algorithm; the plurahty of compression engines each compressing the uncompressed page using the compression algorithm implemented by the particular compression engine to produce a plurahty of compressed pages each compressed by a different compression algorithm; selecting the compressed page from the plurahty of compressed pages, wherein the selected compressed page has the highest compression ratio of the plurality of compressed pages.
49. The method of claim 48, further comprising marking the page franslation entry associated with the compressed page to indicate the particular compression algoritiim used in said compressing the page.
50. A method for compressing memory in a system comprising a plurality of compression engines and a physical memory, wherein the physical memory comprises system memory, the method comprising: locating a page translation entry in a page translation table, wherein the page translation entry references an uncompressed page in the physical memory; providing the referenced uncompressed page to the pluraUty of compression engines, wherein each of the plurahty of compression engines implements a different compression algorithm; the plurality of compression engines each compressing the uncompressed page using the compression algorithm implemented by the particular compression engine to produce a pluraUty of compressed pages each compressed by a different compression algorithm; selecting the compressed page with the highest compression ratio of the plurality of compressed pages; and writing the selected compressed page to the physical memory.
51. The method of claim 50, further comprising marking the page franslation entry associated with the selected compressed page to indicate the particular compression algorithm used in said compressing the page.
52. The method of claim 50, further comprising: determining that the compressed page needs to be decompressed: examining the page translation entry to determine the particular compression algorithm used to compress the page; selecting a decompression engine from a plurality of decompression engines, wherein the selected decompression engine implements a decompression algorithm for decompressing data compressed using the particular compression algorithm; providing the page to the selected decompression engine; and the selected decompression engine decompressing the page using the decompression algorithm to produce the decompressed page.
53. The method of claim 50, wherein the compression of pages of the memory in the system is operable to increase the effective size of the system memory by keeping least recently used data as compressed data in the physical memory and most recently and frequently used data as uncompressed data in the physical memory.
54. The method of claim 53, wherein the system further comprises an operating system, wherein the operating system is not aware of the increased effective size of the system memory.
55. A method comprising: determining a compression ratio for system memory in a system comprising physical memory, wherein the physical memory comprises the system memory; determining if the compression ratio is below a compression ratio threshold; if the compression ratio is below the compression ratio threshold: locating a page translation entry in a page translation table referencing an uncompressed page in the system memory to be highly compressed; setting a highly compressed attribute in the page translation entry to indicate that the page is highly compressed; and freeing a first portion of the physical memory aUocated to the page in the system memory; wherein highly compressing the page of the memory in the system is operable to increase the compression ratio for the system memory.
56. The method of claim 55, wherein the highly compressed attribute is a one-bit field in die page translation entry.
57. The method of claim 55, further comprising: receiving a system memory access for the page, wherein the system memory access requires that the page be uncompressed; locating the page translation entry in the page translation table referencing die page; determining that the page is highly compressed; and aUocating a second portion of the physical memory for the page.
58. The method of claim 57, further comprising fiUing the page with zeros after said aUocating.
59. The method of claim 57, further comprising, after said aUocating: reading data from non-volatile storage; and writing the data to die page.
60. The method of claim 55, further comprising, prior to said freeing the physical memory allocated to the page: deterrruning if the page is dirty; and if the page is dirty, writing data from the page to non-volatile storage to make die page clean.
61. A system comprising: one or more processors ; a physical memory comprising a system memory; a system memory controUer; and a compressed memory management unit (CMMU), configured to: receive from a first processor of the one or more processors a system memory access comprising a system memory address; translate the system memory address into a first physical memory address; cause the decompression of the compressed data at the first physical memory address in the physical memory; write the decompressed data to a second physical memory address; and pass the second physical memory address to the system memory controUer; wherein the system memory controller is configured to fulfill the system memory access from the decompressed data at the second physical memory address; and wherein the CMMU is operable to increase the effective size of the system memory by keeping least recently used data as compressed data in the physical memory and most recently and frequently used data as uncompressed data in the physical memory.
62. The system of claim 61 , wherein the system further comprises program instructions executable within the system to implement an operating system, wherein the operating system is aware of the increased effective size of the system memory.
63. The system of claim 61 , wherein the system further comprises program instructions executable within the system to implement an operating system, wherein the operating system is not aware of the increased effective size of the system memory.
64. The system of claim 61, wherein the system further comprises program instructions executable within the system to implement an operating system, wherein the operating system is aware of the increased effective size of a first portion of the system memory, and wherein the operating system is not aware of the increased effective size of a second portion of the system memory.
65. The system of claim 61 , wherein the CMMU comprises : a page translation cache configured to cache page translation entries; and one or more scatter/gather Direct Memory Access (DMA) channels configured for transferring data from the CMMU to one or more destinations and for receiving data on the CMMU from one or more sources.
66. The system of claim 61, wherein the CMMU further comprises a compression/decompression engine configured to compress uncompressed data and to decompress compressed data under control of the CMMU.
67. The system of claim 61 , further comprising: a page translation table comprising one or more page translation entries; wherein, in said translating the system memory address into a first physical memory address, the CMMU is further configured to: locate a page translation entry for the system memory address in the page translation table; and determine the first physical memory address from the page franslation entry for the system memory address.
68. The system of claim 67, wherein the CMMU further comprises: a page translation cache comprising one or more cached page translation entries from the page franslation table; wherein, in said locating a page franslation entry, the CMMU is further configured to search for the page translation entry associated with the system memory address in the page translation cache; wherein, if said searching the page translation cache locates the page translation entry in the page franslation cache, the page translation entry from the page translation cache is used in said deterrnining the first physical memory address.
69. The system of claim 68, wherein, if said searching the page translation cache does not locate the page translation entry in the page franslation cache, the CMMU is further configured to: search for the page translation entry in the page translation table; wherein, if said searching the page translation table locates the page translation entry in the page translation table, the page franslation entry from the page franslation table is used in said determining the first physical memory address.
70. The system of claim 69, wherein the CMMU is further configured to cache die page translation entry located in the page translation table to the page translation cache as a recently used page translation entry.
71. The system of claim 68, wherein the page translation cache is fully associative.
72. The system of claim 71, wherein, in said searching for the page translation entry associated with the system memory address in the page franslation cache, the CMMU is further configured to compare the system memory address with aU page translation entries in the page translation cache in parallel.
73. The system of claim 61, wherein the system further comprises: a compression decompression engine; wherein, in said causing the decompression of the compressed data, the CMMU is further configured to write the compressed data to the compression/decompression engine; and wherein the compression/decompression engine is configured to decompress the compressed data to produce the decompressed data.
74. The system of claim 73, wherein the CMMU further comprises: one or more Direct Memory Access (DMA) channels; wherein the compressed data comprises one or more compressed blocks, and wherein, in said writing the compressed data to the compression/decompression engine, the one or more DMA channels are configured to: read the one or more compressed blocks; and copy the one or more compressed blocks to the compression/decompression engine.
75. The system of claim 74, wherein the CMMU is further configured to : load a physical memory address of a first compressed block into the one or more DMA channels; and wherein in reading the one or more compressed blocks, the one or more DMA channels are further configured to read the first compressed block and one or more subsequent compressed blocks linked to the first compressed block.
76. The system of claim 74, wherein said writing the decompressed data to the second physical memory address is performed by the one or more DMA channels, and wherein, in said writing the decompressed data to the second physical memory address, the one or more DMA channels are further configured to read the decompressed data from the compression/decompression engine.
77. The system of claim 61, wherein the system further comprises a plurahty of compression/decompression engines, wherein at least two of the plurahty of compression/decompression engines implement different compression/decompression algorithms, and wherein the CMMU is further configured to: prior to said writing the compressed data to the compression/decompression engine: deteπnine a particular compression algorithm used to compress the compressed data; and select the compression/decompression engine from the plurality of compression/decompression engines, wherein the selected compression/decompression engine is configured to decompress data compressed using the particular compression algorith
78. The system of claim 61, wherem me system further comprises: a compression/decompression engine configured to decompress compressed data under control of the CMMU.
79. The system of claim 78, wherein the compression/decompression engine is a parallel compression/decompression engine configured to perform parallel data decompression under control of the CMMU.
80. The system of claim 78, wherein the compression/decompression engine is comprised in the CMMU.
81. The system of claim 61, wherein die CMMU is comprised in one of the one or more processors.
82. The system of claim 81, wherein at least one of the one or more processors further comprises a compression/decompression engine configured to decompress compressed data under control of the CMMU.
83. The system of claim 81, wherein the system memory controller comprises a compression/decompression engine configured to decompress compressed data under control of the CMMU.
84. The system of claim 81, wherein the physical memory comprises one or more memory modules, and wherein at least one of the one or more memory modules comprises a compression/decompression engine configured to decompress compressed data under control of the CMMU.
85. The system of claim 61, wherein the CMMU is comprised in die system memory controUer.
86. The system of claim 85, wherein the system memory controUer further comprises a compression/decompression engine configured to decompress compressed data under control of the CMMU.
87. The system of claim 85, wherein the physical memory comprises one or more memory modules, and wherein at least one of the one or more memory modules comprises a compression decompression engine configured to decompress compressed data under control of the CMMU.
88. The system of claim 61, wherein the physical memory comprises one or more memory modules, wherein the CMMU is coupled to the system memory controller and the one or more memory modules.
89. The system of claim 88, wherein at least one of the one or more memory modules comprises a compression/decompression engine configured to decompress compressed data under control of the CMMU.
90. The system of claim 61 , wherein the system further comprises : a pluraUty of compression/decompression engines; wherein, in said causing the decompression of the compressed data, the CMMU is further configured to write a different portion of the compressed data to each of the pluraUty of compression/decompression engines; wherein the plurahty of compression/decompression engines are configured to decompress the portions of the compressed data to produce a plurality of decompressed data portions; and wherein the CMMU is further configured to combine the plurality of decompressed data portions to produce the decompressed data.
91. The system of claim 90, wherein each of the pluraUty of compression/decompression engines implements a data decompression algorithm, wherein the data decompression algorithm is substantially the same for each of the plurality of compression/decompression engines.
92. The system of claim 90, wherein the plurality of compression/decompression engines decompress the portions of the compressed data in paraUel.
93. The system of claim 61, wherein, in said writing the decompressed data to physical memory, the
CMMU is further configured to: locate a currently unused page in the physical memory in a hst of currently unused pages for receiving uncompressed data; and write the decompressed data as an uncompressed page to the located currently unused page.
94. The system of claim 61, wherein the CMMU is further configured to manage the system memory on a page granularity.
95. The system of claim 61, wherein page size is programmable.
96. The system of claim 61, wherein a maximum compression ratio apphed by the CMMU is programmable.
97. The system of claim 61, further comprising a kernel driver configured to: monitor an actual compression ratio achieved by the CMMU; and ensure that a minimum compression ratio is maintained by the CMMU.
98. A system comprising: one or more processors; a system memory controller; a physical memory comprising a system memory; and a compressed memory management unit (CMMU), configured to: translate a system memory address into a first physical memory address; cause the compression of the uncompressed data at the first physical memory address to produce compressed data; and write the compressed data to a second physical memory address; wherein the system is operable to increase the effective size of system memory by keeping least recently used pages compressed in the physical memory and most recently and frequently used pages uncompressed in the physical memory.
99. The system of claim 98, wherein die system further comprises program instructions executable within the system to implement an operating system, wherein the operating system is aware of the increased effective size of the system memory.
100. The system of claim 98, wherein the system further comprises program instructions executable within die system to implement an operating system, wherein the operating system is not aware of the increased effective size of the system memory.
101. The system of claim 98, wherein the system further comprises program instructions executable within the system to implement an operating system, wherein the operating system is aware of the increased effective size of a first portion of the system memory, and wherein the operating system is not aware of the increased effective size of a second portion of the system memory.
102. The system of claim 98, further comprising: wherein the CMMU is further configured to receive from a first processor of the one or more processors the system memory access comprising a system memory address.
103. The system of claim 98, wherein the CMMU comprises: a page translation cache configured to cache page translation entries; and one or more scatter/gather Direct Memory Access (DMA) channels configured for transferring data from the CMMU to one or more destinations and for receiving data on the CMMU from one or more sources.
104. The system of claim 103, wherein the CMMU further comprises a compression/decompression engine configured to compress uncompressed data and to decompress compressed data under confrol of the CMMU.
105. The system of claim 103, wherein the page franslation cache is fully associative.
106. The system of claim 98, wherein the system further comprises: a compression/decompression engine configured to compress uncompressed data under control of the CMMU.
107. The system of claim 106, wherein the compression/decompression engine is a paraUel compression/decompression engine configured to perform paraUel data compression under control of the CMMU.
108. The system of claim 106, wherein the compression/decompression engine is comprised in the
CMMU.
109. The system of claim 98, wherein the CMMU is comprised in one of the one or more processors.
110. The system of claim 109, wherein at least one of the one or more processors comprises a compression/decompression engine configured to compress uncompressed data under control of die CMMU.
111. The system of claim 109, wherein the system memory controller comprises a compression/decompression engine configured to compress uncompressed data under control of the CMMU.
112. The system of claim 109, wherein the physical memory comprises one or more memory modules, and wherein the at least one of the one or more memory modules comprises a compression/decompression engine configured to compress uncompressed data under control of the CMMU.
113. The system of claim 98, wherein the CMMU is comprised in the system memory controUer.
114. The system of claim 113, wherein the system memory controUer further comprises a compression/decompression engine configured to compress uncompressed data under confrol of the CMMU.
115. The system of claim 113, wherein the physical memory comprises one or more memory modules, and wherein at least one of the one or more memory modules comprises a compression/decompression engine configured to compress uncompressed data under confrol of the CMMU.
116. The system of claim 98, wherein the physical memory comprises one or more memory modules, wherein the CMMU is coupled to the system memory controller and the one or more memory modules.
117. The system of claim 116, wherein at least one of the one or more memory modules comprises a compression decompression engine configured to compress uncompressed data under confrol of the CMMU.
118. The system of claim 98, wherein the system further comprises: a plurahty of compression/decompression engines; wherein, in said causing the compression of the uncompressed data, the CMMU is further configured to write a different portion of the uncompressed data to each of the pluraUty of compression/decompression engines; wherein the plurahty of compression/decompression engines are configured to compress the portions of the uncompressed data to produce a plurahty of compressed data portions; and wherein the CMMU is further configured to combine the pluraUty of compressed data portions to produce the compressed data.
119. The system of claim 118, wherein each of the plurahty of compression/decompression engines implements a data compression algorithm, wherein the data compression algorithm is substantially the same for each of the pluraUty of compression/decompression engines.
120. The system of claim 118, wherein the plurality of compression/decompression engines is configured to compress the portions of the uncompressed data in paraUel.
121. The system of claim 98, wherein the system further comprises: a plurality of compression/decompression engines, wherein each of the pluraUty of compression/decompression engines implements a different compression algorithm; wherein, in said causing the compression of the uncompressed data, the CMMU is further configured to provide the uncompressed data to each of the plurality of compression/decompression engines; wherein the plurahty of compression engines are configured to each compress the uncompressed data using the compression algorithm implemented by the particular compression engine to produce a plurahty of compressed data each compressed by a different compression algorithm; and wherein, in said causing the compression of the uncompressed data, the CMMU is further configured to select the compressed data from among the plurahty of compressed data.
122. The system of claim 121, wherein the CMMU selects the compressed data with the highest compression ratio from among the pluraUty of compressed data.
123. The system of claim 121, wherein the system further comprises a page translation table comprising one or more page translation entries, wherein one of the one or more page translation entries references a page of physical memory at the second physical memory address, wherein the CMMU is further configured to mark the page translation entry to indicate the particular compression algorithm used in said compressing the uncompressed data.
124. The system of claim 121, wherein the plurahty of compression/decompression engines is configured to compress the uncompressed data in paraUel.
125. The system of claim 98, further comprising: a compression/decompression engine; wherein, in said causing the compression of the uncompressed data, the CMMU is further configured to write die uncompressed data to the compression/decompression engine; and wherein the compression engine is configured to compress the uncompressed data to produce the compressed data.
126. The system of claim 125, wherein the CMMU further comprises: one or more Direct Memory Access (DMA) channels; wherein, in said writing the uncompressed data to the compression/decompression engine, the one or more DMA channels are configured to: read the uncompressed data from physical memory; and write the uncompressed data to the compression/decompression engine.
127. The system of claim 125, wherein, in said writing the compressed data to the second physical memory address, the one or more DMA channels are further configured to: read the compressed page from the compression/decompression engine; and copy the compressed data into one or more linked compressed blocks in physical memory.
128. The system of claim 125, wherein the CMMU is further configured to: locate the one or more compressed blocks for storing the compressed data in a hst of avaUable compressed blocks for storing compressed data; and link the one or more compressed blocks to generate the one or more linked compressed blocks.
129. A system comprising: one or more processors; a system memory controUer; a physical memory comprising a system memory; and a compressed memory management unit (CMMU), configured to: maintain a threshold compression ratio, wherein the threshold compression ratio is a desired irunimum ratio between compressed pages and uncompressed pages of the system memory; dynamicaUy monitor a current compression ratio for the system memory, wherein the current compression ratio is an actual ratio between compressed pages and uncompressed pages of the system memory, and wherein the compression ratio determines an amount by which system memory address space can be increased; dynamicaUy determine if the current compression ratio is below the threshold compression ratio; if the current compression ratio is below the threshold compression ratio, cause the compression of one or more uncompressed pages to generate one or more compressed pages; and wherein the CMMU is operable to increase the effective size of the system memory by keeping least recently used pages compressed in the physical memory and most recently and frequently used pages uncompressed in the physical memory; and wherein compressing the one or more uncompressed page is operable to increase the current compression ratio for the system memory.
130. The system of claim 129, wherein the threshold compression ratio is programmable to determine an amount by which the effective size of the system memory can be increased.
131. The system of claim 129, further comprising: a compression engine; wherein, in said causing the compression of the one or more uncompressed pages, the CMMU is further configured to write the uncompressed pages to the compression engine; and wherein the compression engine is configured to compress the one or more uncompressed pages to produce the one or more compressed pages.
132. The system of claim 129, wherein, in said causing the compression of the one or more uncompressed pages, the CMMU is further configured to: locate a page translation entry in a page translation table referencing an uncompressed page in the system memory; deteπriine that the uncompressed page is highly compressible; set a highly compressed attribute in the page franslation entry to indicate that the page is highly compressed; and free a portion of the physical memory allocated to the page in the system memory; wherein highly compressing the uncompressed page is operable to increase the current compression ratio for the system memory.
133. The system of claim 132, wherein the highly compressed attribute is a one-bit field in the page translation entry.
134. The system of claim 129, wherein the CMMU is further configured to, prior to said freeing the portion of the physical memory aUocated to the page: determine if the page is dirty; and if the page is dirty, write data from the page to non- volatile storage to make the page clean.
PCT/US2001/045147 2000-11-29 2001-11-28 System and method for managing compression and decompression of system memory in a computer system WO2002044902A2 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
AU2002227084A AU2002227084A1 (en) 2000-11-29 2001-11-28 System and method for managing compression and decompression of system memory ina computer system

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US25017700P 2000-11-29 2000-11-29
US60/250,177 2000-11-29
US09/915,751 US7047382B2 (en) 2000-11-29 2001-07-26 System and method for managing compression and decompression and decompression of system memory in a computer system
US09/915,751 2001-07-26

Publications (1)

Publication Number Publication Date
WO2002044902A2 true WO2002044902A2 (en) 2002-06-06

Family

ID=26940653

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/US2001/045147 WO2002044902A2 (en) 2000-11-29 2001-11-28 System and method for managing compression and decompression of system memory in a computer system

Country Status (3)

Country Link
US (2) US7047382B2 (en)
AU (1) AU2002227084A1 (en)
WO (1) WO2002044902A2 (en)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2449469A1 (en) * 2009-06-29 2012-05-09 Hewlett-Packard Development Company, L.P. Hypervisor-based management of local and remote virtual memory pages
US20210191869A1 (en) * 2019-12-23 2021-06-24 Advanced Micro Devices, Inc. Resource-aware compression

Families Citing this family (81)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6816949B2 (en) * 2002-01-03 2004-11-09 Intel Corporation Method and apparatus for cache management
US7103608B1 (en) 2002-05-10 2006-09-05 Oracle International Corporation Method and mechanism for storing and accessing data
US6968424B1 (en) * 2002-08-07 2005-11-22 Nvidia Corporation Method and system for transparent compressed memory paging in a computer system
US8386797B1 (en) * 2002-08-07 2013-02-26 Nvidia Corporation System and method for transparent disk encryption
US7958289B2 (en) 2002-08-08 2011-06-07 International Business Machines Corporation Method and system for storing memory compressed data onto memory compressed disks
US7058783B2 (en) * 2002-09-18 2006-06-06 Oracle International Corporation Method and mechanism for on-line data compression and in-place updates
GB2395307A (en) * 2002-11-15 2004-05-19 Quadrics Ltd Virtual to physical memory mapping in network interfaces
US20040177224A1 (en) * 2003-03-07 2004-09-09 Patrick Devaney Local memory with ownership that is transferrable between neighboring processors
GB2399899B (en) * 2003-03-27 2005-06-22 Micron Technology Inc Active memory command engine and method
US7073023B2 (en) * 2003-05-05 2006-07-04 Lsi Logic Corporation Method for minimizing RAID 0 data transfer rate variability
JP4261299B2 (en) * 2003-09-19 2009-04-30 株式会社エヌ・ティ・ティ・ドコモ Data compression device, data restoration device, and data management device
US7978716B2 (en) 2003-11-24 2011-07-12 Citrix Systems, Inc. Systems and methods for providing a VPN solution
US20050132161A1 (en) * 2003-12-15 2005-06-16 Nokia Corporation Creation of virtual memory space in a memory
US7779464B2 (en) * 2004-06-14 2010-08-17 Lionic Corporation System security approaches utilizing a hierarchical memory system
US8495305B2 (en) 2004-06-30 2013-07-23 Citrix Systems, Inc. Method and device for performing caching of dynamically generated objects in a data communication network
US7383399B2 (en) * 2004-06-30 2008-06-03 Intel Corporation Method and apparatus for memory compression
US8739274B2 (en) * 2004-06-30 2014-05-27 Citrix Systems, Inc. Method and device for performing integrated caching in a data communication network
US7757074B2 (en) 2004-06-30 2010-07-13 Citrix Application Networking, Llc System and method for establishing a virtual private network
AU2005266943C1 (en) 2004-07-23 2011-01-06 Citrix Systems, Inc. Systems and methods for optimizing communications between network nodes
EP2264956B1 (en) 2004-07-23 2017-06-14 Citrix Systems, Inc. Method for securing remote access to private networks
US7810089B2 (en) 2004-12-30 2010-10-05 Citrix Systems, Inc. Systems and methods for automatic installation and execution of a client-side acceleration program
US8706877B2 (en) 2004-12-30 2014-04-22 Citrix Systems, Inc. Systems and methods for providing client-side dynamic redirection to bypass an intermediary
US8700695B2 (en) 2004-12-30 2014-04-15 Citrix Systems, Inc. Systems and methods for providing client-side accelerated access to remote applications via TCP pooling
US8549149B2 (en) 2004-12-30 2013-10-01 Citrix Systems, Inc. Systems and methods for providing client-side accelerated access to remote applications via TCP multiplexing
US8954595B2 (en) 2004-12-30 2015-02-10 Citrix Systems, Inc. Systems and methods for providing client-side accelerated access to remote applications via TCP buffering
US8255456B2 (en) 2005-12-30 2012-08-28 Citrix Systems, Inc. System and method for performing flash caching of dynamically generated objects in a data communication network
US20070005911A1 (en) * 2005-07-01 2007-01-04 Nec Laboratories America, Inc. Operating System-Based Memory Compression for Embedded Systems
CN1901537A (en) * 2005-07-22 2007-01-24 国际商业机器公司 Self adaptive conversation compression managing method and compression managing device and conversation managing system
TWI263901B (en) * 2005-07-28 2006-10-11 Lite On Technology Corp Program initiation methods and embedded systems utilizing the same
US8301839B2 (en) 2005-12-30 2012-10-30 Citrix Systems, Inc. System and method for performing granular invalidation of cached dynamically generated objects in a data communication network
US7921184B2 (en) 2005-12-30 2011-04-05 Citrix Systems, Inc. System and method for performing flash crowd caching of dynamically generated objects in a data communication network
US7610541B2 (en) * 2006-03-08 2009-10-27 International Business Machines Corporation Computer compressed memory system and method for storing and retrieving data in a processing system
US7545382B1 (en) * 2006-03-29 2009-06-09 Nvidia Corporation Apparatus, system, and method for using page table entries in a graphics system to provide storage format information for address translation
US20080071981A1 (en) * 2006-09-20 2008-03-20 Mediatek Inc. Method of providing defect list for optical disc
US9202087B2 (en) * 2006-10-31 2015-12-01 Verizon Patent And Licensing Inc. Method and apparatus for controlling access to local storage devices
US8250335B2 (en) * 2007-06-07 2012-08-21 International Business Machines Corporation Method, system and computer program product for managing the storage of data
US9362948B2 (en) * 2008-02-14 2016-06-07 Broadcom Corporation System, method, and computer program product for saving and restoring a compression/decompression state
CN101394335B (en) * 2007-09-20 2011-01-19 中兴通讯股份有限公司 Synchronous digital cross connecting self-routing method and system
US8392382B2 (en) 2007-10-19 2013-03-05 Oracle International Corporation On-line transaction processing (OLTP) compression and re-compression of database data
US7895242B2 (en) * 2007-10-31 2011-02-22 Microsoft Corporation Compressed storage management
US20090164715A1 (en) * 2007-12-20 2009-06-25 International Business Machines Corporation Protecting Against Stale Page Overlays
EP2483778B1 (en) * 2009-09-30 2019-09-04 Citrix Systems, Inc. Dynamic reallocation of physical memory responsive to virtual machine events
US8560770B2 (en) * 2009-11-13 2013-10-15 Seagate Technology Llc Non-volatile write cache for a data storage system
US8217813B2 (en) * 2010-04-29 2012-07-10 Advanced Micro Devices, Inc. System and method for low-latency data compression/decompression
US8484405B2 (en) * 2010-07-13 2013-07-09 Vmware, Inc. Memory compression policies
US9305006B2 (en) * 2010-11-11 2016-04-05 Red Hat, Inc. Media compression in a digital device
US20120144146A1 (en) * 2010-12-03 2012-06-07 International Business Machines Corporation Memory management using both full hardware compression and hardware-assisted software compression
US9069477B1 (en) * 2011-06-16 2015-06-30 Amazon Technologies, Inc. Reuse of dynamically allocated memory
DE112011105700T5 (en) * 2011-10-01 2014-07-17 Intel Corporation Quick Sleep and Quick Recovery for a platform of computer system
US8738858B1 (en) 2011-11-30 2014-05-27 Emc Corporation System and method for improving cache performance
US9424175B1 (en) 2011-11-30 2016-08-23 Emc Corporation System and method for improving cache performance
US8738857B1 (en) 2011-11-30 2014-05-27 Emc Corporation System and method for improving cache performance
US8725939B1 (en) * 2011-11-30 2014-05-13 Emc Corporation System and method for improving cache performance
US9208098B1 (en) * 2011-11-30 2015-12-08 Emc Corporation System and method for improving cache performance
US9420322B2 (en) * 2012-03-14 2016-08-16 Time Warner Cable Enterprises Llc System and method for delivering compressed applications
US9026568B2 (en) * 2012-03-30 2015-05-05 Altera Corporation Data compression for direct memory access transfers
KR101956031B1 (en) * 2012-10-15 2019-03-11 삼성전자 주식회사 Data compressor, memory system comprising the compress and method for compressing data
US10102148B2 (en) * 2013-06-13 2018-10-16 Microsoft Technology Licensing, Llc Page-based compressed storage management
TWI493446B (en) * 2013-09-23 2015-07-21 Mstar Semiconductor Inc Method and apparatus for managing memory
KR102114388B1 (en) * 2013-10-18 2020-06-05 삼성전자주식회사 Method and apparatus for compressing memory of electronic device
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
US9959072B2 (en) * 2013-12-20 2018-05-01 Sandisk Technologies Llc Systems and methods of compressing data
JP5983665B2 (en) * 2014-03-17 2016-09-06 日本電気株式会社 Access count device, memory system, and access count method
US9684625B2 (en) 2014-03-21 2017-06-20 Microsoft Technology Licensing, Llc Asynchronously prefetching sharable memory pages
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
US10838862B2 (en) 2014-05-21 2020-11-17 Qualcomm Incorporated Memory controllers employing memory capacity compression, and related processor-based systems and methods
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
US9454308B2 (en) 2014-06-27 2016-09-27 International Business Machines Corporation Page compression strategy for improved page out process
EP3204859B1 (en) 2014-10-07 2020-12-02 Google LLC Methods and systems for cache lines de-duplication
US9892054B2 (en) 2014-10-07 2018-02-13 Google Llc Method and apparatus for monitoring system performance and dynamically updating memory sub-system settings using software to optimize performance and power consumption
US9864541B2 (en) 2015-02-13 2018-01-09 Google Llc Transparent hardware-assisted memory decompression
US9632924B2 (en) 2015-03-02 2017-04-25 Microsoft Technology Licensing, Llc Using memory compression to reduce memory commit charge
US10037270B2 (en) 2015-04-14 2018-07-31 Microsoft Technology Licensing, Llc Reducing memory commit charge when compressing memory
US20170046074A1 (en) * 2015-08-11 2017-02-16 Intel Corporation Adaptive Data Compression for Data Storage in a Memory Device
US20170083450A1 (en) * 2015-09-23 2017-03-23 Intel Corporation Supporting Data Conversion and Meta-Data in a Paging System
US10804930B2 (en) * 2015-12-16 2020-10-13 International Business Machines Corporation Compressed data layout with variable group size
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
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
US10176090B2 (en) * 2016-09-15 2019-01-08 Qualcomm Incorporated Providing memory bandwidth compression using adaptive compression in central processing unit (CPU)-based systems
US10503652B2 (en) * 2017-04-01 2019-12-10 Intel Corporation Sector cache for compression
US10795825B2 (en) * 2018-12-26 2020-10-06 Advanced Micro Devices, Inc. Compressing data for storage in cache memories in a hierarchy of cache memories

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5490260A (en) 1990-12-14 1996-02-06 Ceram, Inc. Solid-state RAM data storage for virtual memory computer using fixed-sized swap pages with selective compressed/uncompressed data store according to each data size
US5991515A (en) * 1992-11-10 1999-11-23 Adobe Systems Incorporated Method and apparatus for compressing and decompressing data prior to display
US5638498A (en) * 1992-11-10 1997-06-10 Adobe Systems Incorporated Method and apparatus for reducing storage requirements for display data
AU1447295A (en) * 1993-12-30 1995-08-01 Connectix Corporation Virtual memory management system and method using data compression
US6002411A (en) * 1994-11-16 1999-12-14 Interactive Silicon, Inc. Integrated video and memory controller with data processing and graphical processing capabilities
US5729228A (en) 1995-07-06 1998-03-17 International Business Machines Corp. Parallel compression and decompression using a cooperative dictionary
US5696927A (en) 1995-12-21 1997-12-09 Advanced Micro Devices, Inc. Memory paging system and method including compressed page mapping hierarchy
US5710909A (en) 1996-01-23 1998-01-20 International Business Machines Corporation Data compression utilization method and apparatus for computer main store
US6879266B1 (en) * 1997-08-08 2005-04-12 Quickshift, Inc. Memory module including scalable embedded parallel data compression and decompression engines
US6208273B1 (en) 1999-01-29 2001-03-27 Interactive Silicon, Inc. System and method for performing scalable embedded parallel data compression
US6741368B1 (en) * 1999-05-25 2004-05-25 Adobe Systems, Incorporated Method and apparatus for reducing storage requirements for display data
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
US7089391B2 (en) * 2000-04-14 2006-08-08 Quickshift, Inc. Managing a codec engine for memory compression/decompression operations using a data movement engine
US6778291B1 (en) * 2000-06-12 2004-08-17 Hewlett-Packard Development Company, L.P. Fast page analyzer for proper selection of compression engine for rendered data
US6701020B2 (en) * 2001-03-15 2004-03-02 Hewlett-Packard Development Company, L.P. JADE-JPEG based adaptive document compression engine
US6516397B2 (en) * 2001-04-09 2003-02-04 Hewlett-Packard Company Virtual memory system utilizing data compression implemented through a device
US20030028673A1 (en) * 2001-08-01 2003-02-06 Intel Corporation System and method for compressing and decompressing browser cache in portable, handheld and wireless communication devices

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2449469A1 (en) * 2009-06-29 2012-05-09 Hewlett-Packard Development Company, L.P. Hypervisor-based management of local and remote virtual memory pages
EP2449469A4 (en) * 2009-06-29 2013-05-22 Hewlett Packard Development Co Hypervisor-based management of local and remote virtual memory pages
US20210191869A1 (en) * 2019-12-23 2021-06-24 Advanced Micro Devices, Inc. Resource-aware compression
US11544196B2 (en) * 2019-12-23 2023-01-03 Advanced Micro Devices, Inc. Resource-aware compression

Also Published As

Publication number Publication date
AU2002227084A1 (en) 2002-06-11
USRE43483E1 (en) 2012-06-19
US7047382B2 (en) 2006-05-16
US20020073298A1 (en) 2002-06-13

Similar Documents

Publication Publication Date Title
USRE43483E1 (en) System and method for managing compression and decompression of system memory in a computer system
EP1588265B1 (en) Method and apparatus for morphing memory compressed machines
US6795897B2 (en) Selective memory controller access path for directory caching
US6457104B1 (en) System and method for recycling stale memory content in compressed memory systems
JP6505132B2 (en) Memory controller utilizing memory capacity compression and associated processor based system and method
US10203901B2 (en) Transparent hardware-assisted memory decompression
JP4008826B2 (en) Device for cache compression engine to increase effective cache size by on-chip cache data compression
US9740621B2 (en) Memory controllers employing memory capacity and/or bandwidth compression with next read address prefetching, and related processor-based systems and methods
US6968424B1 (en) Method and system for transparent compressed memory paging in a computer system
US7512767B2 (en) Data compression method for supporting virtual memory management in a demand paging system
US6549995B1 (en) Compressor system memory organization and method for low latency access to uncompressed memory regions
Franaszek et al. Algorithms and data structures for compressed-memory machines
US7143238B2 (en) Mechanism to compress data in a cache
US10572378B2 (en) Dynamic memory expansion by data compression
US8037281B2 (en) Miss-under-miss processing and cache flushing
US20070005911A1 (en) Operating System-Based Memory Compression for Embedded Systems
KR20050027270A (en) System and method for using a compressed main memory based on degree of compressibility
WO2005066801A2 (en) A mechanism to include hints within compressed data
JP2005174341A (en) Multi-level cache having overlapping congruence group of associativity set in various cache level
WO2021034947A1 (en) Flexible dictionary sharing for compressed caches
CN115543532A (en) Processing method and device for missing page exception, electronic equipment and storage medium
US7103722B2 (en) Cache configuration for compressed memory systems
US20050071566A1 (en) Mechanism to increase data compression in a cache
JPH11296432A (en) Information processor and memory management system

Legal Events

Date Code Title Description
AK Designated states

Kind code of ref document: A2

Designated state(s): AE AG AL AM AT AU AZ BA BB BG BR BY BZ CA CH CN CO CR CU CZ DE DK DM DZ EC EE ES FI GB GD GE GH GM HR HU ID IL IN IS JP KE KG KP KR KZ LC LK LR LS LT LU LV MA MD MG MK MN MW MX MZ NO NZ PH PL PT RO RU SD SE SG SI SK SL TJ TM TR TT TZ UA UG UZ VN YU ZA ZW

AL Designated countries for regional patents

Kind code of ref document: A2

Designated state(s): GH GM KE LS MW MZ SD SL SZ TZ UG ZM ZW AM AZ BY KG KZ MD RU TJ TM AT BE CH CY DE DK ES FI FR GB GR IE IT LU MC NL PT SE TR BF BJ CF CG CI CM GA GN GQ GW ML MR NE SN TD TG

121 Ep: the epo has been informed by wipo that ep was designated in this application
REG Reference to national code

Ref country code: DE

Ref legal event code: 8642

122 Ep: pct application non-entry in european phase
NENP Non-entry into the national phase

Ref country code: JP

WWW Wipo information: withdrawn in national office

Country of ref document: JP