鏡像加速同位

適用於:Windows Server 2022、Windows Server 2019、Windows Server 2016

儲存空間可以使用兩種基本技術來為數據提供容錯:鏡像和同位。 在 儲存空間直接存取 中,ReFS 引進鏡像加速同位,可讓您建立同時使用鏡像和同位復原的磁片區。 鏡像加速同位提供便宜、省空間的儲存空間,而不會犧牲效能。

Diagram depicting the mirror accelerated parity volume.

背景

鏡像和同位復原配置具有基本不同的儲存體和效能特性:

  • 鏡像復原可讓使用者達到快速寫入效能,但複寫每個複本的資料並無空間效率。
  • 另一方面,同位必須針對每個寫入重新計算同位,導致隨機寫入效能受到影響。 不過,同位可讓使用者以更高的空間效率儲存其資料。 如需詳細資訊,請參閱 儲存空間容錯

因此,鏡像會預先公開以提供效能敏感的儲存體,而同位提供改善的儲存體容量使用率。 在鏡像加速的同位中,ReFS 會利用每個復原類型的優點,藉由結合單一磁片區內的兩個復原配置,來提供具有容量效率且效能敏感的儲存體。

鏡像加速同位上的資料輪替

ReFS 會即時主動輪替鏡像與同位之間的資料。 這可讓傳入寫入快速寫入鏡像,然後旋轉至同位,以便有效率地儲存。 如此一來,傳入 IO 會在鏡像中快速提供服務,而冷資料會有效率地以同位方式儲存,同時在相同磁片區內提供最佳效能和遺失成本儲存體。

若要在鏡像與同位之間旋轉資料,ReFS 會以邏輯方式將磁片區分割成 64 MiB 的區域,也就是旋轉單位。 下圖描述分割成區域的鏡像加速同位磁片區。

Diagram depicting mirror accelerated parity volume with storage containers.

一旦鏡像層達到指定的容量層級,ReFS 就會開始將完整區域從鏡像輪替為同位。 ReFS 不會立即將資料從鏡像移至同位,而是盡可能等候並保留鏡像中的資料,讓 ReFS 繼續為數據提供最佳效能(請參閱下方的「IO 效能」)。

將資料從鏡像移至同位時,會讀取資料、計算同位編碼,然後將該資料寫入同位。 下列動畫會使用在旋轉期間轉換成清除自動程式碼區域的三向鏡像區域來說明此問題:

Animation showing mirror accelerated parity rotation.

鏡像加速同位上的 IO

IO 行為

寫入: ReFS 服務傳入寫入的方式有三種不同:

  1. 寫入鏡像:

    • 1a. 如果傳入寫入會修改鏡像中的現有資料,ReFS 會就地修改資料。
    • 1b. 如果連入寫入是新的寫入,而且 ReFS 可以成功地在鏡像中找到足夠的可用空間來服務此寫入,則 ReFS 會寫入鏡像。 Screenshot showing how the ReFS service writes to mirror.
  2. 寫入鏡像,從同位重新配置:

    如果連入寫入會修改同位中的資料,且 ReFS 可以成功地在鏡像中尋找足夠的可用空間來服務傳入寫入,ReFS 會先使同位中的先前資料失效,然後再寫入鏡像。 此失效是快速且廉價的中繼資料作業,可協助有意義地改善對同位的寫入效能。 Screenshot showing how the ReFS service writes to mirror, reallocated from parity.

  3. 寫入同位:

    如果 ReFS 在鏡像中找不到足夠的可用空間,ReFS 會將新資料寫入同位,或直接修改同位中的現有資料。 下方的「效能優化」一節提供指引,可協助將寫入降到同位。 Screenshot showing how the ReFS service writes to parity.

讀取: ReFS 會直接從包含相關資料的層讀取。 如果使用 HDD 建構同位,儲存空間直接存取中的快取將會快取此資料,以加速未來的讀取。

注意

讀取永遠不會造成 ReFS 將資料輪替回鏡像層。

IO 效能

寫入: 上述每種寫入類型都有自己的效能特性。 大致上講,對鏡像層的寫入速度比重新配置寫入快得多,而重新配置寫入的速度明顯比直接寫入同位層的寫入還要快。 以下不相等說明此關聯性:

  • 鏡像層 > 重新配置寫入 >> 同位層

讀取: 從同位讀取時,沒有有意義的負面效能影響:

  • 如果鏡像和同位是使用相同的媒體類型所建構,讀取效能將會相等。
  • 例如,如果鏡像和同位是使用不同的媒體類型來建構,例如鏡像 SSD、同位 HDD, 則儲存空間直接存取 中的快取將有助於快取經常性資料,以加速從同位讀取。

ReFS 壓縮

ReFS 的壓縮適用于 Windows Server 2019 和更新版本,可大幅改善 90+% 完整鏡像加速同位磁片區的效能。

