Chinaunix首页 | 论坛 | 博客
  • 博客访问: 574670
  • 博文数量: 772
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 4940
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-16 19:52
文章分类

全部博文(772)

文章存档

2011年(1)

2008年(771)

我的朋友

分类:

2008-10-16 19:55:47

    打现在起数月内,笔者将会撰写一个系列专题,而这是开山第一篇。该系列叫做《挑战极限》,描述和应用程序对具体资源的使用方法、资源使用在许可和实现方面的限制、资源使用的测量方法,以及资源泄露的诊断方法等。为了能够有效地管理Windows系统,我们需要知道Windows系统是怎样管理物理资源的,例如CPU和内存等,还要知道Windows系统怎样管理逻辑资源的,例如虚拟内存、句柄,还有窗口管理器对象等。了解这些资源的限制,并对其使用情况进行追踪,有助于我们精确地掌握应用程序的资源使用状况,帮助我们给某个关键应用分配足够多的系统资源,还有助于我们找出导致资源泄露的应用程序。

    物理内存

    物理内存是计算机上的最重要的资源之一。Windows的内存管理器负责给活动进程、设备驱动,和操作系统自己分配内存。因为绝大多数系统所能访问的数据和代码远比物理内存多,所以从本质上来说,物理内存是代码和数据在其中运行的窗口。所以内存容量对性能有影响,因为如果进程或者操作系统所需的代码或者数据不存在,内存管理器就需要从磁盘中读取这些内容。

    除了会对性能造成影响,物理内存的容量还会影响其他资源。例如,对于非分页池来说,这是由物理内存提供后备的操作系统缓冲,很明显,其容量会受到物理内存的限制。物理内存也会对系统的虚拟内存限制有影响,虚拟内存的大小等于物理内存容量、再加上所有页面文件的最大容量。物理内存还会对进程的最大数量具有间接的影响,笔者将会在今后的文章里专门提到线程和进程的限制。

    Windows Server内存限制

    Windows对于物理内存的支持,要受到诸如硬件限制、许可、操作系统数据结构,以及驱动程序的兼容性等方面的综合影响。MSDN网站的文章对不同Windows版本、以及同一个版本的不同SKU的限制进行介绍。

    我们可以查看所有Windows版本的不同SKU的物理内存支持许可。例如,32位Windows Server 2008标准版仅支持4GB,而32位Windows Server 2008数据中心版支持64GB。类似的,64位Windows Server 2008标准版支持32GB,而64位32位Windows Server 2008数据中心版支持2TB。目前来说,并没有多少系统拥有2TB内存,不过Windows Server性能产品组知道有两台拥有那么多的内存,其中一台位于某地的实验室。该的任务管理器如下图所示:

 

    32位的最大限制是128GB,Windows Server 2003数据中心版可以支持,这是因为在大内存的系统上,内存管理器用来追踪物理内存的结构,需要消耗更多系统虚拟地址空间。内存管理器把每个内存页的追踪数据保存在叫做PFN数据库的数组中,而且考虑到性能因素,会把整个PFN数据库映射到虚拟内存中。因为它用28字节的数据结构来代表每个内存页,128GB系统的PFN数据库需要将近930MB的空间。32位Windows拥有4GB的虚拟地址空间,由硬件所定义,默认划分为两半,其中一半供用户模式进程(例如Notepad)所使用,另一半供系统所使用。因此980MB的容量就要占据将近一半的系统虚拟地址空间(共2GB),只剩下约1GB空间可以用来映射内核、驱动程序、系统缓存和其他系统数据结构:

   

 

    这也就是为什么当同一个SKU版本以4GB的调整选项引导时(也叫做4GT,在Boot.ini文件里配置/3GB或者/USERVA选项,或者配置Bcdedit命令的/Set IncreaseUserVa启动选项),其内存限制会更大,这是因为4GT选项会给用户模式进程分配3GB空间,而仅给系统保留1GB空间。

    内存管理器可以仅把PFN数据库的一部分映射到系统地址空间,这样就可以提供更多的内存空间,这会增加复杂性,同时由于增加了映射和取消映射的操作,而可能导致性能的下降。由于直到现在,计算机所配备的内存容量才变得足够大,才需要考虑采用这种办法,但是因为在64位Windows中,并不需要强制把整个PFN数据库映射到系统地址空间,所以这种可以提供更多内存的办法仅供64位Windows使用。

    64位Windows Server 2008数据中心版最多支持2TB内存,这不是由于硬件限制所造成的,而是因为微软对2TB进行了严格,而只支持2TB内存。在Windows Server 2008发布的时候,计算机所配备的最大内存基本上就是2TB,所以Windows将其作为物理内存的最大值。

[1]   

【责编:Zenghui】

--------------------next---------------------

阅读(267) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~