En el kernel de Linux, la documentación de CONFIG_NUMA
dice:
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?
fuente
CONFIG_NUMA
acore i7
?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
Kconfig
ediciones 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: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:
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 :
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:
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 .
fuente
Creo que si usa el
--show
interruptor, podría tener más sentido:Para que pueda controlar el uso de physcpubind como este:
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
fuente
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.
fuente
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) .
fuente