KDMP真实案例之主机 I/O 请求没有正常结束导致系统重启

news2025/6/19 18:02:37

目录

查看kdump文件

导致系统崩溃的寄存器指向的内存地址

导致重启的汇编指令

导致重启的源码

block/blk-core.c文件简介

导致重启的blk_finish_request函数源码

函数源码解读

系统重启原因

处理意见


查看kdump文件

各字段意思说明
KERNEL:显示内核文件的路径。
DUMPFILE:显示崩溃转储文件的路径和类型(部分转储)。
CPUS:显示系统中的 CPU 数量。
DATE:显示系统崩溃的日期和时间。
UPTIME:显示系统崩溃前的正常运行时间。
LOAD AVERAGE:显示系统在崩溃前的负载情况。
TASKS:显示系统中运行的任务数。
NODENAME:显示主机名。
RELEASE:显示系统的内核版本号。
VERSION:显示系统内核的详细版本信息。
MACHINE:显示系统所在的机器架构。
MEMORY:显示系统可用内存大小。
PANIC:显示导致系统崩溃的错误信息。
PID:显示导致系统崩溃的进程 ID。
COMMAND:显示导致系统崩溃的命令。
TASK:显示与崩溃相关的进程信息。
CPU:显示导致系统崩溃的 CPU 核心编号。
STATE:显示导致系统崩溃的进程状态。在以上截图中,进程处于 TASK_RUNNING(运行状态),并且系统崩溃了。

根据日志中的信息,系统崩溃的原因是一个内核 BUG,具体位置在 block/blk-core.c 文件的第 2500 行。

导致系统崩溃的寄存器指向的内存地址

各类寄存器说明

RIP:指令指针寄存器,记录了下一条将要执行的指令在内存中的地址。
RSP:栈指针寄存器,记录了当前栈顶的地址。
EFLAGS:标志寄存器,记录了 CPU 的运行状态和控制信息,如进位标志、零标志、中断使能标志等。
RAX、RBX、RCX、RDX、RSI、RDI、RBP、R8-R15:通用寄存器,用于存储计算过程中的数据和地址等信息。
FS、GS:段寄存器,用于存储指向各自段的基址。在这里,FS 存储了一个用户空间的地址,而 GS 存储了一个内核空间的地址。
CR0-CR4:控制寄存器,用于控制 CPU 的运行模式和特性。
CR2、CR3:页表寄存器,用于存储页表的基地址。
DR0-DR7:调试寄存器,用于存储调试信息,如断点地址、访问权限等。

导致重启的汇编指令

以上是Linux内核版本3.10.0-123.8.1.el7中blk-core.c文件中的blk_finish_request()函数的汇编代码,代码采用x86_64体系结构。以下是代码的简要说明:

  1. 使用cmpl指令将rbx寄存器的值加上偏移量0x50得到的内存地址中的值与0x1进行比较。
  2. 如果比较结果不相等,则跳转到blk_finish_request()函数的第51行。否则,将从rbx寄存器的值加上偏移量0x38得到的内存地址中的值移动到rax寄存器中。然后通过将0x190添加到rax中得到内存地址,并将其存储在rdi寄存器中。最后,使用callq指令调用位于0xffffffff8114d460内存地址的函数laptop_io_completion()。
  3. 跳转到blk_finish_request()函数的第51行
  4. 这一行包含指令“ud2”。这是一个未定义的指令,用于向操作系统发出异常信号。通常情况下,它代表程序遇到错误并且无法继续执行。

导致重启的源码

block/blk-core.c文件简介

block/blk-core.c是Linux内核源代码中的一个文件,它实现了内核I/O子系统中的核心块层功能。块层提供了一个接口,让其他内核子系统和用户空间程序能够在块设备上执行I/O操作,例如硬盘驱动器和固态硬盘;blk-core.c文件包含管理块设备和处理这些设备的I/O请求的函数和数据结构。它实现了关键功能,例如请求合并、I/O调度和I/O限制,以提高性能并确保在竞争I/O请求之间公平分配资源。

导致重启的blk_finish_request函数源码

函数源码解读

