menu

北方天空下

i am not a man of too many faces,the mask i wear is one...

Avatar

Vista默认使用WS Private评价进程的物理内存占用

工作需要,最近在看内存管理部分的知识,也遇到了一些比较有趣的情况。
使用vista的同学会发现,打开系统自带的任务管理观察某个进程的物理内存使用情况时候,发现vista中默认使用的是“内存(专用工作设置)”。
首先这里需要解释的是在中文版的vista中这个名词的翻译不准确。原版是“Memory(Private Working Set)”,我看过很多其他比较专业的翻译,这个词翻译为“内存(私有工作集)”比较准确。WorkingSet可以这样理解: 它是一个进程使用的内存中物理上驻留在RAM中的那部分大小(实际上,内存中并不是全在RAM里,还可能有部分被换出到页面文件中了)

ok,现在需要弄清楚为什么Vista默认使用的Memory(Private Working Set)而不是Memory(Working Set)来描述一个进程的物理内存占用情况,我们先看看xp的任务管理器是怎么做的,作为对比,我这里使用了sysinternals的进程管理器ProcessExplorer作为对比,这里我们同时打开系统自带的任务管理器和ProcessExplorer:

我们看到,xp系统(实际上2000-xp-2k3系统都是如此)使用WorkingSet来表示一个进程的物理内存占用,没错。

我们在看看vista的情况:

我们看到Vista默认使用的是WorkingSet Private(WS private)来表示进程使用的物理内存。

为什么要这样做呢?因为实际上WorkingSet是由两部分组成的:WorkingSet=Private WorkingSet+Shareable WorkingSet,即进程私有的和可被其他进程共享的,其中Shareable WorkingSet(WS Shareable)内包含了WS Shared的大小,即正在和其他进程共享的部分,比如一些用于进程间通讯的共享内存和数据。Shareable WorkingSet实际上有可能会随着需要而增大,比如需要进程共享通讯或者使用大的数据结构存储共享数据。

估计,微软认为,对于一个进程自我消耗的物理内存来说WS Private这个值则更为推荐,所以Vista中采用了它,于是默认情况下你打开任务管理器看到也就它了。从某种程度来说,这是进步。但一定是最好的么?

另外要说明的一个有趣的例子是Chrome,这个Google的浏览器为了说明多标签多进程的XX优势,自己实现了一个观察内存资源占用的管理器,你在地址栏中输入about:memory就能看到了:

这里要说的是Chrome在显示浏览器进程的物理内存占用的时候的进步做法:
1.将Shared部分区分出来
2.它自己计算的Private实际并不是我们想象中的WorkingSet Private。而是:Private Working Set + Shareable Working Set - Shared Working Set
关于Ghrome的内存使用说明这里有详细说明:http://dev.chromium.org/memory-usage-backgrounder,其中在介绍WorkingSet的时候,有句话也说明本文要讨论的话题“If you were to look at the above table on Windows XP, the numbers for Memory would be significantly larger. This is because Windows Vista has updated the primary metric for measuring process memory since Windows XP”

这里计算Private的做法有独到之处啊~不过呢Firefox或者是IE他们认同不认同就不知道了,举另一个例子,当我们使用VMware虚拟机的时候你会发现系统的内存被占用很多,仔细看一下:

在使用的390M物理内存中,有380M是可共享的物理内存而不是私有的。这意味着并不是所有这些页面都被VMware独占了,而大部分是可以和其他进程共同使用的。

于是,在这里你用vista的进程管理器将发现虚拟机似乎“没有消耗内存”(仅12M的WS Private):)

实际环境中,进程也甚至会为了工作需要通过API将自己的数据强制lock在物理内存中。其实任何一个性能参数都不能完全说明问题,需要具体情况具体分析。

强贴留名!

呵呵~
推荐看看Mark(Sysinternals工具的作者,<WindowsInternals>的作者,windows内核专家)的Blog:http://blogs.technet.com/markrussinovich/default.aspx
其中有很多精彩的Windows TroubleShooting~

强帖继续留名

微软很多翻译都很烂,都是垃圾机器翻译的

评论已关闭