【翻译】 如何应对内核警告?

2023-11-07

LWN.net需要你!

没有订阅者,LWN就根本不存在。 请考虑注册订阅,帮助LWN继续出版。

作者: Jonathan Corbet
2021年11月18日
内核在内部提供了许多宏,允许代码在出错时产生警告。 然而,它并没有提供很多关于警告发出时应该发生什么的指导。 Alexander Popov最近发布了 一个补丁系列,为系统对警告的响应增加了一个选项;该系列似乎不太可能以接近其目前的形式被应用,但它确实成功地引发了一场关于如何处理警告的讨论。

警告是通过WARN()WARN_ON_ONCE()等宏发出的。 默认情况下,警告文本被发送到内核日志,然后继续执行,就像警告没有发生一样。 有一个sysctl钮(kernel/panic_on_warn),可以在警告发出时导致系统恐慌,但对于系统管理员来说,在忽略问题和使系统完全停止之间缺乏选择。

Popov的补丁集以kernel/pkill_on_warn旋钮的形式增加了另一个选项。 如果设置为非零值,这个参数会指示内核在警告发生时杀死所有正在运行的进程的线程。 波波夫说,这种行为比什么都不做增加了系统的安全和保障,同时又不像直接杀死系统那样具有破坏性。 它可能会杀死试图利用系统的进程,并且在一般情况下,防止一个进程在已知出错的情况下运行。

有一些人反对这个方案,首先是Linus Torvalds,他指出,当警告发出时正在运行的进程可能与警告本身没有任何关系。 例如,问题可能发生在一个中断处理程序中,或者在其他一些情况下。"向一个随机的进程发送信号只是巫术编程,和其他任何事情一样可能导致其他非常奇怪的故障",他说。

Torvalds建议,一个更好的方法可能是创建一个新的/proc文件,当一个影响系统的事件(如警告)发生时,它将提供信息。 一个用户空间的守护进程可以轮询该文件,在发出警告时读取相关信息,然后自己着手杀死进程,如果这看起来是正确的事情的话。 Marco Elver补充说,有一个跟踪点可以提供相关信息,只需做一点工作。 Kees Cook提出了一个实现方案,但Popov不喜欢;他说,这种方法会让一个进程在警告发生后继续执行,而当用户空间对这种情况采取行动时,可能已经太晚。

James Bottomley认为,到目前为止讨论的所有方法都是不正确的。 他说,如果警告发生,内核就不再处于已知状态,任何事情都可能发生:

WARN的意思是发生了一个意外的状况,这意味着内核本身处于一个未知的状态。 你不能通过杀死和重启随机的东西来恢复,你必须重新初始化到一个已知的状态(即重置系统)。 我们做WARN而不是BUG的一些原因是,我们相信状态污染是有限的,如果你很小心,系统可以继续处于退化的状态,如果用户愿意接受这种风险。

因此,他说,唯一合理的政策是继续(接受可能发生坏事的风险)或杀死系统并重新开始--这是内核现在提供的选项。

波波夫曾建议 ELISA项目,该项目正在努力将Linux部署到安全关键的应用中,可能会支持增加pkill_on_warning。 但在该项目工作的Lukas Bulwahn(但他很谨慎地表示他不代表ELISA)不同意。 他说,正确的解决方案是在警告时杀死系统,但也要确保警告只在事情真正脱离轨道的情况下发出:

只有当某些东西没有按照开发者的期望配置,或者内核被置于通常是意料之外的状态,并且很少被暴露在开发者的批判性思维中,被测试和在其他系统中使用时,才应该发出警告。警告不应该被用于一些信息性的东西,这仍然允许内核在一般预期的环境中以适当的方式继续运行。

他补充说,真正的安全还需要确保对panic()的调用在所有情况下都能真正停止系统--这一点并不像人们想象的那么容易证明。 例如,一个panic()的调用可能会在试图获得一个锁时挂起。

Christoph Leroy,警告应该在内核内处理,以便系统能够尽可能地保持运行。 鉴于此,他继续说:"pkill_on_warning似乎很危险,而且不相关,可能比什么都不做更危险,特别是WARN可能因为与运行中的线程无关的原因而触发"。 然而,Popov不同意这样的观点,即我们可以期望所有的警告都在内核中得到正确的处理:

有一种非常强烈的反对在内核源代码中加入BUG*()的力量。所以有很多情况下,WARN*()被用来处理严重的问题,因为内核开发者没有其他选择。

事实上,他的补丁在启用新选项时,警告的行为几乎与BUG()调用相同,BUG()调用默认会使运行中的进程立即结束。 正如他所指出的,开发人员在试图增加这些调用时遇到了阻力,因为他们的效果被认为是太严重了。

