02 ‐ Características - arcarneiro/teste-doc-sdumont GitHub Wiki
Conjunto de equipamentos, adquiridos em 2019, baseados na tecnologia BullSequana. Este ambiente é composto de 2x Células BullSequana X1000 (que atinge um total de 4,0 Pflops RPeak - Theoretical peak) com processadores Intel, GPU NVIDIA, Armazenamento Lustre e conectividade de Alto desempenho (Infiniband EDR de 100Gb/s).
No total, o ambiente conta com 18.048 núcleos de CPU e 376 GPUs, distribuídos em 376 nós computacionais, possuindo a configuração abaixo.
- 246 nós computacionais Bull Sequana X1120 (CPU)
- 2x Intel Xeon Cascade Lake Gold 6252
- 48 núcleos (24c por CPU)
- 384 GB de memória RAM
- 36 nós computacionais Bull Sequana X1120 (CPU)
- 2x Intel Xeon Cascade Lake Gold 6252
- 48 núcleos (24c por CPU)
- 768 GB de memória RAM
- 94 nós computacionais Bull Sequana X1120 (GPU)
- 2x Intel Xeon Skylake 6252
- 48 núcleos (24c por CPU)
- 384 GB de memória RAM
- 4x NVIDIA Volta V100 GPU
O SDumont conta com um Filesystem Lustre v2.12, utilizado como "Scratch", implementado através do ClusterStor 9000 v3.3 da Cray/HPE. Essa implementação do Lustre é composta por 1 nó MDS (com 1 MDT) e 10 nós OSSs (cada um servindo 1 OST), disponibilizando um espaço total de armazenamento de 1,7 PB (Nota: Esse equipamento, denominado Lustre Base, é da primeira versão do SDumont. Tendo sido instalado em 2015, foi descontinuado em 2025).
Atualmente (a partir de 2025), o principal Filesystem Lustre utilizado no SDumont como "Scratch" é implementado através do ClusterStor L300 da Cray/HPE. Essa implementação do Lustre é composta por 1 nó MDS (com 1 MDT) e 6 nós OSSs (cada um servindo 1 OST), disponibilizando um espaço total de armazenamento de 1,1 PB.
O "Home" dos usuários (acessível apenas no nó de login), é fornecido através de NFS pelo storage DellEMC ISILON, disponibilizando um espaço total de 650 TB.
Essas áreas de armazenamento devem ser utilizadas da seguinte forma:
-
Scratch: Estrutura montada a partir do diretório /scratch. Utilizado para armazenar todos os arquivos que serão utilizados durante a execução de um job (scripts de submissão, executáveis, dados de entrada, dados de saída etc).
- Cada projeto possui um espaço de armazenamento (/scratch/NOME-DO-PROJETO), cujo tamanho depende do tipo do programa de alocação e da quantidade solicitada, e é compartilhado por todos os usuários do projeto.
- Cada usuário possui um diretório dentro dessa área (/scratch/NOME-DO-PROJETO/USERNAME), que pode ser acessado diretamente através da variável de ambiente $SCRATCH (configurada automaticamente durante o login).
- IMPORTANTE: os arquivos presentes no Scratch são passíveis de remoção automática após 60 dias sem terem sido modificados. Por isso se sugere que, assim que um job termine sua execução, os dados relevantes que resultem do job sejam transferidos para a área de armazenamento do Home.
- Home: Estrutura montada a partir do diretório /prj/HOME-DO-PROJETO. Utilizado para armazenar códigos-fonte, binários executáveis, bibliotecas, resultados e demais arquivos que se queira manter durante toda a vigência do projeto.
- Cada projeto possui um espaço de armazenamento, cujo tamanho depende do tipo do programa de alocação e da quantidade solicitada, e que é compartilhado por todos os usuários do projeto.
O Filesystem Lustre é composto de um conjunto subjacente de servidores de I/O e discos, chamados respectivamente de Object Storage Servers (OSSs) e Objetct Storage Targets (OSTs).
Um dos principais fatores que impulsionam o alto desempenho do Filesystem Lustre é a capacidade de dividir os arquivos em stripes, sendo cada stripe armazenado em um servidor diferente. Quando essa divisão ocorre, as operações de leitura e escrita acessam simultaneamente os servidores e seus discos para obter os dados do arquivo.
O número de stripes em que um único arquivo pode ser dividido é chamado de O <tt>stripe_size define qual será o tamanho do stripe, sendo 4GB o limite máximo.
Os valores padrão para o stripe_count e stripe_size definidos para o Scratch são 1 e 1MB, respectivamente.
Logo, por padrão, os arquivos armazenados no /scratch não são divididos em stripes.
Os usuários podem opcionalmente configurar o número de stripes e o tamanho de cada stripe para arquivos ou diretórios.
A configuração do striping depende das necessidades de cada caso.
Algumas razões para utilizar o striping incluem:
- Fornece alta largura de banda para o acesso: Muitas aplicações necessitam de uma alta largura de banda para acessar um único arquivo, que pode ser maior que a largura de banda fornecida por um único servidor. Alguns exemplos são as aplicações que escrevem em um único arquivo a partir de centenas de nós. Nesses casos, um arquivo pode ser dividido em stripes através da quantidade servidores que for necessário para alcançar a largura de banda agregada necessária para esse arquivo. Dividir o arquivo em stripes através de um grande número de OSSs/OSTs deve ser usado somente quando o arquivo for muito grande e/ou é acessado por muitos nós ao mesmo tempo.
- Fornece espaço para arquivos muito grandes: O Striping é útil quando um único servidor não possui espaço suficiente para armazenar um arquivo inteiro.
- Aumento do overhead: O striping resulta em mais locks e operações extras da rede.
- Aumento do risco: Quando os arquivos são divididos em stripes através de todos os servidores, e um destes falha, uma pequena parte de cada arquivo é perdida, que pode vir a gerar corrupção de dados.
Escolher o stripe_size é um ato de balanceamento. Algumas dicas são:
- O stripe_size possui nenhum efeito prático em um arquivo que possui stripe_count igual a 1.
- O stripe_size deve ser um múltiplo de 64KB.
- O menor stripe_size recomendado é 512KB. Embora seja possível criar arquivos com um tamanho de stripe de 64KB, o menor stripe_size prático é 512KB porque o filesystem Lustre envia chunks de 1MB através da rede. Escolhendo um tamanho menor para o stripe_size pode resultar em I/O ineficiente e desempenho reduzido.
- Um bom tamanho de stripe para I/O sequencial é entre 1MB e 4MB. Na maioria das situações, configurar o stripe_size com valores maiores do que 4MB pode resultar em tempos mais longos em que os locks são mantidos, assim como disputas durante o acesso a arquivos compartilhados.
- O valor máximo para o stripe_size é de 4GB. Utilizar um tamanho grande para o stripe pode melhorar o desempenho quando acessando arquivos muito grandes. Isso permite que cada cliente tenha acesso exclusivo à sua própria parte do arquivo. Entretanto, um stripe_size grande pode ser contraprodutivo em casos onde ele não combina com o padrão das operações de I/O.
- Escolha um padrão de stripe_size que leve em consideração os padrões de escrita da aplicação. Se o arquivo é escrito de uma maneira consistente e alinhada, o tamanho do stripe deve ser um múltiplo do tamanho da operação de escrita.
O comando lfs setstripe é utilizado para configurar o striping de um arquivo ou diretório.
Para alterar o tamanho e número do stripe:
lfs setstripe [--stripe-size|-S stripe_size] [--stripe-count|-c stripe_count] filename|dirname
Exemplos:
#configura o striping para diretórios mkdir full_stripe lfs setstripe -S 4m -c -1 full_stripe mkdir single_stripe lfs setstripe -S 1m -c 1 single_stripe #configura o striping para um arquivo específico lfs setstripe -S 4m -c 5 five_stripes_file
ATENÇÃO:
- Configurar o stripe_count com o valor -1 faz com que o arquivo seja dividido por todos os servidores disponíveis.
- Configurar o striping em um diretório faz com que todos os arquivos que forem criados dentro dele herdem a sua configuração.
- É possível alterar a configuração de striping do diretório posteriormente.
- Para configurar o striping de um arquivo, este não pode existir previamente. O comando lfs setstripe criará um arquivo vazio, com a configuração de striping.
- Após configurado o striping para um arquivo, é possível alterá-lo com o comando lfs migrate.
lfs getstripe filename|dirname
Exemplos:
cd $SCRATCH lfs getstripe full_stripe lfs getstripe single_stripe lfs getstripe five_stripes_file
Para uma lista completa de todas as opções do utilitário lfs do Lustre:
lfs help lfs help option-name
Comandos mais utilizados:
- lfs osts - Lista todos os OSTs disponíveis no filesystem.
- lfs find - Realiza buscas na árvore de diretório. É recomendado utilizar esse comando em vez do find comum.
- lfs df - Exibe a utilização de espaço em disco do filesystem.
- lfs quota -h /scratch/PROJETO - Exibe a utilização de espaço do usuário em relação à quota.
- lfs quota -h -g PROJETO /scratch/PROJETO - Exibe a utilização de espaço do projeto em relação à quota.