背景: 先前,當鏡像加速同位磁片區已滿時,這些磁片區的效能可能會降低。 效能會降低,因為經常性存取和冷資料會在磁片區加班期間變成混合。 這表示較不熱的資料可以儲存在鏡像中,因為非經常性資料佔用鏡像空間,否則供經常性資料使用。 將經常性資料儲存在鏡像中對於維持高效能至關重要,因為直接寫入鏡像的速度比重新配置寫入更快,而且大小順序比直接寫入同位快得多。 因此,在鏡像中擁有冷資料對效能不利,因為它可降低 ReFS 可以直接對鏡像進行寫入的可能性。

ReFS 壓縮可釋出鏡像中的空間以處理經常性資料,以解決這些效能問題。 壓縮會先將鏡像和同位中的所有資料合併成同位。 這會減少磁片區內的片段,並增加鏡像中的可定址空間量。 更重要的是,此程式可讓 ReFS 將熱資料合併回鏡像:

  • 當新的寫入傳入時,它們會以鏡像方式提供服務。 因此,新寫入的經常性資料會位於鏡像中。
  • 在對同位資料進行修改寫入時,ReFS 會進行重新配置寫入,因此此寫入也會在鏡像中服務。 因此,壓縮期間已移至同位的經常性資料將會重新配置回鏡像。

效能最佳化

重要

建議將大量寫入 VHD 放在不同的子目錄中。 這是因為 ReFS 會在目錄及其檔案的層級寫入中繼資料變更。 因此,如果您將大量寫入的檔案分散到目錄,中繼資料作業會較小且以平行方式執行,以減少應用程式的延遲。

效能計數器

ReFS 會維護效能計數器,以協助評估鏡像加速同位的效能。

  • 如上所述,在鏡像中找不到可用空間時,ReFS 會直接寫入同位。 一般而言,當鏡像層填滿速度比 ReFS 更快速地將資料輪替為同位時,就會發生這種情況。 換句話說,ReFS 輪替無法跟上擷取速率。 下列效能計數器會識別 ReFS 何時直接寫入同位:

    # Windows Server 2016
    ReFS\Data allocations slow tier/sec
    ReFS\Metadata allocations slow tier/sec
    
    # Windows Server 2019
    ReFS\Allocation of Data Clusters on Slow Tier/sec
    ReFS\Allocation of Metadata Clusters on Slow Tier/sec
    
  • 如果這些計數器不是零,這表示 ReFS 不會以足夠快的速度從鏡像中旋轉資料。 為了協助緩解這種情況,您可以變更旋轉積極性,或增加鏡像層的大小。

旋轉侵略性

一旦鏡像達到指定的容量閾值,ReFS 就會開始旋轉資料。

  • 此旋轉閾值的較高值會導致 ReFS 在鏡像層中保留較長的資料。 將經常性資料留在鏡像層是最佳效能,但 ReFS 將無法有效地服務大量的傳入 IO。
  • 較低的值可讓 ReFS 主動清除資料,並更妥善地內嵌傳入 IO。 這適用于擷取繁重的工作負載,例如封存儲存體。 不過,較低的值可能會降低一般用途工作負載的效能。 不必要地從鏡像層輪替資料會降低效能。

ReFS 引進了無法調整此臨界值的參數,可使用登錄機碼進行設定。 此登錄機碼必須在 部署儲存空間直接存取 的每個節點上設定,而且需要重新開機,任何變更才會生效。

  • 機碼: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Policies
  • ValueName (DWORD): DataDestageSsdFillRatioThreshold
  • ValueType: 百分比

如果未設定此登錄機碼,ReFS 會使用預設值 85%。 大部分部署都建議使用這個預設值,不建議使用低於 50% 的值。 下列 PowerShell 命令示範如何使用 75% 的值來設定此登錄機碼:

Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Policies -Name DataDestageSsdFillRatioThreshold -Value 75

若要在部署儲存空間直接存取的每個節點上設定此登錄機碼,您可以使用下列 PowerShell 命令:

$Nodes = 'S2D-01', 'S2D-02', 'S2D-03', 'S2D-04'
Invoke-Command $Nodes {Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Policies -Name DataDestageSsdFillRatioThreshold -Value 75}

增加鏡像層的大小

增加鏡像層的大小可讓 ReFS 在鏡像中保留較大部分的工作集。 這可改善 ReFS 可以直接寫入鏡像的可能性,這有助於達到更好的效能。 下列 PowerShell Cmdlet 示範如何增加鏡像層的大小:

Resize-StorageTier -FriendlyName "Performance" -Size 20GB
Resize-StorageTier -InputObject (Get-StorageTier -FriendlyName "Performance") -Size 20GB

提示

在調整 儲存體Tier 的大小之後,請務必調整 磁碟分割 磁片 區的大小 如需詳細資訊和範例,請參閱 擴充磁片區

建立鏡像加速同位磁片區

下列 PowerShell Cmdlet 會建立鏡像加速同位磁片區,其 Mirror:Parity 比率為 20:80,這是大多數工作負載的建議設定。 如需詳細資訊和範例,請參閱 在 儲存空間直接存取 中建立磁片區。

New-Volume -FriendlyName "TestVolume" -FileSystem CSVFS_ReFS -StoragePoolFriendlyName "StoragePoolName" -StorageTierFriendlyNames Performance, Capacity -StorageTierSizes 200GB, 800GB

其他參考