System and method for thin provisioning

A method, computer program product, and computing system for configuring a cache memory device to include a cache portion and a thinly-provisioned, direct attached storage portion. Data is stored on the thinly-provisioned, direct attached storage portion. At least a portion of the thinly-provisioned, direct attached storage portion is relinquished, thus generating a relinquished portion. The relinquished portion is reassigned to the cache portion.

TECHNICAL FIELD

This disclosure relates to cache systems and, more particularly, to thin provisioning of cache 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 configuring a cache memory device to include a cache portion and a thinly-provisioned, direct attached storage portion. Data is stored on the thinly-provisioned, direct attached storage portion. At least a portion of the thinly-provisioned, direct attached storage portion is relinquished, thus generating a relinquished portion. The relinquished portion is reassigned to the cache portion.

One or more of the following features may be included. At least a portion of the cache portion may be obtained, thus generating an obtained portion. The obtained portion may be reassigned to the thinly-provisioned, direct attached storage portion. Obtaining at least a portion of the cache portion may include invalidating one or more cache entries associated with the obtained portion. Configuring a cache memory device to include a cache portion and a thinly-provisioned, direct attached storage portion may include defining an upper capacity limit for the thinly-provisioned, direct attached storage portion. The cache memory device may be a flash-based cache memory device. The cache memory device may be included within a storage system. The storage system may include a data array.

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 configuring a cache memory device to include a cache portion and a thinly-provisioned, direct attached storage portion. Data is stored on the thinly-provisioned, direct attached storage portion. At least a portion of the thinly-provisioned, direct attached storage portion is relinquished, thus generating a relinquished portion. The relinquished portion is reassigned to the cache portion.

One or more of the following features may be included. At least a portion of the cache portion may be obtained, thus generating an obtained portion. The obtained portion may be reassigned to the thinly-provisioned, direct attached storage portion. Obtaining at least a portion of the cache portion may include invalidating one or more cache entries associated with the obtained portion. Configuring a cache memory device to include a cache portion and a thinly-provisioned, direct attached storage portion may include defining an upper capacity limit for the thinly-provisioned, direct attached storage portion. The cache memory device may be a flash-based cache memory device. The cache memory device may be included within a storage system. The storage system may include a data array.

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 configuring a cache memory device to include a cache portion and a thinly-provisioned, direct attached storage portion. Data is stored on the thinly-provisioned, direct attached storage portion. At least a portion of the thinly-provisioned, direct attached storage portion is relinquished, thus generating a relinquished portion. The relinquished portion is reassigned to the cache portion.

One or more of the following features may be included. At least a portion of the cache portion may be obtained, thus generating an obtained portion. The obtained portion may be reassigned to the thinly-provisioned, direct attached storage portion. Obtaining at least a portion of the cache portion may include invalidating one or more cache entries associated with the obtained portion. Configuring a cache memory device to include a cache portion and a thinly-provisioned, direct attached storage portion may include defining an upper capacity limit for the thinly-provisioned, direct attached storage portion. The cache memory device may be a flash-based cache memory device. The cache memory device may be included within a storage system. The storage system may include a data array.

DETAILED DESCRIPTION

Referring toFIG. 1, there is shown thin provisioning 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 thin provisioning 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 IO requests (e.g. IO request20) may be sent from client applications22,24,26,28to storage system12. Examples of IO 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).

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.

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.

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., Layer2or Layer3) network, a fiber channel network, an InfiniBand network, or any other circuit switched/packet switched network.

