Patent Description:
The use of virtual disks or virtual storage may mitigate against wasted and/or unutilized space on storage devices. One type of virtual disk technology or virtual storage technology is known as thin provisioning. Thin provisioning offers a different approach to storage provisioning. For example, a storage controller may allocate capacity to the thin provisioned storage volume as an application writes data over time, not upfront at the time of storage volume creation. In other words, thin provisioning enables on demand allocation of storage, rather than the upfront allocation of storage that is typically needed when a physical storage medium if first initialized. Therefore, thin provisioning may reduce unused storage space and improve storage utilization. For example, with thin provisioning, storage capacity utilization efficiency can be improved, while incurring little administrative overhead. Thus, thin provisioning may enable organizations to delay storage purchases and save on environmental costs.

While thin provisioning may significantly improve storage utilization, it may be difficult to accurately calculate free space (i.e., storage available for applications and their files) across a plurality of thin provisioned storage entities or virtual disks. For example, a plurality of thin provisioned storage entities may be allocated to a solid-state storage and a hard drive or set of hard drives. In conventional systems, each of the plurality of thin provisioned storage entities tracks its own free space. However, those thin provisioned storage entities do not generally share their free space with other thin provisioned storage entities or virtual disks. Therefore, free space determined by thin provisioned storage entities or virtual disks may not properly reflect the actual free space of the physical storage(s) hosting the thin provisioned storage entities or virtual disks.

It is with respect to these considerations and others that the disclosure made herein is presented. <CIT> relates to a storage space management system for a thin provisioned virtual environment that comprises an over-allocation computation engine to compute an over-allocation metric for a virtual datastore. The over-allocation metric may be computed based on virtual storage space allocated to corresponding virtual machines and actual physical storage allocated to the virtual datastore. Further, the over-allocation metric may indicate extent of over-allocation of the actual physical storage to the virtual datastore. An available space computation engine may determine an available space metric for the virtual machines based on available datastore space and available physical storage space. An analysis engine may obtain a time value indicating time left within which storage space available for the virtual machines would be utilized. Further, the analysis engine may provide the over-allocation metric, the available space metric, and the time value to a capacity planning unit for storage space management in the virtual environment. <CIT> relates to a request for obtaining a space allocation descriptor that is received by a block control layer of a storage system. The space allocation descriptor is indicative of one or more logical blocks free for allocation within a range of logical addresses. The range of logical addresses is included within a logical address space related to an upper layer application which has issued the request. The space allocation descriptor is provided by using a data structure included in the block control layer and operative to map between the logical address space and allocated storage blocks within a physical storage space, managed by the block control layer. <CIT> relates to a method and system for determining a metric to use to determine whether to generate a low space alert. A determination is made of provisioned storage space comprising storage space allocated to at least one application, wherein applications use less than all the provisioned storage space. A determination is made of available storage space comprising all installed storage space available for use by the at least one application having allocated storage space. A determination is made of allocated storage space comprising storage space used by the applications. A determination is made of an allocation metric as a function of the provisioned storage space, the allocated storage space, and the available storage space. The determined allocation metric is used to determine whether to generate a storage space related alert.

It is the object of the present invention to provide a method and system for determination of virtual storage free space.

This disclosure describes virtual storage free space management techniques that may be used to determine an amount of free space that is associated with at least one virtual storage entity. In this disclosure, the free space that is associated with at least the one virtual storage entity is unused space that the virtual storage entity has allocated for storage of files and other data. In some implementations, the virtual storage free space management techniques are enabled by a free space application programming interface (API) that is responsive to requests to determine free space associated with at least the one virtual storage entity.

In some implementations, the virtual storage free space management techniques may analyze at least one virtual storage entity to determine the number of storage slabs associated with the virtual storage entity that are allocated with data. In this disclosure, a storage slab is a quantum of storage space. For example, in some implementations, a storage slab is <NUM> MB, <NUM> MB, or <NUM> GB. A virtual storage entity is allocated with a plurality of storage slabs, where those plurality of storage slabs may be associated with a physical storage entity. The physical storage entity may comprise one or more physical storage devices, such as solid-state drives, hard drives, and the like.

