it-swarm-pt.com

Quantos núcleos o kernel do Linux pode manipular?

Estou interessado em limites teóricos, talvez com exemplos de sistemas com grande número de CPUs.

14
tshepang

Pelo menos 2.048 na prática. Como um exemplo concreto, a SGI vende seu sistema UV , que pode usar 256 soquetes (2.048 núcleos) e 16 TB de memória compartilhada, todos rodando sob um único kernel. Eu sei que existem pelo menos alguns sistemas que foram vendidos com essa configuração.

De acordo com SGI:

Altix UV executa Linux totalmente inalterado, incluindo distribuições padrão da Novell e Red Hat.

18
KeithB

isso é o que o Launchpad tem a dizer sobre o Ubuntu, então acho que se aplica a outros:

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.

Isso é 32 ou 64 CPUs para x86 e x86_64, respectivamente.

Redhat diz o mesmo, mas em uma tabela de gerenciamento amigável . Redhat EL6 pode fazer 32 para x86, ou 128 ou 4096 núcleos de CPUs para x86_64.

11
gbjbaanb

O kernel x86_64 Linux pode lidar com um máximo de 4096 threads de processador em uma única imagem do sistema. Isso significa que, com o hyper threading ativado, o número máximo de núcleos de processador é 2.048. Sim, há computadores com mais de 2.048 núcleos de processador; mas eles funcionam como clusters onde vários kernels Linux cooperam, conectados com uma interconexão de alta velocidade, normalmente uma malha Infiniband.

do kernel 3.13 mais atual, em ~/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.

Atualização: Em kernels mais novos, isso é específico da arquitetura - por exemplo em 4.15 x86_64 permite que você defina NR_CPUS para 8192 nas circunstâncias certas enquanto o braço de 32 bits para em 32 .

6
Per Kofod

Este bebê corre 10.368!

2
Ben D

Threads são subjetivos ao modelo multitarefa e ao esquema de gerenciamento de threads. O Gdt de sistemas baseados em Intel é usado no Linux, se bem me lembro. A ideia é que ele tenha a possibilidade de 8192 threads no tamanho máximo. Isso assumindo que o sistema está usando o gdt para gerenciar os threads. Em máquinas de 32 bits, a alternância de tarefas é gerenciada e os vetores de interrupção em máquinas de 32 e 64 bits precisam ter entradas gdt. Não tenho certeza de como o braço faz isso, mas a mesma articulação deve ser alcançada. Os conceitos de comutação de tarefas iteram o GDT em modelos de tarefas.

Se você sair do esquema gdt, provavelmente poderá alcançar o que tem memória para quando tiver, para cada encadeamento, um quadro de pilha de páginas, base de código de página para o encadeamento e página de espaço de heap. Você não pode assumir que tem uma página de código ou heap, que são as variáveis ​​aleatórias. Geralmente, há dois stack frames para cada thread, um mantido pelo thread e outro mantido pelo kernel do Linux. Você adiciona conceitos de memória virtual de espaço de troca e o modelo sai da água, mas é sobre prioridade de thread.

1
Shawn

Além disso:

Se você estiver usando um Linux como controlador no UV SGI, e estiver usando os Bladecenters com ele no próprio Kernel 4.15, você pode usar no Moment:

4096 Blade Racks. 1 Rack usando 1024 núcleos x 4096 núcleos. Esta configuração será no momento o maior núcleo usando no Linux. Você pode controlar todos os núcleos no Red Hat.

0
edgar wahl