Habilitación de NUMA para Intel Core i7


22

En el kernel de Linux, la documentación de CONFIG_NUMAdice:

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.

Tengo un procesador Intel Core i7, pero AFAICT solo tiene un nodo 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 

Entonces, ¿cuál es el propósito de tener CONFIG_NUMA=y, cuando i7 tiene un solo nodo NUMA?

Respuestas:


13

Creo que esta imagen explica lo suficiente:

                  ingrese la descripción de la imagen aquí

  • socket o numa node es una colección de núcleos con acceso local a la memoria. Cada zócalo contiene 1 o más núcleos. Tenga en cuenta que esto no se refiere necesariamente a un socket físico, sino a la arquitectura de memoria de la máquina, que dependerá de su proveedor de chips.

  • El núcleo del procesador ( núcleo de la CPU, procesador lógico) se refiere a una sola unidad de procesamiento capaz de realizar cálculos.

Entonces, lo anterior indica que necesitaría múltiples procesadores en la máquina para aprovechar la arquitectura NUMA.

Puede haber compilado el soporte NUMA en el kernel y ejecutarlo en una máquina con un solo procesador. Es similar al soporte de SMP. También está compilado, pero cuando el núcleo detecta que hay un único procesador en el sistema, no lo usará (lo deshabilitará). Lo mismo vale para NUMA. Puede verificar el archivo dmesgo el búfer de anillo del núcleo /var/log/dmesgpara ver los mensajes relacionados:

NUMA: procesador único (o NUMA desactivado) X multiprocesador:

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

SMP - procesador único X multiprocesador:

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

Referencias


2
@slm - lo que dice tiene sentido, pero ¿por qué la documentación del núcleo (citado en mi pregunta) dicen que debería permitir CONFIG_NUMAa core i7?
user1968963

1
Dado que Haswell ya no es cierto que NUMA no sirve de nada para una máquina de 'procesador único' (es decir, un solo socket). Ciertos productos Haswell cuentan con lo que Intel llama el modo "Cluster on Die". El procesador de socket único tiene múltiples controladores de memoria integrados y, por lo tanto, múltiples rutas de acceso a la memoria, que con esta característica pueden tratarse como regiones NUMA distintas, todas las cuales abarcan un socket.
Paul Caheny

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

Primero, tenga en cuenta que Intel Core i7 es solo una designación de marketing, y la frase Intel Core i7 (o posterior) es muy vaga. Entonces, ¿qué podría significar?

Las Kconfigediciones del texto de ayuda del kernel de Linux que mencionan un Intel Core 7i , luego corregido a Intel Core i7 , se realizaron en noviembre de 2008. El registro de confirmación dice:

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.

Es razonable que solo se refiera a las CPU Intel Core i7 lanzadas o anunciadas según las especificaciones para ese momento. Esos serían los procesadores Bloomfield , basados ​​en la microarquitectura Nehalem , que trasladó el controlador de memoria del Northbridge a la CPU (que AMD había hecho en 2003 con el Opteron / AMD64) e introdujo QuickPath Interconnect / QPI (como colgante del HyperTransport de AMD) para interconexión CPU / CPU y CPU / IOH (concentrador IO, ex-Northbridge).

Las CPU Bloom7 i7 fueron las primeras entradas en el nuevo esquema de nombres Core i {3,5,7} . Entonces, cuando se escribió ese texto de documento de Linux, i7 no se refirió específicamente al Core i7 en lugar de i5 (primero en 09/2009) o i3 (primero en 01/2010), pero con toda probabilidad a la nueva microarquitectura Nehalem con su controlador de memoria integrado y QPI.

Hay un comunicado de prensa de Intel del 11/2008 sobre el i7 ( Intel lanza el procesador más rápido del planeta ) que establece que el procesador Core i7 duplica con creces el ancho de banda de memoria de las plataformas Intel "Extreme" anteriores , pero no menciona NUMA en absoluto .

La razón es, creo, que NUMA no importa para las PC de escritorio, ni siquiera para las "extremas".

NUMA es importante para los servidores caros que tienen varios zócalos de CPU (no solo varios núcleos en un zócalo) con carriles de acceso de memoria física dedicados (no solo un controlador de memoria), de modo que cada CPU tiene su memoria local dedicada, que está "más cerca" de ella que la memoria de las otras CPU. (Piense en 8 sockets, 64 núcleos, 256 GB de RAM). NUMA significa que una CPU también puede acceder a la memoria remota (la memoria local de otra CPU) además de su propia memoria local, aunque a un costo mayor. NUMA es la síntesis de una arquitectura de memoria compartida como SMP, donde toda la memoria está igualmente disponible para todos los núcleos, y una arquitectura de memoria distribuida como MPP (procesamiento masivo en paralelo), que le da a cada nodo un bloque de memoria dedicado. Es MPP, pero parece SMP para la aplicación.

Las placas madre de escritorio no tienen dos sockets y las CPU de escritorio Intel, incluidas las ediciones i7 extremas, carecen del enlace QPI adicional para la configuración de doble socket.

