当 Google Cloud CLI 从 Rapid Bucket 中的地区级存储桶读取对象时,它会根据可用的系统资源自动应用默认的并发和切片 配置。
本页面介绍了这些默认配置,并说明了如何使用 gcloud CLI 进一步调整并发、进程伸缩和选择启用功能(例如 NIC 隔离),以帮助提高特定工作负载的性能。如需了解如何调整将地区级存储桶装载为文件系统时的性能, 请参阅 Rapid Bucket 的 Cloud Storage FUSE 性能。
在配置性能设置之前,请确保您已 创建地区级存储桶。如果您计划将对象下载到挂接的 存储卷(例如 Hyperdisk 或本地 SSD),请确保 您已在环境中格式化并装载该卷。如需了解一般 切片概念,请参阅切片对象下载。
默认并发和切片配置
本部分中的默认配置专门适用于使用 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 |
调整并发和切片配置
本部分介绍了如何使用 gcloud CLI 配置并发和切片设置,并为常见硬件环境提供了建议值。
如何应用配置
如需配置和应用自定义调整设置,请完成以下步骤:
安装或更新 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:每个下载切片的目标大小,例如对于多 GB 工作负载为128 MiB(对于较小的对象为32 MiB)。MAX_COMPONENTS:每个对象的切片组件数上限,例如16。
如需详细了解这些属性,请参阅调整建议。
运行
gcloud storage cp命令,将对象下载到本地存储路径:gcloud storage cp -r gs://BUCKET_NAME/SOURCE_PATH/ /DESTINATION_PATH/
替换以下内容:
BUCKET_NAME:地区级存储桶的名称。SOURCE_PATH:存储桶中的源目录或对象路径。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)。
例如,如果您的目标是 64 个工作器进程,则具有 80 个或更多 vCPU 的机器可以将 storage/process_count 设置为 64。对于 vCPU 数量少于 80 个的机器,请将 storage/process_count 设置为可用核心数的 80%(例如,在具有 64 个 vCPU 的虚拟机上设置为 51)。
线程数
设置 storage/thread_count 属性 以控制每个工作器进程的线程数
。在具有 48 个或更多 vCPU 的机器上,将 storage/thread_count 设置为 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 对象会生成 16 个切片,每个切片的大小为 6.25 GiB。
每个切片都会根据您的总工作器容量(storage/process_count × storage/thread_count)独立并行下载。
工作器饱和度
为了在整个传输过程中保持较高的工作器利用率,请调整进程数、线程数、组件大小和组件数上限,以便您的典型传输生成足够的总切片数,使其等于或超过您的总工作器容量:
Total slices across all objects >= storage/process_count * storage/thread_count
例如,假设您使用 64 个工作器进程(process_count=64 和 thread_count=1)下载四个对象:
- 四个 2 GiB 对象:设置
component_size=128 MiB会为每个对象生成 16 个切片(4 × 16 = 64 个切片),从而充分利用所有 64 个工作器进程。 - 四个 512 MiB 对象:设置
component_size=32 MiB会为每个对象生成 16 个切片(4 × 16 = 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),并保留其余核心用于数据处理。