2008年1月1日

[转载]九阳神功秘籍 4GB内存平台全探秘

随着近来国际市场内存颗粒的逐渐跌价,内存条的价格也在不断降低,玩家们纷纷装备上了2GB容量的内存,而插满所有插槽达到4GB的内存容量对很多人也是一个极大的诱惑,在单条1GB内存价格300元上下的时候,4条也仅1200元,很多发烧友都能承受得起,因此时下组建4GB容量内存平台的玩家也不在少数。



然而,人们兴冲冲地买回4GB内存后,打开电脑进入系统,却发现系统显示的内存却远远不到4GB,是内存缩水了么?还是操作系统不支持4GB内存呢?无论如何,花了这么多钱却得不到应有的东西,无论是谁都很难受的。

那么,这些丢失的空间究竟哪里去了呢?



从上图可以看出,4GB的系统地址空间中,PCI内存范围占用了大量的地址范围——接近750MB,导致最后系统内存只有3.25GB的罪魁祸首就是这部分空间。

这部分空间主要是什么内容呢?






上表列出了这部分黑洞空间包含的内容,我们可以看出,这些都是跟BIOS、PCI/PCIE设备等有关,系统和这些设备都是使用内存地址空间来通信的(以往也使用I/O Port来进行通信,然而其速度不够理想),我们称这部分空间为MMIO(Memory Mapped Input/Output,内存映射输入输出)空间,由于这些地址空间被设备所占用,实际上插在内存插槽上对应的空间就闲置、浪费了,因此我们花了4GB 内存的钱,实际却只能得到3.25GB的可用空间!

这部分内存能不能回收利用呢?

符合PCI标准具有MMIO空间的系统,内存空间主要分为6大部分,如下图 P965 芯片组上的例子,分为一个保留地址区域、两个主内存地址区域、两个PCI内存地址区域及一个主内存回收地址区域:




首先我们要清楚,在一个 IA32 系统上具有很多个地址的概念,在不考虑软件方面因素的时候,我们需要讨论到两个地址:物理地址和系统地址。

物理地址是指 CPU 可以寻址的地址范围,具有 36bit 内存总线的现代 CPU 可以支持对64GB 的地址空间进行寻址(通过 PAE 技术, Physical Address Extension,物理地址扩展,从 Pentium Pro 开始 IA32 CPU 便开始支持这样的技术),而系统地址是指一个系统中插在内存槽上的内存的实际分配方式,也是操作系统中对应着的物理内存分配方式。

这样按照物理地址空间来划分,低于 4GB 的内存中具有的一个 PCI 内存区域就是我们通常说指的 MMIO 区域,由于对这部分地址的寻址都被内存控制器路由至相关的设备(如显卡等),因此这部分的内存就消失了,不能使用了,要想回收这部分空间,就要将对这部分地址的寻址正确地路由至内存,而不是路由至 MMIO 设备,这就是“回收地址空间”。

由于 MMIO 占用的空间过于巨大——可以达到 1GB 以上,在一些 4GB~8GB 内存容量的服务器上损失就非常巨大——通常服务器需要大量的内存,这部分内存很重要——因此,芯片组厂商们——如Intel就开始考虑采用一些技术来回收利用这部分丢失的 MMIO 内存空间(实际上,MMIO 的存在可以说是 PCI 标准所规定的,而 PCI 标准,就是 Intel 制定并力推的,因此解决这个问题,Intel责无旁贷)。

Intel 在服务器/工作站芯片组上率先布署了 Memory Remapping(内存重映射)技术,用以解决这个问题。



如图所示,在 CPU 寻址的物理空间中,MMIO 空间仍然存在,然而,在实际插入的内存中,这部分 MMIO 空间对应的却是一部分重映射内存空间,在 CPU 想使用这部分内存的时候,CPU 将寻址高于 4GB内存的这部分空间,内存控制器再对其进行转换,再寻址到实际的内存条。