这段代码是 Linux 内核中块设备层的代码,用于完成块 I/O 请求。该函数接受两个参数:一个是指向request结构体的指针,另一个是错误码。代码的主要作用是完成 I/O 请求,释放相关的资源,并通知请求的发起者该操作已完成。具体来说,它执行以下几个操作:

  1. 如果请求已经被标记,就调用 blk_queue_end_tag() 函数结束标记。
  2. 检查请求是否仍在等待处理,如果是,就使用 BUG_ON() 抛出 BUG 错误。
  3. 如果 laptop_mode 开启且请求的类型是文件系统请求,就调用 laptop_io_completion() 函数来通知系统已完成请求。
  4. 删除定时器,以便释放相关资源。
  5. 如果请求没有被标记为不需要准备,就调用 blk_unprep_request() 函数。
  6. 帐户 I/O 完成,以便更新块设备的统计信息。
  7. 如果请求有回调函数(end_io),就调用它来通知请求已经完成,否则,如果请求是双向请求,则将其下一个请求放回队列中;否则,将请求放回队列中。

系统重启原因

云主机 I/O 请求没有正常结束导致系统重启

处理意见

选用高版本内核观察测试

注:

任何内核版本都有异常重启风险

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/426403.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你真的会用iPad吗,如何使iPad秒变生产力工具?在iPad上用vscode写代码搞开发

目录 前言 视频教程 1. 本地环境配置 2. 内网穿透 2.1 安装cpolar内网穿透(支持一键自动安装脚本) 2.2 创建HTTP隧道 3. 测试远程访问 4. 配置固定二级子域名 4.1 保留二级子域名 4.2 配置二级子域名 5. 测试使用固定二级子域名远程访问 6. iPad通过软件远程vscode…

通俗举例讲解动态链接】静态链接

参考动态链接 - 知乎 加上我自己的理解,比较好懂,但可能在细节方面有偏差,但总体是一致的 静态链接的背景 静态链接使得不同的程序开发者和部门能够相对独立的开发和测试自己的程序模块,从某种意义上来讲大大促进了程序开发的效率&#xf…

Mybatis【环境搭建】

目录 一、Maven 环境配置 1、配置 pom.xml 1.1、依赖的 jar包 1.2、防止资源导出失败 2、在resources下编写 Mybatis核心配置文件 二、搭建结构 1、编写mybatis工具类(utils) 2、编写实体类(pojo) 3、Mybatis 的实现&…

一篇搞定Lambda和Stream流

一、Lambda表达式 jdk8中的语法糖,优化某些匿名内部类的写法,函数式编程的重要体现,不再关注对象是什么,更关注数据进行了什么操作 1、练习 练习1 练习2 练习3 练习4 练习5 2、省略规则 参数类型可以省略方法体只有一句代码时…

【Leetcode】消失的数字 [C语言实现]

👻内容专栏:《Leetcode刷题专栏》 🐨本文概括: 面试17.04.消失的数字 🐼本文作者:花 碟 🐸发布时间:2023.4.10 目录 思想1:先排序再查找 思想2:异或运算 代…

TensorFlow 图像深度学习实用指南:1~3 全

原文:Hands-On Deep Learning for Images with TensorFlow 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象&#xf…

移动版OpenAI,手机的杀手还是救星?

AI登陆手机,难度因人而异。 原本小编还以为「2023年是属于元宇宙的一年」,实在没想到以ChatGPT为代表的AI技术能在这么短的时间内抢走元宇宙的风头,成为2023年的技术关键词。从OpenAI到搜索引擎、从绘图工具到游戏公司,几乎所有「…

跨境电商的行业现状与发展趋势分析

随着互联网的不断发展,跨境电商作为一种全新的商业模式已经逐渐崭露头角。跨境电商的出现,让越来越多的商家看到了扩大市场的机会,也为消费者提供了更加便利、更加优质的购物体验。本文将从跨境电商的定义、行业现状、发展趋势等方面进行探讨…

windows下的wsl2如何进行docker数据卷挂载

