针对区域存储桶调整 gcloud CLI 性能

当您使用 Google Cloud CLI 从 Rapid Bucket 中的可用区级存储桶读取对象时,CLI 会根据可用的系统资源自动应用默认并发和切片配置。

本文档介绍了这些默认配置,并说明了如何通过配置并发、进程伸缩和选择启用功能(例如 NIC 隔离)来针对特定工作负载调整 gcloud CLI 性能。

在调整性能设置之前,您必须先创建可用区级存储桶。如果您将对象下载到挂接的存储卷(例如 Hyperdisk 或本地固态硬盘),请在您的环境中格式化并装载该卷。如果您计划将可用区级存储桶装载为文件系统,而不是使用 gcloud CLI,请参阅 Rapid Bucket 的 Cloud Storage FUSE 性能。如需了解一般切片概念,请参阅切片对象下载。

默认并发和切片配置

本部分中介绍的默认配置专门适用于您使用 gcloud CLI 583.0.0 版或更高版本从快速存储桶中的可用区级存储桶读取对象的情况。对于标准 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

配置并发和切片属性

如需配置和应用自定义调优设置,请完成以下步骤:

  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:触发切片的最小对象大小阈值,例如,对于多 GB 工作负载,该值为 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:可用区级存储桶的名称。
    • 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 虚拟机上设置为 51)。

线程数量

设置 storage/thread_count 属性,以控制每个工作器进程的线程数。在具有 48 个或更多 vCPU 的机器上,将 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 的对象会产生 16 个切片,每个切片 6.25 GiB。

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 个工作器进程。
  • 四个 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())。此配置会隔离 10% 的 CPU 核心,用于网络硬件中断请求 (IRQ),并预留剩余的核心用于数据处理。

后续步骤