Softlockup與hardlockup檢測(cè)機(jī)制

https://docs.kernel.org/translations/zh_CN/admin-guide/lockup-watchdogs.html


Softlockup與hardlockup檢測(cè)機(jī)制(又名:nmi_watchdog)

Linux中內(nèi)核實(shí)現(xiàn)了一種用以檢測(cè)系統(tǒng)發(fā)生softlockup和hardlockup的看門(mén)狗機(jī)制陈哑。

Softlockup是一種會(huì)引發(fā)系統(tǒng)在內(nèi)核態(tài)中一直循環(huán)超過(guò)20秒(詳見(jiàn)下面“實(shí)現(xiàn)”小節(jié))導(dǎo)致 其他任務(wù)沒(méi)有機(jī)會(huì)得到運(yùn)行的BUG慨丐。一旦檢測(cè)到’softlockup’發(fā)生渗饮,默認(rèn)情況下系統(tǒng)會(huì)打 印當(dāng)前堆棧跟蹤信息并進(jìn)入鎖定狀態(tài)。也可配置使其在檢測(cè)到’softlockup’后進(jìn)入panic 狀態(tài)伦乔;通過(guò)sysctl命令設(shè)置“kernel.softlockup_panic”耗美、使用內(nèi)核啟動(dòng)參數(shù) “softlockup_panic”(詳見(jiàn)Documentation/admin-guide/kernel-parameters.rst)以及使 能內(nèi)核編譯選項(xiàng)“BOOTPARAM_SOFTLOCKUP_PANIC”都可實(shí)現(xiàn)這種配置枯夜。

而’hardlockup’是一種會(huì)引發(fā)系統(tǒng)在內(nèi)核態(tài)一直循環(huán)超過(guò)10秒鐘(詳見(jiàn)”實(shí)現(xiàn)”小節(jié))導(dǎo)致其 他中斷沒(méi)有機(jī)會(huì)運(yùn)行的缺陷堵漱。與’softlockup’情況類(lèi)似,除了使用sysctl命令設(shè)置 ‘hardlockup_panic’莱找、使能內(nèi)核選項(xiàng)“BOOTPARAM_HARDLOCKUP_PANIC”以及使用內(nèi)核參數(shù) “nmi_watchdog”(詳見(jiàn):”The kernel’s command-line parameters“)外酬姆,一旦檢 測(cè)到’hardlockup’默認(rèn)情況下系統(tǒng)打印當(dāng)前堆棧跟蹤信息,然后進(jìn)入鎖定狀態(tài)奥溺。

這個(gè)panic選項(xiàng)也可以與panic_timeout結(jié)合使用(這個(gè)panic_timeout是通過(guò)稍具迷惑性的 sysctl命令”kernel.panic”來(lái)設(shè)置)轴踱,使系統(tǒng)在panic指定時(shí)間后自動(dòng)重啟。

實(shí)現(xiàn)

Softlockup和hardlockup分別建立在hrtimer(高精度定時(shí)器)和perf兩個(gè)子系統(tǒng)上而實(shí)現(xiàn)谚赎。 這也就意味著理論上任何架構(gòu)只要實(shí)現(xiàn)了這兩個(gè)子系統(tǒng)就支持這兩種檢測(cè)機(jī)制。

Hrtimer用于周期性產(chǎn)生中斷并喚醒watchdog線程诱篷;NMI perf事件則以”watchdog_thresh“ (編譯時(shí)默認(rèn)初始化為10秒壶唤,也可通過(guò)”watchdog_thresh“這個(gè)sysctl接口來(lái)進(jìn)行配置修改) 為間隔周期產(chǎn)生以檢測(cè) hardlockups如果一個(gè)CPU在這個(gè)時(shí)間段內(nèi)沒(méi)有檢測(cè)到hrtimer中 斷發(fā)生棕所,’hardlockup 檢測(cè)器’(即NMI perf事件處理函數(shù))將會(huì)視系統(tǒng)配置而選擇產(chǎn)生內(nèi)核 警告或者直接panic闸盔。

而watchdog線程本質(zhì)上是一個(gè)高優(yōu)先級(jí)內(nèi)核線程,每調(diào)度一次就對(duì)時(shí)間戳進(jìn)行一次更新琳省。 如果時(shí)間戳在2*watchdog_thresh(這個(gè)是softlockup的觸發(fā)門(mén)限)這段時(shí)間都未更新,那么 “softlocup 檢測(cè)器”(內(nèi)部hrtimer定時(shí)器回調(diào)函數(shù))會(huì)將相關(guān)的調(diào)試信息打印到系統(tǒng)日志中迎吵, 然后如果系統(tǒng)配置了進(jìn)入panic流程則進(jìn)入panic,否則內(nèi)核繼續(xù)執(zhí)行针贬。

