¿Cuántos núcleos puede manejar el kernel de Linux?

14

Me interesan los límites teóricos, quizás con ejemplos de sistemas que tienen un gran número de CPU.

tshepang
fuente
2
¿Cuántos puede manejar? ¿o cuántos puede manejar antes de que pierdas algún beneficio? también que kernel? Sospecho que esta respuesta cambia algo para una computadora parcheada para ejecutar una supercomputadora. Me parece recordar haber leído sobre una sola instancia con procesadores 4096 ...
xenoterracide
qué conjunto de parches, el conjunto de parches normal no puede manejar los procesadores 4096, pero Linux ha sido parcheado para hacerlo. (IIRC algunas respuestas parecen sugerir que puede)
xenoterracide
@xeno Creo que el hecho de que incluso haya un parche que maneje procesadores 4096 es algo que debería mencionarse en la Respuesta.
tshepang
No recuerdo mucho más que eso, de lo contrario daría una respuesta, ¿también su aumento de rendimiento pasa 16? los núcleos eran limitados ... y que ciertas partes del núcleo necesitaban una reescritura que ya había comenzado. pero realmente no tengo citas y no estoy 100% por eso no estoy respondiendo.
xenoterracide
xkcd.com/619
balki

Respuestas:

18

Al menos 2048 en la práctica. Como ejemplo concreto, SGI vende su sistema UV , que puede usar 256 zócalos (2.048 núcleos) y 16 TB de memoria compartida, todo bajo un solo núcleo. Sé que hay al menos algunos sistemas que se han vendido en esta configuración.

De acuerdo con SGI:

Altix UV ejecuta Linux completamente sin modificar, incluidas las distribuciones estándar de Novell y Red Hat.

KeithB
fuente
11

Esto es lo que Launchpad tiene que decir sobre Ubuntu, así que supongo que se aplica a otros:

1.Intel x86:
Maximum CPUs: 32 (including logical CPUs)
Maximum memory: 64GB
Maximum filesize: 8TB
Maximum filesystem size (ext3) 16TB
Maximum per-process virtual address space: 4GB

2.AMD64/EM64T:
Maximum CPUs: 64
Maximum memory: 128GB
Maximum filesize: 8TB
Maximum filesystem size (ext3): 16TB
Maximum per-process virtual address space: N/A

These are standard max limitations whereas Linux cluster systems can scale up to 1024 CPU's.

Eso es 32 o 64 CPU para x86 y x86_64 respectivamente.

Redhat dice lo mismo, pero en una tabla amigable para la administración . Redhat EL6 puede hacer 32 para x86, o 128 o 4096 núcleos de CPU para x86_64.

gbjbaanb
fuente
44
arch / x86 / Kconfig dice que estos CONFIG_NR_CPUSlímites pueden aumentarse si CONFIG_MAXSMPestá habilitado.
Ephemient
6

El núcleo Linux x86_64 puede manejar un máximo de 4096 subprocesos del procesador en una sola imagen del sistema. Esto significa que con Hyper Threading habilitado, el número máximo de núcleos de procesador es 2048. Sí, hay computadoras con más de 2048 núcleos de procesador; pero estos se ejecutan como clústeres donde varios núcleos de Linux cooperan, conectados con una interconexión de alta velocidad, típicamente una estructura Infiniband.

desde el núcleo más reciente 3.13, en ~ / arch / x86 / Kconfig:

config NR_CPUS

    ---help---
      This allows you to specify the maximum number of CPUs which this
      kernel will support.  If CPUMASK_OFFSTACK is enabled, the maximum
      supported value is 4096, otherwise the maximum value is 512.  The
      minimum value which makes sense is 2.

      This is purely to save memory - each supported CPU adds
      approximately eight kilobytes to the kernel image.

Actualización: en los núcleos más nuevos, esto es específico de la arquitectura; por ejemplo, en 4.15 x86_64 le permite establecer NR_CPUS en 8192 en las circunstancias correctas, mientras que el brazo de 32 bits se detiene en 32 .

Por Kofod
fuente
SGI Altix UV 1000 (desde 2009) puede tener hasta 2560 núcleos en una sola imagen del sistema.
SP Arif Sahari Wibowo
2

¡Este bebé corre 10,368!

Curva
fuente
2
Sé que esta es una publicación anterior, pero está vinculando a una computadora en clúster. La pregunta es sobre la ejecución de una sola instancia de kernel.
frodeborli
1

Los hilos son subjetivos para el modelo multitarea y el esquema de gestión de hilos. El Gdt de los sistemas basados ​​en Intel se usa en Linux si no recuerdo mal. La idea es que tiene una posibilidad de 8192 hilos en tamaño máximo. Esto supone que el sistema está usando el gdt para administrar los hilos. En máquinas de 32 bits, la conmutación de tareas se gestiona y los vectores de interrupción en máquinas de 32 y 64 bits deben tener entradas gdt. No estoy seguro de cómo lo hace el brazo, pero se debe lograr la misma articulación. Los conceptos de cambio de tareas iteran el GDT en los modelos de tareas.

Si se sale del esquema gdt, se puede llegar a lo que tiene memoria para cuando tiene, para cada subproceso, un marco de pila de páginas, una base de código de página para el subproceso y la página de espacio de almacenamiento dinámico. No puede asumir que tiene una página de código o montón, que son las variables aleatorias. En general, hay dos marcos de pila para cada subproceso, uno mantenido por el subproceso y otro mantenido por el kernel de Linux. Agregas conceptos de memoria virtual del espacio de intercambio y el modelo sale del agua, pero se trata de la prioridad del hilo.

Shawn
fuente
0

También:

Si está utilizando un Linux como Controlling en el UV SGI, y está utilizando los Bladecenters con ella en su propio Kernel 4.15, puede usarlo en el Momento:

4096 Bastidores de cuchillas. 1 bastidor con 1024 núcleos x 4096 núcleos. Esta configuración será en el momento en que el núcleo más alto lo use bajo Linux. Puede controlar todos los núcleos bajo Red Hat.

Edgar Wahl
fuente