缓存调度方法和装置的制作方法

文档序号:7685876阅读:194来源:国知局
专利名称:缓存调度方法和装置的制作方法
技术领域
本发明涉及数据存储技术,特别涉及一种缓存调度方法、以及一种缓存调度装置。
背景技术
现有的视频监控系统会采用IP SAN(Storage Area Network,存储局域网络)技术来实现数据的存储。即,将摄像头拍摄的视频数据都存储到IPSAN存储设备中,当用户需要查看历史录像时再从IP SAN存储设备中读取录像数据。采用IP SAN技术实现数据存储的视频监控系统的一种典型组网方式如图1所示, 包括EC (Encoder,视频编码器)、DC (Decoder,解码器)、VC (Video Client,监控客户端)、 DM (Data Management,数据管理服务器)、VM (Video Management,视频管理服务器)、以及IP SAN存储设备。当需要录像存储时,EC可以通过iSCSianternet Small Computer System hterface,小型计算机系统接口 )将数据写入至IP SAN存储设备中;当需要录像回放时, VC或DC可以向VM发出申请,再由VM调度DM读取IPSAN存储设备中的数据、并转发给VC 或DC。其中,录像存储过程对存储实时性的要求比较高、而EC内部的缓存资源又十分有限,因而就需要IP SAN存储设备具有较高的响应速度,以避免EC需要写入至IP SAN的数据发生丢包。但是,现有用于视频监控的IP SAN存储设备中的RAID (Redundant Array of Independent Disk,独立磁盘冗余阵列)通常会选用RAID5作为阵列类型,而且,多路EC通道共用一台IP SAN存储设备。这样,就容易导致IP SAN存储设备在存储数据时产生RAID5 的小写问题,从而容易导致IP SAN存储设备的响应速度慢。具体先参见如图2,多路EC通道会同时向IP SAN存储设备连续地发送包含有数据的写命令,属于不同路EC通道的写命令会相互交错地进入存储控制器(Target)命令队列中等待,然后再按照进入命令队列(本文将“Target命令队列”简称为“命令队列”)的顺序,分别属于不同路EC通道的写命令包含的数据(图2中以虚线方块表示数据)会分别从命令队列中被写入至RAID5中。对于包含有多路EC通道的视频监控系统来说,IP SAN存储设备的RAID5中会为每路EC通道划分出对应的一个LUN(Logical Unit Number,逻辑单元号),每路EC通道所对应的一个LUN由RAID5中属于该路EC通道的各条带(Mrip)组成。因此,向RAID5的写操作实际上就是分别针对每路EC通道的对应LUN的一个条带的写操作。而相互交错地进入命令队列的各路EC通道的写命令可以看作是离散分布的、而不是相对集中分布的,因此,每次针对一路EC通道的对应LUN的一个条带的写操作只能写入少量的数据,从而导致对RAID5的小写。由于RAID5的小写会使IP SAN存储设备产生很大的开销,因而也就会影响IP SAN存储设备的响应速度。为了减小RAID5的小写问题对IP SAN存储设备的响应速度的影响,现有技术中在 IP SAN存储设备中增设了写缓存。如图3所示,多路EC通道会同时向IP SAN存储设备连续地发送包含有数据的写命令,属于不同路EC通道的写命令会相互交错地进入命令队列中等待,然后,各路EC通道的写命令中的写数据被移交(还包括地址类型的转换等各种处理、但由于与本文无关因而在说明时均予以省略)至写缓存内,以使随写命令离散分布的各路EC通道的数据在写缓存中被整合为相对集中分布的状态;当写缓存的刷新时刻到来时,写缓存中属于每一路EC通道的数据均已积累至一定的数量,此时再将已积累至一定数量的属于各路EC通道的数据(图3中以方块表示写数据)分别刷新至RAID5的对应LUN 中,就能够提高对应LUN的一个条带的一次写操作可写入的数据量,有效地避免RAID5的小写情况发生。然而,随着视频监控的不断发展,用于监控的EC通道的路数也在不断增加,因而使得容量有限的写缓存难以同时为多路EC通道提供足够的空间实现数据积累。从而,每当刷新时刻到来时,多数EC通道在写缓存中所积累的数据量都不足以避免小写。

