首页> 中国专利> 一种利用多请求队列提升IO并行性和减少小IO延迟的方法

一种利用多请求队列提升IO并行性和减少小IO延迟的方法

摘要

本发明公开了一种利用多请队列提高IO并行性和减少小IO延迟的方法,包括建立多个请求队列的步骤和利用选择策略使IO请求选择相应的请求队列进行处理步骤,从而实现IO请求并行运行,其中选择策略包括:将每个进程与一个请求队列绑定,以使多个进程上的IO请求平均分配到多个请求队列上处理;将每个CPU与一个请求队列绑定,以使多个CPU上的IO请求平均分配到多个请求队列上处理。本发明还公开了上述方法在FC或FCoE存储系统中的应用。本发明将大量的IO请求根据某种策略分配到多个请求队列中,实现IO请求的并行处理,提升IO请求的处理效率,达到提高IO吞吐率的效果,并可通过给小IO请求分配更多的队列数,提升小IO的实时处理效率,来减少小IO请求处理的延迟。

著录项

  • 公开/公告号CN102831014A

    专利类型发明专利

  • 公开/公告日2012-12-19

    原文格式PDF

  • 申请/专利权人 华中科技大学;

    申请/专利号CN201210268098.X

  • 发明设计人 刘景宁;童薇;冯丹;吴龙飞;林超;

    申请日2012-07-30

  • 分类号G06F9/50(20060101);

  • 代理机构42201 华中科技大学专利中心;

  • 代理人李佑宏

  • 地址 430074 湖北省武汉市洪山区珞瑜路1037号

  • 入库时间 2023-12-18 07:46:04

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-05-25

    授权

    授权

  • 2013-02-06

    实质审查的生效 IPC(主分类):G06F9/50 申请日:20120730

    实质审查的生效

  • 2012-12-19

    公开

    公开

说明书

技术领域

本发明涉及计算机存储器技术领域,具体是一种提升IO并行性 和减少小IO延迟的方法。

背景技术

目前随着高性能计算与应用服务的发展,更多的高性能存储区域 网络开始利用高速网络与专有协议来构建,这主要包括基于以太网与 iSCSI协议的IP-SAN、基于光纤通道和FCP协议的FC-SAN,以及 基于以太网和光纤通道的新型FCoE存储区域网络。在FC-SAN和 FCoE存储区域网络中,将目标端系统的存储设备通过存储网络协议 挂载到发起端系统中,作为一个块设备进行访问,随着存储网络技术 的发展,尤其是万兆网络的推出,发起端系统访问目标端设备的带宽 也不断提升,而发起端的IO请求的并行处理能力却未得到提升。现 在的服务器通常都搭载了多核处理器,发起端系统挂载的目标端块设 备只有一个请求队列,所有的IO请求都需要互斥的进入请求队列, 完成IO合并、IO调度、请求处理等工作,对于IO次数繁重的存储 环境,单个请求队列会成为请求处理的瓶颈,不能高效的利用多核系 统的并行处理能力。

在存储区域网络中,小IO请求(一般指小于4KB的请求)通常 是实时性要求较高的事务处理请求,而大IO请求通常是数据传输请 求。在单个请求队列环境下,没有区分小IO请求和大IO请求机制, 所有IO请求以相同的方式进行处理,具有相近的延迟,不能满足实 时性要求较高的小IO请求。单个请求队列在大量的小IO请求的环境 下,请求队列会成为所有IO请求竞争的对象,IO合并和IO调度的 效率都会降低,不能充分利用多核系统,会很大的影响IO处理的并 行性,增加小IO请求的处理延迟,不能满足实时性要求。现有满足 小IO请求实时性要求的方法主要是通过修改请求队列的调度器,授 予小IO请求优先处理权,未能解决单个请求队列是并行处理瓶颈的 问题。

发明内容

本发明提供一种利用多请队列提高IO并行性和减少小IO延迟的 方法,可以提升IO并行性和减少小IO延迟,满足高负载和实时性要 求。

本发明为解决上述技术问题采用的具体方案如下

(1)创建多个请求队列;

(2)为所述多个请求队列制定选择策略,使IO请求选择相应的 请求队列进行处理,实现IO请求并行运行;

其中,所述选择策略包括:

将进程与一个请求队列绑定,使多个进程上的IO请求平均分配 到多个请求队列上处理;

将CPU与一个请求队列绑定,使多个CPU上的IO请求平均的 分配到多个请求队列上处理。

对小IO请求和大IO请求进行队列划分处理,并且使小IO请求 的队列数大于处理大IO请求的队列数;

本发明可以使用默认的单请求队列,而不使用或者开启多请求队 列。

本发明可以通过命令接口发送配置命令,确定请求队列的个数和 选择队列的策略。

