当前位置: 首页 > article >正文

如何快速排查SSD IO延迟抖动问题?

一块固态硬盘设计背后,有硬件控制器,NAND闪存颗粒、DRAM,还有固件FTL算法等。SSD设计的本身其实是一件特别复杂的过程,需要考虑各种客户需求且要保证可靠性、性能、稳定性。

图片

针对SSD的相关性能测试,SNIA也有专门针对SSD相关测试SPEC,同时各个SSD厂商也有很多独有的测试用例(一家SSD厂商的测试用例很多也是靠多年的填坑积累完善的)。现在看似SSD行业门槛很低,随便买个主控、NAND/DRAM颗粒就可以组装了(的确市场上有鱼龙混杂,有投机倒把之辈)。但是,如果真心要做出一款性能稳定的SSD,不但需要强大的技术实力,更需要丰富的经验积累。

图片

SSD出厂之前经过了严格的测试,到了用户手里,是不是就不会有延迟问题呢?答案是否定的。比如下面一幅图就是业内最经典案例,4KB随机写最开始性能会很高,因为SSD内部还没启动GC,当SSD随机预测完全后,此时4KB随机写才是稳态的性能。很多客户在拿到SSD后测试的数据和经过一段时间测试后的会出现明显的差异,在不了解SSD随机预热稳态的机理时,就会出现很多误解。用户使用方式,对延迟问题的定义也会有存在很大的差异。经常会出现一种情况:“IO延迟,在某些场景,是一种不是问题的问题!”

图片

不同的客户的业务场景,千差万别,SSD的设计也不无法100%兼顾所有复杂的IO负载类型。出现延迟问题并不可怕,可怕的是无从入手,不能快速debug定位延迟的来源

IO延迟定位前,我们先了解下Windows和Linux内核中的IO堆栈,简单理解IO的产生、流动过程、最终目的地。

第一图:Windows环境中IO堆栈

图片

第二图:Linux环境中IO堆栈

图片

从上面的IO堆栈示意图来看:

  • Windows和Linux IO堆栈的基本逻辑是一致的

  • IO在软件层产生,经过文件系统、内核模块、驱动层,最终达到硬件存储设备SSD。

IO延迟通常是应用客户先感知到,用户也是从最上层感知,但是经过这么层的路径,最终的延迟来源是在哪一层?这个并不能很清晰的展示,这也导致很多场景下,SSD也成为了背锅侠,不管什么原因导致的IO异常,首先都会被先扣在SSD头上。所以,快速IO定界也是帮助SSD解放“背锅”压力的有效办法

目前用于IO延迟定界场景的软件,也有多种:

  • 在Windows场景下:开源的工具有perfmon,以及SNIA SSSI Workload I/O Capture Program (WIOCP) 推荐的hiomon,可以记录随机读写、顺序读写的延迟、队列深度QD,IO延迟统计等。

图片

图片

  • Linux场景下,常用的经典开源工具也有blktrace,可以记录从IO产生,到最终返回的时间,跟IO分析工具iostat的延迟来源保持一致,与iostat一起搭配定位延迟问题最为合适。在硬件定位过程中,I2D代表进入内核IO workqueue队列到发送给硬件的时间。D2C代表驱动IO下发到硬件完成IO返回的时间。

图片

图片

除了上面基础的开源IO分析工具,目前第三方也有专业的商用软件,比如Calypso的IOProfiler、Teledyne Lecroy的WorkloadIntelligence。

图片

IO延迟定界过程中,如果定位延迟来源于硬件,此时,SSD的延迟记录能力也是至关重要。市场上目前只有少数的厂商在数据中心客户的强烈的需求下,有延迟定位功能。大部分SSD厂商还没这个功能。不过,随着OCP也开始关注SSD延迟定位能力,相信后续会有更多的场景加入这个功能

图片

在拥有Latency Monitoring功能的SSD上,可以清楚知道,在上层用户看到延迟抖动的时候,SSD内部硬件延迟的真实分布,可以快速确定延迟是不是来自于硬件,让数据中心和SSD供应商都可以更加清楚业务的行为与SSD硬件的适配情况。

图片

以下几个是IO异常的案例,供大家参考:

案例1: 业务模型与延迟的关系

延迟升高的时候,队列深度和进程数也在相应地增加。这种情况多数是跟业务的使用方式有关。

图片

案例2:Trim对延迟的影响

读延迟的升高的时间段,正好看到系统有Discard/Trim的操作。Trim操作会给读延迟带来极大的影响。虽然Trim可以提升随机性能(扩展阅读:SSD写放大的优化策略要统一标准了吗?),建议用户执行Trim要在业务低谷触发,不然上层会看到非常明显的延迟抖动。

图片

案例3:CPU core与延迟的关系

CPU所有core中只有少数core或者个别core出现IO繁忙的情况,导致IO集中,延迟升高。这个就需要从系统角度优化IO使用模式。

图片

图片

案例4: 同一负载下,不同SSD表现也有明显差异

  • A/B/C/D/E/F:6个盘是消费级NVME SSD,容量在480GB-512GB

  • G/H/I:3个盘是企业级NVME SSD,容量在960GB-1000GB

图片

同一个负载下,企业级SSD G表现最差,消费级SSD E表现相对稳定,可以媲美企业级SSD。通常情况下,企业级SSD相对消费级SSD做了很多IO的优化。

图片

结语

IO延迟分析是一项复杂而有趣的工程,需要带着好奇深挖每一个信息,总会有不同的风景。如果你有不同的经验分享,欢迎留言交流~


http://www.kler.cn/a/107701.html

相关文章:

  • HP G10服务器ESXI6.7告警提示ramdisk tmp已满
  • ubuntu连接orangepi-zero-2w桌面的几种方法
  • 量化交易系统开发-实时行情自动化交易-3.4.1.2.A股交易数据
  • Python中异常处理小测验
  • mongoDB的安装及使用
  • uniapp+vue2 设置全局变量和全局方法 (兼容h5/微信小程序)
  • 信钰证券:华为汽车概念股持续活跃 圣龙股份斩获12连板
  • 汇编运算符和表达式
  • 如何使用gpt提高效率
  • 【每日一题】合并两个有序数组
  • 持续集成部署-k8s-服务发现-Ingress
  • vue 无限滚动插件 vue-seamless-scroll
  • 高级深入--day39
  • react关于类组件this指向
  • UML中类之间的六种主要关系
  • 【2023.10.27练习】C语言-字符串转换
  • exFAT文件系统的目录与文件存储
  • 京东平台数据分析(京东销量):2023年9月京东吸尘器行业品牌销售排行榜
  • 抢占式调度是如何发生的
  • 大厂面试题-JVM为什么使用元空间替换了永久代?
  • Spring Cloud Gateway + Knife4j 4.3 实现微服务网关聚合接口文档
  • golang工程——grpc-gateway 转发http header中自定义字段到grpc上下文元数据
  • 原始流,缓冲流性能比较
  • 淘宝API接口获取商品信息,订单管理,库存管理,数据分析
  • 计算机网络重点概念整理-第七章 网络安全【期末复习|考研复习】
  • 场效应管器件