Heterogeneous file optimization

Techniques are described herein that are capable of heterogeneously optimizing a file. Heterogeneous optimization involves optimizing regions of a file non-uniformly. For example, the regions of the file may be optimized to different extents. In accordance with this example, a different optimization technique may be used to optimize each region or subset of the regions. In one aspect, optimization designations are assigned to respective regions of a file based on access patterns that are associated with the respective regions. The file may be a database file, a virtualized storage file, or other suitable type of file. Each optimization designation indicates an extent to which the respective region is to be optimized. Each region may be optimized to the extent that is indicated by the respective optimization designation that is assigned to that region.

BACKGROUND

Data optimization is the act of reducing an amount of data that is stored on a storage device (e.g., a disk) or transmitted across a network without compromising the fidelity and integrity of the original data. Data optimization often involves a combination of techniques for eliminating redundancy in and between persistently stored files. Data de-duplication (dedup) is one such technique in which identical regions (a.k.a. chunks) of data in one or more files are stored as a single region. Compression is another such technique in which data is encoded to include fewer bits (or other information-bearing units) than the original data.

Once data is optimized, the data may be accessed by reversing the effects of the optimization (i.e., de-optimizing the optimized data), for example by performing an inverse dedup operation and/or a decompression operation with respect to the optimized data. However, de-optimization causes a delay with respect to accessing the data. A greater amount of data results in a longer latency. Moreover, such latency may occur each time the data is accessed unless a de-optimized version of the data is stored for access on a storage device. Furthermore, de-optimization often consumes substantial resources (e.g., memory, central processing unit (CPU), disk I/O, etc.) of a device, which may negatively affect a main workload that is running on the device. Accordingly, frequent de-optimization may result in relatively inefficient utilization of the device's resources.

For example, if data in a file is fully optimized, the latency that is associated with accessing the data may unduly degrade the performance of a device that accesses the data and/or a workload that is running on the device, especially if the data is frequently accessed. In another example, it may not be desirable to optimize some regions of a file and/or some types of data. However, the various regions of the file may not be visible to a device that attempts to optimize the file. Accordingly, the device may have no way to know whether the regions of the file are optimizable.

SUMMARY

Various approaches are described herein for, among other things, heterogeneously optimizing a file. Heterogeneous optimization involves optimizing regions of a file non-uniformly. For example, the regions of the file may be optimized to different extents. In accordance with this example, a different optimization technique may be used to optimize each region or subset of the regions.

An example method is described in which optimization designations are assigned to respective regions of a file based on access patterns that are associated with the respective regions. Each optimization designation indicates an extent to which the respective region is to be optimized. Each region is optimized to the extent that is indicated by the respective optimization designation that is assigned to that region.

Another example method is described in which access indicators are assigned to respective regions of a file. The access indicators correspond to respective access patterns that are associated with the respective regions. For example, the access patterns may be monitored using a file system filter driver. Optimization designations are assigned to the respective regions based on the respective access indicators that are assigned to the respective regions. Each optimization designation indicates an extent to which the respective region is to be optimized. Each region is optimized to the extent that is indicated by the respective optimization designation that is assigned to that region.

Yet another example method is described in which a virtualized storage file that includes multiple regions is mounted to provide a mounted virtualized storage file. The mounted virtualized storage file includes data sequences that correspond to the respective regions. Each data sequence is included in a collection of one or more respective files. A disk filter is executed with respect to the mounted virtualized storage file to monitor an access pattern of each collection. Optimization designations are assigned to the respective regions based on the access patterns of the respective collections that include the corresponding data sequences. Each region is optimized to the extent that is indicated by the respective optimization designation that is assigned to that region.

An example system is described that includes an assignment module and an optimization module. The assignment module is configured to assign optimization designations to respective regions of a file based on access patterns that are associated with the respective regions. Each optimization designation indicates an extent to which the respective region is to be optimized. The optimization module is configured to optimize each region to the extent that is indicated by the respective optimization designation that is assigned to that region.

Another example system is described that includes an assignment module and an optimization module. The assignment module is configured to assign access indicators to respective regions of a file. The access indicators correspond to respective access patterns that are associated with the respective regions. The assignment module is further configured to assign optimization designations to the respective regions based on the respective access indicators that are assigned to the respective regions. Each optimization designation indicates an extent to which the respective region is to be optimized. The optimization module is configured to optimize each region to the extent that is indicated by the respective optimization designation that is assigned to that region.