本发明中创建多个请求队列优选采用如下具体步骤:

(1.1)为块设备创建一个通用统一命令接口;

(1.2)通过该命令接口发送创建多请求队列的命令;

(1.3)系统内核接收到创建多请求队列命令后,将分配多个请求 队列,并使用默认请求队列参数对新分配的请求队列进行初始化,并 完成多请求队列向系统内核的注册。

在一个多核系统中,一个块设备在系统内核中只有一个请求队 列,为了提升IO请求处理的并行性,在系统内核中给一个块设备创 建多个请求队列,并修改IO请求发送到请求队列的入口,增加多请 求队列的选择策略,可以根据不同请求队列的选择策略来满足不同存 储环境的需求。存储区域网络的块设备通常都是以SCSI磁盘设备的 方式挂载,为了实现多请求队列,必须修改SCSI子系统,使其支持 多请求队列,提升SCSI子系统的并行性。

本发明还公开了一种利用上述方法在FC或FCoE存储系统中的 应用,其具体包括如下步骤:

(1)用户发起读写操作,文件系统生成IO请求,将IO请求转 化为通用块层IO请求;

(2)进入多请求队列的入口,依据IO请求大小选择请求队列, 将通用块层IO请求发送到选择的请求队列上,并完成IO的合并、调 度和初始化;

(3)将经步骤(2)处理后的IO请求发送到SCSI子系统,转 化为SCSI请求,并发送到实现存储网络协议的SCSI底层驱动模块;

(4)SCSI底层驱动模块将所述SCSI请求转化为存储网络协议 帧,通过存储网络发送目标端处理。

本发明的技术效果是将大量的IO请求根据某种策略分配到多个 请求队列中,实现IO请求的并行处理,提升IO请求的处理效率,达 到提高IO吞吐率的效果,并可通过给小IO请求分配更多的队列数, 提升小IO的处理效率,来减少小IO请求处理的延迟。

附图说明

图1为本发明多请求队列的创建和配置流程;

图2为本发明多请求队列的结构,图中有8个请求队列(可不限 于8个);

图3为本发明多请求队列选择策略的结构,其中Q(x)表示请求队 列x;

图4为本发明在存储系统中的多请求队列结构;

图5为本发明策略三多请求队列选择流图。

具体实施方式

下面结合附图和具体实施例,对本发明做进一步详细说明。以下 实施例仅是说明性的,不构成是对本发明的限定。

本发明是针对多核环境下,通过实现多请求队列和多请求队列的 选择策略来提升IO并行处理能力和保证小IO实时性要求的方法。

本发明首先需要建立多请求队列。实现多请求队列,为块设备创 建统一的接口,可以为块设备创建enable、mode、bind三个接口。enable 为开启和关闭多请求队列的接口,mode为使用请求队列个数的接口, bind为策略选择的接口,可以通过这三个接口修改多请求队列的运行 方式。

利用建立的多请求队列,确定选择策略,根据策略选择相应的请 求队列进行IO请求的运行。选择策略具体如下:

策略0:使用默认的单个请求队列,不使用多个请求队列。

策略1:开启多个请求队列,并将每个进程pid与一个对应的请 求队列Q绑定,绑定条件采用取余运算:Q=pid % nr_q的余数(Q 等于pid对nr_q取余,这里pid为进程描述符ID,nr_q为请求队列 的个数,Q为待绑定的队列序号),这样使多个进程能够平均地分配 到多个请求队列上处理。

在多任务系统中,有大量的用户进程会同时向一个块设备发起 IO请求,在开启多个请求队列情况下,通过策略1,可以将大量的用 户进程依据进程ID分别绑定到一个请求队列,不同进程的IO请求将 会发送到与该进程绑定的请求队列上处理,从而发挥请求队列的作用 和实现IO请求并行处理。

进程和一个请求队列绑定是指让一个进程的所用IO请求都分配 到一个固定的请求队列上处理,而分配的方式采用取余运算 (pid%nr_q)。在请求队列个数确定的情况下,一个进程ID,在该进 程的生存期(进程创建到进程销毁)内保持不变,那么pid%nr_q对 于一个进程就是一个恒定的值。比如一个进程ID为6(pid=6),当前 使用的队列个数为4,那么6%4=2,那么这个进程的请求都会分配到 序号为2的队列Q(2)上处理。又比如一个进程ID为7,那么7%4=3, 那个该进程的请求都会分配到队列序号为3的队列Q(3)上。

策略1的取余运算也称取摸运算,具体运算符不限于用”%”表 示。