Hrtimer定時(shí)器的周期是2*watchdog_thresh/5击费,也就是說(shuō)在hardlockup被觸發(fā)前hrtimer有 2~3次機(jī)會(huì)產(chǎn)生時(shí)鐘中斷。

如上所述,內(nèi)核相當(dāng)于為系統(tǒng)管理員提供了一個(gè)可調(diào)節(jié)hrtimer定時(shí)器和perf事件周期長(zhǎng)度 的調(diào)節(jié)旋鈕桦他。如何通過(guò)這個(gè)旋鈕為特定使用場(chǎng)景配置一個(gè)合理的周期值要對(duì)lockups檢測(cè)的 響應(yīng)速度和lockups檢測(cè)開(kāi)銷(xiāo)這二者之間進(jìn)行權(quán)衡蔫巩。

默認(rèn)情況下所有在線cpu上都會(huì)運(yùn)行一個(gè)watchdog線程。不過(guò)在內(nèi)核配置了”NO_HZ_FULL“的 情況下watchdog線程默認(rèn)只會(huì)運(yùn)行在管家(housekeeping)cpu上,而”nohz_full“啟動(dòng)參數(shù)指 定的cpu上則不會(huì)有watchdog線程運(yùn)行圆仔。試想垃瞧,如果我們?cè)试Swatchdog線程在”nohz_full“指 定的cpu上運(yùn)行,這些cpu上必須得運(yùn)行時(shí)鐘定時(shí)器來(lái)激發(fā)watchdog線程調(diào)度坪郭;這樣一來(lái)就會(huì) 使”nohz_full“保護(hù)用戶程序免受內(nèi)核干擾的功能失效个从。當(dāng)然,副作用就是”nohz_full“指定 的cpu即使在內(nèi)核產(chǎn)生了lockup問(wèn)題我們也無(wú)法檢測(cè)到歪沃。不過(guò)嗦锐,至少我們可以允許watchdog 線程在管家(non-tickless)核上繼續(xù)運(yùn)行以便我們能繼續(xù)正常的監(jiān)測(cè)這些cpus上的lockups 事件。

不論哪種情況都可以通過(guò)sysctl命令kernel.watchdog_cpumask來(lái)對(duì)沒(méi)有運(yùn)行watchdog線程 的cpu集合進(jìn)行調(diào)節(jié)绸罗。對(duì)于nohz_full而言,如果nohz_full cpu上有異常掛住的情況意推,通過(guò) 這種方式打開(kāi)這些cpu上的watchdog進(jìn)行調(diào)試可能會(huì)有所作用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末珊蟀,一起剝皮案震驚了整個(gè)濱河市菊值,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌育灸,老刑警劉巖腻窒,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異磅崭,居然都是意外死亡儿子,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)砸喻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)柔逼,“玉大人,你說(shuō)我怎么就攤上這事割岛∮涫剩” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵癣漆,是天一觀的道長(zhǎng)维咸。 經(jīng)常有香客問(wèn)我,道長(zhǎng)惠爽,這世上最難降的妖魔是什么癌蓖? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮婚肆,結(jié)果婚禮上租副,老公的妹妹穿的比我還像新娘。我一直安慰自己较性,他們只是感情好附井,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布讨越。 她就那樣靜靜地躺著,像睡著了一般永毅。 火紅的嫁衣襯著肌膚如雪把跨。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,775評(píng)論 1 307
  • 那天沼死,我揣著相機(jī)與錄音着逐,去河邊找鬼。 笑死意蛀,一個(gè)胖子當(dāng)著我的面吹牛耸别,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播县钥,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼秀姐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了若贮?” 一聲冷哼從身側(cè)響起省有,我...
    開(kāi)封第一講書(shū)人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谴麦,沒(méi)想到半個(gè)月后蠢沿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡匾效,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年舷蟀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片面哼。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡野宜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出魔策,到底是詐尸還是另有隱情匈子,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布代乃,位于F島的核電站,受9級(jí)特大地震影響仿粹,放射性物質(zhì)發(fā)生泄漏搁吓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一吭历、第九天 我趴在偏房一處隱蔽的房頂上張望堕仔。 院中可真熱鬧,春花似錦晌区、人聲如沸摩骨。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)恼五。三九已至昌罩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間灾馒,已是汗流浹背茎用。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留睬罗,地道東北人轨功。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像容达,于是被迫代替她去往敵國(guó)和親古涧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

推薦閱讀更多精彩內(nèi)容