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

O Cloud Storage FUSE tem melhor desempenho para cargas de trabalho de leitura e gravação sequenciais do que as cargas de trabalho de leitura e gravação aleatórias. 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.

Para otimizar o desempenho da leitura sequencial, faça upload e leia arquivos com tamanho de 5 MB a 200 MB. Para otimizar o desempenho de leitura aleatória, é recomendável fazer upload e ler arquivos com cerca de 2 MB.

Armazenamento em cache

O uso do Cloud Storage FUSE com arquivo, estatística, tipo ou os três 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.

Defina o número de threads de acordo com o número de núcleos de CPU disponíveis. Se o número de núcleos ou linhas de execução for maior que 100, mude –max-conns-per-host para o mesmo valor. Os frameworks de ML geralmente usam num_workers para definir o número de linhas de execução.

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.

Controle do procedimento de upload

Por padrão, as solicitações com falha do Cloud Storage FUSE para o Cloud Storage são repetidas com espera exponencial até uma duração de espera especificada, que tem um valor de 30s (um minuto). por padrão. Quando a duração de espera excede a duração máxima especificada, a nova tentativa continua com a duração máxima especificada. É possível usar a opção --max-retry-sleep como parte de uma chamada gcsfuse para especificar a duração da espera.

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

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.

Geração de registros

Para configurar a geração de registros de atividades do Cloud Storage FUSE, incluindo a rotação de registros, especifique os campos na chave logging em um arquivo de configuração do Cloud Storage FUSE. Por padrão, os arquivos de registro são rotacionados e consomem cerca de 1 GiB de espaço.