ミラー高速パリティMirror-accelerated parity

適用先:Windows Server 2019、Windows Server 2016Applies to: Windows Server 2019, Windows Server 2016

記憶域スペースは、2 つの基本的な手法 (ミラーおよびパリティ) を使ってデータのフォールト トレランスを提供できます。Storage Spaces can provide fault tolerance for data using two fundamental techniques: mirror and parity. 記憶域スペース ダイレクトでは、ミラーリングによって高速化されたパリティが ReFS により導入されています。これにより、ミラーとパリティの両方の回復性を備えたボリュームを作成できます。In Storage Spaces Direct, ReFS introduces mirror-accelerated parity, which enables you to create volumes that use both mirror and parity resiliencies. ミラーリングによって高速化されたパリティにより、パフォーマンスを犠牲にせずに安価で容量効率の高いストレージが実現します。Mirror-accelerated parity offers inexpensive, space-efficient storage without sacrificing performance.

ミラーリングによって高速化されたパリティ ボリューム

バックグラウンドBackground

ミラーとパリティの回復性スキームは、ストレージおよびパフォーマンス特性が根本的に異なっています。Mirror and parity resiliency schemes have fundamentally different storage and performance characteristics:

  • ミラーの回復性を使用すると、ユーザーは高速な書き込みパフォーマンスを得ることができますが、各コピーのデータをレプリケートするのは領域の効率が悪くなります。Mirror resiliency allows users to attain fast write performance, but replicating the data for each copy isn't space efficient.
  • 一方、パリティは書き込みごとにパリティを再計算する必要があるため、ランダム書き込みのパフォーマンスという弱点があります。Parity, on the other hand, must re-compute parity for every write, causing random write performance to suffer. 一方、パリティではユーザーがスペース効率よくデータを格納できます。Parity does, however, allow users to store their data with greater space efficiency. 詳細については、「記憶域スペースのフォールトトレランス」を参照してください。For more info, see Storage Spaces fault tolerance.

したがって、ミラーはパフォーマンス重視のストレージが実現する傾向がありますが、パリティはストレージ容量の使用率を上げることができます。Thus, mirror is predisposed to deliver performance-sensitive storage while parity offers improved storage capacity utilization. ミラーリングによって高速化されたパリティでは、1 つのボリューム内で両方の回復性スキームを組み合わせることにより、ReFS がそれぞれの回復性の種類のメリットを生かして容量効率が高くパフォーマンスも重視したストレージが実現します。In mirror-accelerated parity, ReFS leverages the benefits of each resiliency type to deliver both capacity-efficient and performance-sensitive storage by combining both resiliency schemes within a single volume.

ミラーリングによって高速化されたパリティにおけるデータのローテーションData rotation on mirror-accelerated parity

ReFS は、ミラーとパリティの間でデータをリアルタイムでアクティブにローテーションします。ReFS actively rotates data between mirror and parity, in real-time. これにより、入力書き込みをミラーにすばやく書き込んだ後、パリティーにローテーションして効率的に格納することができます。This allows incoming writes to be quickly written to mirror then rotated to parity to be stored efficiently. こうすることで、入力 IO がミラーですばやく処理される一方、コールド データはパリティに効率的に格納されるため、同じボリューム内で最適なパフォーマンスと低コストのストレージの両方が実現します。In doing so, incoming IO is serviced quickly in mirror while cold data is stored efficiently in parity, delivering both optimal performance and lost-cost storage within the same volume.

ミラーおよびパリティ間でデータをローテーションするため、ReFS はボリュームを 64 MiB の領域 (ローテーションの単位) に論理的に分割します。To rotate data between mirror and parity, ReFS logically divides the volume into regions of 64 MiB, which are the unit of rotation. 以下の図は、領域に分割された、ミラーリングによって高速化されたパリティ ボリュームを示しています。The image below depicts a mirror-accelerated parity volume divided into regions.

ミラーリングによって拘束されたパリティ ボリュームとストレージ コンテナー

ReFS は、ミラー層が指定された容量レベルに達すると、領域全体のミラーからパリティへのローテーションを開始します。ReFS begins rotating full regions from mirror to parity once the mirror tier has reached a specified capacity level. データをミラーからパリティにすぐに移動する代わりに、ReFS はできる限り長く待機してデータをミラーに保持し、データの最適なパフォーマンスを維持できるようにします (以下の「IO パフォーマンス」をご覧ください)。Instead of immediately moving data from mirror to parity, ReFS waits and retains data in mirror as long as possible, allowing ReFS to continue delivering optimal performance for the data (see “IO performance” below).

