it-swarm-es.tech

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

Me interesan los límites teóricos, quizás con ejemplos de sistemas que tienen una gran cantidad de CPU.

14
tshepang

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

Según SGI:

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

18
KeithB

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.

11
gbjbaanb

El kernel de Linux x86_64 puede manejar un máximo de 4096 subprocesos de procesador en una sola imagen del sistema. Esto significa que con el hiperproceso 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 en los que cooperan varios núcleos de Linux, conectados con una interconexión de alta velocidad, normalmente una estructura Infiniband.

desde el kernel 3.13 más actual, 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 kernels más nuevos, esto es específico de la arquitectura, por ejemplo en 4.15 x86_64 le permite configurar NR_CPUS en 8192 en las circunstancias adecuadas, mientras que el brazo de 32 bits se detiene en 32 .

6
Per Kofod

Este bebé corre 10,368!

2
Ben D

Los subprocesos son subjetivos al modelo multitarea y al esquema de gestión de subprocesos. El Gdt de los sistemas basados ​​en Intel se usa en Linux si mal no recuerdo. La idea es que tenga la posibilidad de 8192 hilos al tamaño máximo. Esto asumiendo que el sistema está usando el gdt para administrar los hilos. En las máquinas de 32 bits se gestiona la conmutación de tareas y los vectores de interrupción de las 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 supone que puede alcanzar lo que tiene memoria cuando tiene, para cada hilo, un marco de pila de páginas, una base de código de página para el hilo y una página de espacio de pila. No puede asumir que tiene una página de código o montón, que son las variables aleatorias. Generalmente hay dos marcos de pila para cada hilo, uno mantenido por el hilo y otro mantenido por el kernel de Linux. Agrega conceptos de memoria virtual de espacio de intercambio y el modelo sale volando del agua, pero se trata de prioridad de hilo.

1
Shawn

También:

Si está usando Linux como Control en el SGI UV, y está usando Bladecenters con su propio Kernel 4.15, puede usar en el Momento:

4096 Racks de hojas. 1 bastidor con 1024 núcleos x 4096 núcleos. Esta configuración será en este momento el núcleo más alto que se usa en Linux. Puede controlar todos los núcleos en Red Hat.

0
edgar wahl