远程复制的发送请求处理系统及其方法转让专利

申请号 : CN200710163293.5

文献号 : CN101414915B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 毕明浩陈玄同刘文涵

申请人 : 英业达股份有限公司

摘要 :

一种远程复制的发送请求处理系统及其方法,是应用于具有多个网络块设备的本地系统中。本发明于本地系统中创建固定数量的发送线程,以形成一发送线程池;将接收到向对应远程镜像卷写请求的所有网络块设备串接为一循环链表;设定一指针(pointer)以顺序记录循环链表中的最新处理的网络块设备分配发送线程池中的发送线程,以按照循环链表顺序主动寻找指针指向的欲处理网络块设备,并利用发送线程对指针指向的网络块设备的处理加锁,以处理网络块设备的发送请求;以及每次完成发送请求后,依次移动指针至下一个网络块设备并同样执行对应网络块设备的发送请求。

权利要求 :

1.一种远程复制的发送请求处理系统,是用于具有多个网络块设备的本地系统中,其特征在于,该远程复制的发送请求处理系统包含:一创建模块,是用于在该本地系统中创建固定数量的发送线程,以形成一发送线程池;

一链表模块,用于将接收到向对应远程镜像卷写请求的所有网络块设备串接为一循环链表;

一指针模块,是设定一指针顺序记录该循环链表中的最新处理的网络块设备,以及在每次完成该最新处理的网络块设备的发送请求后,依照该循环链表的网络块设备顺序,依次移动该指针至下一个网络块设备,其中该指针的起始位置是指向该循环链表头;

一线程分配模块,用于分配该发送线程池中的发送线程主动寻找欲处理的该下一个网络块设备;

一请求接受模块,是负责接受新的发送请求并将该发送请求加入到对应网络块设备的发送请求队列中;

一请求处理模块,是利用该发送线程对该指针指向的该下一个网络块设备的处理进行加锁,并处理该下一个网络块设备的发送请求。

2.如权利要求1所述的发送请求处理系统,其特征在于,其中当该本地系统的每一原卷建立有多个远程镜像卷时,该链表模块更用于分别将属于同一原卷的多个远程镜像卷对应的网络块设备串接为一队列链表,以及将依照该本地系统的每一原卷串接的多个队列链表串接为一循环链表。

3.如权利要求2所述的发送请求处理系统,其特征在于,其中该请求处理模块是在加锁后依次处理该指针指向的队列链表中的多个网络块设备向对应远程镜像卷的发送请求。

4.如权利要求3所述的发送请求处理系统,其特征在于,其中该指针模块用于在完成该队列链表中的多个网络块设备的发送请求后,向后移动该指针至下一个包含同一原卷的多个远程镜像卷对应的网络块设备的队列链表。

5.如权利要求2所述的发送请求处理系统,其特征在于,更包含一权重模块,是设定该本地系统的每一原卷的发送请求权重,以分配该每一原卷的网络 块设备向对应远程镜像卷发送请求的批量大小。

6.一种远程复制的发送请求处理方法,是用于具有多个网络块设备的本地系统中,其特征在于,该方法包含以下步骤:于该本地系统中创建固定数量的发送线程,以形成一发送线程池;

将接收到向对应远程镜像卷写请求的所有网络块设备串接为一循环链表;

设定一指针以顺序记录该循环链表中的最新处理的网络块设备,其中该指针的起始位置是指向该循环链表头;

分配该发送线程池中的发送线程,以按照该循环链表顺序主动寻找该指针指向的欲处理网络块设备;

利用该发送线程对该指针指向的欲处理网络块设备的处理进行加锁,并处理欲处理网络块设备的发送请求;

依照该循环链表的网络块设备顺序,每次完成该发送请求后,依次移动该指针至下一个网络块设备并同样执行对应网络块设备的发送请求。

7.如权利要求6所述的发送请求处理方法,其特征在于,其中向后移动该指针更包含如下步骤:当该指针指向该最新处理网络块设备时,判断该循环链表是否为空;

