Write Caching

Write Caching

Caching reads from the hard disk and caching writes to the hard disk are similar in some ways, but very different in others. They are the same in their overall objective: to decouple the fast PC from the slow mechanics of the hard disk. The key difference is that a write involves a change to the hard disk, while a read does not.

With no write caching, every write to the hard disk involves a performance hit while the system waits for the hard disk to access the correct location on the hard disk and write the data. As mentioned in the general discussion of the cache circuitry and operation, this takes at least 10 milliseconds on most drives, which is a long time in the computer world and really slows down performance as the system waits for the hard disk. This mode of operation is called write-through caching. (The contents of the area written actually are put into the cache in case it needs to be read again later, but the write to the disk always occurs at the same time.)

When write caching is enabled, when the system sends a write to the hard disk, the logic circuit records the write in its much faster cache, and then immediately sends back an acknowledgement to the operating system saying, in essence, "all done!" The rest of the system can then proceed on its merry way without having to sit around waiting for the actuator to position and the disk to spin, and so on. This is called write-back caching, because the data is stored in the cache and only "written back" to the platters later on.

Write-back functionality of course improves performance. There's a catch however. The drive sends back saying "all done" when it really isn't done--the data isn't on the disk at all, it's only in the cache. The hard disk's logic circuits begin to write the data to the disk, but of course this takes some time. The hard disk is using a variant of that old "the check is in the mail" trick you might hear when you call someone to remind them of that loan they were supposed to pay back three weeks ago. :^)
Now, this isn't really a problem most of the time, as long as the power stays on. Since cache memory is volatile, if the power goes out, its contents are lost. If there were any pending writes in the cache that were not written to the disk yet, they are gone forever. Worse, the rest of the system has no way to know this, because when it is told by the hard disk "all done", it can't really know what that means. So not only is some data lost, the system doesn't even know which data, or even that it happened. The end result can be file consistency problems, operating system corruption, and so on. (Of course, this problem doesn't affect cached reads at all. They can be discarded at any time.)

Due to this risk, in some situations write caching is not used at all. This is especially true for applications where high data integrity is critical. Due to the improvement in performance that write caching offers, however, it is increasingly being used despite the risk, and the risk is being mitigated through the use of additional technology. The most common technique is simply ensuring that the power does not go off! In high-end server environments, with their uninterruptible power supplies and even redundant power supplies, having unfilled cached writes is much less of a concern. For added peace of mind, better drives that employ write caching have a "write flush" feature that tells the drive to immediately write to disk any pending writes in its cache. This is a command that would commonly be sent before the UPS batteries ran out if a power interruption was detected by the system, or just before the system was to be shut down for any other reason.

http://www.pcguide.com/ref/hdd/op/cacheWrite-c.html


Caching Page(08h)

The caching parameters page defines the paramaters that affect the use of the cache.

Write Cache enable(WCE) bit

0   Specifies that the device server shall return GOOD status for a WRITE command after
    successfully writing all the data to the medium.

1   Specifies that the device server may return GOOD status for a WRITE command after
    successfully receiving the data and prior to having successfully written it to the medium.

SYNCHRONIZE CACHE(35h)

The SYNCHRONIZE CACHE(35h) command ensures that logical blocks in the cache memory, within the
specified range, have their most recent data value recorded on the physical medium.

If more recent data value for a logical block within the specified range exists in the cache memory
than on the physical medium, then the logical block from the cache memory shall be written to the
physical medium.

Logical blocks may not be removed from the cache memory as a result of the synchronize cache operation.

Comments

Popular Posts