技术领域
[0001] 本
发明涉及磁盘控制方法,特别涉及磁盘IO请求控制方法。
背景技术
[0002] 磁盘
访问控制在规模较大的存储系统中是非常关键的模
块,这是因为一方面磁盘作为目前主流计算机
服务器的
硬件瓶颈点,提高磁盘访问速度,最大限度发挥磁盘IO(输入输出)性能就能有效提高系统的整体性能;另一方面,在某些读、写具有不同优先级的场合,必须对磁盘访问进行有效控制才能提供稳定的服务。
[0003] 在传统的电视播出机构、新兴的互联网视频供应商以及互联网网盘供应商等环境下,都会遇到海量数据的存储问题,通用的磁盘访问模型是不加限制的并行访问,这种方法实现难度低,在小并发量访问的前提下能够有效发挥磁盘性能,但是不适合大并发量的访问,在规模较大的并发访问情况下,容易发生磁盘抖动,严重的甚至会导致系统失去响应,带来灾难性后果。
[0004] 以目前最流行的VOD点播业务提供商为例,随着网络带宽的升级以及编码技术的革新,限制VOD业务开展最关键的因素已经从网络带宽逐渐转移到磁盘存储。由于VOD业务是一个请求占用一个单独的信道来实现互动,通用的磁盘并行访问模型效率低,不能有效发挥磁盘的性能,直接导致运营商单个请求成本过高,陷入VOD运营不盈利的尴尬。
[0005] 目前
操作系统对磁盘的调度
算法主要有先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)以及循环扫描算法(CSCAN)等,这些算法对于单个或者少量的并发IO请求,均能够有效提高IO响应速度,但由于操作系统对于大并发的IO请求没有特殊的优化,在大并发的IO请求状况下会产生如下问题:随着并发数的增加,系统调度产生的开销增加到不能忽略;读、写具有相同的优先级,不能保证读或者写优先级高的场合;读写对磁盘造成的压
力难以计算,难以评估磁盘的剩余负载能力;磁盘有可能进入抖动状态,造成灾难性后果。
发明内容
[0006] 本发明的目的是提供一种IO请求控制方法。本发明的目的还在于提供一种IO请求控制装置。
[0007] 本发明的技术方案包括
[0008] 一种IO请求控制方法,包括:将磁盘的最大IO带宽分为两个逻辑部分,包括第一部分带宽和第二部分带宽,其中该第一部分带宽具有最低IO带宽;将所有IO并发通过数个IO队列访问磁盘。
[0009] 在读优先模式下,所述第一部分带宽是最小写带宽,所述第二部分带宽是读带宽。检查当前已使用的写带宽是否超出了该最小写带宽。
[0010] 在写优先模式下,所述第一部分带宽是最小读带宽,所述第二部分带宽是写带宽。检查当前已使用的读带宽是否超出了该最小读带宽。
[0011] 其中,检查当前剩余的IO带宽是否满足目前的IO请求所需的带宽,如果是则返回带宽,如果否则拒绝请求。在当前IO请求小于该最大IO并发访问数时,以空队列访问磁盘。
[0012] 本发明还包括一种IO请求控制装置,包括IO代理模块,其中该IO代理模块将磁盘的最大IO带宽分为两个逻辑部分,包括第一部分带宽和第二部分带宽,其中该第一部分带宽具有最低IO带宽,并且将所有IO并发通过数个IO队列访问磁盘。
[0013] 在读优先模式下,所述第一部分带宽是最小写带宽,所述第二部分带宽是读带宽。该IO代理模块检查当前已使用的写带宽是否超出了该最小写带宽。
[0014] 在写优先模式下,所述第一部分带宽是最小读带宽,所述第二部分带宽是写带宽。该IO代理模块检查当前已使用的读带宽是否超出了该最小读带宽。
[0015] 该IO代理模块检查当前剩余的IO带宽是否满足目前的IO请求所需的带宽,如果是则返回带宽,如果否则拒绝请求。
[0016] 该IO代理模块在当前IO请求小于该最大IO并发访问数时,以空队列访问磁盘。
[0017] 本发明的积极进步效果在于:对IO请求进行有效控制及调度,使得IO请求对磁盘造成的压力随着请求数的增加具有线性增长的特点,在充分发挥磁盘IO性能的前提下,大大提高大并发IO访问的系统
稳定性,特别适于会对磁盘产生大量并发的访问请求的应用环境。
附图说明
[0019] 图2是本发明的实施例2的示意图。
具体实施方式
[0020] 以下结合附图所示实施例对本发明作详细说明。
[0021] 对于磁盘来说,实验表明,磁盘的IO输出并不随着并发访问数的增长呈线性增长,而是呈现一个拱
门型的抛物线。因此,任何一个存储系统存在一个能够最大限度发挥磁盘输入输出(IO)性能的并发访问数,在本
说明书中记为MagicN。在MagicN个并发访问数下,能够达到的最大IO输出,在本说明书中记为MAX_RW_IO。
[0022] 通过设置不同的并发访问数n,记录在某一时间段内每个线程IO读取、写入的字节数,所有线程IO读取、写入字节数的总和作为磁盘的IO输出,通过统计可以得出磁盘的最大IO输出,获取MagicN。
[0023] 本发明的方法将磁盘的最大IO带宽逻辑上分成两部分,第一部分带宽和第二部分带宽。在读优先模式下,所述第一部分带宽是最小写带宽,第二部分带宽是可变的读带宽。所述的最小写带宽是需要保证的最低写请求带宽,用于写请求,在本说明书记为MIN_W_IO,则最大读带宽为MAX_RW_IO-MIN_W_IO。而在写优先模式下,所述第一部分带宽是最小读带宽,第二部分带宽是可变的写带宽。
[0024] 在不同的应用中,可以设定写请求优先,或是读请求优先。
[0025] 下面描述读请求和写请求分别在写优先和读优先的情况下的控制过程。
[0026] 实施例1,如图1所示的,对于读请求的处理过程。
[0027] 当收到一个读请求时,如果应用是写请求优先的情况下(参见图1的左边部分),则判断是否有空余的带宽供该读请求使用,参见步骤110。具体为,当前实际读负载占用带宽标记为CR_IO,当前实际写负载占用带宽标记为CW_IO,那么当前系统的空闲带宽为:MAX_RW_IO-CW_IO-CR_IO;比较系统的空闲带宽与实际请求的读带宽(SR_IO),如果有剩余的IO带宽可供该读请求使用,则返回带宽(步骤400),否则就拒绝该请求(步骤300)。
[0028] 如果是在读优先的情况下(参见图1右边部分),由于存在最小写带宽MIN_W_IO,可供分配给读请求的最大带宽为MAX_RW_IO-MIN_W_IO,因此判断是否有剩余带宽的方法有所不同(步骤210)。当前实际可分配给读请求的带宽为:MAX_RW_IO-MIN_W_IO-CR_IO,比较这个值与实际请求的读带宽,如果有IO带宽可供该读请求使用,进入到下一步判断,反之拒绝请求(步骤300)。
[0029] 通过步骤210的计算,即使存在IO带宽可供读请求使用,也并不表示这个IO带宽是空闲的,因为在读优先模式下,如果读请求未饱和,存在CW_IO>MIN_W_IO的情况。这就要判断是否要对写请求进行调度或者释放来满足读请求。步骤220与步骤110相同,比较系统的空闲带宽与实际请求的读带宽,如果有剩余的IO带宽可供该读请求使用,则返回带宽(步骤400),否则需要释放写带宽来满足读请求(步骤230)。
[0030] 实施例2,对于写请求的处理过程
[0031] 如图2所示,与读请求类似,当受到一个写请求处理时,如果是读请求优先,则检查当前剩余带宽(步骤110′),即MAX_RW_IO-CR_IO-CW_IO,如果数值小于写请求所需的带宽,则返回所请求的带宽(步骤400′),否则由于资源耗尽而拒绝请求(步骤300′)。
[0032] 如果是写优先级高,则先检查是否存在带宽可满足写请求(210′),如果不存在拒绝请求(300′)。否则判断是否需要释放读请求来满足写请求所需带宽(步骤220′),如果是,则释放带宽(230′),而如果否,则返回带宽(400′)。在图2中,SW_IO表示当前请求的写带宽,MIN_R_IO表示在写优先模式下需要保证的最低读带宽。
[0033] 另外,在本发明中,所有IO请求通过MagicN个队列访问磁盘,使得磁盘的负载以及剩余带宽是可计算的。
[0034] 可以简单的认为每一个队列不管是用来响应读请求还是响应写请求,具有相同的带宽,这里记为SINGLE_QUEUE_BAND,则:
[0035]SINGLE_QUEUE_BAND=MAX_RW_IO/MagicN 方程1
[0036] 由此可计算得到最低写带宽的最少写队列,记为MIN_W_QUEUE,如下:
[0037]MIN_W_QUEUE=MIN_W_IO/SINGLE_QUEUE_BAND 方程2
[0038] 写队列和读队列根据不同的需求具有不同的队列长度,读请求的平均速率记为MEAN_R_RATE,写请求的平均速率记为MEAN_W_RATE,读请求能够容忍的最大响应时间为RT,写请求能够容忍的最大响应时间为WT,由此可计算得出写队列的最大长度(记为W_QUEUE_SIZE)以及读队列的最大长度(记为R_QUEUE_SIZE),则:
[0039]
[0040] 在读优先级较高的情况下,系统首先保证MIN_W_QUEUE个写队列,然后根据读写请求的数目动态的的将读写请求分配到MagicN-MIN_W_QUEUE个读写队列中。由于读优先级较高,因此在接收到一个读请求时,首先查看活动读写队列是否还有剩余的资源,如果有进行分配,如果没有则查看活动读写队列中是否存在写队列,如果存在将其中的写队列调度到固定写队列中,释放资源以响应读请求,否则积极拒绝读请求。
[0041] 由于不管接收到多少IO请求,代理模块均采用MagicN个线程访问磁盘,一方面保证了能够尽可能发挥磁盘的最大IO性能,保证了对磁盘的访问不会发生抖动,系统可以持续稳定的运行,另一方面在任何时候系统的IO负载RT_LOAD以及空闲带宽AV_BAND都是可衡量的。当前系统的写负载数目记为W_COUNT,读负载数目为记R_COUNT,则有:
[0042]
[0043] 由于单独一个队列只能被读请求或者写请求单独拥有,假定当前容纳读请求的队列没有多余资源,那么系统还可以接受单独的写请求带宽AV_W_BAND或者单独的读请求带宽AV_R_BAND可由此计算:
[0044]
[0045] 对于写优先的情况,具有类似的处理机制。
[0046] 根据以上对本发明的阐述,本发明的具体实施方式包括:
[0047] 一种IO请求控制方法,包括:将磁盘的最大IO带宽分为两个逻辑部分,包括第一部分带宽和第二部分带宽,其中该第一部分带宽具有最低IO带宽;将所有IO并发通过数个IO队列访问磁盘。
[0048] 其中,检查当前剩余的IO带宽是否满足目前的IO请求所需的带宽。
[0049] 在读优先模式下,所述第一部分带宽是最小写带宽,所述第二部分带宽是读带宽。检查当前已使用的写带宽是否超出了该最小写带宽。在当前IO请求小于该最大IO并发访问数时,以空队列访问磁盘。
[0050] 在写优先模式下,所述第一部分带宽是最小读带宽,所述第二部分带宽是写带宽。检查当前已使用的读带宽是否超出了该最小读带宽。在当前IO请求小于该最大并发访问数时,以空队列访问磁盘。
[0051] 本发明的具体实施方式还包括一种IO请求控制装置,包括IO代理模块,其中该IO代理模块将磁盘的最大IO带宽分为两个逻辑部分,包括第一部分带宽和第二部分带宽,其中该第一部分带宽具有最低IO带宽,并且将所有IO并发通过数个IO队列访问磁盘。
[0052] 该IO代理模块检查当前剩余的IO带宽是否满足目前的IO请求所需的带宽。
[0053] 在读优先模式下,所述第一部分带宽是最小写带宽,所述第二部分带宽是读带宽。该IO代理模块检查当前已使用的写带宽是否超出了该最小写带宽。该IO代理模块在当前IO请求小于该最大IO并发访问数时,以空队列访问磁盘。
[0054] 在写优先模式下,所述第一部分带宽是最小读带宽,所述第二部分带宽是写带宽。该IO代理模块检查当前已使用的读带宽是否超出了该最小读带宽。该IO代理模块在当前IO请求小于该最大IO并发访问数时,以空队列访问磁盘。
[0055] 尽管本发明依照其优选实施方式描述,但是存在落入本发明范围内的改变、置换和各种替代等同物。这里提供的示例仅是说明性的,而不是对本发明的限制。
[0056] 为了简明,本说明书省略了对公知技术的描述。