次の方法で共有


Windows ストレージ オフロード データ転送

概要

オフロード データ転送 (ODX) は、サーバーのコピー操作と移動操作を高速化する機能です。 この機能は Windows Server 2012 以降で使用でき、NTFS ボリュームでサポートされています。 このページでは、ストレージ デバイスの観点から ODX について説明します。 ファイル システムとミニフィルターに関連する情報については、「オフロードされたデータ転送」を参照してください。

Windows ODX では、ストレージ デバイス上のデータを移動するためのトークン化された操作が導入されています。 コピー元ファイルとコピー先ファイルは、同じボリューム、同じコンピューターでホストされている 2 つの異なるボリューム、サーバー メッセージ ブロック (SMB2 または SMB3) を介したローカル ボリュームとリモート ボリューム、または SMB2 または SMB3 を介した 2 台の異なるマシン上の 2 つのボリュームに置くことができます。 ODX は Windows 8 で導入されました。

ODX 対応ストレージ デバイスでのオフロード コピー操作のプロセスを次の図に示し、以下に説明します。

Copy offload operation using ODX.

  1. コピー アプリケーションは、コピー元ストレージ デバイスのコピー マネージャーにオフロード読み取り要求を送信します。
  2. コピー元のコピー マネージャーはトークンを返します。 トークンは、コピーするデータ (ROD) の表現です。
  3. アプリケーションは、トークンを含むオフロード書き込み要求をコピー先ストレージ デバイスのコピー マネージャーに送信します。
  4. ストレージ アレイ コピー マネージャーは、コピー元デバイスからコピー先デバイスにデータを移動し、オフロード書き込み結果をアプリケーションに返します。

ODX 対応のコピー元とコピー先を識別する

ODX をサポートするには、ストレージ アレイで、トークンを使用したオフロード読み取りおよび書き込み操作など、ODX 対応ストレージ アレイに関連する T10 標準仕様を実装する必要があります。 LUN デバイスの列挙 (システム ブートまたはプラグ アンド プレイ イベント) 中に、Windows は次の手順を使用して、ストレージ ターゲット デバイスの ODX 機能情報を収集または更新します。

  1. クエリ コピー オフロード機能。
  2. コピー オフロード操作と制限事項に必要なパラメーターを収集します。

既定では、コピー元 LUN とコピー先 LUN の両方が ODX 対応の場合、コピー操作に対して最初に ODX パスが試行されます。 ストレージ デバイスが最初の ODX 要求に失敗した場合、Windows はコピー元とコピー先の LUN の組み合わせを「ODX 対応ではない」パスとしてマークし、レガシ コピー ファイルのコード パスに従います。

ODX 読み取り/書き込み操作

同期コマンドの導入と API

大きなオフロード書き込み要求は、次のアルゴリズムを使用して分割され、堅牢な同期オフロード書き込みが保証されます。

  • ターゲット ストレージ デバイスが最適な転送サイズを提供しない場合は、最適な転送サイズを 64 MB (メガバイト)に設定します。
  • ターゲット デバイスによって設定された最適な転送サイズが 256 MB (メガバイト) を超える場合は、最適な転送サイズを 256 MB (メガバイト) に設定します。
  • ストレージ ターゲット デバイスで指定された最適な転送サイズは、0 より大きく、256 MB (メガバイト) 未満です。

同期オフロード読み取りとオフロード書き込み SCSI コマンドにより、MPIO とクラスターのフェールオーバー シナリオの複雑さを軽減します。 Windows では、コピー マネージャーが 4 秒以内に同期オフロード読み取り/書き込み SCSI コマンドを完了することを想定しています。

アプリケーションでは、FSCTLDSM IOCTL、またはSCSI_PASS_THROUGH API を使用して、ストレージ配列と対話し、コピー オフロード操作を実行できます。 データの破損やシステムの不安定さを回避するために、Windows では、最初にボリュームへの排他的アクセスを取得することなく、ファイル システムによってマウントされたボリュームにアプリケーションが直接書き込まれるのを制限します。 これは、ボリュームへの書き込みがファイル システムの書き込みと競合する可能性がある状態が原因です。 このような衝突が発生した場合、ボリュームの内容が不整合な状態のままになる可能性があります。

