分享

【谁偷了我的内存容量? 4GB内存平台全探秘】-内存大讨论论坛-ZOL中关村在线

 QCD_123 2011-04-01
谁偷了我的内存容量? 4GB内存平台全探秘
来源:it168 坦荡 编辑
随着近来国际市场内存颗粒的逐渐跌价,内存条的价格也在不断降低,玩家们纷纷装备上了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系统关闭了虚拟内存。

  Windows XP SP2从2GB内存配置提升到4GB内存配置,系统的内存实际上只提升了1.25GB。

  从测试上看,大部分项目得分具有非常小的提升,这不会是驱动用户升级的理由。

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

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

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

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

程序只能寻址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,用户模式和核心模式的程序都可以直接访问非常大容量的内存空间,可惜的是,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都能支持4GB的内存,然而可以提供给用户的会根据情况有所差别。假如用户想在32bit环境下使用多于4GB的内存,你目前只能考虑Windows Server 2003 Enterprise Edition,否则,你就需要考虑转向64bit的操作系统。

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多