パフォーマンスの最適化

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

始める前に

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

音量設定を調整する

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

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

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

  • 手動 QoS プールを使用してスループットを増やす: スループット要件が低い大容量の割り当てスループットを減らし、パフォーマンスを向上させる必要がある小容量のスループットを、使用可能なプール スループットまで増やすことができます。

ボリューム容量の増加とサービスレベルのアップグレードは、ボリュームで処理中の I/O ワークロードを中断することなく、ボリュームへのアクセスに影響することもありません。

クライアントを調整する

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

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

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

  • 複数の TCP セッションを開く: アプリケーションで高いスループットが必要な場合、通常の NFS セッションと SMB セッションの基盤となる単一の伝送制御プロトコル(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 Volumes に接続する単一プロジェクト内のすべての 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 ベースのクライアントの場合、クライアントは SMB マルチチャネルと受信側スケーリング(RSS)を使用して、複数の TCP 接続を開くことができます。この構成を実現するには、仮想マシンに RSS をサポートするネットワーク アダプタが割り当てられている必要があります。RSS は 4 または 8 の値に設定することをおすすめしますが、1 より大きい値であればスループットは向上します。

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

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

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

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

    • 6 TiB のワーキング セット

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

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

手動 QoS

NetApp Volumes の手動サービス品質(QoS)を使用すると、ワークロードの要件を満たすようにボリュームのパフォーマンスを調整し、ストレージ費用を制御できます。

手動 QoS には次の利点があります。

  • 費用の最適化: ストレージ プール容量内でボリューム パフォーマンスをスケーリングして、クラウド費用を最適化します。

  • スループットの即時調整: ダウンタイムなしでボリューム スループットを調整します。

  • 障害復旧コストの削減: 複製されたボリュームの QoS を下げて、宛先プールの障害復旧コストを削減します。

  • クローンまたはキャッシュのパフォーマンスの向上: 割り当てサイズが小さいクローンまたはキャッシュ ボリュームのパフォーマンスを向上させます。

  • 柔軟なワークロード管理: より大きなストレージ プールを複数のワークロードのコンテナとして使用し、必要に応じて各ボリュームのスループットを調整します。

考慮事項

  • 手動 QoS は、Google Cloud CLI、NetApp Volumes API、または Terraform を使用して管理できます。 Google Cloud コンソールはサポートされていません。

  • 手動 QoS は Standard、Premium、Extreme の各サービスレベルでサポートされていますが、Flex サービスレベルでは使用できません。

QoS の上限を手動で設定する

手動 QoS ストレージ プール内のボリュームでは、スループットと容量を個別に設定できます。手動 QoS プール内のすべてのボリュームの全体的なスループットは、プールの合計スループットによって制限されます。プールのスループットは、割り当てられた容量とサービスレベルによって決まります。たとえば、40 TiB の Premium プールは、1 TiB あたり 64 MiBps で最大 2,560 MiBps のスループットを実現できます。一方、200 TiB の Extreme プールは、合計スループットが 25,600 MiBps のボリュームをサポートできます。

手動 QoS プールを設定したら、そのプール内の各ボリュームに必要なスループット上限を設定できます。単一ボリュームの最大スループットの上限は 4.5 GiBps です。大容量ボリュームの場合は 30 GiBps です。

プールとボリュームのコマンドまたは API には、プールの使用可能なスループット値と割り当てられたスループット値が表示されます。これにより、合計スループットを管理できます。手動 QoS プールを作成してボリューム スループットを定義するには、ストレージ プールを作成するボリュームを作成するをご覧ください。

ストレージ プールの作成

gcloud

手動 QoS を使用してストレージ プールを作成します。

    gcloud netapp storage-pools create POOL_NAME \
       --project=PROJECT_ID \
       --location=LOCATION \
       --capacity=CAPACITY \
       --service-level=SERVICE_LEVEL \
       --qos-type=QOS_TYPE \
       --network=name=NETWORK_NAME

次の情報を置き換えます。

  • POOL_NAME: 作成するプールの名前。プール名はロケーションごとに一意である必要があります。

  • PROJECT_ID: ストレージ プールを作成するプロジェクトの名前。

  • LOCATION: 作成するプールのロケーション。

  • CAPACITY: プールの容量(GiB 単位)。

  • SERVICE_LEVEL: ストレージ プールのサービスレベル(Standard、Premium、Extreme)。

  • QOS_TYPE: ストレージ プールの QoS タイプ(auto または manual)。

  • NETWORK_NAME: VPC の名前。

ストレージ プールを編集する

gcloud

手動 QoS を使用するように、既存の自動 QoS ストレージ プールを編集します。

    gcloud netapp storage-pools update POOL_NAME \
       --project=PROJECT_ID \
       --location=LOCATION \
       --qos-type=QOS_TYPE

次の情報を置き換えます。

  • POOL_NAME: 更新するプールの名前。

  • PROJECT_ID: プロジェクトの名前。

  • LOCATION: プールのロケーション。

  • QOS_TYPE: ストレージ プールの更新された QoS タイプ。手動構成のみがサポートされています。

ボリュームを作成

gcloud

次のコマンドを使用して、指定した手動 QoS スループット上限でボリュームを作成します。

gcloud netapp volumes create VOLUME_NAME \
  --project=PROJECT_ID \
  --location=LOCATION \
  --storage-pool=STORAGE_POOL \
  --capacity=CAPACITY \
  --protocols=PROTOCOLS \
  --share-name=SHARE_NAME \
  --throughput-mibps=THROUGHPUT_MIBPS

次の情報を置き換えます。

  • VOLUME_NAME: ボリュームの名前。この名前は、ロケーションごとに一意である必要があります。

  • PROJECT_ID: ボリュームを作成するプロジェクトの名前。

  • LOCATION: ボリュームのロケーション。

  • STORAGE_POOL: ボリュームを作成するストレージ プール。

  • CAPACITY: ボリュームの容量。これは、NAS クライアントに表示される容量を定義します。

  • PROTOCOLS: ボリュームのエクスポートに使用する NAS プロトコルを選択します。有効な選択肢は、NFSv3、NFSv4、SMB、および次の組み合わせです。

    • nfsv3,nfsv4
    • nfsv3,smb
    • nfsv4,smb

    選択したプロトコル タイプに応じて、export-policysmb-settings などのプロトコル固有のパラメータを追加することをおすすめします。

  • SHARE_NAME: ボリュームの NFS エクスポート パスまたは SMB 共有名。

  • THROUGHPUT_MIBPS: ボリュームのスループット上限(MiBps)。

その他のオプションのフラグの詳細については、ボリューム作成に関する Google Cloud SDK のドキュメントをご覧ください。

次のステップ

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