System and method for improving cache performance

A method, computer program product, and computing system for identifying compressed content within a first cache system to a data array associated with the first cache system. Related content is located on the data array that is associated with the compressed content on the first cache system and it is determined whether the related content on the data array is compressible.

TECHNICAL FIELD

This disclosure relates to cache memory systems and, more particularly, to systems and methods for improving the performance of cache memory systems.

BACKGROUND

Storing and safeguarding electronic content is of paramount importance in modern business. Accordingly, various systems may be employed to protect such electronic content.

The use of solid-state storage devices is increasing in popularity. A solid state storage device is a content storage device that uses solid-state memory to store persistent content. A solid-state storage device may emulate (and therefore replace) a conventional hard disk drive. Additionally/alternatively, a solid state storage device may be used within a cache memory system. With no moving parts, a solid-state storage device largely eliminates (or greatly reduces) seek time, latency and other electromechanical delays and failures associated with a conventional hard disk drive.

SUMMARY OF DISCLOSURE

In a first implementation, a computer-implemented method includes identifying compressed content within a first cache system to a data array associated with the first cache system. Related content is located on the data array that is associated with the compressed content on the first cache system and it is determined whether the related content on the data array is compressible.

One or more of the following features may be included. The first cache system may be included within an application server. The first cache system may be included within a controller of a data array. The related content may be compressed on the data array.

Identifying the compressed content to the data array may include providing the compression ratio of the compressed content to the data array. The related content may be compressed on the data array if the compression ratio exceeds a predefine threshold.

The first cache system may be a content-aware cache system. The data array may include one or more electro-mechanical hard disk drives

In another implementation, a computer program product resides on a computer readable medium that has a plurality of instructions stored on it. When executed by a processor, the instructions cause the processor to perform operations including identifying compressed content within a first cache system to a data array associated with the first cache system. Related content is located on the data array that is associated with the compressed content on the first cache system and it is determined whether the related content on the data array is compressible.

One or more of the following features may be included. The first cache system may be included within an application server. The first cache system may be included within a controller of a data array. The related content may be compressed on the data array.

Identifying the compressed content to the data array may include providing the compression ratio of the compressed content to the data array. The related content may be compressed on the data array if the compression ratio exceeds a predefine threshold.

The first cache system may be a content-aware cache system. The data array may include one or more electro-mechanical hard disk drives

In another implementation, a computing system includes at least one processor and at least one memory architecture coupled with the at least one processor, wherein the computing system is configured to perform operations including identifying compressed content within a first cache system to a data array associated with the first cache system. Related content is located on the data array that is associated with the compressed content on the first cache system and it is determined whether the related content on the data array is compressible.

One or more of the following features may be included. The first cache system may be included within an application server. The first cache system may be included within a controller of a data array. The related content may be compressed on the data array.

Identifying the compressed content to the data array may include providing the compression ratio of the compressed content to the data array. The related content may be compressed on the data array if the compression ratio exceeds a predefine threshold.

The first cache system may be a content-aware cache system. The data array may include one or more electro-mechanical hard disk drives

DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS

General Information

Referring toFIG. 1, there is shown data caching process10that may reside on and may be executed by storage system12, which may be connected to network14(e.g., the Internet or a local area network). Examples of storage system12may include, but are not limited to: a Network Attached Storage (NAS) system, a Storage Area Network (SAN), a personal computer with a memory system, a server computer with a memory system, and a cloud-based device with a memory system.

As is known in the art, a SAN may include one or more of a personal computer, a server computer, a series of server computers, a mini computer, a mainframe computer, a RAID device and a NAS system. The various components of storage system12may execute one or more operating systems, examples of which may include but are not limited to: Microsoft Windows XP Server™; Novell Netware™; Redhat Linux™, Unix, or a custom operating system, for example.

The instruction sets and subroutines of data caching process10, which may be stored on storage device16included within storage system12, may be executed by one or more processors (not shown) and one or more memory architectures (not shown) included within storage system12. Storage device16may include but is not limited to: a hard disk drive; a tape drive; an optical drive; a RAID device; a random access memory (RAM); a read-only memory (ROM); and all forms of flash memory storage devices.

Various data requests (e.g. data request20) may be sent from client applications22,24,26,28to storage system12. Examples of data request20may include but are not limited to data write requests (i.e. a request that content be written to storage system12) and data read requests (i.e. a request that content be read from storage system12).