The virtual storage free space management techniques may calculate a data allocation value of the virtual storage entity based on the number of storage slabs allocated with data. The data allocation value is a byte value that is determined by identifying the storage slabs of the virtual storage entity that include stored data, and summing the storage amount in bytes associated with each of the storage slabs that include stored data.

The virtual storage free space management techniques may further analyze a physical storage entity to determine a storage allocation value associated with the physical storage entity. The determined storage allocation value may represent a byte value that is determined by identifying storage slabs of the physical storage entity that are allocated to one or more virtual storage entities. More specifically, the storage allocation value may be a byte value that is obtained by summing the storage amount in bytes associated with each of the storage slabs of the physical storage entity that is allocated to one or more virtual storage entities.

In some implementations, the virtual storage free space management techniques may determine a free space value associated with the virtual storage entity based on the storage allocation value and the data allocation value.

In some implementations, the data allocation value is calculated by analyzing a free space bitmap associated with the storage slabs allocated with data, the analyzing of the free space bitmap providing an amount of free space associated with the storage slabs allocated with data. Furthermore, in some implementations, the data allocation value is calculated by determining a storage value associated with the number of storage slabs allocated with data and subtracting the amount of free space associated with at least the number of one or more storage slabs allocated with data from the storage value.

It should be appreciated that, although described in relation to a system, the above-described subject matter may also be implemented as a computer-controlled apparatus, a computer process, a computing system, or as an article of manufacture such as a computer-readable medium and/or dedicated chipset. These and various other features will be apparent from a reading of the following Detailed Description and a review of the associated drawings.

This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended that this Summary be used to limit the scope of the claimed subject matter.

References made to individual items of a plurality of items can use a reference number with a letter or a sequence of letters to refer to each individual item. Furthermore, it is to be understood that referencing an item in the drawings and/or in this text using a reference number or otherwise may denote one or more such referenced items.

In some implementations, the virtual storage free space management techniques analyze at least one virtual storage entity to determine the number of storage slabs associated with the virtual storage entity that are allocated with data. In this disclosure, a storage slab is a quantum of storage space. For example, in some implementations, a storage slab is <NUM> MB, <NUM> MB, or <NUM> GB. A virtual storage entity is allocated with a plurality of storage slabs, where those plurality of storage slabs may be associated with a physical storage entity. The physical storage entity may comprise one or more physical storage devices, such as solid-state drives, hard drives, and the like.

In some implementations, the virtual storage free space management techniques determine a free space value associated with the virtual storage entity based on the storage allocation value and the data allocation value.

In some implementations, the data allocation value is calculated by analyzing a free space bitmap associated with the storage slabs allocated with data, the analyzing of the free space bitmap providing an amount of free space associated with the storage slabs allocated with data. Furthermore, in some implementations, the data allocation value is calculated by determining a storage value associated with the number storage slabs allocated with data and subtracting the amount of free space associated with at least the number of one or more storage slabs allocated with data from the storage value.

<FIG> illustrates an exemplary computing environment <NUM>. The virtual storage space management techniques described herein may be implemented buy the computing environment <NUM>.

As illustrated, the computing environment <NUM> may include a computing device <NUM>. The computing device <NUM> may be coupled to a plurality of virtual storage entities <NUM>-<NUM>. <NUM>-n through a network <NUM>. The plurality of virtual storage entities <NUM>-<NUM>. <NUM>-n may be collectively referred to as virtual storage entities <NUM>, and individually each of the plurality of virtual storage entities <NUM>-<NUM>. <NUM>-n may be referred to as a virtual storage entity <NUM>. The virtual storage entities <NUM> may be coupled to a plurality of physical storage entities <NUM>-<NUM>. The plurality of physical storage entities <NUM>-<NUM>. <NUM>-n may be collectively referred to as physical storage entities <NUM>, and individually each of the plurality of physical storage entities <NUM>-<NUM>. <NUM>-n may be referred to as a physical storage entity <NUM>.