由于对 MMIO 空间部分的地址进行了转换操作,因此这个技术就被称为 Memory Remapping 技术,通过这个技术,系统得以完全利用所有插上去的 4GB(或者更多)的内存,而得以消除令人尴尬的 3.25GB 系统内存容量显示。

如前面所看到的,CPU访问的是物理地址空间,它并不区别自己访问的是MMIO空间还是重映射的内存空间,因为进行映射操作的是内存控制器。通过内存重映射,操作系统想访问以往被MMIO占用、现在属于重映射内存区域的部分内存的时候,经过转换后CPU寻址的实际地址不是内存条中对应的地址,而是出于更高地址的另一部分空间,同时CPU也可以继续访问MMIO空间,仍然使用传统的MMIO地址。

在AMD Athlon 64这样的集成内存控制器的产品上,执行内存重映射操作的部件就包含在CPU中,而在Intel这样的架构上,操作就由主板上的北桥芯片来完成。
Intel Memory Remapping 技术最先出现在服务器芯片组上,然而由于桌面芯片组的不停发展,以及桌面操作系统对内存支持的不停进步,引入 Memory Remapping 技术也变得非常自然了。



当前的 Intel 支持 Memory Remapping 技术的桌面芯片组并不多,可想而知都是属于较高端的系列,即 Intel 955X、Intel 975X 和 Intel P965/G965 这几种,值得一提的是,这几种芯片组同时也是支持8GB内存容量的芯片组,以往的 Intel 945、Intel 925 系列等虽然也能支持 4GB 内存,然而它们不支持 Memory Remapping 技术,因此在这些系统上人们实际上无法得到完整的 4GB 可用空间。

其他芯片组厂商方面,AMD 的 Athlon 64 等级以上的CPU都对类似的技术提供了支持,而 NVIDIA 只有 680i SLI 芯片组有提供,可见我们的选择还是不少的——Intel系统除外。
还有一个需要注意的地方是,虽然主板芯片组支持这个特性,然而没有 BIOS 打开这个功能的话也是徒劳,这个现象在较为低端的 965/975/680i 主板上已经屡见不鲜了。


在碰到这个现象的时候,很多玩家的第一个想法是操作系统不支持 4GB 的内存,现在我们知道是否支持 Memory Remapping 是一个很关键的条件,不过这个现象也的确跟操作系统相关。




从前面提供的系统截图中我们就可以看到,同样是打开 Memory Remapping 技术,Windows Server 2003 和 Windows XP 提供的系统内存就有不同,实际上,不同版本的Windows XP 提供的系统内存都有不同!



这个现象就表明了操作系统对系统内存支持的能力以及对 Memory Remapping 技术的支持能力,如 Windows XP 这样的定位为“桌面”的操作系统就不能充分发挥 Memory Remapping 技术的威力,而 Windows Server 2003 这样的“高级”服务器操作系统则可以充分配合同样源自服务器领域的 Memory Remapping 技术。


由于 Intel 955X/975X/P965/G965 及 NVIDIA 680i 都开始提供对 8GB 系统内存的支持(AMD 的 CPU 则内置了这种能力),因此在操作系统方面的选择上就需要开始注意,下图显示了当前主流 Windows 操作系统的内存容量支持能力,当然 Windows 98/ME 这样的系统已经鲜有人使用了,这里只是作为其他操作系统的对比。




915G 是一个内置显卡的 Intel 芯片组,支持 4GB 内存容量,然而并不支持 Memory Remapping 技术。








可见,不支持 Memory Remapping 的情况下,不管使用什么操作系统,都会浪费掉至少 750MB 的内存空间。





Intel的955X/P965/G965/975X都是比较高端的桌面芯片组,因此它们提供了Memory Remapping的支持,这些芯片组也都能支持最高达8GB的内存容量。

关闭Memory Remapping,P965只能提供3008MB的内存给操作系统。



而同样关闭Memory Remapping,975X能提供3200MB。



