NVMe SSD IO压力导致宕机案例解读-1

近日,小编在内核pci模块变更提交记录里面,看到一条由联想工程师提交的一份变更,主要是针对DMA相关优化。小编根据提交内容,根据自己的理解分享给大家。(原始git地址获取,请在后台私信输入关键字“IO宕机”)

图片

根据提交的commit记录来看:

  • 发生场景:FIO压测

  • 测试环境:448 core AMD CPU+NVME SSD

  • 故障现象:系统出现CPU soft lockup

图片

根据Call trace分析解读“soft lockup”问题,CPU#126在执行特定操作时被卡住超过23秒。这种情况意味着该CPU在处理某个任务时未能及时响应系统调度,导致了软锁定(长时间无响应)。具体错误信息如下:

  • watchdog: BUG: soft lockup - CPU#126 stuck for 23s! [swapper/126:0]:这行表示系统的看门狗机制检测到CPU #126在执行idle进程(swapper进程)时发生了软锁定,已经停滞了23秒。

  • RIP: 0010:_raw_spin_unlock_irqrestore+0x21/0x50:RIP寄存器记录了程序崩溃时的指令指针位置,这里指向的是_raw_spin_unlock_irqrestore函数内部偏移地址为0x21的位置,而该函数总长度为0x50字节。这个函数通常用于解除自旋锁并恢复中断状态。

  • 调用栈情况:

    • 出现故障前最后执行的是fq_flush_timeout+0x7d/0xd0,这是一个与数据刷新相关的函数,可能涉及到I/O队列或缓存的数据刷写至磁盘的操作。

    • 然后是中断处理相关的函数如irq_exit_rcusysvec_apic_timer_interrupt等,表明CPU在执行这些中断服务例程时发生问题。

根据Call trace简单来说,问题现象是在处理I/O队列数据刷新过程中,CPU因某种原因陷入了无限循环或者无法退出的状态,进而引发了软锁定

根据这个现象,联想工程师用ftrace抓取了故障函数stack,发现在fq_flush_timeout函数运行了超过20s

图片

ftrace里面还可以进一步看到,存在锁竞争(Lock Contention)。由于IOVA(I/O虚拟地址)flush队列机制的存在,大部分 CPU 核心都在尝试获取 iova_rbtree_lock 锁,但是由于资源有限,多个核心不能同时获得该锁,导致了严重的锁竞争现象。这会导致处理器核心等待锁的时间增加,进而影响系统的整体性能和响应速度。

图片

  1. 系统检测到CPU 351上发生了硬锁定故障,NMI watchdog(非屏蔽中断看门狗)检测到了这一异常情况。

  2. 错误发生在执行native_queued_spin_lock_slowpath函数时,该函数用于自旋锁的获取操作,当多个线程竞争同一把锁且都无法获得时,会进入慢速路径。

  3. 调用栈显示,大部分内核线程都在尝试获取名为"iova_rbtree_lock"的锁,这个锁与IOVA flush队列机制有关,用于管理IO虚拟地址空间的分配和释放

  4. fq_ring_free函数花费了超过10秒的时间,这进一步印证了锁竞争导致的问题,因为正常情况下,这样的操作不应该需要这么长的时间来完成。

  5. 在调用栈中,可以看到nvme驱动的相关操作,包括数据映射、DMA unmapping等,这些操作触发了IOVA地址的释放,进而引发了对"iova_rbtree_lock"的争抢。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【模拟电路】EDA软件、绘制原理图和PCB

一、EDA软件 二、常用的PCB的EDA软件 三、PCB生产工艺制造流程 四、国产嘉立创EDA专业版使用 五、EDA软件-绘制开关电路原理图 六、原理图转PCB绘制 七、检查DRC 八、PCB下单流程 一、EDA软件 EDA是电子设计自动化(Electronic Design Automation)的缩写…

清风数学建模排版

Overview 链接:https://pan.baidu.com/s/11QBw3zBFNicwQWvWCfW1Gg?pwdepnz 提取码:epnz Latex 范文排版练习 b站刘海洋latex工作室,待还愿 Word基础 Word VBA,待还愿 fnF4:重复上一步操作 ctrlY:恢…

视频通话录制 方案 教程

一些基本概要 1 市面流行的音视频产品,都包含一对一、一对多、多对多通话,云端录制等这些基本功能,有些厂商支持本地服务录制。 2 本地服务录制,云端录制区别 两个录制区别在于,本地服务端录制的 SDK 要求部署在 …

简易机器学习笔记(八)关于经典的图像分类问题-常见经典神经网络LeNet

前言 图像分类是根据图像的语义信息对不同类别图像进行区分,是计算机视觉的核心,是物体检测、图像分割、物体跟踪、行为分析、人脸识别等其他高层次视觉任务的基础。图像分类在许多领域都有着广泛的应用,如:安防领域的人脸识别和…

对技术行业的深度思考

技术行业是当今世界最为热门和发展迅猛的领域之一。无论是互联网、人工智能还是区块链,技术的快速发展正在改变着我们的生活和社会。然而,我们是否真正思考过技术在我们生活中的影响和意义?本文将对技术行业展开深度思考,探讨其带…

LAMP平台搭建

目录 LAMP平台概述 1、Apache 网站服务基础 1.1、Apache 简介 (1)Apache 的起源 (2)Apache 的主要特点 1.2、安装 httpd 服务器 (1)准备工作 (2)源码编译及安装 &#…

【MySQL】MySQL如何查询和筛选存储的JSON数据?

MySQL如何查询和筛选存储的JSON数据? 一、背景介绍二、支持的JSON数据类型三、基础数据3.1 创建表3.2 插入 JSON 数据3.3 查询 JSON 数据 四、操作函数4.1 JSON_OBJECT4.2 JSON_ARRAY4.3 JSON_EXTRACT 一、背景介绍 JSON(JavaScript Object Notation)是一种轻量级的…

文心一言 VS 讯飞星火 VS chatgpt (171)-- 算法导论13.2 4题

四、用go语言,证明:任何一棵含n个结点的二叉搜索树可以通过 O(n)次旋转,转变为其他任何一棵含n个结点的二叉搜索树。(提示:先证明至多n-1次右旋足以将树转变为一条右侧伸展的链。) 文心一言: 这是一个有趣的问题&…

【JUC】Volatile关键字+CPU/JVM底层原理

Volatile关键字 volatile内存语义 1.当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量值立即刷新回主内存中。 2.当读一个volatile变量时,JMM会把该线程对应的本地内存设置为无效,直接从主内存中读取共享变量 所以volatile…

【番外】【Airsim in Windows ROS in WSL2-Ubuntu20.04】环境配置大全

【番外】【Airsim in Windows &ROS in WSL2-Ubuntu20.04】环境配置大全 【前言(可省略不看)】1.在windows上面部署好UE4AirSim联合仿真环境2.在windows上面部署wsl2系统以及在wsl2上面部署ubuntu系统3.安装好ubuntu系统之后,目前只能在命…

使用开源 Upscayl 工具放大图片

Upscayl 是一个基于人工智能的图像放大工具,可以用来将低分辨率的图片放大到高分辨率。Upscayl 使用了一种称为超分辨率重建的技术,可以生成逼真的高分辨率图像。 在本教程中,我们将介绍如何使用 Upscaly 工具放大图片。 准备工作 下载&a…

基于Java在线考试管理系统设计与实现(源码+部署文档)

博主介绍: ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到 Java项目精品实…