データがミラーからパリティに移動するとき、データが読み取られ、パリティ エンコーディングが計算された後、そのデータがパリティに書き込まれます。When data is moved from mirror to parity, the data is read, parity encodings are computed, and then that data is written to parity. 次の図は、ローテーション中にイレイジャー コーディングに変換される、3 方向にミラーリングされた領域を使ってこれを示しています。The animation below illustrates this using a three-way mirrored region that is converted into an erasure coded region during rotation:

ミラーリングによって高速化されたパリティのローテーション

ミラーリングによって高速化されたパリティでの IOIO on mirror-accelerated parity

IO の動作IO behavior

書き込み: ReFS は入力書き込みを 3 つの異なる方法で処理します。Writes: ReFS services incoming writes in three distinct ways:

  1. ミラーに書き込み:Writes to Mirror:

    • 1a.1a. 入力書き込みによってミラーの既存のデータが変更される場合、ReFS は所定の位置のデータを変更します。If the incoming write modifies existing data in mirror, ReFS will modify the data in place.
    • 1b.1b. 入力書き込みが新しい書き込みのであり、この書き込みをサービスするのに十分な領域を ReFS がミラーで見つけることができた場合、ReFS はミラーに書き込みます。If the incoming write is a new write, and ReFS can successfully find enough free space in mirror to service this write, ReFS will write to mirror. ミラーに書き込みWrite-to-Mirror
  2. ミラーに書き込み、パリティから再割り当て:Writes to Mirror, Reallocated from Parity:

    受信書き込みによってパリティ内のデータが変更され、ReFS が受信書き込みを処理するのに十分な空き領域をミラーに正しく検出できた場合、ReFS はまずパリティ内の以前のデータを無効にしてから、ミラーに書き込みます。If the incoming write modifies data that's in parity, and ReFS can successfully find enough free space in mirror to service the incoming write, ReFS will first invalidate the previous data in parity and then write to mirror. この無効化は、高速でコストのかからないメタデータ操作であるため、パリティへの書き込みパフォーマンスが大幅に向上します。This invalidation is a quick and inexpensive metadata operation that helps meaningfully improve write performance made to parity. 再割り当てされた書き込みReallocated-Write

  3. パリティに書き込み:Writes to Parity:

    ReFS がミラーで十分な空き領域を見つけることができない場合、ReFS はパリティに新しいデータを書き込むか、パリティの既存のデータを直接変更します。If ReFS cannot successfully find enough free space in mirror, ReFS will write new data to parity or modify existing data in parity directly. 以下の「パフォーマンスの最適化」セクションでは、パリティへの書き込みを最小限に抑えるためのガイダンスを示します。The “Performance optimizations” section below provides guidance that helps minimize writes to parity. パリティに書き込みWrite-to-Parity

読み取り: ReFS は関連するデータを含む階層から直接読み取ります。Reads: ReFS will read directly from the tier containing the relevant data. パリティが HDD で構築されている場合、今後の読み取りを高速化するため、記憶域スペース内のキャッシュにこのデータがキャッシュされます。If parity is constructed with HDDs, the cache in Storage Spaces Direct will cache this data to accelerate future reads.

注意

読み取りの結果、ReFS がデータをミラー層に再度ローテーションすることはありません。Reads never cause ReFS to rotate data back into the mirror tier.

IO パフォーマンスIO performance

書き込み: 前述の書き込みの種類ごとにパフォーマンス特性が異なります。Writes: Each type of write described above has its own performance characteristics. 大まかに言うと、ミラー層への書き込みは再割り当てられた書き込みよりある程度高速であり、再割り当てられた書き込みはパリティ層への直接書き込みよりかなり高速です。Roughly speaking, writes to the mirror tier are much faster than reallocated writes, and reallocated writes are significantly faster than writes made directly to the parity tier. この関係を以下の不等式で示します。This relationship is illustrated by the inequality below:

  • ミラー層 > 再割り当てした書き込み >> パリティ層Mirror Tier > Reallocated Writes >> Parity Tier

読み取り: パリティから読み取っても、パフォーマンスに大きな悪影響はありません。Reads: There is no meaningful, negative performance impact when reading from parity:

  • ミラーおよびパリティが同じメディアの種類で構築されている場合、読み取りのパフォーマンスは同じになります。If mirror and parity are constructed with the same media type, read performance will be equivalent.
  • ミラーおよびパリティが異なるメディアの種類で構築されている場合 (ミラーリング SSD とパリティ HDD など)、記憶域スペース ダイレクトのキャッシュにホット データをキャッシュしてパリティからの読み取りを高速化できます。If mirror and parity are constructed with different media types—Mirrored SSDs, Parity HDDs, for example—the cache in Storage Spaces Direct will help cache hot data to accelerate any reads from parity.

ReFS の圧縮ReFS compaction

