Patent ID: 7779207
Filing Date: 2010-08-17
Classification: G06F

Abstract:
1. A method for accelerating performance when writing a set of sectors to a disk, the method comprising: receiving a write command in a computer comprising a disk filter driver and a disk driver; computing a checksum for each sector in the set of sectors; storing the computed checksums in a cache memory comprising a plurality of memory slots each configured to store a checksum representing a respective sector; grouping sets of continuous sectors into regions, each region including at least two contiguous sectors, each region associated with a respective use bit; comparing each computed checksum with a stored checksum for the corresponding sector; if all of the sectors in the set of sectors have computed checksums that match their corresponding stored checksums, then using the disk filter driver to complete the write command without submitting the write command to the disk driver; if at least one sector in the set of sectors has a computed checksum that does not match a corresponding stored checksum, identifying a contiguous sub-set of the set of sectors, the contiguous sub-set comprising at least two sectors, each sector within the contiguous sub-set having a computed checksum that does not match its corresponding stored checksum; flushing the contiguous sub-set to the disk during a single write operation; and releasing some of the stored checksums from the cache memory if their corresponding sectors have not been rewritten within a predetermined time period by assigning a first value to all of the use bits during a first pass through the cache memory, assigning a second value to each use bit associated with a region that includes a sector that is associated with a memory slot in which a checksum has been stored, and, during a second pass through the cache memory, clearing the memory slots associated with the sectors within regions corresponding to the use bits to which the first value is assigned and reassigning the first value to the use bits to which the second value is assigned.