最新多核操作系统的分析与研究Word文件下载.docx
《最新多核操作系统的分析与研究Word文件下载.docx》由会员分享,可在线阅读,更多相关《最新多核操作系统的分析与研究Word文件下载.docx(6页珍藏版)》请在冰豆网上搜索。
◆多核处理器系统级问题
CMP和SMT一样,致力于发掘计算的粗粒度并行性。
CMP可以看做是随着大规模集成电路技术的发展,在芯片容量足够大时,就可以将大规模并行处理机结构中的SMP(对称多处理机)或DSM(分布共享处理机)节点集成到同一芯片内,各个处理器并行执行不同的线程或进程。
在基于SMP结构的单芯片多处理机中,处理器之间通过片外Cache或者是片外的共享存储器来进行通信。
而基于DSM结构的单芯片多处理器中,处理器间通过连接分布式存储器的片内高速交叉开关网络进行通信。
由于SMP和DSM已经是非常成熟的技术了,CMP结构设计比较容易,只是后端设计和芯片制造工艺的要求较高而已。
正因为这样,CMP成为了最先被应用于商用CPU的“未来”高性能处理器结构。
虽然多核能利用集成度提高带来的诸多好处,让芯片的性能成倍地增加,但很明显的是原来系统级的一些问题便引入到了处理器内部。
1.
核结构研究:
同构还是异构
CMP的构成分成同构和异构两类,同构是指内部核的结构是相同的,而异构是指内部的核结构是不同的。
为此,面对不同的应用研究核结构的实现对未来微处理器的性能至关重要。
核本身的结构,关系到整个芯片的面积、功耗和性能。
怎样继承和发展传统处理器的成果,直接影响多核的性能和实现周期。
同时,根据Amdahl定理,程序的加速比决定于串行部分的性能,所以,从理论上来看似乎异构微处理器的结构具有更好的性能。
核所用的指令系统对系统的实现也是很重要的,采用多核之间采用相同的指令系统还是不同的指令系统,能否运行操作系统等,也将是研究的内容之一。
2.程序执行模型
多核处理器设计的首要问题是选择程序执行模型。
程序执行模型的适用性决定多核处理器能否以最低的代价提供最高的性能。
程序执行模型是编译器设计人员与系统实现人员之间的接口。
编译器设计人员决定如何将一种高级语言程序按一种程序执行模型转换成一种目标机器语言程序;
系统实现人员则决定该程序执行模型在具体目标机器上的有效实现。
当目标机器是多核体系结构时,产生的问题是:
多核体系结构如何支持重要的程序执行模型?
是否有其他的程序执行模型更适于多核的体系结构?
这些程序执行模型能多大程度上满足应用的需要并为用户所接受?
3.Cache设计:
多级Cache设计与一致性问题
处理器和主存间的速度差距对CMP来说是个突出的矛盾,因此必须使用多级Cache来缓解。
目前有共享一级Cache的CMP、共享二级Cache的CMP以及共享主存的CMP。
通常,CMP采用共享二级Cache的CMP结构,即每个处理器核心拥有私有的一级Cache,且所有处理器核心共享二级Cache。
Cache自身的体系结构设计也直接关系到系统整体性能。
但是在CMP结构中,共享Cache或独有Cache孰优孰劣、需不需要在一块芯片上建立多级Cache,以及建立几级Cache等等,由于对整个芯片的尺寸、功耗、布局、性能以及运行效率等都有很大的影响,因而这些都是需要认真研究和探讨的问题。
另一方面,多级Cache又引发一致性问题。
采用何种Cache一致性模型和机制都将对CMP整体性能产生重要影响。
在传统多处理器系统结构中广泛采用的Cache一致性模型有:
顺序一致性模型、弱一致性模型、释放一致性模型等。
与之相关的Cache一致性机制主要有总线的侦听协议和基于目录的目录协议。
目前的CMP系统大多采用基于总线的侦听协议。
4.核间通信技术
CMP处理器的各CPU核心执行的程序之间有时需要进行数据共享与同步,因此其硬件结构必须支持核间通信。
高效的通信机制是CMP处理器高性能的重要保障,目前比较主流的片上高效通信机制有两种,一种是基于总线共享的Cache结构,一种是基于片上的互连结构。
总线共享Cache结构是指每个CPU内核拥有共享的二级或三级Cache,用于保存比较常用的数据,并通过连接核心的总线进行通信。
这种系统的优点是结构简单,通信速度高,缺点是基于总线的结构可扩展性较差。
基于片上互连的结构是指每个CPU核心具有独立的处理单元和Cache,各个CPU核心通过交叉开关或片上网络等方式连接在一起。
各个CPU核心间通过消息通信。
这种结构的优点是可扩展性好,数据带宽有保证;
缺点是硬件结构复杂,且软件改动较大。
也许这两者的竞争结果不是互相取代而是互相合作,例如在全局范围采用片上网络而局部采用总线方式,来达到性能与复杂性的平衡。
5.总线设计
传统微处理器中,Cache不命中或访存事件都会对CPU的执行效率产生负面影响,而总线接口单元(BIU)的工作效率会决定此影响的程度。
当多个CPU核心同时要求访问内存或多个CPU核心内私有Cache同时出现Cache不命中事件时,BIU对这多个访问请求的仲裁机制以及对外存储访问的转换机制的效率决定了CMP系统的整体性能。
因此寻找高效的多端口总线接口单元(BIU)结构,将多核心对主存的单字访问转为更为高效的猝发(burst)访问;
同时寻找对CMP处理器整体效率最佳的一次Burst访问字的数量模型以及高效多端口BIU访问的仲裁机制将是CMP处理器研究的重要内容。
6.操作系统设计:
任务调度、中断处理、同步互斥
对于多核CPU,优化操作系统任务调度算法是保证效率的关键。
一般任务调度算法有全局队列调度和局部队列调度。
前者是指操作系统维护一个全局的任务等待队列,当系统中有一个CPU核心空闲时,操作系统就从全局任务等待队列中选取就绪任务开始在此核心上执行。
这种方法的优点是CPU核心利用率较高。
后者是指操作系统为每个CPU内核维护一个局部的任务等待队列,当系统中有一个CPU内核空闲时,便从该核心的任务等待队列中选取恰当的任务执行,这种方法的优点是任务基本上无需在多个CPU核心间切换,有利于提高CPU核心局部Cache命中率。
目前多数多核CPU操作系统采用的是基于全局队列的任务调度算法。
多核的中断处理和单核有很大不同。
多核的各处理器之间需要通过中断方式进行通信,所以多个处理器之间的本地中断控制器和负责仲裁各核之间中断分配的全局中断控制器也需要封装在芯片内部。
另外,多核CPU是一个多任务系统。
由于不同任务会竞争共享资源,因此需要系统提供同步与互斥机制。
而传统的用于单核的解决机制并不能满足多核,需要利用硬件提供的“读-修改-写”的原子操作或其他同步互斥机制来保证。
7.低功耗设计
半导体工艺的迅速发展使微处理器的集成度越来越高,同时处理器表面温度也变得越来越高并呈指数级增长,每三年处理器的功耗密度就能翻一番。
目前,低功耗和热优化设计已经成为微处理器研究中的核心问题。
CMP的多核心结构决定了其相关的功耗研究是一个至关重要的课题。
低功耗设计是一个多层次问题,需要同时在操作系统级、算法级、结构级、电路级等多个层次上进行研究。
每个层次的低功耗设计方法实现的效果不同——抽象层次越高,功耗和温度降低的效果越明显。
8.存储器墙
为了使芯片内核充分地工作,最起码的要求是芯片能提供与芯片性能相匹配的存储器带宽,虽然内部Cache的容量能解决一些问题,但随着性能的进一步提高,必须有其他一些手段来提高存储器接口的带宽,如增加单个管脚带宽的DDR、DDR2、QDR、XDR等。
同样,系统也必须有能提供高带宽的存储器。
所以,芯片对封装的要求也越来越高,虽然封装的管脚数每年以20%的数目提升,但还不能完全解决问题,而且还带来了成本提高的问题,为此,怎样提供一个高带宽,低延迟的接口带宽,是必须解决的一个重要问题。
9.可靠性及安全性设计
随着技术革新的发展,处理器的应用渗透到现代社会的各个层面,但是在安全性方面却存在着很大的隐患。
一方面,处理器结构自身的可靠性低下,由于超微细化与时钟设计的高速化、低电源电压化,设计上的安全系数越来越难以保证,故障的发生率逐渐走高。
另一方面,来自第三方的恶意攻击越来越多,手段越来越先进,已成为具有普遍性的社会问题。
现在,可靠性与安全性的提高在计算机体系结构研究领域备受注目。
今后,CMP这类处理器芯片内有多个进程同时执行的结构将成为主流,再加上硬件复杂性、设计时的失误增加,使得处理器芯片内部也未必是安全的,因此,安全与可靠性设计任重而道远。
◆多核系统架构
在上文中详细介绍了多核处理器的系统内部问题,那么,实施多核系统的最大挑战是什么?
对这个问题的回答当然是见仁见智,但是,如果您询问大多数业界学者,他们会说是编程。
虽然很多公司和研究人员都在努力解决多核的编程问题,但是也有大量处理器供应商正在力争改进其架构,以应对不断增长的内核数目。
例如,单核设备的数据总线只有“一张吃饭的嘴”,添加第二个内核后,总线负载就翻倍了。
每添加一个内核,面临的总线挑战就呈线性增长。
当内核数达到80、500、1000或更多时,就令人难以想像了。
但是也有好消息,处理器供应商(如ARM)正在改进其架构,以应对更高的数据吞吐率,这反映在所谓的互连技术中。
同时还在实施其他技术,以应对不断增长的内核数目。
但是,业界对这些新型多核架构的性能如何进行定量测量呢?
如何确定可扩展性?
系统设计人员如何选择最优的处理器?
在最简单的层面上,设计用于测试多核平台的基准必须可扩展,以便支持从一个内核到“无限”多个内核的情形。
要确定多核设备的性能开始背离线性预期、进入下坡路的那个点,这是有意思的。
多核基准分类基本上有两个最高层次:
共享内存和以消息为基础。
共享内存方法依赖基于线程API(如POSIX)的语义。
以消息为基础的方法适用于非对称异构多核解决方案。
EEMBC(嵌入式微处理器基准协会)认为这两种方法都可以有效支持必须处理一致性和分布式内存架构的嵌入式应用程序。
要衡量处理性能,可以利用速度测量来确定处理器完成一项任务的速度;
也可以测量处理器在一定时间内能完成的任务数量,称为吞吐量或速率测量。
在最基本层面上检查一下共享内存多核基准,一类测试是对单个基准进行独立并行执行。
这种速率测量基本上是利用相同的输入数据集,同时运行同一基准的多个实例,经过多个线程,所有线程运行完毕后,测量时间。
这与SPEC速率基准(如SPECint_rate2000)实施的传统吞吐量测量技术相同。
使用该方法的最大优势之一就是它采用简单的方法,易于说明和演示。
该方法还可以轻松扩展至任意数目的并发执行上下文。
一般来说,上下文数目与机器上的CPU数目相同,但这不是要求。
这样可以近似一种粗粒度并行方法,该方法有时在现实应用中会使用(例如多VoIP通道)。
但是,每个上下文使用相同的输入数据集是不现实的。
不仅如此,使用相同数据集还会使处理器L2缓存和内存总线上的效果降到最低并无法测试。
EEMBC认为此方法只能测量单个内核的效率和处理器的总线带宽。
此方法并不测量真正的多核性能,它是在内核之间建立某种形式的通信、同步和共享内存。
并且此方法不将多流分解或任何流之间的同步考虑作为测试结果的一部分。
如果基准和工作负载不是设计用于多任务环境,此方法将很难反映这些算法在多任务系统中的实际使用情况。
换言之,由于处理器/线程之间没有或只有很少交互,此方法可以更有效地评测台式系统。
例如,它可以表示以下情形:
浏览器运行的同时,还在播放声音、编译程序、检查病毒、为图片/文档编索引,以及其他任务。
·
测试多核可扩展性
对上述方法的一项改进是让每个线程上下文以唯一的数据集运行。
这样可以反映更真实的情况,例如多VoIP通道的处理,其中每个通道接收不同的输入数据。
从系统级别基准观点来看,此方法的价值在于它可以确保提升内存活动(如L2缓存、内存总线)。
此方法还可显示解决方案在可扩展的数据输入基础上的扩展能力。
换言之,要确定增加数据输入个数时性能开始下降的那个点,是有意义的。
制定此类基准测试时,最大的挑战是:
代码对于线程必须是安全的,才能让多个线程同时执行。
特别地,它必须满足多个线程访问相同共享数据的需求,以及在任一给定时间,某一共享数据只由一个线程访问的需求,同时不降低要求的性能吞吐量。
制定可同时启动多个项目的测试,对数据和代码都执行并发,可进一步扩展上述方法。
这可显示一种解决方案对于通用处理的可扩展性。
举例来说,考虑执行MPEGdecode(x),后跟MPEGencode(x),类似机顶盒应用程序中的步骤,其中,会接收卫星信号、进行解码并编码成为另一种信号存入硬盘。
作为基准评测,这需要上下文之间的同步以及确定评测何时完成的方法。
任务分解
另一种称为任务分解(或算法并行)的方法允许多个线程合作实现统一的目标,可以显示处理器支持细粒度并行的能力。
例如线程中MPEG解码算法的分解,其中每个处理一项不同的工作负载。
由ARM的JohnGoodacre领导的嵌入式微处理器基准协会(EEMBC)正在着手研究一套非常完整的新基准,它将针对多处理系统、多核处理器和多线程处理器。
这些基准不仅测试系统级别的功能(即操作系统支持、内存性能),还将测试互连能力以及片上网络(NoC)。
换言之,这些基准将审视“整个产品包”。
EEMBC的多核基准软件将开始支持共享内存对称多核处理器,并利用基于线程的API建立通用编程模型。
这些基准的目标是上述三种并发形式,包括任务分解、多数据流处理和多工作负载处理。
嵌入式行业好像已经非常认可多核技术,但是其性能之间的差距仍在增长。
即将推出的行业标准基准将显示多核处理器并行执行多个上下文的效率,并有助于推动处理器随嵌入式细分市场并行资源的发展,同时提供中立的方法,供系统开发人员比较相互竞争的处理器。
◆小结
当前操作系统利用多核处理器处理能力的方法非常复杂,不够完美。
关键问题不是在并行编程方面投入更多资源,而是重新考虑操作系统的基本设计。
本文详细地分析了多核处理器系统内部存在的问题,并提出规范系统架构的方式改善多核处理器。
而对于操作系统的基本设计与系统架构方式的发展对于未来多核世界的发展是及其有益的。
【参考文献】
【1】曾宪权.2006.操作系统原理与实践教程.北京:
清华大学出版社
【2】魏永明.操作系统实用教程.北京:
电子工业出版社
【3】刘乃琦.计算机操作系统.北京: