Descripción general del almacenamiento en caché en Cloud Storage FUSE

Cloud Storage FUSE proporciona cuatro tipos de almacenamiento en caché opcional para ayudar a aumentar el rendimiento de la recuperación de datos:

Descripción general del almacenamiento en caché de archivos

La caché de archivos de Cloud Storage FUSE es una caché de lectura basada en el cliente que entrega lecturas de archivos repetidas desde un almacenamiento en caché más rápido, el cual puedes elegir.

Beneficios del almacenamiento en caché de archivos

  • Rendimiento mejorado: el almacenamiento en caché de archivos mejora la latencia y la capacidad de procesamiento a través de la entrega de lecturas directamente desde los medios de caché. Las operaciones de E/S pequeñas y aleatorias pueden ser mucho más rápidas cuando se entregan desde la caché.

  • Usar la capacidad existente: el almacenamiento en caché de archivos puede usar la capacidad de la máquina aprovisionada existente para el directorio de caché sin incurrir en cargos por almacenamiento adicional. Esto incluye las SSD locales que vienen con los tipos de máquina de GPU de Cloud, como a2-ultragpu y a3-highgpu, Persistent Disk, que es el disco de arranque que usa cada máquina virtual (VM) o /tmpfs en la memoria.

  • Cargos reducidos: los aciertos de caché se entregan de forma local y no generan cargos de red ni de operaciones de Cloud Storage.

  • Mejora en el costo total de propiedad para la capacitación de IA y AA: el almacenamiento en caché de archivos aumenta las GPU de Cloud y el uso de Cloud TPU mediante la carga de datos más rápido, lo que reduce el tiempo de capacitación y proporciona una mayor relación entre precio y rendimiento para las cargas de trabajo de capacitación de IA y AA.

Habilita y configura la caché de archivos

La caché de archivos está inhabilitada de forma predeterminada y se puede habilitar y configurar mediante un archivo de configuración de Cloud Storage FUSE. Puedes controlar el comportamiento del almacenamiento en caché mediante los siguientes campos:

  • max-size-mb: Controla la capacidad máxima en el directorio de caché que pueden ocupar los datos almacenados en caché. De forma predeterminada, el campo max-size-mb se configura para permitir que los datos almacenados en caché crezcan hasta que ocupen toda la capacidad disponible en el directorio de la caché.

  • cache-dir: especifica el directorio para almacenar datos caché de archivos. Ten en cuenta que especificar un directorio de caché es un requisito para habilitar la caché de archivos.

  • ttl-secs: Determina cuándo los datos almacenados en caché dejan de estar actualizados y deben actualizarse desde Cloud Storage. De forma predeterminada, el campo ttl-secs está configurado para vencerse y actualizarse desde Cloud Storage después de 60 segundos de inactividad. Te recomendamos que aumentes este valor.

    Para obtener información sobre cómo controlar la invalidación de datos de caché, consulta Configura la invalidación de datos de caché. Para obtener más información sobre la expulsión de datos almacenados en caché, consulta Expulsión.

  • enable-parallel-downloads: Acelera el rendimiento de lectura de archivos grandes de más de 1 GB de tamaño, incluidas las lecturas por primera vez, mediante el uso de varios trabajadores para descargar un archivo en paralelo con el directorio de caché de archivos como un búfer de carga previa. Te recomendamos que habilites las descargas en paralelo para las operaciones de entrega y restablecimiento de puntos de control. Para obtener más información sobre cómo habilitar y configurar descargas paralelas, consulta Configura descargas paralelas.

Lecturas aleatorias y parciales

Si la primera operación de lectura de archivos empieza desde el principio del archivo o compensa 0, la caché del archivo de Cloud Storage FUSE transfiere y carga todo el archivo en la caché, incluso si solo estás leyendo de un subconjunto pequeño. Esto permite que las lecturas aleatorias o parciales posteriores del mismo objeto se entreguen directamente desde la caché.