这是数据卷挂载命令 docker run -it -v /宿主机绝对路径目录: /容器内目录 镜像名 在Linux中我们可以直接使用该命令进行挂载,那在windows如何把我们c盘d盘下的目录挂载到容器呢,其实只要在路径前面加上/mnt就好了,下面来演示一下 首先拉取一…

About RadaeePDF Classic SDK for iOS Crack

About RadaeePDF Classic SDK for iOS Crack RadaeePDF iOS版经典SDK可帮助您构建更好的移动应用程序。使用功能强大的PDF阅读器引擎及其一系列专业功能现在是一个快速而简单的过程。适用于iOS的RadaeePDF Classic SDK在智能手机、平板电脑、笔记本电脑、敞篷车和台式机上提供了…

运行时内存数据区之方法区(一)

方法区 栈、堆、方法区的交互关系 方法区的理解 oracle官网上的描述: 《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行拉圾收集或者进行压缩。”但对于HotspotJVM而言&#x…

“影视级”直播呈现,保利威1号演播厅与企业共建行业直播新标准 | 爱分析调研

前言:3月22日,保利威举办了2023春季线上发布会,推出首个企业级直播基地——“1号演播厅”。会上重磅发布了《2023中国企业直播应用标准》并启动“企业直播运营官千英计划”,开启企业直播历史性新篇章。 01 企业直播迈入3.0阶段 …

AB91-1 HESG437479R1 HESG437899

AB91-1 HESG437479R1 HESG437899 以硅为基材的集成电路共有Si BJT(Si-Bipolar Junction Transistor)、Si CMOS、与结合Bipolar与CMOS 特性的Si BiCMOS(Si Bipolar Complementary Metal Oxide Semiconductor)等类。由于硅是当前半导体产业应用最为成熟的材料,因此&am…

Linux基础篇(四)打包和解压

目录 一、打包和压缩 二、zip 和 unzip 三、tar指令 一、打包和压缩 1.是什么? 打包:将东西放到一起。 压缩:采用某种压缩算法,压缩它的存储空间。 2.为什么? 便于传输,或者归档&a…

【pygame游戏开发】这几个经典游戏,勾起了少年的快乐

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 今天给大家分享几个好玩有趣的小游戏, 既提升了学习的兴趣,又提升了学习效率,告别枯燥的学习。 代码软件: python 3.8: 解释器 pycharm: 代码编辑器 一、飞机大战 1. 所需素材 …

大气颗粒物PMF源解析实践技术应用

查看原文>>>【案例实践】大气颗粒物PMF源解析实践技术应用 目录 第一章、PMF源解析技术简要及其输入文件准备 第二章、PMF源解析技术的原理,PMF软件的实操及应用举例 第三章、PMF源解析结果的优化及误差评估 其它大气环境相关推荐 目前,大…

纯跟踪算法(Pure persuit)

纯跟踪局部路径规划器 在得到局部路径之后,本项目使用纯跟踪算法通过横向控制器反馈控制小车的转角,从而达到跟踪局部路径的效果,经实验确认,跟踪效果很好。 纯跟踪算法原理如下: 在搭建模型时可以将小车看作车辆运…

MySQL 8.0原理与实战一网打尽,甲骨文数据库专家硬刚5年之作

根据权威数据库技术排名网站DB-Engines今年4月的最新数据,MySQL是全球最流行的开源数据库,没有之一。在所有数据库排名中,MySQL仅次于Oracle,“屈居”亚军之位。但大家从截图中可以看出,MySQL与Oracle的得分差距已经非…

【C语言】分支语句和循环语句(上)

【C语言】分支语句和循环语句(上)前言1.分支语句和循环语句2.什么是语句3.分支语句(选择语句)3.1 if语句3.1.1 悬置else3.1.2 if的书写形式对比3.1.3 在线练习3.2 switch语句3.2.1 switch语句中的break的作用3.2.2 default子句3.2…

记一次csdn图片访问失败问题

前言 家里电脑写博客 一直图片查看不了 以为csdn问题 后来发现可能是网络的问题 公司电脑访问都是正常的,并且换个浏览器也是一样 记录一下排查过程 过程 法1 chrome 关闭对csdn不安全访问 回归一下 可能要找img-blog.csdnimg.cn这个地址的试一下 法2 换dns …