2008年10月22日 09:42 | |
|
执行多个处理程序的Linux应用程序不需要修改,就可以利用SMP平行特性,而且通常不需要进行重新编译。SMP Linux环境为可用处理器之间的调整提供了许多工具,如提高/降低任务的优先级,或是对于在处理器子集上执行任意任务加以限制。要使用不同的实时排程体制,必须要有适当的核心支持。 类似Unix的OS能为应用程序提供一些针对相关任务优先级排程的控制,甚至在单核心处理器时间共享系统中也是如此。传统的外部命令和系统呼叫指令在Linux系统中被强化,藉由更精致的机制排定任务优先级、任务组或特定系统使用者。另外,在多核心处理器配置中,任一Linux任务都具有一个参数,用来指定那一组处理器可排定任务。预设参数即为整个系统处理器组,但这种具有类似于CPU的系统处理器组却是可控制的。 SMP范例要求所有处理器找寻所有相同地址下的内存;对于低性能的处理器,必须透过将所有处理器的指令预取和加载/储存流通量,置放在一个共享的内存和I/O总线上来达成。然而这种模式随着处理器的增加而失去效用,因为总线会成为瓶颈。即使在单核心处理器系统中,高性能嵌入式核心的指令和数据频宽需求亦支配了主存储器和处理器间的缓冲存储器。 在一个每颗处理器均具备独立快取的系统中,其本质上已不属于SMP,当一个处理器的快取保存了内存中唯一一个最近位置值的复制数据时,这时不对称就产生了,必须加入快取一致性协议来恢复对称。 在一个所有处理器都连接到一个公共总线的简单系统中,快取控制器可监控总线,以得知哪一个高速缓存保存了指定内存位置的最新版本。在更先进的系统中,是利用交换结构的点对点的连接将处理器连接到内存,因此快取一致性需要更高度的支持。一致性管理单元应该对内存执行施加全域指令,产生干涉讯号来维护处理器核心间的高速缓存一致性。 像Linux这样的SMP OS可自由地转移任务,动态地均衡处理器负载。在嵌入式SoC中,绝大部份的整体运算可以在中断服务中执行。好的负载均衡和性能调整必须对发生中断服务的地方进行控制。Linux OS具有一个类似于IRQ的控制接口,可让使用者和程序确认哪一个处理器负责指定的中断服务。 快取忆体一致性基础架构很实用,不仅在SMP的处理器间,在处理器和I/O DMA通道之间也相当有用。若是使用软件的方式,便需要在每个I/O DMA作业之前或之后利用CPU来处理DMA缓冲器,对于I/O密集的应用而言,性能将大受影响;而使用I/O一致性硬件将I/O DMA连接到内存的方式,可以对DMA串流进行排序,并与一致的加载/储存流程整合在一起,免除了软件的开销。 快取一致性管理单元应该对处理器、I/O和内存间的内存串流施加命令,这可增加处理器内存存取时间的周期,透过管线停滞产生处理器周期损失的结果。然而,一些如在单一核心上使用硬件多执行绪的方法,可允许单核心执行并行的指令串流,以增加管线的效率。 各核心的执行绪看起来就如同OS软件中完善的CPU,包括具有独立的中断输入。执行绪共享相同的缓冲存储器和功能单元并插入到它们的管线执行中。若一个执行绪停滞了,另一个可以继续执行,让一致性内存子系统延迟周期循环下去,否则将会遗失。管理多核心的相同SMP OS可以管理它们的硬件执行绪,针对SMP编写的软件可运用多执行绪处理,反之亦然。 若两个执行绪同时争取一个管线,其性能相较于在许多独立核心上两个执行绪来得更低,应该对SMP Linux核心进行负载均衡最佳化。对于功耗最佳化,排程器可以将工作一次一个加载到一个核心的虚拟处理器上,使其它的处理器处于低功耗状态。在性能最佳化方面,可以将工作分配到许多核心上,然后将多执行绪加载到每个核心中,直到所有的核心都有一个进展中的任务为止。 利用芯片上多处理功能可实现高SoC性能。SMP平台和软件提供了一个具有灵活性的高性能运算平台,能大幅提升单一处理器的速度,而这通常只需要稍微、或者根本不需要修改应用程序代码。 http://product.ccidnet.com/art/3483/20081017/1592885_1.html |
文章评论(0条评论)
登录后参与讨论