若非空,则向后移动该指针至该最新处理网络块设备的下一个网络块设备;

若为空,则结束该发送请求处理。

8.如权利要求6所述的发送请求处理方法,其特征在于,其中当该本地系统的每一原卷建立有多个远程镜像卷时,该串接网络块设备为一循环链表的步骤更包含以下步骤:分别将属于同一原卷的多个远程镜像卷对应的网络块设备串接为一队列链表;

将依照该本地系统的每一原卷串接的多个队列链表串接为一循环链表。

9.如权利要求8所述的发送请求处理方法,其特征在于,其中处理该指针指向的欲处理网络块设备的发送请求更包含以下步骤:利用该发送线程对该指针指向的队列链表中的多个网络块设备的处理进行加锁,并依次处理该队列链表中的多个网络块设备向对应远程镜像卷的发送请求; 完成该队列链表中的多个网络块设备的发送请求后,向后移动该指针至下一个包含同一原卷的多个远程镜像卷对应的网络块设备的队列链表。

10.如权利要求9所述的发送请求处理方法,其特征在于,其中更包含为该本地系统的每一原卷设定一发送请求权重的步骤,以分配该每一原卷的网络块设备向对应远程镜像卷发送请求的批量大小。

说明书 :

远程复制的发送请求处理系统及其方法

技术领域

[0001] 本发明是关于一种远程复制的资源分配系统及方法,尤其是关于一种应用于网络块设备(Network block device,nbd)的远程复制发送线程分配系统及方法。

背景技术

[0002] 随着应用对于服务连续性要求的提高以及用户对数据安全性重视程度的加强,实时远程复制技术应运而生,并且在较短时间内得到广泛的关注。利用实时远程复制技术可以在不中断应用的前提下实时地在远程建立数据镜像,进而尽可能地避免因数据丢失或损坏而引发的数据灾难。
[0003] 但由于大多数产品和技术是基于同步方式发送数据,这样当存在多个远程复制请求时,在一个请求发送未处理完成之前,其它请求只能串行等待,这使得系统对请求的处理和响应能力以及效率受到影响。为此,现有技术提出了一种异步多线程发送方案,采用一个线程接受新的请求,多个线程发送已收到的请求。实现这种异步方式必然涉及到多线程并发。目前最简单也最容易实现的方案,如图1显示,是为远程系统20中每一个远程镜像卷22、24、26(其中每个远程镜像卷是对应一个网络块设备(Network block device,nbd))绑定一个专属于它的核心发送线程(kernel sender thread)12、14、16,由本地系统10的上述发送线程负责发送向对应远程镜像卷的输入/输出(i/o)请求。
[0004] 但使用这种方式存在两个潜在的问题:一是一旦系统中有大量网络块设备存在,则会产生大量的核心线程(kernel thread),进而增大系统的压力以及资源占用;二是,我们基本上无法控制其资源的分配,核心线程的执行是由Linux核心(kernel)调度的,对于我们来说基本上处于不可控状态,也就是说为每一网络块设备开启一个线程后,一旦开始执行,接下来的过程就完全交由Linux核心决定,因此哪个设备在何时发送多少数据都是无法预料的。
[0005] 此外,由于系统中的拷贝操作都要涉及到网络通讯,因此这些操作会争夺网络资源,这都需要采用一些方法平衡系统中的网络使用。

发明内容

