进程工作集

 

    一个进程当前使用的页的集合叫做它的工作集(working set)。如果整个工作集都在内存中,在进入下一个运行阶段之前进程的运行不会引起很多页面故障。如果内存太小无法容纳整个工作集,进程运行将引起大量的页面故障并且速度十分缓慢。一个每隔几条指令就发生一次页面故障的程序被称为是在颠簸

    现代计算机系统中内存的访问速度远远高于外存的访问速度。如果系统中不产生缺页中断,则访问数据的时间约等于内存访问时间。但是如果发生缺页中断,则需要从外存中将该页调入,因此会大大降低系统性能。通过对缺页率的长期研究,Denning提出了工作集理论。由于程序在运行时对页面的访问是不均匀的(即局部性),如果能够预知程序在某段时间内要访问那些页面,并将它们提前调入内存,这将降低缺页率,提高CPU利用率。

进程工作集

    因为频繁的调页操作引起的磁盘I/O会大大降低程序的运行效率,因此对每一个进程,虚拟内存管理器都会将其一定量的内存页驻留在物理内存中。并跟踪其执行的性能指标,动态调整这个数量。Win32中驻留在物理内存中的内存页称为进程的"工作集"workingset),进程的工作集可以通过"任务管理器"查看,其中"内存使用"列即为工作集大小。

    工作集是会动态变化的,进程初始时只有很少的代码页和数据页被调入内存。当执行到未被调入内存的代码或者访问到尚未调入内存的数据时,这些代码页或者数据页会被调入物理内存,工作集也随之增长。但工作集不能无限增长,系统为每个进程都定义了一个默认的最小工作集(根据系统物理内存大小,此值可能为20~50 MB)和最大工作集(根据系统物理内存大小,此值可能为45~345 MB)。当工作集到达最大工作集,即进程需要再次调入新页到物理内存中时,虚拟内存管理器会将其原来的工作集中的某些页先置换出内存,然后将需要调入的新页调入内存。

    因为工作集的页驻留在物理内存中,因此对这些页的访问不涉及磁盘I/O,相对而言非常快;反之,如果执行的代码或者访问的数据不在工作集中,则会引发额外的磁盘I/O,从而降低程序的运行效率。一个极端的情况就是所谓的颠簸或抖动(thrashing),即程序的大部分的执行时间都花在了调页操作上,而不是代码执行上。

    如前所述,虚拟内存管理器在调页时,不仅仅只是调入需要的页,同时还将其附近的页也一起调入内存中。综合这些知识,对开发人员来说,如果想提高程序的运行效率,应该考虑以下两个因素。

    (1)对代码来说,尽量编写紧凑代码,这样最理想的情形就是工作集从不会到达最大阀值。在每次调入新页时,也就不需要置换已经载入内存的页。因为根据locality特性,以前执行的代码和访问的数据在后面有很大可能会被再次执行或访问。这样程序执行时,发生的缺页错误数就会大大降低,即减少了磁盘I/O,在图5-6中也可以看到一个程序执行时截至当时共发生的缺页错误次数。即使不能达到这种理想情形,紧凑的代码也往往意味着接下来执行的代码更大可能就在相同的页或相邻页。根据时间locality特性,程序80%的时间花在了20%的代码上。如果能将这20%的代码尽量紧凑且排在一起,无疑会大大提高程序的整体运行性能。

    (2)对数据来说,尽量将那些会一起访问的数据(比如链表)放在一起。这样当访问这些数据时,因为它们在同一页或相邻页,只需要一次调页操作即可完成;反之,如果这些数据分散在多个页(更糟的情况是这些页还不相邻),那么每次对这些数据的整体访问都会引发大量的缺页错误,从而降低性能。利用Win32提供的预留和提交两步机制,可以为这些会一同访问的数据预留出一大块空间。此时并没有分配实际存储空间,然后在后续执行过程中生成这些数据时随需为它们提交内存。这样既不浪费真正的物理存储(包括调页文件的磁盘空间和物理内存空间),又能利用locality特性。另外内存池机制也是基于类似的考虑。

    此外,工作集和驻留集不同,驻留集指当前在主存中的页面集,而工作集指不久后所需要的页面集。

    resident set, In a virtual memory system, a process' resident set is that part of a process' address space which is currently in main memory. If this does not include all of the process' working set, the system may thrash.

    working set, The working set of a program or system is that memory or set of addresses which it will use in the near future.This term is generally used when discussing miss rates at some storage level; the time scale of "near future" depends upon the cost of a miss. The working set should fit in the storage level; otherwise the system may thrash.

 

 

http://book.51cto.com/art/201006/203597.htm

 

你可能感兴趣的:(并行/高性能计算)