服务器 频道

突破4GB内存屏障 64位平台解析(下)

  【IT168评测中心】从上一篇文章《突破4GB内存屏障 64位平台解析(上)》中,我们已经知道了32位桌面操作系统无法的局限,以及32位系统并不意味着只能应用4GB的内存。


通过支持PAE,32位Window Server 2003最多可以支持128GB的内存(需要数据中心版本)

  我们可以使用32位的服务器操作系统来解决这个问题,那为什么我们还要用64位操作系统呢?


Why towards 64?

  接下来我们会看到64位独特的优势,首先我们会看看32位操作系统仍然存在的内存问题。

  虽然通过Memory Remapping(内存重映射)可以解决大部分MMIO(内存映射IO)的问题,不过有些时候,人们会碰到这个情况:


DELL机皇XPS 730上的4GB只被Vista认出约2GB内存

  近些年,在一些高端的桌面系统上,使用32位操作系统会碰到如图的问题:可用内存容量非常之低,一些PC供应商会正确地指出,这是高档显卡占用了。实际上,是这些显卡的MMIO空间占用了,如下图所示:


一些具备怪兽级别显卡的4GB内存系统实际只有可怜的2GB可用(基于最新的BIOS,比上图多了256MB容量)

  这台DELL XPS 730配置了NVIDIA 790U主板,以及两块ATI 3870X2显卡,每块3870x2显卡里面包含了两个3870 GPU——也就是RV670显示核心,ATI也将2颗RV670叫做R680。单颗RV670拥有320个流处理器,支持DX10.1和SM4.1,拥有256bit的显存带宽,基层UVD单元支持高清视频解码功能,2颗RV670组成的R680拥有640个流处理器,512bit的显存带宽,核心频率为825MHz,显存大小为1GB(每个核心512MB),频率为1800MHz。在XPS 730里面里,我们可以看到它们占据了90000000 - 9FFFFFFF、A0000000 - BFFFFFFF、B0000000 - BFFFFFFF、C0000000 - CFFFFFFF这四段每段256MB的空间(从2304MB开始到3328MB),这样就整整少了1GB的可用内存空间。很多高端PC都有这样的问题,形成了很滑稽的情况:花了大价钱却只得到很少的可用内存,严重影响到日常操作乃至游戏、工作(主要指图形编辑等)。

  一些人可能会认为32位操作系统可以解决问题,实际上这个方法并不总是可以工作。DELL XPS 730上我们尝试了32位的Windows Server 2003和Windows Server 2008,可用内存实际上并没有发生变化,为什么呢?

  部分原因是设备的问题,Windows产品组的工程师发现,很多测试计算机会发生崩溃、挂起,或者无法启动的故障现象,某些设备驱动程序——主要是一些桌面计算机(而非服务器)上的显卡或者声卡——其驱动程序在编写时没有考虑到内存大于4GB的情况。所以,这些驱动程序会截去那部分地址,从而导致内存冲突以及其他副作用。较早期的NVIDIA驱动在4GB或以上就有问题。当然现在情况已经好转了。

  为了确保兼容性,应对设备的这些情况,一些主板固定地将他们的MMIO保持于低于4GB的空间,这样实际上就丢失了Memory Remapping的大部分内容,哪怕理论上说操作系统(如使用Windows Server 2003和Windows Server 2008)可以使用PAE可以对高于4GB的MMIO空间进行寻址。对于XPS 730的主板来说,情况就是它无法将MMIO映射到高于4GB的空间(很可能它就不支持Memory Remapping技术)


64位不需要Memory Remapping,虽然显卡的MMIO空间仍然在4GB以下,仍然比32位多出1GB以上的可用内存

  在我们安装了Vista x64之后,内存终于正常了,虽然这块NVIDIA 790U主板仍然不痛快地将3870x2的MMIO空间设置在2GB开始,不过可用的内存(任务管理器下)达到了3394MB(在以及打开了几个应用程序的情况下),整整比32位下多了1GB以上。如果我们要购买高端游戏计算机,则应该请OEM厂商预装64位Windows。

注意:假如你也想看自己电脑上的设备内存地址占用,要记住32位下看到的地址总是低于4GB的,因为Memory Remapping是在硬件层次(内存控制器)做出的变动,因此操作系统是无法看出来的。

  我们已经知道32位平台存在的很多问题,光靠服务器操作系统也是无法解决的,例如一些高端游戏平台使用32位系统天生就会少掉很多可用内存,而64位可以彻底解决MMIO的问题。不过64位的优点还不止这些,我们来看看最最最底层上的分别。

  基于x86处理器上出现的64位扩展指令集被称为x86-64,同时包括了AMD的64位(AMD64)技术和Intel的64位(EM64T)技术(我们一直避免谈论IA64架构,因为其用户面实在狭窄),这两种技术实际上是大部分相同的,只存在很小的差别(AMD64与Intel EM64T对EFER寄存器定义稍有不同;EFER寄存器是用来控制和监视扩展功能状态的一个寄存器)。