[0006] 为了解决上述现有技术中的问题与缺陷,本发明的目的在于提供一种远程复制的发送请求处理是统及方法,是用于具有多个网络块设备(Network blockdevice,nbd)的本地系统中,藉以实现异步多线程数据发送,不仅提高设备的处理和响应能力,还能在存在大量远程镜像卷(remote volume mirror)的情况下减少多线程带来的系统资源消耗。
[0007] 本发明所提供的一种远程复制的发送请求处理系统,是包含一创建模块、一链表模块、一指针模块、一线程分配模块、一请求接受模块以及一请求处理模块;在此,创建模块是用于在本地系统中创建固定数量的发送线程,以形成一发送线程池。链表模块用于将接收到向对应远程镜像卷写请求的所有网络块设备串接为一循环链表(circular linked list)。指针模块是设定一指针顺序记录循环链表中的最新处理的网络块设备,以及在每次完成最新处理的网络块设备的发送请求后,依照循环链表的网络块设备顺序,依次移动指针至下一个网络块设备,其中指针的起始位置是指向循环链表头(list head)。线程分配模块用于分配发送线程池中的发送线程主动寻找欲处理的下一个网络块设备。请求接受模块负责接受新的请求并将请求加入到相应块设备的请求发送队列中。请求处理模块是利用发送线程对指针指向的网络块设备的处理加锁,并处理此网络块设备的发送请求。
[0008] 对于本地系统的每一原卷建立有一或多个远程镜像卷的情况,本发明的发送请求处理系统更包含一权重模块,以设定本地系统的每一原卷的发送请求权重,以分配每一原卷的网络块设备向对应远程镜像卷发送请求的批量大小。
[0009] 此外,本发明还提供一种远程复制的发送请求处理方法,是应用于具有多个网络块设备的本地系统中,此方法包含以下步骤:于本地系统中创建固定数量的发送线程,以形成一发送线程池;将接收到向对应远程镜像卷写请求的所有网络块设备串接为一循环链表;设定一指针以顺序记录循环链表中的最新处理的网络块设备,其中指针的起始位置是指向循环链表头(List head);分配发送线程池中的发送线程,以按照循环链表顺序主动寻找指针指向的欲处理网络块设备;利用发送线程对指针指向的网络块设备的处理进行加锁,并处理此网络块设备的发送请求;以及依照循环链表的网络块设备顺序,每次完成发送请求后,依次移动指针至下一个网络块设备并同样执行对应网络块设备的发送请求。
[0010] 对于本地系统的每一原卷建立有一或多个远程镜像卷的情况,本发明的发送请求处理方法更包含为本地系统的每一原卷设定一发送请求权重的步骤,以分配每一原卷的网络块设备向对应远程镜像卷发送请求的批量大小。
[0011] 本发明透过创建固定数目的发送线程,来处理更多数目的网络块设备向远程镜像的发送请求,进而实现异步多线程数据发送,不仅能够提高设备的处理和响应能力,还可以在存在大量远程镜像卷的情况下减少多线程带来的系统资源消耗。并且,透过设定每一原卷的发送请求权重,进而能够对发送过程和资源占用进行一定程度的控制。
[0012] 以下结合附图和具体实施例对本发明进行详细描述,但不作为对本发明的限定。

附图说明