Si la primera operación de lectura de un archivo empieza desde cualquier lugar que no sea el desplazamiento 0, Cloud Storage FUSE, de forma predeterminada, no activa una recuperación de archivo completa asíncrona. Para cambiar este comportamiento para que Cloud Storage FUSE transfiera un archivo a la caché en una lectura aleatoria inicial, configura la marca cache-file-for-range-read como true. Te recomendamos que habilites la marca cache-file-for-range-read si se realizan muchas operaciones de lectura parciales o aleatorias diferentes en el mismo objeto.

Expulsión

La expulsión de metadatos y datos almacenados en caché se basa en el algoritmo menos usado recientemente (LRU) que empieza una vez que se alcanza el límite de espacio configurado por límite max-size-mb. Si la entrada vence según su TTL, primero se realiza una llamada Obtener metadatos en Cloud Storage y está sujeta a latencias de red. Debido a que los datos y los metadatos se administran por separado, es posible que experimentes una entidad expulsada o invalidada y no otra.

Rendimiento

El almacenamiento en caché del FUSE de Cloud Storage funciona con cualquier directorio especificado por el usuario que esté respaldado por el almacenamiento que elijas, como SSD local, disco persistente: en memoria tmpfs o Filestore. El rendimiento de la caché de Cloud Storage FUSE coincide con el almacenamiento subyacente que usa la caché con una sobrecarga mínima.

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.

Persistencia

Las cachés de Cloud Storage FUSE no se conservan en las desactivaciones y los reinicios. En el caso del almacenamiento en caché de archivos, si bien las entradas de metadatos necesarias para entregar archivos desde la caché se desalojan en los desmontajes y reinicios, es posible que los datos de la caché de archivos aún estén presentes en el directorio de archivos. Debes borrar los datos del directorio de la caché de archivos después de las activaciones o los reinicios.

Seguridad

Cuando habilitas el almacenamiento en caché, Cloud Storage FUSE usa el directorio de caché que especificaste con el campo cache-dir como directorio subyacente para que la caché conserve los archivos de tu bucket de Cloud Storage en un formato sin encriptar. Cualquier usuario o proceso que tenga acceso a este directorio de caché puede acceder a estos archivos. Te recomendamos restringir el acceso a este directorio.

Acceso directo o múltiple a la caché de archivos

El uso de un proceso que no sea Cloud Storage FUSE para acceder a un archivo en el directorio de la caché o modificarlo puede provocar daños en los datos. Las cachés de Cloud Storage FUSE son específicas de cada proceso en ejecución de Cloud Storage FUSE sin conocimiento en diferentes procesos de Cloud Storage FUSE que se ejecutan en las mismas máquinas o en máquinas diferentes. Por lo tanto, no recomendamos usar el mismo directorio de caché para diferentes procesos de Cloud Storage FUSE.

Si varios procesos de Cloud Storage FUSE necesitan ejecutarse en la misma máquina, cada proceso de Cloud Storage FUSE debe obtener su propio directorio de caché específico o usar uno de los siguientes métodos para garantizar que tus datos no se dañen:

  • Activa todos los buckets con una caché compartida: usa la activación dinámica para activar todos los buckets a los que tienes acceso en un solo proceso con una caché compartida. Para obtener más información, consulta Activación dinámica de Cloud Storage FUSE.

  • Habilita el almacenamiento en caché en un bucket específico: Habilita el almacenamiento en caché solo en un bucket específico mediante la activación estática. Para obtener más información, consulta Activación estática de Cloud Storage FUSE.

  • Almacena en caché solo una carpeta o directorio específico: activa y almacena en caché solo una carpeta de nivel de bucket específica en lugar de activar un bucket completo. Para obtener más información, consulta Activa un directorio dentro de un bucket.

Descripción general del almacenamiento en caché de estadísticas

La caché de estadísticas de Cloud Storage FUSE es una caché para metadatos de objetos que mejora el rendimiento de operaciones específicas de los atributos de archivo, como el tamaño, la hora de modificación o los permisos. El uso de la caché de estadística mejora la latencia con el uso de datos almacenados en caché para llevar a cabo operaciones en lugar de enviar una solicitud de objeto de estadística a Cloud Storage. Para obtener más información sobre el almacenamiento en caché de estadísticas, consulta la documentación de semántica en GitHub.

