ゾーンバケットの gcloud CLI のパフォーマンスを調整する

Google Cloud CLIRapid Bucket のゾーンバケットからオブジェクトを読み取ると、利用可能なシステム リソースに基づいて、デフォルトの同時実行とスライス 構成が自動的に適用されます。

このページでは、これらのデフォルト構成について説明し、gcloud CLI を使用して同時実行、プロセス スケーリング、オプトイン機能(NIC 分離など)をさらに調整し、特定のワークロードのパフォーマンスを向上させる方法について説明します。ゾーンバケットをファイルシステムとしてマウントする際のパフォーマンスの調整については、 Rapid Bucket の Cloud Storage FUSE のパフォーマンスをご覧ください。

パフォーマンス設定を構成する前に、 ゾーンバケットを作成していることを確認してください。オブジェクトを接続された ストレージ ボリューム(Hyperdisk やローカル SSD など)にダウンロードする場合は、環境内でボリュームをフォーマットしてマウントしてください。一般的な スライスコンセプトについては、スライス化されたオブジェクトのダウンロードをご覧ください。

デフォルトの同時実行とスライス構成

このセクションのデフォルト構成は、gcloud CLI バージョン 583.0.0 以降を使用して Rapid Bucket のゾーンバケットからオブジェクトを読み取る場合にのみ適用されます。標準の Cloud Storage バケットの場合、gcloud CLI は独自のデフォルトの同時実行設定を適用します。

ゾーンバケットの場合、gcloud CLI は、利用可能な仮想 CPU(vCPU)コアの数と、単一オブジェクトをダウンロードするか、複数のオブジェクトをダウンロードするかに基づいて、デフォルトの同時実行パラメータとスライスパラメータを自動的に設定します。次の表に、これらのプロパティのデフォルト値を示します。

単一オブジェクトのダウンロード

単一オブジェクトをダウンロードする場合、gcloud CLI は次のデフォルトを適用します。

利用可能な vCPU 数 プロセス数 スレッド数 スライスのしきい値 最大コンポーネント数 コンポーネント サイズ
≥ 8 8 2 50 MiB 16 5 MiB
< 8 4 2 50 MiB 8 5 MiB

マルチオブジェクトのダウンロード

複数のオブジェクトを同時にダウンロードする場合、gcloud CLI は次のデフォルトを適用します。

利用可能な vCPU 数 プロセス数 スレッド数 スライスのしきい値 最大コンポーネント数 コンポーネント サイズ
≥ 48 min(96, available_cores * 0.75) 1 10 MiB 5 5 MiB
4 to 47 16 4 10 MiB 10 5 MiB
< 4 2 10 50 MiB 10 5 MiB

同時実行とスライス構成を調整する

このセクションでは、gcloud CLI を使用して同時実行とスライス設定を構成する方法について説明し、一般的なハードウェア環境の推奨値を示します。

構成を適用する方法

カスタム チューニング設定を構成して適用するには、次の手順を完了します。

  1. Google Cloud CLI をバージョン 583.0.0 以降にインストールまたは更新します。

  2. 開発環境で gcloud config configurations create コマンドを実行して、 構成プロファイルを作成して有効にします。

    gcloud config configurations create CONFIGURATION_NAME

    CONFIGURATION_NAME は、構成プロファイルの名前(rapid-perf など)に置き換えます。

  3. gcloud config set コマンドを実行して、同時実行と スライス プロパティを構成します。

    gcloud config set storage/thread_count THREAD_COUNT
    gcloud config set storage/process_count PROCESS_COUNT
    gcloud config set storage/sliced_object_download_threshold THRESHOLD_SIZE
    gcloud config set storage/sliced_object_download_component_size COMPONENT_SIZE
    gcloud config set storage/sliced_object_download_max_components MAX_COMPONENTS

    プレースホルダは、ワークロードに適した値に置き換えます。

    • THREAD_COUNT: ワーカー プロセスあたりのスレッド数(1 など)。
    • PROCESS_COUNT: ワーカー プロセスの数(64 など)。
    • THRESHOLD_SIZE: スライスをトリガーする最小オブジェクト サイズのしきい値(マルチギガバイトのワークロードの場合は 128 MiB、小さいオブジェクトの場合は 32 MiB など)。
    • COMPONENT_SIZE: 各ダウンロード スライスのターゲット サイズ(マルチギガバイトのワークロードの場合は 128 MiB、小さいオブジェクトの場合は 32 MiB など)。
    • MAX_COMPONENTS: オブジェクトあたりのスライス コンポーネントの最大数(16 など)。

    これらのプロパティの詳細については、チューニングに関する推奨事項をご覧ください。

  4. gcloud storage cp コマンドを実行して、オブジェクトをローカル ストレージ パスにダウンロードします。

    gcloud storage cp -r gs://BUCKET_NAME/SOURCE_PATH/ /DESTINATION_PATH/

    次のように置き換えます。

    • BUCKET_NAME: ゾーンバケットの名前。
    • SOURCE_PATH: バケット内のソース ディレクトリまたはオブジェクト パス。
    • DESTINATION_PATH: ローカル ディレクトリ パス(./data/ など)またはローカル ストレージ ボリュームのマウント ポイント(/mnt/hyperdisk/data/ など)。

