原理
本节介绍了流控管理以及分层管理。存储系统利用基于被控对象的I/O队列管理方式来保证关键业务的运行。
SmartQoS的被控对象包括:LUN、LUN组、主机以及文件系统。
流控管理
SmartQoS流控管理通过对被控对象的I/O分类队列管理、令牌分发和出队控制三部分实现。
基于被控对象的I/O队列管理通过令牌机制实现存储资源的分配,某个被控对象的I/O队列所拥有的令牌数越多,系统分配给这个被控对象的I/O资源也越多,存储系统会优先处理该被控对象的I/O队列中的I/O请求。实现原理如图1-1所示。
① 应用服务器下发I/O请求后,存储系统将I/O下发到相应的被控对象的I/O队列中。
② 存储系统根据被控对象的优先级调整I/O队列所持有的令牌数,通过降低优先级低的被控对象的令牌数,保证优先级高的被控对象可占有的系统资源,优先保证高优先级的被控对象的运行(系统内部为I/O出队操作)。
③ 处理出队的被控对象的I/O请求。
示例1:不同SmartQoS策略中的LUN的流量分配。
例如,用户在存储系统中为两个LUN(LUN 001和LUN 002)开启了SmartQoS策略,在SmartQoS策略中通过设定性能目标,存储系统可以限制LUN分配到的系统资源,从而为高优先级LUN保留更多资源。其性能目标如表1-1所示。
LUN名称 |
性能目标a |
---|---|
LUN 001 |
带宽:300MB/s |
LUN 002 |
带宽:200MB/s |
a:SmartQoS特性可衡量的性能目标包括带宽和IOPS。设置的性能目标应该合理且符合实际应用程序的性能特征。 |
存储系统将会给每个LUN分配所需的令牌数。例如,实现LUN 001性能目标的令牌数为300,而实现LUN 002所需的性能目标的令牌数为200。当系统资源紧张时,由于LUN 002所拥有的令牌数少,存储系统会限制LUN 002所占有的系统资源。这样,LUN 001可以获得更多的系统资源,从而获得更好的性能。
分层管理
SmartQoS策略可以分为两种类型分别为普通策略和分层策略。分别如下:
普通策略:主要用于管理一种单一应用所对应的被控对象的SmartQoS策略。
分层策略:普通策略可以加入到分层策略中,主要用于管理多种应用混合的SmartQoS策略。
两者关系如图1-2所示:
突发流控管理
针对部分时延非常敏感的业务,允许其短时间突破上限流控目标。SmartQoS提供了突发流控管理能力,支持对被控对象配置突发能力,指定其突发期的IOPS、带宽、突发时长。
其工作原理为积攒下前期未消耗的性能,当业务压力突然增大的情况下,可消耗此前积攒下的性能,短时间获得突破上限目标的性能。长时间来看,其平均流量应低于上限目标的。
- 当被控对象在过去数秒内流量未达到上限值,则可在未来数秒内流量短暂地超过上限,达到突发值。突发的最大时长可配置。
- 突发流量控制是通过积攒突发时长来实现的,当被控对象在某一秒内性能低于上限性能目标一定阈值时,则积攒一秒的突发时长,当业务压力突然增长时,性能可突破上限值达到突发流量,突发时长为此前积攒的突发时长,最长不超过配置值。
- 消耗完积攒时长或达到配置的最长突发时长,则流量被控制到上限值。
下限保障
通过抑制没有配置保低目标的LUN的性能来达成配置了保低目标的LUN的性能目标,主要步骤为:
- 将SmartQoS策略配置的保低目标,按照性能需求分配给SmartQoS策略中的每个LUN。
- 没有加入保低QoS策略的LUN,设置默认保低目标,默认保低目标为保证LUN不断业务的极小值。
- 根据每个LUN的保低目标和当前性能计算性能缺口和性能余量。保低目标超出实际性能的值为性能余量,实际性能超出保低目标的值为性能缺口。
- 逐步选取性能余量最大的前10个LUN进行抑制,直到系统中所有LUN都没有性能缺口,下限保障达成。
策略分配
SmartQoS策略用户配置的上限目标值为共享型,即添加到策略中的所有对象共享此策略的流控目标。所以SmartQoS模块会定期采集流量控制策略中所有被控对象的性能数据及需求数据,然后通过分配算法,将流量控制策略总体的控制目标分配给策略中具体的被控对象。
目前采用的分配算法为经过优化后的max-min权重分配算法,主要思路是通过识别策略的上限目标值、对象的需求数据,决策对象的实际目标值。该算法优先满足对象的需求量,然后按照对象权重将策略的剩余上限目标值分配到各对象,并对分配结果进行滤波处理,使得最终结果相对稳定。
一个LUN可以单独加入一条SmartQoS策略,也可以通过一个LUN组被加入一条SmartQoS策略,当一个LUN被加入多条SmartQoS策略中时,该LUN的上限分配值将会取多个上限分配值中的较小值。