オフロード読み取り操作

アプリケーションのオフロード読み取り要求では、トークンの有効期間 (非アクティブ タイムアウト) を指定できます。 アプリケーションでトークンの有効期間を 0 に設定すると、既定の非アクティブ タイマーがトークンの有効期間として使用されます。 ストレージ アレイのコピー マネージャーは、非アクティブなタイムアウト値と資格情報に従ってトークンを保持し、検証します。 Windows ホストでは、ファイル フラグメントの数も 64 に制限されています。 オフロード読み取り要求が 64 個を超えるフラグメントで構成されている場合、Windows はコピー オフロード要求に失敗し、従来のコピー操作にフォールバックします。

オフロード読み取り要求が完了すると、コピー マネージャーは、受信オフロード読み取り結果コマンドのデータ (ROD) トークンの表現を準備します。 ROD トークン フィールドは、ユーザー データと保護情報のポイントインタイム表現を指定します。 ROD には、「排他的に開く」または「共有で開く」形式のユーザー データを指定できます。 コピー マネージャーは、ROD ポリシー設定に従ってトークンを無効にすることができます。 ROD がコピー オフロード操作に対して「排他的に開いている」場合、ROD が変更または移動されたときに ROD トークンを無効にすることができます。 ROD が「共有で開く」形式の場合は、ROD が変更されたときに ROD トークンが有効のままになります。 ROD トークンは、次の形式の 512 バイトです。

サイズ (バイト数) トークンの内容
4 ROD トークンのタイプ
508 ROD トークン ID

ROD トークンはストレージ アレイによってのみ付与および使用されるため、その形式は不透明で一意であり、安全性が高くなります。 トークンが変更された場合、検証されていない場合、または期限切れになった場合、コピー マネージャーはオフロード書き込み操作中にトークンを無効にすることができます。 オフロード読み取り操作から返された ROD トークンには、コピー マネージャーが次の書き込み使用トークンの使用に対して有効なトークンを保持する必要がある秒数を示す非アクティブなタイムアウト値があります。

オフロード書き込み操作

コピー マネージャーから ROD トークンを受け取った後、アプリケーションは ROD トークンを使用してオフロード書き込み要求をストレージ アレイのコピー マネージャーに送信します。 同期オフロード書き込みコマンドがターゲット デバイスに送信されると、Windows はコピー マネージャーが 4 秒以内にコマンドを完了することを想定しています。 コマンドのタイムアウトまたはその他のエラー状態が原因でコマンドが終了した場合、Windows はコマンドを失敗とします。 返された状態コードに従って、アプリケーションはレガシ コピー操作にフォールバックします。

オフロード書き込み要求は、1 つまたは複数の Receive Offload Write Result コマンドを使用して完了できます。 オフロード書き込みが部分的に完了した場合、コピー マネージャーは、推定遅延と転送回数を返してコピーの進行状況を示します。 転送カウントの数は、コピー元からコピー先メディアへのエラーなしで書き込まれた連続する論理ブロックの数を指定します。 コピー マネージャーは、順次または散布図/収集パターンでオフロード書き込みを実行できます。

書き込みエラーが発生すると、コピーの進行状況は、最初の論理ブロックから障害ブロックへの連続した論理ブロックをカウントします。 クライアント アプリケーションまたはコピー エンジンは、書き込みエラー ブロックからオフロード書き込みを再開します。 オフロード書き込みが完了すると、コピー マネージャーは、推定状態の更新遅延を 0 に設定し、データ転送カウントの進行状況を 100% に設定して、ROD トークン情報の受信コマンドを完了します。 受信オフロード書き込み結果がデータ転送数の同じ進行状況を返す場合、Windows は 4 回の再試行後にアプリケーションへのコピー操作を失敗とします。

