浅析I/O处理过程与存储性能的关系
浅析I/O处理过程与存储性能的关系
https://community.emc.com/docs/DOC-28653
性能”这个词可以说伴随着整个IT行业的发展,每次新的技术出现,从硬件到软件大多数情况下都围绕着性能提升而展开。“摩尔定理”指出CPU的处理速度每18个月会翻一番,但是进入21世纪的第二个十年来,似乎它的速度慢了下来。但是IT行业的各个行业领导者们,还是不断在计算机的性能寻求突破,继续挑战物理极限。细看存储行业,每款新的存储产品的推出,也围绕着如何更快、更好的服务前端服务器的I/O请求为中心。本文从I/O(Block)的流向介绍,试图解读整个I/O流与存储性能之间的些许联系。本文作为一篇存储基础的介绍文章,帮助读者了解看似简单的数据读写中的更多细节。
更多信息
存储I/O流与存储性能:
存储I/O(后文简称I/O)的处理过程就是计算机在存储器上读取数据和写入数据的过程。这种存储器可以是非持久性存储(RAM),也可以是类似硬盘的持久性存储。一个完整的I/O可以理解为一个数据单元完成从发起端到接收端的双向的过程。在企业级的存储环境中,在这个过程会经过多个节点,而每个节点中都会使用不同的数据传输协议。一个完整的I/O在每个不同节点间的传输,可能会被拆分成多个I/O,然后从一个节点传输到另外一个节点,最后再经历相同的过程返回源端。
下图演示了一个文件在经过整个I/O路径中每个节点所进行的变化(以EMC Symmetrix存储阵列为例):
整个I/O流经历一下几个节点:
- File System – 文件系统会根据文件与Block的映射关系,通过File System Manager将文件划分为多个Block,请求发送给HBA。
- HBA – HBA执行对这一系列的更小的工作单元进行操作,将这部分I/O转换为Fibre Channel协议,包装成不超过2KB的Frame传输到下一个连接节点FC Switch。
- FC Switch – FC Switch会通过FC Fabric网络将这些Frame发送到存储系统的前端口(Front Adapter)。
- Storage FA – 存储前端口会将这些FC 的Frame重新封装成和HBA初始发送I/O一致,然后FA会将数据传输到阵列缓存(Storage Array Cache)
- Storage Array Cache – 阵列缓存处理I/O通常有两种情况:1.直接返回数据已经写入的讯号给HBA,这种叫作回写,也是大多数存储阵列处理的方式。2. 数据写入缓存然后再刷新到物理磁盘,叫做写透。I/O存放在缓存中以后,交由后端控制器(Disk Adapter)继续处理,完成后再返回数据已经写入的讯号给HBA。
- Disk Adapter – 上述两种方式,最后都会将I/O最后写入到物理磁盘中。这个过程由后端Disk Adapter控制,根据后端物理磁盘的RAID级别的不同,一个I/O会变成两个或者多个实际的I/O。
根据上述的I/O流向的来看,一个完整的I/O传输,经过的会消耗时间的节点可以概括为以下几个:
- CPU – RAM, 完成主机文件系统到HBA的操作。
- HBA – FA,完成在光纤网络中的传输过程。
- FA – Cache,存储前端卡将数据写入到缓存的时间。
- DA – Drive,存储后端卡将数据从缓存写入到物理磁盘的时间。
下面的表中根据不同阶段的数据访问时间做了一个比较,一个8KB的I/O完成整个I/O流向的大概耗时。(表中的耗时根据每秒的传输数据整除获得,例如HBA到FA的速度有102,400KB/秒除以8KB得到78 μs)。根据表中的数据显而易见,I/O从主机的文件系统开始传输到存储阵列的缓存在整个这个I/O占比很小,由于机械硬盘的限制,最大的耗时还是在DA到物理磁盘的时间。如果使用闪存盘,那这个数据会大幅缩小,但是与其他几个节点的传输时间相比,占比还是比较大的。
8KB I/O的传输 |
耗时(单位:μs) |
扩大1,000,000耗时 |
CPU到RAM的传输,166MHz 64位总线 |
6 μs |
6 sec |
HBA到FA,100MB/秒速率 |
78 μs |
1 min 18 sec |
FA到Cache(Symmetrix DMX Director 2.5GHz) |
26 μs |
26 sec |
DA到物理磁盘,73GB 15,000 rpm, Seek 3.6ms,latency 2.0ms |
5,700 μs |
1 hr 35 min |
可以看到,存储阵列的缓存在整个I/O流中所起到的作用是至关重要。缓存的处理效率与大小,直接影响到I/O处理的速度。而然,在实际的环境中,即使存储阵列的缓存工作得当,主机的I/O也不会达到100 μs也就是0.1ms的水平,通常在1-3ms左右,就会认为I/O处理处于比较高性能的模式。原因就是因为另外两个因素“数据头处理”和“并发”。
1. “数据头处理“由于I/O流中每个I/O的数据组成并不是只包含数据,如下图所示,一个I/O除了数据以外还包含了Negotiation,Acknowledgement用来负责在I/O流中的每个节点传输和进行管理的。其中包含和TCP/IP一样的“Handshaking“信息以及流控制的信息,比如初始化传输,结束通讯等等。Header中则会定义一些例如CRC校验的信息,保证数据的一致性。所有这些数据的处理都会耗费一定的处理资源,增加I/O流的耗时。
2.“并发“。由于I/O流整个过程中不可能只同时处理一个I/O,所有的I/O在HBA,FC,FA和DA处理的过程中都是已大量并发的情况下进行。而主要的耗时取决于I/O队列的等待,虽然存储阵列会在并发上进行优化。同一个处理Slice的处理还是会一队列形式进行。入下图所示,当存储同时面对多个I/O的处理的情况,总会有某个I/O会在整个流的最后出来,而增加I/O的耗时。所以说,在I/O流的每个节点出现瓶颈,或者短板的时候。I/O的耗时就会增加。
综上所述,I/O流与存储性能的关系可以总结为以下几点:
- 完成一个I/O流主要经历过的节点有HBA,FC网络,存储前端口FA,存储缓存、存储后端口,物理磁盘。而很个过程中最耗时的是物理磁盘。
- 存储阵列的缓存的大小和处理方式直接影响到I/O流的性能,也是定义一个存储阵列优劣的重要指标之一。
- I/O的处理速度通常会远离理论值,原因多个并发量较大而造成的队列延迟。
- 优化I/O的方式可以从多个节点入手,而最显著的效果是提升物理磁盘的速度。因为存储阵列会把尽可能多的数据放入缓存,而当缓存用满以后的数据交换则完全取决于物理磁盘的速度。
- 适当选用合适的RAID级别,因为不同的RAID级别的读写比例大不相同,可能使得物理磁盘处理耗时几倍增加。参考:浅谈RAID写惩罚(Write Penalty)与IOPS计算
浅析I/O处理过程与存储性能的关系的更多相关文章
- Azure 进阶攻略 | 电脑跑分你会,但虚拟机存储性能跑分的正确姿势你造吗?
想学生时代,小编最爱做的就是研究电脑硬件,然后给自己.朋友和童鞋装机.装好后呢?当然要第一时间跑分了!各种跑分软件运行一遍,不断优化,不断测试.终于得到一个满意成绩,截图分享到网上显摆一下.当年为啥就 ...
- [转帖]深度: NVMe SSD存储性能有哪些影响因素?
深度: NVMe SSD存储性能有哪些影响因素? http://www.itpub.net/2019/07/17/2434/ 之前有一个误解 不明白NVME 到底如何在队列深度大的情况下来提高性能, ...
- Bytom侧链Vapor源码浅析-节点出块过程
Bytom侧链Vapor源码浅析-节点出块过程 在这篇文章中,作者将从Vapor节点的创建开始,进而拓展讲解Vapor节点出块过程中所涉及的源码. 做为Vapor源码解析系列的第一篇,本文首先对Vap ...
- SQL Server 2016 查询存储性能优化小结
SQL Server 2016已经发布了有半年多,相信还有很多小伙伴还没有开始使用,今天我们来谈谈SQL Server 2016 查询存储性能优化,希望大家能够喜欢 作为一个DBA,排除SQL Ser ...
- 使用 esxtop 识别存储性能问题
可以使用交互式 esxtop 实用程序提供连接到 VMware ESX 主机的各种设备的 I/O 衡量指标. 使用 esxtop 配置监控 要监控每个 HBA 的存储性能,请执行以下操作: 通过在命令 ...
- 请说出ArrayList,Vector, LinkedList的存储性能和特性
请说出ArrayList,Vector, LinkedList的存储性能和特性 解答:ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都 ...
- RAID 5 是一种存储性能、数据安全和存储成本兼顾的存储解决方案
可用容量:(n-1)/n的总磁盘容量(n为磁盘数) 原因:RAID5把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上,其中任意N-1块 ...
- ArrayList,Vector, LinkedList的存储性能和特性?
ArrayList,Vector, LinkedList的存储性能和特性? ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入或删除时非常麻烦. ...
- 使用FIO工具测试块存储性能
Linux实例和Windows实例都推荐使用FIO工具测试块存储性能. 说明 您也可以使用其他工具测试块存储性能,但不同工具测试出来的硬盘基准性能会有差异,如dd.sysbench.iometer ...
随机推荐
- java接口定义的静态方法和默认如何在类实现的时候使用
在 JDK1.8,允许我们给接口添加两种非抽象的方法实现: 1.默认方法,添加 default 修饰即可: 2.静态方法,使用 static 修饰:示例如下: 这样可以实现接口的增强,那我们在类实现接 ...
- codeforces水题100道 第二十七题 Codeforces Round #172 (Div. 2) A. Word Capitalization (strings)
题目链接:http://www.codeforces.com/problemset/problem/281/A题意:将一个英文字母的首字母变成大写,然后输出.C++代码: #include <c ...
- 转:git windows中文目录乱码问题解决
Git的Windows版本Msysgit对中文的支持不够好 当使用时,会出现以下三种情况的中文乱码: 1.ls不能显示中文目录 解决办法:在git/git-completion.bash中增加一行: ...
- css !important用法以及CSS样式使用优先级判断
之前一直看到很多css中都有!important这个样式,一直不知道有什么作用的,今天在网上详细了解了一下,看了别人的博客,顺便转载收藏一下 css !important用法CSS样式使用优先级判断 ...
- jstorm开发指南-写个简单的jstorm应用
jstorm开发指南-写个简单的jstorm应用 发表于 2015-07-18 | 分类于 大数据 | 暂无评论 jstorm 是阿里巴巴开源的基于storm采用Java重写的一套分布 ...
- 链表一元多项式计算器的实现(Java语言描述)
链表的经典应用,程序在多项式相加同类项合并还有小的瑕疵,有待改进. 代码如下: package 一元多项式计算器; public class PolyNode { private double a; ...
- 【CF827E】Rusty String 调和级数+FFT
[CF827E]Rusty String 题意:给你一个01串,其中部分字符是'?',?可以是0或1,求所有可能的d,满足存在一种可能得到的01串,在向右移动d格后与自己相同. $n\le 5\tim ...
- Unity3D笔记 英保通十 射线碰撞器检测
射线碰撞检测可以用来检测方向和距离: 通过Physics.RayCast光线投射来实现:常用于射击利用发射的射线来判断.还有对战中刀剑交战中.. 一.要涉及到RayCast和RayCastHit 1. ...
- Docker学习计划二:基本配置
来源:http://www.ityouknow.com/docker/2018/03/07/docker-introduction.html Docker 将应用程序与该程序的依赖,打包在一个文件里面 ...
- express-session相关用法
通常我们在node的登录注册小案例时,我们经常要用到express-session做会话处理. express-sessionApi使用方法:https://github.com/expressjs/ ...