日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

如何提高linux的时钟精度,Linux时钟精度提高有什么办法?

發(fā)布時(shí)間:2025/3/15 linux 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何提高linux的时钟精度,Linux时钟精度提高有什么办法? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2 動(dòng)態(tài)高精度時(shí)鐘設(shè)計(jì)和實(shí)現(xiàn)

動(dòng)態(tài)高精度時(shí)鐘設(shè)計(jì)方案借鑒了KURT-Linux思想,但與其不同的是提供一個(gè)與標(biāo)準(zhǔn)Linux核心時(shí)鐘并行的具有精密刻度的實(shí)時(shí)時(shí)鐘,并與原核心時(shí)鐘區(qū)別開。采用X86體系CPU提供的TSC作為高精度的時(shí)間標(biāo)度,權(quán)衡一定時(shí)間段(如一個(gè)jiffies)內(nèi)高精度定時(shí)器的數(shù)量,設(shè)置Linux時(shí)鐘中斷模式為標(biāo)準(zhǔn)模式、one-shot模式或高頻周期時(shí)鐘模式。實(shí)現(xiàn)了μs級(jí)定時(shí)精度的同時(shí),降低了頻繁計(jì)算和設(shè)置時(shí)鐘芯片的時(shí)間代價(jià)。

下面給出關(guān)鍵的全局變量:

(1)time_mode:表示當(dāng)前時(shí)鐘工作模式。其中-1代表高頻周期時(shí)鐘模式,該模式下,根據(jù)需要達(dá)到的定時(shí)精度,設(shè)置時(shí)鐘芯片以較高的頻率產(chǎn)生周期性中斷;0代表標(biāo)準(zhǔn)模式,時(shí)鐘芯片以標(biāo)準(zhǔn)Linux默認(rèn)的頻率產(chǎn)生周期中斷;1代表one-shot模式,時(shí)鐘芯片被設(shè)置為單次觸發(fā)狀態(tài),即每次給時(shí)鐘芯片設(shè)置一個(gè)超時(shí)時(shí)間,超時(shí)事件發(fā)生時(shí),在時(shí)鐘中斷處理程序中根據(jù)需要再次給時(shí)鐘芯片設(shè)置一個(gè)超時(shí)時(shí)間。系統(tǒng)啟動(dòng)時(shí)設(shè)置為默認(rèn)值0。

(2)SCALE:時(shí)鐘精度提高比。設(shè)置高頻周期模式需要的參數(shù),用來(lái)表示所需要達(dá)到的時(shí)鐘精度相對(duì)普通Linux時(shí)鐘精度的提高倍數(shù)。

(3)Threshold:閾值。如果即將在某一時(shí)間段內(nèi)超時(shí)的實(shí)時(shí)定時(shí)器數(shù)量大于預(yù)設(shè)值,系統(tǒng)設(shè)置硬件定時(shí)器工作在高頻周期時(shí)鐘模式。

2.1 時(shí)鐘中斷處理

為了加強(qiáng)Linux的實(shí)時(shí)功能,同時(shí)又要保持Linux的完整性,本方案的動(dòng)態(tài)多模式時(shí)鐘機(jī)制以模塊化的方式實(shí)現(xiàn)有關(guān)實(shí)時(shí)部分的功能,并利用接口函數(shù)實(shí)現(xiàn)實(shí)時(shí)模塊與Linux核心的聯(lián)系。

(1)標(biāo)準(zhǔn)模式。標(biāo)準(zhǔn)模式下的中斷處理首先查詢實(shí)時(shí)定時(shí)器隊(duì)列中是否有實(shí)時(shí)定時(shí)器在下一個(gè)系統(tǒng)時(shí)鐘中斷(jiffies+1)之前超時(shí),即在(jiffies,jiffies+1)內(nèi)是否有實(shí)時(shí)定時(shí)器要處理,根據(jù)實(shí)時(shí)定時(shí)器數(shù)量設(shè)置時(shí)鐘芯片的工作模式,執(zhí)行do_timer_interrupt()等函數(shù)維護(hù)系統(tǒng)相關(guān)時(shí)間,標(biāo)記下半部。

