MIPS平臺(tái)上運(yùn)動(dòng)控制器的調(diào)度抖動(dòng)的測試方法設(shè)計(jì)詳解
?摘要:
將MIPS體系結(jié)構(gòu)的處理器應(yīng)用在數(shù)控系統(tǒng)上,可以降低系統(tǒng)的成本,增強(qiáng)數(shù)控系統(tǒng)的國產(chǎn)化水平.但不同的硬件結(jié)構(gòu)會(huì)對(duì)實(shí)時(shí)操作系統(tǒng)的調(diào)度抖動(dòng)產(chǎn)生不同的影響,而運(yùn)動(dòng)控制器的調(diào)度抖動(dòng)是數(shù)控系統(tǒng)的重要性能指標(biāo)之一.本文討論了MIPS平臺(tái)上運(yùn)動(dòng)控制器的調(diào)度抖動(dòng)的測試方法,分析產(chǎn)生抖動(dòng)的原因,并針對(duì)這些原因?qū)ο到y(tǒng)進(jìn)行了優(yōu)化.最終測試結(jié)果表明,在MIPS平臺(tái)下,RTAI的調(diào)度抖動(dòng)能夠滿足數(shù)控系統(tǒng)的需要.
1 前言
目前,國內(nèi)外的數(shù)控系統(tǒng)大多采用X86體系結(jié)構(gòu)的CPU,主要是因?yàn)閄86體系結(jié)構(gòu)上擁有豐富的應(yīng)用軟件,開
發(fā)環(huán)境和技術(shù)積累,可以在一定程度上縮短數(shù)控系統(tǒng)的開發(fā)周期.但X86體系結(jié)構(gòu)也有其自身的缺點(diǎn),比如其指令集體系結(jié)構(gòu)過于復(fù)雜,成本高.而且X86技術(shù)一直被國外的幾家大公司所壟斷,將其應(yīng)用在數(shù)控系統(tǒng)這樣的戰(zhàn)略資源上,存在一定的安全隱患.
M1PS體系結(jié)構(gòu)具有靈活開放,成本低的優(yōu)點(diǎn),在工業(yè)控制、網(wǎng)絡(luò)、通信、多媒體娛樂等領(lǐng)域得到了廣泛的應(yīng)用.我國已經(jīng)研制出了具有自主知識(shí)產(chǎn)權(quán)的MIPS通用CPU.因此將MIPS結(jié)構(gòu)的CPU應(yīng)用在數(shù)控系統(tǒng)上,不僅可以降低數(shù)控系統(tǒng)的成本,還增加了數(shù)控系統(tǒng)特別是高檔數(shù)控系統(tǒng)國產(chǎn)化的水平.
實(shí)時(shí)操作系統(tǒng)是數(shù)控系統(tǒng)的軟件基礎(chǔ),數(shù)控軟件中的運(yùn)動(dòng)控制器部分需要實(shí)時(shí)操作系統(tǒng)對(duì)其進(jìn)行周期性的調(diào)度,對(duì)
實(shí)時(shí)操作系統(tǒng)的性能要求很苛刻.一般來說,應(yīng)用于數(shù)控系統(tǒng)中的實(shí)時(shí)操作系統(tǒng)需要具有高實(shí)時(shí)性,時(shí)間確定性以及高可靠性,安全性和容錯(cuò)性?.
在硬實(shí)時(shí)操作系統(tǒng)中,主要是依靠時(shí)鐘硬件產(chǎn)生的中斷對(duì)周期進(jìn)程進(jìn)行調(diào)度.雖然時(shí)鐘可以精確的給出定時(shí)中斷,但硬件和操作系統(tǒng)的運(yùn)作方式會(huì)對(duì)中斷響應(yīng)和進(jìn)程調(diào)度產(chǎn)生影響,從而使周期進(jìn)程每次開始執(zhí)行的時(shí)間變的不確定,這就是調(diào)度抖動(dòng).調(diào)度抖動(dòng)直接影響到數(shù)控加工的精度,如果數(shù)控系統(tǒng)的加工速度為10米/分鐘,那么5O微秒的抖動(dòng)就可能產(chǎn)生約8.3微米的隨動(dòng)誤差.針對(duì)特定的體系結(jié)構(gòu)研究與分析運(yùn)動(dòng)控制器的調(diào)度抖動(dòng),對(duì)掌握并改善數(shù)控系統(tǒng)的性能具有重要的意義.
RTAI(Real Time ApplicaTIon Interface)是由意大利米蘭理工學(xué)院航天工程系發(fā)起開發(fā)的一個(gè)遵循GNU GPL的開源項(xiàng)目,RTAI已經(jīng)支持i386,MIPS,PowerPC,ARM 和M68k-~ommu等處理器,是目前支持處理器最多的linux實(shí)時(shí)解決方案之一.RTAI具有豐富的功能和良好的硬實(shí)時(shí)性能.本文針對(duì)數(shù)控系統(tǒng)的運(yùn)動(dòng)控制器,討論了在MIPS平臺(tái)上RTAI操作系統(tǒng)的調(diào)度抖動(dòng)測試,并分析了產(chǎn)生調(diào)度抖動(dòng)的原因.
2 抖動(dòng)測試
2.1 抖動(dòng)測試方法
在本文中,用于測試的硬件平臺(tái)是龍芯2E處理器,主頻為664.32MHz.該處理器擁有64KB的一級(jí)緩存和512KB的二級(jí)緩存.系統(tǒng)內(nèi)存為256M.
本文在抖動(dòng)測試中采用了內(nèi)部軟件測試技術(shù):記錄運(yùn)動(dòng)控制器的第一條指令每次執(zhí)行的時(shí)間戳,并存儲(chǔ)在共享內(nèi)存中,在測試完畢后,再讀取共享內(nèi)存中的數(shù)據(jù)以供分析 】.時(shí)間戳從CPU內(nèi)部的高精度計(jì)時(shí)器獲取,它是一個(gè)32位的寄存器(cp0L9 ),每個(gè)指令周期自動(dòng)加1,類似于penTIum系列CPU上的TSC(TIme Stamp Count) .可以使用MFC0指令讀出該計(jì)時(shí)器的值.但32位的計(jì)時(shí)器在664.32MHz的主頻下,每隔6.47秒就會(huì)發(fā)生一次翻轉(zhuǎn),因此需要對(duì)得到的數(shù)據(jù)進(jìn)行溢出處理.本文處理方法是維護(hù)一個(gè)64位的虛擬計(jì)時(shí)器:
union{
unsigned long long tsc;
unsigned long hltsc[2];
}tsc;
該結(jié)構(gòu)將一個(gè)64位的長整型變量分成了兩個(gè)32位的長整型變量,低32位用來獲取計(jì)時(shí)器的值,高32位在計(jì)時(shí)器溢
出時(shí)加1,這樣就得到了一個(gè)虛擬的64位的高精度計(jì)時(shí)器.在664.32MHz的主頻下,64位的計(jì)時(shí)器需要880年的時(shí)間才會(huì)發(fā)生一次翻轉(zhuǎn).可以采用下面的函數(shù)讀取虛擬計(jì)時(shí)器csc的值:
inline unsigned long long rdtsc(void)
{
unsigned long count;
一
asm
一 volaTIle一(”mfcO/t%0, $9/n/t“ :”=f”
(count));
tsc.hltsc[1]+=(count tSC.~tscf0]=count;
return tsc.tsc;
}
在MIPS中,CP0協(xié)處理器中的11號(hào)寄存器可以作為實(shí)時(shí)時(shí)鐘使用.11號(hào)寄存器又稱為compare寄存器,它用來在
特定的時(shí)刻產(chǎn)生一個(gè)中斷,該寄存器被寫入一個(gè)初值后,便不斷的將此值與計(jì)時(shí)器中的值進(jìn)行比較,一但二者相等,便觸發(fā)63號(hào)中斷 3.因此MIPS CPU的定時(shí)精度可以達(dá)到納秒級(jí).
2.2 數(shù)據(jù)分析
通過上述方法獲得的時(shí)間序列是一個(gè)遞增數(shù)列,相鄰兩個(gè)元素之問的差值即是運(yùn)動(dòng)控制器的實(shí)際周期.為了盡可能
的減小測試誤差的影響,本文采用最小二乘法對(duì)時(shí)間序列進(jìn)行擬合,得到時(shí)間序列的一條最佳逼進(jìn)線,使用這條最佳逼進(jìn)線來計(jì)算各周期的名義值 J.時(shí)問序列中的每一個(gè)元素與最佳逼進(jìn)線之間的差值就是各個(gè)周期的調(diào)度抖動(dòng).
圖1是在正常負(fù)載下,前100個(gè)測試點(diǎn)與最佳逼進(jìn)線的偏離值.剛開始的幾個(gè)點(diǎn)反映了較大的抖動(dòng),其中最大的抖動(dòng)達(dá)到了228微秒.這個(gè)現(xiàn)象是正常的,因?yàn)檫\(yùn)動(dòng)控制器在剛開始運(yùn)行的時(shí)候沒有將指令和數(shù)據(jù)加載到cache中,相應(yīng)的頁表也沒加載到TLB(Translation l_x~okaside Buffer)中,因此會(huì)不斷發(fā)生cache失效異常和TLB重填異常,這加重了系統(tǒng)的負(fù)擔(dān),并延遲了運(yùn)動(dòng)控制器的執(zhí)行.從第40組數(shù)據(jù)以后,抖動(dòng)趨于平穩(wěn).在后面的測試中,均將前100組數(shù)據(jù)舍棄,從而可以更好的統(tǒng)計(jì)一般情況.
RTAI提供了兩種調(diào)度模式,分別是單觸發(fā)模式(oneshotmode)和周期模式(periodic mode) .在單觸發(fā)模式下,在每次執(zhí)行調(diào)度函數(shù)時(shí),系統(tǒng)都需要根據(jù)當(dāng)前的情況重新計(jì)算下次觸發(fā)定時(shí)中斷的時(shí)間,并對(duì)定時(shí)器進(jìn)行編程.而周期模式只在時(shí)鐘初始化的時(shí)候?qū)Χ〞r(shí)器進(jìn)行編程,以后便始終依賴這個(gè)固定的時(shí)鐘周期進(jìn)行調(diào)度.單觸發(fā)模式下,系統(tǒng)的負(fù)擔(dān)較重,會(huì)在一定程度上影響系統(tǒng)的性能.本文分別在單觸發(fā)模式和周期模式下測試了運(yùn)動(dòng)周期的抖動(dòng).
在單觸發(fā)模式下,調(diào)度中加入了補(bǔ)償,如果上一次的調(diào)度被延遲了,那么下次便會(huì)提前調(diào)度,以消除調(diào)度抖動(dòng)的累積.比如上次的實(shí)際周期為2010微秒,那么下次的實(shí)際周期就應(yīng)該是1990微秒.圖2是在10000組測試樣例中抽取的100組數(shù)據(jù),從中可以看出,所有的測試點(diǎn)均以標(biāo)準(zhǔn)值為中心對(duì)稱分布,反映了上面描述的調(diào)度方法.單觸發(fā)模式下最大抖動(dòng)為23.476微秒,平均抖動(dòng)為414納秒.
周期模式下的調(diào)度沒有補(bǔ)償,實(shí)時(shí)進(jìn)程不會(huì)提前執(zhí)行,因此調(diào)度抖動(dòng)會(huì)在每次調(diào)度的時(shí)間戳上累積.由于硬件定時(shí)器的定時(shí)周期在運(yùn)動(dòng)控制器的執(zhí)行期間是固定的,抖動(dòng)的下限是0.圖3(見下頁)是從10000組樣例中抽取的100組數(shù)據(jù).在所測的10000組數(shù)據(jù)中,所有元素均為正值,抖動(dòng)的最大值為73.8微秒,平均抖動(dòng)為3.298微秒.周期模式下的平均抖動(dòng)時(shí)間是單觸發(fā)模式下的8倍.單觸發(fā)模式的調(diào)度雖然較精確,但需要耗費(fèi)大量的cpu時(shí)間,加重了系統(tǒng)的負(fù)擔(dān),在硬件性能較差的環(huán)境下,其性能可能會(huì)低于周期模式.因此,在選用調(diào)度模式時(shí),需要針對(duì)特定的硬件平臺(tái)和軟件環(huán)境進(jìn)行抖動(dòng)測試 .
3 抖動(dòng)產(chǎn)生的原因分析
RTAI采用了2種調(diào)度算法,分別為單調(diào)速率算法和最早時(shí)限優(yōu)先算法.本文采用的是單調(diào)速率算法,因?yàn)樵撍惴ɑ?/p>
靜態(tài)優(yōu)先級(jí),能夠保證最高優(yōu)先級(jí)進(jìn)程的穩(wěn)定調(diào)度-6j.調(diào)度程序每次選擇的進(jìn)程總是優(yōu)先級(jí)最高的進(jìn)程,在同等優(yōu)先級(jí)的各進(jìn)程之間則采用時(shí)間片輪轉(zhuǎn)的方法進(jìn)行調(diào)度.在數(shù)控系統(tǒng)的所有進(jìn)程中,運(yùn)動(dòng)控制器的優(yōu)先級(jí)最高,因此,我們只需要研究高優(yōu)先級(jí)的進(jìn)程產(chǎn)生抖動(dòng)的原因即可.根據(jù)RTAI的調(diào)度機(jī)制,運(yùn)動(dòng)控制器可以搶占其他進(jìn)程,并且不會(huì)被其它任何進(jìn)程搶占,因此沒有進(jìn)程可以延遲運(yùn)動(dòng)控制器的執(zhí)行.但是存在其它因素可以延緩它的執(zhí)行,比如總線上鎖,關(guān)中斷,中斷嵌套,資源競爭,cache失效,以及操作系統(tǒng)中存在不可搶占的關(guān)鍵區(qū)域等.在設(shè)計(jì)良好的實(shí)時(shí)系統(tǒng)中,不可搶占的臨界區(qū)很少,且運(yùn)動(dòng)控制器幾乎不需要內(nèi)存以外的其他資源,能夠?qū)\(yùn)動(dòng)控制器產(chǎn)生影響的主要因素只有關(guān)中斷,中斷嵌套和cache失效.
前面已經(jīng)介紹過了cache失效會(huì)在運(yùn)動(dòng)控制器剛加載時(shí)對(duì)調(diào)度抖動(dòng)產(chǎn)生影響,實(shí)際上在運(yùn)動(dòng)控制器的運(yùn)行過程中,其他的非實(shí)時(shí)進(jìn)程,如圖形顯示,網(wǎng)絡(luò)訪問,磁盤讀寫等都會(huì)影響cache,從而間接的影響運(yùn)動(dòng)控制器.為了降低cache失效對(duì)調(diào)度抖動(dòng)的影響,可以盡量減少除數(shù)控軟件以外的其它程序的運(yùn)行.比如使用TinyX代替具有圖形加速功能的XServer前面已經(jīng)介紹過了cache失效會(huì)在運(yùn)動(dòng)控制器剛加載時(shí)對(duì)調(diào)度抖動(dòng)產(chǎn)生影響,實(shí)際上在運(yùn)動(dòng)控制器的運(yùn)行過程中,其他的非實(shí)時(shí)進(jìn)程,如圖形顯示,網(wǎng)絡(luò)訪問,磁盤讀寫等都會(huì)影響cache,從而間接的影響運(yùn)動(dòng)控制器.為了降低cache失效對(duì)調(diào)度抖動(dòng)的影響,可以盡量減少除數(shù)控軟件以外的其它程序的運(yùn)行.比如使用TinyX代替具有圖形加速功能的XServer
RTAI的進(jìn)程調(diào)度是由硬件時(shí)鐘的定時(shí)中斷驅(qū)動(dòng)的.圖4簡略地說明了從時(shí)鐘給出中斷,到運(yùn)動(dòng)控制器開始執(zhí)行的過
程.這個(gè)過程包括,系統(tǒng)關(guān)中斷的時(shí)間,中斷準(zhǔn)備時(shí)間和中斷處理時(shí)間.在關(guān)中斷的時(shí)間內(nèi),系統(tǒng)不能對(duì)其他任何優(yōu)先級(jí)的中斷進(jìn)行響應(yīng),所以時(shí)鐘中斷必須等待,直到系統(tǒng)開中斷.中斷準(zhǔn)備階段是指,從CPU開始響應(yīng)時(shí)鐘中斷到進(jìn)入時(shí)鐘中斷的處理程序所需要的時(shí)間,中斷處理階段是指執(zhí)行中斷處理程序rt—timer—handler(),即調(diào)度程序所需要的時(shí)間 J.中斷準(zhǔn)備時(shí)問和中斷處理時(shí)間在特定的系統(tǒng)上是固定的,只有幾微秒的時(shí)間,而且在我們的測試方法中不會(huì)對(duì)測試結(jié)果產(chǎn)生影響.單從時(shí)鐘中斷處理的過程來看,調(diào)度延遲主要取決于系統(tǒng)的最大關(guān)中斷時(shí)問 J.在本文的測試平臺(tái)上最大關(guān)中斷時(shí)間為13.24微秒.
現(xiàn)代操作系統(tǒng)均允許中斷嵌套,以便及時(shí)響應(yīng)緊急的中斷.那么在中斷準(zhǔn)備和中斷處理階段,時(shí)鐘中斷的處理有可能被其他的中斷搶占,這也會(huì)對(duì)運(yùn)動(dòng)控制器的抖動(dòng)產(chǎn)生影響.為了降低這種影響,應(yīng)該盡可能的減少系統(tǒng)中的中斷數(shù)量,這樣不僅可以降低時(shí)鐘中斷被搶占的可能性,也可以降低系統(tǒng)的負(fù)載.在數(shù)控系統(tǒng)中,由于不需要大批量的讀寫磁盤數(shù)據(jù),不需要電源管理,可以將DMA,APM 和ACPI禁用.這些設(shè)備會(huì)產(chǎn)生大量的中斷,并頻繁的對(duì)總線上鎖.如果該數(shù)控系統(tǒng)無需網(wǎng)絡(luò)通信,也可以將網(wǎng)絡(luò)禁用.
在禁用了上述設(shè)備后,本文在單觸發(fā)模式下,對(duì)運(yùn)動(dòng)控制器的調(diào)度抖動(dòng)進(jìn)行了重新測試.最大抖動(dòng)為8.02微秒,平均抖動(dòng)為392納秒.最大抖動(dòng)接近沒禁用設(shè)備以前的1/4.圖5是10000組測試樣列的散點(diǎn)圖.從圖上可以看出大部分的測試點(diǎn)都分布在微秒內(nèi),這樣的抖動(dòng)在數(shù)控系統(tǒng)中是可以接受的.當(dāng)數(shù)控系統(tǒng)以10米/分的速度加工的時(shí)候,8微秒的抖動(dòng)最多能產(chǎn)生1.3微米的隨動(dòng)誤差.
4 總結(jié)
對(duì)實(shí)時(shí)系統(tǒng)而言,調(diào)度抖動(dòng)是不可避免的.調(diào)度抖動(dòng)的大小與硬件體系結(jié)構(gòu)和操作系統(tǒng)的運(yùn)作方式密切相關(guān).在數(shù)控系統(tǒng)中,大的調(diào)度抖動(dòng)會(huì)對(duì)加工精度產(chǎn)生影響.本文針對(duì)M1PS平臺(tái),在不同的調(diào)度模式下測試了運(yùn)動(dòng)控制器的調(diào)度抖動(dòng),并采用最小二乘法對(duì)結(jié)果進(jìn)行了分析.實(shí)驗(yàn)表明,在該數(shù)控系統(tǒng)中,周期模式下的平均抖動(dòng)是單觸發(fā)模式的8倍多.在數(shù)控系統(tǒng)中,可能引起抖動(dòng)的因素有cache失效,系統(tǒng)關(guān)中斷以及中斷嵌套等,本文針對(duì)這些因素對(duì)系統(tǒng)做了優(yōu)化,禁用了DMA,APM,ACPI等與數(shù)控系統(tǒng)的運(yùn)行關(guān)系甚微的設(shè)備,并將具有圖形加速功能的X Server替換成了對(duì)資源占用很小的Tiny X.結(jié)果在單觸發(fā)模式下,最大抖動(dòng)可以縮短到原來的四分之一,平均抖動(dòng)也有所改善.測試結(jié)果證實(shí),在MIPS平臺(tái)下,RTAI完全能夠滿足數(shù)控系統(tǒng)的需要.