The computing device <NUM> may be any computing device, such as, a personal computer, a workstation, a server, a mainframe, a handheld computer, a palmtop computer, a telephony device, network appliance, a blade computer, a server, etc. The physical storage entities <NUM> may be any suitable storage devices, such as hard disks, solid-state disks, linear storage devices, etc. The computing device <NUM> and the physical storage entities <NUM> may communicate over the network <NUM>. The network <NUM> may include any suitable network, such as the Internet, a storage area network, a wide area network, a local area network, etc. In some implementations, the computing environment <NUM> may be implemented in a cloud computing environment, and the computing environment <NUM>, may provide processing and storage services to users, enterprise entities, etc..

The computing device <NUM> may include a storage management module <NUM>. The storage management module <NUM> may function to manage the physical storage entities <NUM>. For example, the storage management module <NUM> may be controlled to provision the virtual storage entities <NUM>. In some implementations, the physical storage entities <NUM> each comprise data storage capability that is divided into chunks of bytes. These chunks of bytes are also known as storage slabs. Each of the physical storage entities <NUM> may have a plurality of storage slabs, where each of the plurality of storage slabs is <NUM> MB, <NUM> MB, <NUM> GB, or the like. The storage management module <NUM> may be controlled to allocate storage slabs of one or more of the physical storage entities <NUM> to one or more the virtual storage entities <NUM>. One or more application programming interfaces (API) <NUM> may provide an interface to the storage management module <NUM> in order to enable provisioning of the virtual storage entities <NUM>. Furthermore, as described hereinafter, the one or more APIs <NUM> may be used to determine free space associated with at least one of the virtual storage entities <NUM>.

The virtual storage entities <NUM> may comprise thin provisioned storage volumes. These thin provisioned storage volumes save storage space when storage space is potentially or temporarily needed. Without the use of thin provisioned storage volumes, target storage volumes consume the same physical capacity as source storage volumes, such as the physical storage entities <NUM>. When a normal storage volume is created, it occupies the defined capacity on the physical drives. Thin provisioned storage volumes do not occupy physical capacity when they are initially created. Therefore, an administrator can initially provision less storage capacity, which can help lower the amount of physical storage that is needed by many installations.

<FIG> illustrates an enhanced view of at least one virtual storage entity <NUM> and at least one physical storage entity <NUM> of the computing environment <NUM>. The enhanced view of the virtual storage entity <NUM> shows that the virtual storage entity <NUM> includes a plurality of storage slabs <NUM>. Furthermore, the enhanced view of the physical storage entity <NUM> shows that the physical storage entity <NUM> includes a plurality of storage slabs <NUM>. In the exemplary embodiment of the computing environment <NUM> illustrated in <FIG>, the virtual storage entity <NUM> may have an allocated maximum capacity of <NUM> GB. The allocated maximum capacity of <NUM> GB may be configured by the storage management module <NUM>. Furthermore, in the exemplary embodiment of the computing environment <NUM> illustrated in <FIG>, the physical storage entity <NUM> may have a fixed storage capability of <NUM> GB. The storage capabilities of the virtual storage entities <NUM> and the physical storage entities <NUM> described herein are exemplary. Specifically, the virtual storage entities <NUM> and the physical storage entities <NUM> may be implemented and deployed having any storage capability, as required by use scenarios associated with the computing environment <NUM>.

Each of the virtual storage entities <NUM> may be virtually provisioned by one or more of the physical Storages <NUM>. For example, as illustrated in <FIG>, the enhanced views of the virtual storage entity <NUM> and physical storage entity <NUM> show that the storage slab <NUM>-<NUM> may be allocated to the storage slab <NUM>-<NUM>, the storage slab <NUM>-<NUM> may be allocated to the storage slab <NUM>-<NUM> and the storage slab <NUM>-<NUM> may be allocated to the storage slab <NUM>-<NUM>. The virtual storage entity <NUM> may have additional storage slabs <NUM> allocated by other physical storage entities <NUM>. Furthermore, one or more of the physical entities <NUM> may allocate additional storage slabs <NUM> to one or more of the virtual storage entities <NUM>. Each of the storage slabs <NUM> and <NUM> may have an associated byte value. For example, one or more the storage slabs <NUM> and/or <NUM> may have a byte value of <NUM> MB, <NUM> MB, <NUM> GB, etc..