The instruction sets and subroutines of client applications22,24,26,28, which may be stored on storage devices30,32,34,36(respectively) coupled to client electronic devices38,40,42,44(respectively), may be executed by one or more processors (not shown) and one or more memory architectures (not shown) incorporated into client electronic devices38,40,42,44(respectively). Storage devices30,32,34,36may include but are not limited to: hard disk drives; tape drives; optical drives; RAID devices; random access memories (RAM); read-only memories (ROM), and all forms of flash memory storage devices. Examples of client electronic devices38,40,42,44may include, but are not limited to, personal computer38, laptop computer40, personal digital assistant42, notebook computer44, a server (not shown), a data-enabled, cellular telephone (not shown), and a dedicated network device (not shown).

Client electronic devices38,40,42,44may each execute an operating system, examples of which may include but are not limited to Microsoft Windows™, Microsoft Windows CE™, Redhat Linux™, or a custom operating system.

Users46,48,50,52may access storage system12directly through network14or through secondary network18. Further, storage system12may be connected to network14through secondary network18, as illustrated with link line54.

The Data Caching Process:

For the following discussion, client application22is going to be described for illustrative purposes. However, this is not intended to be a limitation of this disclosure, as other client applications (e.g., client applications24,26,28) may be equally utilized.

For illustrative purposes, storage system12will be described as being a network-based storage system that includes a plurality of electro-mechanical backend storage devices. However, this is for illustrative purposes only and is not intended to be a limitation of this disclosure, as other configurations are possible and are considered to be within the scope of this disclosure. For example and as discussed above, storage system12may be a personal computer that includes a single electro-mechanical storage device.

Referring also toFIG. 2, storage system12may include a server computer/controller (e.g. server computer/controller100), and a plurality of storage targets T1-n(e.g. storage targets102,104,106,108). Storage targets102,104,106,108may be configured to provide various levels of performance and/or high availability. For example, one or more of storage targets102,104,106,108may be configured as a RAID 0 array, in which data is striped across storage targets. By striping data across a plurality of storage targets, improved performance may be realized. However, RAID 0 arrays do not provide a level of high availability. Accordingly, one or more of storage targets102,104,106,108may be configured as a RAID 1 array, in which data is mirrored between storage targets. By mirroring data between storage targets, a level of high availability is achieved as multiple copies of the data are stored within storage system12.

While storage targets102,104,106,108are discussed above as being configured in a RAID 0 or RAID 1 array, this is for illustrative purposes only and is not intended to be a limitation of this disclosure, as other configurations are possible. For example, storage targets102,104,106,108may be configured as a RAID 3, RAID 4, RAID 5 or RAID 6 array.

While in this particular example, storage system12is shown to include four storage targets (e.g. storage targets102,104,106,108), this is for illustrative purposes only and is not intended to be a limitation of this disclosure. Specifically, the actual number of storage targets may be increased or decreased depending upon e.g. the level of redundancy/performance/capacity required.

Storage system12may also include one or more coded targets110. As is known in the art, a coded target may be used to store coded data that may allow for the regeneration of data lost/corrupted on one or more of storage targets102,104,106,108. An example of such a coded target may include but is not limited to a hard disk drive that is used to store parity data within a RAID array.

While in this particular example, storage system12is shown to include one coded target (e.g., coded target110), this is for illustrative purposes only and is not intended to be a limitation of this disclosure. Specifically, the actual number of coded targets may be increased or decreased depending upon e.g. the level of redundancy/performance/capacity required.

Examples of storage targets102,104,106,108and coded target110may include one or more electro-mechanical hard disk drives, wherein a combination of storage targets102,104,106,108and coded target110may form non-volatile, electro-mechanical memory system112.

The manner in which storage system12is implemented may vary depending upon e.g. the level of redundancy/performance/capacity required. For example, storage system12may be a RAID device in which server computer/controller100is a RAID controller card and storage targets102,104,106,108and/or coded target110are individual “hot-swappable” hard disk drives. An example of such a RAID device may include but is not limited to an NAS device. Alternatively, storage system12may be configured as a SAN, in which server computer/controller100may be e.g., a server computer and each of storage targets102,104,106,108and/or coded target110may be a RAID device and/or computer-based hard disk drive. Further still, one or more of storage targets102,104,106,108and/or coded target110may be a SAN.

