Quanti core può gestire il kernel Linux?


14

Sono interessato ai limiti teorici, forse con esempi di sistemi con un numero enorme di CPU.


2
Quanti ne può gestire? o quanti ne può gestire prima di perdere qualche beneficio? anche quale kernel? Sospetto che questa risposta cambi in qualche modo per un computer patchato per eseguire un supercomputer. Mi sembra di ricordare di aver letto di un singolo caso usando i processori 4096 ...
xenoterracide,

quale patch set, il patchset normale non può gestire processori 4096 ma Linux è stato patchato per farlo. (IIRC alcune risposte sembrano suggerire che può)
xenoterracide,

@xeno Penso che il fatto che esista anche un patchset che gestisca processori 4096 è qualcosa che dovrebbe essere menzionato nella risposta.
Tshepang,

Non ricordo molto di più, altrimenti darei una risposta, anche i suoi guadagni prestazionali passano 16? i core erano limitati ... e che alcune parti del kernel necessitavano di una riscrittura che era già iniziata. ma in realtà non ho citazioni e non sono al 100%, ecco perché non rispondo.
xenoterracide,

Risposte:


18

Almeno 2048 in pratica. Ad esempio concreto, SGI vende il suo sistema UV , che può utilizzare 256 socket (2.048 core) e 16 TB di memoria condivisa, il tutto in esecuzione in un singolo kernel. So che ci sono almeno alcuni sistemi che sono stati venduti in questa configurazione.

Secondo SGI:

Altix UV esegue Linux completamente non modificato, comprese le distribuzioni standard di Novell e Red Hat.


11

questo è ciò che Launchpad ha da dire su Ubuntu, quindi suppongo che si applichi ad altri:

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.

Sono 32 o 64 CPU rispettivamente per x86 e x86_64.

Redhat dice lo stesso, ma in una tabella di gestione . Redhat EL6 può eseguire 32 core x86 o 128 o 4096 CPU per x86_64.


4
arch / x86 / Kconfig afferma che questi CONFIG_NR_CPUSlimiti possono essere aumentati se CONFIG_MAXSMPè abilitato.
effimero

6

Il kernel Linux x86_64 può gestire un massimo di 4096 thread del processore in una singola immagine di sistema. Ciò significa che con l'hyper threading abilitato, il numero massimo di core del processore è 2048. Sì, ci sono computer con più di 2048 core del processore; ma questi funzionano come cluster in cui cooperano diversi kernel Linux, collegati con un'interconnessione ad alta velocità, in genere un tessuto Infiniband.

dal kernel 3.13 più recente, in ~ / arch / x86 / Kconfig:

configura 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.

Aggiornamento: sui kernel più recenti questo è specifico dell'architettura - ad esempio su 4.15 x86_64 consente di impostare NR_CPUS su 8192 nelle giuste circostanze mentre il braccio a 32 bit si ferma a 32 .


SGI Altix UV 1000 (dal 2009) può avere fino a 2560 core nell'immagine di sistema singolo.
SP Arif Sahari Wibowo,

2

Questo bambino corre 10.368!


2
So che questo è un vecchio post, ma stai collegando a un computer cluster. La domanda riguarda l'esecuzione di una singola istanza del kernel.
frodeborli,

1

I thread sono soggettivi al modello multitasking e allo schema di gestione dei thread. Il Gdt dei sistemi basati su Intel è usato in Linux se ricordo bene. L'idea è che ha una possibilità 8192 thread alla dimensione massima. Ciò presuppone che il sistema stia usando gdt per gestire i thread. Sulle macchine a 32 bit è gestita la commutazione delle attività e i vettori di interruzione sulle macchine a 32 e 64 bit devono avere voci gdt. Non sono sicuro di come faccia il braccio, ma deve essere raggiunta la stessa articolazione. I concetti di cambio di attività ripetono il GDT nei modelli di tasking.

Se si esce dallo schema gdt, si può presumibilmente raggiungere ciò che si ha memoria quando si dispone, per ogni thread, un frame di stack di pagine, base di codice di pagina per il thread e la pagina dello spazio heap. Non puoi presumere di avere una pagina di codice o heap, ovvero le variabili casuali. Generalmente ci sono due frame stack per ogni thread, uno gestito dal thread e uno gestito dal kernel Linux. Aggiungete concetti di memoria virtuale dello spazio di swap e il modello viene espulso dall'acqua ma si tratta della priorità del thread.


0

Anche:

Se stai usando un Linux come controllo sul SGI UV e stai usando i Bladecenter con lei sul proprio kernel 4.15, puoi usare sul momento:

4096 Rack per lame. 1 Rack con 1024 Core x 4096 Core. Questa configurazione sarà nel momento il Core più alto che usa sotto Linux. Puoi controllare tutti i core con Red Hat.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.