Abstract:
In some embodiments, a method of maintaining a reference list for data deduplication is provided. The method includes discarding a newly arriving data segment in response to finding a fingerprint of the newly arriving data segment matches an existing fingerprint in a plurality of fingerprints on a fingerprint-to-file reference list. The method includes adding, in the fingerprint-to-file reference list, to a list for the existing fingerprint, a source for the newly arriving data segment, in response to the fingerprint-to-file reference list indicating the existing fingerprint does not correspond to a hot data segment and setting an indication in the fingerprint-to-file reference list that the existing fingerprint corresponds to the hot data segment in response to the list for the existing fingerprint meeting or exceeding a predetermined number of entries. Other embodiments are included.

Description:
CLAIM OF PRIORITY 
     This application claims priority to U.S. Application Ser. No. 61/828,403 entitled “HANDLING DATA SEGMENTS IN DEDUPLICATION,” which is incorporated herein by reference for all purposes. 
    
    
     BACKGROUND 
     Data deduplication is applied during data backup operations, in order to conserve storage space. A data segment that is shared by many files need only be stored once in backup storage. Typically, a data deduplication system maintains a list of fingerprints of data segments. Newly arriving data segments have their fingerprints compared with the fingerprints on the list, in order to determine whether or not a copy of a data segment is already stored in the backup storage. If the deduplication system does not find a match to a fingerprint, the newly arriving data segment is then stored in the backup storage, and the new fingerprint is added to the fingerprint list that contains fingerprints which represent data segments stored. If the deduplication system finds a match to a fingerprint, the newly arriving data segment is discarded, i.e., not again stored in the backup storage, and a reference is added to the corresponding existing segment. One critical function of a deduplication system is to track how segments are referenced by different files and backup images. Some data segments in the backup storage are popular and are widely referenced by many files and backup images. These so-called “hot” segments may come from system files, virtual machines, static files, database blocks, etc. Over time, the popularity of some segments may change, e.g., file system patch updates on backup clients may make popular segments become obsolete (not hot anymore). In some systems, the list of fingerprints used in deduplication is frequently updated, so that unused data segments can be deleted from the backup storage in order to free up storage space. However, frequent updates to the list of fingerprints consume system time, and slow down reference processing. Therefore, there is a need in the art for a solution which overcomes the drawbacks described above. 
     SUMMARY 
     In some embodiments, a method of maintaining a reference list for data deduplication is provided. The method includes establishing a fingerprint-to-file reference list having a plurality of fingerprints of data segments, where each fingerprint of the plurality of fingerprints corresponding to a data segment stored in a memory, each fingerprint of the plurality of fingerprints having a list of backed up files, each backed up file as referred to on the list of files including a data segment having a corresponding fingerprint matching the fingerprint of the plurality of fingerprints. The method includes deduplicating data segments via application of the fingerprint-to-file reference list and updating the fingerprint-to-file reference list each time an existing fingerprint of the plurality of fingerprints is matched in a comparison to a newly arriving fingerprint of a newly arriving data segment, unless the reference list indicates the existing fingerprint corresponds to a hot data segment. The method includes indicating, in the reference list, the existing fingerprint corresponds to the hot data segment in response to the reference list having for the existing fingerprint the list of backed up files meeting or exceeding a threshold. 
     In some embodiments, a non-transient, tangible, computer-readable media having thereupon instructions which, when executed by a processor, cause the processor to execute a method. The method includes discarding a newly arriving data segment in response to finding a fingerprint of the newly arriving data segment matches an existing fingerprint in a plurality of fingerprints on a fingerprint-to-file reference list. The method includes adding, in the fingerprint-to-file reference list, a source for the newly arriving data segment, in response to the fingerprint-to-file reference list indicating the existing fingerprint does not correspond to a hot data segment. The method includes setting an indication in the fingerprint-to-file reference list that the existing fingerprint corresponds to the hot data segment in response to a list for the existing fingerprint meeting or exceeding a predetermined number of entries. 
     In some embodiments, a data deduplication system that includes a memory configured to store data segments, a fingerprint-to-file reference list configured to store a plurality of fingerprints, each fingerprint of the plurality of fingerprints having an associated list of files and a hot attribute, and a server configured to perform backup. The server includes a processor operable to execute instructions causing the processor to store deduplicated data segments in the memory via application of the fingerprint-to-file reference list. The processor executing the instructions is operable to add a filename to the associated list of files for an existing fingerprint in the fingerprint-to-file reference list as a result of the server finding that a newly arriving fingerprint of a newly arriving data segment from a file having the filename matches the existing fingerprint, and the server finding that the hot attribute of the existing fingerprint is cleared, indicating an existing data segment in the memory, corresponding to the existing fingerprint, is not a hot segment. The processor executing the instructions is operable to set the hot attribute of the existing fingerprint in the fingerprint-to-file reference list as a result of the associated list of files for the existing fingerprint in the fingerprint-to-file reference list meeting or exceeding a predetermined size. 
     Other aspects and advantages of the embodiments will become apparent from the following detailed description taken in conjunction with the accompanying drawings which illustrate, by way of example, the principles of the described embodiments. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       The described embodiments and the advantages thereof may best be understood by reference to the following description taken in conjunction with the accompanying drawings. These drawings in no way limit any changes in form and detail that may be made to the described embodiments by one skilled in the art without departing from the spirit and scope of the described embodiments. 
         FIG. 1  is a schematic diagram of a deduplication system in accordance with some embodiments. 
         FIG. 2A  is a schematic diagram of the fingerprint/segment-to-file map of  FIG. 1  in accordance with some embodiments. 
         FIG. 2B  is a schematic diagram of the fingerprint-to-file reference list of  FIG. 1  in accordance with some embodiments. 
         FIG. 2C  is a schematic diagram of the fingerprint-to-segment map of  FIG. 1  in accordance with some embodiments. 
         FIG. 3  is a schematic diagram showing data deduplication as performed using the fingerprint-to-file reference list of  FIGS. 1 and 2B  in accordance with some embodiments. 
         FIG. 4  is a flow diagram of a method of deduplication, which can be performed using the deduplication system of  FIG. 1  in accordance with some embodiments. 
         FIG. 5  is an illustration showing a computing device which may implement the embodiments described herein. 
     
    
    
     DETAILED DESCRIPTION 
     A deduplication system described with reference to  FIGS. 1-4  makes use of a reference list that has fingerprints of some or many of the data segments stored in a content memory. The reference list size is used as a threshold to identify hot segments and exclude the hot segments from routine updates in some embodiments. Periodically, the segments are reevaluated to determine if their popularity or frequency of use changes. It should be appreciated that the reevaluation avoids storage leakage when the popularity of a segment drops such that the segment is no longer referenced. 
     Fingerprints of newly arriving data segments are compared to fingerprints on the reference list, for deduplication of the data segments during a data backup operation. Each time a newly arriving data segment finds a fingerprint match on the reference list, the file name from which that newly arriving data segment originated is added to a list of files associated with the existing fingerprint on the reference list. This list of files is updated (with successive matches) until the list of files for the fingerprint meets or exceeds a threshold. Once the threshold is met or exceeded, the list is no longer updated for that fingerprint, and that particular data segment is designated a hot segment. An indication is set in the reference list that the existing fingerprint corresponds to the hot data segment. The reference list is periodically rebuilt, so that fingerprints that are no longer used, and corresponding data segments that are no longer used, can be purged from the system, to preserve data capacity for backup. By eliminating updates to the reference list once the threshold is met or exceeded, the system achieves improved efficiency as compared to a system that continually updates the reference list. 
     Detailed illustrative embodiments are disclosed herein. However, specific functional details disclosed herein are merely representative for purposes of describing embodiments. Embodiments may, however, be embodied in many alternate forms and should not be construed as limited to only the embodiments set forth herein. 
     It should be understood that although the terms first, second, etc. may be used herein to describe various steps or calculations, these steps or calculations should not be limited by these terms. These terms are only used to distinguish one step or calculation from another. For example, a first calculation could be termed a second calculation, and, similarly, a second step could be termed a first step, without departing from the scope of this disclosure. As used herein, the term “and/or” and the “/” symbol includes any and all combinations of one or more of the associated listed items. 
     As used herein, the singular forms “a”, “an” and “the” are intended to include the plural forms as well, unless the context clearly indicates otherwise. It will be further understood that the terms “comprises”, “comprising”, “includes”, and/or “including”, when used herein, specify the presence of stated features, integers, steps, operations, elements, and/or components, but do not preclude the presence or addition of one or more other features, integers, steps, operations, elements, components, and/or groups thereof. Therefore, the terminology used herein is for the purpose of describing particular embodiments only and is not intended to be limiting. 
     It should also be noted that in some alternative implementations, the functions/acts noted may occur out of the order noted in the figures. For example, two figures shown in succession may in fact be executed substantially concurrently or may sometimes be executed in the reverse order, depending upon the functionality/acts involved. 
       FIG. 1  shows a data deduplication system performing a backup operation in accordance with some embodiments. The deduplication system has a backup server  102  cooperating with a deduplication server  104  to back up files  114 . The deduplication system stores deduplicated data in a content memory  110  in some embodiments. In various embodiments, the content memory  110  includes hard disk, optical disk, flash memory or other nonvolatile storage media. A stream of incoming files  114  is presented to the backup server  102  for backup operations. In the example shown, each file  114  is made up of and is broken out into data segments  116 . In further embodiments, a data segment could be less than the size of a file, greater than the size of a file, or equal to the size of a file. Each data segment  116  is associated with a fingerprint  118 . The fingerprint  118  could be derived using a hash function or other fingerprinting algorithm, and could be provided with the data segment  116 , or derived by the backup server  102  or a fingerprinting module. In further embodiments, the backup server  102  and the deduplication server  104  could be combined, or split into further modules, or share modules. 
     Still referring to  FIG. 1 , the backup server  102  backs up or stores the data segments  116  in such a manner that the files from which the data segments  116  originate can be restored in case of a failure of a system being backed up. In order to do so, the backup server  102  establishes and makes use of a fingerprint/segment-to-file map  106 . For each data segment  116  backed up, the backup server  102  writes a pointer, a record, or other data to the fingerprint/segment-to-file map  106  indicating the file from which the data segment  116  and corresponding fingerprint  118  originated. That is, the fingerprint/segment-to-file map  106  functions to map fingerprints  118  and data segments  116  to files  114 , so that each file can be reconstructed by fetching data segments  116  from the content memory  110  and reassembling the data segments  116  into the files  114  that were backed up. In order to be able to restore any file that has been backed up, the fingerprint/segment-to-file map  106  maintains a complete list of all files  114  that are backed up in a specified backup run, and the data segments  116  that make up these files  114 . 
     For each newly arriving data segment  116  of  FIG. 1 , the backup server  102  transmits the data segment  116  to the deduplication server  104 , which decides whether and how to store the data segment  116 . The deduplication server  104  establishes and makes use of a fingerprint-to-file reference list  108  for this functionality. To build the fingerprint-to-file reference list  108 , the deduplication server  104  adds the fingerprint  118  of a data segment  116  to the fingerprint-to-file reference list  108  as the deduplication server  104  sends the data segment  116  to the content memory  110  for storage. The deduplication server  104  also adds a pointer, a record or other data to the fingerprint-to-file reference list  108  indicating the file from which the data segment  116  giving rise to the fingerprint  118  originated. That is, the fingerprint-to-file reference list  108  acts to map fingerprints  118  to files  114 , so that for any fingerprint  118 , a file  114  can be located that makes use of the segment  116  that corresponds to the fingerprint  118 . In some embodiments, the sequence of building the fingerprint-to-file reference list  108  is repeated until the fingerprint-to-file reference list  108  is complete, and in other embodiments the sequence of building the fingerprint-to-file reference list  108  is interleaved or intermingled with one or more sequences of deduplication. 
     Continuing with  FIG. 1 , for a data deduplication process, when the backup server  102  provides a data segment  116  to the deduplication server  104 , the deduplication server  104  attempts to find a match for the fingerprint  118  of the data segment  116 , in the fingerprint-to-file reference list  108 . If the deduplication server  104  does not find a match in the fingerprint-to-file reference list  108 , the deduplication server  104  sends the data segment  116  to the content memory  110  for storage. If the fingerprint-to-file reference list  108  is still being built, the deduplication server  104  adds the fingerprint  118  and the pointer, record or other data indicating the file from which the data segment  116  originated, to the fingerprint-to-file reference list  108 . If the deduplication server  104  does find a match in the fingerprint-to-file reference list  108 , the deduplication server  104  discards the data segment  116 , i.e., does not newly store the data segment  116  in the content memory  110 , since a copy of the data segment  116  is already present in the content memory  110 . Conditionally, a pointer, record or other data indicating the file from which the newly arriving and presently discarded data segment  116  originated is added to the list for the fingerprint  118 . This list resides in the fingerprint-to-file reference list  108 , under the fingerprint  118 . The condition for adding or not adding to the list is based upon the size or length of the list, and a threshold, in some embodiments. 
     In one embodiment, the threshold is a predetermined number of entries to the reference list of a segment. In further embodiments, the threshold is a predetermined list length, list size or list depth of a segment. If the list of files from which a data segment  116  originated, associated with a fingerprint  118 , is less than the threshold, the deduplication server  104  adds the newest pointer, record or other data to the list. If the list of files from which a data segment  116  originated, associated with a fingerprint  118 , is greater than or equal to the threshold, a “hot” attribute is set for the fingerprint  118  and the deduplication server  104  does not add the newest pointer, record or other data to the list, i.e., does not update the list. The “hot” attribute indicates that the fingerprint  118  is associated with a “hot” data segment, which is frequently referenced and matched during deduplication of arriving data segments. Data segments  116 , subject to deduplication, are stored in the content memory  110 . In some embodiments, each data segment  116  is accompanied by a corresponding fingerprint  118 , with data segments  116  and fingerprint  118  associated with each other and stored in the content memory  110 . Various association mechanisms such as content addressable memory, address schemes, pointers, relational databases and so on are used in various embodiments. In other embodiments, the data segments  116  are stored in the content memory  110 , and the deduplication server  104  maintains a separate fingerprint-to-segment map  112 . The fingerprint-to-segment map  112  maps fingerprints  118  to data segments  116 , so that for a specified fingerprint  118 , the corresponding data segment  116  can be retrieved from the content memory  110 . Retrieving data segments  116  from the content memory  110  for restoring backed up data is achieved through various mechanisms in various embodiments. 
       FIG. 2A  shows an embodiment of the fingerprint/segment-to-file map  106 . This could be implemented as a file, a database or other data structure. The fingerprint/segment-to-file map  106  includes a list of file paths and filenames, and all of the fingerprints associated with each of these. For example, for a first file being backed up, there is an entry in the fingerprint/segment-to-file map  106  showing the first file path and the first filename along with an associated list of fingerprints of the data segments that make up the first file. This entry is placed into the fingerprint/segment-to-file map  106  by the backup server  102 , as the first file is being backed up. Subsequent entries follow a similar format. In order to restore the first file, the backup server  102  would look up the file path information for the first file, and then retrieve from the content memory  110  the data segments  116  associated with the fingerprints listed in the entry. The backup server  102  would do so using the associated fingerprints  118  and data segments  116  in one embodiment of the content memory  110 , or using the fingerprint-to-segment map  112  in other embodiments of the content memory  110 . In further embodiments of the fingerprint/segment-to-file map  106 , other mappings of fingerprints, other mappings of segments, or other types of data sources could be used as appropriate to various data structures and backup systems. Such embodiments could be termed a fingerprint-to-file map, a segment-to-file map, a fingerprint-to-data source map, a segment-to-data source map and so on. In some embodiments, a journal is used in place of or as part of the fingerprint/segment-to-file map  106 . When a backup image or file is removed, the corresponding map entry is removed from the fingerprint/segment-to-file map in some embodiments. 
       FIG. 2B  shows an embodiment of the fingerprint-to-file reference list  108 . It should be appreciated that the fingerprint-to-file reference list  108  could be implemented as a file, a database or other data structure. The fingerprint-to-file reference list  108  includes a list of fingerprints, and file paths and filenames associated with each of the fingerprints. For example, for a first fingerprint FP( 1 ), there is an entry in the fingerprint-to-file reference list  108  showing the first fingerprint and an associated list of file paths and filenames of files that have one or more data segments whose fingerprints match the first fingerprint. The “hot” attribute for the first fingerprint has been cleared, or set to a value of zero or false. The “hot” attribute for the second fingerprint FP( 2 ) has been set to a value of one or true, as a result of the second fingerprint having a list of filenames with the number of filenames equal to the threshold value. In further embodiments, other types of indicators for a “hot” data segment and associated fingerprint could be used. In the example shown, a first file and a second file each have data segments that produce a fingerprint that matches the first fingerprint in the fingerprint-to-file reference list  108 . A first file and an Nth file FP(N) each have data segments that produce a fingerprint that matches the second fingerprint in the fingerprint-to-file reference list  108 . Other files may have data segments that each produces a fingerprint that matches the Nth fingerprint in the fingerprint-to-file reference list  108 . In order to provide for effective data deduplication, the fingerprint-to-file reference list  108  does not need to have a complete list of fingerprints  118  for all data segments  116  stored in content memory  110 . In further embodiments of the fingerprint-to-file reference list  108 , other mappings of fingerprints, other mappings of files, or other types of data sources could be used as appropriate to various data structures and backup systems. Such embodiments could be termed a fingerprint-to-data source reference list or a fingerprint-to-data source map. In some embodiments, a fingerprint index is constructed from the fingerprint-to-file reference list  108 , and newly arriving fingerprints are tested against the fingerprint index for a match. 
       FIG. 2C  shows an embodiment of the fingerprint-to-segment map  112 . It should be appreciated that the fingerprint-to-segment map  112  could be implemented as a file, a database or other data structure. The fingerprint-to-segment map  112  includes a list of fingerprints and pointers to the data segments stored in the content memory. For example, the first fingerprint FP( 1 ) has an entry in the fingerprint-to-segment map  112  along with a pointer to the location of the first segment in the content memory, such that the first segment generates the first fingerprint. The list of the remaining fingerprints in the fingerprint-to-segment map  112  is similarly constructed. It should be appreciated that the structure of the maps and lists of  FIGS. 2A-C  is not meant to be limiting as alternative structures may be utilized to achieve the functionality described herein. 
       FIG. 3  illustrates a data deduplication technique using the fingerprint-to-file reference list  108  in accordance with some embodiments. A newly arriving data segment  116  has an associated fingerprint  118 . The fingerprint  118  is checked for a match in the fingerprint-to-file reference list  108 . If a condition test  302  determines there is no match, the data segment  116  is stored in the content memory  110 , per the action block  304 , and the fingerprint  118  is added to the fingerprint-to-file reference list. If the condition test  302  determines there is a match, i.e., the newly arriving fingerprint  118  matches an existing fingerprint in the fingerprint-to-file reference list  108 , the data segment  116  is discarded, per the action block  306 . The fingerprint-to-file reference list  108  is updated as to the fingerprint  118  and the origins of the data segment  116 , until or unless a threshold for the length of the list (e.g., the number of files on the list) associated with the fingerprint  118  is reached, per the action loop  308 . When the threshold is reached, the fingerprint is declared “hot”, in the fingerprint-to-file reference list  108 . Once the fingerprint is declared “hot”, i.e., the fingerprint is frequently matched and the corresponding data segment is “hot”, the fingerprint is no longer updated in the fingerprint-to-file reference list  108  for any subsequent matches to newly arriving fingerprints. As illustrated above, the fingerprint  118  may be declared “hot” by flipping or transforming a bit from 0 to 1, or 1 to 0, in some embodiments. 
       FIG. 4  shows a flow diagram for a method of deduplication and maintenance of a fingerprint-to-file reference list in accordance with some embodiments. The method and variations thereof could be implemented using the deduplication system of  FIG. 1 , for example using one or more processors or specially programmed computers of the backup and/or deduplication servers. From a start point, the fingerprint-to-file reference list is established in an action  402 . For example, the fingerprint-to-file reference list shown in  FIG. 1, 2B or 3  could be used. In an action  404 , a newly arriving fingerprint of a newly arriving data segment is compared to fingerprints in the fingerprint-to-file reference list. This could be done using a software comparison, a hardware comparator, a state machine or other embodiment as shown in  FIG. 1 or 3 . 
     In a decision action  406 , it is determined if a match is found. For example, a processor may find a match in the fingerprint-to-file reference list for the newly arriving fingerprint. In various embodiments, the fingerprint search in the fingerprint-to-file reference list could be partial or complete. If a match is not found, the flow branches to the action  410 , in which the newly arriving data segment is stored. For example, the data segment could be stored in memory as shown in  FIGS. 1 and 3 . In some embodiments, a fingerprint of the newly arriving data segment is added to the fingerprint-to-file reference list, e.g., as part of the process of building the fingerprint-to-file reference list up to a predetermined or adjustable length. Flow then proceeds to the decision action  418 . 
     If a match is found, the flow branches from the decision action  406  to the action  408 , in which the newly arriving data segment is discarded, i.e., not newly stored in a backup storage. For example, finding a match in the fingerprint-to-file reference list indicates that a data segment bearing the requisite fingerprint is already stored in the content memory of  FIG. 1 . Continuing in the embodiment where a match is found, the decision action  412  determines if the list of files for the fingerprint is less than the threshold. For example, this functionality could be performed by checking the number of items on the list of files, or checking for the “hot” attribute of the fingerprint in the fingerprint-to-file reference list. If the “hot” attribute is set, there is no need to check the number of items on the list of the files, as the “hot” attribute indicates such check has previously been performed and the condition met. If the “hot” attribute is not set, the software through the processor could check the number of items on the list of files in some embodiments. In a further embodiment, the check verifies whether the number of items on the list of files is greater than or equal to the threshold. Various checking and decision mechanisms are readily devised. If it is determined that the list of files for the fingerprint is less than the threshold, the fingerprint and segment are not yet hot, and the fingerprint-to-file reference list is updated in an action  414 . For example, the file or other source for the data segment is added to the list of files for the fingerprint. If it is determined that the list of files for the fingerprint is not less than the threshold, the action  416  indicates that the fingerprint corresponds to a hot segment. For example, the action  416  could set a “hot” attribute of the fingerprint in the fingerprint-to-file reference list. The fingerprint-to-file reference list is not updated. Flow then proceeds to the decision action  418 . 
     In the decision action  418 , it is determined if the backup run is complete. If the answer is no, the backup run is not yet complete, flow branches back to the action  404  in order to look at additional newly arriving data segments and newly arriving fingerprints. If the answer is yes, the backup run is complete, flow proceeds to the decision action  420 . In the decision action  420 , it is determined if the classification of hot segments should be reevaluated. In some embodiments, this decision is made on a calendar or other periodic basis, e.g., every six months or other time period, the hot segments are reevaluated. In other embodiments, this decision is made on a space usage of the hot segments, e.g., at some level of memory utilization, the hot segments are reevaluated. Further criteria are readily devised. If the answer is no, the hot segments should not be reevaluated, the flow branches to an endpoint. If the answer is yes in action  418 , the classification of the hot segments should be reevaluated, flow proceeds to the action  422 , in which the fingerprint-to-file reference list is rebuilt. For example, entries in the fingerprint-to-file reference list could be deleted, and the fingerprint-to-file reference list is rebuilt based on fingerprint/segment-to-file map. During the reference list rebuilding, no data segment should be deleted. Segments that are unused after the rebuilding could then be deleted from the memory, as could the associated fingerprints in the fingerprint-to-file reference list, which would free up space in the content memory and in the fingerprint-to-file reference list. After the action  422 , the flow reaches an endpoint. 
     It should be appreciated that the methods described herein may be performed with a digital processing system, such as a conventional, general-purpose computer system. Special purpose computers, which are designed or programmed to perform only one function may be used in the alternative.  FIG. 5  is an illustration showing an exemplary computing device which may implement the embodiments described herein. The computing device of  FIG. 5  may be used to perform embodiments of the functionality for the deduplication and maintenance of a fingerprint-to-file reference list in accordance with some embodiments. The computing device includes a central processing unit (CPU)  501 , which is coupled through a bus  505  to a memory  503 , and mass storage device  507 . Mass storage device  507  represents a persistent data storage device such as a floppy disc drive or a fixed disc drive, which may be local or remote in some embodiments. Memory  503  may include read only memory, random access memory, etc. Applications resident on the computing device may be stored on or accessed via a computer readable medium such as memory  503  or mass storage device  507  in some embodiments. Applications may also be in the form of modulated electronic signals modulated accessed via a network modem or other network interface of the computing device. It should be appreciated that CPU  501  may be embodied in a general-purpose processor, a special purpose processor, or a specially programmed logic device in some embodiments. 
     Display  511  is in communication with CPU  501 , memory  503 , and mass storage device  507 , through bus  505 . Display  511  is configured to display any visualization tools or reports associated with the system described herein. Input/output device  509  is coupled to bus  505  in order to communicate information in command selections to CPU  501 . It should be appreciated that data to and from external devices may be communicated through the input/output device  509 . CPU  501  can be defined to execute the functionality described herein to enable the functionality described with reference to  FIGS. 1-4 . The code embodying this functionality may be stored within memory  503  or mass storage device  507  for execution by a processor such as CPU  501  in some embodiments. The operating system on the computing device may be MS DOS™, MS-WINDOWS™, OS/2™ UNIX™, LINUX™, or other known operating systems. It should be appreciated that the embodiments described herein may be integrated with virtualized computing system also. 
     With the above embodiments in mind, it should be understood that the embodiments might employ various computer-implemented operations involving data stored in computer systems. These operations are those requiring physical manipulation of physical quantities. Usually, though not necessarily, these quantities take the form of electrical or magnetic signals capable of being stored, transferred, combined, compared, and otherwise manipulated or transformed. Further, the manipulations performed are often referred to in terms, such as producing, identifying, determining, or comparing. Any of the operations described herein that form part of the embodiments are useful machine operations. The embodiments also relate to a device or an apparatus for performing these operations. The apparatus can be specially constructed for the required purpose, or the apparatus can be a general-purpose computer selectively activated or configured by a computer program stored in the computer. In particular, various general-purpose machines can be used with computer programs written in accordance with the teachings herein, or it may be more convenient to construct a more specialized apparatus to perform the required operations. 
     Implementations of the invention may be made in hardware, firmware, software, or various combinations thereof. The embodiments can also be embodied as computer readable code on a computer readable medium. The computer readable medium is any data storage device that can store data, which can be thereafter read by a computer system. Examples of the computer readable medium include hard drives, network attached storage (NAS), read-only memory, random-access memory, CD-ROMs, CD-Rs, CD-RWs, magnetic tapes, flash, and other optical and non-optical data storage devices. The computer readable medium can also be distributed over a network coupled computer system so that the computer readable code is stored and executed in a distributed fashion, e.g., in a cloud computing environment. Embodiments described herein may be practiced with various computer system configurations including hand-held devices, tablets, microprocessor systems, microprocessor-based or programmable consumer electronics, minicomputers, mainframe computers and the like. The embodiments can also be practiced in distributed and virtual computing environments where tasks are performed by remote processing devices that are linked through a wire-based or wireless network. In one implementation, the machine-readable medium may include various mechanisms for storing and/or transmitting information in a form that can be read by a machine (e.g., a computing device). While firmware, software, routines, or instructions may be described in the above disclosure in terms of specific exemplary aspects and implementations performing certain actions, it will be apparent that such descriptions are merely for the sake of convenience and that such actions in fact result from computing devices, processing devices, processors, controllers, or other devices or machines executing the firmware, software, routines, or instructions. 
     Although the method operations were described in a specific order, it should be understood that other operations may be performed in between described operations, described operations may be adjusted so that they occur at slightly different times or the described operations may be distributed in a system which allows the occurrence of the processing operations at various intervals associated with the processing. 
     The foregoing description, for the purpose of explanation, has been described with reference to specific embodiments. However, the illustrative discussions above are not intended to be exhaustive or to limit the invention to the precise forms disclosed. Many modifications and variations are possible in view of the above teachings. The embodiments were chosen and described in order to best explain the principles of the embodiments and its practical applications, to thereby enable others skilled in the art to best utilize the embodiments and various modifications as may be suited to the particular use contemplated. Accordingly, the present embodiments are to be considered as illustrative and not restrictive, and the invention is not to be limited to the details given herein, but may be modified within the scope and equivalents of the appended claims.