Esta página fornece orientações sobre a configuração do seu ambiente Parallelstore para obter o melhor desempenho.
Recomendações gerais
Remova todos os alias de
ls
para melhorar o desempenho predefinido. Em muitos sistemas, é um alias dels -color=auto
, que é muito mais lento com a configuração Parallelstore predefinida.Se o desempenho das operações de listas for lento, considere ativar o armazenamento em cache para a montagem do dfuse.
Biblioteca de interceção
A biblioteca libioil
pode ser usada para melhorar o desempenho das operações de leitura e escrita no DFuse a partir de aplicações que usam a libc. A biblioteca ignora o kernel intercetando as chamadas de leitura e escrita POSIX da aplicação para as processar diretamente no espaço do utilizador. Consulte a
biblioteca de interceção para
mais detalhes.
Na maioria dos casos, recomendamos a utilização da biblioteca de interceção numa invocação por processo ou por aplicação.
As situações em que pode não querer ou não precisar de usar a biblioteca de interceção incluem o seguinte:
- Apenas as aplicações criadas com a libc podem usar a biblioteca de interceção.
- Se tiver uma carga de trabalho que beneficie da colocação em cache, como o acesso repetido aos mesmos ficheiros, recomendamos que não use a biblioteca de interceção.
- Se a sua carga de trabalho for intensiva em metadados, como trabalhar com muitos ficheiros pequenos ou uma listagem de diretórios muito grande, é provável que a biblioteca de interceção não melhore o desempenho.
A invocação LD_PRELOAD
pode ser definida como uma variável de ambiente no seu ambiente de shell, mas, por vezes, isto pode causar problemas. Recomendamos que, em alternativa, o especifique com cada comando.
Em alternativa, é possível associar a biblioteca de interceção à sua aplicação no momento da compilação com a flag -lioil
.
dfuse
colocação em cache
A colocação em cache está ativada no dfuse
por predefinição.
Existem duas flags relacionadas com a cache usadas pelo dfuse
quando monta uma instância do Parallelstore:
--disable-wb-cache
usa a escrita direta em vez do armazenamento em cache de escrita posterior.--disable-caching
desativa toda a colocação em cache.
As seguintes sugestões aplicam-se à colocação em cache e ao desempenho:
- Se estiver a usar a biblioteca de interceção, o armazenamento em cache de gravação é ignorado. Recomendamos que especifique
--disable-wb-cache
quando usar a biblioteca de interceção. - Se a sua carga de trabalho envolver a leitura de muitos ficheiros uma vez, deve desativar o armazenamento em cache.
- Para cargas de trabalho que envolvem muitos clientes a modificar ficheiros e as atualizações têm de estar imediatamente disponíveis para outros clientes, tem de desativar o armazenamento em cache.
- Se a sua carga de trabalho estiver a ler os mesmos ficheiros repetidamente, a colocação em cache pode melhorar o desempenho. Isto é particularmente verdade se os ficheiros se enquadrarem na memória dos clientes.
dfuse
usa a cache de páginas do Linux para o armazenamento em cache. Para cargas de trabalho que consistam em pequenas E/S para ficheiros grandes, além de ativar o armazenamento em cache, aumentar a leitura antecipada do dfuse pode ser benéfico. Para aumentar a leitura antecipada do dfuse, depois de
dfuse
ter sido 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 suas cargas de trabalho envolverem uma combinação dos cenários anteriores, pode montar a mesma instância do Parallelstore em vários pontos de montagem com diferentes definições de colocação em cache.
Contagem de threads e contagem 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 threads não deve exceder o número de núcleos de vCPU.
- O valor máximo recomendado para o número de threads está entre 16 e 20. Além deste número, não existe qualquer vantagem em termos de desempenho, independentemente do número de núcleos disponíveis.
- O valor da fila de eventos deve ser metade do valor da contagem de threads.
Se a sua carga de trabalho envolver um número muito elevado de operações de ficheiros pequenos e acesso intenso a metadados, pode experimentar aumentar os números além destas recomendações.
Definição de divisão de ficheiros
A divisão de ficheiros em faixas é uma técnica de armazenamento de dados em que um ficheiro é dividido em blocos ou faixas e distribuído por vários destinos de armazenamento. A divisão de ficheiros em faixas pode aumentar o desempenho, permitindo leituras e gravações paralelas em mais do que um destino de armazenamento que suporta a instância.
Quando cria a sua instância da Parallelstore, pode especificar uma de três definições de divisão de ficheiros:
- Mínimo
- Equilibrado
- Máximo
Estas definições podem ter um impacto significativo no desempenho da Parallelstore. Para a maioria das cargas de trabalho, recomendamos a definição equilibrada, que deve ser um compromisso razoável para a maioria das cargas de trabalho. Se o desempenho com a definição equilibrada não for aceitável:
A definição mínima pode melhorar o desempenho para cargas de trabalho com muitos ficheiros pequenos, especialmente quando o tamanho médio do ficheiro é inferior a 256 KB.
A definição máxima pode melhorar o desempenho para cargas de trabalho com ficheiros muito grandes, geralmente superiores a 8 GB, especialmente quando muitos clientes partilham o acesso aos mesmos ficheiros.
Para uma otimização avançada, a ferramenta daos
oferece definições por ficheiro ou por diretório. A experimentação com a otimização avançada acarreta riscos relacionados com o desempenho e, geralmente, não é recomendada. Consulte o artigo
Compreender a redundância e a divisão de dados no DAOS para ver mais
detalhes.
Definição de divisão de diretórios
Quando cria a sua instância do Parallelstore, pode especificar uma de três definições de divisão de diretórios:
- Mínimo
- Equilibrado
- Máximo
Para a maioria das cargas de trabalho, recomendamos a definição máxima.
Para cargas de trabalho que envolvem muitas listagens de diretórios grandes, as definições equilibradas ou mínimas podem resultar num melhor desempenho da lista. No entanto, o desempenho de outras operações, particularmente a criação de ficheiros, pode ser afetado.
multiutilizador
Quando usar a ferramenta dfuse
para montar a sua instância do Parallelstore, recomendamos que especifique a flag --multi-user
. Esta flag indica ao kernel que disponibilize o sistema de ficheiros a todos os utilizadores num cliente, em vez de apenas ao utilizador que executa o processo DFuse. O DFuse é apresentado como um sistema de ficheiros multiutilizador genérico e as chamadas chown
e chgrp
padrão são ativadas. Todas as entradas do sistema de ficheiros são propriedade do utilizador que as criou, como é normal num sistema de ficheiros POSIX.
Quando especificar a flag --multi-user
, também tem de atualizar /etc/fuse.conf
como raiz adicionando a seguinte linha:
user_allow_other
Não parece haver implicações no desempenho ao montar a sua instância como multiutilizador.
Definição de codificação de eliminação
A codificação de apagamento está definida como 2+1. Não é possível alterar esta definição. Qualquer E/S que não use EC2+1 é rejeitada.
Alocação de recursos do contentor sidecar do Google Kubernetes Engine
Na maioria dos casos, o desempenho insatisfatório com o Google Kubernetes Engine e o Parallelstore é causado por uma CPU ou uma memória insuficiente atribuída ao contentor sidecar do Parallelstore. Para atribuir recursos corretamente, considere as seguintes sugestões:
Leia as considerações realçadas no artigo Configure recursos para o contentor auxiliar. Vai saber por que motivo pode ter de aumentar a atribuição de recursos e como configurar a atribuição de recursos do contentor auxiliar através de anotações de pods.
Pode usar o valor
0
para desativar quaisquer limites de recursos ou pedidos em clusters padrão. Por exemplo, se definirgke-parallelstore/cpu-limit: 0
egke-parallelstore/memory-limit: 0
, os limites de CPU e memória do contentor sidecar ficam vazios e são usadas as solicitações predefinidas. Esta definição é útil quando não sabe quantos recursos o dfuse precisa para as suas cargas de trabalho e quer que use todos os recursos disponíveis num nó. Depois de determinar quantos recursos o dfuse precisa com base nas métricas da carga de trabalho, pode definir limites adequados.Nos clusters do Autopilot, não pode usar o valor
0
para anular a definição dos limites e dos pedidos de recursos do contentor auxiliar. Tem de definir explicitamente um limite de recursos superior para o contentor sidecar em clusters do Autopilot e basear-se nas métricas para decidir se é necessário aumentar o limite de recursos. Google Cloud