陈炳成,唐芳福,蒋晓华,颜 军
(珠海欧比特控制工程股份有限公司,广东 珠海 519080)
由于性能上的需求,当前嵌入式系统已经不满足于使用单核处理器系统,许多设计者开始考虑多核处理。但多核处理系统在带来性能提升的同时,也面临着一系列需要考虑的问题,如数据一致性问题[1]、多时钟控制问题和多核调度问题等。如果一个多核、多任务系统无法合理处理多任务需求,无法合理分配各核间的资源及工作,多核处理的优势将得不到很好的体现,严重时甚至会出现灾难性的后果。
本文以S698P4 SoC处理器为例,介绍在多核处理器系统中,多时钟机制及多核调度机制对芯片性能的影响。
S698P4 SoC是基于 SPARCV8架构[2]的高性能的32 bit RISC嵌入式 4核处理器,采用 SMP[3]“对称多处理”技术,在一个内核里集成4个功能一样的处理器核心,各CPU之间共享内存子系统及总线结构。总线竞争核仲裁由硬件自动完成,不需要用户进行设置。该处理器专为嵌入式应用而设计,具有高性能、低复杂度和低功耗的特点。
S698P4支持多核并行处理机制[4-5],采用eCos实时嵌入式操作系统。eCos将任务队列对称地分布于多个CPU之上,从而极大地提高了整个系统的数据处理能力。所有的处理器都可以平等地访问内存[6]、I/O口和外部中断。系统资源被系统中所有CPU共享,工作负载能够均匀地分配到所有可用处理器之上,运算速度快,数据处理量大、功耗低,性能和可靠性远高于单核处理器。
图1为S698P4结构图,S698P4处理器内部集成了CPU0、CPU1、CPU2和 CPU3 4个 S698P核, 每个 S698P CPU内部又分别集成32 bit整形数处理单元、32 bit/64 bit浮点数处理单元及8 KB数据缓存(data cache)和指令缓存 (instruction cache)。针对实时应用的嵌入式领域,S698P4提供了内部看门狗、定时器、中断控制器、通用I/O口以及串行通信接口;针对航空航天领域,S698P4提供了CAN总线接口、以太网接口以及1553B总线。同时,为了芯片调试,芯片内部还集成了硬件调试专用接口DSU。用户通过DSU可以访问CPU内部所有寄存器和存储器资源,也可访问外部所有存储器和I/O外设,为基于S698P4的硬件/软件调试提供方便[7]。
图1 S698P4结构图
S698P4处理器可广泛应用于航空航天的高端电子设备、海量数据处理、大规模网络应用、复杂科学计算及大型图形建模为特征的企业或行业等领域。
S698P4单核最高运行速度可达到400 MHz,如果整个芯片都采用同一个时钟,则所有外设和板级设备都要求运行在400 MHz的频率上,这会增大系统设计的难度,并增加系统功耗,降低系统的稳定性。
S698P4采用多时钟机制来平衡高速CPU内核和低速的外部设备之间的矛盾,在提高芯片性能的同时,避免对板级设备提出过高的要求。
S698P4的时钟电路产生高速的 CPU时钟CPU_CLK,CPU_CLK除了供给4个 CPU内核使用外,还经过4分频电路,产生HCLK供给AMBA总线和外设使用。
S698P4 4个内核采用同样的时钟,它们全部从CPU_CLK得来,并且与CPU_CLK同频、同相。
CPU_CLK、CPU0_CLK到 CPU3_CLK和 HCLK之间的相位关系如图2所示。
图2 S698P4内部时钟
HCLK的频率是CPU_CLK的四分之一。在CPU需要访问AMBA总线和外设时,信号的时序需要按照HCLK的时序进行。如果CPU_CLK运行在400 MHz,则HCLK只需要运行在100 MHz。在板级设备上,普通的SDRAM即可满足要求。对于其他慢速设备,则可以通过配置存储器控制器寄存器的读写等待周期解决。
S698P4在一个处理器上汇集了4个CPU,各 CPU之间共享一个操作系统、内存子系统、总线结构和I/O系统等。同时使用多个CPU时,从管理的角度来看,它们的表现如同一台单机。正常启动后,所有的CPU无主从之分,都可以平等地访问内存、I/O和外部中断。S698P4各CPU之间的通信是通过多核中断控制器(MP IRQCTRL)的中断来实现的,其结构如图3所示。
图3 S698P4多核中断控制器
S698P4中的每个CPU都可以通过多核中断控制器向其他CPU发中断请求,每个CPU都可以响应其他CPU的中断请求。在多核中断控制器中,有一个称为多处理器状态寄存器(Multi-processor status register),其后4位(STATUS[3:0])分别控制 4个 CPU的状态,写入 1,其相应的CPU就会被激活;写入0,其相应的CPU就会进入休眠。S698P4启动时,CPU有主CPU(CPU0)和从CPU之分,启动完之后,所有CPU不分主从。CPU0的启动顺序和其他CPU的启动顺序是不同的,上电或者软复位后,S698P4先启动CPU0,其他CPU处于power down状态。在CPU0初始化完成后,通过设置多处理器状态寄存器启动、初始化其他CPU,之后所有CPU无主从之分。多处理器状态寄存器如图4所示。
图4 多处理器状态寄存器
S698P4各个CPU均有一个称为%asr17的寄存器,如图5所示。其 31 bit~28 bit(图中 INDEX部分)指明当前运行的是哪个CPU,程序可以从这个寄存器得到当前是在哪个CPU上运行,并作相应处理。
图5 %asr17寄存器
在SMP系统中,系统资源被系统中所有处理器共享,工作负载能够均匀地分配到所有可用处理器之上。并且因为结构共享存储器、统一地址空间,使得系统编程比较容易。系统将任务队列对称地分布于多个CPU之上,从而极大地提高了整个系统的数据处理能力。
S698P4中的AMBA系统提供一个中断方案,中断线排成一行连同剩余的AHB/APB总线信号线,形成一个中断总线。来自AHB和APB单元的中断通过总线连结在一起被发送。多处理器中断控制器附属到AMBA总线,作为一个APB从设备,而且监视组合的中断信号。在中断总线上产生的中断全部被转送给中断控制器,中断控制器通过优先级区分,中断屏蔽选择,把最高优先级的中断送给处理器。
中断监视器监视中断总线中的1~15个中断,通过设置中断电平寄存器,每个中断可以被指定0或者1两个电平。电平1中断的优先级比电平0中断的优先级高。而每个电平的中断也是有优先级区分的,中断15优先级最高;中断1则优先级最低。电平1的优先级最高中断将会被转送到处理器。如果电平1没有非屏蔽挂起中断存在,来自电平0的最高非屏蔽挂起中断将会转送到处理器。
当多个处理器单独屏蔽和转送时,中断在系统电平上有区分。多处理器系统的每个处理器有单独的中断屏蔽和强制寄存器。当一个中断在中断总线上被告知时,中断挂起寄存器的相应位置1,将中断信号发送到每个CPU屏蔽寄存器,为每个CPU进行中断屏蔽,然后对中断进行优先级选择,把优先级高的中断送到CPU。
当有一个CPU应答中断后,对应的中断挂起位将会自动地被清除,中断也可以通过设置中断强制寄存器产生对应的中断。由此处理器应答后将清除强制位,而并非挂起位。复位之后,中断屏蔽寄存器全部被设定为0,剩余的控制寄存器是不确定的。注意:中断15能被S698P4处理器屏蔽,使用时大部分操作系统不能正确处理这个中断。
S698P4中断控制器把S698P4内部和外部的所有中断按照优先级先后顺序排列,并传送给IU。S698P4总共有15个中断,如表1所示。
eCos支持对称多处理器(SMP)系统,多CPU之间的任务调度采用多级队列调度,主要调度算法有时间片轮转调度算法和抢占式优先权调度算法。
多级队列调度的优先级数目在调度器配置的时候给出,最多有32个优先级,0为最高优先级。每个优先级上都有一个队列。每个队列支持多个线程。单个队列中各线程优先级相同,同优先级线程可支持时间片轮转。
表1 系统中断列表
任务调度仅在激活的CPU上进行,其他的调度在4个CPU都处于激活状态。当前任务数小于等于4个时,系统将每个任务分配一个CPU上,之后系统不会进行CPU间任务调度,一直运行到结束;当前任务数大于4个时,系统才会在CPU间进行任务调度。
当任务大于4个时,系统将进行CPU间的任务调度。调度算法采用时间片轮转调度算法和抢占式优先权调度算法。系统将任务就绪队列中优先级最高的4个任务分配到4个CPU上,每个CPU开始执行任务,任务执行时间以时间片为单位。当时间片时间到达时会产生一个定时器中断,当系统定时器中断产生时,由其中一个CPU(不确定)接收定时中断,接收定时中断的CPU必须为所有的CPU的时间片计数器进行操作。当某个CPU的时间片计数器到达0时,它将给该CPU发送一个时间片中断。当其他CPU接收到时间片中断时(S698P4每个CPU都必须处理时间片),该CPU比较当前任务和任务就绪表中最高优先级的任务,如果后者的优先级比前者的优先级高,则系统就会产生调度。CPU把任务就绪表中最高优先级的任务调到该CPU上运行,把先前的任务重新在任务就绪表排队。只要出现了另一个优先权更高的任务,调度程序就在下一个时间片中断暂停原最高优先权任务的执行,而将CPU分配给新出现的优先权最高的任务。直到当前任务数小于等于4个时,系统才停止CPU间调度。
目前S698P4处理器已经成功实现了量产,在航空航天、工业控制等领域中得到广泛的应用。实践证明,S698P4多时钟及多核调度机制能够在发挥处理器整体性能上起到很关键的作用。
[1]梁宝玉,颜军,侯雄,等.多核处理器 S698P-SoC的数据一致性[J].航天控制,2008,26:82-86.
[2]珠海欧比特控制工程股份有限公司.S698P4芯片用户手册(V2.0)[K],2011.
[3]ZHAO Y, HU C, WANG S, et al.An extended openMP targeting on the hybrid architecture of SMP-cluster[M],Advances in Computer Science and Technology,2006.
[4]季振洲.并行处理与体系结构讲义[Z].哈尔滨:哈尔滨工业大学,2005.
[5]BYOUNGRO S, ANWAR M G, YOUFENG W.Optimizing data parallel operations on many-core platforms[D].Intel Corporation,2004.
[6]唐志敏.分布存储并行系统中的共享存储编程环境讲义[D].北京:中科院计算机研究所,2003.
[7]蒋晓华,李付海,祁波.SPARC体系的 S698系列 SoC及其应用[J].单片机与嵌入式系统应用,2007(8):84-85.