permitindo numa para Intel Core i7

20

No kernel do Linux, a documentação de CONFIG_NUMA diz:

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 tem 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 propósito de ter CONFIG_NUMA=y , quando i7 tem apenas um nó numa?

    
por user1968963 25.09.2013 / 14:41

5 respostas

14

Acho que esta imagem explica o suficiente:

  • socketounumanodeéumacoleçãodenúcleoscomacessolocalàmemória.Cadasoquetecontém1oumaisnúcleos.Observequeissonãosereferenecessariamenteaumsoquetefísico,massimàarquiteturadememóriadamáquina,quedependerádofornecedordoseuchip.

  • núcleodoprocessador(núcleodaCPU,processadorlógico)refere-seaumaúnicaunidadedeprocessamentocapazderealizarcálculos.

Portanto,oacimaindicaquevocêprecisariadeváriosprocessadoresnamáquinaparaaproveitaraarquiteturaNUMA.

VocêpodetercompiladoosuporteaNUMAnokerneleexecutá-loemumúnicoprocessador.ÉsemelhanteaosuportedoSMP.Eleécompiladotambém,masquandookerneldetectaqueháumúnicoprocessadornosistema,elenãoousará(desabilite).OmesmovaleparaoNUMA.Vocêpodeverificarobufferdeaneldokerneldmesgouoarquivo/var/log/dmesgmensagensrelacionadas:

NUMA-multiprocessadorcomprocessadorúnico(ouNUMAdesativado):

NoNUMAconfigurationfoundNUMA:Allocatedmemnodemapfromb000-b440

SMP-multiprocessadorXdeprocessadorúnico:

SMP:Allowing1CPUs,0hotplugCPUsSMP:Allowing32CPUs,0hotplugCPUs

Referências

  • NUMA (acesso não uniforme à memória): uma visão geral
por 25.09.2013 / 15:03
14
For 64-bit this is recommended if the system is Intel Core i7
(or later), AMD Opteron, or EM64T NUMA.

Primeiro, note 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?

O kernel do Linux Kconfig help text edits mencionando um Intel Core 7i , então corrigido para Intel Core i7 , foi feito 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.

Pode razoavelmente referir-se apenas aos processadores Intel Core i7 lançados ou anunciados por especificação na altura. Esses seriam os processadores Bloomfield , baseados no Microarquitetura Nehalem , que moveu o controlador de memória do Northbridge para o processador (que a AMD havia feito em 2003 com o Opteron / AMD64) e introduziu QuickPath Interconnect / QPI (como pendente do HyperTransport da AMD) para interconexão de CPU / CPU e CPU / IOH (hub de IO, ex-Northbridge).

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

Há um press release da Intel de 11/2008 no i7 ( Intel lança processador mais rápido no Planeta que afirma que o processador Core i7 mais que dobra a largura de banda de memória das plataformas "Extreme" anteriores da Intel , mas não menciona NUMA.

A razão é, eu acho, que o NUMA não importa para PCs desktop, nem mesmo para PCs "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 pistas de acesso de memória física dedicadas (não apenas um controlador de memória), para que cada CPU tenha sua memória local dedicada, que é "mais próxima "para isso do que a memória dos outros processadores. (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 maior. NUMA é a síntese de uma arquitetura de memória compartilhada como o SMP, onde toda a memória está igualmente disponível para todos os núcleos e uma arquitetura de memória distribuída como o MPP (Massively Parallel Processing), que dá a cada nó um bloco dedicado de memória. É MPP, mas parece o SMP para o aplicativo.

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

Verifique o artigo de QPI da Wikipédia para ver como o QPI é relevante para a NUMA:

In its simplest form on a single-processor motherboard, a single QPI is used to connect the processor to the IO Hub (e.g., to connect an Intel Core i7 to an X58). In more complex instances of the architecture, separate QPI link pairs connect one or more processors and one or more IO hubs or routing hubs in a network on the motherboard, allowing all of the components to access other components via the network. As with HyperTransport, the QuickPath Architecture assumes that the processors will have integrated memory controllers, and enables a non-uniform memory access (NUMA) architecture.

[…]

Although some high-end Core i7 processors expose QPI, other "mainstream" Nehalem desktop and mobile processors intended for single-socket boards (e.g. LGA 1156 Core i3, Core i5, and other Core i7 processors from the Lynnfield/Clarksfield and successor families) do not expose QPI externally, because these processors are not intended to participate in multi-socket systems. However, QPI is used internally on these chips […]

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

Intel announced NUMA compatibility for its x86 and Itanium servers in late 2007 with its Nehalem and Tukwila CPUs. Both CPU families share a common chipset; the interconnection is called Intel Quick Path Interconnect (QPI). AMD implemented NUMA with its Opteron processor (2003), using HyperTransport.

Verifique este relatório de 11/2008 para ver que a Intel desativou um dos dois Links QPI no i7, desativando assim a configuração de dois soquetes, onde o NUMA se aplica:

This first, high-end desktop implementation of Nehalem is code-named Bloomfield, and it's essentially the same silicon that should go into two-socket servers eventually. As a result, Bloomfield chips come with two QPI links onboard, as the die shot above indicates. However, the second QPI link is unused. In 2P servers based on this architecture, that second interconnect will link the two sockets, and over it, the CPUs will share cache coherency messages (using a new protocol) and data (since the memory subsystem will be NUMA)—again, very similar to the Opteron.

Então, estou me desviando de sua pergunta sobre os resultados de pesquisa do Google ... Você está perguntando por que os documentos do Linux começaram a recomendá-lo no final de 2008? Não tenho certeza se esta pergunta tem uma resposta comprovadamente correta ... Nós teríamos que perguntar ao doc escritor. Ativar o NUMA não beneficia os usuários de CPU de desktop, mas também não os prejudica significativamente, ao mesmo tempo que ajuda os usuários com vários soquetes, então por que não? Este poderia ter sido o raciocínio. Encontrado que refletiu em uma discussão sobre a desativação do NUMA no rastreador do Arch Linux ( FS # 31187 - [linux] - desabilita o NUMA dos arquivos de configuração ).

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

    
por 02.06.2014 / 20:34
2

Acho que, se você usar a opção --show , poderá 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 do physcpubind assim:

$ numactl --physcpubind=+0-2 myapp

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

Referências

por 25.09.2013 / 14:58
2

Estou pesquisando a mesma coisa para meu PC de mesa enquanto construo meu kernel por conta própria. Eu decidi desativar o NUMA depois de muita pesquisa. Meu CPU é um Core i7 3820 que possui 8 processadores com HT. Esta página ajudou a minha chegar a minha decisão.

desabilite 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 de 1 CPU Socket, mesmo com múltiplos núcleos, mas dificilmente é perceptível, então a maioria das distribuições o deixa habilitado, já que proporcionará um enorme benefício para servidores e máquinas com mais de 1 socket.

    
por 08.03.2015 / 16:39
1

Em um PC com no máximo um CPU, o NUMA é totalmente inútil. Sinta-se livre e desative-o no seu próprio kernel.

Você sempre pode controlar a união da CPU por taskset (1) .

    
por 11.10.2013 / 05:19