P965配合Windows XP SP2,可以提供3.25G内存给操作系统。



而 P965 芯片组配合 Windows Server 2003 Enterprise Edition 操作系统,则可以完全提供4GB的内存容量,从任务管理器可以看出,除去系统自身消耗的内存,剩下的都是实际可以提供给应用程序的内存,容量大概为3901972KB,也就是3.72GB。使用服务器操作系统可以比使用桌面操作系统提供更多的可用内存空间。




是的,驱动程序也是一个很重要的因素,因为这个缘故,Windows XP SP1升级到SP2系统显示的总内存反而降低了,这就是为了提高驱动兼容性而做出的改动。

大部分的驱动程序都问题不大,然而我们经过大量实验,找到了一个很明显的例子:显卡驱动程序。

早期的NVIDIA显示驱动并不能在3GB及以上内存的系统下正常工作,直到最近才提供在Windows XP和Vista下大容量内存系统的支持,而在Windows Server 2003操作系统上,则至今没有完全解决(最新的158.19 Beta驱动已经可以在4GB内存系统上使用了,不过最新的正式版驱动——97.94 WHQL版本仍然不能,安装158.19Beta之前的驱动会导致系统无法正常启动)。

幸好,ATI的驱动程序在4GB的Windows Server 2003下工作良好,这让大容量内存系统的用户具备了一个选择。




我们在一块不提供 Memory Remapping 选项的 Foxconn P965 主板上搭建了一个平台,虽然没有提供 BIOS 选项,然而它实际上处于一直打开的状态,因此我们的 4 条 1GB Kingston DDR2 667 工作良好。





以上都是基于同一块主板及相同的4条内存,不过其他配置有些改动。Windows Server 2003系统关闭了虚拟内存。





从测试可以看出,系统性能基本上没有特别的变化,缘何?

因为架构的原因,现代的普通 32bit 操作系统,可以寻址 4GB的内存空间,其中用户模式的应用程序可以寻址的通常只有 2GB,而剩余的 2GB 空间被限制为只能由核心模式访问。提供多于4GB容量的内存,每一个用户模式的应用程序可以寻址的容量仍然没有改变——不过,不同的应用程序都具有互相独立的的 2GB 寻址空间,因此要运行大量应用程序的服务器可以用大量的内存中获益。

对于普通用户而言,4GB内存,或者更大容量的内存会具有什么优势呢?虽然单个应用程序的寻址被限制为了 2GB(或者,调整为 3GB),然而更大容量的内存可以让操作系统/驱动程序需要的运行空间更加广阔,在多个应用程序的情况下,内存的利用度也可以更高,并且大容量的内存条件下,用户可以关闭虚拟内存,从而大大提升系统的整体性能。

再从应用来看,如 WoW(魔兽世界)这样的游戏可以应用大约 1GB~1.5GB 的内存空间(是指单独的 WoW进 程),WoW 内部包含了一个解释语言编程系统(俗称的 LUA 语言),所有的 WoW 插件都通过这个系统工作,因此WoW具有使用更大量内存的可能性。在这样的环境下,2 GB 内存运行就会显得有些不足用,特别是在同时运行大量浏览器、杀毒软件、下载软件及即使通信软件的情况下。

程序只能寻址2GB的这个限制是操作系统架构引起的,虽然不同的操作系统实现具有不同的值,不过多数现在的操作系统在这一点上都很一致。

为了让程序突破 2GB 寻址的限制,近代 Windows NT 核心提供了一个变通的方案:4GB内存调整优化技术,通过这个技术,可以将用户模式的寻址空间扩大至3GB,这样核心寻址空间便被限制为 1GB 了,需要超大内存容量的应用程序可以从这个特性中获得性能改善,如 SQL Server 数据库这种类型。要使用这个 4GB 内存优化技术,用户需要在Windows Server操作系统的启动参数中加入 /3GB 开关。这个特性同时需要操作系统打开 DEP(数据执行保护,其实/3GB开关需要的是PAE的支持)。