Consulte el artículo de Wikipedia QPI para ver cómo QPI es relevante para NUMA:

En su forma más simple en una placa base de un solo procesador, se usa un solo QPI para conectar el procesador al IO Hub (por ejemplo, para conectar un Intel Core i7 a un X58). En instancias más complejas de la arquitectura, pares de enlaces QPI separados conectan uno o más procesadores y uno o más concentradores de E / S o concentradores de enrutamiento en una red en la placa base, permitiendo que todos los componentes accedan a otros componentes a través de la red. Al igual que con HyperTransport, la arquitectura QuickPath supone que los procesadores tendrán controladores de memoria integrados y permite una arquitectura de acceso no uniforme a la memoria (NUMA).

[...]

Aunque algunos procesadores Core i7 de gama alta exponen QPI, otros procesadores Nehalem "convencionales" de escritorio y móviles destinados a placas de un solo zócalo (por ejemplo, LGA 1156 Core i3, Core i5 y otros procesadores Core i7 de Lynnfield / Clarksfield y familias sucesoras) no exponga QPI externamente, ya que estos procesadores no están destinados a participar en sistemas multi-socket. Sin embargo, QPI se utiliza internamente en estos chips [...]

La forma en que una CPU Intel Nehalem en una placa de servidor multi-socket hace que el acceso a la memoria no local sea a través de QPI. También en el artículo sobre NUMA :

Intel anunció la compatibilidad NUMA para sus servidores x86 e Itanium a fines de 2007 con sus CPU Nehalem y Tukwila. Ambas familias de CPU comparten un conjunto de chips común; la interconexión se llama Intel Quick Path Interconnect (QPI). AMD implementó NUMA con su procesador Opteron (2003), utilizando HyperTransport.

Consulte este informe desde el 11/2008 para ver que Intel deshabilitó uno de los dos enlaces QPI en el i7, deshabilitando así la configuración de doble socket, donde se aplica NUMA:

Esta primera implementación de escritorio de gama alta de Nehalem lleva el nombre en código de Bloomfield, y es esencialmente el mismo silicio que eventualmente debería entrar en servidores de dos sockets. Como resultado, los chips Bloomfield vienen con dos enlaces QPI a bordo, como lo indica el disparo anterior. Sin embargo, el segundo enlace QPI no se utiliza. En los servidores 2P basados ​​en esta arquitectura, esa segunda interconexión vinculará los dos sockets, y sobre ella, las CPU compartirán mensajes de coherencia de caché (usando un nuevo protocolo) y datos (ya que el subsistema de memoria será NUMA), de nuevo, muy similar. al Opteron.

Así que me he estado desviando de su pregunta sobre los resultados de mi investigación de Google ... ¿Se pregunta por qué los documentos de Linux comenzaron a recomendar activarlo a fines de 2008? No estoy seguro de que esta pregunta tenga una respuesta probablemente correcta ... Tendríamos que preguntarle al escritor del documento. Activar NUMA no beneficia a los usuarios de CPU de escritorio, pero tampoco los perjudica significativamente, a la vez que ayuda a los usuarios de múltiples sockets, entonces, ¿por qué no? Esta podría haber sido la razón. Encontró eso reflejado en una discusión sobre la desactivación de NUMA en el rastreador de Arch Linux ( FS # 31187 - [linux] - desactivar NUMA de los archivos de configuración ).

El autor del documento también podría haber pensado en el potencial NUMA de la arquitectura Nehalem de la cual, cuando se escribió el documento, los procesadores Core i7 11/2008 (920, 940, 965) eran los únicos representantes; Los primeros chips Nehalem para los que NUMA realmente tendría sentido son probablemente los procesadores Xeon Q1 / 2009 con doble enlace QPI como el Xeon E5520 .


2

Creo que si usa el --showinterruptor, podría tener más sentido:

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

Para que pueda controlar el uso de physcpubind como este:

$ numactl --physcpubind=+0-2 myapp

Esto limitaría la aplicación. myapp a los primeros 2 núcleos de CPU. Mi sistema es un i5 con 4 núcleos.

Referencias


2

He estado investigando lo mismo para mi PC de escritorio mientras construyo mi kernel por mi cuenta. Decidí desactivar NUMA después de mucha investigación. Mi CPU es un Core i7 3820 que tiene 8 procesadores con HT. Esta página me ayudó a tomar mi decisión.

deshabilitar NUMA de los archivos de configuración

En resumen, NUMA solo vale la pena si tiene más de 1 zócalo de CPU (independientemente de los núcleos). Hay un impacto muy pequeño en la potencia de procesamiento en máquinas con 1 CPU Socket, incluso con múltiples núcleos, pero apenas se nota, por lo que la mayoría de las distribuciones lo dejan habilitado, ya que proporcionará un gran beneficio a los servidores y máquinas con más de 1 socket.


1

En una PC con como máximo una CPU, NUMA es totalmente inútil. Siéntase libre deshabilítelo en su propio núcleo.

Siempre puede controlar la vinculación de la CPU por conjunto de tareas (1) .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.