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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

linux 内核Lockup机制浅析

發布時間:2024/1/3 综合教程 41 生活家
生活随笔 收集整理的這篇文章主要介紹了 linux 内核Lockup机制浅析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概念說明

Linux內核Lockup就是linux內核占用CPU不放,Lockup分為兩種:soft lockup 和 hard lockup。

soft lockup是指CPU被內核代碼占據,以至于無法執行其它進程。檢測soft lockup的原理是給每個CPU分配一個定時執行的內核線程[watchdog/x],

如果該線程在設定的期限內沒有得到執行的話就意味著發生了soft lockup,[watchdog/x]是SCHED_FIFO實時進程,優先級為最高的99,擁有優先運行的特權。

hard lockup比soft lockup更加嚴重,CPU不僅無法執行其它進程,而且不再響應中斷。檢測hard lockup的原理利用了PMU的NMI perf event,

因為NMI中斷是不可屏蔽的,在CPU不再響應中斷的情況下仍然可以得到執行,它再去檢查時鐘中斷的計數器hrtimer_interrupts是否在保持遞增,

如果停滯就意味著時鐘中斷未得到響應,也就是發生了hard lockup。

linux內核的代碼實現在kernel/watchdog.c中,

主體涉及到了3個東西:kernel線程,時鐘中斷,NMI中斷(不可屏蔽中斷)。

這3個東西具有不一樣的優先級,依次是kernel線程 < 時鐘中斷 < NMI中斷。

檢測機制

Linux kernel設計了一個檢測lockup的機制,稱為NMI Watchdog,是利用NMI中斷實現的,用NMI是因為lockup有可能發生在中斷被屏蔽的狀態下,這時唯一能把CPU搶下來的方法就是通過NMI,因為NMI中斷是不可屏蔽的。NMI Watchdog 中包含 soft lockup detector 和 hard lockup detector,2.6之后的內核的實現方法如下。

NMI Watchdog 的觸發機制包括兩部分:

1. 一個高精度計時器(hrtimer),對應的中斷處理例程是kernel/watchdog.c: watchdog_timer_fn(),在該例程中:

要遞增計數器hrtimer_interrupts,這個計數器供hard lockup detector用于判斷CPU是否響應中斷;
要喚醒[watchdog/x]內核線程,該線程的任務是更新一個時間戳;
soft lock detector檢查時間戳,如果超過soft lockup threshold一直未更新,說明[watchdog/x]未得到運行機會,意味著CPU被霸占,也就是發生了soft lockup。

2.基于PMU的NMI perf event,當PMU的計數器溢出時會觸發NMI中斷,對應的中斷處理例程是 kernel/watchdog.c: watchdog_overflow_callback(),

hard lockup detector就在其中,它會檢查上述hrtimer的中斷次數(hrtimer_interrupts)是否在保持遞增,如果停滯則表明hrtimer中斷未得到響應,也就是發生了hard lockup。

參數設定

hrtimer的周期是:softlockup_thresh/5。

在2.6內核中:
softlockup_thresh的值等于內核參數kernel.watchdog_thresh,默認60秒;
而到3.10內核中:
內核參數kernel.watchdog_thresh名稱未變,但含義變成了hard lockup threshold,默認10秒;
soft lockup threshold則等于(2*kernel.watchdog_thresh),即默認20秒。

NMI perf event是基于PMU的,觸發周期(hard lockup threshold)在2.6內核里是固定的60秒,不可手工調整;在3.10內核里可以手工調整,

因為直接對應著內核參數kernel.watchdog_thresh,默認值10秒。

異常處理

檢測到 lockup 之后怎么辦?可以自動panic,也可輸出條信息就算完了,這是可以通過內核參數來定義的:

kernel.softlockup_panic: 決定了檢測到soft lockup時是否自動panic,缺省值是0;
kernel.nmi_watchdog: 定義是否開啟nmi watchdog、以及hard lockup是否導致panic,該內核參數的格式是”=[panic,][nopanic,][num]”.

參考:https://www.kernel.org/doc/Documentation/lockup-watchdogs.txt

總結

以上是生活随笔為你收集整理的linux 内核Lockup机制浅析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。