クライアント アプリケーションは、既知の ROD トークンを使用してオフロード書き込み操作を実行することもできます。 これは、既知のデータ パターンとトークン形式を持つ定義済みの ROD トークンです。 一般的な実装の 1 つはゼロ トークンと呼ばれます。 クライアント アプリケーションでは、ゼロ トークンを使用して、1 つまたは複数の論理ブロックの範囲をゼロで埋めることができます。 既知のトークンがサポートされていないまたは認識できない場合、コピー マネージャーはオフロード書き込み要求を「無効なトークン」で失敗とします。 既知の ROD トークンは、次の形式の 512 バイトです。

サイズ (バイト数) トークンの内容
4 ROD トークンのタイプ
2 既知のパターン
506 ROD トークン ID

既知の ROD トークンを使用したオフロード書き込みでは、クライアント アプリケーションでオフロード読み取りを使用して既知のトークンを要求することはできません。 コピー マネージャーは、独自のポリシーに従って、既知の ROD トークンを検証、保持します。

ODX 実装のパフォーマンス チューニング パラメーター

ODX のパフォーマンスは、サーバーとストレージ アレイの間のクライアント/サーバー ネットワークまたはストレージ エリア ネットワーク (SAN) のトランスポート リンク速度に依存しません。 データは、コピー マネージャーとストレージ アレイのデバイス サーバーによって移動されます。

すべてのコピー オフロードで ODX テクノロジの利点が得られるわけではありません。 たとえば、1 Gbit iSCSI ストレージ アレイのコピー マネージャーは、10 秒以内に 3 GB のファイル コピーを完了でき、データ転送速度は 1 秒あたり 300 MB 以上です。 データ転送レートは、1 Gbit イーサネット インターフェイスの理論上の最大転送速度を既に上回っています。

さらに、特定のサイズのファイルのコピー パフォーマンスが ODX テクノロジのメリットを得られない可能性があります。 パフォーマンスを最適化するために、ODX の使用は許容される最小ファイル サイズと最大コピー長に制限できます。 注:

  • Windows では、コピー エンジンの 256 KB で、コピー オフロード操作の最小ファイル サイズ要件を設定します。 ファイルが 256 KB 未満の場合、コピー エンジンはレガシ コピー プロセスにフォールバックします。

  • Windows ホストは、最大トークン転送サイズと最適な転送数を使用して、オフロード読み取りまたは書き込み SCSI コマンドの最適な転送サイズを準備します。 ブロック数の合計転送サイズは、最大トークン転送サイズを超えてはなりません。 ストレージ アレイが最適な転送数を報告しない場合、Windows は既定の数として 64 MB を使用します。

最適転送長パラメーターと最大転送長パラメーターは、1 つの範囲記述子内のブロックの最適数と最大数を指定します。 コピー オフロード アプリケーションは、これらのパラメーターに準拠して、最適なファイル転送パフォーマンスを実現できます。

ODX エラー処理と高可用性のサポート

ODX 操作でファイル コピー要求が失敗すると、コピー エンジンと Windows ファイル システム (NTFS) はレガシ コピー操作にフォールバックします。 オフロード書き込み操作の途中でコピー オフロードが失敗した場合、コピー エンジンと NTFS は、オフロード書き込みの最初の障害ポイントからレガシ コピー操作を再開します。

ODX エラー処理

ODX は、ストレージ アレイの機能に従って堅牢なエラー処理アルゴリズムを使用します。 ODX 対応パスでコピー オフロードが失敗した場合、Windows ホストは、アプリケーションがレガシ コピー操作にフォールバックすることを想定しています。 この時点で、Windows コピー エンジンは既に「従来のコピーへのフォールバック」メカニズムを実装しています。 コピー オフロード エラーが発生した後、NTFS はコピー元とコピー先の LUN を ODX 対応ではないとして 3 分間マークします。 この期間が経過すると、Windows コピー エンジンは ODX 操作を再試行します。 ストレージ アレイでは、この機能を使用して、負荷の高い状況で一部のパスで ODX サポートを一時的に無効にすることができます。

