- 2
- 0
- 约1.53万字
- 约 15页
- 2018-01-31 发布于贵州
- 举报
多处理器运行队列的平衡精选
正如我们在上一节所看到的,schedule( )函数从本地CPU的运行队列挑选新进程运行。因此,一个指定的CPU只能执行它相应的运行队列中的可运行进程。另外,一个可运行进程总是存放在某一个运行队列中:任何一个可运行进程都不可能同时出现在两个或多个运行队列中。因此,一个保持可运行状态的进程通常被限制在一个固定的 CPU上。这种设计通常对系统性能是有益的,因为,运行队列中的可运行进程所拥有的数据可能填满每个CPU的硬件高速缓存。但是,在有些情况下,把可运行进程限制在一个指定的CPU上可能引起严重的性能损失。例如,考虑频繁使用CPU的大量批处理进程:如果他们绝大多数都在同一个运行队列中,那么系统中一个CPU将会超负荷,而其他一些CPU几乎处于空闲状态。因此,内核周期性地检查运行队列的工作量是否平衡,并在需要的时候,把一些进程从一个运行队列迁移到另一个运行队列。但是,为了从多处理器系统获得最佳性能,负载平衡算法应该考虑系统中CPU的拓扑结构。从内核2.6.7版本开始,Linux提出一种基于“调度域”概念的复杂的运行队列平衡算法。正是有了调度域这一概念,使得这种算法能够很容易适应各种已有的多处理器体系结构(甚至诸如那些基于“多核”微处理器的新近出现的体系结构)。
1 调度域
调度域实际上是一个CPU集合,他们的工作量应当由内核保持平衡。一般来说,调度域采取分层的组织形式:最上层的
原创力文档

文档评论(0)