基于MIPS處理器和RTAI的數控系統中調度抖動(dòng)的研究
1 前言
本文引用地址:http://dyxdggzs.com/article/201610/306752.htm目前,國內外的數控系統大多采用X86體系結構的CPU,主要是因為X86體系結構上擁有豐富的應用軟件,開(kāi)
發(fā)環(huán)境和技術(shù)積累,可以在一定程度上縮短數控系統的開(kāi)發(fā)周期.但X86體系結構也有其自身的缺點(diǎn),比如其指令集體系結構過(guò)于復雜,成本高.而且X86技術(shù)一直被國外的幾家大公司所壟斷,將其應用在數控系統這樣的戰略資源上,存在一定的安全隱患.
M1PS體系結構具有靈活開(kāi)放,成本低的優(yōu)點(diǎn),在工業(yè)控制、網(wǎng)絡(luò )、通信、多媒體娛樂(lè )等領(lǐng)域得到了廣泛的應用.我國已經(jīng)研制出了具有自主知識產(chǎn)權的MIPS通用CPU.因此將MIPS結構的CPU應用在數控系統上,不僅可以降低數控系統的成本,還增加了數控系統特別是高檔數控系統國產(chǎn)化的水平.
實(shí)時(shí)操作系統是數控系統的軟件基礎,數控軟件中的運動(dòng)控制器部分需要實(shí)時(shí)操作系統對其進(jìn)行周期性的調度,對
實(shí)時(shí)操作系統的性能要求很苛刻.一般來(lái)說(shuō),應用于數控系統中的實(shí)時(shí)操作系統需要具有高實(shí)時(shí)性,時(shí)間確定性以及高可靠性,安全性和容錯性….
在硬實(shí)時(shí)操作系統中,主要是依靠時(shí)鐘硬件產(chǎn)生的中斷對周期進(jìn)程進(jìn)行調度.雖然時(shí)鐘可以精確的給出定時(shí)中斷,但硬件和操作系統的運作方式會(huì )對中斷響應和進(jìn)程調度產(chǎn)生影響,從而使周期進(jìn)程每次開(kāi)始執行的時(shí)間變的不確定,這就是調度抖動(dòng).調度抖動(dòng)直接影響到數控加工的精度,如果數控系統的加工速度為10米/分鐘,那么5O微秒的抖動(dòng)就可能產(chǎn)生約8.3微米的隨動(dòng)誤差.針對特定的體系結構研究與分析運動(dòng)控制器的調度抖動(dòng),對掌握并改善數控系統的性能具有重要的意義.
RTAI(Real Time Application Interface)是由意大利米蘭理工學(xué)院航天工程系發(fā)起開(kāi)發(fā)的一個(gè)遵循GNU GPL的開(kāi)源項目,RTAI已經(jīng)支持i386,MIPS,PowerPC,ARM 和M68k-~ommu等處理器,是目前支持處理器最多的linux實(shí)時(shí)解決方案之一.RTAI具有豐富的功能和良好的硬實(shí)時(shí)性能.本文針對數控系統的運動(dòng)控制器,討論了在MIPS平臺上RTAI操作系統的調度抖動(dòng)測試,并分析了產(chǎn)生調度抖動(dòng)的原因.
2 抖動(dòng)測試
2.1 抖動(dòng)測試方法
在本文中,用于測試的硬件平臺是龍芯2E處理器,主頻為664.32MHz.該處理器擁有64KB的一級緩存和512KB的二級緩存.系統內存為256M.
本文在抖動(dòng)測試中采用了內部軟件測試技術(shù):記錄運動(dòng)控制器的第一條指令每次執行的時(shí)間戳,并存儲在共享內存中,在測試完畢后,再讀取共享內存中的數據以供分析 】.時(shí)間戳從CPU內部的高精度計時(shí)器獲取,它是一個(gè)32位的寄存器(cp0L9 ),每個(gè)指令周期自動(dòng)加1,類(lèi)似于pentium系列CPU上的TSC(Time Stamp Count) .可以使用MFC0指令讀出該計時(shí)器的值.但32位的計時(shí)器在664.32MHz的主頻下,每隔6.47秒就會(huì )發(fā)生一次翻轉,因此需要對得到的數據進(jìn)行溢出處理.本文處理方法是維護一個(gè)64位的虛擬計時(shí)器:
union{
unsigned long long tsc;
unsigned long hltsc[2];
}tsc;
該結構將一個(gè)64位的長(cháng)整型變量分成了兩個(gè)32位的長(cháng)整型變量,低32位用來(lái)獲取計時(shí)器的值,高32位在計時(shí)器溢
出時(shí)加1,這樣就得到了一個(gè)虛擬的64位的高精度計時(shí)器.在664.32MHz的主頻下,64位的計時(shí)器需要880年的時(shí)間才會(huì )發(fā)生一次翻轉.可以采用下面的函數讀取虛擬計時(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號寄存器可以作為實(shí)時(shí)時(shí)鐘使用.11號寄存器又稱(chēng)為compare寄存器,它用來(lái)在
特定的時(shí)刻產(chǎn)生一個(gè)中斷,該寄存器被寫(xiě)入一個(gè)初值后,便不斷的將此值與計時(shí)器中的值進(jìn)行比較,一但二者相等,便觸發(fā)63號中斷 3.因此MIPS CPU的定時(shí)精度可以達到納秒級.
2.2 數據分析
通過(guò)上述方法獲得的時(shí)間序列是一個(gè)遞增數列,相鄰兩個(gè)元素之問(wèn)的差值即是運動(dòng)控制器的實(shí)際周期.為了盡可能
的減小測試誤差的影響,本文采用最小二乘法對時(shí)間序列進(jìn)行擬合,得到時(shí)間序列的一條最佳逼進(jìn)線(xiàn),使用這條最佳逼進(jìn)線(xiàn)來(lái)計算各周期的名義值 J.時(shí)問(wèn)序列中的每一個(gè)元素與最佳逼進(jìn)線(xiàn)之間的差值就是各個(gè)周期的調度抖動(dòng).
圖1是在正常負載下,前100個(gè)測試點(diǎn)與最佳逼進(jìn)線(xiàn)的偏離值.剛開(kāi)始的幾個(gè)點(diǎn)反映了較大的抖動(dòng),其中最大的抖動(dòng)達到了228微秒.這個(gè)現象是正常的,因為運動(dòng)控制器在剛開(kāi)始運行的時(shí)候沒(méi)有將指令和數據加載到cache中,相應的頁(yè)表也沒(méi)加載到TLB(Translation l_x~okaside Buffer)中,因此會(huì )不斷發(fā)生cache失效異常和TLB重填異常,這加重了系統的負擔,并延遲了運動(dòng)控制器的執行.從第40組數據以后,抖動(dòng)趨于平穩.在后面的測試中,均將前100組數據舍棄,從而可以更好的統計一般情況.
RTAI提供了兩種調度模式,分別是單觸發(fā)模式(oneshotmode)和周期模式(periodic mode) .在單觸發(fā)模式下,在每次執行調度函數時(shí),系統都需要根據當前的情況重新計算下次觸發(fā)定時(shí)中斷的時(shí)間,并對定時(shí)器進(jìn)行編程.而周期模式只在時(shí)鐘初始化的時(shí)候對定時(shí)器進(jìn)行編程,以后便始終依賴(lài)這個(gè)固定的時(shí)鐘周期進(jìn)行調度.單觸發(fā)模式下,系統的負擔較重,會(huì )在一定程度上影響系統的性能.本文分別在單觸發(fā)模式和周期模式下測試了運動(dòng)周期的抖動(dòng).

在單觸發(fā)模式下,調度中加入了補償,如果上一次的調度被延遲了,那么下次便會(huì )提前調度,以消除調度抖動(dòng)的累積.比如上次的實(shí)際周期為2010微秒,那么下次的實(shí)際周期就應該是1990微秒.圖2是在10000組測試樣例中抽取的100組數據,從中可以看出,所有的測試點(diǎn)均以標準值為中心對稱(chēng)分布,反映了上面描述的調度方法.單觸發(fā)模式下最大抖動(dòng)為23.476微秒,平均抖動(dòng)為414納秒.

周期模式下的調度沒(méi)有補償,實(shí)時(shí)進(jìn)程不會(huì )提前執行,因此調度抖動(dòng)會(huì )在每次調度的時(shí)間戳上累積.由于硬件定時(shí)器的定時(shí)周期在運動(dòng)控制器的執行期間是固定的,抖動(dòng)的下限是0.圖3(見(jiàn)下頁(yè))是從10000組樣例中抽取的100組數據.在所測的10000組數據中,所有元素均為正值,抖動(dòng)的最大值為73.8微秒,平均抖動(dòng)為3.298微秒.周期模式下的平均抖動(dòng)時(shí)間是單觸發(fā)模式下的8倍.單觸發(fā)模式的調度雖然較精確,但需要耗費大量的cpu時(shí)間,加重了系統的負擔,在硬件性能較差的環(huán)境下,其性能可能會(huì )低于周期模式.因此,在選用調度模式時(shí),需要針對特定的硬件平臺和軟件環(huán)境進(jìn)行抖動(dòng)測試 .
3 抖動(dòng)產(chǎn)生的原因分析
RTAI采用了2種調度算法,分別為單調速率算法和最早時(shí)限優(yōu)先算法.本文采用的是單調速率算法,因為該算法基于
靜態(tài)優(yōu)先級,能夠保證最高優(yōu)先級進(jìn)程的穩定調度-6j.調度程序每次選擇的進(jìn)程總是優(yōu)先級最高的進(jìn)程,在同等優(yōu)先級的各進(jìn)程之間則采用時(shí)間片輪轉的方法進(jìn)行調度.在數控系統的所有進(jìn)程中,運動(dòng)控制器的優(yōu)先級最高,因此,我們只需要研究高優(yōu)先級的進(jìn)程產(chǎn)生抖動(dòng)的原因即可.根據RTAI的調度機制,運動(dòng)控制器可以搶占其他進(jìn)程,并且不會(huì )被其它任何進(jìn)程搶占,因此沒(méi)有進(jìn)程可以延遲運動(dòng)控制器的執行.但是存在其它因素可以延緩它的執行,比如總線(xiàn)上鎖,關(guān)中斷,中斷嵌套,資源競爭,cache失效,以及操作系統中存在不可搶占的關(guān)鍵區域等.在設計良好的實(shí)時(shí)系統中,不可搶占的臨界區很少,且運動(dòng)控制器幾乎不需要內存以外的其他資源,能夠對運動(dòng)控制器產(chǎn)生影響的主要因素只有關(guān)中斷,中斷嵌套和cache失效.

前面已經(jīng)介紹過(guò)了cache失效會(huì )在運動(dòng)控制器剛加載時(shí)對調度抖動(dòng)產(chǎn)生影響,實(shí)際上在運動(dòng)控制器的運行過(guò)程中,其他的非實(shí)時(shí)進(jìn)程,如圖形顯示,網(wǎng)絡(luò )訪(fǎng)問(wèn),磁盤(pán)讀寫(xiě)等都會(huì )影響cache,從而間接的影響運動(dòng)控制器.為了降低cache失效對調度抖動(dòng)的影響,可以盡量減少除數控軟件以外的其它程序的運行.比如使用TinyX代替具有圖形加速功能的XServer前面已經(jīng)介紹過(guò)了cache失效會(huì )在運動(dòng)控制器剛加載時(shí)對調度抖動(dòng)產(chǎn)生影響,實(shí)際上在運動(dòng)控制器的運行過(guò)程中,其他的非實(shí)時(shí)進(jìn)程,如圖形顯示,網(wǎng)絡(luò )訪(fǎng)問(wèn),磁盤(pán)讀寫(xiě)等都會(huì )影響cache,從而間接的影響運動(dòng)控制器.為了降低cache失效對調度抖動(dòng)的影響,可以盡量減少除數控軟件以外的其它程序的運行.比如使用TinyX代替具有圖形加速功能的XServer
RTAI的進(jìn)程調度是由硬件時(shí)鐘的定時(shí)中斷驅動(dòng)的.圖4簡(jiǎn)略地說(shuō)明了從時(shí)鐘給出中斷,到運動(dòng)控制器開(kāi)始執行的過(guò)
程.這個(gè)過(guò)程包括,系統關(guān)中斷的時(shí)間,中斷準備時(shí)間和中斷處理時(shí)間.在關(guān)中斷的時(shí)間內,系統不能對其他任何優(yōu)先級的中斷進(jìn)行響應,所以時(shí)鐘中斷必須等待,直到系統開(kāi)中斷.中斷準備階段是指,從CPU開(kāi)始響應時(shí)鐘中斷到進(jìn)入時(shí)鐘中斷的處理程序所需要的時(shí)間,中斷處理階段是指執行中斷處理程序rt—timer—handler(),即調度程序所需要的時(shí)間 J.中斷準備時(shí)問(wèn)和中斷處理時(shí)間在特定的系統上是固定的,只有幾微秒的時(shí)間,而且在我們的測試方法中不會(huì )對測試結果產(chǎn)生影響.單從時(shí)鐘中斷處理的過(guò)程來(lái)看,調度延遲主要取決于系統的最大關(guān)中斷時(shí)問(wèn) J.在本文的測試平臺上最大關(guān)中斷時(shí)間為13.24微秒.
現代操作系統均允許中斷嵌套,以便及時(shí)響應緊急的中斷.那么在中斷準備和中斷處理階段,時(shí)鐘中斷的處理有可能被其他的中斷搶占,這也會(huì )對運動(dòng)控制器的抖動(dòng)產(chǎn)生影響.為了降低這種影響,應該盡可能的減少系統中的中斷數量,這樣不僅可以降低時(shí)鐘中斷被搶占的可能性,也可以降低系統的負載.在數控系統中,由于不需要大批量的讀寫(xiě)磁盤(pán)數據,不需要電源管理,可以將DMA,APM 和ACPI禁用.這些設備會(huì )產(chǎn)生大量的中斷,并頻繁的對總線(xiàn)上鎖.如果該數控系統無(wú)需網(wǎng)絡(luò )通信,也可以將網(wǎng)絡(luò )禁用.

在禁用了上述設備后,本文在單觸發(fā)模式下,對運動(dòng)控制器的調度抖動(dòng)進(jìn)行了重新測試.最大抖動(dòng)為8.02微秒,平均抖動(dòng)為392納秒.最大抖動(dòng)接近沒(méi)禁用設備以前的1/4.圖5是10000組測試樣列的散點(diǎn)圖.從圖上可以看出大部分的測試點(diǎn)都分布在微秒內,這樣的抖動(dòng)在數控系統中是可以接受的.當數控系統以10米/分的速度加工的時(shí)候,8微秒的抖動(dòng)最多能產(chǎn)生1.3微米的隨動(dòng)誤差.


4 總結
對實(shí)時(shí)系統而言,調度抖動(dòng)是不可避免的.調度抖動(dòng)的大小與硬件體系結構和操作系統的運作方式密切相關(guān).在數控系統中,大的調度抖動(dòng)會(huì )對加工精度產(chǎn)生影響.本文針對M1PS平臺,在不同的調度模式下測試了運動(dòng)控制器的調度抖動(dòng),并采用最小二乘法對結果進(jìn)行了分析.實(shí)驗表明,在該數控系統中,周期模式下的平均抖動(dòng)是單觸發(fā)模式的8倍多.在數控系統中,可能引起抖動(dòng)的因素有cache失效,系統關(guān)中斷以及中斷嵌套等,本文針對這些因素對系統做了優(yōu)化,禁用了DMA,APM,ACPI等與數控系統的運行關(guān)系甚微的設備,并將具有圖形加速功能的X Server替換成了對資源占用很小的Tiny X.結果在單觸發(fā)模式下,最大抖動(dòng)可以縮短到原來(lái)的四分之一,平均抖動(dòng)也有所改善.測試結果證實(shí),在MIPS平臺下,RTAI完全能夠滿(mǎn)足數控系統的需要.
評論