SMB Azure ファイル共有のパフォーマンスを向上させる

適用対象: ✔️ SSD メディア層の SMB ファイル共有

この記事では、SMB マルチチャネルやメタデータ キャッシュの使用など、SSD (Premium) SMB Azure ファイル共有のパフォーマンスを向上させる方法について説明します。

パフォーマンスの最適化

次のヒントを参考にして、パフォーマンスを最適化することができます。

  • ストレージアカウントとクライアントが同じAzureリージョンにあることを確認してください。そうすればネットワークの遅延を減らしましょう。
  • マルチスレッド アプリケーションを使用し、複数のファイルに負荷を分散します。
  • 複数の性能テストを実行し、また繰り返します。 最初のテストだけで結論を出さないでください。
  • SMB マルチチャネルのパフォーマンス上の利点は、負荷を分散するファイルの数に伴って増加します。
  • SSD 共有のパフォーマンスは、IOPS とスループット、単一ファイルの制限など、プロビジョニングされた共有サイズによって制限されます。 詳細については、 プロビジョニング v1 モデルの理解を参照してください。
  • 1 つの仮想マシン (VM) クライアントの最大パフォーマンスは、引き続き VM の制限にバインドされます。 たとえば、 Standard_D32s_v3 は最大帯域幅約 1.86 GiB/秒をサポートします。イングレス (ストレージへの書き込み) は従量制課金されますが、エグレス (ストレージからの読み取り) は行われません。 ファイル共有のパフォーマンスは、コンピューターのネットワーク制限、CPU、使用可能な内部ストレージのネットワーク帯域幅、IO サイズ、並列処理、およびその他の要因の影響を受けます。
  • 単一のクライアントによってパフォーマンスが制限され、ワークロードがプロビジョニングされた共有制限を下回っている場合は、複数のクライアントに負荷を分散することで、より高いパフォーマンスを実現できます。
  • ゾーン配置を使用して、ストレージ アカウントが存在する特定の可用性ゾーンを選択します。 これにより、VM をストレージと同じ可用性ゾーンに配置できるため、待機時間を最大 30% 短縮できます。

IOPS、スループット、I/O サイズの関係

スループット = IO サイズ * IOPS

I/O サイズが大きいほどスループットが向上し、待機時間が長くなり、結果としてネット IOPS の数が少なくなります。 I/O サイズを小さくすると、IOPS が高くなりますが、ネット スループットと待機時間が低下します。 詳細については、「Azure Files のパフォーマンスについて」を参照してください。

SMB マルチチャネル

SMB マルチチャネルを使用すると、SMB クライアントは SMB ファイル共有への複数のネットワーク接続を確立でき、スループットと回復性が向上します。 Azure Files では、Windows と Linux の両方の SMB クライアントの SSD ファイル共有で SMB マルチチャネルがサポートされています。 Windows クライアントの場合、すべてのAzureリージョンで SMB マルチチャネルが既定で有効になります。 サポートされている Linux OS のバージョンと詳細な構成については、 Linux SMB マルチチャネルに関する記事を参照してください。

SMB マルチチャネルの利点