In the event that storage system12is configured as a SAN, the various components of storage system12(e.g. server computer/controller100, storage targets102,104,106,108, and coded target110) may be coupled using network infrastructure114, examples of which may include but are not limited to an Ethernet (e.g., Layer 2 or Layer 3) network, a fiber channel network, an InfiniBand network, or any other circuit switched/packet switched network.

Storage system12may execute all or a portion of data caching process10. The instruction sets and subroutines of data caching process10, which may be stored on a storage device (e.g., storage device16) coupled to server computer/controller100, may be executed by one or more processors (not shown) and one or more memory architectures (not shown) included within server computer/controller100. Storage device16may include but is not limited to: a hard disk drive; a tape drive; an optical drive; a RAID device; a random access memory (RAM); a read-only memory (ROM); and all forms of flash memory storage devices.

As discussed above, various data requests (e.g. data request20) may be generated. For example, these data requests may be sent from client applications22,24,26,28to storage system12. Additionally/alternatively and when server computer/controller100is configured as an application server, these data requests may be internally generated within server computer/controller100. Examples of data request20may include but are not limited to data write request116(i.e. a request that content118be written to storage system12) and data read request120(i.e. a request that content118be read from storage system12).

Server computer/controller100may include input-output logic122(e.g., a network interface card or a Host Bus Adaptor (HBA)), processing logic124, and first cache system126. Examples of first cache system126may include but are not limited to a volatile, solid-state, cache memory system (e.g., a dynamic RAM cache memory system) and/or a non-volatile, solid-state, cache memory system (e.g., a flash-based, cache memory system).

During operation of server computer/controller100, content118to be written to storage system12may be received by input-output logic122(e.g. from network14and/or network18) and processed by processing logic124. Additionally/alternatively and when server computer/controller100is configured as an application server, content118to be written to storage system12may be internally generated by server computer/controller100. As will be discussed below in greater detail, processing logic124may initially store content118within first cache system126.

Depending on the manner in which first cache system126is configured, processing logic124may immediately write content118to second cache system128/non-volatile, electro-mechanical memory system112(if first cache system126is configured as a write-through cache) or may subsequently write content118to second cache system128/non-volatile, electro-mechanical memory system112(if first cache system126is configured as a write-back cache). Additionally and in certain configurations, processing logic124may calculate and store coded data on coded target110(included within non-volatile, electromechanical memory system112) that may allow for the regeneration of data lost/corrupted on one or more of storage targets102,104,106,108. For example, if processing logic124was included within a RAID controller card or a NAS/SAN controller, processing logic124may calculate and store coded data on coded target110. However, if processing logic124was included within e.g., an application server, data array130may calculate and store coded data on coded target110.

Examples of second cache system128may include but are not limited to a volatile, solid-state, cache memory system (e.g., a dynamic RAM cache memory system) and/or a non-volatile, solid-state, cache memory system (e.g., a flash-based, cache memory system).

The combination of second cache system128and non-volatile, electromechanical memory system112may form data array130, wherein first cache system126may be sized so that the number of times that data array130is accessed may be reduced. Accordingly, by sizing first cache system126so that first cache system126retains a quantity of data sufficient to satisfy a significant quantity of data requests (e.g., data request20), the overall performance of storage system12may be enhanced. As will be described below in greater detail, first cache system126may be a content-aware cache system.

Further, second cache system128within data array130may be sized so that the number of times that non-volatile, electromechanical memory system112is accessed may be reduced. Accordingly, by sizing second cache system128so that second cache system128retains a quantity of data sufficient to satisfy a significant quantity of data requests (e.g., data request20), the overall performance of storage system12may be enhanced. As will be described below in greater detail, second cache system128may be a content-aware cache system.

As discussed above, the instruction sets and subroutines of data caching process10, which may be stored on storage device16included within storage system12, may be executed by one or more processors (not shown) and one or more memory architectures (not shown) included within storage system12. Accordingly, in addition to being executed on server computer/controller100, some or all of the instruction sets and subroutines of data caching process10may be executed by one or more processors (not shown) and one or more memory architectures (not shown) included within data array130.

Referring also toFIGS. 3-4, data request20(e.g. data read request116and/or data write request120) may be processed by server computer/controller100to extract pertinent information concerning these data requests.

When data request20is a data write request (e.g., write request116), write request116may include content118to be written to data array130. Additionally, write request116may include a storage address200that defines the intended storage location within data array130at which content118is to be stored. For example, storage address200may define a particular logical unit within data array130(e.g., a LUN or Logical Unit Number) and a particular storage address within that specific logical unit (e.g., an LBA or Logical Block Address) for storing content118.

