存储设备IO分配方法、存储设备IO分配装置及服务器系统与流程

文档序号:11323069阅读:750来源:国知局
存储设备IO分配方法、存储设备IO分配装置及服务器系统与流程

本发明属于计算机应用技术领域,具体地涉及存储设备的输入输出(io)能力进行合理分配的方法、装置及采用该存储设备io分配方法、存储设备io分配装置的服务器系统。



背景技术:

随着数据公司的涌现和业务发展,全球优秀的云计算供应商都推出了云存储服务。目前云存储可分为冷存储和热存储,其中热存储既是对处于活跃使用状态或预期会频繁访问(读取和写入)的数据进行存储,例如在来自远程的终端频繁访问存储服务器上的数据的场景中,需要频繁对存储设备进行读写操作。冷数据存储是指很少使用或访问的非活跃数据的存储,需要长时间存储并且几乎不访问的合规性和存档数据即为冷存储,其示例包括:备份、存档和灾难恢复数据集,不再经常查看、但访问时应立即可用的较旧的媒体内容,诸如长期存储的科学数据、面向医疗保健机构、转码为其他格式后的原始媒体文件等。

当存储服务器同时保存有冷存储数据以及热存储数据时,对这两种数据进行读写的优先级是不同的。换言之,应当根据不同的存储数据类型,对他们所需占用的io资源加以限制,例如将对存储设备进行读写的进程进行分组,并对每组设定权重以标志该组进程读写访问的优先级别,以节省io资源,优化读写速度。

目前linux内核中存在的几种存储设备io分配方法,普遍采用noop、deadline与cfq等磁盘调度器,然而noop磁盘调度器与deadline磁盘调度器不支持按照进程组的权重来限制该组可用的io资源,即权重限流。而cfq磁盘调度器虽然能够实现权重限流,但其仅适用于传统的机械式磁盘,在高速块设备,例如固态硬盘上性能较差,不能充分发挥固态硬盘的性能。



技术实现要素:

为克服上述缺陷,本发明提供了能够适用于固态硬盘、采用权重限制分配给各进程的可用io资源、并且能够根据实际运行状态实时调整上述分配的存储设备io分配方法、存储设备io分配装置及服务器系统。

根据本发明的第一方面,提供一种存储设备io分配方法,用于分配存储设备io至根据对该存储设备的访问频率划分的多个进程组,包括下述步骤:io总数确定步骤:以存储设备的io容量减去已占用的io数,确定当前可用的存储设备io总数;额定io数计算步骤:根据每个进程组的权重值计算每个进程组的额定io数,其中一个进程组的额定io数在存储设备io总数中的占比等于一个进程组的权重值在多个进程组的总权重值中的占比;比较确定步骤:比较每个进程组的额定io数和io需求数,以将额定io数大于io需求数的进程组确定为富余组,并且将额定io数小于io需求数的进程组确定为饥饿组;和调整步骤:将所有的富余组的富余io数的总和分配给所有饥饿组,其中富余组的富余io数为富余组的额定io数与io需求数的差值。

根据本发明第一方面的存储设备io分配方法,根据各进程组的设定权重进行存储设备io资源初步分配。因此可以考虑到各进程组进程特点,例如对存储设备的读写速度、响应情况等,优先保证特定进程组能够分配到充足的io资源。与此同时,可以考虑到各进程组实际io资源的利用情况,对闲置io资源进行再分配,最大化地发挥了单个存储设备的io能力,提高存储设备利用率,降低对额外存储设备的需求,降低成本。

在本发明第一方面的存储设备io分配方法中,优选地,在调整步骤中,根据富余io数的总和以及每个饥饿组的权重值,确定将要分配给每个饥饿组的调整io数;其中一个饥饿组的调整io数在富余io数的总和中的占比等于一个饥饿组的权重值在所有的饥饿组的总权重值中的占比。

在本发明第一方面的上述优选方案中,当对闲置io资源进行再分配以满足当前欠缺io资源的进程组需求时,仍然采用按照各进程组的权重进行上述再分配。因此,即使当具有多个饥饿组时,还可尽量为优先级较高的饥饿组分配较多的io资源。

在本发明第一方面的存储设备io分配方法中,优选地,存储设备是固态硬盘。

根据本发明第一方面的存储设备io分配方法,不但能根据各组的权重进行io限流限流,而且特别适用于固态硬盘,解决了现有技术中cfq调度算法在固态硬盘高速块设备上性能较差的缺陷,能够充分发挥固态硬盘的性能优势。而相较于采用noop和deadline算法的调度算法,还能够实现各组的权重进行io限流。

