Habilitando o NUMA para Intel Core i7

22

No kernel do Linux, a documentação para CONFIG_NUMAdiz:

Enable NUMA (Non Uniform Memory Access) support. 

he kernel will try to allocate memory used by a CPU on the  
local memory controller of the CPU and add some more
NUMA awareness to the kernel.

For 64-bit this is recommended if the system is Intel Core i7
(or later), AMD Opteron, or EM64T NUMA.

Eu tenho um processador Intel Core i7, mas o AFAICT possui apenas um nó NUMA:

$ numactl --hardware
available: 1 nodes (0)
node 0 cpus: 0 1 2 3 4 5 6 7
node 0 size: 16063 MB
node 0 free: 15031 MB
node distances:
node   0 
  0:  10 

Então, qual é o objetivo de ter CONFIG_NUMA=y, quando o i7 possui apenas um nó NUMA?

user1968963
fonte

Respostas:

13

Eu acho que essa imagem explica o suficiente:

                  insira a descrição da imagem aqui

  • socket ou numa node é uma coleção de núcleos com acesso local à memória. Cada soquete contém 1 ou mais núcleos. Observe que isso não se refere necessariamente a um soquete físico, mas à arquitetura de memória da máquina, que dependerá do fornecedor do chip.

  • núcleo do processador ( núcleo da CPU, processador lógico) refere-se a uma única unidade de processamento capaz de executar cálculos.

Portanto, o exposto acima indica que você precisaria de vários processadores na máquina para aproveitar a arquitetura NUMA.

Você pode ter compilado o suporte NUMA no kernel e executado na máquina de processador único. É semelhante ao suporte a SMP. Ele também é compilado, mas quando o kernel detecta que há um processador no sistema, ele não será utilizado (desative-o). O mesmo vale para a NUMA. Você pode verificar o arquivo dmesgou o buffer do anel do kernel /var/log/dmesgpara obter mensagens relacionadas:

NUMA - processador único (ou NUMA desativado) X multiprocessador:

No NUMA configuration found
NUMA: Allocated memnodemap from b000 - b440

SMP - processador único X multiprocessador:

SMP: Allowing 1 CPUs, 0 hotplug CPUs
SMP: Allowing 32 CPUs, 0 hotplug CPUs

Referências

dsmsk80
fonte
2
@slm - o que você diz faz sentido, mas por que a documentação do kernel (citado na minha pergunta) dizem que eu deveria permitir CONFIG_NUMApara core i7?
User1968963
1
Desde Haswell, não é mais verdade que o NUMA não serve para uma máquina de 'processador único' (ou seja, soquete único). Certos produtos Haswell apresentam o que a Intel chama de modo 'Cluster on Die'. O processador de soquete único possui vários controladores de memória integrados e, portanto, vários caminhos para a memória, que com esse recurso podem ser tratados como regiões NUMA distintas, todas abrangendo o soquete.
Paul Caheny
16
For 64-bit this is recommended if the system is Intel Core i7
(or later), AMD Opteron, or EM64T NUMA.

Primeiro, observe que o Intel Core i7 é apenas uma designação de marketing e a frase Intel Core i7 (ou posterior) é muito vaga. Então, o que isso poderia significar?

As Kconfigedições de texto de ajuda do kernel Linux mencionando um Intel Core 7i , depois corrigido para o Intel Core i7 , foram feitas em novembro de 2008. O log de confirmação diz:

x86: update CONFIG_NUMA description
Impact: clarify/update CONFIG_NUMA text

CONFIG_NUMA description talk about a bit old thing.
So, following changes are better.

 o CONFIG_NUMA is no longer EXPERIMENTAL

 o Opteron is not the only processor of NUMA topology on x86_64 no longer,
   but also Intel Core7i has it.

Ele pode razoavelmente se referir apenas aos processadores Intel Core i7 lançados ou anunciados por especificação naquele momento. Seriam os processadores Bloomfield , baseados na microarquitetura Nehalem , que transferiram o controlador de memória da Northbridge para a CPU (que a AMD havia feito em 2003 com o Opteron / AMD64) e introduziram o QuickPath Interconnect / QPI (como pendente do HyperTransport da AMD) para interconexão CPU / CPU e CPU / IOH (hub IO, ex-Northbridge).

As CPUs Bloomdale i7 foram as primeiras entradas no novo esquema de nomenclatura Core i {3,5,7} . Portanto, quando o texto do documento do Linux foi escrito, o i7 não se referiu especificamente ao Core i7 em vez do i5 (primeiro em 09/2009) ou i3 (primeiro em 01/2010), mas com toda a probabilidade da nova microarquitetura Nehalem com seu controlador de memória integrado e QPI.

Há um comunicado de imprensa da Intel de 11/2008 no i7 ( Intel lança o processador mais rápido do planeta ) que afirma que o processador Core i7 mais do que duplica a largura de banda de memória das plataformas Intel "Extreme" anteriores , mas não menciona nem o NUMA .

Acho que o motivo é que o NUMA não importa para PCs de mesa, nem mesmo para os "extremos".

O NUMA é importante para servidores caros que possuem vários soquetes de CPU (não apenas vários núcleos em um soquete) com faixas dedicadas de acesso à memória física (não apenas um controlador de memória), para que cada CPU tenha sua memória local dedicada, que é "mais próxima" do que a memória das outras CPUs. (Pense em 8 soquetes, 64 núcleos, 256 GB de RAM.) NUMA significa que uma CPU também pode acessar a memória remota (a memória local de outra CPU) além de sua própria memória local, embora a um custo mais alto. NUMA é a síntese de uma arquitetura de memória compartilhada como SMP, onde toda a memória está igualmente disponível para todos os núcleos, e uma arquitetura de memória distribuída como MPP (Massively Parallel Processing), que fornece a cada nó um bloco de memória dedicado. É MPP, mas parece SMP para o aplicativo.

