现在多核处理器使用的非常多了,价格也很便宜。但linux 操作系统以SMP的方式运行在多个核上时,虽然性能随着cpu核数的增加而增加,而增加的幅度却有限。
其中一个重要的原因是,虽然cpu核数虽然很多,但调度器只有一个,并且运行在一个cpu上,每个cpu核上的进程或线程要调度时,都需要该调度器进行调度。这是一个性能的瓶颈。下提到分布式调度的设想,请各位大侠拍砖。
分布式调度器的设想:除了一个集中调度器外,每个cpu核心上设计一个子调度器。
子调度器的职责:负责自己cpu核心上的进程和线程的调度。和总调度器通信,报告自己的运行状态。当然需要设置门限,如多少时间通信一次,或cpu负载到达某上限或下限。并接受总调度器分配的进程和线程。
总调度器的职责:负责给各个cpu(即子调度器)分配要运行的进程和线程,定期收集各个cpu的负载情况。接收cpu上报的负载达上限或下限的信息,并根据信息进行平衡各个cpu负载。总调度器不再负责每个cpu核心上的具体调度事宜,该工作有cpu核心上的子调度器负责。
上面的设想基于这种假设:通常一个进程分配到某个cpu后,被重新调度到其他cpu核心的情况很少。基本上第一次分配给哪个cpu核心,就不会更换。
阅读(5498) | 评论(0) | 转发(0) |