3323|1

6424

帖子

17

TA的资源

版主

 

从排队论谈谈IO路径的优化和评价 [复制链接]

转自 http://mp.weixin.qq.com/s?timest ... GuWiUkfehsFNJYAfccR*-Jj0Y=

随着SSD的广泛应用,SSD的高性能和低延迟的特点也被广泛认知。基于SSD和新型的NVM的存储方案和存储系统继承了这些优点,并对传统的存储造成了不小的冲击。在很多场合,这种替换都有立竿见影的效果;也有一些情况,需要通过一些软件、系统层面的调整才能发挥效果。为了最大发挥新型的存储的能力,有必要在充分了解的基础上做出最佳的配置。本文介绍的方法重点以存储IO路径优化作为案例分析,但是它的核心原理也可应用到其他IO路径的优化上(例如网卡等设备)。
对于一个存储系统来说,它的主要IO特性可以从IO带宽(或者IOPS)以及IO的平均延迟等方面来描述。如果忽略存储系统没有特别的Cache设计, IO特性不会明显受IO发送的具体地址所影响。在这种简化的模型里,存储系统相当于一个简单的服务系统,而IO请求则可以理解为一个一个排队等待服务的客户。借助排队论的基本原理,我们可以对存储系统进行服务模型的估计,并据此来分析和评估服务质量。当然,具体的存储系统所提供的服务质量与很多因素有关。下图的系统中,有多个服务的窗口,并且通过路由网络将它们连接起来构成一个排队系统。
640.jpg
在传统的SATA HDD中,虽然系统中有多个盘片和多组磁头,但是不同的磁头之间使用一个伺服电机来确定轨道位置,因此同一时刻只能有一个磁头读写数据。这样的话无论有多少IO请求,都必须一个一个服务,系统相当于一个单队列排队系统。不过,考虑到磁头移动并重新定位所需要的时间,操作系统采用了一些排队算法将顺序的IO请求进行聚合,方便减少磁头的移动频率,提高了整个系统的吞吐率。Linux原生的调度算法中,CFQDeadlineBFQ等调度算法则是对于不同的IO设置了不同的策略,从而满足不同的服务质量的需要。
摆脱了传统的机械零部件的SSD,采用基于半导体技术选通和存储信号量的Flash存储颗粒,具有更高的反应时间。但是不要以为Flash的速度一定就比磁头伺服电机快多少。对于15000rpmSAS机械硬盘,它每次寻址的时间大约是5ms,而对于当下的MLC Flash的存储颗粒来说,每次读操作的时间大约是50~70us,而编程时间大约是3~5ms。为了解决单个颗粒写延迟较大的问题,从而匹配读写的速度,Flash支持多个页同时进行编程,同时每个页的大小也增加到8~16kB。为了提高SSD的综合性能,Flash颗粒内部封装上,支持多个Target分别进行读或者编程操作,再由SSD控制器将IO分别发送到不同的Flash颗粒的不同Target中,实现性能的叠加。正是因为这个原因,SSD的排队模型更像一个多队列服务系统。在这里,我们并不展开SSD内部的队列设计原理,仅仅从应用的角度来看看SSD的排队服务模型。
拿随机读做为一个例子来说说这个情况。在下面的TOM’s IT PRO提供的公开测试结果中,在不同的SSD上施加了按照时间压力逐渐增加的激励(并发的IO的数量)。
642.jpg
因为SSD服从近似的多队列服务模型,所以在压力逐渐增加的情况下,性能也会随着IO数量的增加而线性增加,在这一段线性工况里,IO的平均延迟并不会有显著增加。但是当IO的数量太大,大于SSD所提供的服务能力的时候,再增加压力的话只会使得更多的IO进行排队,而没有更高的处理带宽了,这一段工况可看做系统进入服务的饱和态。当然,不同的SSD的处理能力有所不同,因此进入饱和态的位置也会有所不同。系统一旦进入了饱和态,对于IO的反应延迟、带宽的抖动都会变差。后文将会重点介绍。
643.jpg
在一个排队系统中,系统的排队压力、平均延迟和流量之间服从Little's lawLittle’s law适用于任何系统,特别的它适用于在一个大系统中的子系统。应用到IO请求上,就是系统的IO并发数量LIO平均服务时间WIO的带宽λ之间服从W = L / λ。因为带宽λ反映了IO的流动速度,IO并发数量L反映了施加在系统上的压力大小,而平均服务时间W则是系统的固有属性,因此这个关系非常类似电阻定理(R = U / I)。
IO请求队列中,依赖于W = L / λ,三个变量之间建立了这样的关系。然而W虽然是系统的固有属性,但是并不是一个恒定的值,而应当把它视作一个与L相关的属性,反映了存储系统内部设计上的算法、缓冲区和调度策略等方面。对于一个系统来说,在IO的类型不变的情况下,W(L)关系基本是可以统计得到的。这样,根据用户所发送的并发IO数量L的大小,可以间接影响到λW,并将IO的带宽和平均延迟控制在理想的范围内。如果系统已经频临饱和,那么适当通过一些控制手法降低压力来换取对于关键IO延迟的提升,也是可以实现的。
在一个复杂的IO服务模型中,通常会有若干个IO处理的步骤,这些步骤之间通过路由关系连接起来,也可以采用电阻串联或并联的公式来计算相应的IO吞吐率或IO的平均延迟。在下图的NVMe Fabric的示意图中,来自用户的请求发给主机端的NVMe Fabric驱动程序,然后再通过Front End的互联和后端的NVMe网络发到最终的SSD,然后再将动作的结果返回给主机。在整个系统中,安排了8个监测计数器,IO顺序的从第1个点流动到第8个点并完成整个IO的过程。在存储系统中的8个监测点中同时统计IO计数,做为1组数据记录下来。在不同时刻将这些计数值整理到一个图表中。
644.jpg
因为IO是顺序通过监测点1~8的,可以认为每个采样点都是一个服务单位,不同的服务单位之间是串行连接的,在同一时刻采集到的M1~M8的值是依次递减的。根据M1在不同的时刻的采样值进行平均,可以计算得到在这10s的平均性能是249kIO/s。由于M1位于IO请求的入口,M8位于出口,两者之差表示了由应用层发给到NVMeFabric层面的并发请求数。应用最小二乘法进行统计,可以分别计算任意两个检查点的数值差异,该差异正比于IO在这一个过程中所消耗的时间。然后可根据系统的带宽推算出每一步所使用的平均时间。从图上来看,每一步的时间消耗也表明了这个步骤的能力。如果某一个步骤处于饱和态的话,那么继续增大压力的话,其他步骤所消耗的时间基本不变,而这一步所消耗的时间则会迅速上升。我们可以使用这个测试方法来更加方便地找到系统的性能瓶颈。

