摘 要: 介紹了S698P4 SoC多核處理器的體系結(jié)構(gòu),,及多時(shí)鐘機(jī)制,、多核調(diào)度機(jī)制,討論了芯片工作時(shí),,多時(shí)鐘機(jī)制及多核調(diào)度機(jī)制對(duì)其性能的影響,。相關(guān)的技術(shù)在工程實(shí)踐中已經(jīng)得到驗(yàn)證,獲得了良好的效果,。
關(guān)鍵詞: S698P4,;并行處理;多時(shí)鐘機(jī)制,;多核調(diào)度機(jī)制
由于性能上的需求,,當(dāng)前嵌入式系統(tǒng)已經(jīng)不滿足于使用單核處理器系統(tǒng),許多設(shè)計(jì)者開始考慮多核處理,。但多核處理系統(tǒng)在帶來性能提升的同時(shí),,也面臨著一系列需要考慮的問題,如數(shù)據(jù)一致性問題[1],、多時(shí)鐘控制問題和多核調(diào)度問題等,。如果一個(gè)多核、多任務(wù)系統(tǒng)無法合理處理多任務(wù)需求,,無法合理分配各核間的資源及工作,,多核處理的優(yōu)勢(shì)將得不到很好的體現(xiàn),嚴(yán)重時(shí)甚至?xí)霈F(xiàn)災(zāi)難性的后果,。
本文以S698P4 SoC處理器為例,,介紹在多核處理器系統(tǒng)中,多時(shí)鐘機(jī)制及多核調(diào)度機(jī)制對(duì)芯片性能的影響,。
1 S698P4 SoC簡(jiǎn)介
S698P4 SoC是基于SPARCV8架構(gòu)[2]的高性能的32 bit RISC嵌入式4核處理器,,采用SMP[3]“對(duì)稱多處理”技術(shù),在一個(gè)內(nèi)核里集成4個(gè)功能一樣的處理器核心,,各CPU之間共享內(nèi)存子系統(tǒng)及總線結(jié)構(gòu),。總線競(jìng)爭(zhēng)核仲裁由硬件自動(dòng)完成,,不需要用戶進(jìn)行設(shè)置,。該處理器專為嵌入式應(yīng)用而設(shè)計(jì),具有高性能,、低復(fù)雜度和低功耗的特點(diǎn),。
S698P4支持多核并行處理機(jī)制[4-5],,采用eCos實(shí)時(shí)嵌入式操作系統(tǒng)。eCos將任務(wù)隊(duì)列對(duì)稱地分布于多個(gè)CPU之上,,從而極大地提高了整個(gè)系統(tǒng)的數(shù)據(jù)處理能力,。所有的處理器都可以平等地訪問內(nèi)存[6]、I/O口和外部中斷,。系統(tǒng)資源被系統(tǒng)中所有CPU共享,,工作負(fù)載能夠均勻地分配到所有可用處理器之上,運(yùn)算速度快,,數(shù)據(jù)處理量大,、功耗低,性能和可靠性遠(yuǎn)高于單核處理器,。
圖1為S698P4結(jié)構(gòu)圖,,S698P4處理器內(nèi)部集成了CPU0、CPU1,、CPU2和CPU3 4個(gè)S698P核,,每個(gè)S698P CPU內(nèi)部又分別集成32 bit整形數(shù)處理單元、32 bit/64 bit浮點(diǎn)數(shù)處理單元及8 KB數(shù)據(jù)緩存(data cache)和指令緩存(instruction cache),。針對(duì)實(shí)時(shí)應(yīng)用的嵌入式領(lǐng)域,,S698P4提供了內(nèi)部看門狗、定時(shí)器,、中斷控制器,、通用I/O口以及串行通信接口;針對(duì)航空航天領(lǐng)域,,S698P4提供了CAN總線接口、以太網(wǎng)接口以及1553B總線,。同時(shí),,為了芯片調(diào)試,芯片內(nèi)部還集成了硬件調(diào)試專用接口DSU,。用戶通過DSU可以訪問CPU內(nèi)部所有寄存器和存儲(chǔ)器資源,,也可訪問外部所有存儲(chǔ)器和I/O外設(shè),為基于S698P4的硬件/軟件調(diào)試提供方便[7],。
S698P4處理器可廣泛應(yīng)用于航空航天的高端電子設(shè)備,、海量數(shù)據(jù)處理、大規(guī)模網(wǎng)絡(luò)應(yīng)用,、復(fù)雜科學(xué)計(jì)算及大型圖形建模為特征的企業(yè)或行業(yè)等領(lǐng)域,。
2 多時(shí)鐘機(jī)制
S698P4單核最高運(yùn)行速度可達(dá)到400 MHz,如果整個(gè)芯片都采用同一個(gè)時(shí)鐘,,則所有外設(shè)和板級(jí)設(shè)備都要求運(yùn)行在400 MHz的頻率上,,這會(huì)增大系統(tǒng)設(shè)計(jì)的難度,,并增加系統(tǒng)功耗,降低系統(tǒng)的穩(wěn)定性,。
S698P4采用多時(shí)鐘機(jī)制來平衡高速CPU內(nèi)核和低速的外部設(shè)備之間的矛盾,,在提高芯片性能的同時(shí),避免對(duì)板級(jí)設(shè)備提出過高的要求,。
S698P4的時(shí)鐘電路產(chǎn)生高速的CPU時(shí)鐘CPU_CLK,,CPU_CLK除了供給4個(gè)CPU內(nèi)核使用外,還經(jīng)過4分頻電路,,產(chǎn)生HCLK供給AMBA總線和外設(shè)使用,。
S698P4 4個(gè)內(nèi)核采用同樣的時(shí)鐘,它們?nèi)繌腃PU_CLK得來,,并且與CPU_CLK同頻,、同相。
CPU_CLK,、CPU0_CLK到CPU3_CLK和HCLK之間的相位關(guān)系如圖2所示,。
HCLK的頻率是CPU_CLK的四分之一。在CPU需要訪問AMBA總線和外設(shè)時(shí),,信號(hào)的時(shí)序需要按照HCLK的時(shí)序進(jìn)行,。如果CPU_CLK運(yùn)行在400 MHz,則HCLK只需要運(yùn)行在100 MHz,。在板級(jí)設(shè)備上,,普通的SDRAM即可滿足要求。對(duì)于其他慢速設(shè)備,,則可以通過配置存儲(chǔ)器控制器寄存器的讀寫等待周期解決,。
3 多核調(diào)度機(jī)制
3.1 S698P4多核中斷控制
S698P4在一個(gè)處理器上匯集了4個(gè)CPU,各CPU之間共享一個(gè)操作系統(tǒng),、內(nèi)存子系統(tǒng),、總線結(jié)構(gòu)和I/O系統(tǒng)等。同時(shí)使用多個(gè)CPU時(shí),,從管理的角度來看,,它們的表現(xiàn)如同一臺(tái)單機(jī)。正常啟動(dòng)后,,所有的CPU無主從之分,,都可以平等地訪問內(nèi)存、I/O和外部中斷,。S698P4各CPU之間的通信是通過多核中斷控制器(MP IRQCTRL)的中斷來實(shí)現(xiàn)的,,其結(jié)構(gòu)如圖3所示。
S698P4中的每個(gè)CPU都可以通過多核中斷控制器向其他CPU發(fā)中斷請(qǐng)求,,每個(gè)CPU都可以響應(yīng)其他CPU的中斷請(qǐng)求,。在多核中斷控制器中,,有一個(gè)稱為多處理器狀態(tài)寄存器(Multi-processor status register),其后4位(STATUS[3:0])分別控制4個(gè)CPU的狀態(tài),,寫入1,,其相應(yīng)的CPU就會(huì)被激活;寫入0,,其相應(yīng)的CPU就會(huì)進(jìn)入休眠,。S698P4啟動(dòng)時(shí),CPU有主CPU(CPU0)和從CPU之分,,啟動(dòng)完之后,,所有CPU不分主從。CPU0的啟動(dòng)順序和其他CPU的啟動(dòng)順序是不同的,,上電或者軟復(fù)位后,,S698P4先啟動(dòng)CPU0,其他CPU處于power down狀態(tài),。在CPU0初始化完成后,,通過設(shè)置多處理器狀態(tài)寄存器啟動(dòng)、初始化其他CPU,,之后所有CPU無主從之分,。多處理器狀態(tài)寄存器如圖4所示。
在SMP系統(tǒng)中,,系統(tǒng)資源被系統(tǒng)中所有處理器共享,,工作負(fù)載能夠均勻地分配到所有可用處理器之上。并且因?yàn)榻Y(jié)構(gòu)共享存儲(chǔ)器,、統(tǒng)一地址空間,,使得系統(tǒng)編程比較容易。系統(tǒng)將任務(wù)隊(duì)列對(duì)稱地分布于多個(gè)CPU之上,,從而極大地提高了整個(gè)系統(tǒng)的數(shù)據(jù)處理能力,。
3.2 S698P4中斷源處理
S698P4中的AMBA系統(tǒng)提供一個(gè)中斷方案,中斷線排成一行連同剩余的AHB/APB總線信號(hào)線,,形成一個(gè)中斷總線。來自AHB和APB單元的中斷通過總線連結(jié)在一起被發(fā)送,。多處理器中斷控制器附屬到AMBA總線,,作為一個(gè)APB從設(shè)備,而且監(jiān)視組合的中斷信號(hào),。在中斷總線上產(chǎn)生的中斷全部被轉(zhuǎn)送給中斷控制器,,中斷控制器通過優(yōu)先級(jí)區(qū)分,中斷屏蔽選擇,,把最高優(yōu)先級(jí)的中斷送給處理器,。
中斷監(jiān)視器監(jiān)視中斷總線中的1~15個(gè)中斷,,通過設(shè)置中斷電平寄存器,每個(gè)中斷可以被指定0或者1兩個(gè)電平,。電平1中斷的優(yōu)先級(jí)比電平0中斷的優(yōu)先級(jí)高,。而每個(gè)電平的中斷也是有優(yōu)先級(jí)區(qū)分的,中斷15優(yōu)先級(jí)最高,;中斷1則優(yōu)先級(jí)最低,。電平1的優(yōu)先級(jí)最高中斷將會(huì)被轉(zhuǎn)送到處理器。如果電平1沒有非屏蔽掛起中斷存在,,來自電平0的最高非屏蔽掛起中斷將會(huì)轉(zhuǎn)送到處理器,。
當(dāng)多個(gè)處理器單獨(dú)屏蔽和轉(zhuǎn)送時(shí),中斷在系統(tǒng)電平上有區(qū)分,。多處理器系統(tǒng)的每個(gè)處理器有單獨(dú)的中斷屏蔽和強(qiáng)制寄存器,。當(dāng)一個(gè)中斷在中斷總線上被告知時(shí),中斷掛起寄存器的相應(yīng)位置1,,將中斷信號(hào)發(fā)送到每個(gè)CPU屏蔽寄存器,,為每個(gè)CPU進(jìn)行中斷屏蔽,然后對(duì)中斷進(jìn)行優(yōu)先級(jí)選擇,,把優(yōu)先級(jí)高的中斷送到CPU,。
當(dāng)有一個(gè)CPU應(yīng)答中斷后,對(duì)應(yīng)的中斷掛起位將會(huì)自動(dòng)地被清除,,中斷也可以通過設(shè)置中斷強(qiáng)制寄存器產(chǎn)生對(duì)應(yīng)的中斷,。由此處理器應(yīng)答后將清除強(qiáng)制位,而并非掛起位,。復(fù)位之后,,中斷屏蔽寄存器全部被設(shè)定為0,剩余的控制寄存器是不確定的,。注意:中斷15能被S698P4處理器屏蔽,,使用時(shí)大部分操作系統(tǒng)不能正確處理這個(gè)中斷。
S698P4中斷控制器把S698P4內(nèi)部和外部的所有中斷按照優(yōu)先級(jí)先后順序排列,,并傳送給IU,。S698P4總共有15個(gè)中斷,如表1所示,。
3.3 S698P4調(diào)度算法
eCos支持對(duì)稱多處理器(SMP)系統(tǒng),,多CPU之間的任務(wù)調(diào)度采用多級(jí)隊(duì)列調(diào)度,主要調(diào)度算法有時(shí)間片輪轉(zhuǎn)調(diào)度算法和搶占式優(yōu)先權(quán)調(diào)度算法,。
多級(jí)隊(duì)列調(diào)度的優(yōu)先級(jí)數(shù)目在調(diào)度器配置的時(shí)候給出,,最多有32個(gè)優(yōu)先級(jí),0為最高優(yōu)先級(jí)。每個(gè)優(yōu)先級(jí)上都有一個(gè)隊(duì)列,。每個(gè)隊(duì)列支持多個(gè)線程,。單個(gè)隊(duì)列中各線程優(yōu)先級(jí)相同,同優(yōu)先級(jí)線程可支持時(shí)間片輪轉(zhuǎn),。
任務(wù)調(diào)度僅在激活的CPU上進(jìn)行,,其他的調(diào)度在4個(gè)CPU都處于激活狀態(tài)。當(dāng)前任務(wù)數(shù)小于等于4個(gè)時(shí),,系統(tǒng)將每個(gè)任務(wù)分配一個(gè)CPU上,,之后系統(tǒng)不會(huì)進(jìn)行CPU間任務(wù)調(diào)度,一直運(yùn)行到結(jié)束,;當(dāng)前任務(wù)數(shù)大于4個(gè)時(shí),,系統(tǒng)才會(huì)在CPU間進(jìn)行任務(wù)調(diào)度。
當(dāng)任務(wù)大于4個(gè)時(shí),,系統(tǒng)將進(jìn)行CPU間的任務(wù)調(diào)度,。調(diào)度算法采用時(shí)間片輪轉(zhuǎn)調(diào)度算法和搶占式優(yōu)先權(quán)調(diào)度算法。系統(tǒng)將任務(wù)就緒隊(duì)列中優(yōu)先級(jí)最高的4個(gè)任務(wù)分配到4個(gè)CPU上,,每個(gè)CPU開始執(zhí)行任務(wù),,任務(wù)執(zhí)行時(shí)間以時(shí)間片為單位。當(dāng)時(shí)間片時(shí)間到達(dá)時(shí)會(huì)產(chǎn)生一個(gè)定時(shí)器中斷,,當(dāng)系統(tǒng)定時(shí)器中斷產(chǎn)生時(shí),,由其中一個(gè)CPU(不確定)接收定時(shí)中斷,接收定時(shí)中斷的CPU必須為所有的CPU的時(shí)間片計(jì)數(shù)器進(jìn)行操作,。當(dāng)某個(gè)CPU的時(shí)間片計(jì)數(shù)器到達(dá)0時(shí),,它將給該CPU發(fā)送一個(gè)時(shí)間片中斷。當(dāng)其他CPU接收到時(shí)間片中斷時(shí)(S698P4每個(gè)CPU都必須處理時(shí)間片),,該CPU比較當(dāng)前任務(wù)和任務(wù)就緒表中最高優(yōu)先級(jí)的任務(wù),,如果后者的優(yōu)先級(jí)比前者的優(yōu)先級(jí)高,則系統(tǒng)就會(huì)產(chǎn)生調(diào)度,。CPU把任務(wù)就緒表中最高優(yōu)先級(jí)的任務(wù)調(diào)到該CPU上運(yùn)行,,把先前的任務(wù)重新在任務(wù)就緒表排隊(duì)。只要出現(xiàn)了另一個(gè)優(yōu)先權(quán)更高的任務(wù),,調(diào)度程序就在下一個(gè)時(shí)間片中斷暫停原最高優(yōu)先權(quán)任務(wù)的執(zhí)行,,而將CPU分配給新出現(xiàn)的優(yōu)先權(quán)最高的任務(wù)。直到當(dāng)前任務(wù)數(shù)小于等于4個(gè)時(shí),,系統(tǒng)才停止CPU間調(diào)度,。
目前S698P4處理器已經(jīng)成功實(shí)現(xiàn)了量產(chǎn),在航空航天,、工業(yè)控制等領(lǐng)域中得到廣泛的應(yīng)用。實(shí)踐證明,,S698P4多時(shí)鐘及多核調(diào)度機(jī)制能夠在發(fā)揮處理器整體性能上起到很關(guān)鍵的作用,。
參考文獻(xiàn)
[1] 梁寶玉,,顏軍,侯雄,,等.多核處理器S698P-SoC的數(shù)據(jù)一致性[J].航天控制,,2008,26:82-86.
[2] 珠海歐比特控制工程股份有限公司.S698P4芯片用戶手冊(cè)(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] 季振洲.并行處理與體系結(jié)構(gòu)講義[Z].哈爾濱:哈爾濱工業(yè)大學(xué),,2005.
[5] BYOUNGRO S,, ANWAR M G, YOUFENG W. Optimizing data parallel operations on many-core platforms[D]. Intel Corporation,, 2004.
[6] 唐志敏.分布存儲(chǔ)并行系統(tǒng)中的共享存儲(chǔ)編程環(huán)境講義[D].北京:中科院計(jì)算機(jī)研究所,,2003.
[7] 蔣曉華,李付海,,祁波.SPARC體系的S698系列SoC及其應(yīng)用[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,,2007(8):84-85.