When a read operation is sent to a storage resource which has data reduction enabled, the system first needs to determine where the data is currently located. A lookup is performed to determine if the block is currently stored within System Cache or on the Pool in its original size or was previously deduplicated or compressed. If the data resides in System Cache in its original form, the data is sent to the host requesting the data. If the data does not reside in System Cache and is stored in its original form on the Pool, a normal read operation occurs as if data reduction is disabled on the storage resource. The data is copied into System Cache and then sent to the host requesting the data.
If data reduction achieved space savings within the block, the data must be recreated within System Cache in its original form so it can be sent to the host. If the block was previously deduplicated, the block is either recreated if the block contained a common pattern or copied into System Cache if the block was deduplicated by Advanced Deduplication using the information within the private space of the resource, and the host is sent the data. If the data is compressed, it must first be uncompressed before the data is sent to the host. If the compressed data already resides in System Cache, the data is uncompressed to a temporary location, the data is sent to the host, and the temporary location is released. If the compressed data being requested resides on a drive, the data is first read into System Cache, uncompressed to a temporary location, and the host is sent the data. Data is never uncompressed on disk due to a read operation, as this would reduce the amount of savings on the storage resource.