@sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/admin-guide/lockup-watchdogsmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/zh_TW/admin-guide/lockup-watchdogsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/it_IT/admin-guide/lockup-watchdogsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/ja_JP/admin-guide/lockup-watchdogsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/ko_KR/admin-guide/lockup-watchdogsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/sp_SP/admin-guide/lockup-watchdogsmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Simplified)uh1h hh _documenthsourceNlineNubhnote)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]h paragraph)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_CN/disclaimer-zh_CN.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhh]/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/admin-guide/lockup-watchdogs.rsthKubh field_body)}(h.Documentation/admin-guide/lockup-watchdogs.rsth]h)}(hhh]h.Documentation/admin-guide/lockup-watchdogs.rst}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h Translatorh]h Translator}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh)}(h&Hailong Liu h]h)}(h%Hailong Liu h](h Hailong Liu <}(hj hhhNhNubh reference)}(hliu.hailong6@zte.com.cnh]hliu.hailong6@zte.com.cn}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:liu.hailong6@zte.com.cnuh1jhj ubh>}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhtarget)}(h.. _cn_lockup-watchdogs:h]h}(h]h ]h"]h$]h&]refidcn-lockup-watchdogsuh1jChKhhhhhhubhsection)}(hhh](htitle)}(h8Softlockup与hardlockup检测机制(又名:nmi_watchdog)h]h8Softlockup与hardlockup检测机制(又名:nmi_watchdog)}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjShhhhhK ubh)}(haLinux中内核实现了一种用以检测系统发生softlockup和hardlockup的看门狗机制。h]haLinux中内核实现了一种用以检测系统发生softlockup和hardlockup的看门狗机制。}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hjShhubh)}(hXQSoftlockup是一种会引发系统在内核态中一直循环超过20秒(详见下面“实现”小节)导致 其他任务没有机会得到运行的BUG。一旦检测到'softlockup'发生,默认情况下系统会打 印当前堆栈跟踪信息并进入锁定状态。也可配置使其在检测到'softlockup'后进入panic 状态;通过sysctl命令设置“kernel.softlockup_panic”、使用内核启动参数 “softlockup_panic”(详见Documentation/admin-guide/kernel-parameters.rst)以及使 能内核编译选项“BOOTPARAM_SOFTLOCKUP_PANIC”都可实现这种配置。h]hXYSoftlockup是一种会引发系统在内核态中一直循环超过20秒(详见下面“实现”小节)导致 其他任务没有机会得到运行的BUG。一旦检测到’softlockup’发生,默认情况下系统会打 印当前堆栈跟踪信息并进入锁定状态。也可配置使其在检测到’softlockup’后进入panic 状态;通过sysctl命令设置“kernel.softlockup_panic”、使用内核启动参数 “softlockup_panic”(详见Documentation/admin-guide/kernel-parameters.rst)以及使 能内核编译选项“BOOTPARAM_SOFTLOCKUP_PANIC”都可实现这种配置。}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjShhubh)}(hX而'hardlockup'是一种会引发系统在内核态一直循环超过10秒钟(详见"实现"小节)导致其 他中断没有机会运行的缺陷。与'softlockup'情况类似,除了使用sysctl命令设置 'hardlockup_panic'、使能内核选项“BOOTPARAM_HARDLOCKUP_PANIC”以及使用内核参数 "nmi_watchdog"(详见:”Documentation/admin-guide/kernel-parameters.rst“)外,一旦检 测到'hardlockup'默认情况下系统打印当前堆栈跟踪信息,然后进入锁定状态。h]hX 而’hardlockup’是一种会引发系统在内核态一直循环超过10秒钟(详见”实现”小节)导致其 他中断没有机会运行的缺陷。与’softlockup’情况类似,除了使用sysctl命令设置 ‘hardlockup_panic’、使能内核选项“BOOTPARAM_HARDLOCKUP_PANIC”以及使用内核参数 “nmi_watchdog”(详见:”Documentation/admin-guide/kernel-parameters.rst“)外,一旦检 测到’hardlockup’默认情况下系统打印当前堆栈跟踪信息,然后进入锁定状态。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjShhubh)}(h这个panic选项也可以与panic_timeout结合使用(这个panic_timeout是通过稍具迷惑性的 sysctl命令"kernel.panic"来设置),使系统在panic指定时间后自动重启。h]h这个panic选项也可以与panic_timeout结合使用(这个panic_timeout是通过稍具迷惑性的 sysctl命令”kernel.panic”来设置),使系统在panic指定时间后自动重启。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjShhubjR)}(hhh](jW)}(h实现h]h实现}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjhhhhhK ubh)}(hSoftlockup和hardlockup分别建立在hrtimer(高精度定时器)和perf两个子系统上而实现。 这也就意味着理论上任何架构只要实现了这两个子系统就支持这两种检测机制。h]hSoftlockup和hardlockup分别建立在hrtimer(高精度定时器)和perf两个子系统上而实现。 这也就意味着理论上任何架构只要实现了这两个子系统就支持这两种检测机制。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK"hjhhubh)}(hXHrtimer用于周期性产生中断并唤醒watchdog线程;NMI perf事件则以”watchdog_thresh“ (编译时默认初始化为10秒,也可通过”watchdog_thresh“这个sysctl接口来进行配置修改) 为间隔周期产生以检测 hardlockups。如果一个CPU在这个时间段内没有检测到hrtimer中 断发生,'hardlockup 检测器'(即NMI perf事件处理函数)将会视系统配置而选择产生内核 警告或者直接panic。h]hXHrtimer用于周期性产生中断并唤醒watchdog线程;NMI perf事件则以”watchdog_thresh“ (编译时默认初始化为10秒,也可通过”watchdog_thresh“这个sysctl接口来进行配置修改) 为间隔周期产生以检测 hardlockups。如果一个CPU在这个时间段内没有检测到hrtimer中 断发生,’hardlockup 检测器’(即NMI perf事件处理函数)将会视系统配置而选择产生内核 警告或者直接panic。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK%hjhhubh)}(hX而watchdog线程本质上是一个高优先级内核线程,每调度一次就对时间戳进行一次更新。 如果时间戳在2*watchdog_thresh(这个是softlockup的触发门限)这段时间都未更新,那么 "softlocup 检测器"(内部hrtimer定时器回调函数)会将相关的调试信息打印到系统日志中, 然后如果系统配置了进入panic流程则进入panic,否则内核继续执行。h]hX而watchdog线程本质上是一个高优先级内核线程,每调度一次就对时间戳进行一次更新。 如果时间戳在2*watchdog_thresh(这个是softlockup的触发门限)这段时间都未更新,那么 “softlocup 检测器”(内部hrtimer定时器回调函数)会将相关的调试信息打印到系统日志中, 然后如果系统配置了进入panic流程则进入panic,否则内核继续执行。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hjhhubh)}(hHrtimer定时器的周期是2*watchdog_thresh/5,也就是说在hardlockup被触发前hrtimer有 2~3次机会产生时钟中断。h]hHrtimer定时器的周期是2*watchdog_thresh/5,也就是说在hardlockup被触发前hrtimer有 2~3次机会产生时钟中断。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK0hjhhubh)}(hX$如上所述,内核相当于为系统管理员提供了一个可调节hrtimer定时器和perf事件周期长度 的调节旋钮。如何通过这个旋钮为特定使用场景配置一个合理的周期值要对lockups检测的 响应速度和lockups检测开销这二者之间进行权衡。h]hX$如上所述,内核相当于为系统管理员提供了一个可调节hrtimer定时器和perf事件周期长度 的调节旋钮。如何通过这个旋钮为特定使用场景配置一个合理的周期值要对lockups检测的 响应速度和lockups检测开销这二者之间进行权衡。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hjhhubh)}(hX默认情况下所有在线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 事件。h]hX默认情况下所有在线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 事件。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hjhhubh)}(hX不论哪种情况都可以通过sysctl命令kernel.watchdog_cpumask来对没有运行watchdog线程 的cpu集合进行调节。对于nohz_full而言,如果nohz_full cpu上有异常挂住的情况,通过 这种方式打开这些cpu上的watchdog进行调试可能会有所作用。h]hX不论哪种情况都可以通过sysctl命令kernel.watchdog_cpumask来对没有运行watchdog线程 的cpu集合进行调节。对于nohz_full而言,如果nohz_full cpu上有异常挂住的情况,通过 这种方式打开这些cpu上的watchdog进行调试可能会有所作用。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK@hjhhubeh}(h]id1ah ]h"]实现ah$]h&]uh1jQhjShhhhhK ubeh}(h](!softlockuphardlockup-nmi-watchdogjPeh ]h"](8softlockup与hardlockup检测机制(又名:nmi_watchdog)cn_lockup-watchdogseh$]h&]uh1jQhhhhhhhK expect_referenced_by_name}jjEsexpect_referenced_by_id}jPjEsubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(jVN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjIerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh، _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}jP]jEasnameids}(jjPjjjju nametypes}(jjjuh}(jPjSjjSjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jWKsRparse_messages]transform_messages]hsystem_message)}(hhh]h)}(hhh]h9Hyperlink target "cn-lockup-watchdogs" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypeINFOsourceh،lineKuh1juba transformerN include_log]ADocumentation/translations/zh_CN/admin-guide/lockup-watchdogs.rst(NNNNta decorationNhhub.