Entendendo a arquitetura da NUMA

Entendendo a arquitetura da NUMA
Projetar computadores é sempre um compromisso. Os quatro componentes básicos de um computador - a unidade central de processamento (CPU) ou processador, a memória, o armazenamento e a placa para conectar os componentes (sistema de barramento de E/S) - são combinados o mais inteligente possível para criar uma máquina que é econômico e poderoso. O processo de design envolve principalmente uma otimização em relação aos processadores (co-processadores, configuração de vários núcleos), tipo de memória e quantidade, armazenamento (discos, sistema de arquivos) e preço.A idéia por trás dos co-processadores e da arquitetura de vários núcleos é distribuir operações para tantas unidades de computação única no menor espaço possível e tornar a execução paralela das instruções de computação mais disponíveis e acessíveis. Em termos de memória, é uma questão da quantidade ou tamanho que pode ser abordada pela unidade de computação individual e qual tipo de memória funciona com a menor latência possível. O armazenamento pertence à memória externa e seu desempenho depende do tipo de disco, o sistema de arquivos que está em uso, encadeamento, protocolo de transferência, tecido de comunicação e o número de dispositivos de memória anexados.

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]):

  • Silicon Graphics IRIX Suporte para a arquitetura CCNUMA sobre 1240 CPU com série de servidores de origem.
  • Microsoft Windows 7 e Windows Server 2008 R2 Adicionado suporte para a arquitetura NUMA Mais de 64 núcleos lógicos.
  • Versão 2.5 do kernel Linux já continham suporte básico de NUMA, que foi melhorado ainda mais nos lançamentos subsequentes do kernel. Versão 3.8 do kernel Linux trouxe uma nova fundação NUMA que permitiu o desenvolvimento de políticas de NUMA mais eficientes nos lançamentos posteriores do kernel [13]. Versão 3.13 do kernel Linux trouxe inúmeras políticas que visam colocar um processo próximo à sua memória, juntamente com o manuseio de casos, como ter páginas de memória compartilhadas entre processos ou o uso de páginas enormes transparentes; As novas configurações de controle do sistema permitem que o balanceamento NUMA seja ativado ou desativado, bem como a configuração de vários parâmetros de balanceamento de memória da NUMA [15].
  • Tanto o Oracle quanto o OpenSolaris modelo NUMA Architecture com a introdução de grupos lógicos.
  • FreeBSD adicionou a afinidade inicial e a configuração de políticas na versão 11.0.

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

  1. Compare Nvidia Tesla vs. Radeon Instinct, https: // www.ItCentralStation.com/produtos/comparações/nvidia-tesla_vs_radeon-Instinct
  2. Compare nvidia dgx-1 vs. Radeon Instinct, https: // www.ItCentralStation.com/produtos/comparações/nvidia-dgx-1_vs_radeon-Instinct
  3. Coerência de cache, Wikipedia, https: // en pat.Wikipedia.org/wiki/cache_cohence
  4. BuS Snooping, Wikipedia, https: // pt.Wikipedia.org/wiki/bus_snooping
  5. Protocolos de coerência de cache em sistemas multiprocessadores, geeks para geeks, https: // www.Geeksforgeeks.Org/cache-coerência-protocolo-em-multiprocessor-System/
  6. Ciência da Computação e Tecnologia - Anais da Conferência Internacional (CST2016), Ning Cai (Ed.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
  7. Daniel p. Bovet e Marco Cesati: Compreendendo a Arquitetura da NUMA na compreensão do kernel Linux, 3ª edição, O'Reilly, https: // www.Oreilly.com/biblioteca/view/compreende-linux/0596005652/
  8. Frank Dennemann: Numa Deep Dive Part 1: De Uma a Numa, https: // Frankdenneman.NL/2016/07/07/NUMA-DIVE-DIVE-PART-1-UMA-NUMA/
  9. Colin Ian King: Numatop: uma ferramenta de monitoramento do sistema NUMA, http: // smackerelofopinion.Blogspot.com/2015/09/numatop-numa-system-monitoring-tool.html
  10. Numatop, https: // github.com/Intel/Numatop
  11. Pacote Numatop para Debian GNU/Linux, https: // pacotes.Debian.org/buster/numatop
  12. Jonathan Kehayias: Entendendo o acesso/arquiteturas não uniformes de memória (NUMA), https: // www.SQLSKILLS.com/blogs/jonathan/compreensivo-não-uniforme-mesemory-accessarchitectures-numa/
  13. Linux Kernel News para Kernel 3.8, https: // kernelnewbies.org/linux_3.8
  14. Acesso à memória não uniforme (NUMA), Wikipedia, https: // pt.Wikipedia.org/wiki/não uniforme_memory_access
  15. Documentação de Gerenciamento de Memória Linux, NUMA, https: // www.núcleo.org/doc/html/v4.18/VM/NUMA.html
  16. Pacote Numactl para Debian GNU/Linux, https: // pacotes.Debian.org/sid/admin/numactl
  17. Pacote Numad for Debian GNU/Linux, https: // pacotes.Debian.org/buster/numad
  18. Como encontrar se a configuração do NUMA está ativada ou desativada?, https: // www.ThegeekDiary.com/centos-rhel-como para encontrar-se-numa-configuração-is-inabled-ou-Disabled//
  19. Afinidade do Processador, Wikipedia, https: // pt.Wikipedia.org/wiki/processor_affinity

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).