(2)one_shot模式。one-shot模式下的中斷處理先判斷jiffies時(shí)鐘是否到期,如果到期:

①查詢實(shí)時(shí)定時(shí)器隊(duì)列中是否有實(shí)時(shí)定時(shí)器在下一個(gè)系統(tǒng)時(shí)鐘中斷(tick+1)之前超時(shí),即在(jiffies,jiffies+1)內(nèi)有實(shí)時(shí)定時(shí)器要處理(其超時(shí)時(shí)間用sub_jiffies表示),然后根據(jù)實(shí)時(shí)定時(shí)器數(shù)量設(shè)置時(shí)鐘芯片工作模式。

②執(zhí)行do_timer_interrupt()函數(shù)等維護(hù)與系統(tǒng)有關(guān)的時(shí)間,并標(biāo)記下半部。

如果jiffies時(shí)鐘未到期,則查詢實(shí)時(shí)定時(shí)器鏈表,根據(jù)其最早超時(shí)實(shí)時(shí)定時(shí)器的超時(shí)時(shí)間與當(dāng)前時(shí)間的差值設(shè)置時(shí)鐘芯片產(chǎn)生下一次中斷的時(shí)間。

(3)高頻周期時(shí)鐘模式。高頻周期模式下中斷處理先判斷jiffies時(shí)鐘是否到期,如果系統(tǒng)時(shí)鐘節(jié)拍到期,執(zhí)行上述①、②模式。否則,如果有實(shí)時(shí)定時(shí)器超時(shí),標(biāo)記中斷下半部;如果沒(méi)有實(shí)時(shí)定時(shí)器超時(shí)則直接返回。

對(duì)超時(shí)定時(shí)器的處理都留到時(shí)鐘中斷下半部(softirq)處理,超時(shí)的實(shí)時(shí)定時(shí)器優(yōu)先得到處理,以盡可能保證實(shí)時(shí)定時(shí)器的及時(shí)處理,隨后處理普通Linux的定時(shí)器,時(shí)鐘中斷處理過(guò)程如圖1所示。

2.2 定時(shí)器組織

普通Linux系統(tǒng)原有的粗粒度定時(shí)器對(duì)于內(nèi)核的穩(wěn)定和不要求高精度定時(shí)的非實(shí)時(shí)應(yīng)用仍是合適的,只是針對(duì)有高精度定時(shí)要求的實(shí)時(shí)應(yīng)用組織一個(gè)高精度定時(shí)器隊(duì)列HRT_list,隊(duì)列中的定時(shí)器按超時(shí)時(shí)間非降序排列,隊(duì)列中第一個(gè)定時(shí)器的超時(shí)時(shí)間就是隊(duì)列的最早超時(shí)時(shí)間。

原Linux內(nèi)核中的定時(shí)器是通過(guò)稱為CTW(Cascading Timer Wheel)的結(jié)構(gòu)管理和維護(hù),并因此使得對(duì)定時(shí)器的插入、刪除等操作的時(shí)間為0(1)。本文把HRT_list隊(duì)列和CTW結(jié)合起來(lái)以降低定時(shí)器處理時(shí)間、提高效率。把需要較長(zhǎng)時(shí)間才超時(shí)的實(shí)時(shí)定時(shí)器仍舊插入到原定時(shí)器隊(duì)列中,借助該隊(duì)列維護(hù)。在每次系統(tǒng)時(shí)鐘中斷處理的下半部處理完超時(shí)的實(shí)時(shí)定時(shí)器后,把在下一次系統(tǒng)時(shí)鐘中斷前超時(shí)的高精度定時(shí)器從原隊(duì)列移除,并插入到HRT_list隊(duì)列中。因此,HRT_list隊(duì)列中所需要維護(hù)的高精度實(shí)時(shí)定時(shí)器也是有限的,避免了維護(hù)一個(gè)大規(guī)模定時(shí)器隊(duì)列的開銷,近似實(shí)現(xiàn)了0(1)的系統(tǒng)開銷。

