次の方法で共有


Azure Blob Storage でのネットワーク ファイル システム (NFS) 3.0 のパフォーマンスに関する考慮事項

Azure Blob Storage では、ネットワーク ファイル システム (NFS) 3.0 プロトコルがサポートされるようになりました。 この記事には、ストレージ要求のパフォーマンスを最適化するのに役立つ推奨事項が含まれています。 BLOB ストレージに対する NFS 3.0 のサポートの詳細については、 Azure Blob Storage のネットワーク ファイル システム (NFS) 3.0 プロトコルのサポートに関するページを参照してください。

スループットを向上させるためにクライアントを追加する

Blob Storage は、ストレージ アカウントのエグレスとイングレスの上限に達するまで直線的にスケーリングされます。 そのため、アプリケーションはより多くのクライアントを使用することで、より高いスループットを実現できます。 ストレージ アカウントのエグレスとイングレスの制限を表示するには、 Standard ストレージ アカウントのスケーラビリティとパフォーマンスのターゲットに関する説明を参照してください。

次のグラフは、クライアントを追加する際の帯域幅の増加を示しています。 このグラフでは、クライアントは、標準の汎用 v2 ストレージ アカウントを持つ仮想マシン (VM) です。

標準パフォーマンス横棒グラフを示す図。

次のグラフは、Premium ブロック BLOB ストレージ アカウントに適用された場合と同じ効果を示しています。

プレミアムパフォーマンスの横棒グラフを示す図。

小規模なアプリケーションに Premium ブロック BLOB ストレージ アカウントを使用する

すべてのアプリケーションで、クライアントを追加してスケールアップできるわけではありません。 これらのアプリケーションの場合、 Azure Premium ブロック BLOB ストレージ アカウント では、一貫して待機時間が短く、トランザクションレートが高くなります。 Premium ブロック BLOB ストレージ アカウントは、スレッドとクライアントの数が少ない最大帯域幅に達する可能性があります。 たとえば、単一のクライアントでは、Premium ブロック BLOB ストレージ アカウントは、標準パフォーマンス汎用 v2 ストレージ アカウントで使用されるのと同じセットアップと比較して 2.3 倍 の帯域幅を実現できます。

次のグラフの各バーは、Premium パフォーマンス ストレージ アカウントと Standard パフォーマンス ストレージ アカウントの間の達成された帯域幅の違いを示しています。 クライアントの数が増えると、その違いが減少します。

相対パフォーマンス横棒グラフを示す図。

読み取り先行サイズを改善して、大きなファイル読み取りスループットを向上させる

read_ahead_kb カーネル パラメーターは、特定の読み取り要求を実行した後に読み取る必要がある追加データの量を表します。 このパラメーターを 16 MiB に増やして、大きなファイル読み取りスループットを向上させることができます。

export AZMNT=/your/container/mountpoint

echo 16384 > /sys/class/bdi/0:$(stat -c "%d" $AZMNT)/read_ahead_kb

データの頻繁な上書きを回避する

上書き操作の完了には、新しい書き込み操作よりも時間がかかります。 NFS 上書き操作 (特にインプレース ファイルの部分的な編集) は、読み取り、変更、書き込み操作など、基になる複数の BLOB 操作の組み合わせです。 そのため、頻繁にインプレース編集を必要とするアプリケーションは、NFS 対応 Blob Storage アカウントには適していません。

待機時間の影響を受けやすいアプリケーション用に Azure HPC Cache をデプロイする

一部のアプリケーションでは、高スループットに加えて低待機時間が必要になる場合があります。 Azure HPC Cache をデプロイすると、待機時間を大幅に短縮できます。 Blob Storage の待機時間の詳細について説明します。

TCP 接続の数を増やす

nconnect マウント オプションを使用すると、Linux カーネルで Azure nconnect がサポートされている場合にのみ、単一の VM からより高い集計読み取りと書き込みのパフォーマンスを得ることができます。

nconnect オプションは、クライアント側の Linux マウント オプションであり、クライアントと BLOB サービス エンドポイント間の複数の伝送制御プロトコル (TCP) 接続に使用できます。 mount コマンドの nconnect オプションを使用して、作成する TCP 接続の数を指定できます (例: mount -t aznfs -o nconnect=16,sec=sys,vers=3,nolock,proto=tcp <storage-account-name>.blob.core.windows.net:/<storage-account-name>/<container-name> /nfsdatain)。

重要

最新の Linux ディストリビューションは nconnectを完全にサポートしていますが、カーネルが Azure nconnect サポートを持っている場合にのみ、このオプションを使用します。 Azure nconnect サポートなしで nconnect マウント オプションを使用すると、スループットが低下し、複数のタイムアウトが発生し、READDIRREADIRPLUSなどのコマンドが正しく動作しません。

Azure nconnect のサポートは、Azure VM で使用できる最新の Ubuntu カーネルのほとんどで利用できます。 カーネルで Azure nconnect サポートが利用できるかどうかを確認するには、次のコマンドを実行します。

[ -e /sys/module/sunrpc/parameters/enable_azure_nconnect ] && echo "Yes" || echo "No"

カーネルに対して Azure nconnect サポートが使用可能な場合は、 Yes がコンソールに出力されます。 それ以外の場合は、 No がコンソールに出力されます。

Azure nconnect サポートが利用可能な場合は、次のコマンドを実行して有効にします。

echo Y > /sys/module/sunrpc/parameters/enable_azure_nconnect

その他のベスト プラクティス

  • 十分なネットワーク帯域幅を持つ VM を使用します。
  • ワークロードで許可されている場合は、複数のマウント ポイントを使用します。
  • できるだけ多くのスレッドを使用します。
  • 大きなブロックサイズを使用します。
  • ネットワーク待ち時間を短縮するために、ストレージ アカウントと同じリージョンにあるクライアントからストレージ要求を行います。