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
First Claim
1. A method for managing memory in a system including a CPU and one or more memory modules comprising system memory, wherein at least one memory module includes a compression/decompression engine, the method comprising:
- reading a first data from the system memory;
writing the first data to the at least one memory module;
the compression/decompression engine included on the at least one memory module compressing the first data to form a first compressed data;
reading the first compressed data from the at least one memory module; and
writing the first compressed data to a first compressed portion of the system memory.
5 Assignments
0 Petitions
Accused Products
Abstract
An ASIC device embedded into the memory subsystem of a computing device used to accelerate the transfer of active memory pages for usage by the system CPU from either compressed memory cache buffer or the addition of a compressed disk subsystem for improved system cost and performance. The Compression Enhanced Dual In-line Memory Module of the present invention uses parallel lossless compression and decompression engines embedded into the ASIC device for improved system memory page density and I/O subsystem data bandwidth. In addition, the operating system software optimizes page transfers between compressed disk partitions, compressed cache memory and inactive/active page memory within the computer system. The disclosure also indicates preferred methods for initialization, recognition and operation of the ASIC device transparently within industry standard memory interfaces and subsystems. The system can interface to present operating system software and applications, which enable optimal usage for the compressed paging system memory environment. The integrated parallel data compression and decompression capabilities of the compactor ASIC mounted on industry standard memory modules, along with the software drivers and filters of the present invention keep recently used pages compressed in the system memory. Additional performance is gained by the transfer of compressed pages between the system memory and the disk and network subsystems. In addition, the present invention may reduce the amount of data transferred between distributed computers across the LAN or WAN by the transmission of compressed page data between remote systems or distributed databases.
518 Citations
143 Claims
-
1. A method for managing memory in a system including a CPU and one or more memory modules comprising system memory, wherein at least one memory module includes a compression/decompression engine, the method comprising:
-
reading a first data from the system memory;
writing the first data to the at least one memory module;
the compression/decompression engine included on the at least one memory module compressing the first data to form a first compressed data;
reading the first compressed data from the at least one memory module; and
writing the first compressed data to a first compressed portion of the system memory. - View Dependent Claims (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42)
writing the first data to the nonvolatile memory substantially concurrently with said writing the first data to the at least one memory module.
-
-
3. The method of claim 1, wherein the system further includes a nonvolatile memory, the method further comprising:
writing the first compressed data to a compressed portion of the nonvolatile memory.
-
4. The method of claim 1,
wherein the compression/decompression engine comprises an input buffer and an output buffer; -
wherein writing the first data to the at least one memory module comprises writing the first data to the input buffer;
wherein the compression decompression engine stores the first compressed data in the output buffer; and
wherein reading the first compressed data from the at least one memory module comprises reading the first compressed data from the output buffer.
-
-
5. The method of claim 1,
wherein the first compressed portion of the system memory comprises an older first compressed data prior to said writing the first compressed data to the first compressed portion of the system memory; - and
wherein writing the first compressed data to the first compressed portion of the system memory comprises;
replacing the older first compressed data with the first compressed data in the first compressed portion of the system memory.
- and
-
6. The method of claim 1, wherein the system further includes a nonvolatile memory, the method further comprising:
-
reading the first compressed data from the first compressed portion of the system memory;
writing the first compressed data to the at least one memory module;
the compression/decompression engine included on the at least one memory module decompressing the first compressed data to form the first data;
reading the first data from the at least one memory module; and
writing the first data to the nonvolatile memory.
-
-
7. The method of claim 6, further comprising:
-
writing the first data to a temporary buffer in system memory after said reading the first data from the at least one memory module; and
reading the first data from the temporary buffer prior to said writing the first data to the nonvolatile memory.
-
-
8. The method of claim 6, further comprising:
removing the first compressed data from the first compressed portion of the system memory after said reading the first compressed data from the first compressed portion of the system memory.
-
9. The method of claim 8, further comprising:
-
calculating a usage rate of the first compressed data; and
comparing the usage rate of the first compressed data to a minimum usage rate;
wherein said removing the first compressed data from the first compressed portion of the system memory is performed in response to the usage rate of the first compressed data being below the minimum usage rate.
-
-
10. The method of claim 1, wherein the system further includes a nonvolatile memory, the method further comprising:
-
reading the first compressed data from the first compressed portion of the system memory; and
writing the first compressed data to a compressed portion of the nonvolatile memory.
-
-
11. The method of claim 1, wherein the system further includes a virtual memory manager (VMM), wherein the method further comprises:
-
the VMM selecting the first data for removal from the system memory;
wherein said reading the first data from the system memory, said writing the first data to the at least one memory module, the compression/decompression engine compressing the first data to form the first compressed data, said reading the first compressed data from the at least one memory module, and said writing the first compressed data to the first compressed portion of the system memory are performed in response to the VMM selecting the first data for removal from the system memory.
-
-
12. The method of claim 11,
wherein said reading the first data from the system memory, said writing the first data to the at least one memory module, the compression/decompression engine compressing the first data to form the first compressed data, said reading the first compressed data from the at least one memory module, and said writing the first compressed data to the first compressed portion of the system memory occur invisibly to the VMM. -
13. The method of claim 11, wherein the first data resides in a first section of system memory, the method further comprising:
the VMM releasing the first section of system memory for reuse after said reading the first data from the system memory.
-
14. The method of claim 11, wherein the first data in the system memory is clean, and wherein the VMM selecting the first data to be removed from the system memory includes:
the VMM invalidating the first data in the system memory.
-
15. The method of claim 11, wherein the system further includes a nonvolatile memory, wherein the first data in the system memory is dirty, and wherein the VMM selecting the first data to be removed from the system memory includes:
the VMM generating a writeback of the first data from the system memory to the nonvolatile memory.
-
16. The method of claim 1,
wherein the system further includes a driver for managing the compression/decompression engine; - and
wherein said reading the first data from the system memory, said writing the first data to the at least one memory module, said reading the first compressed data from the at least one memory module, and said writing the first compressed data to the first compressed portion of the system memory are performed by the driver.
- and
-
17. The method of claim 1,
wherein the system further includes a virtual memory manager (VMM), a compressed memory manager for managing the first compressed portion of the system memory, and a driver for managing the compression/decompression engine; -
wherein the method further comprises;
the VMM selecting the first data for removal from the system memory;
the compressed memory manager generating a write request to the driver in response to the VMM selecting the first data for removal from the system memory; and
the driver performing said reading the first data from the system memory, said writing the first data to the at least one memory module, said reading the first compressed data from the at least one memory module, and said writing the first compressed data to the first compressed portion of the system memory in response to said receiving the write request.
-
-
18. The method of claim 17,
wherein the write request includes a source location of the first data in the system memory and a destination location for the first compressed data in the first compressed portion of the system memory; -
wherein the driver uses the source location during said reading the first data from the system memory; and
wherein the driver uses the destination location during said writing the first compressed data to the first compressed portion of the system memory.
-
-
19. The method of claim 17,
wherein the driver includes a write routine for processing write requests; - and
wherein the compressed memory manager generating the write request to the driver includes the compressed memory manager calling the write routine of the driver.
- and
-
20. The method of claim 1, further comprising:
-
comparing a size of the first compressed data to a size of the first data; and
wherein said writing the first compressed data to the first compressed portion of the system memory is not performed in response to the size of the first compressed data being greater than or equal to the size of the first data.
-
-
21. The method of claim 20, further comprising:
writing the first data to the first compressed portion of the system memory in response to the size of the first compressed data being greater than or equal to the size of the first data.
-
22. The method of claim 21, further comprising:
-
reading the first data from the first compressed portion of the system memory; and
writing the first data to the system memory.
-
-
23. The method of claim 1,
wherein the compression/decompression engine analyzes and compresses a plurality of symbols in parallel; -
wherein the first data comprises symbols;
wherein the compression/decompression engine compressing the first data includes;
the compression/decompression engine analyzing and compressing a plurality of symbols from the first data in parallel to form the first compressed data.
-
-
24. The method of claim 1, wherein the system memory comprises a plurality of compressed portions, the method further comprising:
-
reading a second data from the system memory;
writing the second data to the at least one memory module;
the compression/decompression engine included on the at least one memory module compressing the second data to form a second compressed data;
reading the second compressed data from the at least one memory module; and
writing the second compressed data to a second compressed portion of the system memory.
-
-
25. The method of claim 1, further comprising:
-
calculating a usage rate of the first compressed portion of the system memory;
increasing the size of the first compressed portion of the system memory in response to the usage rate of the first compressed portion of the system memory being below a low usage threshold; and
decreasing the size of the first compressed portion of the system memory in response to the usage rate of the first compressed portion of the system memory being above a high usage threshold.
-
-
26. The method of claim 1, further comprising:
-
reading the first compressed data from the first compressed portion of the system memory;
writing the first compressed data to the at least one memory module;
the compression/decompression engine included on the at least one memory module decompressing the first compressed data to form the first data;
reading the first data from the at least one memory module; and
writing the first data to the system memory.
-
-
27. The method of claim 26,
wherein the compression/decompression engine comprises an input buffer and an output buffer; -
wherein writing the first compressed data to the at least one memory module comprises writing the first compressed data to the input buffer;
wherein the compression decompression engine stores the first data in the output buffer; and
wherein reading the first data from the at least one memory module comprises reading the first data from the output buffer.
-
-
28. The method of claim 26, wherein the system further includes a virtual memory manager (VMM), wherein the method further comprises:
-
the VMM requesting the first data to be copied to the system memory;
wherein said reading the first compressed data from the first compressed portion of the system memory, said writing the first compressed data to the at least one memory module, the compression/decompression engine decompressing the first compressed data to form the first data, said reading the first data from the at least one memory module, and said writing the first data to the system memory are performed in response to the VMM requesting the first data to be copied to the system memory.
-
-
29. The method of claim 28,
wherein said reading the first compressed data from the first compressed portion of the system memory, said writing the first compressed data to the at least one memory module, the compression/decompression engine decompressing the first compressed data to form the first data, said reading the first data from the at least one memory module, and said writing the first data to the system memory occur invisibly to the VMM. -
30. The method of claim 26,
wherein the system further includes a driver for managing the compression/decompression engine; - and
wherein said reading the first compressed data from the first compressed portion of the system memory, said writing the first compressed data to the at least one memory module, said reading the first data from the at least one memory module, and said writing the first data to the system memory are performed by the driver.
- and
-
31. The method of claim 26,
wherein the system further includes a virtual memory manager (VMM), a compressed memory manager for managing the first compressed portion of the system memory, and a driver for managing the compression/decompression engine; -
wherein the method further comprises;
the VMM requesting the first data to be copied to the system memory;
the compressed memory manager generating a read request to the driver in response to the VMM requesting the first data to be copied to the system memory; and
the driver performing said reading the first compressed data from the first compressed portion of the system memory, said writing the first compressed data to the at least one memory module, said reading the first data from the at least one memory module, and said writing the first data to the system memory in response to said receiving the read request.
-
-
32. The method of claim 31,
wherein the read request includes a source location of the first compressed data in the first compressed portion of the system memory and a destination location for the first data in the system memory; -
wherein the driver uses the source location during said reading the first compressed data from the first compressed portion of the system memory; and
wherein the driver uses the destination location during said writing the first data to the system memory.
-
-
33. The method of claim 31,
wherein the driver includes a read routine for processing the read request; - and
wherein the compressed memory manager generating the read request to the driver includes the compressed memory manager calling the read routine of the driver.
- and
-
34. The method of claim 26, further comprising:
removing the first compressed data from the first compressed portion of the system memory after said reading the first compressed data from the first compressed portion of the system memory.
-
35. The method of claim 26,
wherein the compression/decompression engine analyzes and decompresses in parallel a plurality of tokens each describing one or more symbols; -
wherein the first compressed data comprises tokens each describing one or more symbols in the first data;
wherein the compression/decompression engine decompressing the first compressed data to form the first data includes;
the compression/decompression engine analyzing and decompressing a plurality of tokens from the first compressed data in parallel to form the first data.
-
-
36. The method of claim 1, wherein the system further includes a nonvolatile memory and a virtual memory manager (VMM), the method further comprising:
-
the VMM generating a request for a second data to be loaded into system memory;
receiving said request for the second data;
examining the first compressed portion of the system memory for the second data;
requesting the second data from the nonvolatile memory in response to the second data not being found in the first compressed portion of the system memory;
receiving the second data from the nonvolatile memory; and
writing the second data to the system memory.
-
-
37. The method of claim 36, further comprising:
-
writing the second data to the at least one memory module;
the compression/decompression engine included on the at least one memory module compressing the second data to form a second compressed data;
reading the second compressed data from the at least one memory module; and
writing the second compressed data to the first compressed portion of the system memory.
-
-
38. The method of claim 36, further comprising:
-
requesting a third data from the nonvolatile memory in response to said request for the second data;
receiving the third data from the nonvolatile memory;
writing the third data to the at least one memory module;
the compression/decompression engine included on the at least one memory module compressing the third data to form a third compressed data;
reading the third compressed data from the at least one memory module; and
writing the third compressed data to the first compressed portion of the system memory.
-
-
39. The method of claim 1, wherein the system further includes a nonvolatile memory and a virtual memory manager (VMM), the method further comprising:
-
the VMM generating a request for a second data to be loaded into system memory;
receiving said request for the second data;
examining the first compressed portion of the system memory for the second data;
requesting the second data from the nonvolatile memory in response to the second data not being found in the first compressed portion of the system memory;
receiving a second compressed data from a compressed portion of the nonvolatile memory in response to said requesting the second data;
writing the second compressed data to the at least one memory module;
the compression/decompression engine included on the at least one memory module decompressing the first data to form the second data;
reading the second data from the at least one memory module; and
writing the second data to the system memory.
-
-
40. The method of claim 39, further comprising:
writing the second compressed data to the first compressed portion of the system memory.
-
41. The method of claim 39, further comprising:
-
requesting a third data from the nonvolatile memory in response to said request for the second data;
receiving a third compressed data from a compressed portion of the nonvolatile memory in response to said requesting the third data; and
writing the third compressed data to the first compressed portion of the system memory.
-
-
42. The method of claim 1, wherein the system memory comprises a plurality of compressed portions, the method further comprising:
-
reading a second compressed data from a second compressed portion of the system memory;
writing the second compressed data to the at least one memory module;
the compression/decompression engine included on the at least one memory module decompressing the second compressed data to form a second data;
reading the second data from the at least one memory module; and
writing the second data to the system memory.
-
-
43. A method for managing memory in a system including a CPU and one or more memory modules comprising system memory, wherein at least one memory module includes a compression/decompression engine, the method comprising:
-
reading a first compressed data from a first compressed portion of the system memory;
writing the first compressed data to the at least one memory module;
the compression/decompression engine included on the at least one memory module decompressing the first compressed data to form a first data;
reading the first data from the at least one memory module; and
writing the first data to the system memory. - View Dependent Claims (44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56)
wherein the compression/decompression engine comprises an input buffer and an output buffer; wherein writing the first compressed data to the at least one memory module comprises writing the first compressed data to the input buffer;
wherein the compression decompression engine stores the first data in the output buffer; and
wherein reading the first data from the at least one memory module comprises reading the first data from the output buffer.
-
-
45. The method of claim 43, wherein the system further includes a virtual memory manager (VMM), wherein the method further comprises:
-
the VMM requesting the first data to be copied to the system memory;
wherein said reading the first compressed data from the first compressed portion of the system memory, said writing the first compressed data to the at least one memory module, the compression/decompression engine decompressing the first compressed data to form the first data, said reading the first data from the at least one memory module, and said writing the first data to the system memory are performed in response to the VMM requesting the first data to be copied to the system memory.
-
-
46. The method of claim 45,
wherein said reading the first compressed data from the first compressed portion of the system memory, said writing the first compressed data to the at least one memory module, the compression/decompression engine decompressing the first compressed data to form the first data, said reading the first data from the at least one memory module, and said writing the first data to the system memory occur invisibly to the VMM. -
47. The method of claim 43,
wherein the system further includes a driver for managing the compression/decompression engine; - and
wherein said reading the first compressed data from the first compressed portion of the system memory, said writing the first compressed data to the at least one memory module, said reading the first data from the at least one memory module, and said writing the first data to the system memory are performed by the driver.
- and
-
48. The method of claim 43,
wherein the system further includes a virtual memory manager (VMM), a compressed memory manager for managing the first compressed portion of the system memory, and a driver for managing the compression/decompression engine; -
wherein the method further comprises;
the VMM requesting the first data to be copied to the system memory;
the compressed memory manager generating a read request to the driver in response to the VMM requesting the first data to be copied to the system memory; and
the driver performing said reading the first compressed data from the first compressed portion of the system memory, said writing the first compressed data to the at least one memory module, said reading the first data from the at least one memory module, and said writing the first data to the system memory in response to said receiving the read request.
-
-
49. The method of claim 48,
wherein the read request includes a source location of the first compressed data in the first compressed portion of the system memory and a destination location for the first data in the system memory; -
wherein the driver uses the source location during said reading the first compressed data from the first compressed portion of the system memory; and
wherein the driver uses the destination location during said writing the first data to the system memory.
-
-
50. The method of claim 48,
wherein the driver includes a read routine for processing the read request; - and
wherein the compressed memory manager generating the read request to the driver includes the compressed memory manager calling the read routine of the driver.
- and
-
51. The method of claim 43, further comprising:
removing the first compressed data from the first compressed portion of the system memory after said reading the first compressed data from the first compressed portion of the system memory.
-
52. The method of claim 43,
wherein the compression/decompression engine analyzes and decompresses in parallel a plurality of tokens each describing one or more symbols; -
wherein the first compressed data comprises one or more tokens each describing symbols in the first data;
wherein the compression/decompression engine decompressing the first compressed data to form the first data includes;
the compression/decompression engine analyzing and decompressing a plurality of tokens from the first compressed data in parallel to form the first data.
-
-
53. The method of claim 43, wherein the system further includes a nonvolatile memory and a virtual memory manager (VMM), the method further comprising:
-
the VMM generating a request for a second data to be loaded into system memory;
receiving said request for the second data;
examining the first compressed portion of the system memory for the second data;
requesting the second data from the nonvolatile memory in response to the second data not being found in the first compressed portion of the system memory;
receiving the second data from the nonvolatile memory; and
writing the second data to the system memory.
-
-
54. The method of claim 53, further comprising:
-
writing the second data to the at least one memory module;
the compression/decompression engine included on the at least one memory module compressing the second data to form a second compressed data;
reading the second compressed data from the at least one memory module; and
writing the second compressed data to the first compressed portion of the system memory.
-
-
55. The method of claim 53, further comprising:
-
requesting a third data from the nonvolatile memory in response to said request for the second data;
receiving the third data from the nonvolatile memory;
writing the third data to the at least one memory module;
the compression/decompression engine included on the at least one memory module compressing the third data to form a third compressed data;
reading the third compressed data from the at least one memory module; and
writing the third compressed data to the first compressed portion of the system memory.
-
-
56. The method of claim 43, wherein the system memory comprises a plurality of compressed portions, the method further comprising:
-
reading a second compressed data from a second compressed portion of the system memory;
writing the second compressed data to the at least one memory module;
the compression/decompression engine included on the at least one memory module decompressing the second compressed data to form a second data;
reading the second data from the at least one memory module; and
writing the second data to the system memory.
-
-
57. A method for managing memory in a system including a CPU and a plurality of memory modules comprising system memory, wherein each of the plurality of memory modules includes a compression/decompression engine, the method comprising:
-
reading a first data from the system memory;
writing the first data to a first memory module;
the compression/decompression engine included on the first memory module compressing the first data to form a first compressed data;
reading the first compressed data from the first memory module; and
writing the first compressed data to a first compressed portion of the system memory. - View Dependent Claims (58, 59, 60, 61, 62, 63, 64, 65)
writing the first data to the nonvolatile memory substantially concurrently with said writing the first data to the first memory module.
-
-
59. The method of claim 57,
wherein the first compressed portion of the system memory comprises an older first compressed data prior to said writing the first compressed data to the first compressed portion of the system memory; - and
wherein writing the first compressed data to the first compressed portion of the system memory comprises;
replacing the older first compressed data with the first compressed data in the first compressed portion of the system memory.
- and
-
60. The method of claim 57, wherein the system further includes a nonvolatile memory, the method further comprising:
-
reading the first compressed data from the first compressed portion of the system memory;
writing the first compressed data to the first memory module;
the compression/decompression engine included on the first memory module decompressing the first compressed data to form the first data;
reading the first data from the first memory module; and
writing the first data to the nonvolatile memory.
-
-
61. The method of claim 57,
wherein the compression/decompression engine analyzes and compresses a plurality of symbols in parallel; -
wherein the first data comprises symbols;
wherein the compression/decompression engine compressing the first data includes;
the compression/decompression engine analyzing and compressing a plurality of symbols from the first data in parallel to form the first compressed data.
-
-
62. The method of claim 57, further comprising:
-
reading the first compressed data from the first compressed portion of the system memory;
writing the first compressed data to the first memory module;
the compression/decompression engine included on the first memory module decompressing the first compressed data to form the first data;
reading the first data from the first memory module; and
writing the first data to the system memory.
-
-
63. The method of claim 57, wherein the system further includes a nonvolatile memory and a virtual memory manager (VMM), the method further comprising:
-
the VMM generating a request for a second data to be loaded into system memory;
receiving said request for the second data;
examining the first compressed portion of the system memory for the second data;
requesting the second data from the nonvolatile memory in response to the second data not being found in the first compressed portion of the system memory;
receiving the second data from the nonvolatile memory; and
writing the second data to the system memory.
-
-
64. The method of claim 63, further comprising:
-
writing the second data to a second memory module;
the compression/decompression engine included on the second memory module compressing the second data to form a second compressed data;
reading the second compressed data from the second memory module; and
writing the second compressed data to the first compressed portion of the system memory.
-
-
65. The method of claim 62,
wherein the compression/decompression engine analyzes and decompresses in parallel a plurality of tokens each describing one or more symbols; -
wherein the first compressed data comprises tokens each describing one or more symbols in the first data;
wherein the compression/decompression engine decompressing the first compressed data to form the first data includes;
the compression/decompression engine analyzing and decompressing a plurality of tokens from the first compressed data in parallel to form the first data.
-
-
66. A method for managing memory in a system including a CPU, one or more memory modules comprising system memory, and a memory controller including a compression/decompression engine, the method comprising:
-
reading a first data from the system memory;
writing the first data to the compression/decompression engine;
the compression/decompression engine compressing the first data to form a first compressed data;
reading the first compressed data from the compression/decompression engine; and
writing the first compressed data to a first compressed portion of the system memory. - View Dependent Claims (67, 68, 69, 70, 71, 72, 73, 74)
writing the first data to the nonvolatile memory substantially concurrently with said writing the first data to the compression/decompression engine.
-
-
68. The method of claim 66,
wherein the first compressed portion of the system memory comprises an older first compressed data prior to said writing the first compressed data to the first compressed portion of the system memory; - and
wherein writing the first compressed data to the first compressed portion of the system memory comprises;
replacing the older first compressed data with the first compressed data in the first compressed portion of the system memory.
- and
-
69. The method of claim 66, wherein the system further includes a nonvolatile memory, the method further comprising:
-
reading the first compressed data from the first compressed portion of the system memory;
writing the first compressed data to the compression/decompression engine;
the compression/decompression engine decompressing the first compressed data to form the first data;
reading the first data from the compression/decompression engine; and
writing the first data to the nonvolatile memory.
-
-
70. The method of claim 66,
wherein the compression/decompression engine analyzes and compresses a plurality of symbols in parallel; -
wherein the first data comprises symbols;
wherein the compression/decompression engine compressing the first data includes;
the compression/decompression engine analyzing and compressing a plurality of symbols from the first data in parallel to form the first compressed data.
-
-
71. The method of claim 66, further comprising:
-
reading the first compressed data from the first compressed portion of the system memory;
writing the first compressed data to the compression/decompression engine;
the compression/decompression engine decompressing the first compressed data to form the first data;
reading the first data from compression/decompression engine; and
writing the first data to the system memory.
-
-
72. The method of claim 66, wherein the system further includes a nonvolatile memory and a virtual memory manager (VMM), the method further comprising:
-
the VMM generating a request for a second data to be loaded into system memory;
receiving said request for the second data;
examining the first compressed portion of the system memory for the second data;
requesting the second data from the nonvolatile memory in response to the second data not being found in the first compressed portion of the system memory;
receiving the second data from the nonvolatile memory; and
writing the second data to the system memory.
-
-
73. The method of claim 72, further comprising:
-
writing the second data to the compression/decompression engine;
the compression/decompression engine compressing the second data to form a second compressed data;
reading the second compressed data from the compression/decompression engine; and
writing the second compressed data to the first compressed portion of the system memory.
-
-
74. The method of claim 71,
wherein the compression/decompression engine analyzes and decompresses in parallel a plurality of tokens each describing one or more symbols; -
wherein the first compressed data comprises tokens each describing one or more symbols in the first data;
wherein the compression/decompression engine decompressing the first compressed data to form the first data includes;
the compression/decompression engine analyzing and decompressing a plurality of tokens from the first compressed data in parallel to form the first data.
-
-
75. A method for managing memory in a system including a CPU and one or more memory modules comprising system memory, wherein at least one memory module includes a compression/decompression engine, the method comprising:
-
a) reading a first data from the system memory;
b) writing the first data to the at least one memory module;
c) the compression/decompression engine included on the at least one memory module compressing the first data to form a first compressed data;
d) reading the first compressed data from the at least one memory module;
e) comparing a size of the first compressed data to a size of the first data;
f) writing the first data to the first compressed portion of the system memory in response to the size of the first compressed data being greater than or equal to the size of the first data; and
g) writing the first compressed data to a first compressed portion of the system memory in response to the size of the first compressed data being smaller than the size of the first data. - View Dependent Claims (76, 77, 78, 79, 80, 81)
wherein the system further includes a driver for managing the compression/decompression engine; - and
wherein a) through g) are performed by the driver.
-
-
77. The method of claim 75,
wherein the system further includes a virtual memory manager (VMM), a compressed memory manager for managing the first compressed portion of the system memory, and a driver for managing the compression/decompression engine; -
wherein the method further comprises;
the VMM selecting the first data for removal from the system memory;
the compressed memory manager generating a write request to the driver in response to the VMM selecting the first data for removal from the system memory; and
the driver performing a) through g) in response to said receiving the write request.
-
-
78. The method of claim 75, further comprising:
-
reading the first compressed data from the first compressed portion of the system memory;
writing the first compressed data to the at least one memory module;
the compression/decompression engine included on the at least one memory module decompressing the first compressed data to form the first data;
reading the first data from the at least one memory module; and
writing the first data to the system memory.
-
-
79. The method of claim 75, further comprising:
-
reading the first data from the first compressed portion of the system memory; and
writing the first data to the system memory.
-
-
80. The method of claim 75, wherein the system further includes a nonvolatile memory and a virtual memory manager (VMM), the method further comprising:
-
the VMM generating a request for a second data to be loaded into system memory;
receiving said request for the second data;
examining the first compressed portion of the system memory for the second data;
requesting the second data from the nonvolatile memory in response to the second data not being found in the first compressed portion of the system memory;
receiving the second data from the nonvolatile memory; and
writing the second data to the system memory.
-
-
81. The method of claim 80, further comprising:
-
writing the second data to the at least one memory module;
the compression/decompression engine included on the at least one memory module compressing the second data to form a second compressed data;
reading the second compressed data from the at least one memory module; and
writing the second compressed data to the first compressed portion of the system memory.
-
-
82. A method for managing memory in a system including a CPU, a nonvolatile memory, and one or more memory modules comprising system memory, wherein at least one memory module includes a compression/decompression engine, the method comprising:
-
reading a first data from the system memory;
writing the first data to the at least one memory module;
the compression/decompression engine included on the at least one memory module compressing the first data to form a first compressed data;
reading the first compressed data from the at least one memory module; and
writing the first compressed data to a compressed portion of the nonvolatile memory. - View Dependent Claims (83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112)
writing the first data to the nonvolatile memory substantially concurrently with said writing the first data to the at least one memory module.
-
-
84. The method of claim 82, further comprising:
writing the first compressed data to a compressed portion of the system memory.
-
85. The method of claim 82,
wherein the compression/decompression engine comprises an input buffer and an output buffer; -
wherein writing the first data to the at least one memory module comprises writing the first data to the input buffer;
wherein the compression decompression engine stores the first compressed data in the output buffer; and
wherein reading the first compressed data from the at least one memory module comprises reading the first compressed data from the output buffer.
-
-
86. The method of claim 82,
wherein the compressed portion of the nonvolatile memory comprises an older first compressed data prior to said writing the first compressed data to the compressed portion of the nonvolatile memory; - and
wherein writing the first compressed data to the compressed portion of the nonvolatile memory comprises;
replacing the older first compressed data with the first compressed data in the compressed portion of the nonvolatile memory.
- and
-
87. The method of claim 82, further comprising:
-
reading the first compressed data from the compressed portion of the nonvolatile memory;
writing the first compressed data to the at least one memory module;
the compression/decompression engine included on the at least one memory module decompressing the first compressed data to form the first data;
reading the first data from the at least one memory module; and
writing the first data to the nonvolatile memory.
-
-
88. The method of claim 82,
wherein the first data is a page of memory; -
wherein the first compressed data is less than a page of memory; and
wherein the first compressed data written to the compressed portion of the nonvolatile memory occupies a page in the compressed portion of the nonvolatile memory.
-
-
89. The method of claim 82,
wherein the first data is a page of memory; -
wherein the first compressed data is less than a page of memory; and
wherein the first compressed data written to the nonvolatile memory occupies less than a page in the compressed portion of the nonvolatile memory.
-
-
90. The method of claim 82, wherein the system further includes a virtual memory manager (VMW, wherein the method further comprises:
-
the VMM selecting the first data for removal from the system memory;
wherein said reading the first data from the system memory, said writing the first data to the at least one memory module, the compression/decompression engine compressing the first data to form the first compressed data, said reading the first compressed data from the at least one memory module, and said writing the first compressed data to the compressed portion of the nonvolatile memory are performed in response to the VMM selecting the first data for removal from the system memory.
-
-
91. The method of claim 90,
wherein said reading the first data from the system memory, said writing the first data to the at least one memory module, the compression/decompression engine compressing the first data to form the first compressed data, said reading the first compressed data from the at least one memory module, and said writing the first compressed data to the compressed portion of the nonvolatile memory occur invisibly to the VMM. -
92. The method of claim 90, wherein the first data resides in a first section of system memory, the method further comprising:
the VMM releasing the first section of system memory for reuse after said reading the first data from the system memory.
-
93. The method of claim 90, wherein the VMM selecting the first data to be removed from the system memory includes:
the VMM invalidating the first data in the system memory.
-
94. The method of claim 90, wherein the first data in the system memory is dirty, and wherein the VMM selecting the first data to be removed from the system memory includes:
the VMM generating a writeback of the first data from the system memory to the nonvolatile memory.
-
95. The method of claim 82,
wherein the system further includes a driver for managing the compression/decompression engine; - and
wherein said reading the first data from the system memory, said writing the first data to the at least one memory module, said reading the first compressed data from the at least one memory module, and said writing the first compressed data to the compressed portion of the nonvolatile memory are performed by the driver.
- and
-
96. The method of claim 82,
wherein the system further includes a virtual memory manager (VMM), a compressed nonvolatile memory manager for managing the compressed portion of the nonvolatile memory, and a driver for managing the compression/decompression engine; -
wherein the method further comprises;
the VMM selecting the first data for removal from the system memory;
the compressed nonvolatile memory manager generating a write request to the driver in response to the VMM selecting the first data for removal from the system memory; and
the driver performing said reading the first data from the system memory, said writing the first data to the at least one memory module, said reading the first compressed data from the at least one memory module, and said writing the first compressed data to the compressed portion of the nonvolatile memory in response to said receiving the write request.
-
-
97. The method of claim 96,
wherein the write request includes a source location of the first data in the system memory and a destination location for the first compressed data in the compressed portion of the nonvolatile memory; -
wherein the driver uses the source location during said reading the first data from the system memory; and
wherein the driver uses the destination location during said writing the first compressed data to the compressed portion of the nonvolatile memory.
-
-
98. The method of claim 96,
wherein the driver includes a write routine for processing write requests; - and
wherein the compressed nonvolatile memory manager generating the write request to the driver includes the compressed nonvolatile memory manager calling the write routine of the driver.
- and
-
99. The method of claim 82,
wherein the compression/decompression engine analyzes and compresses a plurality of symbols in parallel; -
wherein the first data comprises symbols;
wherein the compression/decompression engine compressing the first data includes;
the compression/decompression engine analyzing and compressing a plurality of symbols from the first data in parallel to form the first compressed data.
-
-
100. The method of claim 82, further comprising:
-
reading the first compressed data from the compressed portion of the nonvolatile memory;
writing the first compressed data to the at least one memory module;
the compression/decompression engine included on the at least one memory module decompressing the first compressed data to form the first data;
reading the first data from the at least one memory module; and
writing the first data to the system memory.
-
-
101. The method of claim 100, further comprising:
writing the first compressed data to a compressed portion of the system memory substantially concurrently with said writing the first compressed data to the at least one memory module.
-
102. The method of claim 100,
wherein the compression/decompression engine comprises an input buffer and an output buffer; -
wherein writing the first compressed data to the at least one memory module comprises writing the first compressed data to the input buffer;
wherein the compression decompression engine stores the first data in the output buffer; and
wherein reading the first data from the at least one memory module comprises reading the first data from the output buffer.
-
-
103. The method of claim 100, wherein the system further includes a virtual memory manager (VMM), wherein the method further comprises:
-
the VMM requesting the first data to be copied to the system memory;
wherein said reading the first compressed data from the compressed portion of the nonvolatile memory, said writing the first compressed data to the at least one memory module, the compression/decompression engine decompressing the first compressed data to form the first data, said reading the first data from the at least one memory module, and said writing the first data to the system memory are performed in response to the VMM requesting the first data to be copied to the system memory.
-
-
104. The method of claim 103,
wherein said reading the first compressed data from the compressed portion of the nonvolatile memory, said writing the first compressed data to the at least one memory module, the compression/decompression engine decompressing the first compressed data to form the first data, said reading the first data from the at least one memory module, and said writing the first data to the system memory occur invisibly to the VMM. -
105. The method of claim 100,
wherein the system further includes a driver for managing the compression/decompression engine; - and
wherein said reading the first compressed data from the compressed portion of the nonvolatile memory, said writing the first compressed data to the at least one memory module, said reading the first data from the at least one memory module, and said writing the first data to the system memory are performed by the driver.
- and
-
106. The method of claim 100,
wherein the system further includes a virtual memory manager (VMM), a compressed nonvolatile memory manager for managing the compressed portion of the nonvolatile memory, and a driver for managing the compression/decompression engine; -
wherein the method further comprises;
the VMM requesting the first data to be copied to the system memory;
the compressed nonvolatile memory manager generating a read request to the driver in response to the VMM requesting the first data to be copied to the system memory; and
the driver performing said reading the first compressed data from the compressed portion of the nonvolatile memory, said writing the first compressed data to the at least one memory module, said reading the first data from the at least one memory module, and said writing the first data to the system memory in response to said receiving the read request.
-
-
107. The method of claim 106,
wherein the read request includes a source location of the first compressed data in the compressed portion of the nonvolatile memory and a destination location for the first data in the system memory; -
wherein the driver uses the source location during said reading the first compressed data from the compressed portion of the nonvolatile memory; and
wherein the driver uses the destination location during said writing the first data to the system memory.
-
-
108. The method of claim 106,
wherein the driver includes a read routine for processing the read request; - and
wherein the compressed nonvolatile memory manager generating the read request to the driver includes the compressed nonvolatile memory manager calling the read routine of the driver.
- and
-
109. The method of claim 100,
wherein the compression/decompression engine analyzes and decompresses in parallel a plurality of tokens each describing one or more symbols; -
wherein the first compressed data comprises tokens each describing one or more symbols in the first data;
wherein the compression/decompression engine decompressing the first compressed data to form the first data includes;
the compression/decompression engine analyzing and decompressing a plurality of tokens from the first compressed data in parallel to form the first data.
-
-
110. The method of claim 82, wherein the system further includes a virtual memory manager (VMM), the method further comprising:
-
the VMM generating a request for a second data to be loaded into system memory;
receiving said request for the second data;
examining the compressed portion of the nonvolatile memory for the second data;
requesting the second data from the nonvolatile memory in response to the second data not being found in the compressed portion of the nonvolatile memory;
receiving the second data from the nonvolatile memory; and
writing the second data to the system memory.
-
-
111. The method of claim 110, further comprising:
-
writing the second data to the at least one memory module;
the compression/decompression engine included on the at least one memory module compressing the second data to form a second compressed data;
reading the second compressed data from the at least one memory module; and
writing the second compressed data to the compressed portion of the nonvolatile memory.
-
-
112. The method of claim 110, further comprising:
writing the second compressed data to a compressed portion of the at least one memory module.
-
113. A method for managing memory in a system including a CPU, a nonvolatile memory, and one or more memory modules comprising system memory, wherein at least one memory module includes a compression/decompression engine, the method comprising:
-
reading a first compressed data from a compressed portion of the nonvolatile memory;
writing the first compressed data to the at least one memory module;
the compression/decompression engine included on the at least one memory module decompressing the first compressed data to form a first data;
reading the first data from the at least one memory module; and
writing the first data to the system memory. - View Dependent Claims (114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125)
wherein the compression/decompression engine comprises an input buffer and an output buffer; wherein writing the first compressed data to the at least one memory module comprises writing the first compressed data to the input buffer;
wherein the compression decompression engine stores the first data in the output buffer; and
wherein reading the first data from the at least one memory module comprises reading the first data from the output buffer.
-
-
115. The method of claim 113,
wherein the first data is a page of memory; -
wherein the first compressed data is less than a page of memory; and
wherein the first compressed data read from the compressed portion of the nonvolatile memory occupies a page in the compressed portion of the nonvolatile memory.
-
-
116. The method of claim 113,
wherein the first data is a page of memory; -
wherein the first compressed data is less than a page of memory; and
wherein the first compressed data read from the nonvolatile memory occupies less than a page in the compressed portion of the nonvolatile memory.
-
-
117. The method of claim 113, wherein the system further includes a virtual memory manager (VMM), wherein the method further comprises:
-
the VMM requesting the first data to be copied to the system memory;
wherein said reading the first compressed data from the compressed portion of the nonvolatile memory, said writing the first compressed data to the at least one memory module, the compression/decompression engine decompressing the first compressed data to form the first data, said reading the first data from the at least one memory module, and said writing the first data to the system memory are performed in response to the VMM requesting the first data to be copied to the system memory.
-
-
118. The method of claim 117,
wherein said reading the first compressed data from the compressed portion of the nonvolatile memory, said writing the first compressed data to the at least one memory module, the compression/decompression engine decompressing the first compressed data to form the first data, said reading the first data from the at least one memory module, and said writing the first data to the system memory occur invisibly to the VMM. -
119. The method of claim 113,
wherein the system further includes a driver for managing the compression/decompression engine; - and
wherein said reading the first compressed data from the compressed portion of the nonvolatile memory, said writing the first compressed data to the at least one memory module, said reading the first data from the at least one memory module, and said writing the first data to the system memory are performed by the driver.
- and
-
120. The method of claim 113,
wherein the system further includes a virtual memory manager (VMM), a compressed nonvolatile memory manager for managing the compressed portion of the nonvolatile memory, and a driver for managing the compression/decompression engine; -
wherein the method further comprises;
the VMM requesting the first data to be copied to the system memory;
the compressed nonvolatile memory manager generating a read request to the driver in response to the VMM requesting the first data to be copied to the system memory; and
the driver performing said reading the first compressed data from the compressed portion of the nonvolatile memory, said writing the first compressed data to the at least one memory module, said reading the first data from the at least one memory module, and said writing the first data to the system memory in response to said receiving the read request.
-
-
121. The method of claim 120,
wherein the read request includes a source location of the first compressed data in the compressed portion of the nonvolatile memory and a destination location for the first data in the system memory; -
wherein the driver uses the source location during said reading the first compressed data from the compressed portion of the nonvolatile memory; and
wherein the driver uses the destination location during said writing the first data to the system memory.
-
-
122. The method of claim 120,
wherein the driver includes a read routine for processing the read request; - and
wherein the compressed nonvolatile memory manager generating the read request to the driver includes the compressed nonvolatile memory manager calling the read routine of the driver.
- and
-
123. The method of claim 113,
wherein the compression/decompression engine analyzes and decompresses in parallel a plurality of tokens each describing one or more symbols; -
wherein the first compressed data comprises tokens each describing one or more symbols in the first data;
wherein the compression/decompression engine decompressing the first compressed data to form the first data includes;
the compression/decompression engine analyzing and decompressing a plurality of tokens from the first compressed data in parallel to form the first data.
-
-
124. The method of claim 113, wherein the system further includes a virtual memory manager (VMM), the method further comprising:
-
the VMM generating a request for a second data to be loaded into system memory;
receiving said request for the second data;
examining the compressed portion of the nonvolatile memory for the second data;
requesting the second data from the nonvolatile memory in response to the second data not being found in the compressed portion of the nonvolatile memory;
receiving the second data from the nonvolatile memory; and
writing the second data to the system memory.
-
-
125. The method of claim 124, further comprising:
-
writing the second data to the at least one memory module;
the compression/decompression engine included on the at least one memory module compressing the second data to form a second compressed data;
reading the second compressed data from the at least one memory module; and
writing the second compressed data to the compressed portion of the nonvolatile memory.
-
-
126. A method for managing memory in a system including a CPU, a nonvolatile memory, and a plurality of memory modules comprising system memory, wherein each of the plurality of memory modules includes a compression/decompression engine, the method comprising:
-
reading a first data from the system memory;
writing the first data to a first memory module;
the compression/decompression engine included on the first memory module compressing the first data to form a first compressed data;
reading the first compressed data from the first memory module; and
writing the first compressed data to a compressed portion of the nonvolatile memory. - View Dependent Claims (127, 128, 129, 130, 131, 132, 133, 134)
writing the first data to the nonvolatile memory substantially concurrently with said writing the first data to the first memory module.
-
-
128. The method of claim 126,
wherein the compressed portion of the nonvolatile memory comprises an older first compressed data prior to said writing the first compressed data to the compressed portion of the nonvolatile memory; - and
wherein writing the first compressed data to the compressed portion of the nonvolatile memory comprises;
replacing the older first compressed data with the first compressed data in the compressed portion of the nonvolatile memory.
- and
-
129. The method of claim 126, further comprising:
-
reading the first compressed data from the compressed portion of the nonvolatile memory;
writing the first compressed data to the first memory module;
the compression/decompression engine included on the first memory module decompressing the first compressed data to form the first data;
reading the first data from the first memory module; and
writing the first data to the nonvolatile memory.
-
-
130. The method of claim 126,
wherein the compression/decompression engine analyzes and compresses a plurality of symbols in parallel; -
wherein the first data comprises symbols;
wherein the compression/decompression engine compressing the first data includes;
the compression/decompression engine analyzing and compressing a plurality of symbols from the first data in parallel to form the first compressed data.
-
-
131. The method of claim 126, further comprising:
-
reading the first compressed data from the compressed portion of the nonvolatile memory;
writing the first compressed data to the first memory module;
the compression/decompression engine included on the first memory module decompressing the first compressed data to form the first data;
reading the first data from the first memory module; and
writing the first data to the system memory.
-
-
132. The method of claim 126, wherein the system further includes a virtual memory manager (VMM), the method further comprising:
-
the VMM generating a request for a second data to be loaded into system memory;
receiving said request for the second data;
examining the compressed portion of the nonvolatile memory for the second data;
requesting the second data from the nonvolatile memory in response to the second data not being found in the compressed portion of the nonvolatile memory;
receiving the second data from the nonvolatile memory; and
writing the second data to the system memory.
-
-
133. The method of claim 132, further comprising:
-
writing the second data to a second memory module;
the compression/decompression engine included on the second memory module compressing the second data to form a second compressed data;
reading the second compressed data from the second memory module; and
writing the second compressed data to the compressed portion of the nonvolatile memory.
-
-
134. The method of claim 126,
wherein the compression/decompression engine analyzes and decompresses in parallel a plurality of tokens each describing one or more symbols; -
wherein the first compressed data comprises tokens each describing one or more symbols in the first data;
wherein the compression/decompression engine decompressing the first compressed data to form the first data includes;
the compression/decompression engine analyzing and decompressing a plurality of tokens from the first compressed data in parallel to form the first data.
-
-
135. A method for managing memory in a system including a CPU, a nonvolatile memory, one or more memory modules comprising system memory, and a memory controller including a compression/decompression engine, the method comprising:
-
reading a first data from the system memory;
writing the first data to the compression/decompression engine;
the compression/decompression engine compressing the first data to form a first compressed data;
reading the first compressed data from the compression/decompression engine; and
writing the first compressed data to a compressed portion of the nonvolatile memory. - View Dependent Claims (136, 137, 138, 139, 140, 141, 142, 143)
writing the first data to the nonvolatile memory substantially concurrently with said writing the first data to the compression/decompression engine.
-
-
137. The method of claim 135,
wherein the compressed portion of the nonvolatile memory comprises an older first compressed data prior to said writing the first compressed data to the compressed portion of the nonvolatile memory; - and
wherein writing the first compressed data to the compressed portion of the nonvolatile memory comprises;
replacing the older first compressed data with the first compressed data in the compressed portion of the nonvolatile memory.
- and
-
138. The method of claim 135, further comprising:
-
reading the first compressed data from the compressed portion of the nonvolatile memory;
writing the first compressed data to the compression/decompression engine;
the compression/decompression engine decompressing the first compressed data to form the first data;
reading the first data from the compression/decompression engine; and
writing the first data to the nonvolatile memory.
-
-
139. The method of claim 135,
wherein the compression/decompression engine analyzes and compresses a plurality of symbols in parallel; -
wherein the first data comprises symbols;
wherein the compression/decompression engine compressing the first data includes;
the compression/decompression engine analyzing and compressing a plurality of symbols from the first data in parallel to form the first compressed data.
-
-
140. The method of claim 135, further comprising:
-
reading the first compressed data from the compressed portion of the nonvolatile memory;
writing the first compressed data to the compression/decompression engine;
the compression/decompression engine decompressing the first compressed data to form the first data;
reading the first data from compression/decompression engine; and
writing the first data to the system memory.
-
-
141. The method of claim 135, wherein the system further includes a nonvolatile memory and a virtual memory manager (VMM), the method further comprising:
-
the VMM generating a request for a second data to be loaded into system memory;
receiving said request for the second data;
examining the compressed portion of the nonvolatile memory for the second data;
requesting the second data from the nonvolatile memory in response to the second data not being found in the compressed portion of the nonvolatile memory;
receiving the second data from the nonvolatile memory; and
writing the second data to the system memory.
-
-
142. The method of claim 141, further comprising:
-
writing the second data to the compression/decompression engine;
the compression/decompression engine compressing the second data to form a second compressed data;
reading the second compressed data from the compression/decompression engine; and
writing the second compressed data to the compressed portion of the nonvolatile memory.
-
-
143. The method of claim 140,
wherein the compression/decompression engine analyzes and decompresses in parallel a plurality of tokens each describing one or more symbols; -
wherein the first compressed data comprises tokens each describing one or more symbols in the first data;
wherein the compression/decompression engine decompressing the first compressed data to form the first data includes;
the compression/decompression engine analyzing and decompressing a plurality of tokens from the first compressed data in parallel to form the first data.
-
Specification