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

最后找到问题的根因:

NVME硬盘(mdts参数为10)的`max_hw_sectors_kb`设置为4096KB。当进行流式DMA映射时。如果单次请求的数据量过大,超过了128KB,导致无法有效利用IOVA优化机制,进而引发了对iova_rbtree_lock锁的竞争

图片

为了解决这个问题,建议根据DMA优化限制来限制max_hw_sectors的值,这样可以确保系统能够利用到可扩展的IOVA机制,减少锁竞争并提升系统性能。

图片

将原来使用的dma_max_mapping_size()函数改为了dma_opt_mapping_size()函数。

  • dma_max_mapping_size()通常返回系统支持的最大连续内存区域可被映射用于DMA操作的大小;

  • dma_opt_mapping_size()则代表一个更优化的、基于特定设备或场景的DMA映射大小,它可能会根据设备的具体特性或者DMA引擎的能力来提供一个更为高效且适合当前设备的DMA映射大小。

在Linux内核中,dma_opt_mapping_size()函数的具体定义取决于不同的架构和平台。这个函数通常用于获取一个特定设备的DMA优化映射大小,即最适合该设备进行高效DMA操作的内存区域大小

由于每个硬件平台和驱动实现可能不同,dma_opt_mapping_size()的实现和返回值也会有所差异。通常,它会考虑诸如CPU缓存行对齐、设备DMA引擎特性(如最大传输单元MTU)、以及系统对DMA一致性要求等因素来决定最优的内存映射大小。

回归测试中,除了修改max_hw_sectors,另外一块NVME硬盘MDTS参数为5且max_hw_sectors_kb为128,并未出现同样的问题,说明其硬件配置更适合于新的IOVA可扩展机制。

Linux DMA分类介绍:

在Linux内核中,DMA(Direct Memory Access)映射是系统为设备提供直接访问内存的一种机制。为了支持不同的硬件特性和需求,内核提供了两种主要的DMA映射接口:Consistent mapping和Stream mapping。

1. Consistent DMA Mapping
Consistent DMA mapping 主要针对的是需要保持CPU缓存与设备之间数据一致性的场景。在现代多核处理器系统中,为了提高性能,CPU使用缓存来加速对内存的访问。然而,如果设备通过DMA直接访问主内存,而这些内存区域的数据又被缓存了,可能会导致CPU缓存与实际物理内存内容不一致的问题。因此,
consistent DMA映射会在进行DMA操作前确保内存区域的内容已经刷新到内存,并且在DMA操作完成后,如果必要的话,会再次同步内存以确保设备写入的数据也反映到了CPU缓存中

  • 特点:

    • 确保CPU缓存与物理内存一致性。

    • 对于cache-coherent架构(如大多数现代ARM、x86等),内核通常可以利用硬件提供的cache一致性机制。

    • 在非cache-coherent架构上,可能需要额外的软件干预来保证一致性。

2. Stream DMA Mapping
Stream DMA mapping 则更关注于高性能的流式数据传输,它主要用于那些不需要严格保证CPU缓存一致性的场景。例如,在连续大块数据传输过程中,尤其是当设备能够自行管理缓存一致性或者数据无需立即由CPU处理时,可以使用stream mapping。

  • 特点:

    • 不强制保证每次DMA操作前后都进行缓存同步,从而减少不必要的开销,提高DMA数据传输效率。

    • 对于非缓存一致性的硬件平台,stream mapping可能更加适用,因为它避免了不必要的内存屏障或flush操作。

    • 适用于视频流、音频流等实时性要求高、数据量大的传输任务。

总结来说,Consistent DMA mapping强调数据的一致性保障,适合于需要与CPU共享数据且保证数据一致性的场合;而Stream DMA mapping则侧重于优化传输速度和性能,适用于对数据一致性要求相对较低但对带宽和延迟敏感的应用场景。

DMA/IOMMU扩展阅读:

  • 《存储IO路径》专题:数据魔法师DMA

  • 深度剖析:DMA对PCIe数据传输性能的影响

  • 存储系统性能优化中IOMMU的作用是什么?
     

