存储系统服务质量QoS控制方法和装置转让专利

申请号 : CN201710283797.4

文献号 : CN107133100B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 吴香伟

申请人 : 新华三技术有限公司

摘要 :

本申请公开了一种存储系统服务质量QoS控制方法和装置,方法包括:接收用户针对存储系统的IO请求;对于接收到的用户IO请求的时间,计算各IO请求对应的预留时间标签,并将IO请求存入IO请求集合中;根据预先配置的用户优先级信息,按照对应用户的优先级从高到低的顺序筛选IO请求集合中预留时间标签不大于当前时间的IO请求,将筛选出的IO请求从IO请求集合中输出以对IO请求进行处理。本申请的技术方案在存储系统中应用QoS算法进行服务质量控制时,引入优先级机制,从而为某些时延要求较高的关键业务分配较高的优先级,保证关键业务的正常运行。

权利要求 :

1.一种存储系统服务质量QoS控制方法,其特征在于,该方法包括:接收用户针对存储系统的输入/输出IO请求;

对于接收到的用户IO请求,计算各用户IO请求对应的预留时间标签,并将接收到的IO请求存入IO请求集合中;其中,预留时间标签指示IO请求按照QoS预留控制要求正常应被处理的时刻,所述预留是给定时间周期内对用户的IO处理速度的最低门限值;

根据预先配置的用户优先级信息,按照对应用户的优先级从高到低的顺序筛选所述IO请求集合中预留时间标签不大于当前时间的IO请求,将筛选出的IO请求从所述IO请求集合中输出以对IO请求进行处理。

2.根据权利要求1所述的方法,其特征在于,所述将接收到的IO请求存入IO请求集合中包括:将相同优先级用户的IO请求存入同一子集中;

所述按照对应用户的优先级从高到低的顺序筛选所述IO请求集合中预留时间标签不大于当前时间的IO请求包括:根据对应用户优先级信息,从高优先级用户的子集中筛选出预留时间标签不大于当前时间的IO请求,当高优先级用户的子集筛选完成后,从低优先级用户的子集中筛选预留时间标签不大于当前时间的IO请求。

3.根据权利要求2所述的方法,其特征在于,所述从高优先级用户的子集中筛选出预留时间标签不大于当前时间的IO请求包括:当高优先级用户的子集中包括多个用户的IO请求时,

比较各用户的IO请求的预留时间标签与当前时间,筛选出高优先级用户的子集中各用户的预留时间标签不大于当前时间的IO请求。

4.根据权利要求3所述的方法,其特征在于,所述将筛选出的IO请求从所述IO请求集合中输出以对IO请求进行处理包括:按照预留时间标签从小到大的顺序,将高优先级用户的子集中筛选出的IO请求,从高优先级用户的子集中输出以对IO请求进行处理。

5.根据权利要求1-4任一项所述的方法,其特征在于,所述对于接收到的用户IO请求,计算各用户IO请求对应的预留时间标签包括:通过如下公式计算用户的当前IO请求的预留时间标签:

其中,i表示第i个用户, 表示第i用户的前一个IO请求的预留时间标签值,ρi表示分布式存储系统的一个存储节点收到第i个用户的前一个IO请求时起到收到当前IO请求时止的时间段内,分布式存储系统的其它存储节点上于预留阶段输出第i个用户的IO请求的数目,ri表示第i个用户的预留每秒输入输出操作次数IOPS,t表示当前时间。

6.一种存储系统服务质量QoS控制装置,其特征在于,该装置包括:接收模块,适于接收用户针对存储系统的输入/输出IO请求;

计算模块,适于对于接收到的用户IO请求,计算各用户IO请求对应的预留时间标签;其中,预留时间标签指示IO请求按照QoS预留控制要求正常应被处理的时刻,所述预留是给定时间周期内对用户的IO处理速度的最低门限值;

存储模块,适于将接收到的IO请求存入IO请求集合中;

排序模块,适于根据预先配置的用户优先级信息,按照对应用户的优先级从高到低的顺序筛选所述IO请求集合中预留时间标签不大于当前时间的IO请求;

输出模块,适于将筛选出的IO请求从所述IO请求集合中输出以对IO请求进行处理。

7.根据权利要求6所述的装置,其特征在于,

所述存储模块,具体适于将相同优先级用户的IO请求存入同一子集中;

所述排序模块包括:高优先级用户排序子模块和低优先级用户排序子模块,高优先级用户排序子模块,适于根据对应用户优先级信息,从高优先级用户的子集中筛选出预留时间标签不大于当前时间的IO请求;

低优先级用户排序子模块,适于当高优先级用户的子集筛选完成后,从低优先级用户的子集中筛选预留时间标签不大于当前时间的IO请求。

