次の方法で共有


Azure NetApp Files の SMB のパフォーマンスのベスト プラクティス

この記事は、Azure NetApp Files の SMB のパフォーマンスとベスト プラクティスを理解するのに役立ちます。

SMB マルチチャネル

SMB マルチチャネルは、SMB 共有で既定で有効になっています。 既存の SMB ボリュームより前から存在していたすべての SMB 共有ではこの機能が有効になっています。また、新しく作成されたすべてのボリュームでも、作成時にこの機能が有効になっています。

SMB マルチチャネル機能を利用するには、機能が有効になる前に確立された SMB 接続をすべてリセットする必要があります。 リセットするには、SMB 共有を切断して再接続します。

Windows では、最適なパフォーマンスを実現するため、Windows 2012 以降で SMB マルチチャネルがサポートされています。 詳しくは、「SMB マルチチャネルを展開する」および SMB マルチチャネルの基礎に関する記事をご覧ください。

SMB マルチチャネルの利点

SMB マルチチャネル機能を使用すると、SMB3 クライアントでは、単一のネットワーク インターフェイス カード (NIC) または複数の NIC を介して接続のプールを確立し、それらを使用して 1 つの SMB セッションに要求を送信することができます。 これに対し、SMB1 と SMB2 では、設計上、クライアントは 1 つの接続を確立し、特定のセッションに対するすべての SMB トラフィックを、その接続を介して送信する必要があります。 この単一接続により、単一のクライアントから実現できるプロトコル全体のパフォーマンスが制限されます。

SMB マルチチャネルのパフォーマンス

次のテストとグラフは、単一インスタンス ワークロードにおける SMB マルチチャネルの能力を示したものです。

ランダム I/O

クライアントで SMB マルチチャネルを無効にし、FIO と 40 GiB のワーキング セットを使用して、純粋な 4 KiB の読み取りと書き込みのテストを実行しました。 SMB 共有は各テスト間でデタッチされており、RSS ネットワーク インターフェイス設定あたりの SMB クライアント接続数の増分は 14816set-SmbClientConfiguration -ConnectionCountPerRSSNetworkInterface <count> でした。 このテストでは、既定の設定 4 で、I/O 集中型のワークロードに十分であることが示されています。816 に増やしても影響はほとんどありませんでした。

コマンド netstat -na | findstr 445 により、1 から 44 から 88 から 16 の増分で追加接続が確立されたことが示されました。 各テストでは 4 個の CPU コアが SMB に完全に利用されました。これは、perfmon の Per Processor Network Activity Cycles の統計によって確認されています (この記事には記載されていません)。

SMB マルチチャネルのランダム I/O の比較を示す図。

Azure 仮想マシン (VM) は、SMB (または NFS) のストレージ I/O 制限には影響しません。 次のグラフに示すように、インスタンスの種類が D32ds の場合、キャッシュされたストレージ IOPS では 308,000、キャッシュされていないストレージ IOPS では 51,200 に速度が制限されます。 ただし、上のグラフでは、SMB の方が I/O がはるかに多いことが示されています。

ランダム I/O の比較テストを示すグラフ。

シーケンシャル I/O

前述のランダム I/O のテストと同様のテストを、64 KiB のシーケンシャル I/O で実行しました。 ランダム I/O では RSS ネットワーク インターフェイスあたりのクライアント接続数を 4 より大きくしても大きな効果はありませんでしたが、シーケンシャル I/O には同じことは当てはまりません。 次のグラフが示すように、接続数を増やすたびに、それに対応して読み取りスループットも増加します。 書き込みスループットは、インスタンスの種類とサイズごとに Azure によって課せられるネットワーク帯域幅の制限により、フラットなままです。

スループット テストの比較を示すグラフ。

Azure では、VM の種類とサイズごとにネットワーク速度が制限されます。 速度制限は、送信トラフィックに対してのみ適用されます。 VM に存在する NIC の数は、マシンで利用可能な合計帯域幅には影響しません。 たとえば、インスタンスの種類が D32ds の場合、16,000 Mbps (2,000 MiB/秒) のネットワーク制限が適用されます。 上のシーケンシャルのグラフで示されているように、この制限は送信トラフィック (書き込み) には影響しますが、マルチチャネルの読み取りには影響しません。