3 性能分析與測(cè)試

3.1 性能分析

當(dāng)系統(tǒng)中沒(méi)有高精度定時(shí)器時(shí),PIT仍以Linux系統(tǒng)默認(rèn)的頻率觸發(fā)時(shí)鐘中斷,在每一次系統(tǒng)時(shí)鐘中斷處理過(guò)程中,只需要判斷工作模式以及下一次jiffies中斷前有否實(shí)時(shí)定時(shí)器超時(shí),經(jīng)測(cè)試由此而帶來(lái)的處理時(shí)間不超過(guò)1us,增加系統(tǒng)負(fù)擔(dān)<0.1%,不會(huì)影響系統(tǒng)的性能。當(dāng)在某個(gè)時(shí)間段內(nèi)系統(tǒng)中實(shí)時(shí)定時(shí)器不多于閾值時(shí),系統(tǒng)時(shí)鐘工作在類似KURT-Linux的one-shot模式,同時(shí)維持普通Linux系統(tǒng)時(shí)鐘的穩(wěn)定。而由此而帶來(lái)的系統(tǒng)負(fù)擔(dān)是可以接受的[3]。

當(dāng)系統(tǒng)中存在大量實(shí)時(shí)定時(shí)器或在某個(gè)時(shí)間段內(nèi)即將超時(shí)的實(shí)時(shí)定時(shí)器數(shù)量超過(guò)一定值(閾值)時(shí),相對(duì)于one-shot模式需要頻繁地計(jì)算下次中斷時(shí)間,并重新編程在低速的ISA總線上的PIT的時(shí)間代價(jià)是可取的,證明如下:

用Thw表示中斷的硬件處理時(shí)間,Tisr表示中斷程序上半部執(zhí)行時(shí)間,n代表某個(gè)時(shí)段內(nèi)(一個(gè)jiffies內(nèi))超時(shí)的定時(shí)器數(shù)量。得到兩種模式下總的時(shí)鐘中斷處理時(shí)間關(guān)系式:

顯然,當(dāng)某個(gè)時(shí)段內(nèi)超時(shí)的定時(shí)器數(shù)量大于Threshold時(shí),采用高頻周期模式的時(shí)間開銷就會(huì)小于one-shot模式。

3.2 模擬測(cè)試

測(cè)試環(huán)境為Pentium4 3.0 GHz CPU,1GDDR內(nèi)存的硬件平臺(tái)和2.6.15.6版本內(nèi)核的Fedora core linux操作系統(tǒng)平臺(tái)。

根據(jù)數(shù)控實(shí)時(shí)任務(wù)的要求設(shè)定了周期為0.1 ms、1 ms和100 ms的進(jìn)程模擬數(shù)控實(shí)時(shí)周期任務(wù)[10],統(tǒng)計(jì)運(yùn)行1 000次的數(shù)據(jù),比較改進(jìn)后的高精度定時(shí)器和原linux定時(shí)器的平均定時(shí)偏差,并令閾值為30,設(shè)置周期任務(wù)數(shù)量為4、20、40,使時(shí)鐘工作在不同模式下。測(cè)試結(jié)果如表1所示。

由測(cè)試數(shù)據(jù)對(duì)比,原linux系統(tǒng)的定時(shí)平均偏差為968 μs,改進(jìn)后系統(tǒng)的定時(shí)平均偏差為34 ?滋s。顯而易見,改進(jìn)后的定時(shí)器定時(shí)精度大大提高,達(dá)到10 μs級(jí),能滿足數(shù)控系統(tǒng)應(yīng)用的要求。

在原Linux內(nèi)核和改進(jìn)后的高精度定時(shí)器內(nèi)核上睡眠50 μs各1 000次,測(cè)試實(shí)際睡眠時(shí)間所得結(jié)果與表1類似,50 μs的實(shí)際睡眠時(shí)間從(2.001~2.116) ms級(jí)降到(57~91) μs級(jí)。