小编每日撰文不易,如果您看完有所受益,欢迎点击文章底部左下角“关注”并点击“分享”、“在看”,非常感谢!

精彩推荐:

  • 年度总结|存储随笔2023年度最受欢迎文章榜单TOP15

  • 过度加大SSD内部并发何尝不是一种伤害

  • NVMe over CXL如何加速Host与SSD数据传输?

  • FIO测试参数与linux内核IO栈的关联分析

  • 为什么QLC NAND才是ZNS SSD最大的赢家?

  • SSD在AI发展中的关键作用:从高速缓存到数据湖

  • 浅析不同NAND架构的差异与影响

  • SSD基础架构与NAND IO并发问题探讨

  • 字节跳动ZNS SSD应用案例解析

  • SSD数据在写入NAND之前为何要随机化?

  • 深度剖析:DMA对PCIe数据传输性能的影响

  • NAND Vpass对读干扰和IO性能有什么影响?

  • HDD与QLC SSD深度对比:功耗与存储密度的终极较量

  • NVMe SSD:ZNS与FDP对决,你选谁?

  • 如何通过优化Read-Retry机制降低SSD读延迟?

  • 关于硬盘质量大数据分析的思考

  • 存储系统性能优化中IOMMU的作用是什么?

  • 全景解析SSD IO QoS性能优化

  • NVMe IO数据传输如何选择PRP or SGL?

  • 浅析nvme原子写的应用场景

  • 多维度深入剖析QLC SSD硬件延迟的来源

  • 浅析PCIe链路LTSSM状态机

  • 浅析Relaxed Ordering对PCIe系统稳定性的影响

  • 实战篇|浅析MPS对PCIe系统稳定性的影响

  • 浅析PCI配置空间

  • 浅析PCIe系统性能

  • 存储随笔《NVMe专题》大合集及PDF版正式发布!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nacos配置回滚

前言 很多时候,我们会配置错一些属性,或者需要回滚某些属性,这时候使用Nacos的回滚功能就很方便了 配置回滚 1、在控制台中,选择左侧导航栏的 “配置管理”,进入历史版本,选择Group和data id&#xff0c…

基于回溯搜索算法优化的Elman神经网络数据预测 - 附代码

基于回溯搜索算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于回溯搜索算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于回溯搜索优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&…

Vue3.4更新 “Slam Dunk“发布!!!

Announcing Vue 3.4 | The Vue Point. vue3.4更新官方文档 在vue2即将结束更新的时候,vue3迎来了一个重要的更新。代号为“🏀 Slam Dunk”,即"灌篮高手"。这个版本进行了很多显著的内部改进,最重要的是模版解析的底层逻…

burpsuite模块介绍之extender(扩展)

extender Burp提供了对第三方拓展插件的支持,使用户能够编写自定义插件或从插件商店中安装拓展插件。这些Burp扩展程序可以以多种方式定制Burp的行为,包括修改HTTP请求和响应、自定义UI、添加自定义扫描程序检查以及访问关键的运行时信息,如代理历史记录、目标站点地图和扫…

松松2023年工作汇报

关注卢松松,会经常给你分享一些我的经验和观点。 今天是2024年1月3号,是我们新年上班的第2天。今天我们的开会内容主要是回顾2023年公司整体发展的情况: 1.人员方面 整个2023年是我们松松公司人员是最稳定的一年,招聘了2位兼职…

架构设计系列9,10

架构设计系列9:前端架构和后端架构的区别 前端架构和后端架构都是软件系统中最关键的架构层,负责处理不同方面的任务和逻辑,两者之间是存在一些区别和联系的,我会从以下几个方面来阐述: 定位和职责 ● 前端架构主要…

三分钟入门基于Visio的流程图绘制操作

Visio是微软旗下的一款流程图及其他框图绘制工具,有着广泛应用,其高效的展示功能和便捷快速的操作也广受认可。今天,我们就以最基本的流程图绘制为例来一起探索一下Visio的基础功能和用法。 声明:这篇教程从实用角度出发&#xf…

