[转帖]解读内核 sysctl 配置中 panic、oops 相关项目
写在前面
本篇文章的内容主要来自内核源码树 Documentation/admin-guide/sysctl/kernel.rst文件。
softlockup vs hardlockup
softlockup 是一种触发系统在内核态中一直循环超过 20 秒导致其它任务没有机会得到运行的 BUG。
hardlockup 是一种触发系统在内核态一直循环超过 10 秒导致其它中断没有机会运行的缺陷。
核心区别在于 softlockup 触发的时候中硬件中断仍旧能够正常运行。
如上信息摘自 Softlockup与hardlockup检测机制(又名:nmi_watchdog)。
sysctl 配置中 panic、oops 相关项目
ftrace_dump_on_oops
配置当内核 oops 时是否调用 ftrace_dump函数打印 ftrace 缓冲区的内容到串口中,可用于获取触发内核 oops 时的 ftrace 跟踪内容来定位问题原因。
| value | 含义 |
|---|---|
| 0 | 关闭(默认配置) |
| 1 | dump 所有 cpu 的 ftrace buffers |
| 2 | dump 触发 oops cpu 的 ftrace buffers |
hardlockup_all_cpu_backtrace
此配置控制当 hard lockup 检测器检测到一个 hard lockup 时是否收集更多调试信息的行为。当使能时,将会 dump 每种硬件架构特定的 cpu 栈信息。
| value | 含义 |
|---|---|
| 0 | 关闭(默认配置) |
| 1 | 当 hardlockup 检测到时收集所有 cpu 的栈信息 |
hardlockup_panic
配置在检测到 hard lockup 产生时是否触发内核 panic。
| value | 含义 |
|---|---|
| 0 | 不触发 panic |
| 1 | 触发 panic |
hung_task_all_cpu_backtrace
当此选项设置时,当检测到一个 hung 住的任务时内核会向所有的 CPU 发送一个 NMI 中断来 dump 栈回溯信息。当 CONFIG_DETECT_HUNG_TASK与CONFIG_SMP内核配置开启时此项配置才会存在。
| value | 含义 |
|---|---|
| 0 | 关闭(默认配置) |
| 1 | 使能 |
hung_task_panic
配置检测到一个 hung 住的任务时内核的行为,当CONFIG_DETECT_HUNG_TASK内核配置开启时此项配置才会存在。
| value | 含义 |
|---|---|
| 0 | 内核继续执行(默认配置) |
| 1 | 立刻触发 panic |
hung_task_check_count
配置内核检查 hung 任务数量的最大值,当CONFIG_DETECT_HUNG_TASK内核配置开启时此项配置才会存在。
hung_task_timeout_secs
当一个任务处于 D 状态且超过了此项配置的时间未被调度时内核会告警,当CONFIG_DETECT_HUNG_TASK内核配置开启时此项配置才会存在。
| value | 含义 |
|---|---|
| 0 | 无限超时时间,不会做任何检查 |
| 0:LONG_MAX / HZ | 按照配置时间进行检查 |
hung_task_check_interval_secs
配置 hung task 检测的周期。当 hung task 检测使能时,检测将会在按照每 hung_task_check_interval_secss 进行,当CONFIG_DETECT_HUNG_TASK内核配置开启时此项配置才会存在。
| value | 含义 |
|---|---|
| 0 | 使用 hung_task_timeout_secs配置作为检测周期(默认值) |
| 0:LONG_MAX / HZ | 按照配置时间周期性进行检查 |
hung_task_warnings
配置告警的最大数量。在一个检测周期内检测到 hung 住任务时,该值会减 1,当该值为 0 时,后续告警信息不会再报告。当CONFIG_DETECT_HUNG_TASK内核配置开启时此项配置才会存在。
当配置为 -1 时表示不限制报告次数。
hyperv_record_panic_msg
控制 panic kmsg 数据是否要报告给 Hyper-V。
| value | 含义 |
|---|---|
| 0 | 不报告 |
| 1 | 报告(默认配置) |
nmi_watchdog
这个参数可以用来控制 x86 系统中 NMI watchdog(用于 hard lockup 检测器)的行为。
| value | 含义 |
|---|---|
| 0 | 关闭 hard lockup 检测器 |
| 1 | 打开 hard lockup 检测器 |
hard lockup 检测器工作原理:
监控每一个 cpu 相应时钟中断的能力。该机制利用 CPU 性能计数寄存器,这些寄存器被编程为在 CPU 繁时周期性生成不可屏蔽中断(NMI),因此被称为 “NMI watchdog”。
当内核在一个 KVM 虚拟机器中作为 guest 运行时,NMI watchdog 默认关闭。可以在 guest 内核命令行中添加 nmi_watchdog=1来覆盖默认行为,以使能 nmi watchdog 功能。
oops_all_cpu_backtrace
当该配置设置时,当一个 oops 事件产生时内核将会向所有的 CPU 发送一个 NMI 中断来 dump 栈回溯信息。当 panic 不能触发时、kdump 不能工作时(例如为了保护正在运行的 VMs)它可以作为最后的报告手段。当CONFIG_SMP内核配置开启时此项配置才会存在。
| value | 含义 |
|---|---|
| 0 | 关闭(默认行为) |
| 1 | 开启 |
panic
此配置决定了内核触发 panic 后的行为。
| value | 含义 |
|---|---|
| 0 | 内核持续 loop |
| 负数 | 内核立刻重启 |
| 正数 | 内核将会在配置的 s 数后重启 |
当使用了软件看门狗时,建议的配置是 60s。
panic_on_io_nmi
配置当一个 CPU 收到了由于 IO 错误触发的 NMI 中断时的内核行为。
| value | 含义 |
|---|---|
| 0 | 尝试继续运行(默认行为) |
| 1 | 立刻触发 panic |
panic_on_oops
配置当一个 oops、内核 BUG 产生时内核的行为。
| value | 含义 |
|---|---|
| 0 | 尝试继续运行 |
| 1 | 立刻触发 panic(当 sysctl panic 配置设置为非 0 值时机器将会重启) |
panic_on_stackoverflow
配置当检测到不包含用户栈之外的内核栈、中断栈、异常栈溢出时的内核行为,当CONFIG_DEBUG_STACKOVERFLOW内核配置开启时此项配置才会存在。
| value | 含义 |
|---|---|
| 0 | 尝试继续运行 |
| 1 | 立刻触发 panic |
panic_on_unrecovered_nmi
当一个 memory NMI、其它未知 NMI 中断触发时,Linux 的默认行为是继续向下执行。在大多数环境例如科学计算中,最好取出盒子并处理错误,而不是传播未校正的奇偶校验/ ECC 错误。
少数系统可能会出于奇怪的随机原因(如电源管理)产生 NMI,因此默认设置为关闭。
panic_on_warn
当配置时,内核执行到 WARN 语句是会调用 panic 接口,能够实现在 WARN 的位置尝试 kdump 时避免重新编译内核。
| value | 含义 |
|---|---|
| 0 | 只打印 WARN 信息(默认行为) |
| 1 | 打印出 WARN 的位置后调用 panic |
panic_print
使用位掩码控制 panic 触发时打印的系统信息。用户可以选择组合如下的位:
| 位 | 功能 |
|---|---|
| bit 0 | 打印所有的任务信息 |
| bit 1 | 打印系统内存信息 |
| bit 2 | 打印定时器信息 |
| bit 3 | 当 CONFIG_LOCKDEP 开启式打印锁信息 |
| bit 4 | 打印 ftrace buffer |
要在 panic 的时候打印进程和内存信息,可以执行如下命令:
echo 3 > /proc/sys/kernel/panic_print
- 1
panic_on_rcu_stall
当设置为 1 时,将会在 RCU stall 检测信息打印后调用 panic 函数,可以用于生成一个 vmcore 定位 RCU stalls 问题。
| value | 含义 |
|---|---|
| 0 | 不调用 panic(默认行为) |
| 1 | 调用 panic |
softlockup_all_cpu_backtrace
该值控制当 soft lockup 检测器线程检测到一个 soft lockup 时是否收集更多的调试信息。当使能时,每个 cpu 将会被报告一个 NMI 并指示捕获栈帧。
该属性只有当架构支持 NMI 的时候才能使用。
| value | 含义 |
|---|---|
| 0 | 啥也不做(默认行为) |
| 1 | 捕获更多的调试信息 |
softlockup_panic
该值控制当 soft lockup 被检测到时是否触发内核 panic。
| value | 含义 |
|---|---|
| 0 | 不触发 panic |
| 1 | 触发 panic |
soft_watchdog
该值可用于控制 soft lockup 检测器的开启与关闭。
| value | 含义 |
|---|---|
| 0 | 关闭 soft lockup 检测 |
| 1 | 开启 soft lockup 检测 |
soft lockup 检测器会监控每个 cpu 上持续占用 cpu 且没有主动重新调度的线程,进而阻止 ‘watchdog/N’ 线程的运行。
该机制依赖 cpu 正常响应时钟中断来周期性调用 watchdog 时间函数来唤醒 ‘watchdog/N’ 。
watchdog
该参数可用于同时配置 soft lockup 检测器与 NMI watchdog 的关闭与开启 。
| value | 含义 |
|---|---|
| 0 | 关闭 soft 与 hard lockup 检测 |
| 1 | 开启 soft 与 hard lockup 检测 |
soft lockup 检测器与 NMI watchdog 也可以使用 soft_wathdog与nmi_watchdog配置项单独控制。
watchdog_cpumask
该参数用于配置 watchdog 运行的 cpu 核掩码。默认的配置为在所有可能的 cpu 核上运行,但当内核配置开启了 NO_HZ_FULL 功能且通过内核启动参数配置某些核开启 nohz_full 时,这些核上默认将不会运行 watchdog。该掩码可以包含那些离线的核,当这些核稍后变为在线状态时,watchdog 会按照掩码值启动。
通常该掩码被用来在那些因为开启了 nohz_full 功能而没有运行 watchdog 的核上开启 watchdog 以检测这些合上是否存在 lockup。
要在 0 2 3 和 4 核上开启 watchdog,可以执行如下命令:
echo 0,2-4 > /proc/sys/kernel/watchdog_cpumask
- 1
watchdog_thresh
该值可用于控制 hrtimer 与 NMI 事件的频率以及 soft 和 hard lockup 的水位线。默认水位线为 10s,softlockup 的水位线为 2*watchdog_thresh(默认 20s),当将该配置设置为 0 时 lockup 检测功能也会关闭。
总结
上述内容可以分为如下几个类别:
- 配置某种严重异常触发时内核的行为
- 继续尝试执行
- 触发 panic
- 收集更多调试信息
- 重启
- 配置异常检测功能的内部参数
- 检测周期
- 检测判定条件
后续构造各种内核异常条件测试都将以本文的内容为基础!
</article>
[转帖]解读内核 sysctl 配置中 panic、oops 相关项目的更多相关文章
- 【内核】linux2.6版本内核编译配置选项(二)
目录 Linux2.6版本内核编译配置选项(一):http://infohacker.blog.51cto.com/6751239/1203633 Linux2.6版本内核编译配置选项(二):http ...
- 专家解读Linux操作系统内核中的GCC特性
专家解读Linux操作系统内核中的GCC特性 Linux内核使用GNU Compiler Collection (GCC)套件的几个特殊功能.这些功能包括提供快捷方式和简化以及向编译器提供优化提示 ...
- 【内核】linux2.6版本内核编译配置选项(一)
Linux 2.6.19.x 内核编译配置选项简介 作者:金步国 版权声明 本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布.任何人都可以自由使用.转载.复制和再分发, ...
- 【基于mini2440开发板的交叉编译环境及内核树配置.
在学习linux驱动开发过程中,交叉编译环境的配置及内核树的生成无疑是对linux不是十分了解的新人面前的一堵墙.高高大大的墙...笔者在初探这一方向时,就在这2个问题上苦恼了很久.查阅无数资料,大多 ...
- Linux内核参数配置
Linux在系统运行时修改内核参数(/proc/sys与/etc/sysctl.conf),而不需要重新引导系统,这个功能是通过/proc虚拟文件系统实现的. 在/proc/sys目录下存放着大多数的 ...
- 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)
深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...
- [转帖]Nginx安装及配置详解 From https://www.cnblogs.com/zhouxinfei/p/7862285.html
Nginx安装及配置详解 nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP ...
- linux下内核的配置和编译(2017-1-17)
4.1 什么是内核 内核是操作系统内核的简称,内核负责实现操作系统的核心功能,包括资源管理模块,譬如内 存管理.调度系统等等.内核不包括应用程序.对于 linux 内核而言全世界是有一份内核,我们可 ...
- centos7 firewall-cmd 理解多区域配置中的 firewalld 防火墙
原文:https://www.linuxidc.com/Linux/2017-11/148795.htm 现在的新闻里充斥着服务器被攻击和数据失窃事件.对于一个阅读过安全公告博客的人来说,通过访问错误 ...
- GNU Linux系统变量(sysctl配置命令)综合使用
查看全部kernel变量的值 sysctl -a 怎样查看一个系统变量的值 1).cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000 2).s ...
随机推荐
- 大地经纬度坐标系与Web墨卡托坐标系的转换
目录 1. 概述 2. 实现 3. 参考 1. 概述 我在<大地经纬度坐标与地心地固坐标的的转换>这篇文章中已经论述了大地坐标系/地理坐标系的概念,简单来说就是由经度.纬度以及高程(BLH ...
- 云原生批量计算引擎 Volcano社区v1.8.0版本正式发布
本文分享自华为云社区<云原生批量计算引擎 Volcano社区v1.8.0版本正式发布>,作者: 云容器大未来. 北京时间2023年8月17日,Volcano 社区 v1.8.0 版本正式发 ...
- Error: Could not find or load main class org.elasticsearch.tools.java_version_checker.JavaVersionChecker
把elasticsearch目录换到不属于root目录的其他目录就行了
- 【已解决】:Original error: Could not extract PIDs from ps output. PIDS: [], Procs: [“ps: uiautomator”]
报错截图 因为appium服务用的是1.4.x版本,使用的是 uiatumator1.0在android7.0得不到支持,所以获取PIDS得到空. 解决办法 找到Appium安装目录下node_mod ...
- 浅谈sql执行流程、innodb架构设计、buffer pool缓冲池
一.从服务端到数据库sql执行流程: 1.SQL接口:负责处理接收到sql的语句 2.查询解析器:负责将sql变成数据库可以看懂的语言 3.查询优化器:选择最优的查询路径(针对你编写的复杂sql语句生 ...
- Maven 命令安装指定 jar 包到本地仓库
Maven 命令安装指定jar包到本地仓库: mvn install:install-file -Dfile=D:\Java\maven-repository\com\huawei\convert-p ...
- 最火前端Web组态软件(可视化)
友情提示:本文为原创文章,转载请注明出处,商务合作请私信!!! 前言: 随着物联网.大数据等技术高速发展,我们逐步向数字化.可视化的人工智能(AI)时代的方向不断迈进.智能时代是工业 4.0 时代 ...
- #2028:Lowest Common Multiple Plus(n个数的最小公倍数)
Problem Description 求n个数的最小公倍数. Input 输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数. Output 为每组测试数据输出它们的最小公倍数 ...
- 【每日一题】39. Contest(树状数组 / 容斥分治)
补题链接:Here 算法涉及:树状数组.CDQ分治 n支队伍一共参加了三场比赛. 一支队伍x认为自己比另一支队伍y强当且仅当x在至少一场比赛中比y的排名高. 求有多少组(x,y),使得x自己觉得比y强 ...
- 加密原理详解:对称式加密VS非对称式加密
一.前言 在了解加密原理前,我们来看看这样一个故事. 小红和小明是情侣,一天,小红给小明发短信说:"亲爱的,我银行卡上没有钱了,你给我转1万块吧."有过上当受骗经历的人都知道这有可 ...