8.根据权利要求7所述的装置,其特征在于,所述高优先级用户排序子模块具体适于,当高优先级用户的子集中包括多个用户的IO请求时,比较各用户的IO请求的预留时间标签与当前时间,筛选出高优先级用户的子集中各用户的预留时间标签不大于当前时间的IO请求。

9.根据权利要求8所述的装置,其特征在于,

所述输出模块具体适于,按照预留时间标签从小到大的顺序,将高优先级用户的子集中筛选出的IO请求,从高优先级用户的子集中输出以对IO请求进行处理。

10.根据权利要求6-9任一项所述的装置,其特征在于,所述计算模块具体适于通过如下公式计算用户的当前IO请求的预留时间标签:其中,i表示第i个用户, 表示第i用户的前一个IO请求的预留时间标签值,ρi表示分布式存储系统的一个存储节点收到第i个用户的前一个IO请求时起到收到当前IO请求时为止的时间段内,分布式存储系统的其它存储节点上于预留阶段输出第i个用户的IO请求的数目,ri表示第i个用户的预留每秒输入输出操作次数IOPS,t表示当前时间。

说明书 :

存储系统服务质量QoS控制方法和装置

技术领域

[0001] 本申请涉及计算机领域,特别涉及一种存储系统服务质量QoS控制方法和装置背景技术
[0002] 分布式存储是由多台廉价服务器组成的存储集群,它将集群中每台服务器直连的存储设备通过网络连接在一起,形成资源池,为用户提供诸如存储块、文件或者对象形式的存储资源。存储系统将用户逻辑上的文件、存储块或对象的数据打散存储到各台服务器的物理磁盘内,也就是说,同块物理磁盘会同时被多个用户使用,从而导致了不同用户(或业务)之间对同一个存储资源的竞争。
[0003] 不同的业务的重要性程度是不同的。存储资源竞争问题,会让不重要的业务抢占存储资源导致重要业务因为存储资源不足而无法正常工作。
[0004] 为解决这一问题,存储系统引入了服务质量(Quality of Service,简称QoS)控制来为不同的业务分配不同的IO资源,以期达到重要业务的存储资源不被过度抢占,实现存储资源分配的平衡。dmClock存储资源QoS控制算法是应用到分布式存储系统中以实现存储QoS的一种非常有效的算法,但是dmClock算法在实现QoS时仅能够从预留、上限、权重三个时间标签的维度来控制,实践中对某些特殊或关键业务来说,它们除了IOPS性能要求外,在某些应用场景下,还需要满足更低的时延以及最低存储资源能力保障的需求,但是,现有的dmClock算法无法满足这些需求。

发明内容

[0005] 本申请提供了一种存储系统服务质量QoS控制方法和装置,以解决存储系统服务质量QoS控制方案不能为关键业务提供更低的时延以及最低存储资源能力保障,无法满足某些关键业务的处理需求的问题。
[0006] 根据本申请的一个方面,提供了一种存储系统服务质量QoS控制方法,包括:
[0007] 接收用户针对存储系统的输入/输出IO请求;
[0008] 对于接收到的用户IO请求,计算各用户IO请求对应的预留时间标签,并将接收到的IO请求存入IO请求集合中;
[0009] 根据预先配置的用户优先级信息,按照对应用户的优先级从高到低的顺序筛选所述IO请求集合中预留时间标签不大于当前时间的IO请求,将筛选出的IO请求从所述IO请求集合中输出以对该IO请求进行处理。
[0010] 根据本申请的另一个方面,提供了一种存储系统服务质量QoS控制装置,该装置包括:
[0011] 接收模块,适于接收用户针对存储系统的输入/输出IO请求;
[0012] 计算模块,适于对于接收到的用户IO请求,计算各用户IO请求对应的预留时间标签;
[0013] 存储模块,适于将接收到的IO请求存入IO请求集合中;
[0014] 排序模块,适于根据预先配置的用户优先级信息,按照对应用户的优先级从高到低的顺序筛选所述IO请求集合中预留时间标签不大于当前时间的IO请求;
[0015] 输出模块,适于将筛选出的IO请求从所述IO请求集合中输出以对IO请求进行处理。
[0016] 本申请的有益效果是:本申请实施例的存储系统服务质量QoS控制方法和装置,当接收到用户针对存储系统的输入或输出IO请求时,计算各IO请求对应的预留时间标签,并将的IO请求存入IO请求集合中;根据预先配置的用户优先级信息,筛选IO请求集合中预留时间标签不大于当前时间的IO请求,将筛选出的IO请求从IO请求集合中输出以对IO请求进行处理,从而能够保证关键的、配置了更高用户优先级的用户IO请求被及时的处理,满足关键用户低时延的要求以及在存储系统能力不足的情况下,能够集中能力处理高优先级用户的IO请求,保障这些用户业务的正常运行。