SMBマルチチャネルを有効にすると、クライアントは複数のネットワーク接続を利用できます。 この構成は性能を向上させ、所有コストを下げます。 複数のNICでの帯域幅集約や、受信側スケーリング(RSS)サポートを使ってI/O負荷を複数のCPUに分散させることで、より良いパフォーマンスが得られます。

  • スループットの向上: 複数接続により、複数のパスでデータを並列で転送できるため、ファイルのサイズが大きく、I/O のサイズが大きいファイルを使用し、単一の VM または小さな VM セットからの高スループットを必要とするワークロードに大きなメリットがあります。 これらのワークロードには、コンテンツ作成やコード変換のためのメディアやエンターテインメント、ゲノミクス、金融サービスのリスク分析などがあります。
  • 高 IOPS:NIC RSS 機能を使用すると、複数の CPU で複数の接続がある場合に効果的な負荷分散を行うことができます。 これは、より高い IOPS スケールと VM CPU の有効活用に役立ちます。 これは、データベース アプリケーションなど、I/O のサイズが小さいワークロードに便利です。
  • ネットワーク フォールト トレランス: 複数接続により、クライアントが単一の接続に依存しなくなるため、中断のリスクが軽減されます。
  • 自動構成: クライアントとストレージ アカウントで SMB マルチチャネルが有効になっている場合、既存の接続を動的に検出でき、必要に応じて追加の接続パスを作成できます。
  • コストの最適化: ワークロードは、SSD ファイル共有に接続しながら、単一の VM または少数の VM からより高いスケールを実現できます。 これにより、ワークロードを実行および管理するために必要な VM の数が減り、総保有コストを削減できます。
  • Linux クライアントのパフォーマンススケーリング: Linux SMB クライアントは、Windows と同様に、マルチチャネルを利用してスループットと IOPS を向上できるようになりました。
  • クロスプラットフォームの一貫性: 最適なパフォーマンスを実現する Windows クライアントと Linux クライアントの両方でハイブリッド環境を実現します。
  • 回復性: 複数のチャネルによって、異種ネットワークに対するフォールト トレランスが向上します。

SMB マルチチャネルの詳細については、 Windows のドキュメントを参照してください

この機能により、マルチスレッド アプリケーションのパフォーマンスが向上するメリットが得られますが、通常シングルスレッド アプリケーションには役立ちません。 詳細については、「パフォーマンスの比較」セクションを参照してください。

制限事項

Azure ファイル共有の SMB マルチチャネルには、現在、次の制限があります。

  • SSD ファイル共有でのみ使用できます。 HDD ファイル共有では使用できません。
  • SMB 3.1.1 を使用しているクライアントでのみサポートされます。 SMB クライアント オペレーティング システムに推奨レベルの修正プログラムが適用されていることを確認します。
  • 最大チャンネル数は4つです。 詳細は 「SMBチャンネル数が4つを超える」をご覧ください。

クライアントで SMB マルチチャネルが有効になっていることを確認する

SMB マルチチャネルは、機能がクライアント側 (お使いのクライアント) とサービス側 (お使いの Azure ストレージ アカウント) の両方で有効になっている場合にのみ機能します。

Windows クライアントでは、SMB マルチチャネルが既定で有効になっています。 次の PowerShell コマンドを実行して、構成を確認できます。

Get-SmbClientConfiguration | Select-Object -Property EnableMultichannel

ストレージ アカウントで SMB マルチチャネルが有効になっていることを確認する

Azure ポータル、Azure PowerShell、またはAzure CLIを使用して、SMB マルチチャネルの状態を表示し、ストレージ アカウントで有効または無効にすることができます。

SMB マルチチャネルの状態を表示するには、SSD ファイル共有を含むストレージ アカウントに移動します。 サービス メニューの [データ ストレージ] で、[ クラシック ファイル共有] を選択します。 [ ファイル共有の設定 ] セクションに SMB マルチチャネルの状態が表示されます。 表示されない場合は、ストレージ アカウントが FileStorage アカウントの種類であることを確認します。

ストレージ アカウント内のファイル共有セクションのスクリーンショット。SMB マルチチャネル設定が強調表示されています。

SMB マルチチャネルを有効または無効にするには、現在のステータスを選択します (ステータスに応じて [有効] または [無効] )。 表示されるダイアログでは、SMB マルチチャネルを有効または無効に切り替えることができます。 目的の状態を選択し、 [保存] を選択します。

SMB マルチチャネル機能を有効または無効にするダイアログのスクリーンショット。

古いWindows オペレーティング システムで SMB マルチチャネルを有効にする

Azure Filesで SMB マルチチャネルをサポートするには、Windowsに関連するすべてのパッチがあることを確認します。 Windows Server 2016、Windows 10 バージョン 1607、Windows 10 バージョン 1507 など、いくつかの古いWindows バージョンでは、完全に修正プログラムが適用されたインストールに関連するすべての SMB マルチチャネル修正プログラムを適用するために、追加のレジストリ キーを設定します。 これらの 3 つのバージョンより新しいバージョンのWindowsを実行している場合は、追加のアクションは必要ありません。

