首页 > 系统相关 >科普文:软件架构Linux系列之【图解存储 IO性能优化与瓶颈分析】

科普文:软件架构Linux系列之【图解存储 IO性能优化与瓶颈分析】

时间:2024-11-05 20:47:16浏览次数:3  
标签:存储 性能 Queue 软件架构 IO Linux 优化

概叙

科普文:软件架构Linux系列之【Linux的文件预读readahead】-CSDN博客

科普文:软件架构Linux系列之【并发问题的根源:CPU缓存模型详解】-CSDN博客

从上面冯诺依曼结构下的cpu、内存、外存之间的延迟就可以看出,磁盘I/O性能的发展远远滞后于CPU和内存,因而成为现代计算机系统的一个主要瓶颈。

存储IO性能优化一直是一个老大难的问题,同时多数时候存储性能问题是一个全局性问题,需要通盘考虑应用、DB、主机、网络、存储设备全IO链路栈的各层可能出现的性能问题或是性能瓶颈。

本文将对存储IO性能优化和瓶颈分析做一个概叙,希望对大家有帮助和启示。

一、不同应用数据的 IO 模型特点

首先我们来了解一下不同的应用程序类型的典型IO模型特点,让大家有个大体印象以便于下文章节的展开。

下表总结描述了不同的应用程序对应的IO大小、读写比例、随机和顺序比例情况,表中的比例为一个通用参考值。不能包含全部的应用类型,同时根据不同生产环境数值也会有很大的差异。

这里表1的数据仅提供一个通用的参考。

二、存储 IO 性能指标和计算公式

1. 三大存储IO性能指标:

三大性能指标分析中,对于大IO的应用使用吞吐量来评测性能更加科学;而小IO的应用,比如数据库,则需要通过IOPS和延时的指标来评测性能,高IOPS和低延时同时满足的情况下,才能应对高并发且快速的数据库访问,如表2。

2. 其它重要的存储性能指标(表3):

3. 各IO性能指标的计算和相互转换公式

 IOPS、IO size、带宽、QueueDepth之间的计算转换公式(如图1):

4. 各性能指标在vdbench基准测试工具中的体现(如图2)

图2 各性能指标在vdbench基准测试工具中的体现

三、存储 IO 性能优化

1. 优化策略

存储IO性能优化工作需要一定的策略性(如表4):

2. 优化方案

存储设备层优化方案(如图3):

科普文:软件架构Linux系列之【独立磁盘冗余阵列RAID 5实验】-CSDN博客

科普文:软件架构网络系列之【高性能网络/存储之基础:TCP/IP、DMA、RDMA、Infiniband、RoCE、iWARP】_存储网络技术发展 roce-CSDN博客

科普文:软件架构网络系列之【高性能存储网络的革新之路 NVMe over RDMA】-CSDN博客

图3 存储设备层优化方案 

网络层优化方案(图4):

图4 网络层优化方案 

存储传输协议方案选择(如图5):

科普文:软件架构Linux系列之【RoCE应用:工商银行率先完成金融高性能存储网络体系重构】吴仲阳 曾金 余学山-CSDN博客

科普文:软件架构网络系列之【RDMA技术实现:一文搞懂 RoCE v2】_roce v1 v2-CSDN博客

图5 存储传输协议方案选择 

 主机层优化方案(如图6):

图6 主机层优化方案

应用层优化方案(如图7):

图7 应用层优化方案 

3. 传统关系型数据库的IO性能的瓶颈点分析(如图8)

图8 Oracle 数据文件和日志文件读写过程

如表5所示,OLTP系统中,单进程的LGWR进程有可能成为一个大瓶颈,特别是在无法保证在线日志IO写性能的情况下,很容易出现排队等LGWR进程的情况。这其实也是很容易引发问题的一个点,是传统关系性数据库一个相对脆弱的地方。

表5 关系型数据库data和log数据IO读写模型

OLTP数据库存储性能优化思路(如图9):

4. IO并发队列的考虑

队列深度(Queue-Depths)是指主机端单个LUN可以一次被允许并行的处理的I/O数目(SCSI命令)。例如QD=32,代表可以在同一个时刻并行对该LUN做32个IO操作。

在SCSI命令层面,每个从发送端(initiator)主机HBA卡端口发送到接收端(target)存储HBA卡端口的IO request都会消耗一个Queue条目。

一般来说,更高的队列深度相当于更好的性能。如果存储控制器/节点到达最大队列深度并耗尽,存储控制器将拒绝新的传入命令并通过返回QFULL回应主机从而引起性能的降低。如果大量的主机访问存储控制器,应该仔细计划,以避免QFULL条件显著降低系统性能和在某些系统会导致错误。

有关队列深度(Queue-Depths)计算的深入分析(表6):

