为什么RHEL 6 128 TB的理论RAM限制如何确定?


8

我正在为RHCSA学习,但对一些培训材料中的陈述感到困惑:

没有实际的最大RAM,因为从理论上讲,您可以在RHEL 6上运行128 TB RAM。但这只是理论上的问题。RHEL 6上的Red Hat支持的最大RAM在32位系统上为16 GB,在64位系统上为2 TB。

有人可以解释一下128 TB理论极限值的来源吗?如果RHEL 6明确定义了其他最大限制,我对于作者如何知道理论限制感到困惑。这仅仅是考虑到64位体系结构的理论限制吗?还是这里还有其他原因?


3
是答案。您可以重写它并作为答案插入
dchirikov

Answers:


7

从内核文档中,在Documentation/x86/x86_64/mm.txt

Virtual memory map with 4 level page tables:

0000000000000000 - 00007fffffffffff (=47 bits) user space, different per mm

2 47字节= 128TiB


2 ^ 48 = 256 TiB ;-)
惠更斯

答案很简洁。有关更多信息,请参见lwn.net/Articles/117783 35位页表索引,而4096字节(2 ^ 12)是页的大小。提供2 ^(35)* 2 ^(12)= 2 ^ 47 = 128 TB
pveentjer

4

简短答案

每个Linux进程最多可以处理128 TB的虚拟内存。但是,这不仅仅是Linux内核可以实际处理的。因此,该限制是理论上的。

根据可能的“最坏情况”使用场景,可能已任意选择了它。

详细的答案

您实际使用的RAM不能超过硬件允许的数量(这些天通常是 48位= 256 TB ),然后您将受到Linux内核可以处理的物理内存量的限制。

例如,在Intel x86 64位架构,Linux不能使用超过64 TB的物理内存(从版本2.6.30,但它是 16 TB之前)。请注意,RHEL 6使用2.6.32内核。

在64位s390体系结构上,将应用相同的限制(自2.6.28开始)。但是,如果您使用32位,则限制为4 GB,但是使用一个称为PAE奇怪技巧,您可能会增加到64 GB(通常在x86上使用)。

我认为其他64位体系结构具有较低的限制。

有关更多信息,请参见Red Hat 限制表(感谢Huygens)。


1
此时,x86-64上的48位限制在很大程度上是硬件限制。en.wikipedia.org/wiki/X86-64#Virtual_address_space_details

可以,但这取决于实现,并且将来可能会更改。问题是关于理论上的限制。我更新了我的答案。
Totor

2
这取决于硬件实现。当今的AMD和Intel x86_64架构仅支持48位地址空间。这种架构可能会在未来发展。
惠更斯州2013年

1

不应混淆虚拟内存和物理易失性内存。前者特定于CPU体系结构,并将映射到易失性和非易失性存储器。从内核的角度来看,后者(即RAM)应独立于CPU体系结构。

今天的AMD和Intel x86_64实现支持48位可寻址虚拟内存。这意味着内核可以为每个进程VM处理2 ^ 48 = 256 TiB。
x86_64体系结构上的Linux内核将可寻址的VM空间分为2个,用户空间为128 TiB,内核空间为128 TiB。因此,一个过程理论上可以处理总共128 TiB的虚拟内存。

内核可以处理的易失性物理内存的最大值是一个不同的方面,但是我不知道此信息。

关于RHCSA作者声明

声明的作者“没有实际的最大RAM,从理论上讲,您可以在RHEL 6上运行128 TB RAM。” 使用错误或误解的术语。这是Red Hat网站上的表格,总结了RHEL 3、4、5和6的功能。他们明确指出“ [针对RHEL 6的最大x86_64每个进程的虚拟地址空间为128TB]。

该页面指出RHEL 6最多支持2TB / 64TB RAM(物理易失性内存)。我猜这意味着它已经过2TB最大RAM的认证,理论上可以达到64TB。SLES在这方面要清晰得多


您说一个进程可以处理128 TB,但是整个系统(几个进程)可能拥有并使用更多,因此“您可以在RHEL 6上运行128 TB RAM”这句话对我来说似乎很尴尬,尤其是考虑到官方Linux内核无法...
Totor 2013年

您能否提供指向语句“您可以在RHEL 6上运行128 TB RAM”的位置的指针?我怀疑这是来自红帽他们自己!作者正在混淆物理内存和虚拟内存。
惠更斯州2013年

@Totor我刚刚用未确认RHCSA声明的Red Hat网站链接更新了我的答案。
惠更斯岛2013年

@Totor:在Linux内核上,HIGHMEM尚未移植到64位。如果没有HIGHMEM,则所有RAM都映射到内核地址空间,即128 TB,因此是限制。
于洪宝

0

理论上的另一个原因是缺乏实施经验。

对于程序员来说,通常要比硬件具有的功能早得多地确定变量的大小,这样一来,随着具有该功能的硬件出现十年或更长时间,内核就不需要进行危险的拆装编程。

但是可变大小不是唯一的限制。数据结构及其算法施加了自己的限制。想象一下,对描述128TB的每个4KB页的数据结构进行线性遍历。有一些明显的响应:不要使用4KB页面,不要使用线性数据结构,不要经常访问那些数据结构,将尽可能多的负载卸载到硬件中。但是,还有更多微妙的数据结构+算法限制,直到遇到这些限制我们才知道。

我们知道,如果明天我们能神奇地发现一台128TB的PC并尝试在其上启动Linux,它的性能将非常糟糕,甚至可能无法启动。但是,固定算法是微不足道的,固定数据结构是一项工作,但比固定已广为人知的变量的大小要少得多。因此,随着内存大小的增加,我们将看到这种性质的变化。

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.