この秋の半年単位のリリースでは、ReFS によって圧縮が導入されています。これにより、90以上のミラーアクセラレータパリティボリュームのパフォーマンスが大幅に向上します。In this Fall's semi-annual release, ReFS introduces compaction, which substantially improves performance for mirror-accelerated parity volumes that are 90+% full.

バック グラウンド: 以前は、ミラーリングによって高速化されたパリティ ボリュームがいっぱいになると、これらのボリュームのパフォーマンスが低下することがありました。Background: Previously, as mirror-accelerated parity volumes became full, the performance of these volumes could degrade. 時間が経過するとボリューム全体でホット データとコールド データが混在するため、パフォーマンスが低下します。The performance degrades because hot and cold data become mixed throughout the volume overtime. つまり、ホット データが使用できるミラー内の領域をコールド データが占有するため、ミラーに格納できるホット データが少なくなります。This means less hot data can be stored in mirror since cold data occupies space in mirror that could otherwise be used by hot data. ミラーへの直接書き込みは再割り当てされた書き込みよりある程度高速で、パリティへの直接書き込みより数桁高速なため、高いパフォーマンスを維持するには、ホット データをミラーに格納することが重要です。Storing hot data in mirror is critical to maintaining high performance because writes directly to mirror are much faster than reallocated writes and orders of magnitude faster than writes directly to parity. したがって、コールド データをミラーに格納すると、ReFS がミラーに直接書き込むことができる可能性が下がるため、パフォーマンス上よくありません。Thus, having cold data in mirror is bad for performance, as it reduces the likelihood that ReFS can make writes directly to mirror.

ReFS の圧縮は、ホット データ用にミラー内の領域を解放することでこのようなパフォーマンスの問題に対処します。ReFS compaction addresses these performance issues by freeing up space in mirror for hot data. 圧縮ではまずすべてのデータが (ミラーとパリティの両方から) パリティに統合されます。Compaction first consolidates all data—from both mirror and parity—into parity. これによって、ボリューム内の断片化が軽減され、ミラーのアドレス指定可能な領域の量が増加します。This reduces fragmentation within the volume and increases the amount of addressable space in mirror. 最も重要な点として、この処理により ReFS がホット データをミラーにもう一度統合することができます。More importantly, this process enables ReFS to consolidate hot data back into mirror:

  • 新しい書き込みが発生すると、ミラーで処理されます。When new writes come in, they will be serviced in mirror. したがって、新しく書き込まれたホット データはミラーに格納されます。Thus, newly written, hot data resides in mirror.
  • パリティ内のデータに変更書き込みが行われると、ReFS は再割り当てされた書き込みを行うため、この書き込みはミラーでも処理されます。When a modifying write is made to data in parity, ReFS makes a reallocated write, so this write is serviced in mirror as well. その結果、圧縮時にパリティに移動されたホット データはミラーにもう一度再割り当てされます。Consequently, hot data that was moved into parity during compaction will be reallocated back into mirror.

パフォーマンスの最適化Performance optimizations

重要

書き込みが多い Vhd を異なるサブディレクトリに配置することをお勧めします。We recommend placing write-heavy VHDs in different subdirectories. これは、ReFS が、ディレクトリとそのファイルのレベルでメタデータの変更を書き込むためです。This is because ReFS writes metadata changes at the level of a directory and its files. そのため、ディレクトリ間で書き込み負荷の高いファイルを配布すると、メタデータ操作のサイズが小さくなり、並列に実行されるため、アプリの待機時間が短縮されます。So if you distribute write-heavy files across directories, metadata operations are smaller and run in parallel, reducing latency for apps.

パフォーマンス カウンターPerformance counters

ReFS には、ミラーリングによって高速化されたパリティのパフォーマンスを評価できるようにパフォーマンス カウンターが保持されています。ReFS maintains performance counters to help evaluate the performance of mirror-accelerated parity.

  • 前述の「パリティへの書き込み」セクションで説明したように、ミラーリングの空き領域が見つからない場合、ReFS はパリティに直接書き込まれます。As described above in the Write to Parity section, ReFS will write directly to parity when it can't find free space in mirror. 一般に、これはミラーリングされた階層が早くいっぱいになって ReFS がデータをパリティにローテーションできないときに発生します。Generally, this occurs when the mirrored tier fills up faster than ReFS can rotate data to parity. つまり、ReFS のローテーションが取り込み速度に追いつかない場合です。In other words, ReFS rotation is not able to keep up with the ingestion rate. 以下のパフォーマンス カウンターは、ReFS がいつパリティに直接書き込むかを識別します。The performance counters below identify when ReFS writes directly to parity:

    # 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
    
  • これらのカウンターが 0 以外の場合、ReFS がデータをミラーからローテーションする速度が十分でないことを示します。If these counters are non-zero, this indicates ReFS is not rotating data fast enough out of mirror. これを軽減するには、ローテーションの積極性を変更するか、ミラーリングされた階層のサイズを大きくすることができます。To help alleviate this, one can either change the rotation aggressiveness or increase the size of the mirrored tier.