Yet another example system is described that includes a mounting module, an access monitor, an assignment module, and an optimization module. The mounting module is configured to mount a virtualized storage file that includes multiple regions to provide a mounted virtualized storage file. The mounted virtualized storage file includes data sequences that correspond to the respective regions. Each data sequence is included in a collection of one or more respective files. The access monitor is configured to execute a disk filter with respect to the mounted virtualized storage file to monitor an access pattern of each collection. The assignment module is configured to assign optimization designations to the respective regions based on the access patterns of the respective collections that include the corresponding data sequences. The optimization module is configured to optimize each region to the extent that is indicated by the respective optimization designation that is assigned to that region.

An example computer program product is described that includes a computer-readable medium having computer program logic recorded thereon for heterogeneously optimizing a file. The computer program product includes first and second program logic modules. The first program logic module is for enabling the processor-based system to assign optimization designations to respective regions of a file based on access patterns that are associated with the respective regions. Each optimization designation indicates an extent to which the respective region is to be optimized. The second program logic module is for enabling the processor-based system to optimize each region to the extent that is indicated by the respective optimization designation that is assigned to that region.

Another example computer program product is described that includes a computer-readable medium having computer program logic recorded thereon for heterogeneously optimizing a file. The computer program product includes first, second, and third program logic modules. The first program logic module is for enabling the processor-based system to assign access indicators to respective regions of a file. The access indicators correspond to respective access patterns that are associated with the respective regions. The second program logic module is for enabling the processor-based system to assign optimization designations to the respective regions based on the respective access indicators that are assigned to the respective regions. Each optimization designation indicates an extent to which the respective region is to be optimized. The third program logic module is for enabling the processor-based system to optimize each region to the extent that is indicated by the respective optimization designation that is assigned to that region.

Yet another example computer program product is described that includes a computer-readable medium having computer program logic recorded thereon for heterogeneously optimizing a file. The computer program product includes first, second, third, and fourth program logic modules. The first program logic module is for enabling the processor-based system to mount a virtualized storage file that includes multiple regions to provide a mounted virtualized storage file. The mounted virtualized storage file includes data sequences that correspond to the respective regions. Each data sequence is included in a collection of one or more respective files. The second program logic module is for enabling the processor-based system to execute a disk filter with respect to the mounted virtualized storage file to monitor an access pattern of each collection. The third program logic module is for enabling the processor-based system to assign optimization designations to the respective regions based on the access patterns of the respective collections that include the corresponding data sequences. The fourth program logic module is for enabling the processor-based system to optimize each region to the extent that is indicated by the respective optimization designation that is assigned to that region.

DETAILED DESCRIPTION

Example embodiments described herein are capable of heterogeneously optimizing a file. Heterogeneous optimization involves optimizing regions of a file non-uniformly. For example, the regions of the file may be optimized to different extents. In accordance with this example, a different optimization technique may be used to optimize each region or subset of the regions.

In example embodiments, optimization designations are assigned to respective regions of a file based on access patterns that are associated with the respective regions. An access pattern indicates and/or describes access(es) and/or modification(s) with respect to a region with which the access pattern is associated. The file may be a database file, a virtualized storage file, or other suitable type of file. A database file is a file that includes multiple record files and/or multiple log files. A virtualized storage file is a file that is configured to be mounted as a disk or a volume to provide a file system interface for accessing hosted files. In accordance with these example embodiments, each optimization designation indicates an extent to which the respective region is to be optimized. Each region may be optimized to the extent that is indicated by the respective optimization designation that is assigned to that region.

Optimization designations may be defined in any suitable manner. For instance, a first optimization designation may indicate that a first region of a file is to be compressed but not de-duplicated. A second optimization designation may indicate that a second region is to be de-duplicated but not compressed. A third optimization designation may indicate that a third region is to be compressed and de-duplicated. A fourth optimization designation may indicate that a fourth region is to be neither compressed nor de-duplicated. Fifth and sixth optimization designations may indicate that fifth and sixth regions are to be compressed using respective first and second compression techniques. Seventh and eighth optimization designations may indicate that seventh and eighth regions are to be de-duplicated using respective first and second de-duplication techniques, and so on.

