我对理论上的限制很感兴趣,也许有一些具有大量CPU的系统示例。
我对理论上的限制很感兴趣,也许有一些具有大量CPU的系统示例。
Answers:
这就是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内核。
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处停止。
线程受多任务模型和线程管理方案的约束。如果我没记错的话,基于intel的系统的Gdt在Linux中使用。想法是最大大小可能有8192个线程。假设系统正在使用gdt来管理线程。在32位计算机上,管理任务切换,在32位和64位计算机上,中断向量需要具有gdt条目。不确定手臂的操作方式,但必须实现相同的关节运动。任务切换概念在任务模型中迭代GDT。
如果您突破了gdt方案,那么对于每个线程,您大概都可以达到您拥有的内存,对于每个线程,页面堆栈框架,线程的页面代码库和堆空间页面。您不能假设您有一页代码或堆,这是随机变量。通常,每个线程有两个堆栈框架,一个由线程维护,一个由Linux内核维护。您添加了交换空间的虚拟内存概念,该模型被淹没了,但这与线程优先级有关。