全軟件數(shù)控系統(tǒng)以應(yīng)用軟件的形式實(shí)現(xiàn)運(yùn)動(dòng)控制,是開放式數(shù)控系統(tǒng)的發(fā)展方向。開源的Linux是開發(fā)具有自主知識(shí)產(chǎn)權(quán)數(shù)控系統(tǒng)的理想平臺(tái),但是其粗糙的時(shí)鐘粒度是普通Linux直接應(yīng)用于數(shù)控系統(tǒng)的最大障礙,因此需要細(xì)化Linux的時(shí)鐘粒度提高其實(shí)時(shí)性。

簡(jiǎn)單地提高系統(tǒng)時(shí)鐘頻率將引起頻繁的中斷處理,導(dǎo)致系統(tǒng)性能的下降。KURT-Linux采用的one-shot方式將周期性的時(shí)鐘中斷改進(jìn)為單次觸發(fā)狀態(tài),實(shí)現(xiàn)了μs級(jí)的定時(shí)精度。本文分析了普通Linux時(shí)鐘機(jī)制和幾種實(shí)時(shí)Linux操作系統(tǒng)細(xì)化時(shí)鐘精度的方式,提出了一種混合多種時(shí)鐘模式的動(dòng)態(tài)時(shí)鐘機(jī)制,達(dá)到了CNC要求的時(shí)鐘精度。最后的性能分析和模擬測(cè)試證實(shí)了新時(shí)鐘機(jī)制的技術(shù)性能。

參考文獻(xiàn)

[1] 李迪,萬(wàn)加富,葉峰,等.軟數(shù)控系統(tǒng)混合任務(wù)兩級(jí)調(diào)度策略[J].機(jī)械工程學(xué)報(bào),2008,44(12):157-162.

[2] 王霞,馬忠梅,何小慶,等.提高嵌入式linux時(shí)鐘精度的方法[J].計(jì)算機(jī)工程,2006,32(23):70-96.

[3] 施映,何嘉.KURT-Linux實(shí)時(shí)性研究及改進(jìn)策略[J].計(jì)算機(jī)科學(xué),2006,33(7):417-420.

[4] 丁一,胡封林,李國(guó)寬.高級(jí)可編程中斷控制系統(tǒng)的研究[J].計(jì)算機(jī)工程與科學(xué),2005,27(12):97-100.

[5] 范劍英,吳巖,賈佳,等.Linux2.6實(shí)時(shí)性分析與改進(jìn)方案[J].哈爾濱理工大學(xué)學(xué)報(bào),2008,13(1):24-28.

[6] 於時(shí)才,繆東升,孫華,等.Linux2.6調(diào)度系統(tǒng)的分析與改進(jìn)[J].微計(jì)算機(jī)信息,2007,24(5-3):252-254.

[7]周鵬,周明天.linux內(nèi)核中一種高精度定時(shí)器的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2006,16(4):73-78.

[8] SRINIVASAN B, PATHER S, HILL R, et al. A firm real-time system implementation using commercial off-the-shelf hardware and free software[R]. rtas. Fourth IEEE Real-Time Technology and Applications Symposium (RTAS’98), 1998.

[9] 李小群,趙慧斌,葉以民,等.一種基于時(shí)鐘粒度細(xì)化的Linux實(shí)時(shí)化方案[J].計(jì)算機(jī)研究與發(fā)展,2003,40(5):734-740.

[10] 姚鑫驊,潘雪增,傅建中,等.數(shù)控系統(tǒng)的混合任務(wù)模型及其最優(yōu)調(diào)度算法研究[J].浙江大學(xué)學(xué)報(bào),2006,40(8):1315-1319.

總結(jié)

以上是生活随笔為你收集整理的如何提高linux的时钟精度,Linux时钟精度提高有什么办法?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。