In an example embodiment, each optimization designation indicates a respective optimization policy or a respective optimization level within a global policy. An optimization policy is a set of rules that defines a manner in which regions of a file are to be optimized based on designated criteria. The optimization policy may define multiple optimization levels. Each optimization level indicates one or more data optimization techniques that are to be performed with respect to the regions that satisfy a respective subset of the designated criteria. For example, a first optimization level may indicate that no optimization is to be performed with respect to regions that are associated with the first optimization level. In accordance with this example, the extent to which a region is optimized may increase as the optimization level that is associated with the region increases. In an aspect, increasing an optimization level that is associated with a region may increase storage savings but may consume more computational resources and/or add latency to data access operations that are performed with respect to the region. Accordingly, selecting an optimization level to be associated with a region may involve balancing storage savings with increased resource consumption and/or latency. Such balancing may be based on or influenced by the data optimization technique that provides the greatest optimization for the type of data that is to be optimized. It will be recognized that an optimization designation that indicates an optimization policy may further indicate an optimization level that is defined by that optimization policy.

Example techniques described herein have a variety of benefits as compared to conventional techniques for optimizing a file. For instance, some example techniques may optimize the various regions of a file to different degrees. Some example techniques may partially optimize a file, meaning that one or more regions of the file are not optimized. The time and/or amount of resources that is consumed by a device to access a file that is optimized in accordance with one or more of the example techniques described herein may be less than the time and/or amount of resources that is consumed by the device to access the file if it were optimized using conventional techniques.

FIG. 1is a block diagram of an example device100in accordance with an embodiment. Device100is a processing system that is capable of optimizing a file. An example of a processing system is a system that includes at least one processor that is capable of manipulating data in accordance with a set of instructions. For instance, a processing system may be a computer, a personal digital assistant, etc.

Device100includes storage102and an optimizer104. Storage102stores a file106. File106includes multiple regions108. File106is shown to include a vector of N regions (labeled as R1, R2, . . . , RN) for illustrative purposes and is not intended to be limiting. It will be recognized that file106may include any suitable number and/or configuration of regions. For instance, regions108need not necessarily be stored contiguously on storage102. Moreover, a region need not necessarily be stored using contiguous bits of storage102. Each region may correspond to any suitable offset in file106. The number of bits in each region may be based on any of a variety of factors, such as an amount of memory that is available for tracking the regions. Each region may include any number of bits (i.e., may be any size), and the number of bits in each region may be the same or different. Furthermore, the number of bits in each region may be fixed or variable.

Regions108may be defined based on access patterns that are associated with the regions108, access indicators that are assigned to the respective regions108, and/or any other suitable factor(s). An access pattern indicates and/or describes access(es) and/or modification(s) with respect to a region with which the access pattern is associated. For instance, an access pattern may include a time at which a region was most recently accessed, a number of times that the region is accessed, a frequency with which the region is accessed, a time at which the region was most recently modified, a number of times that the region is modified, a frequency with which the region is modified, an indication as to whether the region is accessed during a system boot operation (e.g., with respect to device100), whether the region is accessed by a specified application (e.g., a database application), etc.

Access patterns may correspond to access indicators. Each access indicator is associated with one or more respective criteria. An access indicator is assigned to a region if an access pattern that is associated with the region satisfies the one or more criteria that are associated with that access indicator. Accordingly, multiple instances of an access indicator may be assigned among the region108of file106, though the scope of the example embodiments is not limited in this respect. Access indicators are discussed in greater detail below with reference toFIGS. 4 and 5.

Optimizer104is configured to optimize regions108of file106based on optimization designations that are assigned to the regions108. The optimization designations may be based on access patterns that are associated with the regions108and/or any other suitable factor(s). Techniques for optimizing regions (e.g., regions108) are described in detail below with reference toFIGS. 3-6.

FIG. 2is a block diagram of an example host device200in accordance with an embodiment. Host device200is a processing system that is capable of mounting a virtualized storage file to provide a virtual disk. Host device200includes storage202and an optimizer204. Storage202stores a virtualized storage file206, which includes multiple regions208. Regions208may be defined based on access patterns that are associated with the regions208, offsets in virtualized storage file206that correspond to hosted files that are stored on a virtual disk (e.g., virtual disk210), and/or any other suitable factor(s). The number of bits in each region may be based on any of a variety of factors, including but not limited to an average number of bits included in hosted files that correspond to the regions, an amount of memory that is available for tracking the regions, etc. Regions208are shown to be arranged as a vector of N regions (labeled as R1, R2, . . . , RN) for illustrative purposes and are not intended to be limiting. It will be recognized that virtualized storage file206may include any suitable number and/or configuration of regions.