AMD64与EM64T的不同之处

  除了些微的不同之外,两种64位技术是很相似的,下面就是通常为x86-64的处理器架构上的变化:


x86-64的根本变化:更强大的寄存器

  X86-64不仅仅将原有的32位寄存器扩充为64位,还增加了一倍的GPR(通用寄存器)和XMM寄存器(也叫SSE寄存器)。例如,AX就是16位寄存器(AX可以分为AH和AL两个8位寄存器分别操作),EAX就是32位寄存器,那么RAX就是64位寄存器。

  一个计算机系统里面最快的存储单元不是U盘和硬盘,也不是内存和显存,也不是处理器的L1和L2,最快的是寄存器,在汇编语言里面可以直接使用 MOV RAX, RBX这样的语句进行操作(EAX/RAX就是常用的通用寄存器的第一个,接下去的是B、C、D等)。寄存器是CPU内部用来创建和储存CPU运算结果和其它运算结果的地方,扩展的位数可以提高通用运算的精度,扩充的寄存器数量将提供更快的执行效率,降低存取L1/L2的频率,因此x86-64操作从底层上就比32位要快10%~30%

  由于寄存器上的变化,在运行纯64位代码的时候,64位系统可以具有明显的性能提升,不过大多数情况下,系统都在运行32位应用程序,因此额外的性能提升被这些兼容机构(例如WOW64——Windows32 on Windows64子系统)抵消掉了,对于大多数人来说,64位带来的最大感受可能是内存支持上的变化。

  自从PAE出现之后,处理器寄存器的宽度就已经开始和地址总线的宽度不一致了,64位条件下也是这样,虽然64位寄存器可以直接使用64位的线性地址,但是在内存控制器上全部实现可能会有些难度,因此实际支持的位数就要少些。早期的AMD64和EM64T的实现位数还有所不同。第一个具有支持64位的x86-64处理器支持48位线性地址(实际上,规范的地址必须将位63到位48全填0或全填1,填0还是填1要看位47是0还是1)。


64个处理核心、2046965MB(2TB)内存的Windows Server 2008 Datacenter x64 Edition

  48位线形地址意味着我们只可以直接寻址256TB的空间,这已经是一个相当大的数值了,当然现在建造的操作系统实现上会受到更大的限制,例如Windows Server 2008的64位数据中心版的规格上只说明它支持2TB的内存。虽然它来理论上也可以支持更大的容量,但是目前只允许这个数值。Windows 64现在使用的是44位寻址,也就是16TB。

  Windows Vista、Windows Server 2003与Windows Server 2008操作系统的物理内存支持对比,更老的Windows版本可以看《九阳神功秘籍 4GB内存平台全探秘》:

Windows Vista、Windows Server 2003、Windows Server 2008
操作系统物理内存支持对比
IT168评测中心
操作系统分组
类别
32位版本64位版本
操作系统
Windows Vista Starter
4GB
无此版本

Windows Vista Home Basic

4GB
8GB
Windows Vista Home Premium
4GB
16GB
Windows Vista Business
4GB
128GB
Windows Vista Enterprise
4GB
128GB
Windows Vista Ultimate
4GB
128GB
Windows Server 2003 Web Edition
2GB
无此版本
Windows Server 2003 Standard Edition
4GB
16GB
Windows Server 2003 Enterprise Edition
32GB
16GB w/4GT
64GB
Windows Server 2003 Datacenter Edition
128GB
16GB w/4GT
512GB
Windows Server 2003 Enterprise Edition SP2
64GB2TB
Windows Server 2003 Datacenter Edition SP2
128GB
64GB w/4GT
2TB
Windows Server 2003 R2 Standard Edition
Windows Server 2003 Standard Edition SP1
4GB
32GB
Windows Server 2003 R2 Enterprise Edition
Windows Server 2003 Enterprise Edition SP1
64GB
16GB w/4GT
1TB
Windows Server 2003 R2 Datacenter Edition
Windows Server 2003 Datacenter Edition SP1
128GB
16GB w/4GT
1TB
Windows Home Server
4GB
无此版本
Windows Small Business Server 2003
4GB
无此版本
Windows Storage Server 2003
4GB
无此版本
Windows Storage Server 2003 Enterprise Edition
8GB
无此版本
Windows Compute Cluster Server 2003
无此版本
32GB
Windows Web Server 2008
4GB
32GB
Windows Server 2008 Standard
4GB
32GB
Windows Server 2008 Enterprise
64GB2TB
Windows Server 2008 Datacenter
64GB
2TB
Windows Server 2008 for Itanium
无此版本
2TB

  4GT技术就是4GB调整技术,可以将用户/核心内存模型调整为3G/1G,详见后面。

  可能上一页的表格不利于查找自己想要什么版本,没关系,可以看下面,这个表格是按照支持的容量来划分,同时不再考虑Sevice Pack对内存支持的影响:

