訓練
儲存裝置通常會在寫入快取中緩衝資料,再將資料寫入非揮發性媒體,例如磁碟盤面。 這種類型的緩衝區可改善裝置效能,但也會降低數據完整性。 如果寫入快取沒有電池備份,電源故障可能會導致快取的數據遺失。
數據遺失問題的一個解決方法是排清寫入快取(在SCSI裝置上使用SCSI SYNCHRONIZE CACHE命令)。 不過,排清寫入快取是一項昂貴的作業,而且如果經常完成,可能會大幅降低效能。 許多儲存裝置允許 直寫 要求,而不是排清寫入快取。 透過寫入要求會略過寫入快取,並將數據直接傳送至媒體。
例如,資料庫應用程式可以使用寫入要求來確保事務歷史記錄能連線到媒體,而檔案系統驅動程式可以使用寫入要求來確保檔案系統元數據到達媒體。
不過,並非所有具有寫入快取的儲存裝置都支援寫入直達請求或 SYNCHRONIZE CACHE,而且某些裝置不需要略過或清除快取的資料作為預防措施,因為它們有電池備份系統,可防止電源故障期間資料損毀。 應用程式和驅動程式必須具備裝置寫入快取屬性的相關信息,才能有效地使用它。
在 Windows Vista 中,您可以使用 IOCTL_STORAGE_QUERY_PROPERTY 要求搭配 StorageDeviceWriteCacheProperty 屬性標識符來查詢記憶體類別驅動程式,以取得指定裝置寫入快取特性的寫入快取屬性。 寫入快取屬性包含下列裝置快取功能的相關信息:
寫入快取的存在。 寫入快取屬性會指定裝置是否有寫入快取。
寫入快取的類型。 寫入快取有兩種主要類型:回寫 和 透過寫入。 使用回寫快取時,裝置不會將快取數據複製到非揮發性媒體,除非絕對必要。 此作業可改善寫入作業的效能。 透過寫入快取,裝置會以平行方式將數據寫入快取和媒體。 這不會改善寫入效能,但會加快後續讀取作業的速度。
請勿將寫入 快取 與寫入 要求混淆。 如果裝置支援寫入要求,可以搭配任何類型的快取使用寫入要求,包括回寫快取。 例如,假設目標是具有回寫快取的 SCSI 裝置。 如果裝置支援寫入要求,啟動器可以在寫入命令的命令描述元區塊 (CDB) 中設定強制單位存取 (FUA) 位,以略過寫入快取。
同步快取支援。 寫入快取屬性會指出裝置是否支援 SCSI SYNC CACHE 命令,或是其他總線上的對等命令。
電池備份。 寫入快取屬性指出裝置是否有電池備份,以在電源故障期間保護快取數據的完整性。
如需寫入快取屬性所報告之資訊的完整描述,請參閱 STORAGE_WRITE_CACHE_PROPERTY。
如果沒有寫入快取屬性機制(也就是,使用 IOCTL_STORAGE_QUERY_PROPERTY 要求和 StorageDeviceWriteCacheProperty 屬性識別符),應用程式和驅動程式必須使用不同命令序列查詢裝置的寫入快取特性。 例如,如果目標裝置連接至 IEEE 1394 總線,並使用縮減區塊命令 (RBC) 通訊協定,啟動器必須擷取裝置模式數據的第 6 頁,以判斷寫入快取是否已啟用。 但是,如果目標裝置符合 SCSI 規範,啟動器必須擷取模式數據的第 8 頁。 寫入快取屬性機制會從啟動器隱藏這些作業的詳細數據,並提供一種技術來查詢記憶體裝置寫入快取的特性,這些特性會跨不同的總線相同。
RAID 裝置和快閃記憶體裝置均不支援寫入快取屬性機制(因為沒有查詢這些裝置的標準技術)。
64 位版本的 Windows 支援寫入快取屬性。