查詢寫入快取屬性
儲存裝置通常會在寫入快取中緩衝資料,再將資料寫入到非大量媒體,例如磁片拼字盤。 這種類型的緩衝區可改善裝置效能,但也會降低資料完整性。 如果寫入快取沒有電池備份,電源故障可能會導致快取資料遺失。
資料遺失問題的其中一個解決方法是使用 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 支援寫入快取屬性。