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版正式发布!

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

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

相关文章

勒索检测能力升级,亚信安全发布《勒索家族和勒索事件监控报告》

评论员简评 近期(12.08-12.14)共发生勒索事件119起,相较之前呈现持平趋势。 与上周相比,本周仍然流行的勒索家族为lockbit3和8base。在涉及的勒索家族中,活跃程度Top5的勒索家族分别是:lockbit3、siegedsec、dragonforce、8base和…

玩机技巧|电脑下方的任务栏卡死如何解决

你是否遇到过,电脑下方的任务栏点不动,开始菜单点击了都没有反应的情况。你是否还在强制性关机(按电源)的解决这个问题。废话不多说,上干货 首先点击键盘上的ctrlshiftesc键,弹出任务管理器,如…

[C#]使用纯opencvsharp部署yolov8-onnx图像分类模型

【官方框架地址】 https://github.com/ultralytics/ultralytics.git 【算法介绍】 YOLOv8 是一个 SOTA 模型,它建立在以前 YOLO 版本的成功基础上,并引入了新的功能和改进,以进一步提升性能和灵活性。具体创新包括一个新的骨干网络、一个新…

【REST2SQL】02 GO连接Oracle数据库

Oracle数据库我用的最多,先研究Oracle,Go连接Oracle并实现REST和SQL服务。 1 Oracle数据库的安装 我这里安装使用的是Oracle 11g , 安装过程省略5217字。 2 安装Go-ora依赖 go get github.com/sijms/go-ora/v2 安装成功后在GOPATH目录可见: 3 创建一…

【数据挖掘】基于 LightGBM 的系统访问风险识别(附源码)

基于 LightGBM 的系统访问风险识别 文章目录 基于 LightGBM 的系统访问风险识别一、课题来源二、任务描述三、课题背景四、数据获取分析及说明(1)登录https://www.datafountain.cn并获取相关数据(2)数据集文件说明(3&a…

【数据结构】数组实现队列(详细版)

目录 队列的定义 普通顺序队列的劣势——与链队列相比 顺序队列实现方法: 一、动态增长队列 1、初始化队列 2、元素入队 3、判断队列是否为空 4、元素出队 5、获取队首元素 6、获取队尾元素 7、获取队列元素个数 8、销毁队列 总结: 动态增长队列…

气泵方案|车载充气泵的芯片和传感器

无线车载充气泵方案由一块PCBA板集成其所需的功能,其充气原理是发动机通过两根三角带驱动气泵曲轴,进而驱动活塞进行打气,打出的气体通过导气管导入储气筒。另一方面储气筒又通过一根导气管将储气筒内的气体导入固定在气泵上的调压阀内&#…

放大镜Scratch-第14届蓝桥杯Scratch省赛真题第3题

3. 放大镜(50分) 评判标准: 10分:满足"具体要求"中的1); 15分:满足"具体要求"中的2); 25分,满足"具体要求"中的3&#xff…

数据库攻防学习

免责声明 本文仅供学习和研究使用,请勿使用文中的技术用于非法用途,任何人造成的任何负面影响,与本号及作者无关。 Redis 0x01 redis学习 在渗透测试面试或者网络安全面试中可能会常问redis未授权等一些知识,那么什么是redis?redis就是个数据库&#xff…

Unity 欧盟UMP用户隐私协议Android接入指南

Unity 欧盟UMP用户协议Android接入指南 官方文档链接开始接入mainTemplate.gradle 中引入CustomUnityPlayerActivity 导入UMP相关的包java类中新增字段初始化UMPSDK方法调用![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d882171b068c46a1b956e80425f3a9cf.png)测…

k8s的网络

k8s的网络 k8s中的通信模式: 1、pod内部之间容器与容器之间的通信 在同一个pod中的容器共享资源和网络,使用同一个网络命名空间,可以直接通信的 2、同一个node节点之内,不同pod之间的通信 每个pod都有一个全局的真实的ip地址…

商智C店H5性能优化实战

前言 商智C店,是依托移动低码能力搭建的一个应用,产品面向B端商家。随着应用体量持续增大,考虑产品定位及用户体验,我们针对性能较差页面做了一次优化,并取得了不错的效果,用户体验值(UEI&…