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