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

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

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

答案1

实际上至少2048。作为一个具体的例子,SGI 出售其紫外线系统,可以使用 256 个套接字(2,048 个内核)和 16TB 共享内存,全部运行在单个内核下。我知道至少有一些系统已采用这种配置出售。

根据SGI:

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

答案2

这就是 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 个 CPU 核心,或者为 x86_64 提供 128 或 4096 个 CPU 核心。

答案3

x86_64 Linux 内核在单个系统映像中最多可以处理 4096 个处理器线程。这意味着在启用超线程的情况下,处理器核心的最大数量为 2048。是的,存在具有超过 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

答案4

线程受多任务模型和线程管理方案的影响。如果我没记错的话,基于intel的系统的Gdt用于linux。这个想法是最大可能有 8192 个线程。假设系统使用 gdt 来管理线程。在 32 位机器上,任务切换是受管理的,并且 32 位和 64 位机器上的中断向量需要有 gdt 条目。不确定手臂是如何做到的,但必须实现相同的关节。任务切换概念迭代了任务分配模型中的 GDT。

如果你打破了 gdt 方案,当你为每个线程拥有一个页面堆栈帧、线程的页面代码库和堆空间页面时,你大概可以达到你所拥有的内存。您不能假设您有一页代码或堆,它们是随机变量。一般每个线程有两个栈帧,一个由线程维护,一个由linux内核维护。您添加交换空间的虚拟内存概念,模型就会被打乱,但它与线程优先级有关。

相关内容