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

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

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

在调整性能设置之前,您必须创建区域级存储桶。如果您将对象下载到附加的存储卷(例如 Hyperdisk 或本地 SSD),请在您的环境中格式化并装载该卷。如果您计划将地区级 Rapid Bucket 装载为文件系统,而不是使用 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:每个下载切片的目标大小,例如对于多千兆字节的工作负载,该值为 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_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)独立并行下载每个切片。

工作器饱和度

为了在整个传输过程中保持较高的工作器利用率,您必须调整进程数、线程数、组件大小和最大组件数。这些调整可确保典型转移生成足够的总切片,以达到或超过您的总工作器容量:

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

例如,假设使用 64 个工作进程(process_count=64thread_count=1)下载 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),并预留剩余的核心用于数据处理。

后续步骤