策略2:开启多个请求队列,并将每个CPU与一个对应的请求 队列Q绑定,绑定条件采用取余运算:Q=cpu%nr_q(Q等于cpu对 nr_q取余,这里cpu为IO请求所在的处理器ID,nr_q为请求队列的 个数,Q为待绑定的请求队列的序号),可以平均的分配到多个请求 队列上处理。

在多核系统中,一个IO请求会在一个CPU上处理,在开启多个 请求队列情况下,将CPU与一个请求队列绑定,那么在同一个CPU 上处理的请求将会发送到与该CPU绑定的请求队列上处理,这样可 以避免IO请求切换到别的CPU,防止在当前CPU上处理的IO请求 的Cache缓存失效,从而保证IO性能和实现IO请求的并行处理。

CPU与一个请求队列绑定是指让一个CPU上的所用请求都分配 到一个固定的请求队列上进行处理,而分配方式为cpu%nr_q。在一 个CPU上所用的请求cpu%nr_q都是一个恒定的值。比如一个IO请 求,当前所在的CPU的ID为15,当前使用的队列个数为4,那么 15%4=3,那么这个请求会分配到Q(3)上处理,也就是所有在cpu 的ID为15上请求,都会被分配到队列序号为3的队列Q(3)上。

策略1有利于同一进程IO请求在请求队列完成IO合并和IO调 度,策略2有利于减少IO请求在CPU上切换而产生的Cache失效, 但不利于IO合并和IO调度。如果开启请求队列的IO合并和IO调 度器功能,则选择策略1,如果关闭请求队列的IO合并和IO调度器 功能,则选择策略2。

策略3:开启4个请求队列(0,1,2,3队列),请求队列0,1用来 处理小块级别的IO请求(例如块大小为512B~2KB),请求队列2用 来处理中等块级别的IO请求(例如块大小4KB~32KB),请求队列3 用来处理大块级别的IO请求(例如块大小大于等于64KB的请求), 既可以实现IO请求的并行处理,又尤其保证小IO请求处理的实时性 要求。

策略4:与策略3的区别是,开启6个请求队列,用请求队列0, 1,2,3来处理小IO请求,其它与策略3相同,能更好的保证小IO 请求处理的实时性要求。

  策略   enable   mode   bind   0   0   0   0   1   1   2~8   0   2   1   2~8   1   3   1   4   2

  4   1   6   4

表1:多请求队列选择策略和配置参数对应表

Enable=0/1表示默认单请求队列/开启多请求队列;mode表示使 用请求队列个数;bind表示策略,0表示进程与请求队列绑定,1表 示CPU与请求队列绑定,2表示使用两个请求队列专门处理小IO请 求,4表示使用四个请求队列专门处理小IO请求。

本实施例中策略0是指使用默认的单个请求队列或是在开启多 个请求队列时设置队列个数为1,策略0为多请求队列选择策略的一 种特殊情况。

策略3和4中的请求队列数量以及mode和bind的具体取值并不 限定于上述数值,也可以为其它的,如开启8个请求队列,6个用于 小IO请求,其它两个分别用于中IO请求和大IO请求,只要处理小 IO请求的队列数大于处理大IO请求的队列数即可。

开启多请求队列和配置策略后,IO请求会按照多请求队列的策 略发送到特定的请求队列中,实现IO并行处理。对小IO请求和大 IO请求可以进行分队列处理,并且处理小IO请求的队列数大于处理 大IO请求的队列数,来保证小IO请求的实时性要求,同时可以满足 大IO请求的处理要求。

图4和图5示出了本发明的方法在FC或FCoE存储系统中使用 策略3具体应用时,步骤如下:

步骤1:用户发起读写操作,文件系统生成IO请求,将IO请求 转化为通用块层IO请求。

步骤2:进入多请求队列的入口,使用策略3(如图5)依据IO 请求大小选择请求队列,如果为小IO请求(512B~2KB),则选择请 求队列0或1;如果是中IO请求(4KB~32KB),则选择请求队列2; 如果是大IO请求(大于等于64KB),则选择请求队列3。将通用块 层IO请求发送到选择的请求队列上完成合并,调度,初始化处理等 工作。

步骤3:将IO请求发送到SCSI子系统,转化为SCSI请求,并发 送到实现存储网络协议的SCSI底层驱动模块。

步骤4:SCSI底层驱动模块将SCSI请求转化为存储网络协议帧, 通过存储网络发送目标端处理。

本发明提出的多请求队列和多请求队列的选择策略的方法,可以 提升IO并行处理能力,也能保证小IO的实时性要求。本发明对于保 证数据传输业务的应用,且实时性要求较高的小IO,效果明显。

以上所述仅为本发明的一种实例而已,并不用以限制本发明,凡 在发明的精神和原则之内,所做的任何修改、等同替换、改进等,均 应包含在本发明保护的范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号