La caché de estadísticas está habilitada de forma predeterminada y se puede configurar mediante un archivo de configuración de Cloud Storage FUSE. El tamaño máximo de la caché está controlado por el campo stat-cache-max-size-mb, que tiene un valor predeterminado de 32 (32 MB). El TTL de la caché se controla mediante el campo ttl-secs, que tiene un valor predeterminado de 60 (60 segundos).

Prácticas recomendadas

Para la caché de estadísticas, te recomendamos que uses el valor predeterminado de 32 para el campo stat-cache-max-size-mb 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.

Descripción general del almacenamiento en caché de tipo

La caché de tipo de Cloud Storage FUSE es una caché de metadatos que acelera el rendimiento de las operaciones de metadatos específicas para la existencia de archivos o directorios. El uso de la caché de tipo mejora la latencia, ya que reduce la cantidad de solicitudes que se le hacen a Cloud Storage para comprobar si existe un archivo o directorio con el almacenamiento de esta información de forma local. Para obtener más información sobre el almacenamiento en caché de tipos, consulta la documentación de semántica en GitHub.

La caché de tipos está habilitada de forma predeterminada y se puede configurar con un archivo de configuración de Cloud Storage FUSE. El tamaño máximo de la caché está controlado por el campo type-cache-max-size-mb, que tiene un valor predeterminado de 4 (4 MB). El TTL de la caché se controla mediante el campo ttl-secs, que tiene un valor predeterminado de 60 (60 segundos).

Prácticas recomendadas

Para la caché de tipos, te recomendamos que uses el valor predeterminado de 4 para el campo type-cache-max-size-mb 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.

Descripción general del almacenamiento en caché de la lista

La caché de la lista de Cloud Storage FUSE es para la lista de directorios y archivos, o ls, respuestas que mejora las velocidades de operaciones de listas. El almacenamiento en caché de la lista es especialmente útil para cargas de trabajo que repiten listas de directorios completas como parte de la ejecución, como las ejecuciones de entrenamiento de IA/AA.

La caché de la lista se mantiene en la memoria caché de la página, que el kernel controla según la disponibilidad de la memoria, a diferencia de las cachés de estadísticas y tipos, que se mantienen en la memoria de tu máquina y las controla Cloud Storage FUSE.

Habilitar el almacenamiento en caché de listas

La caché de listas está inhabilitada de forma predeterminada. Puedes habilitar el almacenamiento en caché de listas mediante el campo kernel-list-cache-ttl-secs con uno de los siguientes valores:

  • Un valor positivo que representa el tiempo de actividad (TTL) en segundos para mantener la respuesta de la lista de directorios en la caché de la página del kernel.

  • Un valor de -1 para omitir el vencimiento de la entrada y mostrar la respuesta de la lista desde la caché cuando esté disponible.

Para habilitar y configurar el almacenamiento en caché de la lista, consulta el archivo de configuración de Cloud Storage FUSE.

Configura la invalidación de caché

En las siguientes secciones, se describe cómo configurar la invalidación de caché para todos los tipos de caché.

Invalidación de caché de archivos, estadísticas y tipos

En el caso de las cachés de archivos, estadísticas y tipos, el campo ttl-secs especifica el TTL en segundos por cuánto tiempo se usan los metadatos almacenados en caché desde el momento en que se recuperan de Cloud Storage hasta que vencen y deben actualizarse.

Puedes configurar ttl-secs en un archivo de configuración de Cloud Storage FUSE.

El campo ttl-secs se establece como 60 de forma predeterminada. Cuando especificas un valor de ttl-secs mayor que 0, los metadatos de la caché del archivo siguen siendo válidos solo durante el tiempo que especificaste. Para el almacenamiento en caché de archivos, te recomendamos aumentar el valor ttl-secs según el tiempo esperado entre lecturas repetidas mientras balanceas las necesidades de coherencia. Según la importancia y la frecuencia de los datos que cambian, te recomendamos establecer el valor ttl-secs tan alto como lo permita tu carga de trabajo. Cuando una entrada de metadatos deja de ser válida, se consultan las lecturas posteriores desde Cloud Storage.