MPIO およびクラスター サーバー構成での ODX フェールオーバー

オフロード読み取りおよび書き込み操作は、同じストレージ リンク (I_T nexus) から完了または取り消す必要があります。

同期オフロードの読み取りまたは書き込み操作中に MPIO またはクラスター サーバーのフェールオーバーが発生すると、Windows は次のようにフェールオーバーを処理します。

  • MPIO パスのフェールオーバーが発生した場合、Windows は失敗した ODX コマンドを再試行します。 コマンドが再度失敗した場合、Windows:

    • クラスター サーバーの一部である場合に、クラスター サーバー ノードのフェールオーバーを開始します。
    • クラスター サーバーのフェールオーバーがオプションでない場合は、ストレージ デバイスへの LUN リセットを発行し、I/O 失敗状態をアプリケーションに返します。
  • クラスター サーバー構成では、クラスター ストレージ サービスは次の優先クラスター ノードにフェールオーバーし、クラスター ストレージ サービスを再開します。 クラスター ストレージ サービスのフェールオーバー後にオフロード読み取り/書き込みコマンドを再試行できるようにするには、オフロード アプリケーションはクラスター対応である必要があります。

MPIO パスとクラスター ノードのフェールオーバー後にオフロードの読み取りまたは書き込みコマンドが失敗した場合、Windows はフェールオーバー後にストレージ デバイスに LUN リセットを発行します。 ストレージ デバイスは、LUN 上のすべての未処理のコマンドと保留中の操作を終了します。

現在、Windows では、ストレージ スタックからの非同期オフロード読み取りまたは書き込み SCSI コマンドは発行されません。

ODX 使用モデル

物理ディスク、仮想ハード ディスク、SMB 共有ディスク全体の ODX

ODX 操作を実行するには、アプリケーション サーバーが読み取り/書き込み特権を持つコピー元 LUN とコピー先 LUN の両方にアクセスできる必要があります。 コピー オフロード アプリケーションは、コピー元 LUN にオフロード読み取り要求を発行し、コピー元 LUN のコピー マネージャーからトークンを受け取ります。 コピー オフロード アプリケーションは、トークンを使用して、コピー先 LUN にオフロード書き込み要求を発行します。 次に、コピー マネージャーは、ストレージ ネットワークを介してコピー元 LUN からコピー先 LUN にデータを移動します。 次の図は、オフロードされたデータ転送でサポートされている最も基本的なコピー元ターゲットとコピー先ターゲットを示しています。

Basic supported ODX source and destination targets.

1 台のサーバーでの ODX 操作

単一サーバー構成では、コピー オフロード アプリケーションは、同じサーバー システムからのオフロード読み取りおよび書き込み要求を発行します。

コピー元サーバー (またはコピー元の VM) は、コピー元 LUN (VHD または物理ディスク) とコピー先 LUN (VHD または物理ディスク) の両方にアクセスできます。 コピー オフロード アプリケーションは、コピー元 LUN にオフロード読み取り要求を発行し、コピー元 LUN からトークンを受け取ります。 コピー オフロード アプリケーションは、トークンを使用して、コピー先 LUN にオフロード書き込み要求を発行します。 コピー マネージャーは、コピー元 LUN から同じストレージ アレイ内のコピー先 LUN にデータを移動します。

2 台のサーバーでの ODX 操作

