喻詩祥,顧乃杰,張 旭,曹 越
(中國科學(xué)技術(shù)大學(xué)a.計算機科學(xué)技術(shù)學(xué)院;b.安徽省計算與通信軟件重點實驗室;c.先進技術(shù)研究院,合肥230027)
一種多核ARM平臺下用戶態(tài)定時器的實現(xiàn)
喻詩祥a,b,c,顧乃杰a,b,c,張 旭a,b,c,曹 越a,b,c
(中國科學(xué)技術(shù)大學(xué)a.計算機科學(xué)技術(shù)學(xué)院;b.安徽省計算與通信軟件重點實驗室;c.先進技術(shù)研究院,合肥230027)
在ARM平臺下,系統(tǒng)提供的posix-timer誤差較大,難以滿足實時要求,而且傳統(tǒng)的Linux用戶態(tài)定時器通過系統(tǒng)調(diào)用及信號傳遞的方式向進程提供定時服務(wù),當定時器使用規(guī)模較大時,進程會在內(nèi)核態(tài)用戶態(tài)間頻繁切換。針對上述問題,提出并實現(xiàn)一種基于多核ARM平臺的新型用戶態(tài)定時器方案。該方案采用一種新的時間輪數(shù)據(jù)結(jié)構(gòu),通過內(nèi)核態(tài)與用戶態(tài)共享內(nèi)存等方式向進程提供服務(wù),避免不必要的信號傳遞,有效地緩解頻繁狀態(tài)切換問題。實驗結(jié)果表明,該方案保持微秒級的定時精度,定時誤差相比posix-timer明顯降低。
Linux用戶態(tài);定時器;多核;ARM平臺;時間輪;共享內(nèi)存
定時器作為Linux操作系統(tǒng)提供的一種定時服務(wù)機制,被廣泛的應(yīng)用于各種內(nèi)核及用戶應(yīng)用程序中,其主要功能是實現(xiàn)一個給定的函數(shù)在給定的定時時長用完后被調(diào)用執(zhí)行。在Linux系統(tǒng)中,定時器分為內(nèi)核態(tài)定時器和用戶態(tài)定時器。內(nèi)核態(tài)定時器在內(nèi)核態(tài)被使用,如早期Linux內(nèi)核提供的低精度經(jīng)典定時器及后期Linux內(nèi)核提供的高精度定時器。用戶態(tài)定時器由進程在用戶態(tài)創(chuàng)建使用,一般在內(nèi)核態(tài)定時器的基礎(chǔ)上實現(xiàn),Linux用戶態(tài)可以調(diào)用的定時器接口有setitimer、alARM系統(tǒng)調(diào)用以及posix-timer接口。
衡量一個定時器系統(tǒng)好壞的主要標準有定時精度和定時誤差,所謂定時精度是指定時器所能進行最小時間的定時操作,定時誤差指定時器實際定時時長與預(yù)定定時時長之間的時間差[1-2]。在實時操作系統(tǒng)中,要實現(xiàn)對高精度實時任務(wù)的精確控制[3],保證事件在截止時間之前得到響應(yīng),定時器精度及定時誤差顯得尤為重要。由于Linux系統(tǒng)具有功能強大、開源、支持多種硬件平臺等優(yōu)勢,很多實時操作系統(tǒng)是在Linux的基礎(chǔ)上改造而來[4-5]。本文針對Linux下定時器實現(xiàn)機制的相關(guān)工作及其優(yōu)缺點進行研究,提出并實現(xiàn)一種基于多核ARM平臺的新型用戶態(tài)定時器機制。
在早期 Linux內(nèi)核(Linux-2.6.16之前)中, Linux內(nèi)核定時器的實現(xiàn)是基于系統(tǒng)周期性時鐘中斷,系統(tǒng)時鐘中斷由外部時鐘源周期性的發(fā)出,時鐘中斷的頻率由內(nèi)核配置參數(shù)Hz決定。在ARM平臺上,Hz一般被配置為128,即每秒128次時鐘中斷。針對每個核上的定時器,采用經(jīng)典時間輪數(shù)據(jù)結(jié)構(gòu),即系統(tǒng)根據(jù)其粗略到期時間(到期時刻的jiffies)的遠近分類至5個不同的組中,在組內(nèi)再根據(jù)定時器到期的具體到期時刻將定時器構(gòu)建為若干個鏈表,如圖1所示。
圖1 經(jīng)典時間輪數(shù)據(jù)結(jié)構(gòu)
隨著時間的推移,當?shù)狡跁r間較近的組中的所有定時器被處理完之后,再從到期時間較遠的組中將定時器依次前推,重新補足至到期時間較近的組中。早期內(nèi)核定時器的精度和誤差都與Hz相關(guān),首先,系統(tǒng)在每次時鐘中斷中對到期定時器進行處理,即每1/Hz秒處理一次到期定時器,其次,定時器計時單位基于jiffies變量,定時器只能處理1/Hz秒整數(shù)倍的定時操作。如果Hz值設(shè)置較小,定時精度只能達到毫秒級別,不能滿足實時應(yīng)用需求;如果Hz值過大,將使時鐘中斷更加頻繁的產(chǎn)生,減少了處理器處理其他工作的時間,還會頻繁打亂處理器的高速緩存[3]。
隨著實時系統(tǒng)的發(fā)展,為了提高定時器的精度,美國Kansan大學(xué)KURT-linux項目中的UTIME機制及Monta Vista公司發(fā)起的高精度定時器開源項目HRT相繼對高精度定時器的設(shè)計實現(xiàn)機制研究做出了開創(chuàng)性的努力[6-7]。在他們設(shè)計的高精度定時器機制中,對檢測定時器到期的方式進行了創(chuàng)新,早期Linux內(nèi)核通過周期性時鐘中斷檢測定時器到期,而新的機制采用時鐘源單次觸發(fā)的方式檢測定時器到期,即每次對時鐘源編程,設(shè)置其發(fā)出中斷的時刻為當前最早到期的定時器的到期時刻,當中斷發(fā)生時(最早到期的定時器到期時),在中斷處理函數(shù)中再次對時鐘源進行如上編程,設(shè)置中斷發(fā)生時刻為下一個最早到期的定時器的到期時刻。通過單次觸發(fā)的方式,定時器到期事件將不再發(fā)生于周期性的時鐘中斷中,定時器精度得到了顯著提高,達到微秒級別。2006年,Thomas等人提出了Hrtimer高精度定時器系統(tǒng),并加入到Linux內(nèi)核代碼樹中,其實現(xiàn)機制也是基于上述單次觸發(fā)思想[8-10]。Hrtimer系統(tǒng)可以與原有定時器系統(tǒng)兼容,并實現(xiàn)了模塊化,在編譯內(nèi)核時可以進行配置選擇。在多核架構(gòu)中,每個核上的定時器對象根據(jù)其到期時刻的遠近通過紅黑樹的方式進行組織,每個核上的定時器到期檢測由本地時鐘源發(fā)出的中斷來驅(qū)動。在一些只有全局時鐘設(shè)備的SMP系統(tǒng)上,Hrtimer缺乏有效的支持,因為全局時鐘中斷只能在某一個核上進行處理,無法管理多個核中的定時器[2]。
傳統(tǒng)的用戶態(tài)定時器接口如 setitimer,posixtimer[10]等都是在內(nèi)核態(tài)定時器的基礎(chǔ)上實現(xiàn)的,其實現(xiàn)方式基本是通過系統(tǒng)調(diào)用對內(nèi)核態(tài)定時器進行定時操作,當定時器到期時,通過信號的方式通知對應(yīng)的進程。當定時器使用規(guī)模較大時,進程因定時器操作系統(tǒng)調(diào)用及每個定時器的到期信號處理會在內(nèi)核態(tài)和用戶態(tài)之間頻繁切換,導(dǎo)致系統(tǒng)性能降低。在ARM平臺上,除了上述問題,用戶態(tài)定時器的定時誤差比較大,難以滿足實時要求,尤其當定時器使用規(guī)模較大時,這種狀況更加明顯。針對這些問題,本文設(shè)計并實現(xiàn)一種基于多核ARM平臺的新型Linux用戶態(tài)定時器系統(tǒng)。新的實現(xiàn)方案在定時精度上,仍然保持微秒級的定時精度,在定時誤差方面,相比posix-timer得到了明顯降低。
在早期Linux內(nèi)核低精度定時器的實現(xiàn)方案中,每個核都以Hz為頻率周期性地響應(yīng)時鐘中斷,對核上運行的定時器進行到期檢測。為了避免造成系統(tǒng)性能的降低,Hz一般設(shè)置較小,定時器精度較低。在本文所述定時器系統(tǒng)中,為了在提高定時精度,并保持系統(tǒng)性能,僅在一個處理器核(比如0號核)上周期性進行定時器到期檢測,其他核上的定時器均通過核間共享內(nèi)存的方式集中于這個核上進行到期檢測,通過對到期檢測的頻率進行配置,使定時精度達到微秒級別。在運行定時器結(jié)構(gòu)的組織方面,采用一種新的時間輪數(shù)據(jù)結(jié)構(gòu)。對于相關(guān)數(shù)據(jù)結(jié)構(gòu),通過內(nèi)核態(tài)與用戶態(tài)共享內(nèi)存等方式,避免通過系統(tǒng)調(diào)用進行啟動定時器等操作,在定時器使用規(guī)模較大時,通過到期定時器隊列及共享內(nèi)存的方式,避免不必要的定時器到期信號導(dǎo)致頻繁的內(nèi)核態(tài)用戶態(tài)切換。
3.1 定時器到期檢測
在ARM平臺下,定時器到期檢測通過硬件時鐘源watch dog的周期性中斷實現(xiàn),在watch dog對應(yīng)的中斷處理函數(shù)中,檢測用戶態(tài)定時器是否到期。
watch dog是ARM平臺上一種常見的時鐘源設(shè)備,它基于一定的工作頻率對計數(shù)器進行遞減操作,當計數(shù)器值變?yōu)?時,向CPU發(fā)出中斷,其工作模式可以設(shè)置為周期觸發(fā)或單次觸發(fā)模式。watch dog中主要包含以下幾個寄存器:CONTROL寄存器, LOAD寄存器,COUNTER寄存器。CONTROL寄存器用于設(shè)置watch dog是否工作,以及其工作模式為周期觸發(fā)還是單次觸發(fā);COUNTER寄存器是一個基于一定頻率遞減的計數(shù)器,當其值遞減至0時,會向CPU發(fā)出中斷,若watch dog處于周期觸發(fā)工作模式,則COUNTER值重置為LOAD寄存器的值,并繼續(xù)遞減。
在本文所述定時器系統(tǒng)中,設(shè)置watch dog工作模式為周期觸發(fā),每隔period微秒發(fā)出一次中斷,假設(shè)watch dog計數(shù)器遞減的頻率為freq,則LOAD寄存器寫入值的計算方法如下式:
3.2 新型時間輪數(shù)據(jù)結(jié)構(gòu)
每發(fā)生一次定時器到期檢測事件,時間向前推進period微秒,每一次到期檢測事件發(fā)生稱為一個tick。本文提出的新的時間輪數(shù)據(jù)結(jié)構(gòu),類似傳統(tǒng)齒輪鐘表的輪式結(jié)構(gòu),在輪上有若干個刻度,每個刻度代表一個tick,時間輪的指針代表系統(tǒng)當前的tick,用current_tick標記,如圖2所示。
圖2 新型時間輪數(shù)據(jù)結(jié)構(gòu)
假設(shè)時間輪上的刻度個數(shù)為wheel_ticks,隨著時間的前進,時間輪指針在時間輪上從0到wheel_ ticks-1不斷循環(huán)變化。在系統(tǒng)初始時刻,current_tick初始化為0,每經(jīng)歷一個tick,current_tick的更新公式為:
其中,n表示wheel_ticks。
定時器在計時過程中以tick為單位,當定時器啟動時,對定時時長進行微秒到tick的轉(zhuǎn)換,根據(jù)系統(tǒng)當前tick及定時時長的tick數(shù),計算到期時刻的目標tick及離到期時刻時間輪需要運行的圈數(shù),假設(shè)定時時長為expires微秒,相關(guān)計算公式如下:
circle作為定時器的一個參數(shù),表示其至到期所剩的時間輪運行圈數(shù)。在同一個tick到期的定時器通過雙向靜態(tài)鏈表的方式連接起來(如圖2),并且按照circle增序排列,每個tick上包含鏈表的首結(jié)點序號,啟動定時器操作即將定時器插入到到期時刻目標tick對應(yīng)的鏈表中。每經(jīng)歷一個tick時,對該tick上的定時器鏈表進行檢查,若其中定時器的circle參數(shù)為0,則表示定時器在該tick到期,對其進行處理,否則,將circle進行減1操作。每個tick上還包含一個原子鎖變量,0表示未加鎖狀態(tài),1表示加鎖狀態(tài),通過原子語句控制原子鎖以互斥對同一tick上定時器鏈表的訪問[11-12]。時間輪由若干個tick組成,通過一個tick數(shù)據(jù)結(jié)構(gòu)數(shù)組實現(xiàn),tick的數(shù)據(jù)結(jié)構(gòu)為:
早期Linux內(nèi)核低精度定時器的經(jīng)典時間輪數(shù)據(jù)結(jié)構(gòu)存在一些缺點,到期時間較遠的定時器分組粒度較粗,而到期時間較近的定時器分組粒度較細,當?shù)狡跁r間較近的分組中的所有定時器被處理完之后,需要從到期時間較遠的各組中將定時器重新補充至到期時間較近的組中,對定時器性能影響較大。
相比早期經(jīng)典時間輪數(shù)據(jù)結(jié)構(gòu),本文提出的新的時間輪數(shù)據(jù)結(jié)構(gòu)中,通過tick對定時器進行的分組較為均勻。將時間輪上的tick個數(shù)wheel_ticks設(shè)置較大,通過增加時間輪所占空間的方法,減少不同核操作同一個tick的可能性,并且避免時間輪上tick的個數(shù)較小時較多的定時器集中到同一個tick上從而容易導(dǎo)致該tick上定時器鏈表較長。
3.3 定時器池及定時器到期機制
在用戶態(tài),進程在時間輪上實現(xiàn)定時器啟動等相關(guān)操作,在內(nèi)核態(tài),周期性定時器到期檢測函數(shù)對時間輪tick上的定時器進行到期檢測。將定時器屬性中需要在用戶態(tài)內(nèi)核態(tài)共享的一些屬性(如定時時長的tick個數(shù)、圈數(shù)circle、目標tick序號等)單獨列出,構(gòu)造定時器共享數(shù)據(jù)結(jié)構(gòu),單獨分配一段共享內(nèi)存,將定時器共享數(shù)據(jù)結(jié)構(gòu)以定時器池的形式組織起來。將定時器屬性中僅在用戶態(tài)訪問的一些屬性(如定時器回調(diào)函數(shù)及其參數(shù)等)單獨列出,構(gòu)造定時器用戶態(tài)數(shù)據(jù)結(jié)構(gòu)。創(chuàng)建定時器時,為每個定時器用戶態(tài)數(shù)據(jù)結(jié)構(gòu)從定時器池中分配一個定時器共享數(shù)據(jù)結(jié)構(gòu)。
定時器共享數(shù)據(jù)結(jié)構(gòu)通過兩組雙向靜態(tài)鏈表指針連接,其中一組用于將定時器連接于時間輪tick上的定時器鏈表中,表示定時器處于運行狀態(tài),另一組用于將定時器連接于定時器池中的未分配定時器鏈表中或者進程的已分配定時器鏈表中,表示定時器未分配或者已分配。
在Linux內(nèi)核定時器系統(tǒng)中,當用戶態(tài)定時器到期時,內(nèi)核向其所屬進程發(fā)送信號,由進程在用戶態(tài)捕獲信號,執(zhí)行信號處理函數(shù)。在進程中定時器使用規(guī)模較大的情況下,大量到期信號的捕獲處理導(dǎo)致進程進行頻繁的內(nèi)核態(tài)用戶態(tài)切換。針對這種情況,本文提出的定時器系統(tǒng)為進程中每個線程開辟一段共享內(nèi)存,以循環(huán)隊列的組織方式保存該線程當前到期未被處理的定時器。在內(nèi)核態(tài)定時器到期檢測函數(shù)中,當檢測到屬于某個線程的定時器到期時,將該定時器寫入該線程對應(yīng)隊列的尾部,僅在該線程對應(yīng)隊列原來為空的情況下才向該線程發(fā)送信號,并以線程ID作為信號的參數(shù)。在用戶態(tài)信號處理函數(shù)中,通過信號參數(shù)檢測發(fā)生定時器到期事件對應(yīng)的線程,從該線程到期定時器隊列頭部開始,逐個執(zhí)行每個定時器的回調(diào)函數(shù)。定時器到期處理機制如圖3所示。
圖3 定時器到期處理機制
通過上述到期定時器隊列及共享內(nèi)存的方式,在定時器使用規(guī)模較大時,可以減少信號發(fā)送的次數(shù),避免定時器密集到期而導(dǎo)致的頻繁內(nèi)核態(tài)用戶態(tài)切換。
3.4 共享內(nèi)存組織結(jié)構(gòu)
共享內(nèi)存作為本文定時器系統(tǒng)中的一個重要方法,共享內(nèi)存區(qū)主要包含以下5個區(qū)域:
(1)時間輪區(qū):時間輪由一個wheeltick結(jié)構(gòu)數(shù)組組成,用戶態(tài)進程在時間輪上實現(xiàn)定時器啟動等相關(guān)操作,內(nèi)核態(tài)定時器到期檢測函數(shù)在時間輪上進行周期性推進,進行定時器到期檢測。該部分在定時器系統(tǒng)啟動時初始化。
(2)定時器池區(qū):定時器池區(qū)由定時器共享數(shù)據(jù)結(jié)構(gòu)數(shù)組構(gòu)成,在邏輯上定時器共享數(shù)據(jù)結(jié)構(gòu)通過靜態(tài)鏈表的方式連接。在定時器創(chuàng)建時,若定時器池空間不足則以內(nèi)存頁為單位實現(xiàn)動態(tài)擴張。
(3)全局參數(shù)區(qū):該區(qū)域用于保存一些全局參數(shù),包括時間輪上tick個數(shù)、當前tick,定時器池中定時器總個數(shù)、已分配個數(shù)、空閑定時器鏈表首結(jié)點等。該部分在定時器系統(tǒng)啟動時初始化。
(4)進程參數(shù)區(qū):該區(qū)域用于保存一些進程參數(shù),包括進程從定時器池中分配的定時器結(jié)構(gòu)鏈表首結(jié)點、各線程到期定時器隊列頭、尾指針等。該部分在進程向定時器系統(tǒng)注冊時初始化。
(5)到期定時器隊列區(qū):該區(qū)域用于為各線程實現(xiàn)其到期定時器循環(huán)隊列。
在系統(tǒng)啟動階段,創(chuàng)建共享內(nèi)存匿名映射設(shè)備,供進程進行內(nèi)存映射,對共享內(nèi)存中時間輪區(qū)、定時器池區(qū)、全局參數(shù)區(qū)進行初始化,并設(shè)置時間輪驅(qū)動源watch dog,使其周期性發(fā)出中斷推動時間輪。當進程向定時器系統(tǒng)注冊之后,為當前進程對應(yīng)進程參數(shù)區(qū)及到期定時器隊列區(qū)初始化,將上述5個共享內(nèi)存區(qū)映射至進程地址空間。
共享內(nèi)存區(qū)成功映射并初始化后,定時器相關(guān)操作均可直接在共享內(nèi)存區(qū)中的數(shù)據(jù)結(jié)構(gòu)上進行,避免通過系統(tǒng)調(diào)用方法陷入內(nèi)核態(tài),主要有以下具體操作:創(chuàng)建操作即從定時器池的未分配定時器鏈表中分配一個定時器結(jié)構(gòu),并連接至進程已分配定時器鏈表中;啟動操作即根據(jù)當前tick及定時時長,將定時器插入時間輪到期目標tick的鏈表中;停止操作即將定時器從時間輪到期目標tick的鏈表中刪除;刪除操作即將定時器結(jié)構(gòu)回收至定時器池的未分配定時器鏈表中。將到期定時器隊列放入共享內(nèi)存區(qū),可以避免每次定時器到期事件都發(fā)送一次信號通知對應(yīng)進程,而是僅當定時器隊列為空時才發(fā)送信號,當定時器規(guī)模較大時,減少信號發(fā)生的次數(shù),避免不必要的用戶態(tài)與內(nèi)核態(tài)之間的切換。
4.1 實驗方法及環(huán)境
根據(jù)第3節(jié)所述,本文所述用戶態(tài)定時器系統(tǒng)精度通過定時器到期檢測的周期即參數(shù)period配置。下面給出定時器系統(tǒng)定時誤差方面的參數(shù)配置及測試方法。首先定時器系統(tǒng)的相關(guān)參數(shù)配置為:時間輪上刻度個數(shù)wheel_ticks配置為217個,定時到期檢測的周期period參數(shù)配置為20 μs。其次測試方法為:隨機產(chǎn)生5萬個2 s內(nèi)的定時時長數(shù)據(jù),針對這些數(shù)據(jù),對本文提出的新型用戶態(tài)定時器系統(tǒng)及Linux內(nèi)核提供的用戶態(tài)posix-timer分別進行如下測試,創(chuàng)建5萬個定時器,以上述數(shù)據(jù)為定時時長,進行200輪測試,在每一輪測試中逐個啟動定時器,并記錄每個定時器的啟動時間,在定時器的到期處理函數(shù)中,記錄定時器到期時間并計算定時誤差,待所有定時器都到期之后,進入下一輪測試。在測試方法中,定時器啟動時間及到期時間,均通過硬件時間戳計數(shù)器GLOBAL TIMER讀取。測試平臺環(huán)境為: CPU為ARM cotex-A9 mpcore omap4460 pandaboard @1.2 GHz,內(nèi)存1 GB,操作系統(tǒng)為ubuntu 11.04,內(nèi)核版本為Linux 2.6.38。
4.2 結(jié)果分析
根據(jù)上述測試方法,對每個定時器每輪到期的誤差進行統(tǒng)計,記錄誤差發(fā)生在各個區(qū)間內(nèi)發(fā)生的次數(shù),最終計算誤差在各個區(qū)間分布的比例及平均誤差。測試結(jié)果如表1、表2及圖4、圖5所示。其中,表 1中平均誤差為 14.0 μs,最大誤差為6 677 μs;表2中平均誤差為24.9 ms,最大誤差為67.0 ms。
表1 本文系統(tǒng)測試結(jié)果
表2 posix-timer測試結(jié)果
圖4 本文系統(tǒng)實驗結(jié)果
圖5 posix-timer實驗結(jié)果
從表1、圖4與表2、圖5的對比看出,在ARM平臺下,本文系統(tǒng)與posix-timer在誤差方面相比取得明顯的改進,posix-timer的定時誤差在毫秒級別,本文系統(tǒng)的定時誤差,被降低到了微秒級別。
本文針對在ARM平臺下用戶態(tài)定時器誤差較大,及傳統(tǒng)用戶態(tài)定時器系統(tǒng)在定時器使用規(guī)模較大時導(dǎo)致的內(nèi)核態(tài)用戶態(tài)頻繁切換的問題,設(shè)計并實現(xiàn)了一種新型的用戶態(tài)定時器方案。該方案避免了通過系統(tǒng)調(diào)用進行定時器操作時不必要的信號傳遞,有效緩解了狀態(tài)頻繁切換問題,保持微秒級別的定時精度,將定時誤差降低至微秒級別,并且為其他平臺尤其是只有全局時鐘設(shè)備的平臺上的定時器設(shè)計提供了一種參考方案。
[1] Kwon K,SugayaM,NakajimaT.AnalysisofHigh Resolution Timer Latency Using Kernel Analysis System in Embedded System[C]//Proceedingsof2009 IEEE Software Technologies for Future Dependable Distributed Systems.[S.1.]:IEEE Press,2009:122-126.
[2] 王文竹,郭 華,吳慶波.基于PowerPC的高精度定時器設(shè)計與實現(xiàn)[J].計算機工程,2010,36(16): 267-269.
[3] 王 霞,馬忠梅,何小慶,等.提高嵌入式 Linux時鐘精度的方法[J].計算機工程,2006,32(23):70-72.
[4] Hill R,Srinivasan B,Pather S,et al.Temporal Resolution and Real-time Extensions to Linux[R].Information and Telecommunication Technology Center,Electrical Engineering and Computer Science,University of Kansas.Technologies Report:ITTC-FY98-TR-11510-03,1998.
[5] 李小群,趙慧斌,葉以民,等.Linux實時調(diào)度方案的設(shè)計與實現(xiàn) [J].計算機研究與發(fā)展,2003,40(5): 728-733.
[6] Srinivasan B,Pather S,Hill R,et al.A Firm Real-time System Implementation Using Commercial Off-the-shelf Hardware and Free Software[C]//Proceedings of the 4th IEEE Real-time Technology and Applications Symposium. [S.1.]:IEEE Press,1998:112-119.
[7] Gracioli G,Santos D M,de Matos R,et al.One-shot Time Management Analysis in Epos[C]//Proceedings of IEEE SCCC’08.[S.1.]:IEEE Press,2008:92-99.
[8] Gleixner T,Niehaus D. Hrtimers and Beyond: Transformingthe Linux Time Subsystems[C]// Proceedings of the 8th Linux Symposium.Ottawa, Canada:[s.n.],2006:333-346.
[9] 李 群.Linux2.6內(nèi)核新型高精度定時器的設(shè)計與實現(xiàn)[D].成都:電子科技大學(xué),2007.
[10] 周 鵬,周明天.Linux內(nèi)核中一種高精度定時器的設(shè)計與實現(xiàn)[J].計算機技術(shù)與發(fā)展,2006,16(4):73-78.
[11] Michael M M.CAS-based Lock-free Algorithm for Shared Deques[C]//Proceedings ofEuro-Par’03.Berlin, Germany:Springer,2003:651-660.
[12] 楊東升,張連法.改進型鎖無關(guān)雙端隊列的設(shè)計與實現(xiàn)[J].計算機系統(tǒng)應(yīng)用,2012,21(3):125-129.
編輯 索書志
Implementation of a User-mode Timer in Multi-core ARM Platform
YU Shixianga,b,c,GU Naijiea,b,c,ZHANG Xua,b,c,CAO Yuea,b,c
(a.School of Computer Science and Technology;b.Anhui Province Key Laboratory of Computing and Communication Software; c.Institute of Advanced Technology,University of Science and Technology of China,Hefei 230027,China)
In the ARM platform,the delay of Linux’s posix-timer is big,and can not fit the requirement of real-time system.In addition,traditional Linux user-mode timer provides service to process via system call and signal so that the process switches between kernel-mode and user-mode frequently when the scale of timer being used is very large.To solve these problems,this paper designs and implements a new user-mode timer system in multi-core ARM platform.By using a novel time wheel data structure and providing service to process via sharing memory between kernel-mode and user-mode,the new system avoids the transmission of unnecessary signal,and relives the frequent state switching effectively.Experimental results show that the new system keeps the precision of the timer in micro-second and offers much smaller delay than the posix-timer.
Linux user-mode;timer;multi-core;ARM platform;time wheel;shared memory
1000-3428(2015)01-0019-05
A
TP391
10.3969/j.issn.1000-3428.2015.01.004
“核高基”重大專項(2009ZX01028-002-003-005);高等學(xué)校學(xué)科創(chuàng)新引智計劃基金資助項目(B07033)。
喻詩祥(1990-),男,碩士研究生,主研方向:程序優(yōu)化技術(shù);顧乃杰(通訊作者),教授、博士生導(dǎo)師;張 旭,博士研究生;曹 越,碩士研究生。
2014-02-21
2014-03-20 E-mail:ysx053@mail.ustc.edu.cn
中文引用格式:喻詩祥,顧乃杰,張 旭,等.一種多核ARM平臺下用戶態(tài)定時器的實現(xiàn)[J].計算機工程,2015, 41(1):19-23.
英文引用格式:Yu Shixiang,Gu Naijie,Zhang Xu,et al.Implementation of a User-mode Timer in Multi-core ARM Platform[J].Computer Engineering,2015,41(1):19-23.