服务器 频道

突破2G内存限制 SQL2005 AWE应用测试

  程序只能使用2GB内存的这个限制是32位操作系统架构引起的。传统意义上的32bit操作系统使用32bit的内存地址,这样寻址范围就已经被限制为4GB——4G也就是2的32次方,然而通常操作系统的设计上为了安全性的考虑,应用程序和内核所处的内存地址空间是互相独立的,也就是说,应用程序和内核各自能访问2GB的内存空间。虽然不同的操作系统实现具有不同的值,不过多数现在的操作系统在这一点上都很一致。

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

 
AWE可以让32位操作系统下的进程提供64GB的地址空间

  然而让用户模式程序能多寻址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应用迄今尚未开始流行。
 

0
相关文章