2 サーバー構成では、2 台のサーバーと、同じコピー マネージャーによって管理される複数のストレージ アレイがあります。

  • 1 台のサーバー (または VM) がコピー元 LUN のホストであり、もう一方のサーバー (または VM) がコピー先 LUN のホストです。 コピー元サーバーは、SMB プロトコルを介してコピー元 LUN をアプリケーション クライアントと共有し、コピー先サーバーは SMB プロトコルを介して、コピー先 LUN をアプリケーション クライアントと共有します。 そのため、アプリケーション クライアントは、コピー元 LUN とコピー先 LUN の両方にアクセスできます。
  • コピー元ストレージ アレイとコピー先ストレージ アレイは、SAN 構成内の同じコピー マネージャーによって管理されます。
  • アプリケーション クライアント システムから、コピー オフロード アプリケーションは、オフロード読み取り要求をコピー元 LUN に発行し、コピー元 LUN からトークンを受け取った後、トークンを使用してコピー先 LUN にオフロード書き込み要求を発行します。 コピー マネージャーは、2 つの異なる場所にある 2 台の異なるストレージ アレイ間で、コピー元 LUN からコピー先 LUN にデータを移動します。

大規模なデータ移行

大規模なデータ移行は、データベース レコード、スプレッドシート、テキスト ファイル、スキャンされたドキュメント、画像などの大量のデータを新しいシステムにインポートするプロセスです。 データの移行は、ストレージ システムのアップグレード、新しいデータベース エンジン、またはアプリケーションまたはビジネス プロセスの変更によって発生する可能性があります。 ODX を使用すると、レガシ ストレージ システムを新しいストレージ システムのコピー マネージャーで管理できる場合に、レガシ ストレージ システムから新しいストレージ システムにデータを移行できます。

  • 1 台のサーバーがレガシ ストレージ システムのホストであり、もう 1 台のサーバーが新しいストレージ システムのホストです。 コピー元サーバーはコピー元 LUN を SMB プロトコルを介してデータ移行アプリケーション クライアントとして共有し、コピー先サーバーは SMB プロトコルを介してデータ移行アプリケーション クライアントとしてコピー先 LUN を共有します。 そのため、アプリケーション クライアントは、コピー元 LUN とコピー先 LUN の両方にアクセスできます。
  • レガシ ストレージ システムと新しいストレージ システムは、SAN 構成の同じコピー マネージャーによって管理されます。
  • データ移行アプリケーション クライアント システムから、コピー オフロード アプリケーションは、オフロード読み取り要求をコピー元 LUN に発行し、コピー元 LUN からトークンを受け取った後、トークンを使用してコピー先 LUN にオフロード書き込み要求を発行します。 コピー マネージャーは、2 つの異なる場所にある 2 台の異なるストレージ システム間で、コピー元 LUN からコピー先 LUN にデータを移動します。
  • 大規模なデータ移行を、1 台のサーバーを同じ場所で操作することもできます。

階層型ストレージ デバイス内でのホスト制御データ転送

階層化ストレージ デバイスはコストを削減し、パフォーマンスを向上させ、容量の問題に対処するために、データをさまざまな種類のストレージ メディアに分類します。 カテゴリは、必要な保護レベル、パフォーマンス要件、使用頻度、およびその他の考慮事項に基づいて作成できます。

データ移行戦略は、階層化ストレージ戦略の最終的な結果において重要な役割を果たします。 ODX を使用すると、階層化ストレージ デバイス内でホストによって制御されるデータの移行が可能になります。 次の例では、2 層ストレージ デバイスの ODX について説明します。

  • サーバーは、階層化ストレージ システムのホストです。 コピー元 LUN は Tier1 ストレージ デバイス、コピー先 LUN は Tier2 ストレージ デバイスです。
  • 階層化ストレージ デバイスはすべて、同じコピー マネージャーによって管理されます。
  • サーバー システムから、データ移行アプリケーションは、コピー元 LUN にオフロード読み取り要求を発行し、コピー元 LUN からトークンを受け取った後、トークンを含むオフロード書き込み要求をコピー先 LUN に発行します。 コピー マネージャーは、2 つの異なる層のストレージ デバイス間で、コピー元 LUN からコピー先 LUN にデータを移動します。
  • データ移行タスクが完了すると、アプリケーションは Tier1 ストレージ デバイスからデータを削除し、ストレージ空間を再利用します。