在本发明第一方面的存储设备io分配方法中,优选地,实时循环执行比较确定步骤和调整步骤,因此,能够根据各进程组实际的io请求数量及时、主动地调整分配给各进程组的可用io资源。

根据本发明的第二方面,提供一种存储设备io分配装置,用于分配存储设备io至根据对该存储设备的访问频率划分的多个进程组,存储设备io分配装置包括下述模块:io总数确定模块,io总数确定模块用于以存储设备的io容量减去已占用的io数确定当前可用的存储设备io总数;额定io数计算模块,额定io数计算模块根据每个进程组的权重值计算每个进程组的额定io数,其中一个进程组的额定io数在存储设备io总数中的占比等于一个进程组的权重值在多个进程组的总权重值中的占比;比较确定模块,比较确定模块比较每个进程组的额定io数和io需求数,以将额定io数大于io需求数的进程组确定为富余组,并且将额定io数小于io需求数的进程组确定为饥饿组;以及调整模块:调整模块将所有的富余组的富余io数的总和分配给所有饥饿组,其中富余组的富余io数为富余组的额定io数与io需求数的差值。

在本发明第二方面的存储设备io分配装置中,优选地,在调整模块中,根据富余io数的总和以及每个饥饿组的权重值,确定将要分配给每个饥饿组的调整io数;其中一个饥饿组的调整io数在富余io数的总和中的占比等于一个饥饿组的权重值在所有的饥饿组的总权重值中的占比。

在本发明第二方面的存储设备io分配装置中,优选地,存储设备是固态硬盘。

在本发明第二方面的存储设备io分配装置中,优选地,实时循环执行比较确定步骤和调整步骤。

一种服务器系统,包括存储设备,以及根据本发明第二方面的存储设备io分配装置。

附图说明

图1是本发明的服务器系统示意图。

图2示出本发明的存储设备io分配方法流程图。

图3示出本发明的存储设备io分配装置模块化视图。

具体实施方式

将参照附图进行说明关于根据本发明的存储设备io分配方法、存储设备io分配系统以及服务器系统的优选实施例。

为使得本发明的技术方案和优点更加清楚明白,下面用本发明的一个应用示例进一步加以说明。

如图1所示,在本发明的服务器系统中,利用linux内核提供的cgroup控制组机制将访问该存储服务器上运行的进程分为3个进程组g1~g3,以限制、记录、隔离每个进程组所使用的物理资源,诸如cpu、内存储器以及可使用本发明的方法和装置分配的着重的io资源。具体地,在本发明中,存储设备io分配装置1为cgroup控制组机制下的子系统,用于限制每个进程组连接至存储设备时可用的io数。

在本发明的实施例中,存储设备例如为固态硬盘ssd,该固态硬盘ssd一次能处理的最大io请求数(容量)例如为1610。多个进程利用cgroup控制组机制被分为3个进程组,分别为热存储读写进程组g1、普通进程组g2及冷存储读写进程组g3。其中g1假设为上述例举的频繁访问存储设备的进程的集合,该进程组需要有较高的优先级以保证快速读写性能,减小延迟,因此将其权重w1设定为1000。冷存储读写进程组g3例如时用于访问归档存储数据的进程组g3,通常无需为其预留较多的io资源,因此将其权重设定为一较小的权重值w3=100。而其余进程划分为普通进程组g2,其具有介于热存储读写进程组g1及冷存储读写进程组g3之间的存储设备读写优先级,将其权重w2设定为500。上述权重值能够任意设置,只要能够以其比例关系体现进程组间对存储资源占用的优先性即可。

下面将实施如图2所示的本发明的存储设备io分配方法,以将该固态硬盘ssd的例如1610个可用io资源分配至3个进程组g1,g2及g3,该可用io资源取决于存储设备即固态硬盘ssd自身的性能参数。

首先,执行io总数确定步骤st1。假设当前三个进程组g1,g2及g3中正在由固态硬盘驱动处理的io请求数为10,则在该步骤中以存储设备的io容量,即1610,减去已占用的io数,确定当前可用的io总数t’,即为1600。

然后,执行额定io数计算步骤st2,在该步骤中,根据三个进程组g1,g2及g3的权重值w1=1000,w2=500,w3=100,计算三个进程组g1,g2及g3的额定io数r1,r2,r3。其中r1,r2,r3在可用的io总数t’中的占比等于进程组g1,g2及g3的权重值w1,w2,w3在进程组g1,g2及g3的总权重值中的占比,因此热存储读写进程组g1的额定io数r1=t’*w1/(w1+w2+w3)=1000。类似地,可得出r2=500,r3=100。在此,为了清楚起见,每个进程组的额定io数经计算得出恰好等于其权重值,然而本领域技术人员应当明白,每个组的权重值可以任意设定,只要能够以其比例关系体现每个组占用io资源的优先级别即可。