附图说明

[0017] 图1是现有技术dmClock算法的预留时间轴的示意图;
[0018] 图2是本申请一个实施例的存储系统服务质量QoS控制方法的流程示意图;
[0019] 图3a是现有技术dmClock算法采用的数据结构示意图;
[0020] 图3b是本申请一个实施例改进后dmClock算法的数据结构示意图;
[0021] 图4是本申请一个实施例的存储节点的硬件结构示意图;
[0022] 图5是图4中存储系统服务质量QoS控制装置的功能框图。

具体实施方式

[0023] 为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
[0024] 这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
[0025] 在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
[0026] 应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
[0027] 本申请所称的用户通常是与业务相关的,指某一类业务的用户。本申请所述“用户的IO请求”或“用户产生或发送IO请求”可以理解为,前端业务系统,例如前端WEB服务器、网管服务器、ERP(企业资源计划Enterprise Resource Planning,简称ERP)服务器等,针对该业务系统的用户的访问请求而产生的对后端存储资源的访问请求。在没有特别说明的情况下,本申请中所述的“IO请求”都是指对存储系统中的存储资源的输入或者输出请求。一般的,对存储资源而言,除了常见的存储系统外部业务用户外,还包括存储系统内部用户。
[0028] 实践中,根据用户的等级和重要性程度的不同,用户IO请求对时延的要求也是不同的。为解决不同用户(或业务)对同一个存储资源存在竞争这个问题,存储系统引入服务质量(Quality of Service,简称QoS)控制来为不同的业务分配不同的IO资源来解决网络延迟和阻塞,从而提供更好的服务能力。目前,存储资源QoS控制算法从预留(reservation)、上限(limit)和权重(proportional)这三个角度来进行存储资源分配。“预留”是指对给定用户的最低性能保证,其具体含义可以理解为在给定时间周期内的IO处理速度的最低门限值,以每秒进行读写操作的次数(Input/Output Operations Per Second,简称IOPS)为例,假设存储系统为某用户配置了300IOPS的预留,那么当用户发送IO请求的速度超过300IOPS时,存储系统保证处理该用户的实际IOPS不低于300。“上限”是指限制给定用户的最高性能,其具体含义可以理解为在给定时间周期内的IO处理速度的最高门限值,以避免该给定用户独占存储资源影响其它用户。“权重”是指存储系统在满足所有用户预留的前提下,在上限门限之下,按照一定比例来分配存储资源。假设存储系统有两个用户A和B,它们的权重比例为3:1,存储系统IOPS总处理能力为100,那么这两个用户根据它们的权重比例,实际能够被存储系统处理的IO分别是75IOPS和25IOPS。
[0029] 通过预留、上限和权重基本可以解决非关键业务或异常业务对关键业务服务质量的影响。但是,在一些应用场景中还需要提供对不同类型业务或对某些关键业务的优先级控制。例如,某一联机事务处理OLTP类型的关键业务除了要求存储系统能够保证最低IOPS性能保证外,还希望获得更低的时延,也就是说,关键业务的IO请求需要被更及时地处理。
[0030] 再例如,由于存储QoS控制除了能够限制不同业务用户的IO请求外,还可以被用来限制源自存储系统本身的IO请求,典型的源自存储系统本身的IO请求是备份和/或恢复类的IO请求,以恢复类的IO请求为例,当存储系统的某个存储节点离线或故障时,存储系统会启动恢复程序,从磁盘阵列中的其它磁盘中读取数据向目标磁盘恢复缺失的数据,此时就会产生恢复类的IO请求。如果外部用户的IO请求和恢复类的IO请求操作了同一份数据,那么此时恢复类的IO请求就变得很紧急,必须立即处理,否则会影响该故障存储节点上外部用户IO请求的时延。
[0031] 此外,如果存储系统总处理能力低于所有用户的预留之和,按照每个用户级别相等的处理方式也可能导致每个用户的预留都保证不了。例如,假设存储系统的总处理能力为100IOPS,该存储系统有10个用户,每个用户的预留为100IOPS,那么,按照存储QoS算法,存储系统会尽力保证这10个用户每个分配10IOPS,虽然,这样做可以保证每个用户都被分配到存储资源,但是,由于存储系统总处理能力是低于所有用户的预留之和的,实际上这会导致每个用户的预留都不能全部满足,从而无法保证某些关键业务的正常运行。
[0032] 由此可知,需要一种优先保证那些关键业务正常运行的方案,尤其是在存储系统能力不足的情况下,保证关键业务的IO请求也能被处理,从而满足某些关键的业务正常运行需求。
[0033] 本申请实施例的技术方案是基于存储服务质量控制算法实现的,这里先对存储服务质量控制算法进行一些说明。
[0034] 首先介绍mClock算法,mClock算法是用来实现存储资源公平调度的,它同时支持服务质量QoS控制中的预留、上限和权重三个参数,mClock算法,针对QoS中的三个参数:预留、上限和权重,给到达的每个IO请求计算三个时间标签,时间标签代表该请求按照QoS控制要求正常应该被处理的时刻。时间标签越小,越早出队列。对于第一个IO请求,这三个时间标签均是第一个IO请求到达的时间,之后每个IO请求,它们的时间标签分别通过相应的标签计算公式计算得到。
[0035] 以预留为例,mClock算法利用下述公式(1)为收到的IO请求计算预留时间标签,[0036]
[0037] 上述公式(1)中, 代表用户i的第r个请求的预留时间标签,ri代表为用户i配置的预留值。可以看到,由于mClock算法是只支持单机环境的。所以算式1/ri中分子为1。
[0038] 这些时间标签中,如果对应的时间标签的值是大于当前时间的,对于预留时间标签来说,表示这个用户的IO请求到达时,用户的预留已经满足,对于上限时间标签来说,表示这个用户的IO请求到达时,用户已经达到IO请求的上限,不能进行存储资源分配。如果对应的时间标签的值是小于等于当前时间,那么对于预留时间标签来说,表示这个用户的IO请求到达时,用户的IO预留要求还没有满足,对于上限时间标签来说,表示用户的IO请求到达时,用户的IO请求没有达到上限,还可以继续为其IO请求分配存储资源。对于权重时间标签来说,权重时间标签不与当前时间做比较。
[0039] 由此可知,mclock本质上实现了一个排序队列,用户的IO请求先按照接收请求的顺序入队列,然后按照用户的QoS参数(预留、上限和权重)配置出队列。IO请求出队列时,比较当前时间和IO请求的时间标签,如果当前时间大于IO请求时间标签,则IO请求出队列,否则IO请求不出队列。
[0040] 接着介绍dmClock算法,dmClock算法将mClock算法扩展到了分布式的场景。dmClock算法具体通过如下公式(2)计算收到的用户的IO请求:
[0041]
[0042] 其中,i表示第i个用户, 表示第i用户的前一个IO请求的预留时间标签值,ρi表示分布式存储系统的一个存储节点收到第i个用户的前一个IO请求时起到收到当前IO请求时为止的时间段内,分布式存储系统的其它存储节点上在预留阶段将第i个用户的IO请求输出IO请求集合的数目,ri表示第i个用户的预留每秒输入输出操作次数IOPS,t表示当前时间(Current time)。
[0043] 和上述公式(1)相比,dmClock算法计算IO请求的预留时间标签时加入了分布式存储系统的其它存储节点对该用户的IO请求的处理因素。这是由于分布式存储系统中有多个存储节点,每个存储节点都可能处理同一个用户的IO请求,这就要求当前的存储节点在计算一个用户的IO请求的预留时间标签时,考虑分布式存储系统中其它存储节点上处理的该用户的IO请求的处理阶段,即,将分布式存储系统的一个存储节点收到该用户的前一个IO请求时起到收到当前IO请求时为止的时间段内,该用户的IO请求中那些被分布式存储系统的其它存储节点上,在预留阶段(基于约束Constraint-based的处理阶段)输出IO请求集合的数目,从而保证即满足该用户的预留,又不至于为该用户分配过多存储资源影响其它用户对存储资源的需求。
[0044] 另外,前述公式(1)和(2)中计算预留时间标签时,都考虑了用户i的前一个IO请求的预留时间标签的影响,这是为了避免用户i较长一段时间内不活动(即,不发送IO请求),而后重新活动并发送IO请求时新IO请求的预留时间标签远远小于当前时间,因此按照dmClock的算法会被优先处理导致对其它用户不公平的问题。注:例如根据前述公式(2)可知,新IO请求的预留时间标签由两个算式(分别是 ρi/r)确定,而用户i长时间不活动则第一个算式 的值会比较小,当ρi/r一定的情况下,第一个算式 的值越小,新IO请求的预留时间标签越小于当前时间。和前面mClock算法的IO输出顺序相同,dmClock算法也按照所有用户的IO请求的时间标签出队列,时间标签越小,越早出队列。很明显的,这对于其它正常活动的用户而言是不公平的。
[0045] 正常情况下,用户i的两个相邻IO请求的时间标签的间隔是1/ri,ri表示用户的预留,这恰好是用户的预留的平均速度,根据dmclock算法只要保证在任意时刻输出IO请求时只要将当前时间前面的IO请求输出处理,则存储系统就能够满足用户的预留要求。
[0046] 举例而言,存储系统的一个存储节点S在t0时刻开始接收用户C的请求,t1时刻开始处理用户C的请求,从t0时刻到t1时刻,时间为1秒钟,在这1秒钟内,存储节点S收到了用户C的10个请求,而用户的C的预留为10IOPS,那么对于用户C的第一个请求,在预留时间轴上,其时间标签就是对应t0时刻的位置,根据上述公式,第二个请求向右偏移1/10,以此类推,第十个请求在该预留时间轴上,其时间标签就是对应t1时刻的位置。如果存储节点S在当前时间t1时刻将这10个请求全部处理掉,则恰好能满足用户C的预留,保证了用户C的最低性能。同理,对于存储节点S的每个用户,如果都按照这样的处理顺序进行处理,则能满足每个用户的预留。
[0047] 另外,需要说明的是,dmClock算法分两个阶段将IO请求输出dmClock队列。第一个阶段称为基于约束Constraint-based的处理阶段,这一阶段的处理过程是:基于IO请求的预留时间标签所构成的预留时间轴,按照IO请求的预留时间标签从小到大的顺序,从队列中取出预留时间标签不大于当前时间的IO请求,优先进行处理。Constraint-based阶段的目的是为了优先保证所有用户的预留,当存储系统总能力高于所有用户的预留和时,存储系统可以及时处理当前时间前的IO请求完成预留目标;当预留时间轴上没有预留时间标签不大于当前时间的IO请求时,第一个阶段完成。当存储系统的总能力低于所有用户的预留和时,存储系统将按照用户的预留的比例处理用户的IO请求。
[0048] 如果存储系统在保证了用户的预留之后还有多余能力处理用户IO请求,则开始进入第二个阶段,第二个阶段称为基于权重Weight-based的处理阶段。这个阶段有两个目标,一是限制用户的上限,二是基于用户权重。同样地,Weight-based阶段也是按照时间标签从小到大的顺序从时间轴中取出请求,和前述Constraint-based阶段不同的是,这一阶段是按照IO请求的权重时间标签的大小顺序从权重时间轴中选择IO请求,同时排除选择的IO请求中上限时间标签已经大于上限时间轴上当前时间的IO请求,将同时满足这两个条件的IO请求取出进行处理。
[0049] 由前述说明可知,mClock算法同时支持预留、上限和权重控制,但mClock只支持单机环境,dmClock算法是将mClock算法扩展到了分布式环境。本实施例中以下主要以dmClock算法实现服务质量QoS为例进行说明,但是,本实施例的技术方案也可以应用在mClock算法实现QoS的场景中,对此不作限制。
[0050] 现有dmClock算法没有提供预留阶段的优先级控制,导致现有的dmClock实现存储QoS时存在如下两个缺陷:
[0051] 缺陷一:无法为特别关键的用户(如,恢复类IO)的IO请求提供更低的时延。
[0052] 缺陷二:无法为特别关键的业务的IO请求提供最低保证,尤其是在存储系统处理能力不足的情况下,导致不能保证特别关键的业务的正常运行。
[0053] 例如,参见图1,假设存储系统有三个用户A,B和C,图1中,三角形表示来自用户A的IO请求,正方形表示来自用户B的IO请求,六边形表示来自用户C的IO请求。这三个用户的预留均相同,存储系统在t0时刻开始接收用户请求,t1时刻开始处理用户请求。
[0054] 注:这里的处理时间t1时刻只是举例说明,实际上,存储系统任意时刻都可能会处理请求。另外,这里的用户数量也是示意性说明,实践中用户数量远不止三个。
[0055] 在从t0到t1的时间段内,存储系统总共接收到六个用户请求,两个来自用户A,两个来自用户B,两个来自用户C。按前文所述,dmClock算法在Constraint-based阶段,是按照预留时间轴上IO请求的时间标签从小到大的顺序出队列,那么,图1中这六个请求出dmClock队列的顺序即为:A1->B1->C1->A2->B2->C2。因为t1时刻右面的三个请求:A3、A4、A5的时间标签大于当前时间,所以这三个请求在预留阶段不出队列以保证存储系统集中能力满足用户的预留。再根据前面的描述可知,请求出队列的顺序影响着请求的时延,越早出队列,时延越低,反之越高。
[0056] 而实践中,不同的业务对时延有不同的要求,例如联机事务处理(On-Line Transaction Processing,简称OLTP)业务对时延要求高,而联机分析处理(Online Analytical Processing,简称OLAP)业务只对带宽敏感而对时延没有要求。如果预留阶段只按照请求的时间标签进行处理,势必会导致对时延要求高的业务的IO请求和时延要求低的业务的IO处于相同的地位,进而无法为特别关键的业务(如,恢复类IO)的IO请求提供更低的时延。在存储系统处理能力不足的情况下,也无法为特别关键的业务的IO请求提供最低保证。
[0057] 为了优化存储系统的服务质量,本实施例中对服务质量控制算法进行了改进,提出了一种存储系统服务质量QoS控制方法,如图2所示,本实施例的存储系统服务质量QoS控制方法包括如下步骤:
[0058] 步骤S201:接收用户针对存储系统的输入/输出IO请求;这里的“/”表示或者;
[0059] 步骤S202:对于接收到的用户IO请求,计算各用户IO请求对应的预留时间标签,并将接收到的IO请求存入IO请求集合中;
[0060] 步骤S203:根据预先配置的用户优先级信息,按照对应用户的优先级从高到低的顺序筛选所述IO请求集合中预留时间标签不大于当前时间的IO请求,将筛选出的IO请求从所述IO请求集合中输出。
[0061] 由图2所示可知,本实施例的存储系统服务质量QoS控制方法在接收到用户的IO请求后,计算IO请求的预留时间标签,然后将IO请求放入IO请求集合中,在Constraint-based阶段,请求出队列时,按照预先配置的用户的优先级信息将IO请求输出以对该IO请求进行后续处理,从而不是仅仅比较请求的预留时间标签和当前时间的大小,而先根据用户的优先级,再根据预留时间标签来确定IO请求输出的顺序,这样就保证了高优先级的用户的IO请求比低优先级的用户的IO请求先输出,满足了关键用户的低时延的要求,提高了存储服务质量。
[0062] 本申请一个实施例通过对dmClock算法进行改进,在预留阶段(即Constraint-based阶段)引入优先级机制,从而能够对延迟要求高的业务,配置高优先级,以及当存储系统能力不足情况下更需要优先保证的业务,配高优先级;或者,对于源自存储系统自身的IO和外部用户IO操作同一份数据的情况,为源自存储系统自身的IO配置高优先级,保证高优先级用户IO请求及时处理。即,利用本申请的方案,实现了在多个用户竞争存储资源时,保证更紧急的用户的IO被及时处理。
[0063] 对于源自存储系统自身的IO和外部用户IO操作同一份数据的情况,为源自存储系统自身的IO配置高优先级,保证高优先级用户IO请求及时处理,主要是针对下列场景:分布式存储系统的存储节点故障时会进行恢复操作,这就涉及两种情况,一种是待恢复的数据没有外部用户IO请求,另一种是待恢复数据恰好有外部用户IO请求。例如,外部用户A发送IO请求读取Data1,而此时,存储节点发生了故障需要进行恢复,当存储节点进行恢复时,如果该存储节点上有些数据丢失则需要从另外的存储节点获取数据,发生故障的存储节点上的恢复程序会生成内部IO请求,这些内部IO请求需要被发送到其它存储节点上以获取数据完成恢复。如果,故障的存储节点的恢复程序生成的IO请求同样需要读取Data1(除此之外,可能还需要获取其它数据),就会发生外部用户IO命中存储节点的恢复类IO的情况,很明显,恢复类IO更紧急,否则会导致外部用户IO请求延迟太高,影响业务正常运行。
[0064] 对此,通过本实施例的方案可以为恢复操作配置两个内部用户,一个内部用户处理正常数据(即,没有被外部用户IO命中的数据)恢复,另一个内部用户处理紧急数据(被外部用户IO命中的数据)的恢复,并对处理紧急数据恢复的用户配置较高的预留和优先级,如此保证了命中用户IO的恢复类IO被更及时地处理(即,更早的输出处理),从而降低用户IO的时延,优化了存储系统的服务质量。
[0065] 本申请的技术方案改进dmClock算法,并在预留阶段引入优先级机制,改变了dmClock算法原有数据结构和预留阶段输出IO请求的顺序,以下详述之。
[0066] 如图3a所示,dmClock算法采用最小堆数据结构。最小堆,是一种经过排序的完全二叉树,其特点是:根结点的键值是所有堆结点键值中最小的。在预留处理阶段即基于约束的处理阶段,以IO请求的预留时间标签值作为堆的键值,进行排序,每次输出所有用户中预留时间标签值最小的IO请求进行处理。堆中的每个节点元素的数据结构中至少包括用户标识、IO请求的预留时间标签。图3a中示意了C1到C7共7个用户的IO请求构成最小堆,可以看到,当前堆顶(即,根结点)对应的是用户C1的IO请求,则本次输出处理时就会取出C1用户的预留时间标签最小的IO请求,实际应用时,堆中可能包括多个用户的IO请求,所以dmClock算法每次取IO请求的时候都是按照只取堆顶的IO请求的原则选择IO请求。当每取出一个IO请求后,最小堆会重新以每个IO请求的预留时间标签值进行排序,以确定出堆顶对应的用户IO请求,也就是说,堆顶对应的用户IO请求是变化的。
[0067] 由此可知,dmClock算法在预留阶段是没有优先级机制的,每个用户的IO请求都被同等对待。
[0068] 如图3b所示,本申请实施例对dmClock算法进行改进,在预留阶段引入优先级机制,使高优先级的用户的IO请求在预留阶段优先被输出,以降低高优先级用户的IO请求的处理时延,满足实际需求。
[0069] 实际应用过程中,存储系统提供配置界面接收管理员对用户优先级的配置。优选地,管理员根据不同用户对业务时延的要求为该用户配置相应的优先级的配置信息。例如,为存储系统恢复类用户配置最高优先级,一级;为OLTP业务用户配置较高的优先级,二级;再为数据校验业务用户配置高优先级,三级。然后存储系统将这些配置信息保存起来。可以理解,实践中,管理员可以根据需求动态配置存储系统的用户优先级,以满足高优先级用户的IO请求的低时延要求,保证关键业务的正常运行。
[0070] 用户优先级配置完成后,接下来,以存储系统的一个存储节点为例说明。
[0071] 本实施例中,具体的,用户IO请求的处理过程是这样的:
[0072] 当存储节点接收到用户针对存储系统的IO请求后,对于接收到的用户IO请求,计算各用户IO请求对应的预留时间标签,并将接收到的IO请求存入IO请求集合中。
[0073] 优选地,将相同优先级用户的IO请求存入同一子集中,不同优先级用户的IO请求存入不同的子集中。
[0074] 具体实现时,可以针对每个子集构造一个最小堆,以该子集中IO请求的预留时间标签值作为堆的键值,进行排序,每次输出该子集中所有用户的预留时间标签值最小的IO请求进行处理。堆中的每个节点元素的数据结构中至少包括用户标识、IO请求的预留时间标签。当将相同优先级用户的IO请求存入同一子集中之后,由于用户的优先级不同,对应的,每个子集的优先级也不同的。
[0075] 在输出IO请求时,先从最高优先级用户的子集对应的最小堆中输出符合预留阶段处理条件的IO请求。以图3b为例,示例了两个最小堆302,用户C1、用户C2和用户C3的优先级相同,构成第一优先级。用户C4、用户C5和用户C6优先级相同,构成第二优先级。第一优先级高于第二优先级。用户C1、用户C2和用户C3的IO请求构成一个最小堆,用户C4、用户C5和用户C6的IO请求构成一个最小堆。在输出IO请求时,首先从第一优先级对应的堆中输出预留时间标签不大于当前时间的IO请求,然后再从第二优先级对应的堆中输出预留时间标签不大于当前时间的IO请求。
[0076] 如此,根据对应用户优先级信息,先从高优先级用户的子集中筛选出预留时间标签不大于当前时间的IO请求,当高优先级用户的子集筛选完成后,再从低优先级用户的子集中筛选预留时间标签不大于当前时间的IO请求。
[0077] 实践中,相同优先级的用户的数量可能不止一个,如果高优先级用户的子集中包括多个用户的IO请求,那么在筛选IO请求时,可以比较各用户的预留时间标签不大于当前时间的IO请求的预留时间标签,若高优先级用户的子集中不存在预留时间标签不大于当前时间的IO请求则筛选完成。在对高优先级用户子集中的IO请求筛选,得到预留时间标签不大于当前时间的IO请求后,按照预留时间标签从小到大的顺序,将IO请求从高优先级用户的子集中输出,以供后续处理。在高优先级用户的子集筛选完成后,按照同样的方式接着筛选低优先级用户的子集。
[0078] 具体实现时,可以利用一个优先级数组保存每个子集的优先级信息。例如,创建一个优先级数组,并配置优先级数组中每个数组元素指向一个子集,结合图3b,优先级数组301中的第一个元素1指向一个子集(即,一个最小堆302)优先级数组301中的第二个元素2指向另一个子集(即,一个最小堆302)。需要说明的是,虽然两个最小堆的附图标记相同,但是由于每个最小堆对应的优先级数组中的元素不同,所以两个最小堆的优先级是不同的。
通过优先级数组,以及优先级数组中的元素与子集的对应关系,方便查找对应优先级的子集。
[0079] 结合图3b,本实施例中创建一个优先级数组301并建立优先级数组中每个元素和保存IO请求的子集之间的一一对应关系。一般的,优先级数组301中包括多个元素(图3b示意了两个元素),优先级数组301中每个元素代表预先配置的一个用户优先级级别,并指向该优先级级别对应的一个最小堆。通过依次选取优先级数组中的元素,并查找该元素对应的最小堆排序后的用户IO请求输出,保证了在预留阶段为高优先级用户的IO请求提供更低的时延。
[0080] 由上可知,本实施例的方法在dmClock算法预留阶段引入优先级,改变了预留阶段IO请求输出顺序,而对dmClock算法的Weight-based阶段没有影响,Weight-based阶段的处理和现有技术相同,这里不再重复赘述。
[0081] 下面结合图1,对本实施例的技术方案带来的技术效果进行说明。
[0082] 假设存储系统在t0时刻开始接收用户请求,t1时刻开始处理用户请求。在从t0到t1的时间段内,存储系统总共接收到预留均相同的三个用户A、B和C的的六个IO请求,这六个IO中两个来自用户A,两个来自用户B,两个来自用户C。按前文所述,按照现有dmClock算法,则这六个请求输出顺序为:A1->B1->C1->A2->B2->C2。
[0083] 而按照本实施例的方法,预先为用户A和C配置相同的优先级,并且用户A和C的优先级高于用户B的优先级。存储系统在t0时刻开始接收用户请求,t1时刻开始处理请求。在预留阶段引入优先级后,则这六个请求输出顺序变成:A1->C1->A2->C2->B1->B2。
[0084] 结合存储系统的处理能力进行说明,如果存储系统能满足这三个用户的预留和,即,用户A,用户C和用户B的预留都能满足,如此,虽然用户A,用户C和用户B的预留都得到满足,但是拥有高优先级的用户A和用户C同时获得了比用户B更低的时延,从而满足了高优先级用户的低时延要求。如果存储系统不能满足这三个用户的预留和,由于用户A和用户C的优先级比用户B的优先级高,那么存储系统也能保证集中能力处理高优先级用户的IO请求,而放弃处理低优先级用户的IO请求,从而满足了高优先级用户的低时延要求,以及最低处理能力保障,使得高优先级的用户业务能正常运行。
[0085] 由此可知,通过应用本实施例的方法,在dmClock算法的Constraint-based阶段,如果存储系统的处理能力高于所有用户的预留之和,那么,一方面,存储系统能够同时满足所有用户的预留并且不会导致低优先级的用户被阻塞或延迟。另一方面,高优先级的用户将获得更低时延。如果存储系统的处理能力低于所有用户的预留之和,那么,由于引入了优先级,以尽力保证高优先级的用户的IO请求被处理,所以可能发生长时间阻塞低优先级的用户的IO请求的情况,但是,这种策略在实际应用中更容易被接受,例如,现在有两个业务同时竞争存储资源,一个为OLTP业务,另一个为数据备份业务,如果存储系统处理能力不足,舍备份业务,保OLTP业务,更能满足实际应用场景和需求。另外,由于本实施例的优先级只应用在Constraint-based阶段,所以并不会影响dmClock算法在后一阶段(即,Weight-based阶段)对权重和上限的控制。
[0086] 与前述方法相对应的,本公开还提供了一种存储系统服务质量QoS控制装置,该装置可应用于存储系统的存储节点中。
[0087] 本申请提供的装置可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,可通过处理器10将非易失性存储器50中与存储系统服务质量QoS控制装置60对应的机器可执行指令读取到内存40中运行。从硬件层面而言,如图4所示,为本申请存储节点的一种硬件结构图,除了图4所示的处理器10、内部总线20、网络接口30、内存40、以及非易失性存储器50之外,根据该存储节点的实际功能,还可以包括其他硬件,对此不再赘述。
[0088] 在不同的实施例中,所述非易失性存储器50可以是:存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、DVD等),或者类似的存储介质,或者它们的组合。所述内存40可以是:RAM(Radom Access Memory,随机存取存储器)、易失存储器、闪存。
[0089] 进一步,非易失性存储器50和内存40作为机器可读存储介质,其上可存储由处理器10执行的存储系统服务质量QoS控制装置60对应的机器可执行指令。
[0090] 请参考图5,从功能上划分,存储系统服务质量QoS控制装置60可包括:
[0091] 接收模块601,适于接收用户针对存储系统的输入/输出IO请求;
[0092] 计算模块602,适于对于接收到的用户IO请求,计算各用户IO请求对应的预留时间标签;
[0093] 存储模块603,适于将接收到的IO请求存入IO请求集合中;
[0094] 排序模块604,适于根据预先配置的用户优先级信息,按照对应用户的优先级从高到低的顺序筛选所述IO请求集合中预留时间标签不大于当前时间的IO请求;
[0095] 输出模块605,适于将筛选出的IO请求从所述IO请求集合中输出以对IO请求进行处理。
[0096] 另外,对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0097] 需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0098] 以上所述仅为本申请的较佳实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本申请的保护范围内。