Optimizer204is configured to optimize regions208of virtualized storage file206based on optimization designations that are assigned to the regions208. The optimization designations may be based on access patterns that are associated with the regions208, properties of the hosted files, and/or any other suitable factor(s). Example properties of a hosted file include but are not limited to an access pattern of the hosted file, heuristics regarding the hosted file, a classification of the hosted file, a format of the hosted file, a type of the hosted file, an intended use of the hosted file (e.g., whether the hosted file is to be used to execute virtual machine212or during a system boot operation with regard to host device200), whether the hosted file is accessed by a specified application (e.g., a database application), etc. Example formats of a hosted file include but are not limited to an Adobe® PDF format, a Microsoft® Office (e.g., Word®, Excel®, Visio®, etc.) format, a WordPerfect® format, an extensible markup language (XML) format, etc.

In some example embodiments, optimizer204is capable of mounting virtualized storage file206to provide virtual disk210, as indicated by arrow214. Virtual disk210is shown inFIG. 2to be mounted on a virtual machine212, which is configured to execute on host device200. It will be recognized, however, that virtual disk210may be mounted on host device200, rather than on virtual machine212. For example, host device200need not necessarily include virtual machine212. Mounting virtualized storage file206on host device200or virtual disk210may enable optimizer204to recognize virtual disk210as storage, rather than as a file. For instance, mounting virtualized storage file206may enable optimizer204to determine logical volume(s) and/or file system(s) that are associated with virtual disk210for purposes of optimizing regions208or hosted files that are included in virtual disk210. Techniques for optimizing regions (e.g., regions208) are described in detail below with reference toFIGS. 3-6.

FIGS. 3-6depict flowcharts300,400,500, and600of example methods for optimizing a file in accordance with embodiments. Flowcharts300,400,500, and600may be performed by optimizer104of device100shown inFIG. 1and/or by optimizer204of host device200shown inFIG. 2, for example. For illustrative purposes, flowcharts300,400,500, and600are described with respect to an optimizer700shown inFIG. 7, which is an example of an optimizer104or204, according to an embodiment. As shown inFIG. 7, optimizer700includes an assignment module702, an optimization module704, an access monitor706, and a mounting module708. Further structural and operational embodiments will be apparent to persons skilled in the relevant art(s) based on the discussion regarding flowcharts300,400,500, and600. It will be recognized that any one or more of assignment module702, optimization module704, access monitor706, and/or mounting module708may be implemented in virtual machine212.

As shown inFIG. 3, the method of flowchart300begins at step302. In step302, optimization designations are assigned to respective regions of a file based on access patterns that are associated with the respective regions. Each optimization designation may be assigned to the respective region based on any of a variety of factors, including but not limited to a latency that is associated with accessing that region, an amount of system resources (e.g., bandwidth, runtime, etc. of a processor, storage, or network in a system) that is utilized to access that region, whether that region is accessed in response to mounting an operating system that uses that region (e.g., to provide a virtual disk), whether that region is accessed by a specified application (e.g., a database application), etc. The file may be a virtualized storage file, a database file, or other suitable type of file. Each optimization designation indicates an extent to which the respective region is to be optimized. For instance, each optimization designation may indicate a respective optimization policy and/or optimization level in an optimization policy to be applied to the region to which that optimization designation is assigned. In an example implementation, assignment module702assigns the optimization designations to the respective regions.

In an example embodiment, an access pattern that is associated with a region indicates an extent to which the region is accessed. For instance, the extent may be based on a number of times that the region is accessed, a frequency with which the region is accessed, a time at which the region is most recently accessed, and/or a combination thereof. It will be recognized that the extent to which a region is access may be based on factor(s) in addition to or in lieu of the example factors recited above.

