Ajusta el rendimiento de gcloud CLI para buckets zonales

Cuando lees objetos de buckets zonales en Rapid Bucket con la Google Cloud CLI, la CLI aplica automáticamente la simultaneidad y la división predeterminadas según los recursos del sistema disponibles.

En este documento, se describen estos parámetros de configuración predeterminados y se explica cómo ajustar el rendimiento de gcloud CLI para cargas de trabajo específicas configurando la simultaneidad, el escalamiento de procesos y las funciones de aceptación, como el aislamiento de NIC.

Antes de ajustar la configuración de rendimiento, debes crear un bucket zonal. Si descargas objetos en un volumen de almacenamiento conectado, como Hyperdisk o SSD local, formatea y activa el volumen en tu entorno. Si planeas activar buckets zonales como un sistema de archivos en lugar de usar gcloud CLI, consulta Rendimiento de Cloud Storage FUSE para Rapid Bucket. Para conocer los conceptos generales de la división, consulta Descargas de objetos divididos.

Configuraciones predeterminadas de simultaneidad y división

La configuración predeterminada que se describe en esta sección se aplica específicamente cuando lees objetos de buckets zonales en Rapid Bucket con la versión 583.0.0 o posterior de gcloud CLI. Para los buckets de Cloud Storage estándar, gcloud CLI aplica su propia configuración de simultaneidad predeterminada.

En el caso de los buckets zonales, gcloud CLI establece automáticamente los parámetros predeterminados de simultaneidad y división en función de la cantidad de núcleos de CPU virtuales (vCPU) disponibles y de si descargas un solo objeto o varios. Estos valores predeterminados configuran las siguientes propiedades:

En las siguientes secciones, se enumeran los valores predeterminados para las descargas de un solo objeto y de varios objetos.

Descargas de un solo objeto

Cuando descargas un solo objeto, gcloud CLI aplica los siguientes valores predeterminados:

CPU virtuales disponibles Recuento de procesos Recuento de subprocesos Umbral de división Componentes de Max Tamaño del componente
≥ 8 8 2 50 MiB 16 5 MiB
< 8 4 2 50 MiB 8 5 MiB

Descargas de varios objetos

Cuando descargas varios objetos de forma simultánea, gcloud CLI aplica los siguientes valores predeterminados:

CPU virtuales disponibles Recuento de procesos Recuento de subprocesos Umbral de división Componentes de Max Tamaño del componente
≥ 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

Configura las propiedades de simultaneidad y división

Para configurar y aplicar parámetros de ajuste personalizados, completa los siguientes pasos:

  1. Instala o actualiza Google Cloud CLI a la versión 583.0.0 o una posterior.

  2. En tu entorno de desarrollo, ejecuta el comando gcloud config configurations create para crear y activar un perfil de configuración:

    gcloud config configurations create CONFIGURATION_NAME

    Reemplaza CONFIGURATION_NAME por un nombre para tu perfil de configuración, como rapid-perf.

  3. Ejecuta el comando gcloud config set para configurar las propiedades de simultaneidad y división:

    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

    Reemplaza lo siguiente:

    • THREAD_COUNT: Es la cantidad de subprocesos por proceso de trabajador, como 1.
    • PROCESS_COUNT: Es la cantidad de procesos de trabajador, como 64.
    • THRESHOLD_SIZE: Es el umbral de tamaño mínimo del objeto para activar la división, como 128 MiB para cargas de trabajo de varios gigabytes (o 32 MiB para objetos más pequeños).
    • COMPONENT_SIZE: Es el tamaño objetivo de cada porción de descarga, como 128 MiB para cargas de trabajo de varios gigabytes (o 32 MiB para objetos más pequeños).
    • MAX_COMPONENTS: Es la cantidad máxima de componentes de porción por objeto, como 16.

    Para obtener más información sobre estas propiedades, consulta Ajusta las recomendaciones.

  4. Para descargar objetos en tu ruta de almacenamiento local, ejecuta el comando gcloud storage cp:

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

    Reemplaza lo siguiente:

    • BUCKET_NAME: Es el nombre de tu bucket zonal.
    • SOURCE_PATH: Es el directorio del código fuente o la ruta de acceso del objeto en tu bucket.
    • LOCAL_DESTINATION_PATH: Es la ruta de acceso del directorio local (como ./data/) o el punto de activación del volumen de almacenamiento local (como /mnt/hyperdisk/data/).