Windows Vista、Windows Server 2003、Windows Server 2008
操作系统物理内存支持对比
IT168评测中心
操作系统
内存容量
Windows Server 2003 Web Edition
2GB
Windows Vista Starter
Windows Vista Home Basic
Windows Vista Home Premium
Windows Vista Business
Windows Vista Enterprise
Windows Vista Ultimate
Windows Server 2003 Standard Edition
Windows Server 2003 R2 Standard Edition
Windows Server 2003 Standard Edition SP1
Windows Small Business Server 2003
Windows Home Server
Windows Storage Server 2003
4GB
Windows Storage Server 2003 Enterprise Edition
Windows Vista Home Basic x64
8GB
Windows Vista Home Premium x64
Windows Server 2003 Standard Edition x64
16GB
Windows Server 2003 Enterprise Edition
Windows Server 2003 R2 Standard Edition x64
Windows Server 2003 Standard Edition SP1 x64
Windows Compute Cluster Server 2003 x64
Windows Web Server 2008 x64
Windows Server 2008 Standard x64
32GB
Windows Server 2003 Enterprise Edition SP2
Windows Server 2003 Enterprise Edition x64
Windows Server 2008 Enterprise
Windows Server 2008 Datacenter
64GB
Windows Server 2003 Datacenter Edition
Windows Vista Business x64
Windows Vista Enterprise x64
Windows Vista Ultimate x64
128GB
Windows Server 2003 Datacenter Edition x64
512GB
Windows Server 2003 R2 Enterprise Edition x64
Windows Server 2003 Enterprise Edition SP1 x64
Windows Server 2003 R2 Datacenter Edition x64
Windows Server 2003 Datacenter Edition SP1 x64
1TB
Windows Server 2003 Enterprise Edition SP2 x64
Windows Server 2003 Datacenter Edition SP2 x64
Windows Server 2008 Enterprise x64
Windows Server 2008 Datacenter x64
Windows Server 2008 IA64
2TB

  使用64位操作系统不仅仅是为了支持的最大内存容量更大,而是为了更强大的操作系统内部数据结构。

操作系统内部数据结构限制对比
IT168评测中心
分组
32位Windows限制64位Windows限制
类别
单个进程虚拟空间
4GB16TB
用户模式虚拟内存
(32位应用程序)
2GB
3GB(使用4GT技术,同时应用程序需要使用IMAGE_FILE_LARGE_ADDRESS_AWARE参数编译)
2GB
4GB(应用程序使用IMAGE_FILE_LARGE_ADDRESS_AWARE参数编译)

 

 

 

用户模式虚拟内存
(64位应用程序)
-

x64 :
8TB(应用程序使用IMAGE_FILE_LARGE_ADDRESS_AWARE)
2GB(应用程序不使用IMAGE_FILE_LARGE_ADDRESS_AWARE)

IA64 :
7TB(应用程序使用IMAGE_FILE_LARGE_ADDRESS_AWARE)

内核模式虚拟内存
2GB
1GB(使用4GT技术)
8TB
分页池Paged Pool
Windows Vista:
受限于物理内存

Windows Home Server
Windows Server 2003 :
约530MB
Windows XP :
约490MB
Windows 2000 :
约350MB
128GB
未分页池
Non-paged Pool
Windows Vista :
受限于物理内存

Windows Home Server
Windows Server 2003
Windows XP
Windows 2000 :
256MB
128MB(使用4GT技术)
128GB
系统分页表
Page Table Entry(PTE)

Windows Vista :
不详

Windows Home Server
Windows Server 2003
Windows XP
Windows 2000:
约900MB

128GB
系统缓存
Windows Vista :
受限于物理内存

Windows Home Server
Windows Server 2003
Windows XP
Windows 2000 :
约860MB
约448MB(使用4GT技术)
1TB