Concerning read request120, these requests do not include any content to be written to data array130, as these are read requests and concern content to be read from data array130. Read request120may include a storage address202that defines the storage location within data array130from which content is to be retrieved. For example, storage address202may define a particular logical unit within data array130(e.g., a LUN or Logical Unit Number) and a particular storage address within that specific logical unit (e.g., an LBA or Logical Block Address) for retrieving the content sought from data array130.

As will be discussed below in greater detail and referring also toFIG. 5, data caching process10may maintain content directory250, which may be used to locate various pieces of content within first cache system126. In one particular embodiment of content directory250, content directory250may include plurality of entries252, wherein each of these entries may identify: data array storage address200/202(e.g. a logical storage unit and a storage address at which a specific piece of previously-written content is located within data array130); first cache address254(e.g., the location within first cache system126at which the specific piece of previously-written content is also located), and content identifier256for the specific piece of previously-written content. Accordingly, content directory250may identify the location of specific pieces of content included within first cache system126and their corresponding pieces of data within data array130, as well as a content identifier that uniquely identifies the specific piece of content.

Content identifier256may be used in a content-aware caching system and may, specifically, be a mathematical representation of the specific piece of previously-written content that may allow e.g. server computer/controller100to quickly determine whether two pieces of previously-written content are identical, as identical pieces of content would have identical content identifiers. In one particular embodiment, content identifier256may be a hash function (e.g., a cryptographic hash) of the previously-written content. Accordingly, through the use of a content-aware caching system, duplicate data entries within first cache system126and/or second cache system128may be quickly identified, avoided, and/or eliminated.

As is known in the art, a hash function is an algorithm/subroutine that maps large data sets to smaller data sets. The values returned by a hash function are typically called hash values, hash codes, hash sums, checksums or simply hashes. Hash functions are mostly used to accelerate table lookup or data comparison tasks such as e.g., finding items in a database and detecting duplicated or similar records in a large file.

General Read Request Processing:

During operation of server computer/controller100, data caching process10may receive read request120on first cache system126, wherein read request120identifies previously-written content (as defined by storage address202) included within data array130.

For example, assume that user46is using client application22to access data (i.e. content132) that is currently being stored on data array130. Accordingly, client application22may generate read request120which, as discussed above, may define a particular logical unit within data array130(e.g., a LUN or Logical Unit Number) and a particular storage address within that specific logical unit (e.g., an LBA or Logical Block Address) for retrieving content132sought from data array130by client application22.

Assume that read request120defines LUN0/LBA5 as the location of content132within data array130. Upon receiving read request120, data caching process10may compare the location of content132within data array130(namely LUN0/LBA5) with each of the plurality of entries252defined within content directory250to determine if a copy of content132is locally available (i.e., cached) within first cache system126. If LUN0/LBA5 was defined within content directory250(meaning that a local cached copy of content132is present/available within first cache system126), that particular entry would also define a corresponding first cache address (e.g. first cache address254) within first cache system126at which content132would be locally-available and retrievable from the first cache system126. Conversely, in the event that LUN0/LBA5 is not defined within content directory250(meaning that a local cached copy of content132is not present/available within first cache system126), data caching process10may need to obtain content132identified in read request120from data array130.

In this particular example, since LUN0/LBA5 is not defined within content directory250, a local cached copy of content132is not present/available within first cache system126and data caching process10will be need to obtain content132from data array130.

Once content132is obtained by data caching process10from data array130, data caching process10may store content132within first cache system126and may provide content132to client application22, thus satisfying read request120. Additionally, content directory250may be amended by data caching process10to include an entry (e.g., entry258) that defines the data array storage address200/202(e.g. LUN0/LBA5); first cache address254(e.g., 111110), and content identifier256(e.g., ablccba) for content132.

As discussed above, data array130may include second cache system128. Accordingly, data caching process10may execute the above-described functionality with respect to second cache system128.

General Write Request Processing:

During operation of server computer/controller100, data caching process10may receive write request116on first cache system126, wherein write request116identifies new content (e.g., content118) to be written to data array130.

