Esta página fornece orientações sobre como configurar o ambiente do Parallelstore para obter a melhor performance.
Recomendações gerais
Remova todos os aliases de
ls
para melhorar a performance padrão. Em muitos sistemas, ele tem o aliasls -color=auto
, que é muito mais lento com a configuração padrão do Parallelstore.Se a performance das operações de lista for lenta, ative o armazenamento em cache para a montagem dfuse.
Biblioteca de interceptação
A biblioteca libioil
pode ser usada para melhorar o desempenho das operações de leitura e gravação
no DFuse de aplicativos que usam libc. A biblioteca ignora o
kernel interceptando chamadas de leitura e gravação POSIX do aplicativo para
atendê-las diretamente no espaço do usuário. Consulte a
biblioteca de intercepção para
mais detalhes.
Na maioria dos casos, recomendamos usar a biblioteca de intercepção em uma invocação por processo ou por aplicativo.
As situações em que você não quer ou não precisa usar a biblioteca de intercepção incluem as seguintes:
- Somente aplicativos criados com libc podem usar a biblioteca de interceptação.
- Se você tiver uma carga de trabalho que se beneficia do armazenamento em cache, como acessar os mesmos arquivos repetidamente, recomendamos não usar a biblioteca de interceptação.
- Se a carga de trabalho for intensiva em metadados, como trabalhar com muitos arquivos pequenos ou uma lista de diretórios muito grande, a biblioteca de interceptação provavelmente não vai melhorar o desempenho.
A invocação LD_PRELOAD
pode ser definida como uma variável de ambiente no
ambiente de shell, mas isso pode causar problemas. Recomendamos
especificar o comando com cada comando.
Como alternativa, é possível vincular a biblioteca de intercepção ao
app no momento da compilação com a flag -lioil
.
Armazenamento em cache de dfuse
O armazenamento em cache é ativado em dfuse
por padrão.
Há duas flags relacionadas ao cache usadas por dfuse
ao montar uma
instância do Parallelstore:
--disable-wb-cache
usa o armazenamento em cache de gravação em vez de gravação de retorno.--disable-caching
desativa todo o armazenamento em cache.
As sugestões a seguir se aplicam ao armazenamento em cache e à performance:
- Se você estiver usando a biblioteca de intercepção, o armazenamento em cache de gravação de retorno será ignorado. Recomendamos
especificar
--disable-wb-cache
ao usar a biblioteca de intercepção. - Se a carga de trabalho envolver a leitura de muitos arquivos de uma só vez, desative o armazenamento em cache.
- Para cargas de trabalho que envolvem muitos clientes modificando arquivos e as atualizações precisam estar disponíveis imediatamente para outros clientes, desative o armazenamento em cache.
- Se a carga de trabalho estiver lendo os mesmos arquivos repetidamente, o armazenamento em cache pode melhorar
o desempenho. Isso é especialmente verdadeiro se os arquivos se encaixarem na
memória dos clientes. O
dfuse
usa o cache de página do Linux para armazenamento em cache. Para cargas de trabalho que consistem em pequenas E/Ss para arquivos grandes, além de ativar o cache, aumentar a leitura antecipada difusa pode ser benéfico. Para aumentar a leitura antecipada difusa, depois que
dfuse
for montado, execute os seguintes comandos:echo 4096 > /sys/class/bdi/\$(mountpoint -d /mnt)/read_ahead_kb echo 100 > /sys/class/bdi/\$(mountpoint -d /mnt)/max_ratio
Se as cargas de trabalho envolverem uma mistura dos cenários anteriores, será possível montar a mesma instância do Parallelstore em vários pontos de montagem com diferentes configurações de armazenamento em cache.
Contagem de threads e de filas de eventos
Ao montar a instância do Parallelstore, recomendamos os seguintes valores
para --thread-count
e --eq-count
:
- O valor da contagem de linhas não pode exceder o número de núcleos de vCPU.
- O valor máximo recomendado de contagem de linhas é entre 16 e 20. Além desse número, há pouco ou nenhum benefício de desempenho, independentemente do número de cores disponíveis.
- O valor da fila de eventos precisa ser metade do valor da contagem de linhas.
Se a carga de trabalho envolver um número muito alto de operações de arquivos pequenos e acesso intensivo a metadados, tente aumentar os números além dessas recomendações.
Configuração de remoção de arquivos
O striping de arquivos é uma técnica de armazenamento de dados em que um arquivo é dividido em blocos, ou faixas, e distribuído em vários destinos de armazenamento. O striping de arquivos pode aumentar a performance, permitindo leituras e gravações paralelas em mais de um destino de armazenamento que dá suporte à instância.
Ao criar a instância do Parallelstore, você pode especificar uma das três configurações de remoção de arquivos:
- Mínimo
- Equilibrada
- Máximo
Essas configurações podem ter uma importação significativa na performance do Parallelstore. Para a maioria das cargas de trabalho, recomendamos a configuração equilibrada, que é um compromisso razoável para a maioria das cargas de trabalho. Se a performance com a configuração equilibrada não for aceitável:
A configuração mínima pode melhorar o desempenho de cargas de trabalho com muitos arquivos pequenos, principalmente quando o tamanho médio do arquivo é menor que 256 KB.
A configuração máxima pode melhorar o desempenho de cargas de trabalho com arquivos muito grandes, geralmente maiores que 8 GB, especialmente quando muitos clientes compartilham o acesso aos mesmos arquivos.
Para ajustes avançados, a ferramenta daos
fornece configurações por arquivo ou
diretório. Experimentar a otimização avançada traz riscos relacionados ao desempenho
e geralmente não é recomendado. Consulte
Como entender a redundância de dados e o fragmentação em DAOS para mais
detalhes.
Configuração de remoção de diretórios
Ao criar a instância do Parallelstore, é possível especificar uma das três configurações de remoção de diretório:
- Mínimo
- Equilibrada
- Máximo
Para a maioria das cargas de trabalho, recomendamos a configuração máxima.
Para cargas de trabalho que envolvem muitas listagens de diretórios grandes, as configurações equilibradas ou mínimas podem resultar em uma melhor performance de lista. No entanto, o desempenho de outras operações, principalmente a criação de arquivos, pode ser afetado.
multiusuário
Ao usar a ferramenta dfuse
para montar a instância do Parallelstore, recomendamos
especificar a flag --multi-user
. Essa flag informa ao kernel para disponibilizar o sistema
de arquivos a todos os usuários em um cliente, em vez de apenas o usuário que executa
o processo DFuse. O DFuse aparece como um sistema de arquivos genérico para vários usuários,
e as chamadas chown
e chgrp
padrão são ativadas. Todas as entradas
do sistema de arquivos são de propriedade do usuário que as criou, como é normal em um
sistema de arquivos POSIX.
Ao especificar a flag --multi-user
, você também precisa atualizar /etc/fuse.conf
como raiz adicionando a seguinte linha:
user_allow_other
Não parece haver uma implicação de desempenho ao montar sua instância como multiusuário.
Configuração de codificação de exclusão
A codificação de apagamento está definida como 2+1. Não é possível alterar essa configuração. Qualquer E/S que não use EC2+1 é rejeitada.
Alocação de recursos de contêiner sidecar do Google Kubernetes Engine
Na maioria dos casos, a performance insatisfatória com o Google Kubernetes Engine e o Parallelstore é causada por CPU ou memória insuficiente alocada para o contêiner sidecar do Parallelstore. Para alocar recursos corretamente, considere as seguintes sugestões:
Leia as considerações destacadas em Configurar recursos para o contêiner de arquivo secundário. Você vai aprender por que pode ser necessário aumentar a alocação de recursos e como configurar a alocação de recursos do contêiner sidecar usando anotações de pods.
É possível usar o valor
0
para desativar todos os limites ou solicitações de recursos em clusters padrão. Por exemplo, ao definirgke-parallelstore/cpu-limit: 0
egke-parallelstore/memory-limit: 0
, os limites de CPU e memória do contêiner do sidecar vão ficar vazios, e as solicitações padrão serão usadas. Essa configuração é útil quando você não sabe quantos recursos o dfuse precisa para as cargas de trabalho e quer que ele use todos os recursos disponíveis em um nó. Depois de descobrir quantos recursos o dfuse precisa com base nas métricas da carga de trabalho, é possível definir os limites apropriados.Em clusters do Autopilot, não é possível usar o valor
0
para cancelar a definição dos limites e das solicitações de recursos do contêiner sidecar. É necessário definir explicitamente um limite de recursos maior para o contêiner de sidecar em clusters do Autopilot e usar métricas Google Cloud para decidir se é necessário aumentar o limite de recursos.