A virtual storage free space bitmap <NUM> may be used in the computing environment <NUM>. As illustrated, the virtual storage free space bitmap <NUM> may be coupled to the virtual storage entities <NUM>. Operationally, the virtual storage free space bitmap <NUM> tracks the free space in each of the slabs <NUM> associated with the virtual storage entities <NUM>. For example, the virtual storage free space bitmap <NUM> may comprise a plurality of bits. Each of the plurality bits may correspond to a storage cluster in one of the storage slabs <NUM>. Each of the storage slabs <NUM> may comprise a plurality of storage clusters. A value of each bit of the plurality bits associated with the free space bitmap <NUM> represents whether the corresponding storage cluster has been allocated with data or is free. For example, one bit value (e.g., <NUM>, logical false) may represent that the corresponding storage cluster is free, and a different bit value (e.g., <NUM>, non-zero, logical true) may represent that the corresponding storage cluster is allocated. Therefore, the virtual storage free space bitmap <NUM> enables the storage management module <NUM> to at least ascertain the amount of free space within each of the storage slabs <NUM>, on a storage cluster to storage cluster basis. In some embodiments, the virtual storage free space bitmap <NUM> is stored in a persistent memory associated with the computing environment <NUM>.

The virtual storage free space bitmap <NUM> tracks each of the storage slabs <NUM>. For example, the virtual storage free space bitmap <NUM> may track the storage slabs <NUM> that are allocated with data. Furthermore, the virtual storage free space bitmap <NUM> may track the storage slabs <NUM> that are not allocated with data (i.e., free storage slabs). In some implementations, bits associated with the virtual storage free space bitmap <NUM> are used to represent whether a corresponding storage slab has been allocated with data or is free. For example, one bit value (e.g., <NUM>, logical false) may represent that the corresponding storage slab is free, and a different bit value (e.g., <NUM>, non-zero, logical true) may represent that the corresponding storage slab is allocated. Therefore, the virtual storage free space bitmap <NUM> enables the storage management module <NUM> to at least ascertain which storage slabs <NUM> are allocated with data and which storage slabs <NUM> are free of data.

In some implementations, the virtual storage free space bitmap <NUM> comprises two distinct bitmaps. Specifically, a first bitmap tracks the free space in each of the storage slabs <NUM> associated with the virtual storage entities <NUM>, and a second bitmap tracks the storage slabs <NUM> that are allocated with data and those that are free of data.

Additionally, a physical storage free space bitmap <NUM> may be used in the computing environment <NUM>. As illustrated, the physical storage free space bitmap <NUM> may be coupled to the physical storage entities <NUM>. Operationally, the physical storage free space bitmap <NUM> tracks the storage slabs <NUM> associated with the physical storage entities <NUM> that are not allocated to one or more of the virtual storage entities <NUM>. For example, the physical storage free space bitmap <NUM> may comprise a plurality bits. Each of the plurality bits may correspond to a storage slab <NUM> associated with a corresponding physical storage entity <NUM>. A value of each bit of the plurality bits associated with the physical storage free space bitmap <NUM> represents whether the corresponding storage slab <NUM> is allocated to a virtual storage entity <NUM>. For example, one bit value (e.g., <NUM>, logical false) may represent that the corresponding storage slab <NUM> is free, and a different bit value (e.g., <NUM>, non-zero, logical true) may represent that the corresponding storage slab <NUM> is allocated. Therefore, the physical storage free space bitmap <NUM> enables the storage management module <NUM> to at least ascertain which storage slabs <NUM> are not allocated to one or more of the virtual storages <NUM>. In some embodiments, the physical storage free space bitmap <NUM> is stored in a memory associated with the computing environment <NUM>.