バージョン 1607 のWindows Server 2016とWindows 10

Windows Server 2016 および Windows 10 バージョン 1607 のすべての SMB マルチチャネル修正プログラムを有効にするには、次の PowerShell コマンドを実行します。

Set-ItemProperty `
    -Path "HKLM:\SYSTEM\CurrentControlSet\Policies\Microsoft\FeatureManagement\Overrides" `
    -Name "2291605642" `
    -Value 1 `
    -Force

Windows 10 バージョン 1507

Windows 10 バージョン 1507 のすべての SMB マルチチャネル修正を有効にするには、次の PowerShell コマンドを実行します。

Set-ItemProperty `
    -Path "HKLM:\SYSTEM\CurrentControlSet\Services\MRxSmb\KBSwitch" `
    -Name "{FFC376AE-A5D2-47DC-A36F-FE9A46D53D75}" `
    -Value 1 `
    -Force

Linux SMB マルチチャネルのサポート

Azure Files では、次のディストリビューションでネイティブ Linux SMB クライアントを使用する SMB マルチチャネルがサポートされています。

Distribution 最小カーネルバージョン
Ubuntu 24.04 AKS 6.8.0-1042
Ubuntu 24.04 仮想マシン 6.14.0-1017
Ubuntu 22.04 仮想マシン 6.8.0-1044
AzLinux 3.0 (VMs and AKS) 6.6.106.1
RHEL 9.7 5.14.0-611.5.1.el9_7
RHEL 10.1 6.12.0-124.8.1.el10_1

これらのクライアントは、マルチチャネルをサポートする適切なカーネル スタックおよび CIFS ユーティリティを実行している必要があります。 Linux での SMB マルチチャネルのサポートにより、同じファイル共有エンドポイントへの複数の並列 TCP 接続を確立することで、Windows と同様のパフォーマンス スケーリングが可能になります。

[前提条件]

Linux で SMB マルチチャネルを使用するための前提条件を次に示します。

  • SMB マルチチャネルのサポートが有効になっているカーネル ( Linux SMB マルチチャネルのサポートを参照)
  • SMB 3.1.1
  • クライアントと Azure Files エンドポイントの間でポート 445/TCP を開く
  • マルチキュー対応のためにクライアント側受信側スケーリング(RSS)が有効になっていることを確認してください

mount コマンドの例

Linux で SMB マルチチャネルを使用するための mount コマンドの例を次に示します。

mount -t cifs //<storageaccount>.file.core.windows.net/<share> /mnt/azfiles \
   -o vers=3.1.1,username=<account>,password=<key>,dir_mode=0777,file_mode=0777, \
   multiuser,serverino,actimeo=30,max_channels=4

SMB マルチチャネルが正しく構成されていることを確認する

SMB マルチチャネルが正しく構成されていることを確認するには、次の手順に従います。

  1. 新しい SSD ファイル共有を作成するか、既存の SSD ファイル共有を使用します。
  2. クライアントがSMBマルチチャネルをサポートしているか確認してください(1つ以上のネットワークアダプターが受信側スケーリングが有効になっている場合)。 詳細はWindowsのドキュメントをご覧ください。
  3. クライアントにファイル共有をマウントします。
  4. アプリケーションで負荷を生成します。 robocopy /MT などのコピー ツールや Diskspd などのパフォーマンス ツールを使用してファイルの読み取り/書き込みを行うと、負荷を生じさせることができます。
  5. 管理者として PowerShell を開き、次のコマンドを実行します。 Get-SmbMultichannelConnection | fl
  6. MaxChannels および CurrentChannels プロパティを検索します。

パフォーマンスの比較

