Visão geral do armazenamento em cache no Cloud Storage FUSE

O Cloud Storage FUSE oferece quatro tipos de armazenamento em cache opcional para ajudar a aumentar o desempenho da recuperação de dados:

Visão geral do armazenamento em cache de arquivos

O cache de arquivos do Cloud Storage FUSE é um cache de leitura baseado em cliente que serve leituras de arquivos repetidas de um armazenamento de cache mais rápido de sua escolha.

Benefícios do armazenamento em cache de arquivos

  • Melhor desempenho: o armazenamento em cache de arquivos melhora a latência e a capacidade veiculando leituras diretamente da mídia de cache. Operações de E/S pequenas e aleatórias podem ser significativamente mais rápidas quando exibidas do cache.

  • Usar a capacidade atual: o armazenamento em cache de arquivos pode usar a capacidade da máquina provisionada atual do seu diretório de cache sem gerar cobranças de armazenamento extra. Isso inclui SSDs locais que vêm com tipos de máquina das GPUs do Cloud, como a2-ultragpu, a3-highgpu, Persistent Disk (que é o disco de inicialização usado por cada VM) ou /tmpfs na memória.

  • Cobranças reduzidas: as ocorrências em cache são veiculadas localmente e não geram cobranças de operações do Cloud Storage nem de rede.

  • Melhoria no custo total de propriedade para treinamento de IA e ML: o armazenamento em cache de arquivos aumenta a utilização das GPUs do Cloud e da Cloud TPU ao carregar dados mais rapidamente, o que reduz o tempo de treinamento e oferece uma relação melhor custo-benefício para cargas de trabalho de treinamento de IA e ML.

Ativar e configurar o cache de arquivos

O cache de arquivos é desativado por padrão e pode ser ativado e configurado usando um arquivo de configuração do Cloud Storage FUSE. É possível controlar o comportamento de armazenamento em cache usando os seguintes campos:

  • max-size-mb: controla a capacidade máxima que os dados armazenados em cache podem ocupar no diretório de cache. Por padrão, o campo max-size-mb é definido para permitir que os dados armazenados em cache cresçam até ocupar toda a capacidade disponível no diretório de cache.

  • cache-dir: especifica um diretório para armazenar dados de cache de arquivos. A especificação de um diretório de cache é um pré-requisito para ativar o cache de arquivos.

  • ttl-secs: determina quando os dados em cache ficam desatualizados e precisam ser atualizados do Cloud Storage. Por padrão, o campo ttl-secs é definido para expirar e ser atualizado do Cloud Storage após 60 segundos de inatividade. Recomendamos aumentar esse valor.

    Para saber como controlar a invalidação de dados em cache, consulte Como configurar a invalidação de dados em cache. Para mais informações sobre a remoção de dados armazenados em cache, consulte Remoção.

  • enable-parallel-downloads: acelera o desempenho de leitura de arquivos grandes com mais de 1 GB, incluindo a primeira leitura, usando vários workers para fazer o download de um arquivo em paralelo usando o diretório de cache de arquivos como um buffer de pré-busca. Recomendamos ativar os downloads para operações de veiculação e restauração de pontos de controle. Para mais informações sobre como ativar e configurar downloads paralelos, consulte Configurar downloads paralelos.

Leituras aleatórias e parciais

Se a primeira operação de leitura de arquivo começar no início do arquivo, no deslocamento 0, o cache de arquivos do Cloud Storage FUSE vai ingerir e carregar todo o arquivo no cache, mesmo que você esteja apenas lendo de um subconjunto pequeno. Isso permite que leituras aleatórias ou parciais subsequentes do mesmo objeto sejam veiculadas diretamente no cache.

Se a primeira operação de leitura de um arquivo começar de qualquer lugar diferente do deslocamento 0, o Cloud Storage FUSE, por padrão, não acionará uma busca assíncrona de arquivo completo. Para alterar esse comportamento para que o Cloud Storage FUSE ingira um arquivo no cache após uma leitura aleatória inicial, defina a sinalização cache-file-for-range-read como true. Recomendamos que você ative a sinalização cache-file-for-range-read se muitas operações de leitura aleatória ou parcial diferentes forem executadas no mesmo objeto.