[0013] 图1为现有技术远程复制的发送请求处理结构示意图;
[0014] 图2为本发明的第一实施例的远程复制的发送请求处理结构示意图;
[0015] 图3为本发明的第二实施例的远程复制的发送请求处理结构示意图;
[0016] 图4为本发明的第一实施例的远程复制的发送请求处理方法步骤流程图;
[0017] 图5为本发明的第二实施例的远程复制的发送请求处理方法步骤流程图。
[0018] 其中,附图标记
[0019] 10本地系统
[0020] 12发送线程
[0021] 14发送线程
[0022] 16发送线程
[0023] 20远程系统
[0024] 22远程镜像卷
[0025] 24远程镜像卷
[0026] 26远程镜像卷
[0027] 100本地系统
[0028] 102线程池
[0029] 112发送线程
[0030] 114发送线程
[0031] 116发送线程
[0032] 200远程系统
[0033] 212远程镜像卷
[0034] 213远程镜像卷
[0035] 214远程镜像卷
[0036] 216远程镜像卷
[0037] nbd1网络块设备
[0038] nbd2网络块设备
[0039] nbd_n网络块设备
[0040] 步骤302创建固定数量的发送线程,以形成一发送线程池
[0041] 步骤304将接收到向远程镜像卷写请求的所有网络块设备串接为一循环链表[0042] 步骤306设定一指针以顺序记录循环链表中的最新处理的网络块设备[0043] 步骤308分配发送线程池中的发送线程,以按照指针链表顺序主动寻找欲处理的网络块设备
[0044] 步骤310指针指向的网络块设备正由其它发送线程处理?
[0045] 步骤312利用发送线程加锁,处理当前指针指向的网络块设备的发送请求队列[0046] 步骤314发送线程进入下一个处理周期
[0047] 步骤316循环链表是否为空
[0048] 步骤318向后移动指针至当前最新处理网络块设备的下一个网络块设备[0049] 步骤402分别将属于同一原卷的多个远程镜像卷对应的网络块设备串接为一队列链表
[0050] 步骤404将依照本地系统的每一原卷串接的多个队列链表串接为一循环链表[0051] 步骤406设定一指针以顺序记录最新处理的某一原卷下的网络块设备队列链表[0052] 步骤408分配发送线程池中的发送线程,以按照指针链表顺序主动寻找欲处理的网络块设备
[0053] 步骤410指针指向的网络块设备正由其它发送线程处理?
[0054] 步骤412利用发送线程加锁,依次处理当前指针指向的队列链表中的多个网络块设备的发送请求
[0055] 步骤414发送线程进入下一个处理周期
[0056] 步骤416循环链表是否为空
[0057] 步骤418向后移动指针至当前最新处理网络块设备的下一个原卷具体实施方式
[0058] 有关本发明的特征与实施,兹配合图示作最佳实施例详细说明如下。
[0059] 本发明的发送请求处理系统包含创建模块、链表模块、指针模块、线程分配模块、请求接受模块以及请求处理模块。下面结合图2详细说明本发明的远程复制发送请求处理系统的组成及原理。图2表示了本发明的第一实施例的远程复制的发送请求处理结构示意图,其中创建模块在本地系统100中创建固定数量(例如m个)的发送线程112、114、116等,以形成一发送线程池102。在此实施例中,是以远程镜像卷为单位进行发送线程分配,即本地系统100中每个原卷仅创建一个网络块设备(Network block device,nbd),且每个远程镜像卷对应唯一一个网络块设备。
[0060] 链表模块用于将接收到向远程系统200内对应远程镜像卷212、214、216(数量为n个)写请求的所有网络块设备nbd1、nbd2、nbd_n、(对应数量为n个)串接为一循环链表。指针模块是设定一指针,以顺序记录循环链表中的最新处理的网络块设备,其中指针的起始位置是指向循环链表头(list head)。
[0061] 线程分配模块用于从线程池102中动态分配发送线程,以按照循环链表顺序主动寻找指针指向的欲处理网络块设备。
[0062] 线程分配模块分配发送线程主动寻找欲处理网络块设备节点的原理如下:在每个处理周期内发送线程移动指向正在被处理的网络块设备的指针,然后判断有没有其它线程在处理当前指向的设备,如果有则进入下一个周期。如果没有,则处理此网络块设备的请求。处理完成后,则进入下一个周期。如此,发送线程一直工作,不会发生等待。直到队列中没有网络块设备需要处理,线程则进入等待状态。
[0063] 本发明的发送请求处理系统还包含请求接受模块,以负责接受新的发送请求,并作出响应,将此新请求加入到对应网络块设备的发送请求队列中。请求处理模块则利用此发送线程处理链表中一网络块设备向对应远程镜像卷的发送请求。当发送线程执行操作时,首先判断设备链表是否为空,若链表非空,则表示指针当前指向的最新处理网络块设备之后仍存在未处理请求的网络块设备。因此,指针模块移动指针向下一个网络块设备。并由请求处理模块利用发送线程对此网络块设备的处理进行加锁,以仅处理此时指针指向的网络块设备的发送队列。
[0064] 请求处理模块在每次完成最新处理的网络块设备的发送请求后,按照相同方式重复执行上述链表判断操作,并且相应地指针模块依照循环链表的网络块设备顺序,依次移动指针至下一个网络块设备,以定位下一个需要处理的请求。直至链表为空,即完成所有链表中网络块设备的发送请求时结束。
[0065] 透过上述发送请求处理系统能够实现数据的异步发送,使用多线程方式在一定程度上提高了处理能力,在存在大量网络块设备时减少了资源消耗。由于每次在处理请求队列时加锁,因此不会存在多个线程同时处理一个网络块设备请求队列的问题,这样保证了数据的时序性,并保证每个网络块设备具有基本相等的机会被处理。
[0066] 现在请参考图3,此图为本发明的第二实施例的远程复制的发送请求处理结构示意图。与第一实施例不同,本实施例是应用于每一原卷建立有多个远程镜像卷(每个远程镜像卷对应一个网络块设备)的本地系统100中。即,如图3显示,本地系统100中包含原卷1、原卷2、原卷N等,每个原卷中则包含多个网络块设备,以对应其创建的多个远程镜像卷。例如原卷1包含的网络块设备对应于远程镜像卷212至远程镜像卷213的间的j个镜像卷,而总共N个原卷包含的网络块设备对应包含远程镜像卷216的n个远程镜像卷。
[0067] 当时当某一原卷存在大量远程镜像卷时,发送线程在大多情况下可能仅处理同一原卷的远程镜像卷对应的网络块设备的请求数据发送,因此其它原卷被处理的机会较小。为此,本实施例以原卷为单位进行发送线程的分配,以能够使得所有原卷的远程镜像卷具有大致相等的处理机会。
[0068] 因此,这里链表模块分别将属于同一原卷的多个远程镜像卷对应的网络块设备串接为一队列链表,然后将包含多个串接队列链表的每一原卷串接为一循环链表。请求处理模块当执行发送线程时,首先判断设备链表是否为空,若链表非空,则加锁依次处理队列链表中的多个网络块设备向对应远程镜像卷的发送请求。与第一实施例相同,指针模块是利用指针记录当前最新处理的某一原卷下的网络块设备队列链表,并在完成队列链表中的多个网络块设备的发送请求后,向后移动指针至下一个包含同一原卷的多个远程镜像卷对应的网络块设备的队列链表。
[0069] 与第一实施例相同,请求处理模块在每次完成最新处理的某一原卷下的网络块设备队列链表的发送请求后,按照相同方式重复执行链表判断操作,并且相应地指针模块依照循环链表的原卷顺序,依次移动指针至下一个包含同一原卷的多个远程镜像卷对应的网络块设备的队列链表,以定位下一个需要处理的请求。直至链表为空,即完成所有链表中网络块设备的发送请求时。
[0070] 另外,本发明的发送请求处理系统更包含一权重模块,以设定本地系统100的每一原卷的发送请求权重,进而分配每一原卷的网络块设备向对应远程镜像卷发送请求的批量大小。发送线程的处理方式与第一实施例大致相同,只是每次移动完当前指针后,依次处理相同原卷的所有远程镜像卷的一个单位的请求后再进入下一次定位。这里,单位值取决于原卷设定的权重,其中随着权重的增大表示对此原卷分配的资源越大。
[0071] 下面,将结合图4与图5,对本发明的远程复制的发送请求处理方法作出说明。图4为本发明的第一实施例的远程复制的发送请求处理方法步骤流程图;以及图5为本发明的第二实施例的远程复制的发送请求处理方法步骤流程图。
[0072] 如图4所示,本发明第一实施例的远程复制的发送请求处理方法包含以下步骤:在本地系统中创建固定数量(例如m个)的发送线程,以形成一发送线程池(步骤302)。
在此实施例中,是以远程镜像卷为单位进行发送线程分配,即本地系统中每个原卷仅创建一个网络块设备(Network block device,nbd),且每个远程镜像卷对应唯一一个网络块设备。
[0073] 将接收到向远程系统的对应远程镜像卷(数量为n个)写请求的所有网络块设备(对应数量为n个,且m<n)串接为一循环链表(步骤304)。设定一指针,以顺序记录循环链表中的最新处理的网络块设备,其中指针的起始位置是指向循环链表头(步骤306)。然后,分配线程池中的发送线程,以按照指针链表顺序主动寻找欲处理的网络块设备(步骤308),进而利用发送线程处理链表中一网络块设备向对应远程镜像卷的发送请求。
[0074] 发送线程判断当前指针指向的网络块设备是否正在由其它发送线程所处理(步骤310),若有线程处理,则进入下一个处理周期(步骤314);否则,则利用发送线程加锁,处理此网络块设备的发送请求队列(步骤312)。然后,请求处理完成之后,判断循环链表是否为空(步骤316),若链表为空,则结束;链表非空,表示指针当前指向的最新处理网络块设备之后仍存在未处理请求的网络块设备,则向后移动指针至当前最新处理网络块设备的下一个网络块设备(步骤316)。然后,前进至步骤308,分配线程移动指针指向当前最新处理网络块设备的下一个网络块设备重复执行上述判断操作及请求处理操作,直至链表为空,即请求队列中没有网络块设备需要处理,发送线程进入等待状态,处理结束。
[0075] 图5显示的第二实施例的远程复制的发送请求处理方法与第一实施例不同在于,本实施例是应用于每一原卷建立有多个远程镜像卷(每个远程镜像卷对应一个网络块设备)的本地是统中。即,本地是统100中包含多个原卷,而每个原卷中则包含多个网络块设备,以对应其创建的多个远程镜像卷。当时当某一原卷存在大量远程镜像卷时,发送线程在大多情况下可能仅处理同一原卷的远程镜像卷对应的网络块设备的请求数据发送,因此其它原卷被处理的机会较小。为此,本实施例以原卷为单位进行发送线程的分配,以能够使得所有原卷的远程镜像卷具有大致相等的处理机会。
[0076] 因此,如图5显示,与第一实施例的网络块设备的循环链表不同的是,这里首先分别将属于同一原卷的多个远程镜像卷对应的网络块设备串接为一队列链表(步骤402),然后将包含多个串接队列链表的每一原卷串接为一循环链表(步骤404)。
[0077] 与第一实施例不同,这里设定指针顺序记录循环链表中当前最新处理的某一原卷下的网络块设备队列链表(步骤406)。然后分配发送线程池中的发送线程(步骤408),以按照指针链表顺序主动寻找欲处理的网络块设备。这里发送线程的数目最好小于循环链表的原卷数目,以减少发送请求处理时资源消耗。
[0078] 执行发送线程时,与第一实施例相同,首先判断指针指向的网络块设备是否正在由其它发送线程所处理(步骤410),若有线程处理,则发送线程进入下一个处理周期(步骤414);否则,则利用发送线程对此原卷的队列链表中的多个网络块设备的处理加锁,依次处理当前指针指向的队列链表中的多个网络块设备的发送请求队列(步骤412)。然后,发送线程进入下一个处理周期(步骤414)。并在请求处理完成之后,判断设备循环链表是否为空(步骤416),若链表非空,则向后移动指针至下一个包含同一原卷的多个远程镜像卷对应的网络块设备的队列链表(步骤418)。然后,前进至步骤408,分配线程移动指针指向当前最新处理网络块设备的下一个原卷的网络块设备,重复执行上述判断操作及请求处理操作,直至链表为空结束。
[0079] 与第一实施例类似,这里在每次完成最新处理的某一原卷下的网络块设备队列链表的发送请求后,按照相同方式重复执行链表判断操作,并且相应地依照循环链表的原卷顺序,依次移动指针至下一个包含同一原卷的多个远程镜像卷对应的网络块设备的队列链表,以定位下一个需要处理的请求。直至链表为空,即完成所有链表中网络块设备的发送请求时。
[0080] 发送线程的处理方式与第一实施例大致相同,只是每次移动完当前指针后,依次处理相同原卷的所有远程镜像卷的一个单位的请求后再进入下一次定位。这里,是透过单位值分配每一原卷的网络块设备向对应远程镜像卷发送请求的批量大小,进而实现为不同远程镜像卷提供不同的发送处理能力。单位值取决于原卷设定的权重,其中随着权重的增大表示对此原卷分配的资源越大。
[0081] 当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。