読み取り/書き込みのワークロード パターンには、シングルスレッドとマルチスレッドの 2 つのカテゴリがあります。 ほとんどのワークロードで複数のファイルが使用されますが、共有内の 1 つのファイルを使ってワークロードが動作する特殊なユース ケースがあります。 このセクションでは、それぞれのユース ケースとパフォーマンスへの影響について説明します。 一般に、ほとんどのワークロードはマルチスレッドであり、ワークロードが複数のファイルに分散されるため、SMB マルチチャネルを使用することでパフォーマンスの大幅な向上が見られるはずです。

  • マルチスレッド、複数ファイル: ワークロード パターンによっては、複数のチャネルでの読み取りと書き込みの I/O のパフォーマンスが大幅に向上するはずです。 IOPS、スループット、待ち時間について、パフォーマンスが 2 から 4 倍向上します。 このカテゴリでは、最適なパフォーマンスを実現するために SMB マルチチャネルを有効にする必要があります。
  • マルチスレッド/シングルファイル:このカテゴリのほとんどのユースケースでは、特に平均I/Oサイズ(16 KiBを超える)のワークロードは、SMBマルチチャネルを有効にすることでメリットがあります。 SMB マルチチャネルのメリットが得られるシナリオ例としては、大きな単一ファイルのバックアップや回復があります。 例外として SMB マルチチャネルを無効にした方がよいのは、I/O が小さくてワークロードが重い場合です。 その場合、約10%のわずかなパフォーマンス低下が見られるかもしれません。 ユース ケースに応じて、複数のファイルに負荷を分散させるか、機能を無効にすることを検討してください。
  • シングルスレッド、複数ファイルまたは単一ファイル: ほとんどのシングルスレッド ワークロードでは、並列処理がないため、パフォーマンス上の利点は最小限にとどまります。 通常、SMBマルチチャネルを有効にすると10% 程度のわずかな性能低下があります。 この場合は、SMB マルチチャネルを無効にすることをお勧めします。ただし、例外が 1 つあります。 シングルスレッドのワークロードが複数のファイルに負荷を分散させ、平均I/Oサイズが16 KiBを超える場合、SMBマルチチャネルからわずかなパフォーマンス向上があるはずです。

パフォーマンス テストの構成

この記事のグラフで使用されている構成は、単一の標準 D32s v3 VM で、単一の RSS 対応 NIC を備え、チャネルは 4 つです。 負荷の生成には、diskspd.exe をマルチスレッドで使用しました。IO 深度は 10、様々な I/O サイズのランダムな I/O です。

SMB マルチチャネルを使用した、マルチスレッド/複数ファイル

負荷は、IO サイズが異なる 10 個のファイルに対して生成されました。 スケールアップ テストの結果には、SMB マルチチャネルを有効にした IOPS とスループットのテスト結果の両方で大幅な改善が示されました。 それぞれの結果を以下の図に示します。

パフォーマンスのダイアグラム。

スループットのパフォーマンスの図。

  • 単一の NIC で、読み取りの場合は 2 から 3 倍のパフォーマンス向上、書き込みの場合は IOPS とスループットの両方で 3 から 4 倍の向上が見られました。
  • NIC が 1 つ、チャネルが 4 つという制限があっても、SMB マルチチャネルにより、IOPS とスループットが VM の制限に達することができました。
  • エグレス (ストレージからの読み取り) は従量制課金されないため、読み取りスループットは VM の公開されている約 1.86 GiB/秒の制限を超え、2.7 GiB/秒を超えました。イングレス (ストレージへの書き込み) は、引き続き VM のスループット制限の対象となります。
  • 複数のファイルに負荷を分散することにより、大幅な改善が可能になりました。

このテストで使用されるコマンドの例を次に示します。

diskspd.exe -W300 -C5 -r -w100 -b4k -t8 -o8 -Sh -d60 -L -c2G -Z1G z:\write0.dat z:\write1.dat z:\write2.dat z:\write3.dat z:\write4.dat z:\write5.dat z:\write6.dat z:\write7.dat z:\write8.dat z:\write9.dat

SMB マルチチャネルを使用したマルチスレッド、単一ファイルのワークロード

この負荷は、128 GiB の単一ファイルに対して生成されました。 SMB マルチチャネルを有効にすると、マルチスレッド、単一ファイルを使用したスケールアップ テストのほとんどの場合に改善が見られました。 それぞれの結果を以下の図に示します。

IOPS パフォーマンスの図。