シーケンシャル I/O の比較テストを示すグラフ。

SMB 署名

SMB プロトコルでは、ファイルや印刷の共有や、Windows のリモート管理などの他のネットワーク操作に対する基盤が提供されます。 転送中の SMB パケットを変更する中間者攻撃を防ぐため、SMB プロトコルでは SMB パケットのデジタル署名がサポートされています。

SMB 署名は、Azure NetApp Files によってサポートされているすべての SMB プロトコル バージョンでサポートされています。

SMB 署名によるパフォーマンスへの影響

SMB 署名を使用すると、SMB のパフォーマンスに悪影響があります。 パフォーマンスが低下する可能性のある原因の 1 つは、以下の perfmon の出力に示すように、各パケットのデジタル署名によってクライアント側の CPU が余計に使用されることです。 この場合、コア 0 で SMB 署名を含む SMB の処理が行われています。 前のセクションのマルチチャネルではない場合のシーケンシャル読み取りスループットの数値と比較すると、SMB 署名により、全体的なスループットが 875 MiB/秒から約 250 MiB/秒に低下することがわかります。

SMB 署名のパフォーマンスの影響を示すグラフ。

1 TB のデータセットを使用する単一インスタンスのパフォーマンス

読み取り/書き込みを組み合わせたワークロードの詳細な分析情報を提供するために、次の 2 つのグラフで、1 TB のデータセットと SMB マルチチャネル 4 を使用した、50 TB の単一の Ultra サービスレベル クラウド ボリュームのパフォーマンスを示します。 最適な IODepth 16 が使用されました。ネットワーク帯域幅を最大限に使用するために、Flexible I/O (FIO) パラメーターが使用されました (numjobs=16)。

次のグラフは、1 つの VM インスタンスと、10% 間隔での読み取り/書き込みの組み合わせを使用した、4k のランダム I/O の結果を示しています。

Windows 2019 standard _D32ds_v4 4K のランダム IO テストを示すグラフ。

次のグラフは、シーケンシャル I/O の結果を示しています。

Windows 2019 standard _D32ds_v4 64K のシーケンシャル スループットを示すグラフ。

1 TB のデータセットを使用する 5 台の VM を使ってスケールアウトした場合のパフォーマンス

5 台の VM を使ったこれらのテストでは、単一の VM と同じテスト環境が使用され、各プロセスは独自のファイルに書き込みを行います。

次のグラフは、ランダム I/O の結果を示しています。

Windows 2019 standard _D32ds_v4 4K の 5 つのインスタンスのランダム IO テストを示すグラフ。

次のグラフは、シーケンシャル I/O の結果を示しています。

Windows 2019 standard _D32ds_v4 64K の 5 つのインスタンスのシーケンシャル スループットを示すグラフ。

Hyper-V イーサネット アダプターを監視する方法

FIO を使ったテストで使用される戦略の 1 つは、numjobs=16 を設定することです。 これにより各ジョブが 16 個の特定のインスタンスに分岐され、Microsoft Hyper-V ネットワーク アダプターが最大化されます。

Windows パフォーマンス モニターで各アダプターのアクティビティを確認するには、[パフォーマンス モニター] > [カウンターの追加] > [ネットワーク インターフェイス] > [Microsoft Hyper-V ネットワーク アダプター] の順に選びます。

パフォーマンス モニターの [カウンターの追加] インターフェイスを示すスクリーンショット。

データ トラフィックがボリューム内で実行されたら、Windows パフォーマンス モニターでアダプターを監視できます。 これらの 16 個すべての仮想アダプターを使用しない場合は、ネットワーク帯域幅の容量が最大化されない可能性があります。

パフォーマンス モニターの出力を示すスクリーンショット。

SMB 暗号化

このセクションは、SMB 暗号化 (SMB 3.0 および SMB 3.1.1) を理解するのに役立ちます。

SMB 暗号化は、SMB データをエンド ツー エンドで暗号化し、信頼できないネットワークで発生する傍受からデータを保護できます。 SMB 暗号化は、SMB 3.0 以上でサポートされています。