Storage system12may execute all or a portion of thin provisioning process10. The instruction sets and subroutines of thin provisioning 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 IO requests (e.g. IO request20) may be generated. For example, these IO 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 IO requests may be internally generated within server computer/controller100. Examples of IO 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 applications 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 IO requests (e.g., IO 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 IO requests (e.g., IO 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 thin provisioning 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 thin provisioning process10may be executed by one or more processors (not shown) and one or more memory architectures (not shown) included within data array130.

Referring also toFIG. 3and as discussed above, server computer/controller100may include first cache system126, which may include but is not limited to a non-volatile, solid-state, cache memory system (e.g., a flash-based, cache memory system).

Specifically and inFIG. 3, there are shown seven different iterations of first cache system126. Initially and in its native state, first cache system126is configured in the manner discussed above. Namely the entire capacity (e.g., portion200) of first cache system126may be utilized for caching purposes. Assuming for illustrative purposes that first cache system126is a 32.0 gigabyte cache system, all (or essentially all) 32.0 gigabytes of first cache system126may be available for caching data.

Referring also toFIG. 4, thin provisioning process10may allow an administrator (e.g., user46) of storage system12to configure 250 cache memory device (e.g., first cache system126A) to include a cache portion (e.g., cache portion202) and a thinly-provisioned, direct attached storage portion (e.g., storage portion204). For example, first cache system126A may be configured so that cache portion202is reduced from 32.0 gigabytes to 24.0 gigabytes and storage portion204is 8.0 gigabytes. As thin provisioning is utilized, when configuring250first cache memory device126A to include cache portion202and a thinly-provisioned, direct attached storage portion204, thin provisioning process10may allow user46to merely define 252 an upper capacity limit (e.g., 8.0 gigabytes) for thinly-provisioned, direct attached storage portion204.

Accordingly, if there is no data currently being stored within storage portion204, the actual size of storage portion204will be reduced to 0.0 gigabytes. And during use, thin provisioning process10may store 254 data within thinly-provisioned, direct attached storage portion204and the size of storage portion204may be increased to as large as 8.0 gigabytes. In the event that a user tries to exceed the 8.0 gigabytes limit concerning storage portion204, thin provisioning process10may issue an error message and the storage procedure may be halted until e.g., user46increases the size of storage portion204(e.g., up to 12.0 gigabytes).

Assume for illustrative purpose that while a storage portion of 8.0 gigabytes was initially needed, the quantity of required storage has fallen off. Accordingly, a portion of storage portion204may no longer be needed. Accordingly, thin provisioning process10may relinquish256at least a portion of thinly-provisioned, direct attached storage portion204, thus generating relinquished portion206(as shown in first cache memory system126B). Thin provisioning process10may reassign258relinquished portion206to cache portion202. Assume for illustrative purposes that relinquished portion206is 3.0 gigabytes. Accordingly, the size of storage portion204may be reduced by thin provisioning process10from 8.0 gigabytes to 5.0 gigabytes. Further, the size of cache portion202may be increased by thin provisioning process10from 24.0 gigabytes to 27.0 gigabytes (as shown in first cache system126C).

Assume that the now larger 27.0 gigabyte cache portion202essentially gets filled with cache data208(as shown in first cache system126D). Further assume that due to an uptick in required storage capacity, thin provision process10once again needs storage portion204to be 8.0 gigabytes in size. Accordingly, thin provisioning process10may obtain 260 a portion of cache portion202, thus generating obtained portion210(as shown in first cache system126E). In this particular example, obtained portion210is a 3.0 gigabyte portion of cache portion202, which is the same size as relinquished portion206described above. However and as shown in first cache system126E, some cache data is stored within obtained portion210. Accordingly, when obtaining260a portion of cache portion202, thin provisioning process10may invalidate262one or more cache entries associated with obtained portion210. Accordingly, any cache data that was stored within obtained portion210is no longer going to be available via first cache system126. Accordingly, the cache entries defined within the appropriate cache directory (not shown) will need to be invalidated262by thin provisioning process10.

Once the above-described cache entries are invalidated262, thin provisioning process10may reassign264obtained portion210to thinly-provisioned, direct attached storage portion204.

As storage portion204is thinly provisioned, the above-described process of increasing and decreasing the size of storage portion204and taking capacity away from or adding capacity to cache portion202(respectively) may be repeated.

For ease of illustration, the system was described above from the point of view that the cache portion was initially empty at the time that the storage portion was being filled. Accordingly, no cache invalidation procedures were required in order for the storage portion to reach its maximum capacity. However, such situations are rare, as the cache portion is typically populated when the storage portion is defined and, therefore, for data to be placed into the storage portion, cache invalidation procedures may need to be utilized to free up cache portion space for use as storage portion space.