単一ファイルのスループット パフォーマンスの図。

  • 平均 I/O サイズ (16 KiB を超える) が大きい 1 つの NIC では、読み取りと書き込みの両方が大幅に改善されました。
  • 小さなI/Oサイズの場合、SMBマルチチャネルを有効にするとパフォーマンスに約10% 影響があります。 負荷を複数のファイルに分散させるか、機能を無効にすることでこの影響を軽減できます。
  • パフォーマンスは、単一ファイルの制限に引き続き縛られます。

SSD ファイル共有のメタデータ キャッシュ

メタデータ キャッシュは、メタデータの待機時間を短縮し、メタデータスケールの制限を引き上げる SSD Azure ファイル共有の機能強化です。 この機能により、待機時間の整合性と使用可能な IOPS が向上し、ネットワーク スループットが向上します。 Windows クライアントと Linux クライアントの両方で使用できます。

この機能により、次のメタデータ API のパフォーマンスが向上します。

  • 作成
  • 開く
  • 閉じる
  • 削除

現在、この機能は SSD ファイル共有でのみ使用できます。 この機能の使用に関連する追加コストはありません。 また、登録して SSD ファイル共有のファイル ハンドルの制限を増やすこともできます (プレビュー)。

メタデータ キャッシュ機能に登録する

使用を開始するには、Azure portal または Azure PowerShell を使用してこの機能に登録します。

  1. Azure portal にサインインします。
  2. [プレビュー機能] を検索して選択します。
  3. [種類] フィルターを選択し、[Microsoft.Storage] を選択します。
  4. Azure Premium Files メタデータ キャッシュを選択し、[登録] を選択します。

重要

プレビュー機能の下に一覧表示されていますが、GA SLA が優先されます。 この機能を登録したら、 Azure Files チーム に連絡して詳細な手順を確認してください。

メタデータ キャッシュによるパフォーマンスの向上

メタデータを含むほとんどのワークロードまたは使用パターンは、メタデータ キャッシュを使うことでメリットがあります。 ワークロードにメタデータが含まれるかどうかを判断するには、Azure Monitor を使用して、API ディメンション別にトランザクションを分割できます。

一般に、次のようなワークロードと使用パターンでメタデータが多くなります。

  • Web サービスやアプリ サービス
  • DevOps タスク
  • インデックス作成ジョブやバッチ ジョブ
  • ホーム ディレクトリや、多くの小さいファイル、ディレクトリ、またはハンドルと主に対話するその他のワークロードを含む仮想デスクトップ

次の図は、可能性のある結果を示したものです。

メタデータの待ち時間を短縮する

メタデータ キャッシュを使って、将来の検索のためにファイルとディレクトリのパスをキャッシュすると、メタデータの多い大規模なワークロードの場合、頻繁にアクセスされるファイルとディレクトリの待ち時間を 30% 以上短縮できます。

メタデータ キャッシュがある場合とない場合の待機時間をミリ秒単位で示すグラフ。

使用可能な IOPS を増やす

メタデータ キャッシュを使うと、メタデータの多い大規模なワークロードの場合、利用できる IOPS を 60% より多く増やすことができます。

メタデータ キャッシュがある場合とない場合の使用可能な IOPS を示すグラフ。

ネットワーク スループットを増やす

メタデータ キャッシュを使うと、メタデータの多い大規模なワークロードの場合、ネットワーク スループットを 60% より多く増やすことができます。

メタデータ キャッシュがある場合とない場合のネットワーク スループットを示すグラフ。

ファイルハンドル上限値の引き上げに登録する (プレビュー)

SSD SMB ファイル共有のファイルとディレクトリごとの同時実行ハンドルの最大数を 2,000 から 10,000 に増やすには、Azure portal または Azure PowerShell を使用してプレビュー機能に登録します。 ご質問がある場合は、 Azure Files チームにお問い合わせください。

  1. Azure portal にサインインします。
  2. [プレビュー機能] を検索して選択します。
  3. [種類] フィルターを選択し、[Microsoft.Storage] を選択します。
  4. [Azure Premium Files の最大オープン ハンドル数の増加] を選択し、[登録] を選択します。

次のステップ