现在还不清楚增加一个选项使警告也变得更严重是解决这个问题的最好办法。 不过,这次讨论可能会产生一个好的结果,那就是对警告的含义和产生警告时应该发生什么进行更好的定义。 像内核中的许多机制一样,警告宏只是在没有任何整体设计的情况下发展起来的。 现在有了很多关于开发者如何使用警告的经验,参与一些设计可能会使内核整体上更加强大。

这篇文章的索引条目
内核 警告


(登录后可发表评论)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【翻译】 如何应对内核警告? 的相关文章

  • 【翻译】疫苗正在拯救世界!但内容交付网络首先做到了吗?

    2020年1月 一种激进的公共卫生干预措施被介绍给世界 禁闭 在中国推出它之前 它从未在好莱坞以外的任何地方大规模使用过 没有人相信现实生活中的民众会接受连续几个月被关在家里的情况 即使他们的生命取决于此 与所有的预期相反 禁闭正在控制一种
  • 【翻译】 迁移到Python 3

    本文由LWN用户为您带来LWN net的订阅者使得这篇文章 以及它周围的一切 成为可能 如果您喜欢我们的内容 请购买订阅 使下一组文章成为可能 2011年2月9日 本文由Ian Ward提供 Python 3 0于2008年底发布 但到目前
  • 【翻译】我们建立了一个.NET操作员SDK(所以您不必这样做)。

    我们用C 语言构建了一个 NET操作者SDK 因此您可以用C 或任何 NET语言构建自己的Kubernetes操作者 当然也 有Go Operator SDK 还有我们的Java Operator SDK 那么为什么不为 NET社区提供一些
  • google翻译的一个错误

    如图 音标标着yi朗读却是ai
  • 【翻译】如何在你的IT转型中浪费数以亿计的资金

    你担任范德雷工业公司的首席执行官已经有几年时间了 这是一家在运输领域存在了几十年的巨无霸 真正的战略 你真的希望股价能尽快上涨 这样你就可以在命运之轮转动之前 在最佳的时间点卖掉你的股票 而董事会也不可避免地要把你赶走 你已经厌倦了蒲公英
  • IP协议的服务类型(翻译RFC 1349)

    目录 1 简介 2 目标和理念 3 服务八位字节类型规范 4 TOS字段的规范 5 Internet协议中TOS字段的使用 5 1 Internet控制消息协议 ICMP 5 2传输协议 5 3应用协议 6 ICMP和TOS字段 6 1无法
  • 【翻译】 如何应对内核警告?

    LWN net需要你 没有订阅者 LWN就根本不存在 请考虑注册订阅 帮助LWN继续出版 作者 Jonathan Corbet 2021年11月18日 内核在内部提供了许多宏 允许代码在出错时产生警告 然而 它并没有提供很多关于警告发出时应
  • Scratch 3.0源码 之 多语言实现

    文章目录 实现方式 初始版本 多语言版本 1 页面文件 2 配置文件 3 建立关联 语法说明 案例1 带HTML标签写法 建议写法 案例2 带超链接写法 建议写法 Scratch 3 0中各类显示文本默认是英文 如果不支持自己的语言 或者自
  • 【翻译】 Linux 与无人机的未来

    请考虑订阅 LWN订阅是 LWN net 的生命线 如果您喜欢这些内容并希望看到更多 您的订阅将有助于确保 LWN 继续蓬勃发展 请访问此页面加入我们 让 LWN 继续在网络上传播 作者 Nathan Willis 2015 年 10 月
  • 看在上帝的份上,不要使用 .npmignore

    译者 Lara npmignore 是一个可以给Node js项目造成严重危害的文件 你应该立即停止使用该文件 除了下面所列的一种情况 npm中已经永久内置了一个更好的替代文件 并且更易用更安全 什么是 npmignore 比如我下载了一个
  • 【翻译】什么是 "政策即守则"?

    身份很容易 毕竟 每个人都有一个 认证 可能就更不复杂了 任何使用智能手机的人每天都要认证几十次才能使用它 这甚至还没有涉及银行 工作或社交媒体所需的远程服务 也许正是这种明显的简单性吸引了我在大约五六年前进入身份系统的世界 在这之前的几年
  • gitlab CI/CD :创建一个复杂的pipeline流水线

    教程内容原文地址 Tutorial Create a complex pipeline 当前教程版本 16 1 文章目录 先决条件 创建一个项目来保存 Docusaurus 文件 创建初始CI CD的配置文件 添加一个job来构建站点 添加
  • 【翻译】 一个新的暂停/休眠的基础设施

    LWN订阅者的好处订阅LWN的主要好处是帮助我们继续出版 但除此之外 订阅者可以立即获得所有的网站内容和获得一些额外的网站功能 请今天就注册吧 作者 Jonathan Corbet 2008年3月19日 在参加会议时 你们的编辑多年来一直注
  • 【翻译】白人男性在改善性别多样性方面的作用是什么?

    我们都知道 或者说现在应该知道 多元化的团队和组织更成功 更有创造力 有更好的留任率 并能带来更健康的工作场所文化 强调这些观点的数据是很多的 然而 技术团队在这方面往往是落后的 艾米丽 张在她的书 Brotopia 中认为 在一个如此有力
  • csharp:百度翻译

    参考 http api fanyi baidu com api trans product index http developer baidu com wiki index php title E5 B8 AE E5 8A A9 E6 9
  • js利用google翻译接口把网页翻译成各国语言

    网页翻译为德语 Translate Page To German a href 网页翻译为德语 Translate Page To German a 网页翻译为西班牙语 Translate Page To Spanish a href a
  • 【翻译】如何使混合型会议不至于太糟糕

    混合会议又回来了 人们正在享受它们 并发现它们很有用 这是犹他大学的会议科学家约瑟夫 艾伦博士的新研究的惊人发现 这个发现让艾伦博士感到惊讶 当然也让我感到惊讶 像大多数远程团队工作的专家一样 我长期以来一直建议采用 一个远程 所有远程 的
  • 【翻译】#拥抱行动和心理安全--思考根本原因而非根本人物

    本杰明 富兰克林曾经说过 生命中唯一的两个确定性是死亡和税收 但是 如果他是一名工程师 他可能会在这个名单上加上另一个 即故障 脸书的工程师们无疑会同意最近的故障 似乎是由于运行一个命令 无意中关闭了他们骨干网络的所有连接 不仅关闭了脸书
  • 【翻译】 DMA和get_user_pages()

    LWN net需要你 没有订阅者 LWN将根本不存在 请考虑注册订阅 帮助LWN继续出版 作者 Jake Edge 2018年12月12日 Linux管道工会议 在2018年Linux Plumbers大会 LPC 的RDMA微型会议上 J
  • 【翻译】 zswap 压缩交换缓存

    您知道吗 LWN net 是一份由订阅者支持的出版物 我们依靠订阅者来维持整个运作 请通过订阅来帮助我们 让 LWN 继续在网络上运行 2013年2月12日 本文由 Seth Jennings 投稿 交换是性能的最大威胁之一 即使在快速固态

