Use of predefined block pointers to reduce duplicate storage of certain data in a storage subsystem of a storage server
First Claim
1. A method in a computing system for specially allocating data within the computing system, comprising:
- receiving, by an allocation component executing on a processor of the computing system, a request from a client to write a set of data blocks in a storage subsystem of the computing system, the storage subsystem including a non-volatile mass storage facility, the set of data blocks including a data block that includes data previously designated as special data, wherein the special data is pre-allocated in the non-volatile mass storage facility; and
for each data block in the set of data blocks, comparing, by the allocation component executing on the processor of the computing system, the data block to the special data,when the data is determined to match the special data,assigning a special block pointer to the data block, the special block pointer pointing to a block address in the non-volatile mass storage facility, the special block pointer indicating that the corresponding data block was pre-allocated in the storage subsystem of the computing system, the special block pointer further indicating that an instance of the special data is stored in a memory of the computing system, wherein the memory is separate from the storage subsystem;
preventing the data block from being written to the storage subsystem as a result of the received request;
in response to receiving a request to read a data block from the non-volatile mass storage facility, the data block having a block pointer pointing to a block address in the non-volatile mass storage facility on which the data block is stored;
comparing the block pointer to the special block pointer to determine whether the data block includes contents that match the contents of the pre-allocated data block; and
when the block pointer matches the special block pointer, reading the contents of the pre-allocated data block from the memory of the computing system without issuing a request to read the contents of the pre-allocated data block from the non-volatile mass storage facility.
1 Assignment
0 Petitions
Accused Products
Abstract
A method and system for eliminating the redundant allocation and deallocation of special data on disk, wherein the redundant allocation and deallocation of special data on disk is eliminated by providing an innovate technique for specially allocating special data of a storage system. Specially allocated data is data that is pre-allocated on disk and stored in memory of the storage system. “Special data” may include any pre-decided data, one or more portions of data that exceed a pre-defined sharing threshold, and/or one or more portions of data that have been identified by a user as special. For example, in some embodiments, a zero-filled data block is specially allocated by a storage system. As another example, in some embodiments, a data block whose contents correspond to a particular type document header is specially allocated.
37 Citations
18 Claims
-
1. A method in a computing system for specially allocating data within the computing system, comprising:
-
receiving, by an allocation component executing on a processor of the computing system, a request from a client to write a set of data blocks in a storage subsystem of the computing system, the storage subsystem including a non-volatile mass storage facility, the set of data blocks including a data block that includes data previously designated as special data, wherein the special data is pre-allocated in the non-volatile mass storage facility; and for each data block in the set of data blocks, comparing, by the allocation component executing on the processor of the computing system, the data block to the special data, when the data is determined to match the special data, assigning a special block pointer to the data block, the special block pointer pointing to a block address in the non-volatile mass storage facility, the special block pointer indicating that the corresponding data block was pre-allocated in the storage subsystem of the computing system, the special block pointer further indicating that an instance of the special data is stored in a memory of the computing system, wherein the memory is separate from the storage subsystem; preventing the data block from being written to the storage subsystem as a result of the received request; in response to receiving a request to read a data block from the non-volatile mass storage facility, the data block having a block pointer pointing to a block address in the non-volatile mass storage facility on which the data block is stored; comparing the block pointer to the special block pointer to determine whether the data block includes contents that match the contents of the pre-allocated data block; and when the block pointer matches the special block pointer, reading the contents of the pre-allocated data block from the memory of the computing system without issuing a request to read the contents of the pre-allocated data block from the non-volatile mass storage facility. - View Dependent Claims (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 17)
-
-
12. A storage system, comprising:
-
a processor; a network communication interface to provide the storage system with data communication with at least one client over a network; a storage interface to provide the storage system with data communication with one or more mass storage devices, wherein the one or more mass storage devices includes a pre-allocated data block of special data; a memory including contents of the pre-allocated data block, wherein the memory is separate from the one or more mass storage devices; and special allocation code that, when executed by the processor, causes the storage system to execute a special allocation process in response to a request received from the at least one client to write data to the one or more mass storage devices, the data including at least one portion of data that matches the contents of the pre-allocated data block, the process including; for each portion of data, comparing the portion of data to the contents of the pre-allocated data block, when the portion of data is determined to match the contents of the pre-allocated data block, assigning a special block pointer to the portion of data, the special block pointer pointing to a block address in a non-volatile mass storage device, wherein the special block pointer identifies a location at which the contents of the pre-allocated data block are stored in the one or more mass storage devices, wherein the special block pointer indicates that an instance of the pre-allocated data block is stored in the memory of the storage system; when the portion of data is determined not to match the contents of the pre-allocated data block, issuing a request to allocate storage in the one or more mass storage devices to which the portion of data is to be written; in response to receiving a request to read a portion of data from the one or more mass storage devices, the portion of data having a block pointer identifying a location of the one or more mass storage devices on which the portion of data is stored; comparing the block pointer to the special block pointer to determine whether the portion of data matches the contents of the pre-allocated data block; and when the block pointer matches the special block pointer, reading the contents of the pre-allocated data block from the memory of the storage system without issuing a request to read the contents of the pre-allocated data block from the one or more mass storage devices. - View Dependent Claims (13, 14, 15, 16, 18)
-
Specification