Linux内核可以处理多少个内核?


14

我对理论上的限制很感兴趣,也许有一些具有大量CPU的系统示例。


2
它可以处理多少个?还是在失去一些利益之前能处理多少?还有什么内核?我怀疑对于修补运行超级计算机的计算机,此答案会有所改变。我似乎回想起有关使用4096个处理器的单个实例的信息……
xenoterracide 2010年

什么补丁集,普通补丁集不能处理4096个处理器,但是linux已经对其进行了补丁。(IIRC的一些答案似乎暗示可以)
xenoterracide 2010年

@xeno我认为,甚至有一个可处理4096个处理器的补丁集这一事实,都应该在答案中提及。
tshepang 2010年

我记得不多,否则我会给出答案,我的成绩也能超过16分吗?内核是有限的。。。内核的某些部分需要一个已经开始的重写。但实际上我没有任何引用,而且不是100%,这就是为什么我不回答。
xenoterracide 2010年

Answers:


18

在实践中至少为2048。举一个具体的例子,SGI出售了它的UV系统,该系统可以使用256个套接字(2,048个内核)和16TB的共享内存,所有这些都在单个内核下运行。我知道至少有一些系统已经以这种配置出售。

根据SGI:

Altix UV运行完全未经修改的Linux,包括Novell和Red Hat的标准发行版。


11

这就是Launchpad 关于Ubuntu的说法,所以我想它适用于其他人:

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.

x86和x86_64分别是32个或64个CPU。

Redhat表示相同,但​​是在易于管理的表中。Redhat EL6可以为x86做32个,或者为x86_64做128或4096个CPU内核。


4
arch / x86 / Kconfig表示,CONFIG_NR_CPUS如果CONFIG_MAXSMP启用,则可以提高这些限制。
短暂

6

x86_64 Linux内核在单个系统映像中最多可以处理4096个处理器线程。这意味着在启用超线程的情况下,处理器核心的最大数量为2048。但是它们作为集群运行,几个Linux内核协同工作,并与高速互连(通常为Infiniband结构)连接。

从最新的内核3.13开始,在〜/ arch / x86 / Kconfig中:

配置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.

更新:在较新的内核上,这是特定于体系结构的-例如在4.15 x86_64上,您可以在适当的情况下将NR_CPUS设置为8192,而32位臂在32处停止


SGI Altix UV 1000(自2009年起)在单个系统映像中最多可具有2560个内核。
SP Arif Sahari Wibowo


1

线程受多任务模型和线程管理方案的约束。如果我没记错的话,基于intel的系统的Gdt在Linux中使用。想法是最大大小可能有8192个线程。假设系统正在使用gdt来管理线程。在32位计算机上,管理任务切换,在32位和64位计算机上,中断向量需要具有gdt条目。不确定手臂的操作方式,但必须实现相同的关节运动。任务切换概念在任务模型中迭代GDT。

如果您突破了gdt方案,那么对于每个线程,您大概都可以达到您拥有的内存,对于每个线程,页面堆栈框架,线程的页面代码库和堆空间页面。您不能假设您有一页代码或堆,这是随机变量。通常,每个线程有两个堆栈框架,一个由线程维护,一个由Linux内核维护。您添加了交换空间的虚拟内存概念,该模型被淹没了,但这与线程优先级有关。


0

也:

如果您使用Linux作为UV SGI上的控件,并且您将Bladecenters与她的4.15内核一起使用,则可以在Moment上使用:

4096刀片架。1个使用1024核心x 4096核心的机架。此配置将是Linux下使用的最高Core。您可以在Red Hat下控制所有核心。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.