チューニングに関する推奨事項

前の手順のプレースホルダに適切な値を選択するには、次のガイドラインを確認してください。

プロセス数

storage/process_count プロパティを設定して、利用可能な CPU コアに基づいて並列ワーカー プロセスをスケーリングします。プロセス数は、利用可能な CPU コアの最大 80% に制限します。

storage/process_count = min(target_cores, 0.8 * available_cores)

ここで

  • target_cores: 転送に割り当てる CPU コアまたはワーカー プロセスの数(64 など)。
  • available_cores: マシンで使用可能な仮想 CPU(vCPU)の合計数(Linux で nproc を実行するなど)。

たとえば、ターゲットが 64 個のワーカー プロセスの場合、80 個以上の vCPU を搭載したマシンでは storage/process_count64 に設定できます。vCPU が 80 個未満のマシンでは、storage/process_count を利用可能なコアの 80% に設定します(たとえば、64 vCPU VM の場合は 51)。

スレッド数

storage/thread_count プロパティを設定して、ワーカー プロセスあたりのスレッド数 を制御します。48 個以上の vCPU を搭載したマシンでは、storage/thread_count1 に設定します。

高コア マシンで各ワーカー プロセスを単一のスレッドに制限すると、Python Global Interpreter Lock(GIL)と gRPC スレッドの競合を減らすことができます。

スライスのしきい値

storage/sliced_object_download_threshold プロパティを設定して、スライスされたダウンロードをトリガーするために必要な最小オブジェクト サイズを指定します。

storage/sliced_object_download_threshold は、storage/sliced_object_download_component_size 以上の値に設定することをおすすめします。

オブジェクトあたりのスライス数

storage/sliced_object_download_component_size プロパティと storage/sliced_object_download_max_components プロパティを設定して、 オブジェクトごとに生成される並列スライスの数を制御します。gcloud CLI は、次の式を使用してオブジェクトあたりのスライス数を計算します。

Slices per object = min(object_size / component_size, max_components)

オブジェクトが十分に大きく、component_size 値でスライスすると max_components 値を超える場合、gcloud CLI は component_size 値を無視し、オブジェクトを max_components スライスに均等に分割します。たとえば、component_size=128 MiBmax_components=16 で 100 GiB のオブジェクトをダウンロードすると、それぞれ 6.25 GiB の 16 個のスライスが生成されます。

各スライスは、ワーカーの合計容量(storage/process_count × storage/thread_count)に基づいて、独立して並行してダウンロードされます。

ワーカーの飽和状態

転送全体でワーカーの使用率を高く維持するには、プロセス数、スレッド数、コンポーネント サイズ、最大コンポーネント数を調整して、一般的な転送でワーカーの合計容量以上のスライスが生成されるようにします。

Total slices across all objects >= storage/process_count * storage/thread_count

たとえば、64 個のワーカー プロセス(process_count=64thread_count=1)を使用して 4 つのオブジェクトをダウンロードすることを考えてみましょう。

  • 4 つの 2 GiB オブジェクト: component_size=128 MiB を設定すると、オブジェクトごとに 16 個のスライスが生成され(4 × 16 = 64 スライス)、64 個のワーカー プロセスすべてが完全に使用されます。
  • 4 つの 512 MiB オブジェクト: component_size=32 MiB を設定すると、オブジェクトごとに 16 個のスライスが生成されます(4 × 16 = 64 スライス)。一方、512 MiB オブジェクトで component_size=128 MiB を使用すると、オブジェクトごとに 4 つのスライス(合計 16 スライス)しか生成されず、48 個のワーカー プロセスがアイドル状態になります。

NIC 分離

16 個を超える CPU コアを搭載した Linux マシンでは、ネットワーク インターフェース カード(NIC)の分離を有効にするには、storage/use_nic_isolation プロパティTrue に設定します。

gcloud config set storage/use_nic_isolation True

このプロパティを有効にすると、gcloud CLI は CPU アフィニティ(os.sched_setaffinity())を設定します。この構成では、ネットワーク ハードウェア割り込みリクエスト(IRQ)用に CPU コアの 10% が分離され、残りのコアはデータ処理用に予約されます。

次のステップ