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/など)。
チューニングに関する推奨事項
次の推奨事項を使用して、ワークロードの同時実行、スライス、システム リソースを調整します。
プロセス数
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を実行するなど)。
たとえば、80 個以上の vCPU を備えたマシンで 64 個のワーカー プロセスをターゲットとする場合は、storage/process_count を 64 に設定します。vCPU が 80 個未満のマシンでは、storage/process_count を使用可能な vCPU の 80% に設定します(たとえば、64 vCPU VM の場合は 51)。
スレッド数
storage/thread_count プロパティを設定して、ワーカー プロセスあたりのスレッド数を制御します。48 個以上の vCPU を搭載したマシンでは、storage/thread_count を 1 に設定します。
48 個以上の vCPU を搭載したマシンで各ワーカー プロセスを 1 つのスレッドに制限すると、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)用に分離され、残りのコアがデータ処理用に予約されます。
次のステップ
- Rapid Bucket の詳細。
- ゾーンバケットを作成する。
- ゾーンバケット内のオブジェクトの読み取りと追加。
- Cloud Storage の直接接続について理解する。
- スライス化されたオブジェクトのダウンロードについて理解する。
- Rapid Bucket の Cloud Storage FUSE のパフォーマンスを調整する。
- gcloud CLI のプロパティを管理する。