Softlockup与hardlockup检测机制

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


Softlockup与hardlockup检测机制(又名:nmi_watchdog)

Linux中内核实现了一种用以检测系统发生softlockup和hardlockup的看门狗机制。

Softlockup是一种会引发系统在内核态中一直循环超过20秒(详见下面“实现”小节)导致 其他任务没有机会得到运行的BUG。一旦检测到’softlockup’发生,默认情况下系统会打 印当前堆栈跟踪信息并进入锁定状态。也可配置使其在检测到’softlockup’后进入panic 状态;通过sysctl命令设置“kernel.softlockup_panic”、使用内核启动参数 “softlockup_panic”(详见Documentation/admin-guide/kernel-parameters.rst)以及使 能内核编译选项“BOOTPARAM_SOFTLOCKUP_PANIC”都可实现这种配置。

而’hardlockup’是一种会引发系统在内核态一直循环超过10秒钟(详见”实现”小节)导致其 他中断没有机会运行的缺陷。与’softlockup’情况类似,除了使用sysctl命令设置 ‘hardlockup_panic’、使能内核选项“BOOTPARAM_HARDLOCKUP_PANIC”以及使用内核参数 “nmi_watchdog”(详见:”The kernel’s command-line parameters“)外,一旦检 测到’hardlockup’默认情况下系统打印当前堆栈跟踪信息,然后进入锁定状态。

这个panic选项也可以与panic_timeout结合使用(这个panic_timeout是通过稍具迷惑性的 sysctl命令”kernel.panic”来设置),使系统在panic指定时间后自动重启。

实现

Softlockup和hardlockup分别建立在hrtimer(高精度定时器)和perf两个子系统上而实现。 这也就意味着理论上任何架构只要实现了这两个子系统就支持这两种检测机制。

Hrtimer用于周期性产生中断并唤醒watchdog线程;NMI perf事件则以”watchdog_thresh“ (编译时默认初始化为10秒,也可通过”watchdog_thresh“这个sysctl接口来进行配置修改) 为间隔周期产生以检测 hardlockups如果一个CPU在这个时间段内没有检测到hrtimer中 断发生,’hardlockup 检测器’(即NMI perf事件处理函数)将会视系统配置而选择产生内核 警告或者直接panic。

而watchdog线程本质上是一个高优先级内核线程,每调度一次就对时间戳进行一次更新。 如果时间戳在2*watchdog_thresh(这个是softlockup的触发门限)这段时间都未更新,那么 “softlocup 检测器”(内部hrtimer定时器回调函数)会将相关的调试信息打印到系统日志中, 然后如果系统配置了进入panic流程则进入panic,否则内核继续执行。

Hrtimer定时器的周期是2*watchdog_thresh/5,也就是说在hardlockup被触发前hrtimer有 2~3次机会产生时钟中断。

如上所述,内核相当于为系统管理员提供了一个可调节hrtimer定时器和perf事件周期长度 的调节旋钮。如何通过这个旋钮为特定使用场景配置一个合理的周期值要对lockups检测的 响应速度和lockups检测开销这二者之间进行权衡。

默认情况下所有在线cpu上都会运行一个watchdog线程。不过在内核配置了”NO_HZ_FULL“的 情况下watchdog线程默认只会运行在管家(housekeeping)cpu上,而”nohz_full“启动参数指 定的cpu上则不会有watchdog线程运行。试想,如果我们允许watchdog线程在”nohz_full“指 定的cpu上运行,这些cpu上必须得运行时钟定时器来激发watchdog线程调度;这样一来就会 使”nohz_full“保护用户程序免受内核干扰的功能失效。当然,副作用就是”nohz_full“指定 的cpu即使在内核产生了lockup问题我们也无法检测到。不过,至少我们可以允许watchdog 线程在管家(non-tickless)核上继续运行以便我们能继续正常的监测这些cpus上的lockups 事件。

不论哪种情况都可以通过sysctl命令kernel.watchdog_cpumask来对没有运行watchdog线程 的cpu集合进行调节。对于nohz_full而言,如果nohz_full cpu上有异常挂住的情况,通过 这种方式打开这些cpu上的watchdog进行调试可能会有所作用。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容