Ajusta las recomendaciones

Usa las siguientes recomendaciones para ajustar la simultaneidad, la división y los recursos del sistema para tus cargas de trabajo.

Recuento de procesos

Establece la propiedad storage/process_count para escalar los procesos de trabajadores paralelos en función de los núcleos de CPU disponibles. Limita el recuento de procesos a un máximo del 80% de los núcleos de CPU disponibles:

storage/process_count = min(target_cores, 0.8 * available_cores)

Aquí:

  • target_cores: Es la cantidad de núcleos de CPU o procesos de trabajador que deseas asignar para la transferencia (como 64).
  • available_cores: Es la cantidad total de CPU virtuales (vCPU) disponibles en tu máquina (por ejemplo, ejecutando nproc en Linux).

Por ejemplo, si tu objetivo es tener 64 procesos de trabajador en una máquina con 80 o más CPU virtuales, establece storage/process_count en 64. En una máquina con menos de 80 CPU virtuales, establece storage/process_count en el 80% de las CPU virtuales disponibles (por ejemplo, 51 en una VM de 64 CPU virtuales).

Recuento de subprocesos

Establece la propiedad storage/thread_count para controlar la cantidad de subprocesos por proceso de trabajador. En máquinas con 48 o más CPUs virtuales, establece storage/thread_count en 1.

Restringir cada proceso de trabajador a un solo subproceso en máquinas con 48 o más CPU virtuales reduce la contención de subprocesos del bloqueo del intérprete global (GIL) de Python y gRPC.

Umbral de división

Establece la propiedad storage/sliced_object_download_threshold para especificar el tamaño mínimo de objeto que se requiere para activar las descargas divididas.

Te recomendamos establecer storage/sliced_object_download_threshold en un valor igual o superior a storage/sliced_object_download_component_size.

Porciones por objeto

Establece las propiedades storage/sliced_object_download_component_size y storage/sliced_object_download_max_components para controlar la cantidad de porciones paralelas que se generan por objeto. gcloud CLI calcula las porciones por objeto con la siguiente fórmula:

Slices per object = min(object_size / component_size, max_components)

Si un objeto es lo suficientemente grande como para que dividirlo por el valor component_size supere el valor max_components, gcloud CLI ignora el valor component_size y divide el objeto de manera uniforme en porciones max_components. Por ejemplo, descargar un objeto de 100 GiB con component_size=128 MiB y max_components=16 produce 16 porciones de 6.25 GiB cada una.

gcloud CLI descarga cada porción de forma independiente y en paralelo según la capacidad total de tus trabajadores (storage/process_count × storage/thread_count).

Saturación de trabajadores

Para mantener un uso alto de los trabajadores durante una transferencia, debes ajustar el recuento de procesos, el recuento de subprocesos, el tamaño de los componentes y la cantidad máxima de componentes. Estos ajustes garantizan que las transferencias típicas generen suficientes porciones totales para igualar o superar la capacidad total de los trabajadores:

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

Por ejemplo, considera descargar cuatro objetos con 64 procesos de trabajador (process_count=64 y thread_count=1):

  • Cuatro objetos de 2 GiB: configurar component_size=128 MiB genera 16 porciones por objeto (4 × 16 = 64 porciones), lo que utiliza por completo los 64 procesos de trabajador.
  • Cuatro objetos de 512 MiB: Configurar component_size=32 MiB genera 16 porciones por objeto (4 × 16 = 64 porciones), lo que utiliza por completo los 64 procesos de trabajador. En cambio, usar component_size=128 MiB en objetos de 512 MiB produce solo 4 porciones por objeto (16 porciones en total), lo que deja 48 procesos de trabajador inactivos.

Aislamiento de NIC

En las máquinas Linux con más de 16 núcleos de CPU, puedes habilitar el aislamiento de la tarjeta de interfaz de red (NIC) estableciendo la propiedad storage/use_nic_isolation en True:

gcloud config set storage/use_nic_isolation True

Cuando habilitas esta propiedad, gcloud CLI establece la afinidad de CPU (os.sched_setaffinity()). Esta configuración aísla el 10% de los núcleos de CPU para las solicitudes de interrupción de hardware de red (IRQ) y reserva los núcleos restantes para el procesamiento de datos.

¿Qué sigue?