然后,在比较确定步骤st3中,比较三个进程组g1,g2及g3各自的额定io数和io需求数。例如某一时刻,热存储读写进程组g1需要的io数q1为820,则进程组g1的额定io数r1大于其io需求数q1,将进程组g1确定为富余组,表示按照权重分配给进程组g1的io配额足够满足其需求,而冷存储读写进程组g3突然有大量的io请求待处理,假设此时进程组g2及g3所需的io数分别为q2=600,q3=200。从而进程组g2及g3的额定io数r2,r3小于他们各自的io需求数q2,q3,因此进程组g2及g3被确定为饥饿组,表示按照权重分配给进程组g2及g3的io配额不足够满足其需求。此处,“富余组”是为表述本发明中额定io数大于等于io需求数q1的进程组的自定义名词,类似地,下述“饥饿组”是为表述本发明中额定io数小于io需求数q1的进程组的自定义名词。

此时,需要执行调整调整步骤st4,以将成为富余组的热存储读写进程组g1的富余io数s分配给饥饿组g2及g3,富余io数s为即进程组g1的额定io数r1与其io需求数q1的差值,在本实施例中,富余io数s为180。然后,根据富余io数s以及作为饥饿组的进程组g2及g3的权重值w2,w3,确定将要分配给两个饥饿组的调整io数ad2,ad3。其中,在本发明的技术方案中,每个饥饿组的调整io数在富余io数的总和中的占比等于该饥饿组的权重值在所有的饥饿组的总权重值中的占比。因此作为饥饿组的进程组g2的调整io数ad2=w2*s/(w2+w3)=150。类似地,计算进程组g3的调整io数ad3为30,则能够将原先分配至热存储读写进程组g1的闲置io分配给冷存储读写进程组g3,以使得可以及时处理冷存储读写进程组g3突然增大的io请求。

在本实施例中,示出仅有一个富余组的情况。在实际应用中,可能出现有多个富余组,则将各个富余组的富余io数总和作为上述富余io数分配给各个饥饿组。因此本发明适用于具有任意数的富余组、饥饿组的情形。

由上述调整后,对于额定io数大于io需求数的进程组,实际分配到的io数为其io需求数。对于额定io数小于需求数的进程组,实际分配到的io数为额定io数与调整io数的总和。

由上述可知,本发明第一方面提供的io分配存储设备io分配方法,使得对于多个进程组的第j个进程组gj,符合:

rj=(t-d)*wj/x

其中:

t:该存储设备一次能处理的io容量;

d:该存储设备驱动当前已被占用的io数;

d:该进程组在该存储设备驱动里占用的io数;

qj:进程组gj的io需求数;

wj:进程组gj的权重值;

rj:进程组gj基于权重可分配到的额定io数;

aj:进程组gj最终分到的io数;

x:所有进程组的权重之和;

y:所有饥饿组的权重之和;

s:所有富余组的富余io数总和。

图3示出本发明的存储设备io分配装置1模块化视图,该存储设备io分配装置1用于分配存储设备io至根据对该存储设备的访问频率划分的多个进程组,存储设备io分配装置1包括下述模块:io总数确定模块10,io总数确定模块10用于以存储设备的io容量减去已占用的io数确定当前可用的存储设备io总数;额定io数计算模块20,额定io数计算模块20根据每个进程组的权重值计算每个进程组的额定io数,其中一个进程组的额定io数在存储设备io总数中的占比等于一个进程组的权重值在多个进程组的总权重值中的占比;比较确定模块30,比较确定模块30比较每个进程组的额定io数和io需求数,以将额定io数大于io需求数的进程组确定为富余组,并且将额定io数小于io需求数的进程组确定为饥饿组;以及调整模块40:调整模块40将所有的富余组的富余io数的总和分配给所有饥饿组,其中富余组的富余io数为富余组的额定io数与io需求数的差值。

在本发明第二方面的存储设备io分配装置中,优选地,在调整模块40中,根据富余io数的总和以及每个饥饿组的权重值,确定将要分配给每个饥饿组的调整io数;其中一个饥饿组的调整io数在富余io数的总和中的占比等于一个饥饿组的权重值在所有的饥饿组的总权重值中的占比。

尽管在此已经详细描述了本发明的各种优选实施例,但是本领域技术人员应当理解,在不脱离所要求保护的本发明的情况下,可以对其进行变化。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1