本文提供虛擬儲存堆疊中快取的概覽,並給予軟體開發人員和系統管理員指引,以確保達成所需的數據一致性要求。
原始 KB 編號: 2801713
詳細資訊
至少,系統中的各種快取層級至少會包含以下內容:
- 檔案系統快取。 根據預設,Windows 會快取從磁碟讀取並寫入磁碟的檔案數據。 這表示讀取作業會從系統記憶體中稱為系統檔案快取的區域讀取檔案數據,而不是從實體磁碟讀取檔案數據。 相對地,寫入作業會將檔案數據寫入系統檔案快取,而不是寫入磁碟,而這種快取稱為回寫快取。 應用程式可以使用檔案系統未緩衝的語意,以確保寫入不會被系統快取緩存。
- 磁碟驅動器快取。 磁碟驅動器會在韌體層實作快取,以改善磁碟驅動器的效能。 雖然韌體層的快取可以改善效能,但在發生電源故障時,數據可能在寫入磁碟之前就遺失。 控制此快取行為的選項是標準化磁碟驅動器介面的一部分,例如 SCSI、SATA 和 ATA。 這些選項如下所示:
使用稱為 Force Unit Access(FUA)的 I/O 控制機制。 此標誌指定驅動器先將數據寫入穩定的媒介存儲,再完成訊號發出。 必須執行這項作業的應用程式會發出 FUA 命令,以確保資料在磁碟上穩定,如果發生電源故障時不會遺失。
伺服器類別磁碟驅動器 (SCSI 和光纖通道) 通常支援 FUA 旗標。 在商品磁碟驅動器(ATA、SATA 和 USB)上,FUA 可能不被支援。 除非磁碟驅動器的寫入快取停用,否則這可能會讓數據處於不一致的狀態。 如果您依賴這個機制,請確保磁碟子系統會正確處理 FUA。
強制磁碟快取排清。 將排清傳送至磁碟的應用程式或系統,會強制磁碟子系統將其快取中的所有數據寫入磁碟。 過於頻繁地觸發清除會對性能造成影響,因為在清除完成返回之前,磁碟快取中的所有資訊都必須寫入磁碟媒體。
停用磁碟快取。 您可以將IOCTL_DISK_SET_CACHE_INFORMATION控制程式代碼發行至磁碟,以停用磁碟的寫入快取。 寫入快取的狀態(開啟或關閉)將會在系統重新啟動時保留。 發出此控制程式代碼會對發出給該磁碟的所有 I/O 機制產生非常顯著的效能後果。 這些後果很可能包括效能明顯降低。 在部署此控制代碼之前,您應該仔細考慮使用它。
備註
如果您無法停用磁碟快取,您應該考慮選項 1 和 2。
因此,如果應用程式或工作負載是在虛擬機 (VM) 內執行,則各種快取層會有數據一致性影響。
虛擬機客體文件系統快取 您可以使用文件系統未壓縮的語意來略過此層,如先前所述。
來賓虛擬磁碟快取。 虛擬化 IDE(模擬或綜合)或 SCSI 裝置會報告較低堆疊所傳回的寫入快取狀態。 虛擬磁碟會報告其寫入快取已啟用,且拒絕讓來賓關閉寫入快取。 停用快取將會失敗,且一律會回應已啟用快取。 基於下列原因,此行為是必要的:
Hyper-V 無法假設在相同磁碟上執行的所有 VM 都必須有相同的磁碟快取設定。
基礎記憶體可能有無法關閉的永遠開啟寫入快取。 這是因為虛擬磁碟可能會移轉至相同主機上的不同磁碟(即時記憶體移轉)或不同的主機(實時移轉)。
因為應用程式無法關閉磁碟快取,因此,任何在客體中的應用程式在斷電的情況下確保資料完整性,必須使用選項 1 或選項 2,以確保寫入會略過磁碟快取。
主機檔案系統快取。 Hyper-V 儲存堆疊也會使用未緩衝的寫入,以確保虛擬機的寫入能略過底層主機文件系統堆疊。
主機磁碟快取。 如果由客體設定,FUA 會傳播至主機及其儲存堆疊。 主機實體磁碟系統必須至少符合以下至少一個準則,以確保虛擬化工作負載數據在電源故障時的完整性。
- 系統使用伺服器類別磁碟(SCSI、光纖通道)。
- 系統可確保磁碟已連線到附帶電池的快取主機總線適配器(HBA)。
- 系統會使用儲存控制器(例如 RAID 系統)作為儲存裝置。
- 系統可確保磁碟的電源受到不間斷電源 (UPS) 的保護。
- 系統可確保磁碟的寫入快取功能已停用。