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

歡迎訪問 生活随笔!

生活随笔

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

linux

linux 读写时间变长,linux时钟变慢的原因分析【转】

發(fā)布時(shí)間:2024/4/19 linux 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 读写时间变长,linux时钟变慢的原因分析【转】 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今天發(fā)現(xiàn)現(xiàn)在使用的噪聲儀器時(shí)間不準(zhǔn),每天滿大約10幾分鐘,經(jīng)過查找資料,發(fā)現(xiàn)以下一篇中提到的問題很可疑,轉(zhuǎn)載如下:

聽說有人抱怨他的Linux服務(wù)器或者嵌入式Linux開發(fā)板上的時(shí)間越來越慢,當(dāng)時(shí)念頭一閃,沒有多在意

今天頓悟,果然是有道理的

用戶空間的延時(shí)和定時(shí)器,都是靠內(nèi)核定時(shí)器實(shí)現(xiàn)的。內(nèi)核定時(shí)器 struct timer_list 以及相關(guān)內(nèi)核api,

init_timer()、add_timer、mod_timer 、del_timer,都依賴于jiffes

一個(gè)系統(tǒng)時(shí)鐘中斷,jiffes就加1,每秒將產(chǎn)生 1*HZ 個(gè)jiffes

可以說,這個(gè)jiffes,也可稱為滴答,等于是OS的心跳,靠著這個(gè)穩(wěn)定長期的中斷,內(nèi)核才能夠及時(shí)從一個(gè)時(shí)間片到期的進(jìn)程手中奪回cpu的使用權(quán),進(jìn)行下一次調(diào)度。當(dāng)然,每一

次中斷結(jié)束或者返回用戶空間都可能進(jìn)入調(diào)度,所以這里用詞是及時(shí)。

2.6.21版本開始支持無滴答內(nèi)核,據(jù)說能夠節(jié)能。不過我想沒有了滴答,內(nèi)核定時(shí)器失效,很多軟件怕是要重寫了,所以大家都不大關(guān)注這個(gè)。

常見的計(jì)算機(jī)系統(tǒng)會(huì)帶有一個(gè)RTC,這個(gè)才是可靠的墻上時(shí)鐘源。

不過訪問rtc的速度比較慢,所以只是上電的時(shí)候,內(nèi)核讀取一次rtc時(shí)間,之后在OS里看到的時(shí)間都是靠一個(gè)一個(gè)jiffes加上去的。

很多時(shí)候,為了保護(hù)臨界資源,不得不關(guān)閉所有中斷,這個(gè)在中斷處理函數(shù)中尤為常見。那么就有可能在關(guān)閉中斷后的臨界區(qū),發(fā)生了系統(tǒng)時(shí)鐘中斷,這次時(shí)鐘中斷就被忽略了。

導(dǎo)致jiffies沒有增加,進(jìn)而影響系統(tǒng)時(shí)鐘精度。這個(gè)概率我只能定性的分析。比如arm上HZ為100,pc上為1000,那么每隔10ms或者1ms就能有一次時(shí)鐘中斷。而10ms期間,200MHZ

的arm芯片大約能執(zhí)行 0.5M

條指令,正好落在臨界區(qū)的幾百條指令的概率不是很大。但是計(jì)算機(jī)跑起來微小的誤差也是很容易積累的,所以如有必要,可以另開一個(gè)守護(hù)進(jìn)程,定

時(shí)讀取rtc來修正系統(tǒng)時(shí)間。

手工驗(yàn)證一下

spinlock_t lock;

unsigned long flags;

static int test_timer_init_module(void)

{

spin_lock_init(&lock);

printk( KERN_DEBUG "Module test_timer init\n" );

spin_lock_irqsave(&lock, flags);

printk( KERN_DEBUG "the jiffies is %ld\n" ,jiffies);

mdelay(2000);

printk( KERN_DEBUG "the jiffies is %ld\n" ,jiffies);

spin_unlock_irqrestore(&lock, flags);

return 0;

}

不加黑色代碼,兩個(gè)jiffes相差

20xx?,pc上HZ為1000,這個(gè)結(jié)果還是正常的

加上黑色代碼,關(guān)閉中斷2000ms,兩個(gè)jiffes沒有差別

所以寫驅(qū)動(dòng)一定要自律,關(guān)閉中斷后的代碼一定要盡可能的簡潔迅速

所以需要在中斷響應(yīng)時(shí)速度盡量快,處理終端時(shí)不能等待太長時(shí)間,否則很多其他中斷會(huì)被錯(cuò)誤而導(dǎo)致意想不到的問題,以上時(shí)鐘不準(zhǔn)就是一例。

總結(jié)

以上是生活随笔為你收集整理的linux 读写时间变长,linux时钟变慢的原因分析【转】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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