SMB ダイレクト

適用対象: Windows Server 2022、Windows Server 2019、Windows Server 2016、Windows Server 2012 R2、Windows Server 2012、Azure Stack HCI version 21H2

Windows Server には、SMB ダイレクトと呼ばれる機能が含まれています。これにより、リモート ダイレクト メモリ アクセス (RDMA) 機能を備えたネットワーク アダプターの使用がサポートされます。 RDMA を備えたネットワーク アダプターは、CPU 使用率を損なうことなく、待機時間を短縮しながらフル スピードで機能します。 Hyper-V や Microsoft SQL Server などのワークロードについては、この機能によってリモート ファイル サーバーをローカル ストレージのように利用することができます。 SMB ダイレクトは、Windows Server 2012 および今後のイテレーションで既定で自動的に構成されて有効化されます。

SMB ダイレクトを使うと、次が実現します。

  • 高スループット:ネットワーク アダプターが回線速度で大量のデータの転送を調整する高速ネットワークの完全スループットを活用します。
  • 短い待機時間:ネットワーク要求に対して高速で応答するため、リモート ファイル記憶域を、直接接続されたブロック記憶域のような感覚で使用できます。
  • 低 CPU 使用率:データをネットワークで転送するときに使用される CPU サイクルを節約して、サーバー アプリケーションで使用できる処理能力を増やすことができます。

SMB ダイレクトはフェールオーバー クラスターで使用できますが、クライアント アクセスに使用するクラスター ネットワークが SMB ダイレクトに適していることを確認する必要があります。 フェールオーバー クラスタリングでは、クライアント アクセスに複数のネットワークを使用することも、RSS (Receive Side Scaling) 対応および RDMA 対応のネットワーク アダプターを使用することもサポートされています。

Note

Hyper-V 管理オペレーティング システムで SMB ダイレクトを使用して、Hyper-V over SMB を使用できるようにしたり、Hyper-V 記憶域スタックを使用する仮想マシンに記憶域を提供したりできます。 ただし、RDMA 対応ネットワーク アダプターは、Hyper-V クライアントには直接公開されません。 RDMA 対応ネットワーク アダプターを仮想スイッチに接続している場合は、そのスイッチからの仮想ネットワーク アダプターは RDMA 対応ではなくなります。

必要条件

SMB ダイレクトの要件は次のとおりです。

  • RDMA 機能を搭載しているネットワーク アダプター 1 つ以上。
  • 次のオペレーティング システムのうち 1 つ以上を実行している 2 台以上のコンピューター:
    • Windows Server 2012 以降。
    • Windows 10 Enterprise 以降。
    • Windows 10 Education 以降。
    • Windows 10 Pro for Workstations 以降
    • Windows 10 Pro 22H2 (クリーン インストール済み、古いバージョンからアップグレードされていない) 以降。

Note

Windows 10 および Windows 11 ファミリは、クライアント専用に制限されており、SMB ダイレクト サーバーとして機能することはできません。

SMB マルチチャネル

SMB マルチチャネルとは、ネットワーク アダプターの RDMA 機能を検出して SMB ダイレクトを有効にする機能です。 SMB マルチチャネルを使用しない場合は、RDMA 対応ネットワーク アダプターで通常の TCP/IP が使用されます (すべてのネットワーク アダプターで、新しい RDMA スタックと共に TCP/IP スタックが提供されます)。

SMB マルチチャネルを使う場合は、ネットワーク アダプターに RDMA 機能が搭載されているかどうかが検出され、その 1 つのセッションに対して複数の RDMA 接続 (インターフェイスごとに 2 つ) が作成されます。 これにより、RDMA 対応ネットワーク アダプターによって提供される高スループット、低待機時間、低 CPU 使用率の利点を SMB で活用できるようになります。 複数の RDMA インターフェイスを使っている場合は、フォールト トレランスも提供されます。

Windows Server 2016 以降のスイッチ埋め込みチーミング (SET) を使って、RDMA 対応のネットワーク アダプターをチーム化できます。 1 つ以上の RDMA ネットワーク接続が作成されると、最初のプロトコル ネゴシエーションに使用された TCP/IP 接続は使用されなくなります。 ただし、RDMA ネットワーク接続に障害が発生した場合は、TCP/IP 接続が維持されます。

SMB マルチチャネルを無効にすると、SMB ダイレクトも無効になります。 SMB マルチチャネルでは、ネットワーク アダプターの機能が検出されると同時にネットワーク アダプターが RDMA 対応かどうかが確認されるため、SMB マルチチャネルが無効になっていると、クライアントで SMB ダイレクトを使うことができません。

SMB 暗号化

Windows Server 2022 と Windows 11 以降の SMB ダイレクトは、暗号化をサポートするようになりました。 以前は、SMB 暗号化を有効にすると、データの直接配置が無効になり、RDMA のパフォーマンスが TCP と同じくらい遅くなりました。 現在は、データは配置前に暗号化されるため、パフォーマンスの低下は比較的少なくなり、さらに AES-128 と AES-256 で保護されたパケットのプライバシーが追加されました。 SMB 暗号化の構成に関する詳細については、「SMB セキュリティ拡張機能」を参照してください。