Turning now to <FIG>, aspects of a routine <NUM> related to the virtual storage free space management techniques are described. The operations have been presented in the demonstrated order for ease of description and illustration. Furthermore, it is to be understood that the routine <NUM> may be implemented by one or more of the elements illustrated in <FIG> and <FIG> and the related description of those figures.

Some or all operations of the methods, and/or substantially equivalent operations, can be performed by execution of computer-readable instructions included on a computer-storage media, as defined below. The term "computer-readable instructions," and variants thereof, as used in the description and claims, is used expansively herein to include routines, applications, application modules, program modules, programs, components, data structures, algorithms, and the like. Computer-readable instructions can be implemented on various system configurations, including single-processor or multiprocessor systems, minicomputers, mainframe computers, personal computers, hand-held computing devices, microprocessor-based, programmable consumer electronics, combinations thereof, and the like.

The operations of the routine <NUM> are described herein as being implemented, at least in part, by an application, component and/or circuit, such as one or more of the operational elements of the computing environment <NUM>. In some configurations, the computing environment <NUM> may implement at least the API <NUM>, a compiled program, an interpreted program, a script or any other executable set of instructions. One or more of the implemented API <NUM>, a compiled program, an interpreted program, a script, or other executable set of instructions may be executed by at least one processor to cause one or more of the operations of the routine <NUM> to operate.

It should be appreciated that the logical operations described herein are implemented (<NUM>) as a sequence of computer implemented acts or program modules running on a computing system and/or (<NUM>) as interconnected machine logic circuits or circuit modules within the computing system. The implementation is a matter of choice dependent on the performance and other requirements of the computing system. Accordingly, the logical operations described herein are referred to variously as states, operations, structural devices, acts, or modules. These operations, structural devices, acts, and modules may be implemented in software, in firmware, in special purpose digital logic, and any combination thereof.

For example, the operations of the routine <NUM> are described herein as being implemented, at least in part, by an application, component and/or circuit, such as the one or more of the elements associated with the computing environment <NUM>. Although the following illustration may refer to the components or elements of <FIG> and <FIG> it can be appreciated that the operations of the routine <NUM> may also be implemented in many other ways. In addition, one or more of the operations of the routine <NUM> may alternatively or additionally be implemented, at least in part, by a chipset working alone or in conjunction with other software modules. Any service, circuit or application suitable for providing the techniques disclosed herein can be used in operations described herein.

At block <NUM>, the computing environment <NUM> receives a request to determine the free space associated with a virtual storage entity <NUM>. In some implementations, a software application operating within the computing environment <NUM> requests the free space value associated with the virtual storage entity <NUM>. Alternatively, a software application operating external of the computing environment <NUM> may request the free space value associated with the virtual storage entity <NUM>. The computing environment <NUM> may also receive a request to provide additional information data related to current storage and storage capacity associated with the virtual storage entity <NUM>.

At block <NUM>, the computing environment <NUM>, by way of at least the storage module <NUM> and/or the API <NUM>, analyzes the virtual storage entity <NUM> to determine which storage slabs <NUM> include data allocated therein. The computing environment <NUM> may access the virtual storage free space bitmap <NUM> to determine the storage slabs <NUM> that include data allocated therein. In some implementations, the computer environment <NUM> analyzes the virtual storage entity <NUM> or a plurality of virtual storage entities <NUM> to determine the storage slabs <NUM> that include data allocated therein. In some implementations, a software application requests the computer environment <NUM> to analyze one or more of the virtual storage entities <NUM> to determine which storage slabs <NUM> include data allocated therein.

At block <NUM>, the computing environment <NUM> calculates a storage value for the virtual storage entity <NUM>. The storage value is calculated by summing each storage slab byte value associated with the storage slabs <NUM> that were determined at block <NUM> to include data allocated therein. For example, suppose block <NUM> determined that there are seven storage slabs <NUM> that include data allocated therein, and each of the seven storage slabs <NUM> have a byte value of <NUM> GB. The storage value for the virtual storage entity <NUM> that includes the storage slabs <NUM> would be <NUM> GB.

