Práticas recomendadas e desempenho do Cloud Storage FUSE

Nesta página, descrevemos o desempenho do Cloud Storage FUSE em termos de latência, largura de banda, armazenamento em cache e novas tentativas, bem como as práticas recomendadas para o uso do Cloud Storage FUSE.

Leituras e gravações

Para melhorar as leituras e gravações, recomendamos implementar as seguintes práticas recomendadas:

  • Execute cargas de trabalho sequenciais de leitura e gravação quando possível: O Cloud Storage FUSE tem um desempenho melhor para cargas de trabalho sequenciais de leitura e gravação do que as cargas de trabalho aleatórias de leitura e gravação. O Cloud Storage FUSE usa uma heurística para detectar quando um arquivo está sendo lido em sequência, permitindo que o Cloud Storage FUSE emita menos solicitações de leitura maiores para o Cloud Storage usando a mesma conexão TCP.

  • Ajustar o tamanho dos arquivos com base no tipo de leitura: para otimizar o desempenho da leitura sequencial, recomendamos fazer upload e ler arquivos com tamanho entre 5 MB e 200 MB. Para otimizar o desempenho da leitura aleatória, recomendamos que você fazer upload e ler arquivos com cerca de 2 MB.

  • Acelere as leituras ativando downloads paralelos: ative os downloads paralelos para acelerar a leitura de arquivos grandes com mais de 1 GB. Para mais informações, consulte Melhore o desempenho de leitura usando downloads paralelos.

Melhorar o desempenho de leitura usando downloads paralelos

É possível melhorar o desempenho de leitura ativando e configurando recurso de download paralelo, que usa vários trabalhadores para baixar um arquivo em usando o diretório de cache de arquivos como buffer de pré-busca. Recomendamos o uso de downloads paralelos para cenários de leitura de linha única que carregam arquivos grandes, como a veiculação de modelos e restaurações de pontos de controle.

Antes de ativar os downloads paralelos, considere o seguinte:

  • Caso seu aplicativo tenha alto paralelismo de leitura em oito segmentos, você pode ter uma leve degradação do desempenho.

  • Não recomendamos o uso de downloads paralelos para cargas de trabalho de treinamento devido ao o alto paralelismo de leitura deles.

  • Para usar downloads paralelos, primeiro ative e configure o cache de arquivos.

  • O arquivo lido precisa caber na capacidade disponível do diretório de cache de arquivos, que pode ser controlada usando a propriedade max-size-mb.

Como configurar downloads paralelos

Depois de definir a propriedade enable-parallel-downloads como true, é possível opcionalmente, definir suas configurações de suporte usando um Arquivo de configuração do Cloud Storage FUSE ou a CLI do gcsfuse:

  • parallel-downloads-per-file: o número máximo de workers que podem ser gerados por arquivo para fazer o download do objeto do Cloud Storage para no cache de arquivos. O valor padrão é 16.

  • max-parallel-downloads: o número máximo de workers que podem gerados a qualquer momento em todos os jobs de download de arquivos. O padrão é definido como o dobro do número de núcleos de CPU na máquina. Para não especificar um limite, insira um valor de -1.

  • download-chunk-size-mb: o tamanho de cada solicitação de leitura em MiB que cada worker faz no Cloud Storage ao fazer o download do objeto no cache de arquivos. O tamanho padrão é 50 MiB. Um download paralelo só é acionado se o arquivo que está sendo lido tiver o tamanho especificado.

Armazenamento em cache

O uso do Cloud Storage FUSE com arquivo, estatística, tipo, lista ou os quatro tipos de cache ativados pode aumentar o desempenho e reduzir o custo, mas também a consistência.

Cache de estatísticas e tipos

Os caches de estatística e tipo podem reduzir o número de chamadas seriais para o Cloud Storage em leituras repetidas para o mesmo arquivo, o que melhora o desempenho. Defina caches de tipo e estatística de acordo com o número de arquivos que têm leituras repetidas e podem se beneficiar do armazenamento em cache. É possível usar o número de arquivos para representar o tamanho aproximado do cache. Recomendamos os seguintes limites para cada tipo de cache:

  • stat-cache-max-size-mb: use o valor padrão de 32 se a carga de trabalho envolve 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.

  • type-cache-max-size-mb: use o valor padrão de 4 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 contiver 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.

Recomendamos que você execute uma listagem completa passando ls -R no bucket ativado antes de executar a carga de trabalho para melhorar o desempenho na primeira execução preenchendo o cache de tipo com antecedência em um método mais rápido e em lote. ,

Práticas recomendadas para armazenamento em cache de arquivos

Certifique-se de que todo o conjunto de dados se ajuste à capacidade do cache para ter o melhor desempenho e evitar a sobrecarga. 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.

IOPS (consultas por segundo)