然而让用户模式程序能多寻址 1GB 毕竟还算是治标不治本,于是 Microsoft 还在自己的操作系统提供了一个比较重要的特性:AWE(Address Windowing Extension,地址窗口扩展) API集,这个 API 集的原理其实是基于这样的一个事实:所有的支持PAE的操作系统都有能让IA32 处理器直接寻址 64GB 物理地址的 API,回想前面的内容,物理地址是 CPU 处理的地址,而每个程序私有的 2GB 内存地址被称为虚地址范围。

每个支持 PAE 的操作系统都具有这种 API,差别只是在于这些 API 能否提供如内存共享、进程间通讯、分页等等这些功能,微软在Windows 上提供了一个简单明了的 API 组——也就是 AWE 地址窗口扩展 API 组,它仅仅由5个API调用组成,包括了核心级和用户级调用,使用 AWE 分配得到的内存是非分页、锁定的,其他程序无法访问,也无法交换到页面文件(虚拟内存)上去,对性能具有很大的提升。

通过使用 AWE API,核心模式/用户模式可以轻易地突破 2GB 容量的限制,最高可以达到64GB,如 SQL Server 就使用了这个 AWE API(可设定),从而提高对大容量内存的能力,大大提升了应用软件/系统的性能。

64bit系统中不存在这个问题,实际上,64bit 系统不需要 PAE 的支持,也不支持 AWE API,用户模式和核心模式的程序都可以直接访问非常大容量(8TB)的内存空间,可惜的是,32bit 平台上遗留的大量资源,让 64bit 应用迄今尚未开始流行。

测试中,4GB内存相对于2GB内存而言,提升并不是很大。

在模拟实际办公的 Business Winstone 测试中,4GB 内存具有可见的提升,从 24.5 分达到 25.6 分,这也表明了更大容量内存对具有复杂应用程序环境(办公通常需要使用到大量不同的应用软件)具有的一些提升,而一些工业设计软件则可以充分利用大容量内存的优势,如 CineBench 代表的 3D 设计软件。

常见的游戏软件对大容量内存的利用并不高,不过大容量内存可以进一步提升系统的响应能力,同时允许用户打开更多的软件,对于一些用户而言,可能具有不小的诱惑,同时考虑到 4GB 内存的成本仅为 1200 多,并不难以让人接受。通过 4GB 内存调整优化技术和 AWE API,程序可以突破 2GB 寻址空间的限制,不过后者需要程序设计的时候使用新的 API,而前者则非常方便,不过只能用在 Server 版本的 Windows 上。

当用户选择布署4GB或者更多的内存时,需要考虑到使用的主板以及操作系统,Intel平台上,目前只有 955X/P965/G965/975X 和 680i SLI 可以支持 Memory Remapping 技术,让用户充分应用 3GB 以上的内存,AMD的选择可能更宽一些。然而用户需要仔细考察主板,确保提供这个选项的开启,低端的使用这些芯片组的主板有时并不提供这个特性,这实际上损失了用户得到的内存容量。



操作系统方面,32bit的 Window XP 和 Windows Vista 都能支持 4 GB 的内存,然而可以提供给用户的会根据情况有所差别。假如用户想在 32bit 环境下使用多于 4 GB 的内存,你目前只能考虑 Windows Server 2003 Enterprise Edition,否则,你就需要考虑转向 64bit 的操作系统。

从目前来看,在超过3GB内存的系统上,都使用最新版显卡驱动程序的话,NVIDIA和ATI的图形芯片都可以选择,然而 NVIDIA 的 G80 目前在 Windows Server 2003下只能选择 Beta 版的驱动,而其他 NVIDIA 图形芯片则没有什么解决方法,用户只能选用 Windows XP 或者Windows Vista。ATI 方面则没有问题,主流的 Catalyst 驱动可以完好地运行。

没有评论: