随着多核处理器的发展,对软件开发有非常大的影响,而且核心的瓶颈在软件上。
软件开发在多核环境下的核心是多线程开发。这个多线程不仅代表了软件实现上
多线程,要求在硬件上也采用多线程技术。可以说多核提供了可以大幅提升性能
的机制,多核软件就是可以真正利用这一特点的策略。只有与多核硬件相适应的
软件,才能真正地发挥多核的性能。多核对软件的要求包括对多核操作系统的要
求和对应用软件的要求。
多核操作系统的关注点在于进程的分配和调度。进程的分配将进程分配到合理的
物理核上,因为不同的核在共享性和历史运行情况都是不同的。有的物理核能够
共享二级 cache,而有的却是独立的。如果将有数据共享的进程分配给有共享二
级 cache 的核上,将大大提升性能;反之,就有可能影响性能。进程调度会涉及
到比较广泛的问题,比如负载均衡、实时性等。
面向多核体系结构的操作系统调度目前多核软件的一个热点,其中研究的热点主
要有下面几方面:程序的并行研究;多进程的时间相关性研究;任务的分配与调
度;缓存的错误共享;一致性访问研究;进程间通信;多处理器核内部资源竞争
等等。这些探讨相互独立又相互依赖。考虑一个系统的性能时必须将其中的几点
同时加以考虑,有时候对一些点的优化会造成另一些点的性能下降,需要用程序
进行性能优化评测,所以合适的多核系统软件方案正在形成过程中。
任务的分配是多核时代提出的新概念。在单核时代,没有核的任务分配的问题,
一共只有一个核的资源可被使用。而在多核体系下,有多个核可以被使用。如果
系统中有几个进程需要分配,是将他们均匀地分配到各个处理器核,还是一起分
配到一个处理器核,或是按照一定的算法进行分配。并且这个分配还受底层系统
结构的影响,系统是 SMP 构架还是 CMP 构架,在 CMP 构架中会共享二级缓存
的核的数量,这是影响分配算法的因子。任务分配结束后,需要考虑任务调度。
对于不同的核,每个处理器核可以有自己独立的调度算法来执行不同的任务(实
时任务或者交互性任务),也可以使用一致的调度算法。此外,还可以考虑一个
进程上一个时间运行在一个核上,下一个时间片是选择继续运行在这个核上,还
是进行线程迁移;怎样直接调度实时任务和普通任务;系统的核资源是否要进行
负载均衡等等。任务调度是目前研究的热点之一。
在单核处理器中,常见的调度策略有先到先服务(FCFS),最短作业调度(SJF),
优先级调度(Priority-scheduling algorithm),轮转法调度(round-robin RR),多级
队列调度(multilevel queue-schedule algorithm)等。例如在 Linux 操作系统中对
实时任务采取 FCFS 和 RR 两种调度,普通任务调度采取优先级调度。
对于多核处理器系统的调度,目前还没有明确的标准与规范。由于系统有多个处
理器核可用,必须进行负载分配,有可能为每个处理器核提供单独的队列。在这
种情况下,一个具有空队列的处理器就会空闲,而另一个处理器会很忙。所以如
何处理好负载均衡问题是这种调度策略的关键问题所在。为了解决这种情况,可
以考虑共同就绪队列,所有处理器公用一个就绪队列。但是这无疑对进程上下文
切换、锁的转换增加了执行时间,降低了性能。另外一种想法就是选择一个处理
器来为其他处理器调度,因而创建了主从结构。有的系统将主从结构作进一步扩
评论0
最新资源