さらに、Windows Server フェールオーバー クラスターは、クラスター共有ボリューム (CSV) とストレージ バス レイヤー (SBL) のノード内ストレージ通信の暗号化をきめ細かい制御をサポートするようになりました。 つまり、記憶域スペース ダイレクトと SMB ダイレクトを使用する場合、より高いセキュリティのために、クラスター自体の中で東西の通信を暗号化することを決定できます。

SMB ダイレクト機能の無効化と有効化

SMB クライアントは、適切な構成が見つかると、自動的に複数のネットワーク接続を検出して使用します。 SMB ダイレクトは既定で有効になっています。無効にすると、必要に応じてもう一度有効にするには、手動で操作する必要があります。

通常は、SMB ダイレクトを無効にする必要はありませんが、次の Windows PowerShell コマンドを実行すると、その機能も併せて無効にすることができます。

SMB ダイレクトを無効にするには、次のように入力します。

Disable-WindowsOptionalFeature -Online -FeatureName SMBDirect

サーバー側で SMB マルチチャネルを無効にするには、次のように入力します。

Set-SmbServerConfiguration -EnableMultiChannel $false

クライアント側で SMB マルチチャネルを無効にするには、次のように入力します。

Set-SmbClientConfiguration -EnableMultiChannel $false

特定のインターフェイスで RDMA を無効にするには、次のように入力します。

Disable-NetAdapterRdma <name>

すべてのインターフェイスで RDMA を無効にするには、次のように入力します。

Set-NetOffloadGlobalSetting -NetworkDirect Disabled

クライアントかサーバーのいずれかで RDMA を無効にしている場合は、システムで RDMA を使うことができなくなります。 "ネットワーク ダイレクト" とは、Windows Server での RDMA インターフェイスの基本的なネットワーク サポートに対する内部的な名前です。

SMB ダイレクトが現在構成されている操作の状態を確認するには、次のコマンドレットを実行します。

Get-WindowsOptionalFeature -Online -FeatureName SMBDirect

SMB ダイレクトのテスト

SMB ダイレクトのパフォーマンスは、大きなファイル コピーを実行中にスループットを測定することでテストできます。 テストの前に、PowerShell を使って、ネットワーク アダプターが RDMA をサポートしていることを確認します。

サーバー側で、次のように入力します。

Get-SmbServerNetworkInterface

クライアント側で、次のように入力します。

Get-SmbClientNetworkInterface

ネットワーク アダプターが RDMA 対応であることを確認したら、次のテストを実行します。

  1. ネットワーク アダプターで RDMA を無効にします (「SMB ダイレクトを有効および無効にする」を参照してください)。
  2. SMB ダイレクトを使わずに大きなファイル コピーを実行するときの所要時間を測定します。
  3. ネットワーク アダプターで RDMA をもう一度有効にし、同じファイル コピーを実行して、2 つの結果を比較します。
  4. キャッシュが影響しないようにするには、次の操作を実行します。
    1. 大量 (メモリで処理できる量を上回る量) のデータをコピーします。
    2. データを 2 回コピーします。1 回目は練習として、2 回目に時間を測定します。
    3. テストの前に毎回サーバーとクライアントの両方を再起動し、同様の条件で動作することを確認します。

さらに、次の操作を実行すると、パフォーマンス モニター ツールを利用しながら同じシナリオを使って、テスト中にパフォーマンス カウンターを観察できます。

  1. [スタート] を選択し、「perfmon」と入力して、Enter キーを押します。
  2. 左側のペインの [監視ツール]> で、[パフォーマンス モニター] を選択します。
  3. 右側のペインで、緑色の "+" アイコンを選択し、新しいカウンターを追加します。
  4. [カウンターの追加] ダイアログ ボックスで、[SMB ダイレクト接続] を展開します。
  5. [RDMA 読み取りバイト数/秒][RDMA 書き込みバイト数/秒] の両方を選択し、[追加] を選択したら、[OK] を選択します。

SMB ダイレクトのフェールオーバー機能

SMB ダイレクトのフェールオーバー機能を確認する方法を次に示します。

  1. SMB ダイレクトが複数のネットワーク アダプターの構成で機能していることを確認します。
  2. 大きなファイル コピーを実行します。 コピー処理中に、いずれかのケーブルを外すか、いずれかのネットワーク アダプターを無効にして、いずれかのネットワーク パスで障害が発生した状況をシミュレートします。
  3. 残ったネットワーク アダプターのいずれかを使用してファイルのコピーが続行され、ファイル コピー エラーが発生しないことを確認します。

ヒント

SMB ダイレクトを使用しないワークロードが失敗しないようにするには、切断されたネットワーク パスを使用しているワークロードがほかにないことを確認します。

その他のリファレンス