Remoção

A remoção de metadados e dados armazenados em cache é baseada em um algoritmo usado menos recentemente (LRU, na sigla em inglês) que começa quando o limite de espaço configurado por limite de max-size-mb é atingido. Se a entrada expirar com base no TTL, uma chamada de metadados "Get" será feita primeiro para o Cloud Storage e estará sujeita a latências de rede. Como os dados e metadados são gerenciados separadamente, é possível que uma entidade seja removida ou invalidada e não a outra.

Persistência

Os caches do Cloud Storage FUSE não são mantidos após a desmontagem e são reiniciados. No armazenamento em cache de arquivos, embora as entradas de metadados necessárias para fornecer arquivos do cache sejam expulsadas em desmontagens e reinicializações, os dados no cache de arquivos ainda podem estar presentes no diretório de arquivos. Exclua os dados no diretório do cache de arquivos após desmontagem ou reinicialização.

Segurança

Quando você ativa o armazenamento em cache, o Cloud Storage FUSE usa o diretório de cache especificado usando o campo cache-dir como o diretório subjacente para o cache manter os arquivos do bucket do Cloud Storage em um formato não criptografado. Qualquer usuário ou processo com acesso a esse diretório de cache pode acessar esses arquivos. Recomendamos restringir o acesso a esse diretório.

Acesso direto ou múltiplo ao cache de arquivos

O uso de um processo diferente do Cloud Storage FUSE para acessar ou modificar um arquivo no diretório de cache pode corromper os dados. Os caches do Cloud Storage FUSE são específicos para cada processo em execução do Cloud Storage FUSE, sem reconhecimento entre diferentes processos do Cloud Storage FUSE em execução na mesma máquina ou em máquinas diferentes. Portanto, não recomendamos usar o mesmo diretório de cache para diferentes processos do Cloud Storage FUSE.

Se vários processos do Cloud Storage FUSE precisarem ser executados na mesma máquina, cada processo do Cloud Storage FUSE precisará ter o próprio diretório de cache específico ou usar um dos métodos a seguir para garantir que os dados não sejam corrompidos:

  • Monte todos os buckets com um cache compartilhado: use a montagem dinâmica para ativar todos os buckets a que você tem acesso em um único processo com um cache compartilhado. Para saber mais, consulte Ativação dinâmica do Cloud Storage FUSE.

  • Ativar o armazenamento em cache em um bucket específico: ative o armazenamento em cache somente em um bucket especificado usando a montagem estática. Para saber mais, consulte Ativação estática do Cloud Storage FUSE.

  • Armazenar em cache somente uma pasta ou um diretório específico: ative e armazene em cache somente uma pasta específica no nível do bucket em vez de ativar um bucket inteiro. Para saber mais, consulte Montar um diretório em um bucket.

Visão geral do armazenamento em cache de estatísticas

O cache de estatísticas do Cloud Storage FUSE é um cache de metadados de objetos que melhora o desempenho de operações específicas de atributos de arquivos, como tamanho, tempo de modificação ou permissões. O uso do cache de estatísticas melhora a latência usando dados armazenados em cache para executar operações em vez de enviar uma solicitação de objeto de estatística para o Cloud Storage. Para saber mais sobre o armazenamento em cache de estatísticas, consulte a documentação da Semantics no GitHub.

O cache de estatísticas é ativado por padrão e pode ser configurado usando um arquivo de configuração do Cloud Storage FUSE. O tamanho máximo do cache é controlado pelo campo stat-cache-max-size-mb, que tem um valor padrão de 32 (32 MB). O TTL do cache é controlado pelo campo ttl-secs, que tem um valor padrão de 60 (60 segundos).

Práticas recomendadas

Para o cache de estatísticas, recomendamos usar o valor padrão 32 para o campo stat-cache-max-size-mb se a carga de trabalho envolver até 20.000 arquivos. Se a carga de trabalho for maior que 20.000 arquivos, aumente o valor stat-cache-max-size-mb em 10 para cada 6.000 arquivos adicionais, cerca de 1.500 bytes por arquivo.