645.jpg
646.png
在一些实际的应用中,用户除了关心存储系统整体的吞吐量性能等指标外,还对每个IO的延迟,以及IO在时间轴上的分布提出了更高的要求。从端到端的服务过程来讲,往往来自前端的请求需要经过前端的网关、负载均衡、分布式路由等系统最后发送到后端。其中一个步骤如果花的时间太多的话,将会对整个IO的延迟造成影响。同时,由于IO的延迟会导致软件的排队、相应的进程调度出CPU,甚至使得CPU进入到省电模式,从而这种延迟抖动会有一个放大的效果。同时,IO如果在时间轴上不平衡的话,那么会造成流水线的拥塞,以及一些资源的浪费。不过在这些领域里的标准还并不多。SNIASolidState Storage (SSS) Performance Test Specification (PTS) Enterprise上定义了单IO情况下的延迟特性报告,对于单个IO连续发送的这种情况给出了标准测试集合。对于中度和重度压力下SSD的表现没有提供测试方法。
综合目前对于SSDIO服务质量的要求,大致的IO服务质量可以从下面的几点来描述:
1、在典型压力和重度压力下的IO响应时间。业界一般用在典型工况下的99.99%的延迟时间来描述。所谓99.99%的延迟时间指的是在稳定施加典型的工作压力下的一段时间里采样每次IO所消耗的时间,并将所有的IO消耗时间从大到小排序,选择99.99%分位点的延迟作为这个指标。它反映的是IO响应时间的较坏情况,说明有99.99%IO的延迟不大于这个值。这个值与工作工况有关,同样有线性态和饱和态之分。下面的结果是TOM’s IT PRO测试的几个SSD4kB随机读的IO响应时间在不同的工况下的结果。这个指标是面向IO服务的,表征了对于前端的应用来说,出现最坏情况的代价。对于延迟敏感类型的业务和交互式业务,除了避免工况进入到饱和态,也同样需要保证IO响应时间满足设计要求。
647.jpg
2IOPS性能的一致度。可采用在典型工况下使用每秒钟IOPS的一致度。99.9%低性能IOPS与平均IOPS之比表示IOPS的一致程度。如果SSD的一致度高,那么在系统内部的IO流动相对均匀,不容易出现流水线的压力抖动和缓冲区的溢出。对于CPU来说设计裕量也可以减小。
3、当业务压力发生变化时,SSD的瞬时响应。对于一些业务类型,业务压力是经常变化的。这样的话如果SSD调教的不当的话,可能不能准确估计用户的业务压力,造成服务质量的瞬时下降。目前这一类型的服务质量还没有标准的评价体系,但是在一些用户的服务中确实能发现相应的需求。例如,如果业务先是随机写,接着IO类型突然变成全部随机读,那么SSD受制于惯性,仍然会大量进行GC来回收Flash。这些GC会对于后来的随机读请求的服务质量造成影响。
需要注意的是上面描述的工况受到IO请求的类型、请求的数据量的大小、数据访问方式(随机/顺序)以及SSD的历史状态的影响。这些新的特点将会成为应用工程师的必备知识。对于SSD进行的测试需要考虑到这些实际情况,如果对于业务类型和容量有担心的话,可以通过预留一些带宽的方式来保障关键业务的服务质量。必要的情况下,管理员也可以根据业务的实际情况来进行动态调整或自适应调整。
目前在NVMe标准中,将来有望在IO路径和延迟上提供更好的协议级别的支持。特别是未来存储系统的集中化和服务的多元化是必须要考虑这些需求的。NVMe Fabric协议一个重要的作用就是替代原有的方案提供更高的性能和更好的服务质量。但是很多应用都已经等不及了。一些对性能有要求的应用已经在考虑如何借助新型的SSD,特别是基于NVMeSSD来达到提升服务质量的效果。VMWareVSAN 6.2版本上引入了服务质量控制的功能,通过Hyperviser软件实现的方法来限制对于每个对象的IOPS上限(这里的IOPS对应的请求大小是32kB,更大的请求大小会切分成32kB来计算IOPS)。根据官方宣传,这项技术可以帮助管理员限制那些IO需求量比较大的虚机,从而让大家更加公平地享受存储带宽。在一些数据库软件中,也会根据前台和后台的业务来调整服务优先级并提升服务质量。相信随着服务质量这个概念的广泛普及和新型固态存储的应用,对于存储系统的IO服务质量将会逐渐走向成熟。

[1] https://en.wikipedia.org/wiki/Little%27s_law
[2] http://www.tomsitpro.com/article ... enterprise-nvme-ssd,2-962-3.html
[3] https://www.openfabrics.org/imag ... onday/monday_10.pdf
[4] https://en.wikipedia.org/wiki/Quality_of_service
[5] http://www.snia.org/sites/defaul ... Enterprise_v1.1.pdf
[6] http://ece.eng.wayne.edu/~sjiang/pubs/papers/zhang11-UShape.pdf
[7] http://www.ece.tamu.edu/~reddy/papers/mmjournal00.pdf
[8] http://www.intel.cn/content/dam/ ... vice-tech-brief.pdf
                                                                                                                                                                                                                                                                    








此帖出自FPGA/CPLD论坛

最新回复

这是好文,待会慢慢 拜读。  详情 回复 发表于 2016-6-4 14:16
个人签名training
 

回复
举报

1950

帖子

4

TA的资源

版主

 
这是好文,待会慢慢 拜读。
此帖出自FPGA/CPLD论坛
个人签名MicroPython中文社区 http://www.micro-python.com/forum.php
 
 

回复
您需要登录后才可以回帖 登录 | 注册

猜你喜欢
随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表