For example, assume that user46is using client application22to create content (i.e. content118) that is to be stored on data array130. Accordingly, client application22may generate write request116which, as discussed above, may define a particular logical unit within data array130(e.g., a LUN or Logical Unit Number) and a particular storage address within that specific logical unit (e.g., an LBA or Logical Block Address) for storing content118within data array130.

As discussed above and depending on the manner in which first cache system126is configured, data caching process10may immediately write content118to data array130(if first cache system126is configured as a write-through cache) or may subsequently write content118to data array130(if first cache system126is configured as a write-back cache).

Assuming that first cache system126in this example is configured as a write-through cache, data caching process10may immediately write content118to LUN0/LBA0 within data array130(as defined within write request116). Additionally, data caching process10may locally-store content118within first cache system126and may amend content directory250to include an entry (e.g., entry260) that defines the data array storage address200/202(e.g. LUN0/LBA0); first cache address254(e.g., 001011), and content identifier256(e.g., acdfcla) for content118.

As discussed above, data array130may include second cache system128. Accordingly, data caching process10may execute the above described functionality with respect to second cache system128.

Content Aware Caching

As discussed above, content directory250may include a content identifier256that may be used in a content-aware caching system. A typical example of content identifier256may include but is not limited to a hash function of the content that content identifier256is associated with. Accordingly, through the use of content identifier256within a content-aware caching system, duplicate data entries within first cache system126and/or second cache system128may be quickly identified, avoided, and/or eliminated.

For example, upon receiving write request116and content118, data caching process10may generate content identifier256for content118. As discussed above, content identifier256generated for the content (i.e., content118) identified within write request116may be a hash function (e.g., a cryptographic hash) of content118.

Assume for illustrative purposes that write request116includes storage address200that defines the intended storage location for content118as LUN0/LBA0. Accordingly, upon receiving write request116, data caching process10may generate content identifier256for content118. Assume for illustrative purposes that data caching process10generates a hash of content118, resulting in the generation of content identifier256(namely hash value acdfcla).

This newly-generated content identifier256(i.e. acdfcla) associated with content118may be compared to each of the other content identifiers (namely abalaby, alazchb, abalabz, alazcha) included within content directory250for first cache system126to determine if the newly-generated content identifier256(i.e. acdfcla) matches any of the other content identifiers (namely abalaby, alazchb, abalabz, alazcha) included within content directory250.

As discussed above, each entry of the plurality of entries252included within content directory250is associated with a unique piece of content included within (in this example) first cache system126. Accordingly, each unique content identifier included within content directory250may be associated with a unique piece of content written to (in this example) first cache system126.

If, when performing this comparison, data caching process10does not identify a content identifier (i.e., abalaby, alazchb, abalabz, alazcha) within content directory250that matches the above-described, newly-generated content identifier (i.e. acdfcla), data caching process10may write content118to (in this example) first cache system126and may provide a copy of content118to data array130for storage within data array130. Additionally, data caching process10may modify content directory250to include a new entry (i.e., entry260) that defines the newly-generated content identifier (i.e. acdfcla), the location of content118within (in this example) first cache system126(i.e., 001011), and the location of content118within data array130(i.e., LUN0/LBA0).

If, when performing this comparison, data caching process10identified a content identifier within content directory250that matched the above-described, newly-generated content identifier (i.e. acdfcla), data caching process10would perform differently.

To illustrate how data caching process10would react if it found a matching content identifier, further assume for illustrative purposes that a second write request (i.e., write request116′) includes storage address200′ that defines the intended storage location for content118′ as LUN0/LBA2. Accordingly, upon receiving write request116′, data caching process10may generate content identifier256for content118′. Assume for illustrative purposes that data caching process10generates a hash of content118′, resulting in the generation of content identifier256(namely hash value alazcha).

This newly-generated content identifier256(i.e. alazcha) associated with content118′ may be compared to each of the other content identifiers (namely abalaby, alazchb, abalabz, alazcha) included within content directory250for (in this example) first cache system126to determine if the newly-generated content identifier256(i.e. alazcha) matches any of the other content identifiers (namely abalaby, alazchb, abalabz, alazcha) included within content directory250.

If, when performing this comparison, data caching process10does identify a content identifier (namely alazcha) within content directory250that matches the above-described, newly-generated content identifier (i.e. alazcha), data caching process10may perform a couple of functions.