stat-cache-max-size-mb é um limite no nível da montagem, e o uso real da memória pode ser menor que o valor especificado. Como alternativa, você pode definir stat-cache-max-size-mb como -1 para permitir que o cache de estatísticas use a quantidade de memória necessária.

Visão geral do armazenamento em cache de tipos

O cache do tipo FUSE do Cloud Storage é um cache de metadados que acelera o desempenho de operações de metadados específicas da existência de arquivos ou diretórios. O uso do cache de tipos melhora a latência ao reduzir o número de solicitações feitas ao Cloud Storage para verificar se um arquivo ou diretório existe armazenando essas informações localmente. Para saber mais sobre o armazenamento em cache de tipos, consulte a documentação de semântica no GitHub.

O cache de tipos é ativado por padrão e pode ser configurado usando um arquivo de configuração do Cloud Storage FUSE. O tamanho máximo do cache é controlado pelo campo type-cache-max-size-mb, que tem um valor padrão de 4 (4 MB). O TTL do cache é controlado pelo campo ttl-secs, que tem um valor padrão de 60 (60 segundos).

Práticas recomendadas

Para o armazenamento em cache de tipo, recomendamos usar o valor padrão de 4 para o campo type-cache-max-size-mb se o número máximo de arquivos em um único diretório do bucket que você está ativando contiver 20.000 arquivos ou menos. Se o número máximo de arquivos em um único diretório ativado tiver mais de 20.000 arquivos, aumente o valor type-cache-max-size-mb em 1 para cada 5.000 arquivos, cerca de 200 bytes por arquivo.

type-cache-max-size-mb é um limite no nível da montagem, e o uso real da memória pode ser menor que o valor especificado. Como alternativa, você pode definir o valor de type-cache-max-size-mb como -1 para permitir que o cache de tipos use tanta memória conforme necessário.

Visão geral do armazenamento em cache de listas

O cache de lista do Cloud Storage FUSE é para respostas de diretório e lista de arquivos ou ls, que melhoram a velocidade da operação da lista. O armazenamento em cache de lista é especialmente útil para cargas de trabalho que repetem listagens de diretório completas como parte da execução, como execuções de treinamento de IA/ML.

O cache da lista é mantido na memória no cache da página, que é controlado pelo kernel com base na disponibilidade de memória, em vez dos caches de estatísticas e de tipo, que são mantidos na memória da máquina e controlados pelo FUSE do Cloud Storage.

Ativar o armazenamento em cache de listas

O cache de lista é desativado por padrão. É possível ativar o armazenamento em cache de listas usando o campo kernel-list-cache-ttl-secs com um dos seguintes valores:

  • Um valor positivo que representa o time to live (TTL) em segundos para manter a resposta da lista de diretórios no cache de páginas do kernel.

  • Um valor de -1 para ignorar a expiração da entrada e retornar a resposta da lista do cache quando ela estiver disponível.

Para ativar e configurar o armazenamento em cache de listas, consulte o Arquivo de configuração do Cloud Storage FUSE.

Configurar a invalidação de cache

As seções a seguir descrevem como configurar a invalidação de cache para todos os tipos de cache.

Invalidação de cache de arquivos, estatísticas e tipos

Para caches de arquivo, estatística e tipo, o campo ttl-secs especifica o TTL em segundos para o período em que os metadados armazenados em cache são usados, desde o momento em que são buscados do Cloud Storage até o momento em que expiram e precisam ser atualizados.

É possível configurar o ttl-secs em um arquivo de configuração do Cloud Storage FUSE.

O campo ttl-secs é definido como 60 por padrão. Quando você especifica um valor maior que 0 para ttl-secs, os metadados do cache de arquivos permanecem válidos apenas pelo período especificado. Para armazenamento em cache de arquivos, recomendamos aumentar o valor de ttl-secs com base no tempo esperado entre leituras repetidas enquanto equilibra as necessidades de consistência. Com base na importância e frequência da alteração dos dados, recomendamos definir o valor de ttl-secs o mais alto possível na carga de trabalho. Quando uma entrada de metadados se torna inválida, as leituras subsequentes são consultadas no Cloud Storage.