In another example embodiment, an access pattern that is associated with a region indicates an extent to which the region is modified. For example, the extent may be based on a number of times that the region is modified, a frequency with which the region is modified, a time at which the region is most recently modified, and/or a combination thereof. It will be recognized that the extent to which a region is modified may be based on factor(s) in addition to or in lieu of the example factors recited above.

In yet another example embodiment, each access pattern indicates a specific extent to which the respective region is accessed or modified. The specific extent is a single value that represents the actual extent (or an estimate thereof) to which the respective region is accessed or modified. For example, if a region is modified seven times, the corresponding access pattern may indicate that the region is modified seven times, approximately zero times, approximately ten times, etc. In another example, if a region is accessed 253 times per hour, the corresponding access pattern may indicate that the region is accessed 253 time per hour, approximately 200 times per hour, approximately 250 times per hour, etc.

In still another example embodiment, each access pattern indicates a general extent that includes the specific extent to which the respective region is accessed or modified. For example, if a region is modified seven times, the corresponding access pattern may indicate that the region is modified between zero and ten times, between five and twenty times, or any other suitable range of times. In another example, if a region is accessed 253 times per hour, the corresponding access pattern may indicate that the region is accessed between zero and three-hundred times, between two-hundred and four-hundred times, or any other suitable range of times.

For instance, first access pattern(s) may indicate a first general extent of zero to 100 instances of access or modification. Second access pattern(s) may indicate a second general extent of 101 to 250 instances of access or modification. Third access pattern(s) may indicate a third general extent of 251 to 500 instances of access or modification, and so on. The example ranges of the general extents described herein are provided for illustrative purposes and are not intended to be limiting. It will be recognized that a general extent may indicate any suitable range of access instances, access frequencies, access times, modification instances, modification frequencies, modification times, etc.

At step304, each region is optimized to the extent that is indicated by the respective optimization designation that is assigned to that region. In an example implementation, optimization module704optimizes each region.

In an example embodiment, each region is iteratively optimized to the extent that is indicated by the respective optimization designation that is assigned to that region. For example, optimization module704may monitor the regions to determine changes with respect to the regions since the most recent optimization of the regions. In accordance with this example, optimization module704may create a differential file that includes the changes. For instance, optimization module704may optimize the regions on a periodic basis.

As shown inFIG. 4, the method of flowchart400begins at step402. In step402, access indicators are assigned to the respective regions of a file. The access indicators correspond to respective access patterns that are associated with the respective regions. In an example implementation, assignment module702assigns the access indicators to the respective regions.

In an example embodiment, access indicators having a first common value (e.g., one) are assigned to a first subset of the regions. Regions that are included in the first subset are associated with respective access patterns that satisfy at least one first criterion (e.g., most recent access time more than one day ago). Access indicators having a second common value (e.g., two) are assigned to a second subset of the regions. Regions that are included in the second subset are associated with respective access patterns that satisfy at least one second criterion (e.g., most recent access time more than one hour ago but less than one day ago). Access indicators having a third common value (e.g., three) are assigned to a third subset of the regions. Regions that are included in the third subset are associated with respective access patterns that satisfy at least one third criterion (e.g., most recent access time less than one hour ago). Three subsets of regions are described with respect to this example embodiment for illustrative purposes and are not intended to be limiting. It will be recognized that the example embodiment may include any number of subsets of regions corresponding to any number of respective criteria.

At step404, optimization designations are assigned to the respective regions based on the respective access indicators that are assigned to the respective regions. Each optimization designation indicates an extent to which the respective region is to be optimized. In an example implementation, assignment module702assigns the optimization designations to the respective regions.

In an example embodiment, each optimization designation may be associated with a respective latency. For instance, if a first optimization designation indicates that a first type of optimization operation is to be performed with respect to a region to which the first optimization designation is assigned, a first latency that is expected with regard to the first type of optimization operation may be associated with the first optimization designation. If a second optimization designation indicates that a second type of optimization operation is to be performed with respect to a region to which the second optimization designation is assigned, a second latency that is expected with regard to the second type of optimization operation may be associated with the second optimization designation, and so on.

In accordance with this example embodiment, a latency threshold may be associated with each access indicator. For instance, it may be determined that a system is capable of tolerating a first latency with respect to accessing regions to which respective access indicators that have a first value are assigned. It may be further determined that a system is capable of tolerating a second latency with respect to accessing regions to which respective access indicators that have a second value are assigned, and so on. The first latency may correspond to a first latency threshold; the second latency may correspond to a second latency threshold, and so on. Accordingly, each optimization designation may be assigned to the respective region based on a latency that is associated with the respective optimization designation being less than a latency threshold that is associated with the access indicator that is assigned to that region.

