当您使用 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) 核心的数量以及您是下载单个对象还是多个对象,自动设置默认的并发和切片参数。这些默认值会配置以下属性:
- 进程数:
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:触发切片的最小对象大小阈值,例如对于多 GB 工作负载,该值为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 虚拟机上,将 设置为 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 个对象:
- 四个 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),并预留剩余的核心用于数据处理。