次の方法で共有


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

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

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

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

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

標準パフォーマンス

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

優れた性能

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

すべてのアプリケーションで、クライアントを追加してスケールアップできるわけではありません。 これらのアプリケーションの場合、 Azure Premium ブロック BLOB ストレージ アカウント では、一貫した低待機時間と高いトランザクションレートが提供されます。 Premium ブロック BLOB ストレージ アカウントは、スレッドとクライアントの数が少ない最大帯域幅に達する可能性があります。 たとえば、単一のクライアントでは、Premium ブロック BLOB ストレージ アカウントは、Standard パフォーマンス汎用 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 ストレージ アカウントには適していません。

待機時間の影響を受けやすいアプリケーション用に 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 仮想マシンで使用できる最新の 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 を使用します。

  • ワークロードで許可されている場合は、複数のマウント ポイントを使用します。

  • できるだけ多くのスレッドを使用します。

  • 大きなブロックサイズを使用します。

  • ストレージ アカウントと同じリージョンにあるクライアントからストレージ要求を行います。 これにより、ネットワーク待ち時間が短縮されます。

次のステップ