At block <NUM>, each of the storage slabs <NUM> that were determined at block <NUM> to include data allocated therein are analyzed to determine if those storage slabs <NUM> include free space at the storage cluster level. Specifically, at block <NUM>, the computing environment <NUM> accesses the virtual storage free space bitmap <NUM> to ascertain the amount of free space, at the cluster level, associated with each individual storage slab <NUM> found at block <NUM> to include data allocated therein. The ascertained amount of the free space, associated with each individual storage slab <NUM> found at block <NUM>, is summed together to provide the amount of free space across the storage slabs <NUM> that were determined at block <NUM> to include data allocated therein.

At block <NUM>, a data allocation value associated with the virtual storage entity <NUM> is determined. In some implementations, the data allocation value is determined by subtracting the amount of free space across the storage slabs <NUM> that were determined at block <NUM> to include data allocated therein from the storage value calculated at block <NUM>. The data allocation value associated with the virtual storage entity <NUM> represents the amount of data, in bytes for example, that is allocated on the virtual storage entity <NUM>.

At block <NUM>, additional reporting data values for the virtual storage entity <NUM> may be determined. From the foregoing, it is known that the virtual storage entity <NUM> stores an amount of data that is represented by the calculated data allocation value. The additional reporting data values that may be determined at block <NUM> include total storage, free space, real free space, externally allocated, and future expansion data values.

The total storage data value may be ascertained and reported by the storage management module <NUM>. The total storage data value represents the maximum storage size, in bytes, of the virtual storage entity <NUM>. For example, the maximum size of the virtual storage entity <NUM> illustrated in <FIG> is <NUM> GB.

The free space data value represents an amount of storage, in bytes, that is available to the virtual storage entity <NUM>. The free space data value available to the virtual storage entity <NUM> is determined by accessing the physical storage free space bitmap <NUM> to ascertain the number of slabs <NUM> of the physical storage entity <NUM> that are not allocated to one or more of the virtual storage entities <NUM>. Each of the slabs <NUM> has a predetermined byte value. A total amount of free space, in bytes, associated with the unallocated slabs <NUM> of a corresponding physical storage entity <NUM> is found by summing the byte values associated with the unallocated slabs <NUM>. However, this summed amount of free space does not account for the amount of free space across the storage slabs <NUM> that were determined at block <NUM> to include data allocated therein. Therefore, free space is found by summing the total amount of free space associated with the unallocated slabs <NUM> with the free space across the storage slabs <NUM>, which were determined at block <NUM> to include data associated therewith. The free space across the storage slabs <NUM> is determined at block <NUM>.

The size of the virtual storage entity <NUM> may be restricted by a quota value. The quota value may be a byte value. If a quote value exists, the real free space data value reflects the existence of the quota value. Therefore, the real free space data value is simply the free space data or the quota value, whichever is lesser.

The externally allocated data value reflects a storage amount, in bytes, that is consumed by other virtual storage entities <NUM> operating within the computing environment <NUM>.

The future expansion data value reflects a physical storage amount, in bytes, that may be added to the computing environment <NUM> at some future time frame.

The computer architecture <NUM> illustrated in <FIG> includes a central processing unit <NUM> (processor or CPU), a system memory <NUM>, including a random-access memory <NUM> (RAM) and a read-only memory (ROM) <NUM>, and a system bus <NUM> that couples the memory <NUM> to the CPU <NUM>. A basic input/output system containing the basic routines that help to transfer information between elements within the computer architecture <NUM>, such as during startup, is stored in the ROM <NUM>. The computer architecture <NUM> further includes a mass storage device <NUM> for storing an operating system <NUM>, other data, and one or more application programs.

