Quantos núcleos o kernel Linux pode suportar?

13

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

tshepang
fonte
1
Com quantos ele pode lidar? ou com quantos ele pode lidar antes que você perca algum benefício? também qual kernel? Eu suspeito que essa resposta mude um pouco para um computador corrigido para executar um supercomputador. Parece-me leitura recordação sobre uma única instância usando 4096 processadores ...
xenoterracide
que conjunto de patches, o conjunto de patches normal não suporta processadores 4096, mas o linux foi corrigido para isso. (IIRC algumas respostas parecem sugerir que puder)
xenoterracide
@ xeno Acho que o fato de haver até um patchset que lida com processadores 4096 é algo que deve ser mencionado na resposta.
tshepang
Não me lembro muito mais do que isso, caso contrário eu daria uma resposta, também os ganhos de desempenho dela passam de 16? os núcleos eram limitados ... e que certas partes do kernel precisavam de uma reescrita que já havia começado. mas realmente não tenho citações e não sou 100%, por isso não estou respondendo.
Xenoterracide
xkcd.com/619
balki

Respostas:

17

Pelo menos 2048 na prática. Como 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 em um único kernel. Eu sei que existem pelo menos alguns sistemas que foram vendidos nessa configuração.

De acordo com a SGI:

O Altix UV executa Linux completamente não modificado, incluindo distribuições padrão da Novell e da Red Hat.

KeithB
fonte
10

isto é 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.

Ou seja, 32 ou 64 CPUs para x86 e x86_64, respectivamente.

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

gbjbaanb
fonte
4
O arch / x86 / Kconfig diz que esses CONFIG_NR_CPUSlimites podem ser aumentados se CONFIG_MAXSMPestiver ativado.
ephemient
6

O kernel Linux x86_64 pode lidar com no máximo 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 é 2048. Sim, existem computadores com mais de 2048 núcleos de processador; mas eles são executados como clusters nos quais vários kernels do Linux cooperam, conectados a uma interconexão de alta velocidade, normalmente uma malha Infiniband.

do kernel mais atual 3.13, 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: nos kernels mais recentes, isso é específico da arquitetura - por exemplo, em 4.15 x86_64, você pode definir NR_CPUS para 8192 nas circunstâncias certas, enquanto o braço de 32 bits para em 32 .

Per Kofod
fonte
O SGI Altix UV 1000 (desde 2009) pode ter até 2560 núcleos na imagem de sistema único.
SP Arif Sahari Wibowo
2

Este bebê corre 10.368!

Dobrar
fonte
Sei que esta é uma postagem antiga, mas você está vinculando a um computador em cluster. A questão é sobre a execução de uma única instância do kernel.
Frodeborli 31/07/2015
1

Os encadeamentos são subjetivos ao modelo de multitarefa e ao esquema de gerenciamento de encadeamentos. O Gdt dos sistemas baseados em intel é usado no linux, se bem me lembro. A idéia é que há uma 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 comutação de tarefas é gerenciada e os vetores de interrupção nas 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 troca de tarefas repetem o GDT nos modelos de tarefas.

Se você interromper o esquema gdt, provavelmente poderá alcançar o que tem memória 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 do espaço de pilha. Você não pode assumir que possui uma página de código ou heap, que são as variáveis ​​aleatórias. Geralmente, existem dois quadros de pilha 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 é expulso da água, mas é sobre a prioridade do encadeamento.

Shawn
fonte
0

Além disso:

Se você estiver usando um Linux como controle no UV SGI e estiver usando os Bladecenters com ela no próprio kernel 4.15, poderá usar no momento:

Cremalheiras da lâmina 4096. 1 Rack usando 1024 núcleos x 4096 núcleos. Esta configuração será no momento o núcleo mais alto usando no Linux. Você pode controlar todos os núcleos no Red Hat.

edgar wahl
fonte