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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: DB2/Informix

2008-03-24 21:52:11

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

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

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

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

         增加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会保留其上下文,从就绪队列中选取一个新线索来执行,加载这条新线索的上下文,从新的程序地址开始执行那个线索,线索切换比进程上下文切换的效率更高。

 

 

三 Informix动态服务器是如何工作的

 

Informix动态服务器的核心体系结构的设计从根本上就是为了提供内置的多线索和并行处理能力:

多线索:

     在数据库服务器中,Informix动态服务器使用了一个可调节的数据库服务器进程池,称为‘虚处理器',用来对用户的请求进行规划和管理。用户请求是通过一种称为‘线索’的轻巧的机制来表达的,线索是一个单一的连贯的控制流,用来表达数据库服务器进程中的一个独立的任务。当一个线索在等待资源时,虚处理器可以处理其它的线索,由于提供了这样的灵活性,只需少量的操作系统进程就可以对大量的用户进行管理,因为每一个虚处理器可以对多个用户的请求作出响应。

     并行处理: 

    为了保证对系统资源的最有效的利用,Informix动态服务器将大的任务分解为子任务,这样,他们就可以跨多个CPU和磁盘并行地执行。通过将任务划分为子任务,以及并行地执行这些任务,Informix动态服务器可以大幅度地减少复杂操作的执行时间。

    虚处理器类: 

    为了高效地执行和多方面地进行调节,虚处理器被以类为单位分组,每一类根据特殊的功能要求进行了优化。线索被透明地分配到相关类的虚处理器中。在众多的虚处理器类中,最重要的一个是CPU类,它可以随着CPU处理的需求而增加或减少。

    动态共享内存: 

   Informix动态服务器所使用的所有的内存都是由虚处理器池所共享的。使用这种方法,Informix动态服务器可以配置为自动向共享内存池中添加更多的存储空间。

 Informix动态服务器还在共享内存的虚拟部分分配一个称为线索栈的区域,用来存储线索的执行中所需要的非共享的数据。 

    异步I/O :

    I/O通常是数据库处理中最慢的一部分。Informix动态服务器使用它的异步I/O来加速I/O的处理。由于Informix动态服务器的虚处理器对用户的I/O请求做异步的响应,所以,一个虚处理器在开始处理下一个服务请求之前决不会出现等待I/O操作结束的情况。

   提前读: 

   对于连续的表扫描或索引扫描,Informix动态服务器能够在对共享内存中当前的页面集合进行处理的同时,异步地从磁盘上提前读取多个页面。有了这样的能力,吞吐率就能够得以保持,因为应用用来等待磁盘访问结束的时间减少了。 
 
阅读(524) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~