第5章 【例题】(部分~)

【例5.1】使用继承的案例 //【例5.1】使用继承的案例 #include <iostream> #include <string> using namespace std; class Person{ //声明基类public:Person(string name1,string id_number,int age1);~Person();void show(); //在基类中定义了成员函数show()pri…

全院级医学影像PACS源码,影像采集传输与存储管理、影像诊断查询与报告管理

全院医学影像PACS源码&#xff0c;数字化影像信息系统源码&#xff0c;带三维影像后处理技术 全院影像设备联网与影像信息数字化存储&#xff0c;建立涵盖全院的PACS/RIS系统&#xff0c;实现从预约、登记、分诊、排队叫号、检查、诊断阅片、报告发布、自助胶片打印等流程化管…

基于深度学习的交通标志图像分类识别系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本文详细探讨了一基于深度学习的交通标志图像识别系统。采用TensorFlow和Keras框架&#xff0c;利用卷积神经网络&#xff08;CNN&#xff09;进行模型训练和预测&#xff0c;并引入VGG16迁移学习…

【obj To 3DTiles 格式转换】 可以自定义经纬高、属性表等参数。

目录 0 引言1 3DTiles数据2 objTo3DTiles2.1 工具的安装2.1.1 拓展&#xff1a;Node.js 和 npm 2.2 工具的使用2.2.1 输出成瓦片数据2.2.2 输出带有坐标参数的瓦片数据 3 查看3DTiles数据 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;Cesiumfor…

探索 Vue 实例方法的魅力:提升 Vue 开发技能(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

苹果小绿灯电路。

苹果充电器上的小绿灯。是5脚供电。一开始的时候&#xff0c;5脚电压是没有的。所以&#xff0c;比较器的3端电压没有&#xff0c;而1端电压呢&#xff1f;受到ACIN DETECTION电路控制&#xff0c;如图所示。当检测到适配器供电的时候&#xff0c;发出高电平SMC_BC_ACOK&#x…

yolo v7支持的设备

将一个深度学习模型&#xff08;在这里是YOLOv7&#xff0c;一个目标检测模型&#xff09;从PyTorch导出到不同的格式&#xff0c;以便在不同平台上进行推理&#xff08;inference&#xff09;。列出的方法包括&#xff1a; PyTorch 转 CoreML&#xff08;适用于 macOS/iOS&am…

Unity中Shader的Reversed-Z(DirectX平台)

文章目录 前言一、在对裁剪坐标归一化设置NDC时&#xff0c;DirectX平台Z的特殊二、在图形计算器中&#xff0c;看一下Z值反转前后变化1、在图形计算器创建两个变量 n 和 f 分别 控制近裁剪面 和 远裁剪面2、带入公式得到齐次裁剪空间下Z值3、进行透视除法4、用 1 - Z 得出Z值反…

docker小白第十一天

docker小白第十一天 dockerfile分析 Dockerfile是用来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本。即构建新镜像时会用到。 构建三步骤&#xff1a;编写dockerfile文件-docker build命令构建镜像-docker run镜像 运行容器实例。即一…

TB-C/C++

1.main函数之前之后执行的代码 设置栈指针初始化静态变量和全局变量&#xff08;.data段内容&#xff0c;已初始化且不为0&#xff09;赋初值&#xff08;.bss段内容&#xff0c;未初始化的全局变量和静态变量&#xff09;传参&#xff08;argc,argv&#xff09;atexit() 在…

C++-类和对象(2)

1.类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下 6 个默认成员 函数。 默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译…

13个干货议题!拓数派携众多大咖共话国产数据库未来趋势

1月6日下午&#xff0c;由拓数派、PolarDB 开源社区、PostgreSQL 中文社区共同主办的《国产数据库共话未来趋势》技术沙龙将在上海举行。 本次沙龙现场大咖云集&#xff0c;来自拓数派、阿里云、平安科技等公司的众多行业技术大咖将与大家面对面交流&#xff0c;与广大技术爱好…

MySQL中的六种日志你都懂么?不懂!那就必须看看

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…