4GT技术:4GB调整技术,又叫3GB优化技术,在Boot.ini文件里配置/3GB或者/USERVA选项,或者配置Bcdedit命令的/Set IncreaseUserVa启动选项,可以将用户模式内存提升至3GB,相应地内核模式就降低到1GB(32位下)

   无论何种环境,每一个进程都会有自己的虚拟内存地址空间,对于一个用户进程来说,默认的2GB可能已经足够,然而对于操作系统核心来说——所有的内核模式程序包括内核、驱动程序、系统缓存等都共享着相同的2GB空间(从这点上看,Windows已经不怎么具有微内核的样子了,为了性能,Windows将许多本应该放在用户模式的系统服务都放进了内核),在一个大系统上很容易受到限制。


任务管理器里面可以看到系统缓存、分页池和未分页池的大小

  系统资源主要有四种:分页池、未分页池、系统分页表和系统缓存,系统缓存容易理解,系统分页表则是用来保存所有线程使用到的堆栈(Windows所有的线程都具有自己的堆栈),分页池和未分页池则是所有程序的核心模式组件使用到的内存部分,区别只是未分页池里分配的内存是不能交换到虚拟内存上面的,分页池上的则可以(从而可能保存到磁盘上去,当程序需要这些页面的时候,再读到内存里面来)。例如设备驱动就使用未分页池(假如放到虚拟内存并被交换到磁盘上时可能会发生灾难性的后果)。这些资源短缺的时候系统将会发生不可预料的事情,分页池吃紧的时候系统将会频繁地使用虚拟内存,从而不停读写磁盘减低性能,而未分页池吃紧的时候系统多半已经踏入鬼门关了。

  由于这些资源共同占用着相同的内核模式地址空间,因此在32位条件下很受限制,并且稍有不慎就会导致短缺,在64位环境下,这些资源的上限都可以达到128GB,因此系统运行起来会更加稳定,可以支持更多的进程/线程运行——也就是打开更多的窗口,运行更多的程序(从这点上看,32位的Vista也多少具有这些特征,虽然无法突破4GB的限制,不过系统资源的分配没有太过于固定的限制)。

  【IT168评测中心】从上、下整篇文章中,我们可以得知以下事实:

1:10多年前,32位处理器就已经可以通过PAE支持多达64GB的内存容量。
2:32位操作系统并不意味着只能支持4GB内存。32位的Windows Server 2003 Datacenter可以支持128GB内存。
3:32位应用程序也不意味着只能使用4GB内存。通过AWE,可以最多使用64GB。
4:在某些主板上,32位服务器操作系统也无法完全解决MMIO问题。64位系统可以。
5:64位模式的x86处理器拥有更多、更宽的寄存器,运行速度比32位模式要快。
6:64位Windows目前可以支持2TB的海量内存。64位进程可以最多使用8TB的内存。
7:64位Windows的系统数据结构更加灵活强大,从而可以提供更好的稳定性。

  对于拥有大内存的用户来说,我们应该不难做出操作系统上的选择了(当然,可以选择硬件的情况下,请先参考第二页选择一下主板,可以提升32位下的表现)。如果你已经购买了64位硬件(主要是64位处理器),但是仍然运行着32位系统,那么强烈建议你尽快升级到64位系统,只有这样你的新硬件的性能才能得到充分发挥。如果你是高端用户,例如你经常需要进行图形处理、视频压缩、CAD设计、运行大型游戏以及编程等比较耗费资源的应用,并且你所使用的应用软件已经有了64位版本,那么你应该考虑尽快升级到64位系统上来,这样对你工作效率的提高是显而易见的(对于我们的编辑来说,最让人振奋的可能是Native 64的Adobe Photoshop CS4套件即将发布了)。

  由于64位Windows对32位应用程序的兼容性非常好(64位Linux的情况比较不同,不过好在用户可以自己编译64位应用程序),因此在64位Windows上进行32位应用也是一个不错的选择。笔者顺便提醒一下,高端桌面PC选用Windows Server 2008 x64并不好。选择Windows Server 2003 x64和Windows Vista x64都不错。


笔者喜爱的Windows Server 2003 x64

  当然,64位应用也还有一些其它的问题,不过随着时光的流逝,这些问题将会逐渐解决或消失,64位是大势所趋,现在,就是时候了。

附:64位与32位运行性能的对比


同一套硬件平台:CineBench R10测试——32位Windows


同一套硬件平台:CineBench R10测试——64位Windows

  这套平台就是基于ASUS Z7S WS主板的优异交火平台,有兴趣的同学请继续关注我们IT168评测中心

0
相关文章