1.5 FreeBSD 5.0新特性
FreeBSD在2001年的进展并不令人十分满意,由于一些新特性的开发复杂性要远远超过预期,以及一些商业操作的影响,预计于2001年底发布的FreeBSD 5.0已经推迟到了2002年9月份,这些因素就使得目前FreeBSD的正式版本4.x缺乏一些新的特性。事实上FreeBSD仍然处于不断发展当中,尤其是下一个版本:FreeBSD 5.0,增加了相当丰富的新特性,人们对于将要发布的FreeBSD 5.0寄予了很大的期望。
但是由于 FreeBSD开发小组采取的比较保守的态度,不急于将正在开发的5.0版本发布出去,喜欢尝新的用户只能通过CVS的方式更新源代码来升级到FreeBSD 5.0,因此很多人无法了解到FreeBSD 5.0的有关特性。即使FreeBSD 5.0正式发布之后,其第一个版本FreeBSD 5.0的重心,仍然将位于系统稳定性等方面,真正性能方面的优化要等待FreeBSD 5.1正式发布之后了。因此,目前安装FreeBSD 5.0,主要目的还只是对于新特性的体现,以及对新系统的综合测试。
综合有关资料和安装实验,初步可以认为, FreeBSD 5.0不会令人失望,它对系统内核做了巨大的改变,可以说这将是继FreeBSD 2.2.x之后的又一次相当大的升级改动,这些改变必将使系统的整体性能更为优秀,尤其是在高端服务器上,它的表现将更为优异。
1.5.1 下一代SMP支持
对于高端服务器来讲,不再是单处理器的系统,而是使用了多个中央处理器共同执行计算任务。目前,服务器通常使用的是 SMP方式,就是说多个处理器处于等价的地位,可以访问同样的内存空间,有相同的机会同时处理计算任务。因此对于SMP系统,原则上就可以将多个计算任务同时分配给多个处理器同时进行,达到提高系统性能的目的。
然而,事情总不是那么简单的,因为如果希望计算任务能够被很好的并行处理,那么计算任务应该能划分为很多个互不相关的子任务,这样才能同时提供给多个处理器进行处理,满足并行处理的需要。如果计算任务不能划分为这样的多个子任务,这样就可能出现一个处理器工作的时候,另一个处理器由于必须等待而处于空闲状态的情况,这样,系统性能就不能像理想中的那样成倍增加。
由于 Unix本身是多任务的,系统本身就存在多个进程,最简单的考虑是每个处理器可以处理一些进程对应的任务,达到并行处理的目的。然而,这些进程可以通过系统调用进入内核空间执行任务,内核本身也会执行相应的处理任务,当计算任务进入内核当中,问题就比较复杂了。
因为传统的 Unix的内核是不可抢占的,一个内核任务和用户进程任务是不同的,一旦执行一个内核任务,就必须等待这个任务执行完毕才能执行下一个内核任务。例如硬件中断处理,由于硬件资源的唯一性,必须等待一个处理任务处理完毕之后,才能进行下一个中断处理。但事实上很多内核任务还是可以同时处理的,例如对不同硬件的处理等等。因此如果在Unix中增加SMP支持,就需要解决这个内核的计算任务的并行化问题。
并行化的关键就是对一些硬件资源进行加锁保护,以防止对同一个资源的并发访问,导致数据错误。在目前的 FreeBSD系统中,采取的是比较简单而且保守的策略,就是说对资源采用排他锁的方式进行保护,一但内核任务出现冲突,就进行锁定,而不管系统中是否还存在其他可以并行执行的任务。这种排他锁的做法虽然比较简单,但由于大多数情况都是用户进程的并行处理,内核操作的冲突比较少,还是能够满足并行处理的要求的。但在更复杂的情况下,例如存在大量系统调用或内核操作的情况下,这种简单的策略就造成了很多本可以并行处理的内核操作不得不顺序进行,使得系统的性能无法成倍的提升。
FreeBSD的这种简单化的策略就使得目前版本的FreeBSD在高端服务器上的性能表现上并不是十分理想。因此在FreeBSD 5.0系列中,对于SMP的支持将完全重写,这一部分工作称为SMPng,它将参考商业的BSD/OS中的部分优点,并移植BSD/OS中的一些代码,从而使得对SMP的支持更为优秀。
SMPng需要完成的目标就是能够实现内核任务或中断处理的可并发执行,以充分利用多处理器的能力,当然这不可能在FreeBSD 5.0中完全解决,但5.0将提供一个很好的开始。首先需要完成的工作就是使用更精细的锁定策略,很多操作系统的锁定机制要比FreeBSD要好,例如在BSD/OS中,当一个处理器处理的内核任务不能执行时,该处理器可以去执行其他的处理任务,而不是简单的锁定。
但在 SMPng中,所完成的工作事实上将更复杂,SMPng将保留原来系统的SMP支持中的排他锁方式用来支持目前存在的内核处理,但添加了更复杂的调度锁,以支持多处理器处理。进行锁定处理的关键是资源的唯一性,一些资源在一个时间只能被一个任务进行处理,否则就可能发生不一致的问题,而如果将这个只能被唯一访问的资源改变为多路复用器,多个计算任务就可以同时访问它了,SMPng的调度锁的实质就是这个目的。因此,接下来的工作就是查看所有的多处理器相关的内核代码,将可能冲突的资源更改为新的调度锁。
此外, SMPng中还要改善中断处理例程,传统的Unix中断处理不可被中断,这样就不适合SMP的情况。SMPng中将改变中断处理例程,使其具备上下文的属性,使得中断处理例程可以被再次中断和重新进入。SMPng的这些复杂的工作,将使得中断处理和其他内核操作中互斥的部分降低到最少,达到内核任务可以并行执行的目的。显然,SMPng的工作将明显改善FreeBSD对于SMP的支持,改善FreeBSD在高端服务器系统上的性能。
|