以下是我的系统配置:
- Windows 8 开发者预览版(32 位)
- 2 GB 内存
- Nvidia GeForce 8400 M(带 256 MB 内存)
为了运行内存密集型应用程序,我需要将虚拟地址空间从 2 GB 增加到 3 GB。(请注意,这与虚拟内存——一个完全不同的概念。)
将虚拟地址空间增加 1 GB 可能产生哪些负面影响?我的猜测是 Windows 将缓存更少的磁盘读取、更多地使用页面文件等。还有什么更严重的问题需要我担心吗?
答案1
在 32 位版本中,您的虚拟地址空间总共为 4GB;2GB 用于用户空间,2GB 用于系统空间。当您将 3GB 用于用户空间时,您只将 1GB 用于系统空间。这意味着耗尽系统地址空间的难度是原来的两倍,因此您可能会遇到内核级驱动程序问题(例如磁盘控制器和其他 I/O)。
我在 TechNet 上找到了这篇出色的文章,它解释了一些陷阱:“内存管理 - 揭秘 /3GB“……”
以下是一段适用的简介:
请记住,我们只有 4GB 的总地址空间可供使用。如果我们必须将这个地址空间的另外 1GB 分配给用户模式空间,那么系统空间就会减少一半。驱动程序、堆、分页和非分页内存现在都只有一半的资源可供使用。但是,由于内存映射的工作方式,将内核空间减少一半的作用远不止减少地址空间。内核虚拟内存空间中的许多结构被削减了 50% 以上。例如,我们以安装了 1GB RAM 的 Windows Server 2003 Enterprise R2 计算机为例,比较了启用和未启用 /3GB 开关时的一些值。
默认操作系统版本:
免费系统 PTE:251,980(1,007,920 kb)
非分页池最大值:206,848 kb
启用 /3GB 后:
免费系统 PTE:34,884(139,536 kb)
非分页池最大值:129,312 kb
如您所见,空闲系统 PTE 下降了 200,000 以上。请记住,这只是一台没有任何负载的测试服务器。处于中度到重度负载下的机器很容易耗尽空闲 PTE - 这意味着系统无法再映射系统页面,例如 I/O 空间、内核堆栈和内存描述符列表。此外,在启用 /3GB 参数后查看 NonPaged Pool。