一种主机级流量控制方法、装置及令牌流量控制系统与流程

文档序号:33019205发布日期:2023-01-20 18:14阅读:32来源:国知局
一种主机级流量控制方法、装置及令牌流量控制系统与流程

1.本技术涉及云计算技术领域,具体而言,涉及一种主机级流量控制方法、装置及令牌流量控制系统。


背景技术:

2.现有的分布式存储系统中,不同的云硬盘会根据客户设置的优先级或重要程度设定不同的性能指标,为了避免优先级低的云硬盘抢占太多资源,一般需要给不同的云硬盘设置不同的流量限制。除了提供基本的云硬盘读写服务,一个完善的分布式存储系统还需要有备份,跨集群容灾、重建、迁移等高级功能。这些功能都会消耗大量的磁盘和网络资源,如果不进行流量限制,会导致正常的业务读写性能受到影响,从而影响客户的操作体验,因此需要根据业务系统的使用情况,给这些功能动态限速。
3.备份,跨集群容灾、重建、迁移等功能都是主机内多个磁盘一起进行,多个磁盘共享主机的cpu、内存和网络等资源,所以需要主机级的流量限制。现有的流量限制方法中,令牌获取需要跨进程通信,且有多个令牌生产者,导致流量控制的准确度不高、控制效率较低的问题。


技术实现要素:

4.本技术实施例的目的在于提供一种主机级流量控制方法、装置及令牌流量控制系统,只有一个令牌生产者,提高流量控制的准确度,使用消费者自适应休眠限速法,降低了速度控制的开销,提高控制效率,解决了现有方法流量控制的准确度不高、控制效率较低的问题。
5.本技术实施例提供了一种主机级流量控制方法,应用于令牌消费者,所述方法包括:
6.从令牌生产者创建的共享内存中获取消费令牌,并将共享内存中的当前令牌周期内的总令牌数减去所述消费令牌对应的数字;
7.判断所述共享内存中的剩余令牌数是否小于总令牌数的一半;
8.当剩余令牌数小于总令牌数的一半,且剩余令牌数不大于预设值时,休眠至小周期结束,所述小周期为剩余令牌数对应的周期剩余时间等分得到的。
9.在上述实现过程中,只有一个令牌生产者,单一的生产者模式,提高流量控制的准确度,简化了生产者的实现,降低了cpu资源消耗;使用消费者自适应休眠限速方法,降低了速度控制的开销,支持高速度流量控制,提高控制效率,解决了现有方法流量控制的准确度不高、控制效率较低的问题。
10.进一步地,将共享内存中的当前令牌周期内的总令牌数减去所述消费令牌对应的数字,包括:
11.若当前流量需要限制iops,则将共享内存中的当前令牌周期内的总令牌数减去所述消费令牌数量;
12.若当前流量需要限制带宽,则将共享内存中的当前令牌周期内的总令牌数减去所述消费令牌对应的io的长度。
13.在上述实现过程中,每个令牌消费者,每消费一次就通过一次减法操作对内存数字减去相应的数字,如果是iops限制,那么每次减去数字1,如果是带宽限制,那么每次减去相应的io请求长度,简化了令牌生成者的功能和进程间的通信方式,令牌消费者无需向令牌生成者发送请求,所以令牌生成者也无需实现功能来控制速度,把速度控制的逻辑放在令牌消费者实现,提高了控制效率。
14.进一步地,所述若剩余令牌数小于总令牌数的一半,且剩余令牌数不大于预设值时,休眠至小周期结束,包括:
15.将周期剩余时间分为1000个小周期;
16.获取每个小周期对应的令牌数为iops/2000;
17.若任意小周期内的令牌没有使用完,则积累至下一个小周期;
18.若在任意第n个小周期内,剩余令牌数小于等于iops/2-(iops/2000)*n,则需要休眠到所述小周期结束,iops表示总令牌数。
19.在上述实现过程中,令牌消费者通过自适应休眠方法进行限速,降低了速度控制的开销,支持高速度流量控制,并在流量低于限速值时不增加io延时。
20.进一步地,在所述从共享内存中获取消费令牌的步骤之前,所述方法还包括:
21.打开令牌生产者创建的内存文件,并将所述内存文件映射至自身进程地址空间,以与令牌生产者建立共享内存。
22.在上述实现过程中,通过建立共享内存,这样无论是哪个进程对该内存的修改,其他进程都能立马读取到修改后的数据,简化了令牌生成者的功能和进程间的通信方式,令牌消费者无需向令牌生成者发送请求。
23.本技术实施例还提供一种主机级流量控制装置,所述装置包括:
24.令牌获取模块,用于从共享内存中获取消费令牌,并将共享内存中的当前令牌周期内的总令牌数减去所述消费令牌对应的数字;
25.剩余令牌判断模块,用于判断所述共享内存中的剩余令牌数是否小于总令牌数的一半;
26.休眠模块,用于当剩余令牌数小于总令牌数的一半,且剩余令牌数不大于预设值时,休眠至小周期结束,所述小周期为剩余令牌数对应的周期剩余时间等分得到的。
27.在上述实现过程中,只有一个令牌生产者,单一的生产者模式,提高流量控制的准确度,简化了生产者的实现,降低了cpu资源消耗;使用消费者自适应休眠限速方法,降低了速度控制的开销,支持高速度流量控制,提高控制效率,解决了现有方法流量控制的准确度不高、控制效率较低的问题。
28.进一步地,所述休眠模块包括:
29.小周期模块,用于将周期剩余时间分为1000个小周期;
30.令牌数获取模块,用于获取每个小周期对应的令牌数为iops/2000;
31.小周期模块,用于若任意小周期内的令牌没有使用完,则积累至下一个小周期;
32.小周期休眠模块,用于若在任意第n个小周期内,剩余令牌数小于等于iops/2-(iops/2000)*n,则需要休眠到所述小周期结束,iops表示总令牌数。
33.在上述实现过程中,令牌消费者通过自适应休眠方法进行限速,降低了速度控制的开销,支持高速度流量控制,并在流量低于限速值时不增加io延时。
34.进一步地,所述装置还包括:
35.共享内存模块,用于打开令牌生产者创建的内存文件,并将所述内存文件映射至自身进程地址空间,以与令牌生产者建立共享内存。
36.在上述实现过程中,通过建立共享内存,这样无论是哪个进程对该内存的修改,其他进程都能立马读取到修改后的数据,简化了令牌生成者的功能和进程间的通信方式,令牌消费者无需向令牌生成者发送请求。
37.本技术实施例还提供一种令牌流量控制系统,所述系统包括:
38.令牌生产者,创建内存文件,并将所述内存文件映射到自身进程地址空间,在每周期开始时把共享内存中的值设置为一个周期内可消费的总令牌数;
39.多个令牌消费者,从所述共享内存中获取消费令牌,并将共享内存中的当前令牌周期内的总令牌数减去所述消费令牌对应的数字;判断所述共享内存中的剩余令牌数是否小于总令牌数的一半;若剩余令牌数小于总令牌数的一半,且剩余令牌数不大于预设值时,休眠至小周期结束,所述小周期为剩余令牌数对应的周期剩余时间等分得到的。
40.在上述实现过程中,每个令牌消费者,每消费一次就通过一次减法操作对内存数字减去相应的数字,如果是iops限制,那么每次减去数字1,如果是带宽限制,那么每次减去相应的io请求长度,简化了令牌生成者的功能和进程间的通信方式,令牌消费者无需向令牌生成者发送请求,所以令牌生成者也无需实现功能来控制速度,把速度控制的逻辑放在令牌消费者实现,提高了控制效率。
41.本技术实施例还提供一种电子设备,所述电子设备包括存储器以及处理器,所述存储器用于存储计算机程序,所述处理器运行计算机程序以使所述电子设备执行上述中任一项所述的主机级流量控制方法。
42.本技术实施例还提供一种可读存储介质,所述可读存储介质中存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行上述中任一项所述的主机级流量控制方法。
附图说明
43.为了更清楚地说明本技术实施例的技术方案,下面将对本技术实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本技术的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
44.图1为本技术实施例提供的一种主机级流量控制方法的流程图;
45.图2为本技术实施例提供的自适应休眠限速法的流程图;
46.图3为本技术实施例提供的主机级流量控制装置的结构框图;
47.图4为本技术实施例提供的另一种主机级流量控制装置的结构框图;
48.图5为本技术实施例提供的令牌流量控制系统的结构示意图。
49.图标:
50.100-令牌获取模块;110-共享内存模块;200-剩余令牌判断模块;300-休眠模块;
301-小周期模块;302-令牌数获取模块;303-累积模块;304-小周期休眠模块。
具体实施方式
51.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行描述。
52.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本技术的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
53.实施例1
54.请参看图1,图1为本技术实施例提供的一种主机级流量控制方法的流程图。现有的主机级的流量限制需要跨进程通信来获取令牌,而一般的进程间通信的效率只有10万iops左右,不满足高性能存储流量控制的需求,并且进程间通信需要大量的cpu资源。为了提高流量控制的效率和降低cpu资源的使用,本技术使用共享内存来同步数据,同时令牌消费者使用自适应休眠限速法来降低速度控制的开销,避免了跨进程通信,提高了流量控制的准确度。
55.该方法具体包括以下步骤:
56.步骤s100:从令牌生产者创建的共享内存中获取消费令牌,并将共享内存中的当前令牌周期内的总令牌数减去所述消费令牌对应的数字;
57.若当前流量需要限制iops,则将共享内存中的当前令牌周期内的总令牌数减去所述消费令牌数量;
58.若当前流量需要限制带宽,则将共享内存中的当前令牌周期内的总令牌数减去所述消费令牌对应的io的长度。
59.令牌生产者进程是一个独立进程,根据当前的流量限制情况来生成令牌数。例如需要限制iops为50万,那么就1秒生成50万个令牌,假如需要限制带宽为10gb,那么就是每秒把内存中的数设置为10g(10737418240)。令牌消费者就是各个磁盘服务进程,通过请求令牌来达到限速的效果,为了降低进程间通信的开销,本技术使用共享内存的方法来同步数据。
60.每个令牌消费者每消费一次就通过一次减法操作将共享内存中的当前令牌周期内的总令牌数减去相应的数字,如果是iops(input/output operations per second,每秒的读写次数)限制,那么每次减去数字1,如果是带宽限制,那么每次减去相应的io请求长度,例如4096。
61.令牌生产者也无需控制速度,把速度控制的逻辑放在令牌消费者端实现,例如令牌消费者当发现令牌数为零时自动休眠一小段时间来控制速度。
62.传统的方法是令牌生产者来控制速度,令牌消费者如果请求不到令牌时就阻塞住,直到有新的令牌产生时才返回,这种方法需要比较复杂的进程间通信方式,在iops或带宽比较高的情况下需要消耗大量cpu资源。
63.而本技术中,令牌消费者通过休眠来控制速度,而为了减少休眠的次数,减少进程休眠和唤醒的次数,本技术采用令牌消费者自适应休眠限速法。
64.步骤s200:判断所述共享内存中的剩余令牌数是否小于总令牌数的一半;
65.令牌消费者自适应休眠限速法的具体策略为:在一个令牌周期(一般为1秒)内,在
令牌减少到一半之前,无需休眠限速。在某些场景中,限制值可以设置比较高,然而某些时刻真实流量又不大,可能在一个周期内都消费不到一半的令牌,这时在整个周期内就无需休眠限速,对于io的影响只是多了一次数值判断,不会增加io延时。
66.步骤s300:当剩余令牌数小于总令牌数的一半,且剩余令牌数不大于预设值时,休眠至小周期结束,所述小周期为剩余令牌数对应的周期剩余时间等分得到的。
67.在步骤s100之前,该方法还包括:
68.打开令牌生产者创建的内存文件,并将所述内存文件映射至自身进程地址空间,以与令牌生产者建立共享内存。
69.共享内存只需要8个字节来存储当前的可用令牌数。令牌生成者创建一个8字节(一个uint64的整数占用8个字节的大小)大小的内存文件,并把内存文件映射到自己的进程地址空间,每个令牌消费者进程启动时候打开该内存文件,并把内存文件限映射到自己的进程地址空间,这样无论是哪个令牌消费者进程对该内存的修改,其他令牌消费者进程都能立马读取到修改后的数据。
70.通过共享内存的方式,使得令牌生产者和令牌消费者之间无需进行通信,令牌消费者无需向令牌生成者发送请求,所以令牌生成者也无需控制速度,解决了现有的进程间通信需要消耗大量的cpu资源的问题。
71.如图2所示,为自适应休眠限速法的流程图,步骤s300具体包括以下步骤:
72.步骤s301:将周期剩余时间分为1000个小周期;
73.步骤s302:获取每个小周期对应的令牌数为iops/2000;
74.步骤s303:若任意小周期内的令牌没有使用完,则积累至下一个小周期;
75.步骤s304:若在任意第n个小周期内,剩余令牌数小于等于iops/2-(iops/2000)*n,则需要休眠到所述小周期结束,iops表示总令牌数。
76.如果在一个令牌周期内令牌已消费了一半,周期剩余的时间为t,把周期剩余时间分为1000个小周期t(t/1000),则每个小周期可以分到iops/2000个令牌(总令牌数为iops,消费了一半,剩余令牌数还有iops/2,再分成1000份,就是iops/2000),如果某个小周期内令牌使用完了,所有令牌消费者都需要休眠至小周期结束;如果一个小周期令牌没使用完,可以累积给下一个小周期,也就是在第n个小周期,如果剩余令牌数大于iops/2-(iops/2000)*n时无需休眠,反之则需要休眠到该小周期结束。
77.示例地,该方法可以应用于分布式存储和超融合产品中,可以用来控制一个存储主机的备份和重建的总速度。
78.一个存储主机一般会存在多个数据盘,每个数据盘会使用一个进程来提供服务,所以想要控制一个存储主机的备份或重建的速度需要一个高效的跨进程流量控制方法,而不能简单的把主机的总速度均分给每个数据盘,由各个数据盘来控制。这样会导致当某些磁盘当前没有备份或重建任务时,整个主机的整体备份或重建流量偏低。例如一个主机有5个数据盘,整个主机可用于备份的带宽是10gb,每个数据盘可以用于备份的带宽是6gb。如果只是简单把主机的总备份带宽均分给每个数据盘,那么每个数据盘最多只有2gb带宽,如果使用的是跨进程流量控制方法,那么在其他数据盘没有备份任务的时候,单个数据盘能增加备份带宽,最多达到自己单盘的备份限速6gb。
79.该方法使用一个令牌生产者,提高了流量的控制的准确度,使用消费者自适应睡
眠限速方法,降低了速度控制的开销,支持高速度流量控制,并在流量低于限速值时不增加io延时,解决了现有方法流量控制的准确度不高、控制效率较低的问题。
80.实施例2
81.本技术实施例提供一种主机级流量控制装置,如图3所示,为主机级流量控制装置的结构框图,所述装置包括但不限于:
82.令牌获取模块100,用于从共享内存中获取消费令牌,并将共享内存中的当前令牌周期内的总令牌数减去所述消费令牌对应的数字;
83.剩余令牌判断模块200,用于判断所述共享内存中的剩余令牌数是否小于总令牌数的一半;
84.休眠模块300,用于当剩余令牌数小于总令牌数的一半,且剩余令牌数不大于预设值时,休眠至小周期结束,所述小周期为剩余令牌数对应的周期剩余时间等分得到的。
85.其中,如图4所示,为另一种主机级流量控制装置的结构框图,所述休眠模块300包括但不限于:
86.小周期模块301,用于将周期剩余时间分为1000个小周期;
87.令牌数获取模块302,用于获取每个小周期对应的令牌数为iops/2000;
88.累积模块303,用于若任意小周期内的令牌没有使用完,则积累至下一个小周期;
89.小周期休眠模块304,用于若在任意第n个小周期内,剩余令牌数小于等于iops/2-(iops/2000)*n,则需要休眠到所述小周期结束,iops表示总令牌数。
90.该装置还包括:共享内存模块110,用于打开令牌生产者创建的内存文件,并将所述内存文件映射至自身进程地址空间,以与令牌生产者建立共享内存。
91.每个令牌消费者,每消费一次就通过一次减法操作对内存数字减去相应的数字,如果是iops限制,那么每次减去数字1,如果是带宽限制,那么每次减去相应的io请求长度,简化了令牌生成者的功能和进程间的通信方式,令牌消费者无需向令牌生成者发送请求,所以令牌生成者也无需实现功能来控制速度,把速度控制的逻辑放在令牌消费者实现,提高了控制效率。
92.只有一个令牌生产者,单一的生产者模式,提高流量控制的准确度,简化了生产者的实现,降低了cpu资源消耗;使用消费者自适应休眠限速方法,降低了速度控制的开销,支持高速度流量控制,提高控制效率,解决了现有方法流量控制的准确度不高、控制效率较低的问题。
93.本技术实施例还提供一种令牌流量控制系统,如图5所示,为令牌流量控制系统的结构示意图,所述系统包括:
94.令牌生产者,创建内存文件,并将所述内存文件映射到自身进程地址空间,在每周期开始时把共享内存中的值设置为一个周期内可消费的总令牌数;
95.多个令牌消费者,从所述共享内存中获取消费令牌,并将共享内存中的当前令牌周期内的总令牌数减去所述消费令牌对应的数字;判断所述共享内存中的剩余令牌数是否小于总令牌数的一半;若剩余令牌数小于总令牌数的一半,且剩余令牌数不大于预设值时,休眠至小周期结束,所述小周期为剩余令牌数对应的周期剩余时间等分得到的。
96.令牌流量控制系统包括一个令牌生产者和多个令牌消费者,令牌生产者创建共享内存,共享内存只需要8个字节来存储当前的可用令牌数,令牌生成者创建一个8字节大小
的内存文件,共享内存是一个整数值,如果iops设置为50万,则共享内存值为50万,总令牌数为50万,占用8个字节的内存空间,把该内存文件映射到自己的进程地址空间;每个令牌消费者进程启动时,打开该内存文件,并把内存文件限映射到自己的进程地址空间,这样无论是哪个进程对该内存的修改,其他进程都能立马读取到修改后的数据,该方法简化了令牌生产者的功能和进程间的通信方式。
97.令牌消费者使用自适应休眠限速法,降低了速度控制的开销,支持高速度流量控制。
98.本技术实施例还提供一种电子设备,所述电子设备包括存储器以及处理器,所述存储器用于存储计算机程序,所述处理器运行计算机程序以使所述电子设备执行上述中任一项所述的主机级流量控制方法。
99.本技术实施例还提供一种可读存储介质,所述可读存储介质中存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行上述中任一项所述的主机级流量控制方法。
100.在本技术所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本技术的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
101.另外,在本技术各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
102.所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
103.以上所述仅为本技术的实施例而已,并不用于限制本技术的保护范围,对于本领域的技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
104.以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵
盖在本技术的保护范围之内。因此,本技术的保护范围应所述以权利要求的保护范围为准。
105.需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1