随机推荐

  • 【pygame】font 模块

    pygame font Pygame 中加载和表示字体的模块 函数 pygame font init 初始化字体模块 pygame font quit 还原字体模块 pygame font get init 检查字体模块是否被初始化 pyg
  • libmad 解码mp3并且播放测试

    测试环境 window64 codeblock mingw64 下载libmad源码后发现自带的minimad c是用了linux的API 所以修改了下 将 F d mp3音乐文件解码后将pcm数据写入F d pcm 并且用ffplay播放
  • 阿里 前端 规范_阿里前端开发规范

    前端代码规范 Front Standard Guide 前端 JS 项目开发规范 规范的目的是为了编写高质量的代码 让你的团队成员每天得心情都是愉悦的 大家在一起是快乐的 引自 阿里规约 的开头片段 现代软件架构的复杂性需要协同开发完成 如
  • 【Liunx常用操作】利用iso镜像制作并使用本地yum源(CentOS7.6为例)

    提示 为保证文章的正确性和实用性 文章内容可能会不定时优化改进 若您有建议或者文章存在错误请私信留言或评论指正 下面以CentOS7 6操作系统为例 介绍具体的操作步骤 如果本文对你有帮助 记得关注加收藏 1 文章前言 在私网环境中部署的L
  • 【多线程中的线程安全问题】线程互斥

    1 线程间的互斥相关背景概念 先来看看一些基本概念 1 临界资源 多线程执行流共享的资源就叫做临界资源 2 临界区 每个线程内部 访问临界资源的代码 就叫做临界区 3 互斥 任何时刻 互斥保证有且只有一个执行流进入临界区 访问临界资源 通常
  • uni-app 打包之后日志输出和调试

    背景 真机调试时console log可以在控制台输出 但是 打包上线后 我们想查看apk的运行情况和调试日志 竟然官网没有方式 只有android app记录运行日志 通过abd指令 这是最无语的事 我还得学abd指令 逗我呢 反正收集用
  • 【木头Cocos2d-x 032】我是定时器(第01章)—我爱单线程之schedule介绍

    我是定时器第01章 我爱单线程之schedule介绍 本来今天我应该要做其它事情的 但是和一位网友提起了schedule 我无法按捺心中对写教程的热血和冲动 所以我就决定要写关于schedule的使用心得了 小若 我噗 永远都是那么唠叨 笨
  • Golang(Go语言)中Protobuf的使用

    什么是protobuf protobuf也叫protocol buffer是google 的一种数据交换的格式 它独立于语言 独立于平台 google 提供了多种语言的实现 java c c go 和 python 每一种实现都包含了相应语
  • CSS属性选择器的高级用法(内含一道编程测试题)

    目录 0 简述属性选择器 1 href url 设置页面上所有包含href属性并且属性值为https www baidu com的a元素 2 class 设置页面上所有含有class属性并且属性值的词列表的某个词等于baidu的div元素
  • 社科院和英国斯特灵大学在职博士,选择真的很重要

    现代社会飞速发展 稍不留神就会被落下 读博可以接触到更多的社会经验 学习心得 交流探讨 掌握最新的行业发展动态 对自己未来的发展有更清楚的规划 中国社科院和英国斯特灵大学可以作为自己的一个新的起点 给自己一个新的前方 很多的职场人员未来追求
  • 合并两棵二叉树

    还是使用 的递归写法套路情况 八股文 类似于归并排序的一样的情况 package Tree public class megertwotree 树中常见的递归套路题目 八股文写法 先处理根节点 然后就是左边 右边 根的左孩子节点 递归调用函
  • 学习Linux的第八天

    安装软件 rpm 安装工具 处理 rpm 格式的软件包 主版本号 子版本号 修订版本号 编译版本号 本地获取 一 第一种安装方式 1 mount dev sr0 mnt 挂载命令 光盘设备 挂载点目录 临时生效 仅在主机运行状态下生效 什么
  • node.js创建第一个应用

    node js创建第一个应用 1 引入require模块 我们是用require指令来载入http模块 并将实例化的http赋值给变量http 实例如下 var http require http 2 创建服务器 http createSe
  • 数据库表字段设置为自增时,使用实体类插入或者更新数据时报错解决(hibernate框架)

    问题 数据库表字段存在自增列 使用实体类新增或者更新数据时 会报错 hibernate框架 报错如下 2021 05 06 15 12 04 WARN org hibernate engine jdbc spi SqlExceptionHe
  • 尺取法 — 详解 + 例题模板(全)

    尺取法 顾名思义 像尺子一样取一段 借用挑战书上面的话说 尺取法通常是对数组保存一对下标 即所选取的区间的左右端点 然后根据实际情况不断地推进区间左右端点以得出答案 尺取法比直接暴力枚举区间效率高很多 尤其是数据量大的时候 所以说尺取法是一
  • 【图像处理】PIL与OpenCV的读取、显示、保存图片/ numpy与Image的转换

    文章目录 PIL 读取 显示 保存图片 OpenCV 读取 显示 保存图片 采用 matplotlib 显示以 OpenCV 读取的图片 numpy 和 Image 的相互转换 Image 转换成 numpy numpy 转换成 Image
  • 【LVGL 学习】样式(style)属性学习

    属性 尺寸和位置 要理解尺寸和位置是如何起作用的 首先要理解 LVGL 的盒子模型 官方文档给出了一张图 可以很好地描述一个控件的框架结构 在设置尺寸的时候 长和宽指的是包括边框 border 厚度的长宽 也就是不包括轮廓 outline
  • 【LeetCode-中等题】39. 组合总和

    文章目录 题目 方法一 递归 回溯 题目 这题的nums数组里面不存在重复元素 所以也就无需做去重操作 但同一个元素可以被无限次取 说明每次递归中的for循环的开始位置就是自己 nums数组里面存在重复元素 去重版本 方法一 递归 回溯 参
  • 全面介绍插入排序

    何谓 插入排序 其概念如是说 每次将一个待排序的记录 按其关键字大小插入到前面已经排序好的序列中 直到全部记录插入完成为止 概念的东西总是有些抽象 也可称其为基本思想 上述插入排序的概念同样也可说是插入排序的基本思想 抽象的东西理解起来总是
  • 【翻译】 如何应对内核警告?

    LWN net需要你 没有订阅者 LWN就根本不存在 请考虑注册订阅 帮助LWN继续出版 作者 Jonathan Corbet 2021年11月18日 内核在内部提供了许多宏 允许代码在出错时产生警告 然而 它并没有提供很多关于警告发出时应