調整 gcloud CLI 區域儲存空間的效能

使用 Google Cloud CLIRapid Bucket 的區域值區讀取物件時,CLI 會根據可用的系統資源,自動套用預設的並行和切片設定。

本文將說明這些預設設定,並說明如何設定並行、程序擴充和選擇性功能 (例如 NIC 隔離),針對特定工作負載調整 gcloud CLI 效能。

調整效能設定前,請務必建立區域值區。如果將物件下載至附加的儲存空間磁碟區 (例如 Hyperdisk 或本機 SSD),請格式化並掛接環境中的磁碟區。如果您打算掛接區域 bucket 做為檔案系統,而非使用 gcloud CLI,請參閱「Rapid Bucket 的 Cloud Storage FUSE 效能」。如要瞭解一般切片概念,請參閱「下載切片物件」。

預設並行和切片設定

本節所述的預設設定,特別適用於使用 gcloud CLI 583.0.0 以上版本,從 Rapid Bucket 的區域 bucket 讀取物件時。如果是標準 Cloud Storage bucket,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

設定並行和切片屬性

如要設定及套用自訂微調設定,請完成下列步驟:

  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:每個 worker 程序中的執行緒數量,例如 1
    • PROCESS_COUNT:worker 程序數量,例如 64
    • THRESHOLD_SIZE:觸發切片的最小物件大小閾值,例如多位元組工作負載的 128 MiB (或較小物件的 32 MiB)。
    • COMPONENT_SIZE:每個下載片段的目標大小,例如多 GB 工作負載的 128 MiB (或較小物件的 32 MiB)。
    • MAX_COMPONENTS:每個物件的切片元件數量上限,例如 16

    如要進一步瞭解這些屬性,請參閱「微調建議」。

  4. 如要將物件下載至本機儲存路徑,請執行 gcloud storage cp 指令:

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

    更改下列內容:

    • BUCKET_NAME:區域 bucket 的名稱。
    • 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 為 51)。

執行緒數量

設定 storage/thread_count 屬性,即可控管每個工作站程序的執行緒數量。在具有 48 個以上 vCPU 的機器上,請將 storage/thread_count 設為 1

在 vCPU 數量達 48 個以上的機器上,將每個工作站程序限制為單一執行緒,可減少 Python 全域解譯器鎖定 (GIL) 和 gRPC 執行緒的爭用情形。

切片門檻

設定 storage/sliced_object_download_threshold 屬性,指定觸發切片下載所需的最小物件大小。

建議將 storage/sliced_object_download_threshold 設為大於或等於 storage/sliced_object_download_component_size 的值。

每個物件的切片數

設定 storage/sliced_object_download_component_sizestorage/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 物件時,會產生 16 個切片,每個切片為 6.25 GiB。

gcloud CLI 會根據總工作人員容量 (storage/process_count × storage/thread_count),獨立且平行下載每個切片。

Worker 飽和度

如要在整個轉移過程中維持高工作站使用率,您必須調整程序計數、執行緒計數、元件大小和元件上限。這些調整可確保一般轉移作業產生的總切片數,足以達到或超過總工作人員容量:

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

舉例來說,假設您使用 64 個工作程序 (process_count=64thread_count=1) 下載四個物件:

  • 四個 2 GiB 物件:設定 component_size=128 MiB 會為每個物件產生 16 個切片 (4 × 16 = 64 個切片),充分運用所有 64 個工作程序。
  • 四個 512 MiB 物件:設定 component_size=32 MiB 會為每個物件產生 16 個切片 (4 × 16 = 64 個切片),充分運用所有 64 個工作程序。相較之下,在 512 MiB 物件上使用 component_size=128 MiB 時,每個物件只會產生 4 個切片 (總共 16 個切片),導致 48 個工作程序閒置。

NIC 隔離

在 CPU 核心超過 16 個的 Linux 機器上,您可以將 storage/use_nic_isolation 屬性設為 True,啟用網路介面卡 (NIC) 隔離功能:

gcloud config set storage/use_nic_isolation True

啟用這項屬性後,gcloud CLI 會設定 CPU 親和性 (os.sched_setaffinity())。這項設定會將 10% 的 CPU 核心隔離,用於網路硬體中斷要求 (IRQ),並保留其餘核心用於資料處理。

後續步驟