The mass storage device <NUM> is connected to the CPU <NUM> through a mass storage controller (not shown) connected to the bus <NUM>. The mass storage device <NUM> and its associated computer-readable media provide non-volatile storage for the computer architecture <NUM>. Although the description of computer-readable media contained herein refers to a mass storage device, such as a solid-state drive, a hard disk or CD-ROM drive, it should be appreciated by those skilled in the art that computer-readable media can be any available computer storage media or communication media that can be accessed by the computer architecture <NUM>.

Communication media includes computer readable instructions, data structures, program modules, or other data in a modulated data signal such as a carrier wave or other transport mechanism and includes any delivery media. The term "modulated data signal" means a signal that has one or more of its characteristics changed or set in a manner as to encode information in the signal. By way of example, and not limitation, communication media includes wired media such as a wired network or direct-wired connection, and wireless media such as acoustic, RF, infrared and other wireless media. Combinations of the any of the above should also be included within the scope of computer-readable media.

By way of example, and not limitation, computer storage media may include volatile and non-volatile, removable and non-removable media implemented in any method or technology for storage of information such as computer-readable instructions, data structures, program modules or other data. For example, computer media includes, but is not limited to, RAM, ROM, EPROM, EEPROM, flash memory or other solid-state memory technology, CD-ROM, digital versatile disks ("DVD"), HD-DVD, BLU-RAY, or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to store the desired information and which can be accessed by the computer architecture <NUM>. For purposes of the claims, the phrase "computer storage medium," "computer-readable storage medium" and variations thereof, does not include waves, signals, and/or other transitory and/or intangible communication media, per se.

According to various techniques, the computer architecture <NUM> may operate in a networked environment using logical connections to remote computers or computing environment(s) <NUM> through a network <NUM> and/or another network (not shown). For example, the network <NUM> may be the network <NUM>, The computer architecture <NUM> may connect to the network <NUM> through a network interface unit <NUM> connected to the bus <NUM>. It should be appreciated that the network interface unit <NUM> also may be utilized to connect to other types of networks and remote computer systems. The computer architecture <NUM> also may include an input/output controller <NUM> for receiving and processing input from a number of other devices, including a keyboard, mouse, or electronic stylus (not shown in <FIG>). Similarly, the input/output controller <NUM> may provide output to a display screen, a printer, or other type of output device (also not shown in <FIG>). It should also be appreciated that via a connection to the network <NUM> through a network interface unit <NUM>, the computing architecture may enable the client computing environment <NUM> to communicate with the computing environment(s) <NUM>.

It should be appreciated that the software components described herein may, when loaded into the CPU <NUM> and executed thereby, transform the CPU <NUM> and the overall computer architecture <NUM> from a general-purpose computing system into a special-purpose computing system customized to facilitate the functionality presented herein. The CPU <NUM> may be constructed from any number of transistors or other discrete circuit elements and/or chipset, which may individually or collectively assume any number of states. More specifically, the CPU <NUM> may operate as a finite-state machine, in response to executable instructions contained within the software modules disclosed herein. These computer-executable instructions may transform the CPU <NUM> by specifying how the CPU <NUM> transitions between states, thereby transforming the transistors or other discrete hardware elements constituting the CPU <NUM>.

As another example, the computer-readable media disclosed herein may be implemented using magnetic or optical technology. In such implementations, the software presented herein may transform the physical state of magnetic or optical media, when the software is encoded therein. These transformations may include altering the magnetic characteristics of particular locations within given magnetic media. These transformations also may include altering the physical features or characteristics of particular locations within given optical media, to change the optical characteristics of those locations. Other transformations of physical media are possible without departing from the scope
of the present description, with the foregoing examples provided only to facilitate this discussion.

In light of the above, it should be appreciated that many types of physical transformations take place in the computer architecture <NUM> in order to store and execute the software components presented herein. It also should be appreciated that the computer architecture <NUM> may include other types of computing devices, including hand-held computers, embedded computer systems, personal digital assistants, and other types of computing devices known to those skilled in the art. It is also contemplated that the computer architecture <NUM> may not include all of the components shown in <FIG>, may include other components that are not explicitly shown in <FIG>, or may utilize an architecture completely different than that shown in <FIG>.

