Ile rdzeni może obsłużyć jądro Linuksa?

14

Interesują mnie teoretyczne ograniczenia, być może przykłady systemów z ogromną liczbą procesorów.

tshepang
źródło
2
Ile to może obsłużyć? lub ile to poradzi, zanim stracisz jakieś korzyści? także jakie jądro? Podejrzewam, że ta odpowiedź nieco się zmienia w przypadku komputera załatanego do obsługi superkomputera. Wydaje mi się, że pamiętam o jednym wystąpieniu z procesorami 4096 ...
Xenoterracide
jaki zestaw łatek, normalny zestaw łatek nie obsługuje procesorów 4096, ale Linux został załatany, aby to zrobić. (IIRC wydaje się sugerować, że niektóre odpowiedzi mogą)
ksenoterracid
@xeno Myślę, że fakt, że istnieje nawet zestaw łatek, który obsługuje 4096 procesorów, jest rzeczą, o której należy wspomnieć w odpowiedzi.
tshepang
Nie pamiętam nic więcej, w przeciwnym razie dałbym odpowiedź, ja również jej wydajność zyskała 16? rdzenie były ograniczone ... i że niektóre części jądra wymagały przepisania, które już się rozpoczęło. ale tak naprawdę nie mam żadnych cytatów i nie jestem w 100% dlatego nie odpowiadam.
ksenoterrakid,
xkcd.com/619
balki

Odpowiedzi:

18

Co najmniej 2048 w praktyce. Jako konkretny przykład, SGI sprzedaje swój system UV , który może wykorzystywać 256 gniazd (2048 rdzeni) i 16 TB pamięci współdzielonej, wszystkie działające pod jednym jądrem. Wiem, że w tej konfiguracji sprzedano co najmniej kilka systemów.

Według SGI:

Altix UV działa całkowicie niezmodyfikowany Linux, w tym standardowe dystrybucje zarówno Novell, jak i Red Hat.

KeithB
źródło
11

oto, co Launchpad ma do powiedzenia na temat Ubuntu, więc myślę, że dotyczy to innych:

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.

To jest 32 lub 64 procesory odpowiednio dla x86 i x86_64.

Redhat mówi to samo, ale w przyjaznym dla zarządu stole . Redhat EL6 może wykonać 32 dla rdzeni x86 lub 128 lub 4096 rdzeni dla x86_64.

gbjbaanb
źródło
4
arch / x86 / Kconfig mówi, że CONFIG_NR_CPUSlimity te można zwiększyć, jeśli CONFIG_MAXSMPjest włączone.
ephemient
6

Jądro Linux x86_64 może obsłużyć maksymalnie 4096 wątków procesora w jednym obrazie systemowym. Oznacza to, że przy włączonej hiperwątkowości maksymalna liczba rdzeni procesora wynosi 2048. Tak, są komputery z więcej niż 2048 rdzeniami procesorów; ale działają one jako klastry, w których współpracuje kilka jąder Linuksa, połączone szybkim interkonektem, zazwyczaj tkaniną Infiniband.

z najnowszego jądra 3.13 w ~ / 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.

Aktualizacja: w nowszych jądrach jest to specyficzne dla architektury - na przykład 4.15 x86_64 pozwala ustawić NR_CPUS na 8192 w odpowiednich okolicznościach, podczas gdy 32-bitowe ramię zatrzymuje się na 32 .

Per Kofod
źródło
SGI Altix UV 1000 (od 2009) może mieć do 2560 rdzeni na obrazie jednego systemu.
SP Arif Sahari Wibowo
2

To dziecko ma 10 368 punktów!

Ben D.
źródło
2
Wiem, że to stary post, ale łączysz się z komputerem w klastrze. Pytanie dotyczy uruchomienia pojedynczej instancji jądra.
frodeborli
1

Wątki są subiektywne dla modelu wielozadaniowości i schematu zarządzania wątkami. Gdt systemów opartych na inteligencji jest używany w systemie Linux, o ile dobrze pamiętam. Chodzi o to, że ma możliwość 8192 wątków w maksymalnym rozmiarze. Zakładając, że system używa gdt do zarządzania wątkami. Na komputerach 32-bitowych przełączanie zadań jest zarządzane, a na komputerach 32- i 64-bitowych wektory przerwań muszą mieć wpisy gdt. Nie jestem pewien, jak robi to ramię, ale należy osiągnąć tę samą artykulację. Koncepcje przełączania zadań powtarzają GDT w modelach zadań.

Jeśli wyjdziesz ze schematu gdt, prawdopodobnie osiągniesz to, co masz w pamięci, kiedy masz, dla każdego wątku, ramkę stosu stron, bazę kodu strony dla wątku i stronę przestrzeni sterty. Nie możesz założyć, że masz stronę kodu lub sterty, która jest zmiennymi losowymi. Zasadniczo istnieją dwie ramki stosu dla każdego wątku, jedna obsługiwana przez wątek, a druga obsługiwana przez jądro Linuksa. Dodajesz koncepcje pamięci wirtualnej dla przestrzeni wymiany, a model jest wydmuchiwany z wody, ale chodzi o priorytet wątku.

Shawn
źródło
0

Również:

Jeśli używasz Linuksa jako Kontroli na SGI UV i używasz z nim Bladecenters na własnym jądrze 4.15, możesz użyć na chwilę:

4096 Stojaki na ostrza. 1 stojak z wykorzystaniem 1024 rdzeni x 4096 rdzeni. Ta konfiguracja będzie w chwili najwyższej rdzenia używanego pod Linuksem. Możesz kontrolować wszystkie rdzenie w Red Hat.

Edgar Wahl
źródło