Rendimiento y prácticas recomendadas de Cloud Storage FUSE

En esta página, se describe el rendimiento de Cloud Storage FUSE en términos de latencia, ancho de banda y reintentos, así como las prácticas recomendadas cuando se usa Cloud Storage FUSE.

Lecturas y escrituras

Cloud Storage FUSE funciona mejor para las cargas de trabajo de lectura y escritura secuenciales que las cargas de trabajo de lectura y escritura aleatorias. Cloud Storage FUSE usa una heurística para detectar cuándo se lee un archivo de forma secuencial, lo que permite que Cloud Storage FUSE emita menos solicitudes de lectura más grandes a Cloud Storage con la misma conexión TCP.

Para optimizar el rendimiento de lectura secuencial, se recomienda que subas y leas archivos de 5 MB a 200 MB de tamaño. Para optimizar el rendimiento de lectura aleatoria, se recomienda subir y leer archivos de 2 MB aproximadamente.

Almacenamiento en caché

El uso de Cloud Storage FUSE con archivos, estadísticas, tipo o los tres tipos de caché habilitados puede aumentar el rendimiento y reducir los costos, pero también puede reducir la coherencia.

Caché de estadísticas y tipo

Las cachés de estadísticas y tipos pueden reducir la cantidad de llamadas en serie a Cloud Storage en lecturas repetidas al mismo archivo, lo que mejora el rendimiento. Configura las cachés de estadísticas y tipos según la cantidad de archivos que tengan lecturas repetidas y podrían beneficiarse del almacenamiento en caché. Puedes usar la cantidad de archivos para representar el tamaño aproximado de la caché. Recomendamos los siguientes límites para cada tipo de caché:

  • stat-cache-max-size-mb: usa el valor predeterminado de 32 si tu carga de trabajo incluye hasta 20,000 archivos. Si tu carga de trabajo supera los 20,000 archivos, aumenta el valor stat-cache-max-size-mb en 10 por cada 6,000 archivos adicionales, alrededor de 1,500 bytes por archivo.

    stat-cache-max-size-mb es un límite de nivel de activación y el uso de memoria real puede ser menor que el valor que especifiques. Como alternativa, puedes configurar stat-cache-max-size-mb como -1 para permitir que la caché de estadísticas use tanta memoria como sea necesario.

  • type-cache-max-size-mb: Usa el valor predeterminado de 4 si la cantidad máxima de archivos dentro de un solo directorio del bucket que activas contiene 20,000 archivos o menos. Si la cantidad máxima de archivos dentro de un solo directorio que activas contiene más de 20,000 archivos, aumenta el valor type-cache-max-size-mb por 1 por cada 5,000 archivos, alrededor de 200 bytes. por archivo.

    type-cache-max-size-mb es un límite de nivel de activación y el uso de memoria real puede ser menor que el valor especificado. Como alternativa, puedes establecer el valor type-cache-max-size-mb en -1 para permitir que el tipo de caché use tanta memoria como sea necesario.

Te recomendamos que ejecutes una lista completa. Para ello, pasa ls -R en tu bucket activado antes de ejecutar la carga de trabajo para mejorar el rendimiento en la primera ejecución. Para ello, propaga la caché de tipo con anticipación en un método por lotes más rápido.

Prácticas recomendadas para el almacenamiento en caché de archivos

Asegúrate de que todo tu conjunto de datos se ajuste a la capacidad de caché para obtener el mejor rendimiento y evitar la hiperpaginación de caché. Además, considera la capacidad y el rendimiento máximos que pueden proporcionar tus medios de caché. Si alcanzaste el rendimiento máximo de la caché aprovisionada, el límite de capacidad o ambos, es beneficioso leer directamente desde Cloud Storage, que tiene límites mucho más altos que Cloud Storage FUSE.

IOPS (búsquedas por segundo)

Filestore es una mejor opción que Cloud Storage FUSE para cargas de trabajo que requieren altas operaciones de entrada y salida instantáneas por segundo (IOPS), también conocidas como “búsquedas por segundo” en Cloud Storage. Filestore también es la mejor opción para IOPS muy altas en un solo sistema de archivos y con menor latencia.

Como alternativa, también puedes usar la función de caché de archivos de Cloud Storage FUSE para compilar en función de las características de rendimiento del medio de caché subyacente si proporciona IOPS altas y baja latencia.

Latencia y capacidad de procesamiento

Cloud Storage FUSE tiene una latencia más alta que un sistema de archivos local. La capacidad de procesamiento se reduce cuando lees o escribes archivos pequeños de a uno, ya que genera varias llamadas a la API separadas. Leer o escribir varios archivos grandes a la vez puede ayudar a aumentar la capacidad de procesamiento. Usa la función de caché de archivos de Cloud Storage FUSE para mejorar el rendimiento de E/S pequeñas y aleatorias.

La latencia del sistema de archivos de Cloud Storage FUSE afecta a rsync, que lee y escribe solo un archivo a la vez. Para transferir varios archivos hacia o desde tu bucket en paralelo, usa Google Cloud CLI a través de la ejecución de gcloud storage rsync. Para obtener más información, consulta la documentación de rsync.

