Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103554976
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-30 23:07:23

在动态服务器中,CPU VP(cpu 虚拟处理器)是多线索的进程,它一直在处理器上运行除非发生以下的情况:

1.CPU VP没有任务可以做,例如就绪队列中没有等待执行的线索。

2.操作系统强迫CPU VP让出CPU给其它的进程使用。

  为了优化吞吐量考虑,需要将NUMCPUVPS设置为能够正常处理任务的最小的一个数,这个数目应该小于或者等于系统中的CPU数目,建议不要将CPU VP的数目设置大于可用的CPU数目,如果CPU VP的数目不能满足要求,这就表示需要提高CPU的性能来解决问题。只有存在另外的CPU,才能通过增加CPU VP来解决问题。也可以采用停下系统中的其它任务,为虚处理器释放CPU周期,从而改善性能。

[@more@]增加CPU VP的数目而不增加CPU,只会使问题更加严重,产生更多的CPU竞争,这样操作系统要做更多的工作来调度这些CPU的竞争,结果是CPU VP的负担更重,上下文切换增加,这不仅仅消耗时间而且要使用更多的CPU。

  由于系统中不光是CPU VP,还有其它的进程申请CPU周期,在一些多处理器的系统上,NUMCPUVPS应该小于全部的CPU数,对多处理器系统,我们建议如下设置NUMCPUVPS:NUMCPUVPS=全部CPU数-1

  通过命令onstat -g rea 来检测就绪队列,确认CPU是否不能承担任务。就绪队列的线索是将要执行的线索,如果就绪队列的线索数开始加速增长,这就表CPU VP已经不能承担如此繁重的任务。在调整好的系统上看到几个就绪线索,或者是在测试工作开始时有些线索增加是正常的。每个CPU VP上有一个就绪线索是合理的。

  另外,查看CPU VP的使用情况,如CPU VP跟不上任务的增长,就会看到虚拟处理机处于饱和,可以用命令onstat -g glo 监视虚处理机的使用情况,如果系统和用CPU VP的时间之和接近于测试花费的时间,那么CPU VP就饱和了,如果NUMCPUVPS的值低于系统中的CPU数目,可以增加一个CPU VP,但不要超出系统中的全部CPU数目。

  注意: 在多处理器系统中全部可利用的CPU时间等于处理器数目乘以测试时间,一个CPU VP不能在某一个时刻消耗多余一个处理器的能力,因此一个CPU VP的全部CPU比率不会超过测试时间的100%。

  如果整个系统中CPU资源已经饱和,而且不能再减轻工作负荷或增加资源,可以通过减小NUMCPUVPS来改善性能。但这种变化只有在CPU VP急需其它虚处理器或进程的CPU资源时才起作用。每次减少一个CPU VP,而NUMCPUVPS必须设置为大于0的值。

  对开发者而言:当CPU VP未被堵塞,正在完成有用的工作,并且能良好地管理其线索的运行,此刻系统处于最佳状态。例如,如果进程需要休眠,以等待 I/O的完成或者锁被释放,而不是安排其它的线索运行,那么可能需要每个CPU有多个CPU VP,以获得最大的吞吐量。但使用多CPU VP会降低系统效率,这是因为系统不仅要花费很大的代价来处理上下文的切换,而且要为增长的处理机快速缓存的竞争付出代价。应确保循环执行的线索把CPU让给有更多工作要做的线索。最后,要避免直接使用操作系统调用,如利用CPU VP数目确定一些非CPU 负责活动的线索数时,会出现其它问题。系统管理员要监控系统,如果CPU空闲应该增加CPU VP数目。

 

多线索背景资料

操作系统的两项责任是提高CPU资源的利用率,确保进程可以平等地访问资源。操作系统各不相同,但通常直到下列事情发生前,进程都会在CPU上运行。

1.进程结束

2.进程需要等待某些事件,如一次磁盘I/O的完成

3.进程超过分配给它的时间片,而且还有其它的进程等待执行

4.有优先级更高的进程需要使用CPU,要求这个进程必须立即放弃对CPU的占用

 

当其中一个情况发生的时候,操作系统停止在CPU上执行的进程,保留重要的进程状态并开始执行另一个进程。这就是众所周知的上下文切换。原则是CPU从不会在有工作的时候闲置。

多线索,其概念基本相同,主要的不同之处是工作分到了各个线索(有时也称为轻进程),而虚处理机执行线索间的任务切换,例如当一个线索需要等待一次磁盘I/O的完成,CPU VP会保留其上下文,从就绪队列中选取一个新线索来执行,加载这条新线索的上下文,从新的程序地址开始执行那个线索,线索切换比进程上下文切换的效率更高。

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