For example, data caching process10may modify the entry (i.e., entry262) within content directory250that is associated with the matching content identifier (i.e., alazcha) to include storage address200′ that defines the intended storage location for content118′ (i.e., LUN0/LBA2 within data array130), thus generating modified entry262′. Accordingly, modified entry262′ identifies that the pieces of content that are currently stored at LUN4/LBA7 and LUN0/LBA2 within data array130are identical. Accordingly, a single piece of cached content (located at first cache address 010111 within, in this example, first cache system126) may be used as a local cached copy for both pieces of content stored on data array130.

While the system is described above as modifying entry262by adding a second LUN/LBA designation to generate modified entry262′, this is for illustrative purposes only and is not intended to be a limitation of this disclosure, as other configurations are possible. For example, sub-tables/sub-entries may be utilized to show the manner in which multiple LUNs/LBAs are mapped to a single piece of content within, for example, first cache system126.

As discussed above, data array130may include second cache system128. Accordingly, data caching process10may execute the above-described content aware functionality with respect to second cache system128.

Content Compression

It may be desirable to compress the data stored within first cache system126and data array130to conserve storage space. For example, as the quantity of storage space available within first cache system126is limited, data caching process10may routinely monitor and process the data within first cache system126to compress300the data (if possible) to maximize the efficiency of first cache system126. Specifically, since data stored within first cache system126is stored within either volatile memory150or non-volatile memory152, this data may be quickly retrieved for processing (when compared to a disk-based storage systems).

Accordingly, assume for illustrative purposes that data caching process10routinely compresses300data included within first cache system126, thus generating compressed content (e.g. compressed content134). As each piece of content included within first cache system126has a corresponding piece of content within (in this example) data array130, data caching process10may identify302compressed content134to data array130.

As discussed above, data caching process10may compress the data included within data array130in order to conserve storage space. However, the quantity of data included within data array130is often much greater (e.g., many orders of magnitude) than the quantity of data stored within first cache system126. Further, the type of storage media included within data array130(e.g. electromechanical hard disk drives) is considerably slower (with respect to data access/data retrieval times) then the type of storage media included within first cache system126(e.g. random access memory systems and flash memory systems). Accordingly, it may take a considerable amount of time to process and compress data included within data array130.

In order to enhance the efficiency of compressing the data included within data array130, data caching process10may prioritize the processing of content (e.g. related content136) included within data array130that is related to compressed content (e.g. compressed content134) included within first cache system126.

Accordingly, upon compressed content134within data array132being identified302, data caching process10may locate304related content (e.g. related content136) within data array130. Locating the related content136within data array130may be accomplished through use of the above-described content directory250(to obtain the address of the content), which correlates content stored within first cache system126to content stored within storage array130. As discussed above and in this example, related content136located on data array130is the uncompressed version of compressed content134located on first cache system126.

Data caching process10may process related content136to determine306whether related content136on data array130is compressible. For example, data caching process10may analyze related content136to determine the level at which related content136may be compressed within data array130. Alternatively/additionally, as related content136was already compressed on first cache system126(i.e. in the form of compressed content134), data caching process10already knows the level of compressibility of related content136. Accordingly, when identifying302compressed content134to data array130, data caching process10may provide308the compression ratio of compressed content134to data array130. Data caching process10may subsequently use this compression ratio when determining306whether related content136on data array130is compressible.

Assume for illustrative purposes that when data caching process10was initially compressing content to generate compressed content134, data caching process10determined a compression ratio for compressed content134. For example, if the original content was 1.00 MB in size and compressed content134is 200 kB in size, data caching process10may determine a compression ratio of 5:1 for compressed content134. Data caching process10may provide308this compression ratio to data array130.

Upon receiving this compression ratio, data caching process10may compare this compression ratio to a predefined threshold to determine whether related content136(stored on data array130) is compressible. For example, assume for illustrative purposes that this predefined threshold is 3:1, wherein if the compression ratio is less than 3:1, related content136(stored on data array130) would not be compressed310by data caching process10, as the computational expense of compressing related content136would not be offset by the space savings achieved. However, if the compression ratio is greater than or equal to 3:1, data caching process10would compress310related content136, as the space savings achieved on data array130would offset the computational expense of compressing related content136. Since the compression ratio of compressed content134is 5:1 (i.e., greater than or equal to 3:1), data caching process10may compress310related content136.

As discussed above, data array130may include second cache system128. Accordingly, if data caching process10compresses310related content136on data array130and data array130also includes second cache system128, compressing310related content136may also include/may alternatively include compressing any cached copies of related content136stored on second cache system128.