您的当前位置:首页正文

关于大内存(大于4G)支持的问题

2024-11-24 来源:个人技术集锦

问题

  Windows中4G大内存支持的问题

  解决方案

  本文是根据微软相关英文页面翻译后和其它资料整合而来。

  http://support.microsoft.com/kb/283037/zh

  http://support.microsoft.com/kb/283037/en

  因为4G以上的物理内存已经超过了现在Intel(32-bit)处理器所能够提供的32bit寻址范围,所以Intel从Pemtium Pro处理器开始提供了这种被称为"PAE"的36位寻址方式;

  本篇文章介绍了一些Windows操作系统以及许多UNIX操作系统所用来支持PAE寻址的技术.因为运行在这些环境上的处理器使用的是32位的指针,所以必须由操作系统来管理并且提供程序可用的36位PAE寻址方式.问题的关键点在于:操作系统如何来解决这个问题?效能,功能性,程序设计的建议性,以及处理方法的可靠性将直接决定大内存支持的实用性;

  虽然对于PAE的支持一般是和管理大于4G以上的内存联系在一起的,但是它也在windows xp sp2,windows server2003和随后的32位系统自动启用,用来支持硬件强制的数据执行防护功能(Data Execution Prevention ,DEP)http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/sp2mempr.mspx;

  本篇文章针对windows 2000, xp professionnal,server 2003,以及随后的操作系统版本,下面通称windows;

  技术背景:

  标准的32位寻址方式

  PSE 模式

  IA-32支持两种访问超过4GB(32位)的内存的方法;PSE(Page Size Extension,分页大小扩展)是第一种方法,已经在Pentium II上实现了.这种方法的有点是兼容性好,因为它保留了4byte大小的PTE(page table entry,分页表条目).然而,这种方法只能通过驱动程序实现.这样就受到了较大的性能限制,因为在读写超过4GB的内存时,一个缓存区复制的操作是必须的.PSE模式在PSE 36 RAM磁盘使用模式中使用.

  注意:高于4GB的分页必须使用PSE模式(4MB分页大小)

  PAE模式

  操作系统运作和应用程序支持

  共有5种应用程序支持的模式,前两种(服务器整合'Server Consolidation'和大Cache)是完全在操作系统中实现的,不需要对程序做出任何修改.接下来的两种模式(应用程序窗口Application Windowing 和进程分支Process Fork)必须将应用程序改为支持大内存API扩展.最后一个模式(PSE 36 RAM磁盘)不需要做操作系统作出任何改变(在驱动中实行了),但是要求改变应用程序以支持驱动.

  1.服务器整合

  2. 大cache

  对数据高速缓存使用额外的PAE内存也是可行的.如果操作系统支持这个属性,应用程序使用本功能时不需要被记录.windows advanced server和datacenter server支持在一个PAE平台上快速存取,而且能使用所有可用的内存

  3. 应用程序窗口

  在进程间共享高位内存将导致API和执行变得想当复杂.windows将避免这种分享

  总之,对分页的支持使操作系统的设计和运行变得更加困难,而且使预计的性能更难以达到.windows将避免高位内存分页.

  4.进程分支与共享内存

  这个应用程序支持的模式将线程一分为二或者更多的相同副本.每一个副本都由用户栈,系统栈,分配的数据空间与寄存器构成,他们之间的主要的差别一个是有父进程的Process ID (PID),其它的是新的PID.这种分支返回一个PID的值.子系副本的这个PID值为0或是该子系PID是父系的副本.

  5.PSE 36

  通过使用内核设备驱动,比如一个RAM磁盘,在不对操作系统有任何变动的情况下使用超过4GB内存将变得可能.基础操作系统(以32位模式运行)与该驱动程序(以PAE模式执行)间的的相容性一直都是保持以分页表宽度为4 byte来做维持的.这样的操作换来了多个对于开发而言非常低的影响:

  1.因为所有的I/o被强制执行双缓存而造成了效果的降低

  2.应用程序开发上的影响不比现在的API的需求少

  3.无法被当作"整合服务器"使用,因为所有的应用程序分享同一个4GB的物理内存空间..

  设计的执行

  操作系统为支持大内存做的操作必须直接处理这些问题才能成功.根据处理这些问题做出的设计抉择将直接影响操作系统的简易性,可靠性,及效能.

  IA32中支持大内存的技术问题

  内存共享和进程内通讯

  TLB 关闭

  例如一个简单的,但是算法上是正确的TLB shootdown序列可能是下面的样子:

  a.开始屏障(begin barrier)——除了一个处理器外停止所有处理器;让他们执行HALT指令或者空循环。

  b.让那个没有停止的处理器改变PTE or PDE。

  c.让所有处理器在他们各自TLB中修改的PTE, PDE失效。

  d.结束屏障(end barrier)——恢复所有的处理器执行。

  当一个或多个处理器重新装载TLB时会有效能上的影响.所有的操作系统都有这个问题,而且在PAE内存支持的情况下,他们通过几种不同的方式改善这个问题:

  1. windows提供了让单一应用程序能够批处理多个重映射操作要求,好让它们全部在同一时间发生并且只引起一个TLB关闭和一次性能下降而不是可能多次任意发生的,且每次都会降低效能的重映射需求.者对于经常跑在单一目的系统上的大型应用程序尤其适合.

  2.其它的操作系统提供了"受害者"缓冲区或是允许一个线程共享其它线程的映射,但是者必须付出更多同步与API复杂性的代价.

  windows xp也提供了这种批处理或是分散/集合功能.除此之外,这些操作的效能在windows server 2003,Enterprise Editon 与 Datacenter Edition上有所改善.

  I/O

  在某种层次,所有的PAE变量和参与的驱动一起同时支持32-bit和64-bit DMA I/O 设备.但是这样附带很多前提和条件.

  内核和内存结构

  操作系统之间的一个差异就是内存的分配是否为动态的:

  1.某些操作系统要求管理员为各种目的(快速缓存,映射,联合等等)设置内存的使用量

  2.windows不要求管理员配置内存的分配,因为是动态的使用方式,而且在限制API使用的情况下运作.

  硬件支持

  1.适配器硬件效能

  2.驱动效能

  3.操作系统对于双缓冲处理提供的支持.

  4.系统中物理内存的使用量

  驱动问题

  一些预先能安全使用的假设和捷径不再适用了,通常,他们是在以下几个方面失效了:

  PAE模式可以在windows xp sp2,windows server 2003 sp1和随后的版本上启用,以支持硬件强制的DEP.但是,很多位这些系统设计的设备驱动可能并未在PAE开启的情况下测试过.为了减少对设备驱动兼容性的影响,windows XP SP2, windows server 2003 sp1 标准版对硬件抽象层(hardware abstraction layer, HAL)做了一些修改,限制物理内存最大为4GB.驱动开发者可以在http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/sp2mempr.mspx参考有关DEP的讯息

  分页

  大部分支持PAE的操作系统支持某些原始状态的虚拟内存分页以支持超过4GB的物理内存.这种情况经常随着一些限制条件发生,比如限制启动/系统 分页文件为4GB或者将分页文件分散在多个操作系统管理的卷上(并不一定非要是物理spindles)

  虽然这样利用了显而易见的虚拟内存的优点,但是负面效果是对有以下一个或多个特性的应用程序的效能产生了影响.

  1.使用大量的物理内存存储数据

  2.有很多的I/O操作

  3.有大量可执行工作组

  最后就是,对分页的支持一般是以增加API组和减缓开发以及版本升级为代价的.

  使用APIs

  特有API的扩展--某些是与处理器架构直接相关的--使得应用程序从一个Unix变量传输到另外一个变得既昂贵又费时,而且还得不时地在花费和性能的最优化之间权衡.windows提供简单,快速并且非常轻便的可在32位和64位硬件平台上使用的API组,仅仅只需要重新编译一下就可以运作.

  分页大小

  几乎所有支持PAE的操作系统在提供超过4GB的物理内存给应用程序的时候都会使用不同大小的分页.除了windows以外,它在IA-32平台上只提供4KB的分页给应用程序使用(这和基于Itanium的平台是不同的)

  Windows 和 PAE

  windows 版本 支持

  Windows 2000 Professional

  Windows XP AWE API and 4 GB of physical RAM

  Windows XP SP2 and later AWE API and 4 GB of physical address space

  Windows 2000 Server

  Windows Server 2003, Standard Edition AWE API and 4 GB of RAM

  Windows Server 2003 SP1, Standard Edition AWE API and 4 GB of physical address space

  Windows Server 2003, Enterprise Edition 8 processors and 32 GB RAM

  Windows Server 2003 SP1, Enterprise Edition 8 processors and 64 GB RAM

  Windows 2000 Advanced Server 8 processors and 8 GB RAM

  Windows 2000 Datacenter Server 32 processors and 32 GB RAM (support for 64 GB was not offered because of a lack of systems for testing)

  Windows Server 2003, Datacenter Edition 32 processors and 64 GB RAM

  Windows Server 2003 SP1, Datacenter Edition 32 processors and 128 GB RAM

显示全文