要求をストレージに送信するときに、クライアントは要求を暗号化します。この暗号化がストレージによって解除されます。 応答は、同様にサーバーによって暗号化され、クライアントによって暗号化が解除されます。

SMB 暗号化は、Windows 10、および Windows 2012 以降のバージョンでサポートされています。

SMB 暗号化と Azure NetApp Files

Azure NetApp Files では、SMB 暗号化は共有レベルで有効になっています。 SMB 3.0 では AES-CCM アルゴリズム、SMB 3.1.1 では AES-GCM アルゴリズムが採用されています。

SMB 暗号化は必須ではありません。 そのため、ユーザーが Azure NetApp Files 有効にするように要求すると、特定の共有に対してのみ有効になります。 Azure NetApp Files 共有がインターネットに公開されることはありません。 特定の VNet 内から、VPN または ExpressRoute 経由でのみアクセスできます。したがって、Azure NetApp Files 共有は本質的にセキュリティで保護されています。 SMB 暗号化を有効にするかどうかは、ユーザーが選択します。 この機能を有効にする前に、パフォーマンスの低下が予想されることを理解しておいてください。

クライアント ワークロードに対する SMB 暗号化の影響

SMB 暗号化は、クライアント (メッセージの暗号化と復号化のための CPU オーバーヘッド) とストレージ (スループットの低下) の両方に影響を与えますが、次の表は、ストレージに対する影響のみを示しています。 ワークロードを運用環境にデプロイする前に、自分のアプリケーションのパフォーマンスに対する暗号化の影響をテストする必要があります。

I/O プロファイル 影響
ワークロードの読み取りと書き込み 10% ~ 15%
メタデータ集中型 5%

高速ネットワーク

パフォーマンスを最大化するために、可能であれば、VM で高速ネットワークを構成することをお勧めします。 以下の点に注意してください。

  • Azure portal では、この機能をサポートする VM に対し、既定で高速ネットワークが有効になります。 ただし、Ansible や同様の構成ツールなどの他のデプロイ方法では有効にできません。 高速ネットワークを有効にしないと、マシンのパフォーマンスが低下する可能性があります。
  • インスタンスの種類またはサイズがサポートされていないために VM のネットワーク インターフェイスで高速ネットワークが有効になっていない場合、インスタンスの種類を大きくしても無効のままです。 そのような場合は、手動で介入する必要があります。
  • 専用の Azure NetApp Files のサブネット内の NIC に高速ネットワークを設定する必要はありません。 高速ネットワークは、Azure VM だけに適用される機能です。 Azure NetApp Files NIC が設計により最適化されています。

Receive Side Scaling

Azure NetApp Files では、Receive Side Scaling (RSS) がサポートされています。

SMB マルチチャネルを有効にすると、SMB3 クライアントでは、単一 RSS 対応のネットワーク インターフェイス カード (NIC) を介して、Azure NetApp Files SMB サーバーへの複数の TCP 接続が確立されます。

お使いの Azure VM の NIC で RSS がサポートされているかどうかを確認するには、次のようにコマンド Get-SmbClientNetworkInterface を実行し、フィールド RSS Capable を確認します。

Azure VM の RSS 出力を示すスクリーンショット。

SMB クライアント上の複数の NIC

SMB 用のクライアントで複数の NIC を構成しないでください。 SMB クライアントは、SMB サーバーから返される NIC の数とは一致しません。 各ストレージ ボリュームには、1 つのストレージ エンドポイントからしかアクセスできません。つまり、特定の SMB 関係に対して使用される NIC は 1 つだけです。

以下の Get-SmbClientNetworkInterace の出力でわかるように、この VM には 2 つのネットワーク インターフェイス 15 と 12 があります。 次のコマンド Get-SmbMultichannelConnection の下に示されているように、RSS 対応の NIC は 2 つありますが、SMB 共有との接続にはインターフェイス 12 のみが使用され、インターフェイス 15 は使用されていません。

RSS 対応の NIC の出力を示すスクリーンショット。

次のステップ