Logra la capacidad de procesamiento máxima

Para alcanzar la capacidad de procesamiento máxima, usa una máquina con recursos de CPU suficientes para controlar la capacidad de procesamiento y saturar la tarjeta de interfaz de red (NIC). Los recursos de CPU insuficientes pueden causar una limitación de Cloud Storage FUSE.

Si usas Google Kubernetes Engine, aumenta la asignación de CPU al contenedor de sidecar de Cloud Storage FUSE si tus cargas de trabajo necesitan mayor capacidad de procesamiento. Puedes aumentar los recursos que usa el contenedor de archivo adicional o asignar recursos ilimitados.

Configura la cantidad de subprocesos según la cantidad de núcleos de CPU disponibles. Si la cantidad de núcleos o subprocesos es mayor que 100, cambia –max-conns-per-host al mismo valor. Por lo general, los frameworks del AA usan num_workers para definir la cantidad de subprocesos.

Límite de frecuencia

Para limitar la frecuencia de tráfico que Cloud Storage FUSE envía a Cloud Storage, puedes usar las siguientes opciones como parte de tu comando gcsfuse:

  • La opción --limit-ops-per-sec controla la velocidad a la que Cloud Storage FUSE envía solicitudes a Cloud Storage.

  • La opción --limit-bytes-per-sec controla el ancho de banda en el que Cloud Storage FUSE descarga los datos desde Cloud Storage.

Para obtener más información sobre estas opciones, consulta la documentación de la línea de comandos de gcsfuse.

Todos los límites de frecuencia son aproximados y se realizan durante un período de 8 horas. De forma predeterminada, no se aplican límites de frecuencia.

Control del procedimiento de carga

De forma predeterminada, las solicitudes que fallaron de Cloud Storage FUSE a Cloud Storage se reintentan con una retirada exponencial hasta una duración máxima de retirada especificada, que tiene un valor de 30s (30 segundos) de forma predeterminada. Una vez que la duración de retirada excede la duración máxima especificada, el reintento continúa con la duración máxima especificada. Puedes usar la opción --max-retry-sleep como parte de una llamada gcsfuse para especificar la duración de la retirada.

Para obtener más información sobre la opción --max-retry-sleep, consulta la documentación de la línea de comandos de gcsfuse.

Semántica del directorio

Cloud Storage opera con un espacio de nombres plano, lo que significa que los directorios no existen dentro de Cloud Storage. En su lugar, los directorios se representan con nombres de objetos que terminan con una barra (/). Por ejemplo, en el nombre del objeto my-bucket/directory/file.txt, my-bucket/directory/ representa un directorio. Los directorios que existen como parte de los nombres de objetos, pero que no existen como objetos reales, se conocen como directorios definidos de forma implícita.

De forma predeterminada, cuando activas un bucket con directorios definidos de forma implícita, Cloud Storage FUSE no puede inferir ni acceder a esos directorios. Cloud Storage FUSE solo puede inferir directorios definidos de forma explícita, lo que significa que el directorio existe como un objeto real dentro del bucket de Cloud Storage.

Por ejemplo, supongamos que activas un bucket llamado my-bucket, que contiene el objeto my-bucket/directory/file1.txt. Si ejecutas ls en el punto de activación del bucket, Cloud Storage FUSE no puede acceder al directorio my-bucket/directory/ ni al objeto file1.txt dentro de él, porque directory no existe como un objeto en Cloud Storage. Para permitir que Cloud Storage FUSE infiera directorios y los objetos dentro de ellos, puedes hacer que los directorios se definan de forma explícita si los creas en tu sistema de archivos local con el comando mkdir o si incluyes Opción --implicit-dirs en el comando gcsfuse.

Para obtener más información sobre la semántica del directorio, incluido cómo activar buckets con prefijos existentes, consulta Archivos y directorios en la documentación de GitHub. Para obtener más información sobre la opción --implicit-dirs, consulta la documentación de la línea de comandos de Cloud Storage FUSE.

Consideraciones para enumerar objetos

Cuando enumeras todos los objetos en un bucket activado (p. ej., con la ejecución de ls), Cloud Storage FUSE llama a Objects: API de list en Cloud Storage. La API pagina los resultados, lo que significa que Cloud Storage FUSE puede necesitar emitir varias llamadas, según cuántos objetos haya en tu bucket. Ten en cuenta que esto puede hacer que una operación de lista sea costosa y lenta.

Comparativas

Si deseas obtener instrucciones para realizar pruebas de carga en Cloud Storage FUSE, consulta Comparativas de rendimiento en la documentación de GitHub.

Logging

Para configurar el registro para las actividades de Cloud Storage FUSE, incluida la rotación de registros, especifica los campos en la clave logging en un archivo de configuración de Cloud Storage FUSE. De forma predeterminada, los archivos de registro se rotan y consumen alrededor de 1 GiB de espacio.