ローテーション強度Rotation aggressiveness

ReFS は、ミラーが指定された容量しきい値に達するとデータのローテーションを開始します。ReFS begins rotating data once mirror has reached a specified capacity threshold.

  • このローテーションしきい値が大きいほど、ReFS はミラー層に長くデータを保持できます。Higher values of this rotation threshold cause ReFS to retain data in the mirror tier longer. ホット データをミラー層に残しておくとパフォーマンス上は最適ですが、ReFS は大量の入力 IO を効率的に処理できません。Leaving hot data in the mirror tier is optimal for performance, but ReFS will not be able to effectively service large amounts of incoming IO.
  • 値を小さくすると、ReFS がデータを積極的にデステージでき、取り込み入力 IO が向上します。Lower values enable ReFS to proactively destage data and better ingest incoming IO. これは、アーカイブ ストレージなど、取り込み量が多いワークロードに当てはまります。This is applicable to ingest-heavy workloads, such as archival storage. ただし、一般的な用途のワークロードの場合、値を小さくするとパフォーマンスが低下する可能性があります。Lower values, however, could degrade performance for general purpose workloads. ミラー層からデータを不必要にローテーションすると、パフォーマンスが低下します。Unnecessarily rotating data out of the mirror tier carries a performance penalty.

ReFS には、このしきい値を調整するための調整可能なパラメーターが導入されており、レジストリ キーを使って構成できます。ReFS introduces a tunable parameter to adjust this threshold, which is configurable using a registry key. このレジストリ キーは、記憶域スペース ダイレクト展開内の各ノードで構成する必要があり、変更を有効にするには再起動が必要です。This registry key must be configured on each node in a Storage Spaces Direct deployment, and a restart is required for any changes to take effect.

  • キー: HKEY_LOCAL_MACHINE\System\CurrentControlSet\PoliciesKey: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Policies
  • ValueName (DWORD): DataDestageSsdFillRatioThresholdValueName (DWORD): DataDestageSsdFillRatioThreshold
  • ValueType: 割合ValueType: Percentage

このレジストリ キーが設定されていない場合、ReFS は 85% の既定値を使います。If this registry key is not set, ReFS will use a default value of 85%. この既定値はほとんどの展開に推奨され、50% 未満の値は推奨されません。This default value is recommended for most deployments, and values below 50% are not recommended. 次の PowerShell コマンドは、値を 75% にしてこのレジストリ キーを設定する方法を示しています。The PowerShell command below demonstrates how to set this registry key with a value of 75%:

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

記憶域スペース ダイレクトの展開で、各ノード間でこのレジストリ キーを構成するには、次の PowerShell コマンドを使用できます。To configure this registry key across each node in a Storage Spaces Direct deployment, you can use the PowerShell command below:

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

ミラー化された層のサイズを増やすIncreasing the size of the mirrored tier

ミラーリングされた階層のサイズを増やすと、ReFS が大きいワーキング セットをミラーに保持できるようになります。Increasing the size of the mirrored tier enables ReFS to retain a larger portion of the working set in mirror. これにより、ReFS がミラーに直接書き込むことができる可能性が高まるため、パフォーマンスの向上に貢献します。This improves the likelihood that ReFS can write directly to mirror, which will help achieve better performance. 次の PowerShell コマンドレットは、ミラーリングされた階層のサイズを増やす方法を示しています。The PowerShell cmdlets below demonstrate how to increase the size of the mirrored tier:

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

ヒント

StorageTier のサイズを変更したら、PartitionVolume のサイズを変更していることを確認します。Make sure to resize the Partition and Volume after you resize the StorageTier. 詳細と例については、「Resize-Volumes」を参照してください。For more information and examples, see Resize-Volumes.

ミラーリングによって高速化されたパリティ ボリュームを作成するCreating a mirror-accelerated parity volume

次の PowerShell コマンドレットは、ミラー:パリティ比が 20:80 (ほとんどのワークロードに推奨) のミラーリングによって高速化されたパリティ ボリュームを作成します。The PowerShell cmdlet below creates a mirror-accelerated parity volume with a Mirror:Parity ratio of 20:80, which is the recommended configuration for most workloads. 詳細と例については、「記憶域スペース ダイレクトのボリュームの作成」をご覧ください。For more information and examples, see Creating volumes in Storage Spaces Direct.

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

その他の参照情報Additional References