In another example embodiment, each optimization designation may be associated with a respective amount of system resource consumption. For instance, if a first optimization designation indicates that a first type of optimization operation is to be performed with respect to a region to which the first optimization designation is assigned, a first amount of system resource consumption that is expected with regard to the first type of optimization operation may be associated with the first optimization designation. If a second optimization designation indicates that a second type of optimization operation is to be performed with respect to a region to which the second optimization designation is assigned, a second amount of system resource consumption that is expected with regard to the second type of optimization operation may be associated with the second optimization designation, and so on.

In accordance with this example embodiment, a consumption threshold may be associated with each access indicator. For instance, it may be determined that a system is capable of tolerating a first amount of system resource consumption with respect to accessing regions to which respective access indicators that have a first value are assigned. It may be further determined that a system is capable of tolerating a second amount of system resource consumption with respect to accessing regions to which respective access indicators that have a second value are assigned, and so on. The first amount of system resource consumption may correspond to a first consumption threshold; the second amount of system resource consumption may correspond to a second consumption threshold, and so on. Accordingly, each optimization designation may be assigned to the respective region based on an amount of system resource consumption that is associated with the respective optimization designation being less than a consumption threshold that is associated with the access indicator that is assigned to that region.

In yet another example embodiment, first optimization designations are assigned to a first subset of the regions based on first access indicators that correspond to a first range of values being assigned to the respective regions that are included in the first subset. Second optimization designations are assigned to a second subset of the regions based on second access indicators that correspond to a second range of values being assigned to the respective regions that are included in the second subset, and so on. In accordance with this example embodiment, the first optimization designations may indicate a first common extent to which the respective regions that are included in the first subset are to be optimized. The second optimization designations may indicate a second common extent to which the respective regions that are included in the second subset are to be optimized, and so on.

At step406, each region is optimized to the extent that is indicated by the respective optimization designation that is assigned to that region. In an example implementation, optimization module704optimizes each region.

In some example embodiments, one or more steps402,404, and/or406of flowchart400may not be performed. Moreover, steps in addition to or in lieu of steps402,404, and/or406may be performed.

In an example embodiment, instead of performing step402of flowchart400, the steps of flowchart500inFIG. 5are performed. As shown inFIG. 5, the method of flowchart500begins at step502. In step502, access patterns that are associated with respective regions of a file are monitored using a file system filter driver. A file system filter driver intercepts requests that are targeted at a file system or another file system filter driver. By intercepting a request before it reaches its intended target, a file system filter driver can extend and/or replace functionality provided by the original target of the request. Examples of a file system filter driver include but are not limited to an anti-virus filter, a backup agent, an encryption module, etc. In an example implementation, access monitor706monitors the extent to which each of the plurality of regions is accessed.

At step504, access indicators are assigned to the respective regions. Each access indicator corresponds to the access pattern that is associated with the respective region. In an example implementation, assignment module702assigns the access indicators to the respective regions.

In another example embodiment, instead of performing steps402and404of flowchart400, the steps of flowchart600inFIG. 6are performed. As shown inFIG. 6, the method of flowchart600begins at step602. In step602, a virtualized storage file that includes multiple regions is mounted to provide a mounted virtualized storage file that includes data sequences that correspond to the respective regions. Each data sequence is included in a collection of one or more respective files. In an example implementation, mounting module708mounts the virtualized storage file to provide the mounted virtualized storage file.

At step604, a disk filter is executed with respect to the mounted virtualized storage file to monitor an access pattern of each collection. A disk filter intercepts requests that are targeted at a virtual or physical disk. By intercepting requests before they reach their intended target, the disk filter can determine information (e.g., access patterns) regarding hosted files that are included in the intended target. In an example implementation, access monitor706executes the disk filter with respect to the mounted virtualized storage file.

At step606, optimization designations are assigned to the respective regions based on the access patterns of the respective collections that include the corresponding data sequences. In an example implementation, assignment module702assigns the optimization designations to the respective regions.