Además de aceptar valores que representen un TTL específico en segundos antes de que venzan los metadatos almacenados en caché y se deban actualizar, puedes usar los siguientes valores para especificar cómo se lee el archivo:

  • Valor ttl-secs de 0: Garantiza que se lea el archivo con los datos más actualizados mediante la emisión de una llamada de metadatos GET a Cloud Storage que compruebe el archivo desde el que se entrega para garantizar que la caché sea coherente. Si el archivo en la caché está actualizado, se entrega directamente desde la caché. Especificar un valor distinto de 0 puede reducir el rendimiento porque siempre se debe hacer una llamada a Cloud Storage para comprobar los metadatos primero. Si el archivo está en la caché y no cambió, el archivo se entrega desde la caché con coherencia después de la llamada de metadatos GET.

  • Valor ttl-secs de -1: Garantiza que el archivo siempre se lea desde la caché, si está disponible, sin comprobar la coherencia. Entrega archivos sin comprobar la coherencia puede entregar datos incoherentes y solo debe usarse de forma temporal para las cargas de trabajo que se ejecutan en trabajos con datos que no cambian. Por ejemplo, usar un valor de -1 es útil para la capacitación de aprendizaje automático, en el que se leen los mismos datos en varios ciclos de capacitación sin cambios.

Enumera la invalidación de caché

La invalidación de caché de listas se establece mediante la especificación de un valor mayor que 0 mediante el campo kernel-list-cache-ttl-secs. La respuesta de la lista de directorios se mantiene en la caché de la página del kernel y sigue siendo válida durante el tiempo que especificaste. De forma predeterminada, la caché de la lista está inhabilitada y se establece en un valor de 0. Cuando especificas un valor de -1, Cloud Storage FUSE inhabilita el vencimiento de la caché de la lista y muestra la respuesta de la lista de la caché cuando está disponible.

Ruta de lectura para los datos almacenados en caché

La caché de Cloud Storage FUSE acelera las lecturas repetidas después de que se transfieran a la caché. Las lecturas por primera vez y los errores de caché van directamente a Cloud Storage y están sujetos a latencias de red normales de Cloud Storage.

Antes de ejecutar la carga de trabajo, te recomendamos que primero crees una lista de manera recursiva de los archivos en tu bucket activado para propagar las cachés de estadísticas y tipos con anticipación y mejorar el rendimiento en la primera ejecución en un método por lotes más rápido:

ls -R MOUNT_POINT > /dev/null

Consideraciones

  • Habilitar el almacenamiento en caché de archivos, de estadísticas, de tipo o de listas puede aumentar el rendimiento, pero reducir la coherencia, lo que suele ocurrir cuando accedes al mismo bucket con varios clientes con una tasa de cambio alta. Para reducir el impacto en la coherencia, recomendamos activar los buckets como de solo lectura. Para obtener más información sobre el comportamiento del almacenamiento en caché, consulta la documentación de semántica de Cloud Storage FUSE en GitHub.

  • Si una entrada de caché de archivos aún no venció en función de su TTL y el archivo está en la caché, toda la operación se entrega desde la caché del cliente local sin que se emita ninguna solicitud a Cloud Storage.

  • Si una entrada de caché de archivos venció en función de su TTL, primero se hace una llamada de Obtener metadatos a Cloud Storage y, si el archivo no está en la caché, se recupera de Cloud Storage. Ambas operaciones están sujetas a latencias de red. Si se invalidó la entrada de metadatos, pero el archivo está en la caché y su generación de objetos no cambió, el archivo se entrega desde la caché solo después de que se realiza la llamada Get de metadatos para comprobar si los datos son válidos.

  • Coherencia: si un cliente de Cloud Storage FUSE modifica un archivo almacenado en caché o sus metadatos, el archivo se invalida de inmediato y el mismo cliente garantiza la coherencia en la siguiente lectura. Sin embargo, si diferentes clientes acceden al mismo archivo o a sus metadatos y sus entradas se almacenan en caché, entonces la versión almacenada en caché del archivo o los metadatos se lee y no la versión actualizada hasta que el archivo se invalida. la configuración de TTL de ese cliente específico.

¿Qué sigue?