/3GB 开关在具有 6GB RAM 和 PAE 的 win2k3 服务器上

/3GB 开关在具有 6GB RAM 和 PAE 的 win2k3 服务器上

我们目前正在评估在某些服务器上添加 /3gb 开关,以增加正在运行的进程(使用 IMAGEFILELARGEADDRESSAWARE 标志集进行编译)的可用内存,从而突破 2gb 的限制。

但是,我想了解的是,在 RAM 大于 4gb 的服务器上,内存在内核和用户进程之间是如何分配的。根据文档,Windows 将在 4gb 系统上将内存在内核和用户进程之间按 2gb / 2gb 进行分配。在服务器上启用 /3gb 时,内存将按 1gb / 3gb 进行分配。

我想知道的是,在启用了 6GB RAM 和 PAE 的服务器上,内存是如何分配的?内核是否仍然被限制为 1GB?

干杯,山姆

答案1

我想我会为其他人发布一个后续信息,尝试将信息整合到一篇文章中(基于我所学到的知识和已经发布的其他信息)。

宾夕法尼亚州:

PAE 将允许 32 位 Windows 服务器使用 4GB 以上的 RAM,最大容量取决于你运行的 Windows 版本(维基百科有一个很好的参考这里

需要注意的一点是,如果您打开了数据执行保护 (DEP) 或 NoExecution (NX),那么这将有效地启用 PAE,而无需在 boot.ini 中明确启用它。

最重要的是,PAE 对内存数量没有影响单个 32 位进程可以访问。它仅影响窗口可以“看到”和使用的内存总量(因此,您可以有 2 个进程,每个进程使用 2GB,而 Windows 在 6GB 系统上使用 2GB)

3 GB:

首先,当我谈论单个 32 位进程可用的内存时,我指的是进程虚拟地址空间. 对于 32 位 Windows 操作系统上的 32 位进程,限制为 4GB。

在系统上没有/3GB 开关,4GB 的虚拟地址空间在正在运行的进程和 Windows 内核之间被分割为 2GB/2GB。

启用 3GB 开关后,虚拟地址空间的分割将更改为 3GB/1GB。这样,进程就可以使用更多内存,但内核内存会受到影响。请注意:如果可执行文件是在设置了 IMAGEFILELARGEADDRESSAWARE 标志的情况下编译的,Windows 只会允许进程使用超过 2GB 的内存。

现在,正如其他帖子中提到的那样,使用 3GB 开关的代价是内核可用的内存更少。内存减少的主要影响之一是可用的页表条目 (PTE) 数量。页表是 Windows 虚拟内存管理器用来存储内存中虚拟地址和物理地址之间映射的数据结构。如果可用的 PTE 不足,那么即使进程尚未耗尽其地址空间,Windows 也可能无法在请求时为进程分配内存。

可以使用 perfmon (\Memory\Free System Page Table Entries) 测量空闲 PTE 数。Microsoft 认为低于 5000 的任何数都是关键数。例如,在原始帖子中提到的服务器上,没有 3GB 开关并且进程正在运行,空闲 PTE 数约为 160k。在启用 3GB 之后但在进程启动之前,Windows 报告空闲 PTE 数为 3.5k(大幅减少)。如果我们启动了进程,这个数字会迅速下降。

补偿这一巨大变化的方法是启用 b​​oot.ini 中的 USERVA 开关。通过设置 USERVA=2800,这会移动内存中的 3GB / 1GB 分割并将大约 250MB 归还给内核供其使用。例如,在我们的系统的 boot.ini 中设置 USERVA=2800 后,空闲的 PTE 计数现在约为 60k,进程正在运行(比我们看到的 3.5k 好得多)。

有关 USERVA 开关的更多信息,请参阅 Microsoft KB文章

值得一提的是,启用 PAE 也会对空闲的 PTE 数量产生影响。PAE 开关会导致每个 PTE 条目使用正常分配的虚拟地址空间的两倍。

希望这可以为以后查看的人提供一份简洁的信息摘要。

干杯,山姆

答案2

RunAs Radio 的节目。

本集主要关注的是显而易见的“为什么 64 位更好”——然而嘉宾则谈到了“为什么应该避免使用 /3GB”。基本上,它显著减少了操作系统可用的页表条目数量——以至于操作系统变得不稳定。

简而言之 - 对于提供单一功能的服务器(如 AD 控制器或 SQL Server),它可能适用,但对于提供多种功能的系统,应避免使用。归根结底,“您的里程可能会有所不同” - 请记住,/3GB 很容易使操作系统不稳定。

答案3

即使应用程序只有 32 位,您也可能需要考虑 64 位操作系统。在 Windows x64 上,32 位进程会获得 4GB 的 RAM,而不是 2GB。

请参阅虚拟内存部分KB294418了解详情。

答案4

在我以前的系统上,我使用了 /3GB 开关,因为我的一个应用程序需要大量内存。最近,我升级到了 64 位 Vista 系统,并将应用程序升级到了 64 位版本,这样它就可以使用我现在拥有的全部 12 GB 内存。但是,其他 32 位应用程序仍然被限制在相同的 3 GB 内存(或 2 GB,不使用开关),因为它们无法看到地址指针的大小。(而在 32 位系统中,地址指针是 32 位...)

但是,只要 Windows 本身能够处理更大的地址指针,/3GB 开关与 3 GB 以上的 RAM 结合使用仍然有用。它允许 Windows 将更多应用程序保留在内存中,因此它会减少与磁盘的交换,从而提高性能。

PAE 是一种硬件技巧,处理器有更多引脚来发送地址。它们的数量从 32 个引脚(位)增加到 36 个引脚。这允许任何知道这些额外引脚的应用程序使用最多 64 GB 的 RAM。微软在其服务器软件中充分利用了这一点,因此 Windows 可以处理最多 64 GB 的内存。如果占用那么多内存的进程也知道这些额外的引脚,它也可以分配最多 64 GB 的 RAM。这种应用程序技术称为地址窗口扩展当然,这也需要应用程序内的特殊代码来处理此内存,并使我想起了旧的 MS-DOS 时代,其中应用程序指针最初仅限于 16 位(64 KB),但由于处理器有 20 个引脚(后来是 24 个),您可以使用特殊的 32 位指针指向地址或仅坚持使用较旧的 16 位指针并限制为 64 KB。(20 位是 1024 KB,DOS 使用底部 640 KB 或 1 GB 以上的所有内容。24 位是 4 GB,这是第一批 80386 处理器的上限。)

相关内容