表6 队列深度计算的深入分析

有关队列深度(Queue-Depths)注意事项:

队列深度的存在,在流水线上的每个不同环节设置缓冲空间(Buffer),使正常流水线数据传送从紧耦合变成了松耦合。

简单来讲从主机访问存储存在很多层的Queue(软硬件在传输过程中设计的Buffer大小,将串行流水线操作模拟成并行操作的一种并发交易模拟机制)。

在IO处理没有卡顿时,有Queue 和没有Queue 的效果是一样的。使用Queue-Depths 传送机制的系统中,整个系统的吞吐量和延迟由性能最差的那个部位决定。

标签:存储,性能,Queue,软件架构,IO,Linux,优化
From: https://blog.csdn.net/Rookie_CEO/article/details/143524527

相关文章

  • python: Parent-child form operations using ttkbootstrap
    #encoding:utf-8#版權所有2024©塗聚文有限公司#許可資訊查看:言語成了邀功的功臣,還需要行爲每日來值班嗎?#描述:主、子表單窗體傳值Parent-childformoperations#Author:geovindu,GeovinDu塗聚文.#IDE:PyCharm2023.1python3.11#OS:......
  • 【Azure App Service】使用Microsoft.Office.Interop.Word来操作Word文档,部署到App Se
    问题描述在.NET项目中,使用Microsoft.Office.Interop.Word组件来操作Word文档,使用了Microsoft.Office.Interop.Word.Document对象中的Open和SaveAs方法。##打开文件doc=app.Documents.Open(refinputFile,refnullobj,refnullobj,refnullobj,refnullobj,refnullobj,......
  • Linux 操作系统如何启用 secure boot(不限发行版)(简单的方法)
    Linux操作系统如何启用secureboot(不限发行版)(简单的方法)很多方法比较复杂,而且容易出现各种不兼容问题,这里我记录我的一种比较简单的方法。该方法在我的kalilinux(基于debian)已测试成功。参考文献:archwiki安装sbctlarchlinux:sudopacman-Ssbctlgentoo:sudoemerge......
  • metastore无法启动的问题(MetaException(message:Error creating transactional connec
    查看日志MetaException(message:Errorcreatingtransactionalconnectionfactory) atorg.apache.hadoop.hive.metastore.RetryingHMSHandler.<init>(RetryingHMSHandler.java:84) atorg.apache.hadoop.hive.metastore.RetryingHMSHandler.getProxy(RetryingHMSHandle......
  • 软件架构中对前后端分离的学习
    前后端分离架构目录前后端分离架构前端后端前端MVVM架构MVVM(Model-View-ViewModel)架构模式是一种广泛应用于软件开发中的设计模式,特别是在现代前端开发和移动应用开发中。它旨在通过将应用程序分为三个核心部分——模型(Model)、视图(View)和视图模型(ViewModel)——来简化用户界面......
  • 第47篇 简单IOC介绍
    1.IOC的各种叫法依赖反转(DependencyInversion),SOLD原则中的D控制反转(InversionofControl)依赖注入DependencyInjection2.什么是依赖注入一个类或对象依赖于另一个类或对象,即一个对象需要另一个对象来完成某个功能OOP中,一个对象通常需要依赖其他对象来实现功能,这一现......
  • Linux服务器配置acme.sh,自动申请和续签SSL证书
    官方教程:https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E一、安装acme.shcurlhttps://get.acme.sh|[email protected]服务器改成letsencryptacme.sh--set-default-ca--serverletsencrypt二、生成证书acme.sh--issue-dwww.test.com--......
  • QueryExecutionListener 实现 SPARK SQL 数据血缘
    背景数据血缘是数据资产管理非常重要的一部份,团队现在已经实现通过Hook上报HiveSQL任务数据血缘,通过impalalineage日志获取impala任务数据血缘。随着SparkSQL计算引擎的使用,现针对该场景设计可行的血缘获取方案。方案思路分析在spark的源码中,以Scala的形式提供了......
  • CCleaner Professional v6.28 中文授权版
    开发者Piriform打造的 CCleanerProfessional 是业内公认的高效PC清理和优化工具之一。它通过自动清理功能,能定期清理垃圾文件,保持电脑运行效率。同时,提供的自动隐私保护功能可在不使用浏览器时自动清理历史记录和Cookies。该版本已授权,可以使用全部功能。操作说明:1、将......
  • Linux中Kafka单机部署
    一、安装JDK请看:Linux中安装JDK1.8二、安装kafka下载地址 https://kafka.apache.org/downloads1、上传解压到/usr/local/kafkatar-zxvfkafka_2.13-2.6.3.tgzmvkafka_2.13-2.6.3kafka2、创建数据与日志目录zk数据目录(如依据配置中ip和server.[1|2|3]中的数字对应......