发明内容
有鉴于此,本发明提供了一种缓存调度方法、以及一种缓存调度装置,能够减少 RAID5的小写情况的发生。本发明提供的一种缓存调度方法,该缓存调度方法应用于包含有存储控制器、 RAID5、以及写缓存的存储设备,所述存储控制器的命令队列中存放的包含有数据的写命令来自各数据通道,所述写缓存中存放的数据从所述命令队列中移交而来、并等待刷新至 RAID5的属于对应数据通道的条带,该缓存调度方法包括aO、在每次刷新时刻到来时,判断分别属于各数据通道的条带在所述写缓存中的
数据量;al、在步骤aO判断出有条带在所述写缓存中的数据量大于第一阈值时,允许对该条带执行所述刷新;其中,第一阈值大于等于1/2个条带且小于1个条带;a2、在步骤aO判断出有条带在所述写缓存中的数据量小于第二阈值时,禁止对该条带执行所述刷新;其中,第二阈值大于0且小于1/2个条带;a3、在步骤aO判断出有条带在所述写缓存中的数据量处于第一阈值与第二阈值之间的区间内时,如果当前的刷新时刻是由于定时间隔到达而被触发则禁止对该数据通道的当前条带执行所述刷新、如果当前的刷新时刻是由于所述写缓存达到上水位线而被触发则允许对该数据通道的当前条带执行所述刷新。该缓存调度方法进一步包括b0、在步骤aO判断出的数据量大于第一阈值的条带在所有条带中所占的比例小于预定值时,分别针对各数据通道的条带触发执行步骤bl ;bl、判断当前条带在所述命令队列中对应的写命令所包含的数据与所述写缓存中的数据的总量是否大于第三阈值;其中,第三阈值大于等于1/2个条带且小于1个条带、第
三阈值小于等于第一阈值;b2、在步骤bl判断出当前条带的所述总量大于第三阈值时,调取当前条带在所述命令队列中对应的写命令所包含的数据、并将所调取的数据与所述写缓存中属于当前条带的数据同时刷新;b3、在步骤bl判断出当前条带的所述总量未大于第三阈值时,如果所述命令队列当前已满时,则调取当前条带在所述命令队列中对应的写命令所包含的数据、并将所调取的数据与所述写缓存中属于当前条带的数据同时刷新。每一条带所属的数据通道分别对应RAID5中的一个LUN,每个LUN的地址可被循环使用;当所述命令队列中同时存在写地址分别为同一 LUN的尾地址和首地址的多条写命令时,步骤1^2和步骤b3针对对应的当前条带所调取的数据仅限于写地址为该LUN的尾地址的写命令所包含的数据。该缓存调度方法进一步在所述比例小于预定值时,禁止所述命令队列中的写命令所包含的数据向所述写缓存移交。该缓存调度方法进一步包括CO、监测各数据通道是否有丢包信息;Cl、在步骤cO监测到有数据通道的丢包信息时,判断该数据通道丢包是否是由于网络发生拥塞所致;c2、在步骤Cl判断出该数据通道丢包不是由于网络发生拥塞所致时,针对属于该数据通道的条带触发步骤bl。本发明提供的一种缓存调度装置,该缓存调度装置应用于包含有存储控制器、 RAID5、以及写缓存的存储设备,所述存储控制器的命令队列中存放的包含有数据的写命令来自各数据通道,所述写缓存中存放的数据从所述命令队列中移交而来、并等待刷新至 RAID5的属于对应数据通道的条带,该缓存调度装置包括刷新控制判决模块,用于在每次刷新时刻到来时,判断分别属于各数据通道的条带在所述写缓存中的数据量;刷新控制执行模块,用于在刷新控制判决模块判断出有条带在所述写缓存中的数据量大于第一阈值时,允许对该条带执行所述刷新;在刷新控制判决模块判断出有条带在所述写缓存中的数据量小于第二阈值时,禁止对该条带执行所述刷新;在刷新控制判决模块判断出有条带在所述写缓存中的数据量处于第一阈值与第二阈值之间的区间内时,如果当前的刷新时刻是由于定时间隔到达而被触发则禁止对该条带执行所述刷新、如果当前的刷新时刻是由于所述写缓存达到上水位线而被触发则允许对该条带执行所述刷新;其中, 第一阈值大于等于1/2个条带且小于1个条带,第二阈值大于0且小于1/2个条带。该缓存调度装置进一步包括队列交互触发模块,用于在刷新控制判决模块判断出的数据量大于第一阈值的条带在所有条带中所占的比例小于预定值时,分别针对各数据通道的条带触发队列交互判决模块;队列交互判决模块,用于判断当前条带在所述命令队列中对应的写命令所包含的数据与所述写缓存中的数据的总量是否大于第三阈值;其中,第三阈值大于等于1/2个条带且小于1个条带、第三阈值小于等于第一阈值;队列交互执行模块,用于在队列交互判决模块判断出当前条带的所述总量大于第三阈值时,调取当前条带在所述命令队列中对应的写命令所包含的数据、并将所调取的数据与所述写缓存中属于当前条带的数据同时刷新;在队列交互判决模块判断出当前条带的所述总量未大于第三阈值时,如果所述命令队列当前已满时,则调取当前条带在所述命令队列中对应的写命令所包含的数据、并将所调取的数据与所述写缓存中属于当前条带的数据同时刷新。每一条带所属的数据通道分别对应RAID5中的一个LUN,每一 LUN的地址可被循环使用;当所述命令队列中同时存在写地址分别为同一 LUN的尾地址和首地址的多条写命令时,队列交互执行模块针对对应的当前条带所调取的数据仅限于写地址为该LUN的尾地址的写命令所包含的数据。队列交互触发模块进一步在所述比例小于预定值时禁止所述命令队列中的写命令所包含的数据向所述写缓存移交。该缓存调度装置进一步包括通道丢包监测模块,用于监测各数据通道是否有丢包信息;丢包处理判决模块,用于在通道丢包监测模块监测到有数据通道的丢包信息时, 判断该数据通道丢包是否是由于网络发生拥塞所致;丢包处理执行模块,用于在丢包处理判决模块判断出该数据通道丢包不是由于网络发生拥塞所致时,针对属于该数据通道的条带触发队列交互判决模块。由上述技术方案可见,本发明在每次刷新时刻到时,只允许对较大数据量的条带执行刷新、并禁止对小数据量的条带执行刷新。由于写缓存在每次较大数据量的一部分条带的刷新后,能够立即为小数据量的另一部分条带提供数据积累的空闲空间,因此,小数据量的另一部条带能够在后续刷新时刻到来之前尽快地积累至大数量、并被刷新,如此反复, 即可实现各条带交替地使用有限的写缓存积累数据,并以此来避免小数据量刷新所导致的小写情况。更优地,当条带数量过多(例如实现录像存储的EC数量突增)而导致各条带的数据均无法达到可被刷新的数据量而滞留在写缓存内时,本发明可以从命令队列中调取尚未移交至写缓存的数据、并使调取的数据被提前与写缓存中属于同一条带的数据合并下刷, 即,利用从命令队列中调取的数据来补充写缓存中的条带数据量、并以补充后的数据量执行刷新,从而,能够在避免小数据量刷新的同时尽快清空写缓存中被滞留数据所占用的空间。进一步地,当出现丢包的情况时,只要丢包不是由于网络拥塞所导致,即表示丢包是由于存储设备的性能不足所致,对此,可以有针对性地利用命令队列的数据补充来加快对相应条带的刷新。