Além de aceitar valores que representam um TTL específico em segundos antes que os metadados armazenados em cache expirem e precisem ser atualizados, você pode usar os seguintes valores para especificar como o arquivo é lido:

  • Valor ttl-secs de 0: garante que o arquivo com os dados mais atualizados seja lido emitindo uma chamada de metadados GET para o Cloud Storage que verifica o arquivo em que ele está sendo veiculado para garantir que o cache seja consistente. Se o arquivo estiver atualizado, ele será exibido diretamente no cache. Especificar um valor diferente de 0 pode reduzir o desempenho porque sempre é necessário fazer uma chamada ao Cloud Storage para verificar os metadados. Se o arquivo estiver no cache e não tiver sido alterado, ele será disponibilizado no cache com consistência após a chamada de metadados GET.

  • Valor ttl-secs de -1: garante que o arquivo seja sempre lido no cache se disponível, sem verificar a consistência. A disponibilização de arquivos sem verificação de consistência pode exibir dados inconsistentes e só deve ser usada temporariamente para cargas de trabalho executadas em jobs com dados não alterados. Por exemplo, usar o valor -1 é útil para treinamento de machine learning, em que os mesmos dados são lidos em várias épocas sem alterações.

Listar a invalidação de cache

A invalidação do cache da lista é definida especificando um valor maior que 0 usando o campo kernel-list-cache-ttl-secs. A resposta da lista de diretórios é mantida no cache de páginas do kernel e permanece válida pelo período especificado. Por padrão, o armazenamento em cache da lista é desativado e definido como 0. Quando você especifica um valor de -1, o Cloud Storage FUSE desativa a expiração do cache da lista e retorna a resposta da lista do cache quando ela está disponível.

Caminho de leitura para dados em cache

O cache do Cloud Storage FUSE acelera leituras repetidas após a ingestão no cache. Tanto as leituras iniciais quanto as ausências no cache vão diretamente para o Cloud Storage e estão sujeitas às latências de rede normais do Cloud Storage. Para melhorar a performance da leitura pela primeira vez, consulte Melhorar a leitura pela primeira vez.

Considerações

  • Ativar o armazenamento em cache de arquivos, de estatísticas, de tipos ou de listas pode aumentar o desempenho, mas reduzir a consistência, o que geralmente ocorre quando você acessa o mesmo bucket usando vários clientes com uma alta taxa de mudança. Para reduzir o impacto na consistência, recomendamos montar os buckets como somente leitura. Para saber mais sobre o comportamento de armazenamento em cache, consulte a documentação de semântica do Cloud Storage FUSE no GitHub.

  • Se uma entrada de cache de arquivos ainda não tiver expirado com base no TTL e o arquivo estiver no cache, toda a operação será disponibilizada a partir do cache do cliente local sem que nenhuma solicitação seja emitida para o Cloud Storage.

  • Se uma entrada de cache de arquivos tiver expirado com base no TTL, uma chamada "Receber metadados" será feita primeiro para o Cloud Storage e, se o arquivo não estiver no cache, ele será recuperado do Cloud Storage. Ambas as operações estão sujeitas a latências de rede. Se a entrada de metadados tiver sido invalidada, mas o arquivo estiver no cache e a geração de objeto não tiver sido alterada, o arquivo será exibido a partir do cache somente depois que a chamada de receber metadados for feita para verificar se{101 } os dados são válidos.

  • Consistência: se um cliente do Cloud Storage FUSE modificar um arquivo armazenado em cache ou os metadados dele, o arquivo será imediatamente invalidado e a consistência será garantida na leitura a seguir pelo mesmo cliente. No entanto, se diferentes clientes acessarem o mesmo arquivo ou os metadados dele e as entradas forem armazenadas em cache, a versão armazenada em cache do arquivo ou dos metadados será lida, e não a versão atualizada, até que o arquivo seja invalidado pela a configuração de TTL desse cliente específico.

  • Para evitar a sobrecarga do cache, verifique se todo o conjunto de dados se encaixa na capacidade do cache. Considere também a capacidade máxima e o desempenho que a mídia de cache pode fornecer. Se você atingir o desempenho máximo do cache provisionado, o limite de capacidade ou ambos, leia diretamente do Cloud Storage, que tem limites muito maiores do que o Cloud Storage FUSE.

A seguir