O Filestore é uma opção melhor do que o Cloud Storage FUSE para cargas de trabalho que exigem operações de entrada/saída por segundo (IOPS, na sigla em inglês) altas e instantâneas, também conhecidas como "consultas por segundo" no Cloud Storage. O Filestore também é a melhor opção para IOPS muito altas em um único sistema de arquivos e menor latência.

Como alternativa, também é possível usar o recurso de cache de arquivos do Cloud Storage FUSE para basear as características de desempenho da mídia de cache subjacente se ela oferecer IOPS alto e baixa latência.

Latência e capacidade

O Cloud Storage FUSE tem uma latência maior do que um sistema de arquivos local. A capacidade é reduzida quando você lê ou grava pequenos arquivos um de cada vez, já que resulta em várias chamadas de API separadas. Ler ou gravar vários arquivos grandes de uma só vez pode ajudar a aumentar a capacidade. Use o recurso de cache de arquivos do Cloud Storage FUSE para melhorar o desempenho de E/S pequenas e aleatórias.

A latência do sistema de arquivos do Cloud Storage FUSE afeta rsync, que lê e grava apenas um arquivo por vez. Para transferir vários arquivos de ou para o bucket em paralelo, use a CLI do Google Cloud executando gcloud storage rsync. Para mais informações, consulte a documentaçãorsync.

Atingir a capacidade máxima

Para alcançar a capacidade máxima, use uma máquina com recursos de CPU suficientes para impulsionar a capacidade e saturar a placa de interface de rede (NIC). Recursos insuficientes de CPU podem causar limitação do Cloud Storage FUSE.

Se você estiver usando o Google Kubernetes Engine, aumente a alocação de CPU para o contêiner de arquivo secundário do Cloud Storage FUSE se as cargas de trabalho precisarem de maior capacidade. É possível aumentar os recursos usados pelo contêiner do arquivo secundário ou alocar recursos ilimitados.

Limitação de taxa

Para limitar a taxa de tráfego que o Cloud Storage FUSE envia para o Cloud Storage, use as seguintes opções como parte do comando gcsfuse:

  • A opção --limit-ops-per-sec controla a taxa em que o Cloud Storage FUSE envia solicitações para o Cloud Storage.

  • A opção --limit-bytes-per-sec controla a largura de banda em que o Cloud Storage FUSE faz o download de dados do Cloud Storage.

Para mais informações sobre essas opções, consulte a documentação da linha de comando gcsfuse.

Todas as limitações de taxa são aproximadas e realizadas em uma janela de oito horas. Por padrão, nenhum limite de taxa é aplicado.

Semântica do diretório

O Cloud Storage opera com um namespace simples, o que significa que os diretórios não existem de fato no Cloud Storage. Em vez disso, os diretórios são representados por nomes de objetos que terminam com uma barra (/). Por exemplo, no nome do objeto my-bucket/directory/file.txt, my-bucket/directory/ representa um diretório. Os diretórios que existem como parte de nomes de objetos, mas não como objetos reais, são conhecidos como diretórios definidos implicitamente.

Por padrão, quando você ativa um bucket com diretórios definidos implicitamente, o Cloud Storage FUSE não pode inferir nem acessar esses diretórios. O Cloud Storage FUSE só pode inferir diretórios definidos explicitamente, o que significa que o diretório existe como um objeto real no bucket do Cloud Storage.

Por exemplo, digamos que você monte um bucket chamado my-bucket, que contém o objeto my-bucket/directory/file1.txt. Se você executar ls no ponto de montagem do bucket, o Cloud Storage FUSE não poderá acessar o diretório my-bucket/directory/ ou o objeto file1.txt, porque directory não existe como um objeto no Cloud Storage. Para permitir que o Cloud Storage FUSE infira diretórios e objetos dentro deles, é possível tornar os diretórios explicitamente definidos criando-os no seu sistema de arquivos local usando o comando mkdir ou incluindo a opção --implicit-dirs no comando gcsfuse.

Para mais informações sobre a semântica de diretório, incluindo como ativar buckets com prefixos existentes, consulte Arquivos e diretórios na documentação do GitHub. Para mais informações sobre a opção --implicit-dirs, consulte a documentação da linha de comando do Cloud Storage FUSE.

Considerações ao listar objetos

Quando você lista todos os objetos em um bucket ativado (por exemplo, executando ls), o Cloud Storage FUSE chama a API Objects: list no Cloud Storage. A API página os resultados, o que significa que o Cloud Storage FUSE pode precisar emitir várias chamadas, dependendo de quantos objetos houver no bucket. Isso pode tornar uma operação de lista cara e lenta.

Comparativos de mercado

Para ver instruções sobre como realizar testes de carga no Cloud Storage FUSE, consulte Comparativos de mercado de desempenho na documentação do GitHub.