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 Storage アカウントのスケーラビリティとパフォーマンスのターゲット」を参照してください。

次のグラフは、クライアントを追加すると帯域幅がどのように増加するかを示したものです。 このグラフでは、クライアントは仮想マシン (VM) であり、Standard 汎用 v2 ストレージ アカウントを使用しています。

Standard パフォーマンス

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

Premium パフォーマンス

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

クライアントを追加することにより、すべてのアプリケーションをスケールアップできるわけではありません。 そのようなアプリケーションの場合は、Azure Premium ブロック BLOB ストレージ アカウントを使用することで、低遅延と高トランザクション レートが一貫して提供されます。 Premium ブロック BLOB ストレージ アカウントは、より少ないスレッドとクライアントで最大帯域幅に到達できます。 たとえば、クライアントが 1 つの場合、Standard パフォーマンスの汎用 v2 ストレージ アカウントで使用される同じセットアップと比較して、Premium ブロック BLOB ストレージ アカウントでは 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 マウント オプションを使用すると、1 つの VM から集計読み取りと書き込みのより高いパフォーマンスを得ることができますが、これはLinux カーネルに Azure nconnect サポートがある場合のみです。

nconnect は、クライアントと Blob service エンドポイントの間で複数の TCP 接続を使用できるようにする、クライアント側の Linux マウント オプションです。 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 を使用します。

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

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

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

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

次のステップ