Google Cloud CLI を使用して Rapid Bucket のゾーンバケットからオブジェクトを読み取ると、CLI は使用可能なシステム リソースに基づいてデフォルトの同時実行とスライス構成を自動的に適用します。
このドキュメントでは、これらのデフォルト構成について説明し、同時実行、プロセス スケーリング、NIC 分離などのオプトイン機能を構成して、特定のワークロードの gcloud CLI のパフォーマンスを調整する方法について説明します。
パフォーマンス設定を調整する前に、ゾーンバケットを作成する必要があります。Hyperdisk やローカル SSD などのアタッチされたストレージ ボリュームにオブジェクトをダウンロードする場合は、環境でボリュームをフォーマットしてマウントします。gcloud CLI を使用する代わりに、ゾーンバケットをファイル システムとしてマウントする場合は、Rapid Bucket の Cloud Storage FUSE のパフォーマンスをご覧ください。一般的なスライス コンセプトについては、スライスされたオブジェクトのダウンロードをご覧ください。
デフォルトの同時実行とスライス構成
このセクションで説明するデフォルト構成は、gcloud CLI バージョン 583.0.0 以降を使用して Rapid Bucket のゾーンバケットからオブジェクトを読み取る場合にのみ適用されます。標準の Cloud Storage バケットの場合、gcloud CLI は独自のデフォルトの同時実行設定を適用します。
ゾーン バケットの場合、gcloud CLI は、使用可能な仮想 CPU(vCPU)コアの数と、単一のオブジェクトをダウンロードするか複数のオブジェクトをダウンロードするかに基づいて、デフォルトの同時実行パラメータとスライス パラメータを自動的に設定します。これらのデフォルトでは、次のプロパティが構成されます。
- プロセス数:
storage/process_count - スレッド数:
storage/thread_count - スライシングのしきい値:
storage/sliced_object_download_threshold - 最大コンポーネント数:
storage/sliced_object_download_max_components - コンポーネント サイズ:
storage/sliced_object_download_component_size
以降のセクションでは、単一オブジェクトと複数オブジェクトのダウンロードのデフォルト値を示します。
単一オブジェクトのダウンロード
単一のオブジェクトをダウンロードすると、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 |
同時実行とスライシングのプロパティを構成する
カスタム チューニング設定を構成して適用するには、次の操作を行います。
Google Cloud CLI をバージョン 583.0.0 以降にインストールまたは更新します。
開発環境で、
gcloud config configurations createコマンドを実行して、構成プロファイルを作成して有効にします。gcloud config configurations create CONFIGURATION_NAME
CONFIGURATION_NAMEは、構成プロファイルの名前(rapid-perfなど)に置き換えます。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など)。
これらのプロパティの詳細については、チューニングの推奨事項をご覧ください。
オブジェクトをローカル ストレージ パスにダウンロードするには、
gcloud storage cpコマンドを実行します。gcloud storage cp -r gs://BUCKET_NAME/SOURCE_PATH LOCAL_DESTINATION_PATH
次のように置き換えます。
BUCKET_NAME: ゾーンバケットの名前。SOURCE_PATH: バケット内のソース ディレクトリまたはオブジェクト パス。LOCAL_DESTINATION_PATH: ローカル ディレクトリ パス(./data/など)またはローカル ストレージ ボリュームのマウント ポイント(/mnt/hyperdisk/data/など)。
チューニングに関する推奨事項
次の推奨事項を使用して、ワークロードの同時実行、スライス、システム リソースを調整します。
プロセス数
使用可能な CPU コアに基づいて並列ワーカー プロセスをスケーリングするには、storage/process_count プロパティを設定します。プロセス数を使用可能な CPU コアの最大 80% に制限します。
storage/process_count = min(target_cores, 0.8 * available_cores)
ここで
target_cores: 転送に割り当てる CPU コアまたはワーカー プロセスの数(64など)。available_cores: マシンで使用可能な仮想 CPU(vCPU)の合計数(たとえば、Linux でnprocを実行して取得します)。
たとえば、80 個以上の vCPU を備えたマシンで 64 個のワーカー プロセスをターゲットにする場合は、storage/process_count を 64 に設定します。vCPU が 80 個未満のマシンでは、storage/process_count を使用可能な vCPU の 80% に設定します(たとえば、64 個の vCPU を備えた VM では 51)。
スレッド数
storage/thread_count プロパティを設定して、ワーカー プロセスあたりのスレッド数を制御します。vCPU が 48 個以上のマシンでは、storage/thread_count を 1 に設定します。
各ワーカー プロセスを 48 個以上の vCPU を搭載したマシンの単一スレッドに制限すると、Python グローバル インタープリタ ロック(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 MiB と max_components=16 を使用して 100 GiB のオブジェクトをダウンロードすると、それぞれ 6.25 GiB の 16 個のスライスが生成されます。
gcloud CLI は、合計ワーカー容量(storage/process_count × storage/thread_count)に基づいて、各スライスを個別に並行してダウンロードします。
ワーカーの飽和
転送全体でワーカーの使用率を高く維持するには、プロセス数、スレッド数、コンポーネント サイズ、最大コンポーネント数を調整する必要があります。これらの調整により、一般的な転送で、ワーカーの合計容量以上の合計スライスが生成されます。
Total slices across all objects >= storage/process_count * storage/thread_count
たとえば、64 個のワーカー プロセス(process_count=64 と thread_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 個のスライス)が生成され、64 個のワーカー プロセスがすべて完全に使用されます。一方、512 MiB オブジェクトでcomponent_size=128 MiBを使用すると、オブジェクトあたり 4 スライス(合計 16 スライス)のみが生成され、48 個のワーカー プロセスがアイドル状態になります。
NIC の分離
16 個を超える CPU コアを持つ Linux マシンでは、storage/use_nic_isolation プロパティを True に設定することで、ネットワーク インターフェース カード(NIC)の分離を有効にできます。
gcloud config set storage/use_nic_isolation True
このプロパティを有効にすると、gcloud CLI は CPU アフィニティ(os.sched_setaffinity())を設定します。この構成では、CPU コアの 10% がネットワーク ハードウェア割り込みリクエスト(IRQ)用に分離され、残りのコアがデータ処理用に予約されます。