As placas-mãe de desktop não têm soquetes duplos e as CPUs de desktop Intel, incluindo edições extremas i7, não possuem o link QPI adicional para a configuração de soquete duplo.

Verifique o artigo QPI da Wikipedia para ver como o QPI é relevante para o NUMA:

Em sua forma mais simples, em uma placa-mãe com processador único, um único QPI é usado para conectar o processador ao Hub IO (por exemplo, para conectar um Intel Core i7 a um X58). Em instâncias mais complexas da arquitetura, pares de links QPI separados conectam um ou mais processadores e um ou mais hubs de E / S ou roteadores em uma rede na placa-mãe, permitindo que todos os componentes acessem outros componentes pela rede. Como no HyperTransport, a Arquitetura do QuickPath pressupõe que os processadores terão controladores de memória integrados e permite uma arquitetura de acesso não uniforme à memória (NUMA).

[...]

Embora alguns processadores Core i7 de ponta exponham o QPI, outros processadores desktop e móveis Nehalem "convencionais" destinados a placas de soquete único (por exemplo, LGA 1156 Core i3, Core i5 e outros processadores Core i7 das famílias Lynnfield / Clarksfield e sucessores) não exponha o QPI externamente, porque esses processadores não se destinam a participar de sistemas com vários soquetes. No entanto, o QPI é usado internamente nesses chips […]

A maneira como uma CPU Intel Nehalem em uma placa de servidor com vários soquetes torna o acesso à memória não local é via QPI. Também no artigo sobre NUMA :

A Intel anunciou a compatibilidade NUMA para seus servidores x86 e Itanium no final de 2007 com seus processadores Nehalem e Tukwila. Ambas as famílias de CPU compartilham um chipset comum; a interconexão é chamada Intel Quick Path Interconnect (QPI). A AMD implementou o NUMA com seu processador Opteron (2003), usando o HyperTransport.

Verifique este relatório em 11/2008 para ver se a Intel desativou um dos dois links QPI no i7, desativando a configuração de soquete duplo, onde o NUMA se aplica:

Essa primeira implementação de desktop de alta qualidade da Nehalem é denominada Bloomfield, e é essencialmente o mesmo silício que deve entrar em servidores de dois soquetes. Como resultado, os chips da Bloomfield vêm com dois links QPI a bordo, como indica a injeção acima. No entanto, o segundo link QPI não é utilizado. Nos servidores 2P baseados nessa arquitetura, a segunda interconexão vinculará os dois soquetes e, sobre ela, as CPUs compartilharão mensagens de coerência de cache (usando um novo protocolo) e dados (já que o subsistema de memória será NUMA) - novamente, muito semelhante para o Opteron.

Então, eu me afastei da sua pergunta relacionada aos meus resultados de pesquisa do Google ... Você está perguntando por que os documentos do Linux começaram a recomendar ativá-lo no final de 2008? Não tenho certeza se esta pergunta tem uma resposta comprovadamente correta ... Teríamos que perguntar ao redator do documento. A ativação do NUMA não beneficia os usuários de CPU de desktop, mas também não os prejudica significativamente, enquanto ajuda os usuários com vários soquetes. Por que não? Esta poderia ter sido a lógica. Constatou que isso refletia em uma discussão sobre a desativação do NUMA no rastreador do Arch Linux ( FS # 31187 - [linux] - desativa o NUMA dos arquivos de configuração ).

O autor do documento também pode ter pensado no potencial NUMA da arquitetura Nehalem, do qual, quando o documento foi escrito, os processadores Core i7 11/2008 (920, 940, 965) eram os únicos representantes; os primeiros chips Nehalem para os quais a NUMA realmente faria sentido provavelmente são os processadores Xeon do primeiro trimestre de 2009 com duplo link QPI, como o Xeon E5520 .

Lumi
fonte
2

Eu acho que se você usar o --showswitch, pode fazer mais sentido:

$ numactl --show
policy: default
preferred node: current
physcpubind: 0 1 2 3 
cpubind: 0 
nodebind: 0 
membind: 0 

Então você pode controlar o uso de physcpubind's assim:

$ numactl --physcpubind=+0-2 myapp

Isso limitaria o aplicativo myappaos 2 primeiros núcleos da CPU. Meu sistema é um i5 com 4 núcleos.

Referências

slm
fonte
2

Eu tenho pesquisado a mesma coisa no meu PC de mesa enquanto construí meu kernel por conta própria. Decidi desativar o NUMA após muita pesquisa. Minha CPU é um Core i7 3820 que possui 8 processadores com HT. Esta página ajudou-me a tomar minha decisão.

desativar o NUMA dos arquivos de configuração

Em resumo, o NUMA só vale a pena se você tiver mais de um soquete de CPU (independentemente dos núcleos). Há um impacto muito pequeno no poder de processamento em máquinas com 1 soquete de CPU, mesmo com vários núcleos, mas é quase imperceptível, portanto a maioria das distribuições o deixa ativado, pois proporcionará um enorme benefício para servidores e máquinas com mais de um soquete.

Anthony S.
fonte
1

Em um PC com no máximo uma CPU, o NUMA é totalmente inútil. Sinta-se livre para desativá-lo em seu próprio kernel.

Você sempre pode controlar a ligação da CPU pelo conjunto de tarefas (1) .

b166er
fonte