图1为现有技术中采用IP SAN技术实现数据存储的视频监控系统的一种典型组网方式的示意图;图2为现有技术中的一种IP SAN存储设备的数据存储过程的示意图;图3为现有技术中设置有写缓存的另一种IP SAN存储设备的数据存储过程的示意图;图4为本发明实施例中缓存调度方法所采用的刷新控制过程的一优选流程示意图;图5为本发明实施例中缓存调度方法所采用的队列交互过程的一优选流程示意图;图6为本发明实施例中缓存调度方法所采用的丢包处理过程的一优选流程示意图;图7a至图7c为本发明实施例中缓存调度装置的优选结构示意图。
具体实施例方式为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。对于写缓存的容量> EC通道的路数X条带大小的情况,采用现有方式即可避免小写情况的发生,因此,本实施例主要还是针对写缓存(由于本实施例主要应用于IP SAN 存储设备,因而本实施例中所提及的“写缓存”均是指IP SAN存储设备中的写缓存)的容量不足以为多路EC通道提供足够空间的情况,即写缓存的容量< EC通道的路数X条带大小。其中,对于只包含一个RAID5的IP SAN存储设备来说,所有路EC通道对应的LUN 均属于同一个RAID5,相应地,各路EC通道的条带大小相同。而对于包含多于一个RAID5 的IP SAN存储设备来说,各路EC通道对应的LUN可能分属于不同RAID5。这样,由于不同 RAID5的配置可能会不同,因而对应LUN分属于不同RAID5的各路EC通道的条带大小也就有可能会不同,此时,写缓存的容量<EC通道的路数X条带大小可以表示为写缓存的容量 < EC通道的路数X最大的条带大小。为了在写缓存的容量不足以为多路EC通道提供足够空间的情况下减少小写情况的发生,本实施例要通过对刷新的控制来尽可能避免的是小数据量的刷新。为此,本实施例在每次刷新时刻到时,需要先判断各路EC通道的条带在写缓存中的数据量是否足够避免小写,只有较大数据量的条带才允许被执行刷新、而小数据量的条带则禁止被执行刷新,而不是像现有技术那样即便条带在写缓存中的数据量很小时也仍然刷新。由于写缓存在每次较大数据量的一部分条带的刷新后,能够立即为小数据量的另一部分条带提供数据积累的空闲空间,因此,小数据量的另一部条带能够在后续刷新时刻到来之前尽快地积累至大数量、并被刷新。如此反复地执行一部分条带的刷新、另一部分条带的积累,即可实现各条带交替地使用有限的写缓存积累数据,并以此来避免小数据量刷新所导致的小写情况。图4为本发明实施例中缓存调度方法所采用的刷新控制过程的一优选流程示意图。如图4所示,本实施例中的缓存调度方法所采用的刷新控制过程在每次刷新时刻到来时,可以针对每一 EC的条带执行如下的步骤步骤401,判断该条带在写缓存中的数据量是否大于A,如果是则执行步骤402,否则执行步骤403。其中,A的取值大于等于1/2个条带且小于1个条带,即A大于等于1/2 个条带、且小于1个条带,例如,A可以取2/3个条带。步骤402,对该条带的刷新不属于小写,因此允许针对该条带执行刷新,然后结束本次流程、并等待下一次刷新时刻的到来。步骤403,判断该条带在写缓存中的数据量是否小于C,如果是则执行步骤404,否则执行步骤405。其中,C的取值大于0且小于1/2个条带,即A大于等于1/2个条带、且小于1个条带,例如,C可以取1/3个条带。
步骤404,对该条带的刷新属于小写,因此禁止针对该条带执行刷新,然后结束本次流程、并等待下一次刷新时刻的到来。步骤405,判断当前刷新时刻是否是由于写缓存达到上水位线所致,如果是则执行步骤406,否则(例如当前的刷新时刻是由于定时间隔所致)执行步骤407。步骤406,即便该条带当前可刷新的数据量较少,但写缓存中已无空闲空间可使该条带的数据量继续积累,因而允许针对该条带执行刷新,然后结束本次流程、并等待下一次刷新时刻的到来。步骤407,写缓存中的空闲空间还足以使该条带的数据量继续积累,因而暂时禁止对该条带执行刷新,然后结束本次流程、并等待下一次刷新时刻的到来。至此,针对一个条带的一种优选刷新控制流程结束。上述流程仅仅是一种优选的实现方式,实际应用中,上述涉及判断的各步骤之间的先后顺序可以任意调整、多个条带也可以共用一个流程来实现上述的若干判断,只要满足如下的刷新控制原理即可任意调整刷新判断流程的具体实现aO、在每次刷新时刻到来(可依据监测刷新时刻的触发条件来识别、例如定时间隔到达或写缓存达到上水位线)时,判断分别属于各路EC通道的条带在写缓存中的数据量;al、在aO判断出有条带在写缓存中的数据量达到A时,允许对该条带执行刷新;a2、在aO判断出有条带在写缓存中的数据量小于C时,禁止对该条带执行刷新;a3、在aO判断出有条带在写缓存中的数据量处于A与C之间的区间内(即小于等于A、且大于等于C)时,如果当前的刷新时刻是由于定时间隔到达而被触发则禁止对该条带执行刷新、以使该条带在写缓存中的数据量可以继续积累,而如果当前的刷新时刻是由于写缓存达到上水位线而被触发则允许对该条带执行刷新、以避免由于写缓存没有空闲空间而导致丢包。可见,利用刷新控制能够在一定程度上避免小数据量刷新所导致的小写情况。但是,当条带数量过多时,写缓存中为各条带提供的用于数据积累的空间不足使所有条带均能够积累至允许被执行刷新的数据量,从而造成写缓存中的大量条带备禁止执行刷新,进而出现大量条带的数据量在写缓存中滞留,此时,刷新控制的效果就会受到影响。因此,为了在条带数量过多时能够及时清除写缓存中滞留的数据,本实施例可以通过与命令队列的交互,适当地从命令队列中调取尚未移交至写缓存的数据、并使调取的数据被提前与写缓存中属于同一条带的数据合并下刷,即,利用从命令队列中调取的数据来补充写缓存中的条带数据量、并以补充后的数据量执行刷新,从而,能够在避免小数据量刷新的同时清空写缓存中被滞留数据所占用的空间,以使各条带能够基于前述的刷新控制下交替地在写缓存中积累数据。具体说,当写缓存中出现大量数据滞留时,多数条带在写缓存中的数据显然无法被刷新。即,此时在写缓存中的数据量大于A的条带在所有条带中所占的比例会很小,例如 1 5、1 10。因此,本实施例可以在每次刷新时刻之后,统计在该次刷新时刻执行刷新控制时判断出的数据量大于A的条带在所有条带中所占的比例,当统计的比例小于预定值时再分别针对各路EC通道(即LUN)的条带触发队列交互过程。图5为本发明实施例中缓存调度方法所采用的队列交互过程的一优选流程示意图。如图5所示,本实施例中的缓存调度方法所采用的队列交互过程,在统计的比例小于预定值时分别针对每一 EC通道(即LUN)的条带触发如下流程从步骤501开始执行步骤501,判断当前条带在命令队列中对应的写命令所包含的数据与当前条带在写缓存中的数据的总量是否大于B,如果是则执行步骤502,否则执行步骤503。其中,B的取值大于等于1/2个条带且小于1个条带,即B大于等于1/2个条带、 且小于1个条带。而且,B与A同样是作为允许刷新的数据量标准。虽然B与A的取值范围相同、即B小于等于A,但由于本流程被触发是由于写缓存中已发生数据滞留,因此,也可以为了尽快清空写缓存而设置B小于A,即,适当降低允许刷新的数据量标准。步骤502,调取当前条带在命令队列中对应的写命令所包含的数据、并将所调取的数据与写缓存中属于当前条带的数据同时刷新,然后结束针对当前条带的流程。其中,由于本流程不是在刷新时刻到来时执行的,因此,在本流程中所执行的刷新不属于刷新时刻到来时的正常刷新、而是可以看作是一种强制刷新。另需要说明的是,每一路EC通道对应的LUN的地址可被循环使用,即上层应用可以对LUN循环写入。因此,可能会出现命令队列中同时存在写地址分别为同一 LUN的尾地址和首地址的多条写命令。此时,写地址为该LUN的尾地址的写命令中所包含的可能是该 LUN最后一个条带的结尾处的数据,而写地址为该LUN的首地址的写命令中所包含的则可能是该LUN第一个条带的起始处的数据。也就是说,虽然多个写命令包含的数据属于同一 LUN,但却属于同一 LUN内的不同条带,因此,本步骤中仅调取写地址为对应LUN的尾地址的写命令所包含的数据,而不调取同时存在于命令队列中的写地址为对应LUN的首地址的写命令包含的数据。例如,当前条带命令队列中的写命令的写地址按顺为0Xfff00、0Xfff80、 0x00080,0x00100...,本步骤仅调取写地址为OxfffOO、Oxfff80两个写命令中的数据、并与写缓存中属于当前条带的数据一起强制刷新。步骤503,判断命令队列当前是否已满,如果是,则执行步骤504,否则结束针对当前条带的流程。在本步骤中,可能存在两种情况一种情况是,所有EC通道对应的LUN在命令队列中共用唯一的一个队列,此时,判断命令队列当前是否已满就是指这唯一的一个队列当前是否已满。 另一种情况是,每个EC通道对应的LUN在命令队列中分别有一个独立的对应子队列,即,存在与LUN数量(即EC通道路数)相同、且一一对应的若干子队列,此时,判断命令队列当前是否已满则是指对应的子队列当前是否已满。步骤504,虽然当前条带在命令队列和写缓存中的数据总量未能大于B,但由于命令队列此时已满,因而仍调取当前条带在命令队列中对应的写命令所包含的数据、并将所调取的数据与写缓存中属于当前条带的数据同时刷新,然后结束针对当前条带的流程。本步骤与步骤502的具体实现方式可以相同,即,同样在当前条带在命令队列中同时存在写地址分别为对应的LUN的尾地址和首地址的多条写命令时,仅调取写地址为对应的LUN的尾地址的写命令所包含的数据。至此,针对当前条带的队列交互流程结束。针对任意条带的上述流程均是在刷新时刻之后判断出统计的比例小于预定值时被触发执行的,因此,队列交互过程可以看作是在刷新控制过程间歇时的一种辅助过程。
而且,针对各路EC通道(即LUN)的条带所分别执行的上述如图5所示流程,可以是同时执行的,也可以是顺序执行的。在前一种同时执行的情况下,所需要的开销会比较大,因此,优选地选用顺序执行的后一种情况。基于如图5所示的流程可见,经过队列交互流程的处理后,写缓存中能够立即出现大量可供数据积累的空闲空间。当队列交互流程处理后的空闲空间能够使写缓存中出现足够比例的条带数据量大于A时,即可停止队列交互、并等待刷新时刻到来时执行刷新控制;即便针对若干条带执行了队列交互流程处理后的空闲空间,仍不足以在下一次刷新时刻到来时使写缓存中出现足够比例的条带数据量大于A,也可以在下一次刷新时刻之后继续执行队列交互流程。另外,在针对任意EC通道对应的LUN的条带执行上述流程时,均需要在步骤501 判断当前条带在命令队列和写缓存的数据总量是否大于B,而该判断过程主要通过分别查询命令队列和写缓存中的数据量、然后求和。因此,较佳地应在此过程中禁止命令队列中的写命令所包含的数据向写缓存的正常移交,以确保步骤501的判断结果的准确性。除了以上所述的刷新控制和队列交互过程之外,本实施例的缓存调度方法还可以针对发生丢包的任意EC通道进行高优先的紧急处理。图6为本发明实施例中缓存调度方法所采用的丢包处理过程的一优选流程示意图。如图6所示,本实施例中的缓存调度方法所采用的丢包处理过程包括如下步骤步骤601,监测各EC通道是否有丢包信息,在监测到有丢包信息后触发步骤601。关于本步骤中的丢包信息如何产生、如何传递、以及如何监测,均为本领域技术人员能够实现,因此本文不再予以赘述。步骤602,EC通道的丢包通常是由两种情况导致,一种则是由于网络拥塞而导致数据无法到达IP SAN存储设备,另一种是IP SAN存储设备由于未能及时完成数据刷新而无法返回成功响应,显然对于前一种情况无法由IP SAN存储设备解决、应当予以排除,因此,判断该EC通道丢包是否是由于网络发生拥塞所致,如果是则结束本流程,否则针对该 EC通道对应的LUN的条带触发如图5所示流程中的步骤501。本步骤中,判断丢包是否是由于网络发生拥塞所致的具体实现方式可以多种多样。而本实施例还提供了一种较佳方式,该方式可以利用数据报文中的拥塞标记来判断。具体说在网络发生拥塞时,网络中的交换设备会在承载写命令的数据报文中设置拥塞标记, 因此,本步骤中可以依据来自任意EC通道的承载写命令的数据报文中是否被网络中的交换设备设置有拥塞标记,判断该EC通道的丢包是否是由于网络发生拥塞而网络发生拥塞所致。至此,一次丢包处理过程的流程结束。实际应用中,步骤601可以是实时执行的步骤,无论步骤602是否被触发、也无论步骤602的判断结果如何,步骤601均可以保持不间断地执行。以上,是对本实施例中的缓存调度方法的详细说明。虽然以上说明均是结合了 IP SAN存储设备及其应用的视频监控场景,但除了 IP SAN存储设备及其应用的视频监控场景之外,本实施例中的缓存调度方法同样还能够适用于其它包含有RAID5的存储设备,或者, 与视频监控同样具有多路与EC通道类似的其它数据通道、不同路数据通道的数据分区域存储、以及每路数据通道的数据连续性特点的其他应用场景。
实际应用中,该缓存调度方法可以利用计算机程序予以实现,因此,本实施例还对应该缓存调度方法提供了相应的缓存调度装置。本实施例中提供的一种缓存调度装置如图7a所示,该装置主要可应用于包含有存储控制器、RAID5、以及写缓存的存储设备(例如IP SAN存储设备),存储控制器内的命令队列中的写命令所包含的数据先被移交至写缓存中缓存后、再从所述写缓存被刷新至 RAID5中。参见图7a,该装置包括刷新控制判决模块711,用于在每次刷新时刻到来(可依据监测刷新时刻的触发条件来识别、例如定时间隔到达或写缓存达到上水位线)时,判断分别属于各数据通道的条带在写缓存中的数据量。刷新控制执行模块712,用于在刷新控制判决模块711判断出有条带在写缓存中的数据量大于A时,允许对该条带执行刷新;在刷新控制判决模块711判断出有条带在写缓存中的数据量小于C时,禁止对该条带执行刷新;在刷新控制判决模块711判断出有条带在写缓存中的数据量处于A与C之间的区间内(即小于等于A、且大于等于C)时,如果当前的刷新时刻是由于定时间隔到达而被触发则禁止对该条带执行刷新、如果当前的刷新时刻是由于写缓存达到上水位线而被触发则允许对该条带执行刷新。实际应用中,刷新控制执行模块712可依据监测刷新时刻的触发条件来来判断当前的刷新时刻到来的原因,或者由刷新控制判决模块711监测刷新时刻的触发条件并通告刷新控制执行模块712。其中,A和C 的取值如方法部分所述。可见,如图7a所示的缓存调度装置可利用刷新控制来仅允许大数据量的刷新、而限制小数据量的刷新,并使得写缓存在每次较大数据量的一部分条带的刷新后能够立即为小数据量的另一部分条带提供数据积累的空闲空间,因此,小数据量的另一部条带能够在后续刷新时刻到来之前尽快地积累至允许被刷新的大数量。如此反复地执行一部分条带的刷新、另一部分条带的积累,即可实现各条带交替地使用有限的写缓存积累数据,并以此来避免小数据量刷新所导致的小写情况。但是,在条带数量过多而导致写缓存空间不足以被所有条带交替地积累数据时, 容易出现写缓存中的大量数据滞留,此时,如图7a所示缓存调度装置的刷新控制效果就会受到影响。为此,本实施例还提供了如图7b所示的另一种缓存调度装置。如图7b所示的另一种缓存调度装置是基于如图7a所示装置的基础上,进一步增加了如下结构队列交互触发模块721,用于统计刷新控制判决模块711每次判断出的在写缓存中的数据量大于A的条带在所有条带中所占的比例,并在该比例小于预定值(例如1 5、 1 10等)时分别针对各数据通道的条带触发队列交互判决模块722。队列交互判决模块722,用于判断当前条带在命令队列中对应的写命令所包含的数据与写缓存中的数据的总量是否大于B。实际应用中,为了确保队列交互判决模块722的判断结果的准确性,较佳地应由队列交互触发模块721在其统计的比例小于预定值时禁止命令队列中的写命令所包含的数据向写缓存正常移交。队列交互执行模块723,用于在队列交互判决模块722判断出当前条带的所述总量大于B时,调取当前条带在命令队列中对应的写命令所包含的数据、并将所调取的数据与写缓存中属于当前条带的数据同时刷新;在队列交互判决模块722判断出当前条带的所述总量未大于B时,如果命令队列当前已满时,则调取当前条带在命令队列中对应的写命令所包含的数据、并将所调取的数据与写缓存中属于当前条带的数据同时刷新,如果命令队列当前未满则不做处理。其中,B的取值如方法部分所述。S卩,在当前条带的所述总量未大于B时,队列交互执行模块723仅在命令队列当前已满时,调取当前条带在命令队列中对应的写命令所包含的数据、并将所调取的数据与写缓存中属于当前条带的数据同时刷新。其中,队列交互执行模块723的触发不是由于刷新时刻的到来,因此,队列交互执行模块723所执行的刷新不属于刷新时刻到来时的正常刷新、而是可以看作是一种强制刷新。而且,当出现当前条带在命令队列中同时存在写地址分别为同一 LUN的尾地址和首地址的多条写命令时,队列交互执行模块723所调取的数据,仅限于写地址为对应LUN的尾地址的写命令所包含的数据。另外,对于命令队列当前是否已满的条件存在两种情况如果所有数据通道对应的LUN在命令队列中共用唯一的一个队列,则判断命令队列当前是否已满就是指这唯一的一个队列当前是否已满;而如果每个数据通道对应的LUN在命令队列中分别有一个独立的对应子队列,则判断命令队列当前是否已满则是指对应的子队列当前是否已满。如上可见,如图7b所示的缓存调度装置可以通过队列交互的处理,使写缓存中立即出现大量可供数据积累的空闲空间。当队列交互处理后的空闲空间能够使写缓存中出现足够比例的条带数据量大于A时,队列交互触发模块721即可取消对队列交互判决模块722 的触发、以使队列交互判决模块722停止工作,相应地,随着队列交互判决模块722停止工作,队列交互执行模块也就不会再被触发并停止工作。实际应用中,队列交互判决模块722、以及队列交互执行模块723针对各路数据通道(即LUN)的条带所分别执行的处理过程可以是同时执行的,也可以是顺序执行的。在前一种同时执行的情况下,需要设置与数据通道数量相等的多套队列交互判决模块722、以及队列交互执行模块723,此时的开销会比较大,因此,优选地选用顺序执行的后一种情况,此时只需要一套队列交互判决模块722、队列交互执行模块723。除了以上的如图7a和图7b所示的两种缓存调度装置之外,本实施例还提供了又一种如图7c所示的缓存调度装置。如图7c所示的缓存调度装置以如图7b所示装置为基础,进一步增加了如下结构通道丢包监测模块741,用于监测各数据通道是否有丢包信息。丢包处理判决模块742,用于在通道丢包监测模块741监测到有数据通道的丢包信息时,判断该数据通道丢包是否是由于网络发生拥塞所致。实际应用中,丢包处理判决模块742可以依据来自任意数据通道的用于承载写命令的数据报文中是否被网络中的交换设备设置有拥塞标记,判断出该数据通道的丢包是否是由于网络发生拥塞而网络发生拥塞所致。丢包处理执行模块743,用于在丢包处理判决模块742判断出该数据通道丢包不是由于网络发生拥塞所致时,针对该数据通道对应的LUN的条带触发队列交互判决模块 722。可见,本实施例中如图7c所示的缓存调度装置可以进一步针对发生丢包的任意数据通道进行高优先的紧急处理。
14
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种缓存调度方法,该缓存调度方法应用于包含有存储控制器、RAID5、以及写缓存的存储设备,所述存储控制器的命令队列中存放的包含有数据的写命令来自各数据通道, 所述写缓存中存放的数据从所述命令队列中移交而来、并等待刷新至RAID5的属于对应数据通道的条带,其特征在于,该缓存调度方法包括aO、在每次刷新时刻到来时,判断分别属于各数据通道的条带在所述写缓存中的数据量;al、在步骤aO判断出有条带在所述写缓存中的数据量大于第一阈值时,允许对该条带执行所述刷新;其中,第一阈值大于等于1/2个条带且小于1个条带;a2、在步骤aO判断出有条带在所述写缓存中的数据量小于第二阈值时,禁止对该条带执行所述刷新;其中,第二阈值大于0且小于1/2个条带;a3、在步骤aO判断出有条带在所述写缓存中的数据量处于第一阈值与第二阈值之间的区间内时,如果当前的刷新时刻是由于定时间隔到达而被触发则禁止对该数据通道的当前条带执行所述刷新、如果当前的刷新时刻是由于所述写缓存达到上水位线而被触发则允许对该数据通道的当前条带执行所述刷新。
2.如权利要求1所述的缓存调度方法,其特征在于,该缓存调度方法进一步包括 b0、在步骤aO判断出的数据量大于第一阈值的条带在所有条带中所占的比例小于预定值时,分别针对各数据通道的条带触发执行步骤bl ;bl、判断当前条带在所述命令队列中对应的写命令所包含的数据与所述写缓存中的数据的总量是否大于第三阈值;其中,第三阈值大于等于1/2个条带且小于1个条带、第三阈值小于等于第一阈值;b2、在步骤bl判断出当前条带的所述总量大于第三阈值时,调取当前条带在所述命令队列中对应的写命令所包含的数据、并将所调取的数据与所述写缓存中属于当前条带的数据同时刷新;b3、在步骤bl判断出当前条带的所述总量未大于第三阈值时,如果所述命令队列当前已满时,则调取当前条带在所述命令队列中对应的写命令所包含的数据、并将所调取的数据与所述写缓存中属于当前条带的数据同时刷新。
3.如权利要求2所述的缓存调度方法,其特征在于,每一条带所属的数据通道分别对应RAID5中的一个LUN,每个LUN的地址可被循环使用;当所述命令队列中同时存在写地址分别为同一 LUN的尾地址和首地址的多条写命令时,步骤1^2和步骤b3针对对应的当前条带所调取的数据仅限于写地址为该LUN的尾地址的写命令所包含的数据。
4.如权利要求2或3所述的缓存调度方法,其特征在于,该缓存调度方法进一步在所述比例小于预定值时,禁止所述命令队列中的写命令所包含的数据向所述写缓存移交。
5.如权利要求2或3所述的缓存调度方法,其特征在于,该缓存调度方法进一步包括 cO、监测各数据通道是否有丢包信息;Cl、在步骤cO监测到有数据通道的丢包信息时,判断该数据通道丢包是否是由于网络发生拥塞所致;c2、在步骤cl判断出该数据通道丢包不是由于网络发生拥塞所致时,针对属于该数据通道的条带触发步骤bl。
6.一种缓存调度装置,该缓存调度装置应用于包含有存储控制器、RAID5、以及写缓存的存储设备,所述存储控制器的命令队列中存放的包含有数据的写命令来自各数据通道, 所述写缓存中存放的数据从所述命令队列中移交而来、并等待刷新至RAID5的属于对应数据通道的条带,其特征在于,该缓存调度装置包括刷新控制判决模块,用于在每次刷新时刻到来时,判断分别属于各数据通道的条带在所述写缓存中的数据量;刷新控制执行模块,用于在刷新控制判决模块判断出有条带在所述写缓存中的数据量大于第一阈值时,允许对该条带执行所述刷新;在刷新控制判决模块判断出有条带在所述写缓存中的数据量小于第二阈值时,禁止对该条带执行所述刷新;在刷新控制判决模块判断出有条带在所述写缓存中的数据量处于第一阈值与第二阈值之间的区间内时,如果当前的刷新时刻是由于定时间隔到达而被触发则禁止对该条带执行所述刷新、如果当前的刷新时刻是由于所述写缓存达到上水位线而被触发则允许对该条带执行所述刷新;其中,第一阈值大于等于1/2个条带且小于1个条带,第二阈值大于0且小于1/2个条带。
7.如权利要求6所述的缓存调度装置,其特征在于,该缓存调度装置进一步包括队列交互触发模块,用于在刷新控制判决模块判断出的数据量大于第一阈值的条带在所有条带中所占的比例小于预定值时,分别针对各数据通道的条带触发队列交互判决模块;队列交互判决模块,用于判断当前条带在所述命令队列中对应的写命令所包含的数据与所述写缓存中的数据的总量是否大于第三阈值;其中,第三阈值大于等于1/2个条带且小于1个条带、第三阈值小于等于第一阈值;队列交互执行模块,用于在队列交互判决模块判断出当前条带的所述总量大于第三阈值时,调取当前条带在所述命令队列中对应的写命令所包含的数据、并将所调取的数据与所述写缓存中属于当前条带的数据同时刷新;在队列交互判决模块判断出当前条带的所述总量未大于第三阈值时,如果所述命令队列当前已满时,则调取当前条带在所述命令队列中对应的写命令所包含的数据、并将所调取的数据与所述写缓存中属于当前条带的数据同时刷新。
8.如权利要求7所述的缓存调度装置,其特征在于,每一条带所属的数据通道分别对应RAID5中的一个LUN,每一 LUN的地址可被循环使用;当所述命令队列中同时存在写地址分别为同一 LUN的尾地址和首地址的多条写命令时,队列交互执行模块针对对应的当前条带所调取的数据仅限于写地址为该LUN的尾地址的写命令所包含的数据。
9.如权利要求7或8所述的缓存调度装置,其特征在于,队列交互触发模块进一步在所述比例小于预定值时禁止所述命令队列中的写命令所包含的数据向所述写缓存移交。
10.如权利要求7或8所述的缓存调度装置,其特征在于,该缓存调度装置进一步包括通道丢包监测模块,用于监测各数据通道是否有丢包信息;丢包处理判决模块,用于在通道丢包监测模块监测到有数据通道的丢包信息时,判断该数据通道丢包是否是由于网络发生拥塞所致;丢包处理执行模块,用于在丢包处理判决模块判断出该数据通道丢包不是由于网络发生拥塞所致时,针对属于该数据通道的条带触发队列交互判决模块。
全文摘要
本发明公开了一种缓存调度方法和装置。本发明在每次刷新时刻到时,只允许对较大数据量的条带执行刷新、并禁止对小数据量的条带执行刷新,以此来避免小数据量刷新所导致的小写情况。更优地,当条带数量过多而导致各条带的数据均无法达到可被刷新的数据量而滞留在写缓存内时,本发明可以利用从命令队列中调取的数据来补充写缓存中的条带数据量、并以补充后的数据量执行刷新,从而,能够在避免小数据量刷新的同时尽快清空写缓存中被滞留数据所占用的空间。进一步地,当出现丢包的情况时,本发明可以有针对性地利用命令队列的数据补充来加快对相应条带的刷新。
文档编号H04N5/76GK102223510SQ20111014983
公开日2011年10月19日 申请日期2011年6月3日 优先权日2011年6月3日
发明者周迪, 陈乾业 申请人:杭州华三通信技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1