パフォーマンスの最適化

このページでは、Google Cloud NetApp Volumes のパフォーマンスを最適化する方法について説明します。

始める前に

パフォーマンスを最適化するためにボリュームを変更する前に、パフォーマンスに関する考慮事項を確認してください。

音量設定を調整する

次の音量設定を調整することで、パフォーマンスを最適化できます。

  • ボリュームの容量を増やす: Premium、Extreme、または Standard のサービスレベルのボリュームの容量を増やすと、達成可能なボリューム スループットを向上させることができます。Flex サービスレベルのボリュームの場合は、代わりにストレージ プールの容量を増やします。

  • サービスレベルをアップグレードする: プレミアム サービスレベルのボリュームをエクストリーム サービスレベルにアップグレードすると、スループットを改善できます。ボリュームは、異なるサービスレベルの別のストレージ プールに割り当てることをおすすめします。

ボリューム容量の増加とサービスレベルのアップグレードはどちらも、ボリュームで処理中の I/O ワークロードを中断せず、ボリュームへのアクセスに影響しません。

クライアントを調整する

クライアントで次の設定を調整すると、パフォーマンスを改善できます。

  • クライアントを同じ場所に配置する: レイテンシの結果は、クライアントの機能と場所に直接影響されます。最適な結果を得るには、クライアントをボリュームと同じリージョンに配置するか、できるだけ近いリージョンに配置します。各ゾーンのクライアントからのレイテンシをテストしてゾーンへの影響をテストし、レイテンシが最も低いゾーンを使用します。

  • Compute Engine ネットワーク帯域幅を構成する: Compute Engine 仮想マシンのネットワーク機能は、使用されるインスタンスタイプによって異なります。通常、インスタンスのサイズが大きいほど、ネットワーク スループットを増やすことができます。適切なネットワーク帯域幅機能を備えたクライアント仮想マシンを選択し、Google Virtual NIC(gVNIC)ネットワーク インターフェースを選択して、Tier_1 パフォーマンスを有効にすることをおすすめします。詳細については、ネットワーク帯域幅に関する Compute Engine のドキュメントをご覧ください。

  • 複数の TCP セッションを開く: アプリケーションで高いスループットが必要な場合、通常の NFS セッションと SMB セッションの基盤となる単一の Transmission Control Protocol(TCP)セッションが最終的に飽和状態になる可能性があります。このような場合は、NFS 接続と SMB 接続で使用する TCP セッションの数を増やします。

    クライアントの種類に応じて、次のいずれかのタブを使用してクライアントを調整します。

    Linux

    従来、NFS クライアントは、ストレージ エンドポイントを共有する NFS マウント ファイル システムすべてに対して単一の TCP セッションを使用します。nconnect マウント オプションを使用すると、サポートされている TCP セッションの数を最大 16 に増やすことができます。

    nconnect を最大限に活用できるように Linux クライアント タイプを調整するには、次のベスト プラクティスをおすすめします。

    • nconnect を使用して TCP セッション数を増やす: TCP セッションを追加するたびに、128 件の保留中リクエストのキューが増え、同時実行性が向上します。

    • sunrpc.max_tcp_slot_table_entries パラメータを設定する: sunrpc.max_tcp_slot_table_entries は、パフォーマンスを制御するために変更できる接続レベルの調整パラメータです。sunrpc.max_tpc_slot_table_enteries は 128 リクエストまたは接続あたりに設定し、NetApp ボリュームに接続する単一プロジェクト内のすべての NFS クライアントで 10,000 スロットを超えないようにすることをおすすめします。sunrpc.max_tcp_slot_table_entries パラメータを設定するには、パラメータを /etc/sysctl.conf ファイルに追加し、sysctl -p コマンドを使用してパラメータ ファイルを再読み込みします。

    • セッションあたりの最大サポート値を 180 に調整する: NFSv3 とは異なり、NFSv4.1 クライアントはセッションでクライアントとサーバーの関係を定義します。NetApp Volumes は NFSv3 を使用して接続あたり最大 128 個の未処理リクエストをサポートしますが、NFSv4.1 はセッションあたり 180 個の未処理リクエストに制限されています。Linux NFSv4.1 クライアントのデフォルトはセッションあたり 64 max_session_slots ですが、必要に応じてこの値を調整できます。セッションあたりのサポートされている最大値を 180 に変更することをおすすめします。

      max_session_slots をチューニングするには、/etc/modprobe.d に構成ファイルを作成します。インラインに引用符(" ")がないことを確認します。有効にしないと、このオプションは適用されません。

      $ echo "options nfs max_session_slots=180" > /etc/modprobe/d/nfsclient/conf
      $ reboot
      
      Use the systool -v -m nfs command to see the current maximum in use
      by the client. For the command to work, at least one NFSv4.1 mount
      must be in place.
      
      $ systool -v -v nfs
      {
      Module = "nfs"
      
      Parameters:
      
      Max_session_slots = "63" <-
      
      }
      

    次の NFS nconnect の比較グラフは、nconnect 構成の使用が NFS ワークロードに与える影響を示しています。この情報は、次の設定で Fio を使用してキャプチャされました。

    • 100% 読み取りワークロード

    • 単一ボリュームに対する 8 KiB のブロックサイズ

    • Red Hat 9 OS を使用する n2-standard-32 仮想マシン

    • 6 TiB ワーキング セット

    nconnect 値を 16 にすると、有効にしていない場合と比べてパフォーマンスが 5 倍向上しました。

    8 KiB のブロックサイズで単一の Red Hat 9 仮想マシンを使用した NFS nconnect の比較。

    Windows

    Windows ベースのクライアントの場合、クライアントは受信側スケーリング(RSS)で SMB マルチチャネルを使用して複数の TCP 接続を開くことができます。この構成を実現するには、仮想マシンに RSS をサポートするネットワーク アダプタが割り当てられている必要があります。RSS は 4 または 8 に設定することをおすすめしますが、1 より大きい値に設定するとスループットが向上します。

    次のグラフは、RSS 構成を使用すると SMB ワークロードにどのような影響があるかを示しています。この情報は、次の設定で Fio を使用してキャプチャされました。

    • 100% 読み取りワークロード

    • 単一ボリュームに対する 8 KiB のブロックサイズ

    • Windows 2022 OS を実行する単一の n2-standard-32 仮想マシン

    • 6 TiB ワーキング セット

    テスト実行間で SMB クライアント RSS オプションのみを変更して、8 つのジョブを実行しました。RSS 値を 4、8、16 にすると、値を 1 にした場合と比較してパフォーマンスが 2 倍になりました。各 RSS インスタンスは、numjobs パラメータが 8 の状態で 9 回実行されました。最大スループットに達するまで、iodepth パラメータは実行ごとに 5 ずつ増加しました。

    8 KiB のブロックサイズの単一の Windows 2022 VM の SMB RSS の比較

次のステップ

ストレージ プールについて確認する。