O design dos barramentos de E/S representa as artérias do computador e determina significativamente quanto e a rapidez com que os dados podem ser trocados entre os componentes únicos listados acima. A categoria superior é liderada por componentes usados no campo da computação de alto desempenho (HPC). Em meados de 2020, entre os representantes contemporâneos do HPC estão Nvidia Tesla e DGX, Radeon Instinct e Intel Xeon Phi Phi GPU Products (consulte [1,2] para comparações de produtos).
Entendendo o NUMA
Acesso à memória não uniforme (NUMA) descreve uma arquitetura de memória compartilhada usada em sistemas de multiprocessamento contemporâneos. O NUMA é um sistema de computação composto por vários nós únicos de tal maneira que a memória agregada é compartilhada entre todos os nós: “Cada CPU recebe sua própria memória local e pode acessar a memória de outras CPUs no sistema” [12,7].
O NUMA é um sistema inteligente usado para conectar várias unidades de processamento central (CPU) a qualquer quantidade de memória de computador disponível no computador. Os nós NUMA únicos são conectados sobre uma rede escalável (barramento de E/S), de modo que uma CPU possa acessar sistematicamente a memória associada a outros nós NUMA.
Memória local é a memória que a CPU está usando em um nó NUMA específico. Memória estrangeira ou remota é a memória que uma CPU está tirando de outro nó NUMA. O termo relação NUMA descreve a proporção do custo de acessar a memória estrangeira e o custo de acessar a memória local. Quanto maior a proporção, maior o custo e, portanto, mais tempo necessário para acessar a memória.
No entanto, leva mais tempo do que quando a CPU está acessando sua própria memória local. O acesso à memória local é uma grande vantagem, pois combina baixa latência com alta largura de banda. Por outro lado, o acesso à memória pertencente a qualquer outra CPU tem maior latência e menor desempenho em largura de banda.
Olhando para trás: Evolução de multiprocessadores de memória compartilhada
Frank Dennemann [8] afirma que as arquiteturas modernas do sistema não permitem acesso verdadeiramente uniforme de memória (Uma), mesmo que esses sistemas sejam projetados especificamente para esse fim. Simplesmente falando, a idéia de computação paralela era ter um grupo de processadores que cooperam para calcular uma determinada tarefa, acelerando assim um cálculo seqüencial de outra forma clássica.
Conforme explicado por Frank Dennemann [8], no início da década de 1970, “a necessidade de sistemas que poderiam atender a várias operações simultâneas do usuário e a geração excessiva de dados se tornou o mainstream” com a introdução de sistemas de banco de dados relacionais. “Apesar da impressionante taxa de desempenho do Uniprocessor, os sistemas multiprocessadores estavam melhor equipados para lidar com essa carga de trabalho. Para fornecer um sistema econômico, o espaço de endereço de memória compartilhado se tornou o foco da pesquisa. No início, os sistemas usando uma troca de barra transversal foram defendidos, no entanto, com essa complexidade de design escalada junto com o aumento de processadores, o que tornou o sistema baseado em barramento mais atraente. Os processadores em um sistema de barramento [podem] acessar todo o espaço de memória enviando solicitações no barramento, uma maneira muito econômica de usar a memória disponível o mais ideal possível.”
No entanto, os sistemas de computador baseados em ônibus vêm com um gargalo - a quantidade limitada de largura de banda que leva a problemas de escalabilidade. Quanto mais CPUs adicionadas ao sistema, menos largura de banda por nó disponível. Além disso, quanto mais CPUs são adicionadas, mais tempo o ônibus e maior a latência como resultado.
A maioria das CPUs foi construída em um plano bidimensional. As CPUs também precisavam ter controladores de memória integrados adicionados. A solução simples de ter quatro ônibus de memória (superior, inferior, esquerda, direita) para cada núcleo da CPU permitiu largura de banda disponível completa, mas isso vai até agora até agora. As CPUs estagnaram com quatro núcleos por um tempo considerável. Adicionar traços acima e abaixo permitiu ônibus direto para as CPUs na diagonal, à medida que os chips se tornaram 3D. Colocar uma CPU de quatro corados em um cartão, que depois conectou a um ônibus, foi a próxima etapa lógica.
Hoje, cada processador contém muitos núcleos com um cache compartilhado no chip e uma memória fora do chip e possui custos variáveis de acesso à memória em diferentes partes da memória em um servidor.
Melhorar a eficiência do acesso a dados é um dos principais objetivos do design da CPU contemporânea. Cada núcleo da CPU foi dotado de um pequeno cache de nível um (32 kb) e um cache de nível 2 maior (256 kb). Os vários núcleos compartilhariam mais tarde um cache de nível 3 de vários MB, cujo tamanho cresceu consideravelmente ao longo do tempo.
Para evitar erros de cache - solicitando dados que não estejam no cache - muito tempo de pesquisa é gasto para encontrar o número certo de caches de CPU, estruturas de cache e algoritmos correspondentes. Veja [8] para obter uma explicação mais detalhada do protocolo para cache Snoop [4] e coerência do cache [3,5], bem como as idéias de design por trás do NUMA.
Suporte de software para NUMA
Existem duas medidas de otimização de software que podem melhorar o desempenho de um sistema que suporta a arquitetura da NUMA - afinidade do processador e colocação de dados. Conforme explicado em [19], “a afinidade do processador […] permite a ligação e desbaste de um processo ou um thread para uma única CPU, ou uma variedade de CPUs para que o processo ou thread seja executado apenas na CPU ou CPUs designada, em vez disso do que qualquer CPU."O termo" colocação de dados "refere -se a modificações de software nas quais o código e os dados são mantidos o mais próximo possível da memória.
Os diferentes sistemas operacionais relacionados ao Unix e UNIX suportam o NUMA das seguintes maneiras (a lista abaixo é retirada de [14]):
No livro “Ciência da Computação e Tecnologia, Anais da Conferência Internacional (CST2016)” Ning Cai sugere que o estudo da arquitetura da NUMA estava focado principalmente no ambiente de computação de ponta e proposta de partição da Radix com reconhecimento de NUMA (NARP), que otimiza O desempenho de caches compartilhados em nós NUMA para acelerar aplicativos de inteligência de negócios. Como tal, o NUMA representa um meio termo entre os sistemas de memória compartilhada (SMP) com alguns processadores [6].
NUMA e Linux
Como afirmado acima, o kernel Linux suportou o NUMA desde a versão 2.5. Tanto o Debian GNU/Linux quanto o Ubuntu oferecem suporte NUMA para otimização de processos com os dois pacotes de software numactl [16] e Numad [17]. Com a ajuda do comando numactl, você pode listar o inventário dos nós NUMA disponíveis em seu sistema [18]:
# numactl -hardware
Disponível: 2 nós (0-1)
Nó 0 CPUS: 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 23
Nó 0 tamanho: 8157 MB
Nó 0 grátis: 88 MB
Nó 1 CPUS: 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31
Nó 1 Tamanho: 8191 MB
Nó 1 grátis: 5176 MB
Distâncias do nó:
Nó 0 1
0: 10 20
1: 20 10
O Numatop é uma ferramenta útil desenvolvida pela Intel para monitorar a localidade da memória de tempo de execução e analisar processos em sistemas NUMA [10,11]. A ferramenta pode identificar potenciais gargalos de desempenho relacionados à NUMA e, portanto, ajudar a reequilibrar alocações de memória/CPU para maximizar o potencial de um sistema NUMA. Veja [9] para uma descrição mais detalhada.
Cenários de uso
Os computadores que suportam a tecnologia NUMA permitem que todas as CPUs acessem a memória inteira diretamente - as CPUs veem isso como um único espaço de endereço linear. Isso leva a um uso mais eficiente do esquema de endereçamento de 64 bits, resultando em um movimento mais rápido de dados, menos replicação de dados e programação mais fácil.
Os sistemas NUMA são bastante atraentes para aplicativos do lado do servidor, como mineração de dados e sistemas de suporte à decisão. Além disso, escrever aplicativos para jogos e software de alto desempenho se torna muito mais fácil com esta arquitetura.
Conclusão
Em conclusão, a NUMA Architecture aborda a escalabilidade, que é um de seus principais benefícios. Em uma CPU NUMA, um nó terá uma largura de banda mais alta ou menor latência para acessar a memória no mesmo nó (e.g., A CPU local solicita acesso à memória ao mesmo tempo que o acesso remoto; A prioridade está na CPU local). Isso melhorará drasticamente a taxa de transferência da memória se os dados estiverem localizados em processos específicos (e, portanto, processadores). As desvantagens são os custos mais altos da movimentação de dados de um processador para outro. Enquanto este caso não acontecer com muita frequência, um sistema NUMA superará os sistemas com uma arquitetura mais tradicional.
Links e referências
Obrigado
Os autores gostariam de agradecer a Gerold Rupplrecht por seu apoio ao preparar este artigo.
sobre os autores
O Plaxedes Nehanda é uma pessoa versátil multiskililded e auto-acionada que usa muitos chapéus, entre eles, um planejador de eventos, um assistente virtual, um transcritor, além de um ávido pesquisador, com sede em Joanesburgo, África do Sul.
Príncipe k. Nehanda é um engenheiro de instrumentação e controle (metrologia) na medição Paeflow em Harare, Zimbábue.
Frank Hofmann trabalha na estrada - de preferência a partir de Berlim (Alemanha), Genebra (Suíça) e Cidade do Cabo (África do Sul) - como desenvolvedor, treinador e autor de revistas como Linux -User e Linux Magazine. Ele também é o co-autor do Livro de Gerenciamento de Pacotes Debian (http: // www.DPMB.org).