存储系统作为数据的载体,为前端的服务器和应用程序提供读写服务。存储阵列某种意义上来说,是对应用服务器提供数据服务的后端“服务器”。应用服务器对存储系统发送数据的“读”和“写”的请求。然而,不同的应用程序对存储的数据访问类型有所不同。
本文描述典型的不同应用程序的存储io类型。帮助读者了解不同应用程序存储io类型的同时,提供的数据也可以为存储模拟和压力测试的数据参考。
io类型描述:
描述不同应用的存储io类型之前,先要描述存储中的定义io的几个术语:
io大小(io size):io size是应用程序发起,经过操作系统的磁盘子系统,向存储系统发送的读写请求的单位大小。不同的应用程序所发送的io大小都不相同,例如对于数据库应用,它在数据读写的时候io size是8kb,而在事务日志的写入的时候可能是512bytes-64kb不等。所以,通常所说的io size都是一个平均的概念。即某一款应用在一段时间内的平均io大小。
读写比例(read/write):读写比例比较容易理解,就是应用程序读数据和写数据分布。这个在规划存储的时候也至关重要,因为存储系统中的保护级别(raid)的不同,对写有损失。例如raid-5单次写入需要分别对数据位和校验位进行2次读和2次写。所以说,如果用raid-5作为写入比例较高的应用,显然会对性能有很大影响。
顺序与随机读写比例(random/sequential):顺序和随机读写取决与应用的获取数据的方式。通常情况下,如果数据的读取和写入是在连续的磁盘空间上,可以认为是顺序读写。如果应用读取的数据分布在不同磁盘空间,且无固定的顺序,则视为随机读写。由于传统的机械磁盘(闪存盘不再讨论之列)读写数据需要盘面的转动和磁头的移动,这使得随机读写的效率在物理磁盘层面要远小于顺序读写。通常存储系统都都会利用缓存来减少这部分的延迟,减缓因为磁头的移动而带来的性能损失。随机读写的代表的是oltp的数据库文件,顺序读写的代表则是数据的事务日志。
应用程序存储io类型:
下面的表中描述的不同的应用程序对应的io大小、读写比例、随机和顺序比例。表中的比例为一个通用的参考值,比例接近真实各种应用的io类型。当然不能包含全部的应用类型因为根据不同生产环境,数值也会有很大的差异。这里的数据提供一个参考,可以用于使用压力测试工具,例如iometer,模拟不同应用的io负载。
iometer是一款用于单系统和集群系统的i/o子系统度量(measurement)和特征化(characterization)工具,它是一个负载生成器(workload generator),也是一个度量工具(measurement tool),可用于模拟任何程序或benchmark的磁盘或网络i/o操作,在单个或多个(联网)系统上生成并度量负载。
iometer由两个程序组成,iometer和dynamo。iomter是控制程序/gui,它告诉dynamo需要做什么,收集数据结果并总结到一个输出文件。一次只应该运行一个iometer,通常运行在服务器上。
dynamo是一个负载生成器,它没有gui,在iometer的命令下执行i/o操作并记录性能信息,然后返回数据给iometer。一次可以运行多个dynamo,通常是一个副本运行在服务器上,另一个副本运行在每一台客户端上。dynamo是多线程的,每一个副本可以模拟多个客户端程序的工作(workload),每一个正在运行的dynamo副本被称为是一个manager,dynamo中的每一个线程被称为worker。
不同应用通常具有不同的i/o类型,了解应用的i/o类型是为其设计解决方案、排错性能问题的首要工作。那i/o类型通常包括哪些需要考虑的因素?我们今天就来谈一谈i/o类型的几个重要方面。
读 vs. 写
应用程序的读写请求必须量化,了解他们之间的比列,因为读写对存储系统的资源消耗是不通的。了解读写比率直接关系到如何应用缓存、raid类型等子系统的最佳实践。写通常需要比读更多的资源,ssd的写操作相对读更是慢得多。
顺序 vs. 随机
传统存储系统通常都是机械硬盘,因此整个系统设计为尽可能顺序化i/o,减少由于磁盘寻道所带来的延迟。所以,顺序i/o相对随机i/o的性能会好很多。随机小i/o消耗比顺序大i/o更多的处理资源。随机小i/o更在意系统处理i/o的数量,即iops;而顺序大i/o则更在意带宽,即mb/s。因此,如果系统承载了多种不同的应用,必须了解它们各自的需求,是对iops有要求,还是对带宽有要求。这往往需要在两种之间进行折衷考虑。闪盘是一个例外,它没有机械寻道操作,因此对随机小i/o的处理是非常迅速的,由此是读操作。
大i/o vs. 小i/o
我们通常把=32kb的i/o认为是大i/o。就单个i/o来讲,大i/o从微观的角度相比小i/o会需要更多处理资源,不过对于智能存储系统来说,会尽可能把i/o整理为顺序的,以单个操作执行,如此依赖,将多个小i/o整理成单个大i/o处理后,反而会更快。i/o的大小依然取决于应用程序本身,了解i/o的大小,影响到后期对缓存、raid类型、lun的一些属性的调优。
位置引用
数据的位置分布影响到后期对二级缓存或存储分层技术的应用,因为这些技术都会根据i/o的位置分布来判断是否将i/o放置到缓存或快速的层级。位置引用是指那些被频繁的存储位置,我们通常认为最新创建的数据以及最近被访问过的数据,它们周围的数据也同时被访问的可能性会比较大。因此,了解应用程序的i/o位置特性,有助于应用正确的性能优化技术。
稳定 vs. 爆发
i/o数量在一天中的不同时段会有不同的表现。例如,早高峰时段的i/o数量相比下班后的i/o会多出许多。如果能准确预测和估计应用的i/o在不同时间段的稳定性和爆发性,可以正确分配资源,提高资源利用率。在前期的设计阶段,就应该考虑系统是否能够处理i/o高峰期。
多线程 vs. 单线程
多线程是实现并发操作的一种方式,同时也意味着对存储系统的资源消耗更多。这种高iops的请求方式,在有些情况下会造成磁盘繁忙,进而导致i/o排队,增加了响应时间。因此,适度的调整线程数量,不仅可以实现并发,而且能在不拖累整个存储系统的情况下,达到最优的响应时间。
如何使用网络分析仪测量滤波器
【回顾往年CES】irefox全透明智能手机亮相展台
户外显示屏的选择:LCD和LED之间如何选
3.3VCC供电下实现标准的HS-CAN通信
iphone8发布!iPhone8/8plus/iphonex已正式发布:外观/配置/售价正式确定,你是打算入手iPhone8还是继续等待华为mate10
不同应用程序的存储IO类型解析
三星Galaxy S11e搭载大容量电池,和Note10+电池接近
拥抱Z世代,聚焦“型”时尚,联想来酷荣获“年度风尚新地标”
Google来袭:价值1500美元的智能眼镜
基于Arduino的智能垃圾桶设计 电路非常简单
CANFD协议中的概念
又一电子大厂起火!为英伟达供应商
半导体生产过程中的主要设备汇总
如何通过USB连接器保护电源和充电器件的安全
iPhone8什么时候上市?iPhone8最新消息:iPhone8嵌入式Touch ID,iOS11加持!iPhone8功能AR技术惊人
JDL京东物流公司与江苏省常熟市合作,将建设全球首个“无人配送城”
嵌入式Linux根文件系统Ramdisk制作过程
一年赚下750亿美元_光电器件为啥如此疯狂
新日东升:应用于FPC生产的PTH系列产品,得到广泛供应商认可
渊亭科技宣布完成亿元人民币B轮融资