It will be recognized that optimizer700may not include one or more of assignment module702, optimization module704, access monitor706, and/or mounting module708. Furthermore, optimizer700may include modules in addition to or in lieu of assignment module702, optimization module704, access monitor706, and/or mounting module708.

Assignment module702, optimization module704, access monitor706, and mounting module708may be implemented in hardware, software, firmware, or any combination thereof. For example, assignment module702, optimization module704, access monitor706, and/or mounting module708may be implemented as computer program code configured to be executed in one or more processors. In another example, assignment module702, optimization module704, access monitor706, and/or mounting module708may be implemented as hardware logic/electrical circuitry.

FIG. 8depicts an example computer800in which embodiments may be implemented. Any one or more of devices100and200shown in respectiveFIGS. 1 and 2(or any one or more subcomponents thereof shown inFIG. 7) may be implemented using computer800, including one or more features of computer800and/or alternative features. Computer800may be a general-purpose computing device in the form of a conventional personal computer, a mobile computer, or a workstation, for example, or computer800may be a special purpose computing device. The description of computer800provided herein is provided for purposes of illustration, and is not intended to be limiting. Embodiments may be implemented in further types of computer systems, as would be known to persons skilled in the relevant art(s).

As shown inFIG. 8, computer800includes a processing unit802, a system memory804, and a bus806that couples various system components including system memory804to processing unit802. Bus806represents one or more of any of several types of bus structures, including a memory bus or memory controller, a peripheral bus, an accelerated graphics port, and a processor or local bus using any of a variety of bus architectures. System memory804includes read only memory (ROM)808and random access memory (RAM)810. A basic input/output system812(BIOS) is stored in ROM808.

Computer800also has one or more of the following drives: a hard disk drive814for reading from and writing to a hard disk, a magnetic disk drive816for reading from or writing to a removable magnetic disk818, and an optical disk drive820for reading from or writing to a removable optical disk822such as a CD ROM, DVD ROM, or other optical media. Hard disk drive814, magnetic disk drive816, and optical disk drive820are connected to bus806by a hard disk drive interface824, a magnetic disk drive interface826, and an optical drive interface828, respectively. The drives and their associated computer-readable storage media provide nonvolatile storage of computer-readable instructions, data structures, program modules and other data for the computer. Although a hard disk, a removable magnetic disk and a removable optical disk are described, other types of computer-readable storage media can be used to store data, such as flash memory cards, digital video disks, random access memories (RAMs), read only memories (ROM), and the like.

A number of program modules may be stored on the hard disk, magnetic disk, optical disk, ROM, or RAM. These programs include an operating system830, one or more application programs832, other program modules834, and program data836. Application programs832or program modules834may include, for example, computer program logic for implementing assignment module702, optimization module704, access monitor706, mounting module708, flowchart300(including any step of flowchart300), flowchart400(including any step of flowchart400), flowchart500(including any step of flowchart500), and/or flowchart600(including any step of flowchart600), as described herein.

A user may enter commands and information into the computer800through input devices such as keyboard838and pointing device840. Other input devices (not shown) may include a microphone, joystick, game pad, satellite dish, scanner, or the like. These and other input devices are often connected to the processing unit802through a serial port interface842that is coupled to bus806, but may be connected by other interfaces, such as a parallel port, game port, or a universal serial bus (USB).

A display device844(e.g., a monitor) is also connected to bus806via an interface, such as a video adapter846. In addition to display device844, computer800may include other peripheral output devices (not shown) such as speakers and printers.

Computer800is connected to a network848(e.g., the Internet) through a network interface or adapter850, a modem852, or other means for establishing communications over the network. Modem852, which may be internal or external, is connected to bus806via serial port interface842.

As used herein, the terms “computer program medium” and “computer-readable medium” are used to generally refer to media such as the hard disk associated with hard disk drive814, removable magnetic disk818, removable optical disk822, as well as other media such as flash memory cards, digital video disks, random access memories (RAMs), read only memories (ROM), and the like.

As noted above, computer programs and modules (including application programs832and other program modules834) may be stored on the hard disk, magnetic disk, optical disk, ROM, or RAM. Such computer programs may also be received via network interface850or serial port interface842. Such computer programs, when executed or loaded by an application, enable computer800to implement features of embodiments discussed herein. Accordingly, such computer programs represent controllers of the computer800.