Computing system <NUM>, described above, can be deployed as part of a computer network. In general, the above description for computing environments applies to both server computers and client computers deployed in a network environment.

<FIG> illustrates an exemplary illustrative networked computing environment <NUM>, with a server in communication with client computers via a communications network, in which the herein described apparatus and methods may be employed. As shown in <FIG>, server(s) <NUM> may be interconnected via a communications network <NUM> (which may be either of, or a combination of, a fixed-wire or wireless LAN, WAN, intranet, extranet, peer-to-peer network, virtual private network, the Internet, Bluetooth communications network, proprietary low voltage communications network, or other communications network) with a number of client computing environments such as a tablet personal computer <NUM>, a mobile telephone <NUM>, a telephone <NUM>, a personal computer(s), a personal digital assistant <NUM>, a smart phone watch/personal goal tracker (e.g., Apple Watch, Samsung, FitBit, etc.) <NUM>, and a smart phone <NUM>. In a network environment in which the communications network <NUM> is the Internet, for example, server(s) <NUM> can be dedicated computing environment servers operable to process and communicate data to and from client computing environments <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, and <NUM> via any of a number of known protocols, such as, hypertext transfer protocol (HTTP), file transfer protocol (FTP), simple object access protocol (SOAP), or wireless application protocol (WAP). Additionally, the networked computing environment <NUM> can utilize various data security protocols such as secured socket layer (SSL) or pretty good privacy (PGP). Each of the client computing environments <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, and <NUM> can be equipped with computing environment <NUM> operable to support one or more computing applications or terminal sessions such as a web browser (not shown), or other graphical user interface (not shown), or a mobile desktop environment (not shown) to gain access to the server computing environment(s) <NUM>.

Server(s) <NUM> may be communicatively coupled to other computing environments (not shown) and receive data regarding the participating user's interactions/resource network. In an illustrative operation, a user (not shown) may interact with a computing application running on a client computing environment(s) to obtain desired data and/or computing applications. The data and/or computing applications may be stored on server computing environment(s) <NUM> and communicated to cooperating users through client computing environments <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, and <NUM>, over an exemplary communications network <NUM>. A participating user (not shown) may request access to specific data and applications housed in whole or in part on server computing environment(s) <NUM>. These data may be communicated between client computing environments <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, <NUM> and server computing environment(s) <NUM> for processing and storage. Server computing environment(s) <NUM> may host computing applications, processes and applets for the generation, authentication, encryption, and communication of data and applications and may cooperate with other server computing environments (not shown), third party service providers (not shown), network attached storage (NAS) and storage area networks (SAN) to realize application/data transactions.

Claim 1:
A system for virtual storage free space management, the system comprising:
at least one processor (<NUM>); and
at least one memory (<NUM>) in communication with the at least one processor, the at least one memory having computer-executable instructions stored thereupon that, when executed by the at least one processor, cause the at least one processor to:
analyze a virtual storage entity (<NUM>) to determine which storage slabs (<NUM>) of the virtual storage entity are allocated with data, wherein a storage slab is a quantum of storage space, each storage slab being made of a plurality of clusters;
determine an amount of free space at cluster level in each of the storage slabs (<NUM>) of the virtual storage entity determined to be allocated with data;
calculate an amount of free space across the storage slabs (<NUM>) of the virtual storage entity by summing the determined amount of free space at cluster level in each of the storage slabs (<NUM>) of the virtual storage entity;
analyze a physical storage entity (<NUM>) to determine which storage slabs (<NUM>) of the physical storage entity are not allocated to the virtual storage entity;
determine a total amount of free space in the slabs (<NUM>) of the physical storage entity that are determined not to be allocated to the virtual storage entity by summing predetermined byte values associated with the unallocated storage slabs; and
determine a free space value available to the virtual storage entity by summing the determined total amount of free space in the slabs (<NUM>) of the physical storage entity with the calculated amount of free space across the storage slabs (<NUM>) of the virtual storage entity.