基于干扰打分的在线容器调度方法和系统
未命名
09-23
阅读:59
评论:0
1.本发明涉及调度系统技术领域,具体地,涉及一种基于干扰打分的在线容器调度方法和系统。
背景技术:
2.在线服务即向用户提供服务的应用,在线服务通常具有延迟敏感的特点,故也可称为延迟敏感型服务(latency-sensitive service),简称ls服务。常见的ls服务有搜索引擎,电子邮件以及电商网站等。通常情况下,ls服务有如下特点:第一,多个ls服务以微服务(microservice)的形式协同处理用户的请求,形成了一个调用栈。第二,随着业务量的增长,ls服务通常部署在集群中,每个ls服务有几十个到几千个实例(instance)运行着相同的代码,并通过负载均衡器分别处理来自用户的一部分请求。一旦某个ls服务其中的一部分副本的实例性能下降,则会影响到该服务的尾延迟。第三,ls实例以容器的形式运行在集群中的不同主机上,他们的生命周期通常从几个小时到几个月。相对于批处理作业(best effort jobs),ls服务通常生命周期更长,并且由于面向用户提供服务的特性,对性能的要求更为严格。本发明中使用术语容器或者实例均表示在线服务的单个用于处理请求的副本实体。
3.为了提升资源利用率,通常情况下,一台物理服务器上会运行着多个ls服务的实例。尽管这种部署方式能够提升资源利用率从而减少成本,但是由于对物理资源的竞争,使得它们会互相干扰,进而有可能导致性能下降。为了减少ls实例之间的干扰,现有的方案可以采用独占绑定的方式,即在一台服务器上,将一组vcpu分配给某一个ls实例,而其他的ls实例不能使用这一组vcpu(本文使用小写的vcpu代表linux系统中的一个一个逻辑核,通常intel的cpu在打开了hyperthreading的情况下的一个超线程,使用大写的cpu代表一块处理器,因此在多核处理器中一个cpu中有数十个vcpu)。然而,这种独占绑定的方式仍然不能缓解争用共享的硬件资源带来的干扰,例如llc(last level cache)和内存带宽的争用。由于多socket(cpu插槽)服务器,以及intel的hyperthreading(超线程,一个物理核可以虚拟成两个逻辑核,每个逻辑核都有各自的寄存器,但它们共享l1/l2 cache)等技术的存在。使得ls实例对这种cpu内部资源的竞争导致的干扰变得更为复杂。以一台双socket服务器为例,每台服务器上有两块cpu。每个cpu内部又有n个物理核,这n个物理核虚拟化成了2n个vcpu。共享一个物理核的两个vcpu共享了l1/l2 cache,同一个socket内部的vcpu共享了llc,属于两块cpu之间的vcpu没有共享cache,因此它们之间没有cache争用。这种不同的核共享不同的cache资源的现象给通过优化绑核的策略来降低干扰提供了可能。
4.专利文献cn115562829a(申请号:cn202211211699.7)公开了一种基于任务分类与干扰打分的干扰感知调度系统,包括be任务分类器、主机干扰量化器、干扰感知调度器;所述任务分类器对be任务实例进行类别推断,获得任务类别;所述主机干扰量化器基于欲进行调度的目标主机上的be分布评估候选主机的干扰水平,获得不同候选主机的干扰等级;所述干扰感知调度器将be任务实例调度到指定的干扰等级所对应的候选主机上。
5.现有的调度器,例如kubernetes或者docker swarm的调度器都支持容器的绑核。但这些通用的调度器都无法感知容器中的应用运行的状况、以及它们之间的干扰。因此都没有在调度阶段考虑容器之间的干扰。而现有的其他干扰感知的调度技术,通常也只通过调度到某一台机器上,没有进一步推荐vcpus集合(一个容器不止绑定到一个vcpu,vcpus为一组vcpu集合,例如vcpu 0
–
vcpu 3这4个vcpu)。因此本发明提出了一种能够评估一个被调度容器在候选主机以及相应的vcpus上部署时的干扰,并基于这种干扰评估推荐出使得干扰最小的候选主机和相应的vcpus。
技术实现要素:
6.针对现有技术中的缺陷,本发明的目的是提供一种基于干扰打分的在线容器调度方法和系统。
7.根据本发明提供的基于干扰打分的在线容器调度方法,包括:
8.离线训练步骤:监控在线服务的实例运行时的cpu利用率和部署情况,以及根据监控数据进行应用画像、训练cpu利用率预测模型;
9.在线运行步骤:基于cpu利用率预测模型进行候选主机过滤、生成候选集合和干扰打分;
10.所述候选主机过滤包括过滤掉集群中不满足资源要求的主机,得到一批候选主机;
11.所述生成候选集合包括使用滑动窗口法在候选主机上进一步生成候选的vcpu集合,从而生成容器调度时的候选主机和vcpus集合二元组的侯选集;
12.所述干扰打分包括对单个实例打分和综合打分,在调度一个在线服务的实例前,评估该实例如果被调度到候选集中每个候选组中指定的主机和vcpu编号上,该实例受到的干扰,以及候选主机上原有实例受到的干扰;聚合各个实例受到的干扰,得到整块cpu上在线实例的综合干扰,选择综合干扰最小的候选组部署被调度实例。
13.优选的,对于单个实例,需要监控的数据有:
14.(instance_id,node_ip,cpu_list,cpu_util)
15.其中,instance_id,node_ip,cpu_list,cpu_util分别为实例的唯一id、机器的ip、实例绑定的vcpu编号和实例的cpu利用率;
16.(node_ip,cpu_num_total,socket_num)
17.其中,node_ip,cpu_num_total,socket_num分别为机器的ip、机器上总的vcpu的数量和机器上插槽socket的数量。
18.优选的,以服务的平均利用率作为实例对其邻居的干扰的量化指标,表达式为:
[0019][0020]
其中,m表示service i的实例的数量;表示属于service i的每个实例k的cpu利用率;
[0021]
按实例申请的vcpu的数量加权,作为多个实例对其邻居的干扰的量化指标,表达
式为:
[0022][0023][0024]
其中,k表示共享核sc邻居的数量;n表示共享槽ss邻居的数量;requests.vcpui表示服务i的实例申请的vcpu的数量;
[0025]
使用多元线性回归训练cpu利用率预测模型,表达式为:
[0026]
cpu
inst
=b0+k1*cpu
sc
+k2*cpu
ss
[0027]
其中,b0、k1和k2是线性回归模型参数,通过历史数据拟合得到。
[0028]
优选的,使用滑动窗口选择vcpu候选集,对每个候选主机,按空闲vcpu编号从小到大,使用一个滑动窗口选择候选vcpu集合,从而生成一组候选集合:
[0029]
candidates={(serveri,vcpus)}
[0030]
其中,serveri表示机器的ip;vcpus表示在serveri上可被当前实例独占的vcpu编号的集合。
[0031]
优选的,对候选集中的每个(serveri,vcpus)元组进行干扰评估,其中包括单个实例的干扰打分和多个实例的综合打分:
[0032]
单个实例的干扰打分,以cpu利用率预测模型的一部分作为单个实例的干扰打分,选择由于邻居应用的干扰导致的利用率上涨的部分,表达式为:
[0033]
score
inst
=k1*cpu
sc
+k2*cpu
sd
[0034]
多个实例的综合打分,即在干扰评估的时候,不仅要考虑到自身的cpu利用率的上涨,还要考虑候选主机上原有实例利用率的上涨,表达式为:
[0035][0036]
其中,requests.vcpui表示实例i申请的vcpu数量;为实例i的干扰打分;cpu_num
socket
为单个socket上vcpu的数量。
[0037]
根据本发明提供的基于干扰打分的在线容器调度系统,包括:
[0038]
离线训练模块:监控在线服务的实例运行时的cpu利用率和部署情况,以及根据监控数据进行应用画像、训练cpu利用率预测模型;
[0039]
在线运行模块:基于cpu利用率预测模型进行候选主机过滤、生成候选集合和干扰打分;
[0040]
所述候选主机过滤包括过滤掉集群中不满足资源要求的主机,得到一批候选主机;
[0041]
所述生成候选集合包括使用滑动窗口法在候选主机上进一步生成候选的vcpu集合,从而生成容器调度时的候选主机和vcpus集合二元组的侯选集;
[0042]
所述干扰打分包括对单个实例打分和综合打分,在调度一个在线服务的实例前,评估该实例如果被调度到候选集中每个候选组中指定的主机和vcpu编号上,该实例受到的干扰,以及候选主机上原有实例受到的干扰;聚合各个实例受到的干扰,得到整块cpu上在
线实例的综合干扰,选择综合干扰最小的候选组部署被调度实例。
[0043]
优选的,对于单个实例,需要监控的数据有:
[0044]
(instance_id,node_ip,cpu_list,cpu_util)
[0045]
其中,instance_id,node_ip,cpu_list,cpu_util分别为实例的唯一id、机器的ip、实例绑定的vcpu编号和实例的cpu利用率;
[0046]
(node_ip,cpu_num_total,socket_num)
[0047]
其中,node_ip,cpu_num_total,socket_num分别为机器的ip、机器上总的vcpu的数量和机器上插槽socket的数量。
[0048]
优选的,以服务的平均利用率作为实例对其邻居的干扰的量化指标,表达式为:
[0049][0050]
其中,m表示service i的实例的数量;表示属于service i的每个实例k的cpu利用率;
[0051]
按实例申请的vcpu的数量加权,作为多个实例对其邻居的干扰的量化指标,表达式为:
[0052][0053][0054]
其中,k表示共享核sc邻居的数量;n表示共享槽ss邻居的数量;requests.vcpui表示服务i的实例申请的vcpu的数量;
[0055]
使用多元线性回归训练cpu利用率预测模型,表达式为:
[0056]
cpu
inst
=b0+k1*cpu
sc
+k2*cpu
ss
[0057]
其中,b0、k1和k2是线性回归模型参数,通过历史数据拟合得到。
[0058]
优选的,使用滑动窗口选择vcpu候选集,对每个候选主机,按空闲vcpu编号从小到大,使用一个滑动窗口选择候选vcpu集合,从而生成一组候选集合:
[0059]
candidates={(serveri,vcpus)}
[0060]
其中,serveri表示机器的ip;vcpus表示在serveri上可被当前实例独占的vcpu编号的集合。
[0061]
优选的,对候选集中的每个(serveri,vcpus)元组进行干扰评估,其中包括单个实例的干扰打分和多个实例的综合打分:
[0062]
单个实例的干扰打分,以cpu利用率预测模型的一部分作为单个实例的干扰打分,选择由于邻居应用的干扰导致的利用率上涨的部分,表达式为:
[0063]
score
inst
=k1*cpu
sc
+k2*cpu
ss
[0064]
多个实例的综合打分,即在干扰评估的时候,不仅要考虑到自身的cpu利用率的上涨,还要考虑候选主机上原有实例利用率的上涨,表达式为:
[0065][0066]
其中,requests.vcpui表示实例i申请的vcpu数量;为实例i的干扰打分;cpu_num
socket
为单个socket上vcpu的数量。
[0067]
与现有技术相比,本发明具有如下的有益效果:
[0068]
(1)本发明通过一种考虑cpu架构的干扰打分模型,能够评估单个ls实例受其邻居实例的干扰大小,并进一步衡量部署在这块cpu上的所有ls实例的综合干扰,根据干扰的评估结果指导调度,能够快速的推荐出干扰最低的候选主机及相应的vcpus集合,从而提升在线应用的性能,降低它们的延迟;
[0069]
(2)本发明根据历史监控数据得到每个ls服务的平均利用率,并给每个ls服务训练一个cpu预测模型,这个模型可以评估单个ls实例受到其邻居的干扰大小,将多个在线应用所受的干扰综合在一起,得到了总体的干扰,在调度时,选择使总体干扰最小的候选主机及相应的vcpus集合,从而能够降低ls实例之间的干扰;
[0070]
(3)本发明提出了一种考虑cpu架构的干扰打分模型,对一个实例,可以分别评估来自共享物理核的对端vcpus中部署的实例和来自共享socket的非对端vcpus中部署的实例的干扰;在调度一个ls实例时,同时考虑了被调度实例受到的干扰和被调度容器对候选主机上原有实例的干扰;在调度时不仅给出了推荐的机器,针对容器绑核场景,进一步给出了推荐的vcpu编号。
附图说明
[0071]
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
[0072]
图1为本发明的框架结构图;
[0073]
图2为一个开启了超线程的cpu的架构简图;
[0074]
图3表示如何使用滑动窗口选择vcpus集合。
具体实施方式
[0075]
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
[0076]
实施例1:
[0077]
本发明提供了一种基于干扰打分的在线容器调度方法,包括:
[0078]
离线训练步骤:监控在线服务的实例运行时的cpu利用率和部署情况,以及根据监控数据进行应用画像、训练cpu利用率预测模型;
[0079]
在线运行步骤:基于cpu利用率预测模型进行候选主机过滤、生成候选集合和干扰打分;
[0080]
所述候选主机过滤包括过滤掉集群中不满足资源要求的主机,得到一批候选主机;
[0081]
所述生成候选集合包括使用滑动窗口法在候选主机上进一步生成候选的vcpu集合,从而生成容器调度时的候选主机和vcpus集合二元组的侯选集;
[0082]
所述干扰打分包括对单个实例打分和综合打分,在调度一个在线服务的实例前,评估该实例如果被调度到候选集中每个候选组中指定的主机和vcpu编号上,该实例受到的干扰,以及候选主机上原有实例受到的干扰;聚合各个实例受到的干扰,得到整块cpu上在线实例的综合干扰,选择综合干扰最小的候选组部署被调度实例。
[0083]
对于单个实例,需要监控的数据有:
[0084]
(instance_id,node_ip,cpu_list,cpu_util)
[0085]
其中,instance_id,node_ip,cpu_list,cpu_util分别为实例的唯一id、机器的ip、实例绑定的vcpu编号和实例的cpu利用率;
[0086]
(node_ip,cpu_num_total,socket_num)
[0087]
其中,node_ip,cpu_num_total,socket_num分别为机器的ip、机器上总的vcpu的数量和机器上插槽socket的数量。
[0088]
以服务的平均利用率作为实例对其邻居的干扰的量化指标,表达式为:
[0089][0090]
其中,m表示service i的实例的数量;表示属于service i的每个实例k的cpu利用率;
[0091]
按实例申请的vcpu的数量加权,作为多个实例对其邻居的干扰的量化指标,表达式为:
[0092][0093][0094]
其中,k表示共享核sc邻居的数量;n表示共享槽ss邻居的数量;requests.vcpui表示服务i的实例申请的vcpu的数量;
[0095]
使用多元线性回归训练cpu利用率预测模型,表达式为:
[0096]
cpu
inst
=b0+k1*cpu
sc
+k2*cpu
ss
[0097]
其中,b0、k1和k2是线性回归模型参数,通过历史数据拟合得到。
[0098]
使用滑动窗口选择vcpu候选集,对每个候选主机,按空闲vcpu编号从小到大,使用一个滑动窗口选择候选vcpu集合,从而生成一组候选集合:
[0099]
candidates={(serveri,vcpus)}
[0100]
其中,serveri表示机器的ip;vcpus表示在serveri上可被当前实例独占的vcpu编号的集合。
[0101]
对候选集中的每个(serveri,vcpus)元组进行干扰评估,其中包括单个实例的干扰打分和多个实例的综合打分:
[0102]
单个实例的干扰打分,以cpu利用率预测模型的一部分作为单个实例的干扰打分,
选择由于邻居应用的干扰导致的利用率上涨的部分,表达式为:
[0103]
score
inst
=k1*cpu
sc
+k2*cpu
sd
[0104]
多个实例的综合打分,即在干扰评估的时候,不仅要考虑到自身的cpu利用率的上涨,还要考虑候选主机上原有实例利用率的上涨,表达式为:
[0105][0106]
其中,requests.vcpui表示实例i申请的vcpu数量;为实例i的干扰打分;cpu_num
socket
为单个socket上vcpu的数量。
[0107]
实施例2:
[0108]
如图1所示,本发明提供了一种基于干扰打分的在线容器调度系统,包括在线运行部分和离线训练部分;离线部分为根据历史监控数据提取ls服务的平均利用率,并训练cpu利用率预测器;在线部分即调度的过程,首先取调度队列中队头的在线容器,根据其元信息,例如需要的核数,候选主机过滤器会过滤出满足要求的候选主机,然后采用滑动窗口的方法进一步从过滤出来的候选主机上选择满足条件的vcpus的集合,得到候选主机及候选vcpus集合这个二元组的候选集;根据已训练好的预测器,再结合干扰打分器评估,评估候选集合中每个候选主机以及相应的vcpus集合的干扰,选择干扰分最小的主机及相应的vcpus集合绑定容器即可。
[0109]
离线训练部分包括:
[0110]
(1)监控模块
[0111]
我们需要一些监控数据来训练我们的模型。通过对历史数据的分析发现,在rps相同的情况下,同一ls服务的不同实例的cpu利用率差距甚至能到20%,这种差异是由于干扰导致的,并且在每秒请求量rps相同时,cpu利用率越高,响应延迟就越高。因此,我们的目标在于尽可能的降低实例的cpu利用率。由于需要刻画集群中的干扰情况,因此,我们还需要知道单个容器部署在哪台机器上,并且与哪几个核绑定,这样我们才能知道每个容器的sc邻居和ss邻居分别有哪些。因此,从容器的视角,监控数据主要有:
[0112]
(instance_id,node_ip,cpu_list,cpu_util)
[0113]
其中,instance_id为ls实例的唯一标识符;node_ip为ls实例部署所在的机器的ip;cpu_list为一个列表,存储ls实例独占的vcpu的编号;cpu_util为ls实例的cpu利用率。从机器视角,监控数据主要为:
[0114]
(node_ip,cpu_num_total,socket_num)
[0115]
我们需要知道机器上总的vcpu数量,以及插槽的数量socket_num。结合这两个再根据linux系统上的编号规则,我们就能够计算出某个vcpu的共享物理核的对端vcpu的编号。也可以得出同一个插槽内vcpu的编号。计算的方法如下:
[0116]
单个socket内vcpu的数量:
[0117][0118]
第i个插槽(从0开始)的vcpu编号(从0开始)为:
[0119]
其中,号cpu与号cpu共享物理核,其他的类似。通过这种方式,我们就能知道与每个ls实例共享物理核的实例以及共享socket的实例。
[0120]
(2)应用画像
[0121]
为了训练cpu利用率预测器,我们不仅需要每个实例的共享物理核的对端vcpus中的实例以及共享socket资源的实例。也需要用一些特征来表示每一种应用的实例。图2是一个开启了超线程后的cpu中的应用部署情况。这里有a、b、c、d、e、f五种实例。其中实例a和实例b、c共享物理核,它们运行在同一组物理核虚拟化的虚拟核上。因此,我们称实例b、c为a的sc(sharing core)邻居。而实例a、d、e、f虽然没有共享物理核,但他们共享了整个cpu的llc(最后一级缓存)。因此,我们称实例d、e、f为实例a的ss(sharing socket)邻居。在这里,实例a受到了来自实例b、c、d、e、f的干扰。为了预测实例a的cpu利用率,我们需要表示其他实例对实例a产生的压力。这里,我们使用每个实例所属的服务的平均利用率来表示该服务产生的压力:
[0122][0123]
上述公式中,m表示service i的实例的数量;表示属于service i的每个实例的cpu利用率。图2中表明,在实际的部署中,sc邻居以及ss邻居通常不止一个,因此,我们需要把他们聚合起来,表示集体对实例a产生的压力:
[0124][0125][0126]
其中,k表示sc邻居的数量;n表示ss邻居的数量;requests.vcpui表示实例i申请的vcpu的数量。
[0127]
(3)训练cpu利用率预测器
[0128]
在集群中,由于负载均衡的存在,同一ls服务的不同实例的rps(requests per second)是相同的,sc邻居与目标实例是共享l1/l2 cache的,而ss邻居与目标实例是共享llc的。因此,目标实例的cpu利用率主要受sc邻居和ss邻居的影响,我们使用多元线性回归来预测目标实例的cpu利用率。应用画像中所描述的来自sc邻居的压力和来自ss邻居的压力为:
[0129]
cpu
inst
=b0+k1*cpu
sc
+k2*cpu
ss
[0130]
在线运行部分包括:
[0131]
(1)生成候选集合
[0132]
选择候选主机,通常候选主机的选择要满足两点,第一个是满足一些运维限制,例如容灾要求:同一个服务的不同实例不能部署在一台机器上;第二个是满足资源要求,即候
选主机上剩余的空闲vcpu数量要大于或等于当前等待被调度的实例的需求vcpu数量。
[0133]
不同于常见的调度器。这里的候选集合不仅包含主机,还要包含主机上选择哪几个vcpus。由于单个socket包含了很多个vcpu,例如,我们的集群使用的一块处理器中包含52个vcpu。假设新来的等待调度的容器请求了8个vcpu,那么vcpus的组合会多达种。这个数量会产生极大的评估开销。因此,我们采用了一个滑动窗口来确定候选集合。如图3所示,先将cpu中空闲vcpu的编号按从小到大排序。这么做的好处是,先选择物理核的一个vcpu,该物理核的另一个vcpu空着留给其他的应用。这样一个物理核的两个vcpu可以给两个不同的应用使用,从而可以将cpu密集型的应用和非cpu密集型的应用分配在同一个物理核上,避免出现这两种情况:利用率高的实例占用一个物理核的两端,导致违反sla;或者利用率低的实例占用一个物理核的两端,造成资源浪费。再利用一个滑动窗口选择候选vcpus。滑动窗口有两个参数,其中,窗口给的大小是由应用申请的vcpu的数量确定的,而移动的步长通常是由集群中vcpu分配的最小粒度确定的。例如,在我们的集群中,绝大部分的应用申请的vcpu的数量大于等于2,因此这里我们的步长设置为2。通过滑动窗口,我们能选择出候选集合:
[0134]
candidates={(serveri,vcpus)}
[0135]
其中,serveri上的空闲vcpu数量要满足大于或者等于当前应用申请的vcpu的数量。vcpus为使用上述的滑动窗口选择出来的一组vcpu的集合。由于跨socket会降低实例的性能,并且导致我们这里的预测模型失效,我们必须保证实例不会跨socket部署。
[0136]
(2)给候选集合中的每个候选(serveri,vcpus)打分
[0137]
我们评估所有候选者的干扰分,目的是选出最佳的候选者用来运行当前被调度的实例。从而达到通过调度缓解干扰的目的。
[0138]
首先,对单个实例,根据前述cpu利用率的预测公式。我们可以看出,实例的cpu利用率主要受sc邻居和ss邻居的影响。我们把这部分影响当作单个实例受到的干扰。
[0139][0140]
其中,两个系数k1和k2是前述cpu利用率预测的多元线性回归模型中从历史数据中学习得到的。而cpu
sc
和cpu
ss
是sc邻居和ss邻居对目标实例产生的压力大小,其值是对sc邻居的应用画像和ss邻居的应用画像分别聚合得到的。这个分数的物理意义是实例在干扰情况下的cpu利用率比无干扰情况下的cpu利用率高出的部分。这个值越大,说明受到的干扰越大。
[0141]
对目标实例来说,当它被调度某台主机的一些vcpus上后,它不仅会受到该机器上现有实例的干扰,也会对现有实例产生干扰。因此,仅考虑目标实例的干扰是不够的,我们需要对候选机器的候选vcpu集合所在的socket上所有ls实例的干扰进行评估:
[0142][0143]
使用每个实例申请的vcpu的数量requests.vcpui作为权重,进行加权求和。这个socket级别的干扰分的物理意义可以认为是这个socket上由于干扰导致的单个socket的cpu利用率的上涨。因此,score
socket
越大,意味着由于干扰导致的cpu利用率的增长量越大,说明该socket中的ls实例之间可能存在更大的干扰。通过数据分析,以及根据cpu的微架构
特点,两个socket之间的实例干扰很小。因此,我们忽略另一个socket与这个socket之间的相互干扰。只使用单个socket的干扰分作为调度的依据,当计算出候选集中所有候选者的干扰分数以后,我们选择干扰最小的候选者用于运行目标实例。
[0144]
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。
[0145]
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本技术的实施例和实施例中的特征可以任意相互组合。
技术特征:
1.一种基于干扰打分的在线容器调度方法,其特征在于,包括:离线训练步骤:监控在线服务的实例运行时的cpu利用率和部署情况,以及根据监控数据进行应用画像、训练cpu利用率预测模型;在线运行步骤:基于cpu利用率预测模型进行候选主机过滤、生成候选集合和干扰打分;所述候选主机过滤包括过滤掉集群中不满足资源要求的主机,得到一批候选主机;所述生成候选集合包括使用滑动窗口法在候选主机上进一步生成候选的vcpu集合,从而生成容器调度时的候选主机和vcpus集合二元组的侯选集;所述干扰打分包括对单个实例打分和综合打分,在调度一个在线服务的实例前,评估该实例如果被调度到候选集中每个候选组中指定的主机和vcpu编号上,该实例受到的干扰,以及候选主机上原有实例受到的干扰;聚合各个实例受到的干扰,得到整块cpu上在线实例的综合干扰,选择综合干扰最小的候选组部署被调度实例。2.根据权利要求1所述的基于干扰打分的在线容器调度方法,其特征在于,对于单个实例,需要监控的数据有:(instance_id,node_ip,cpu_list,cpu_util)其中,instance_id,node_ip,cpu_list,cpu_util分别为实例的唯一id、机器的ip、实例绑定的vcpu编号和实例的cpu利用率;(node_ip,cpu_num_total,socket_num)其中,node_ip,cpu_num_total,socket_num分别为机器的ip、机器上总的vcpu的数量和机器上插槽socket的数量。3.根据权利要求1所述的基于干扰打分的在线容器调度方法,其特征在于,以服务的平均利用率作为实例对其邻居的干扰的量化指标,表达式为:其中,m表示service i的实例的数量;表示属于service i的每个实例k的cpu利用率;按实例申请的vcpu的数量加权,作为多个实例对其邻居的干扰的量化指标,表达式为:按实例申请的vcpu的数量加权,作为多个实例对其邻居的干扰的量化指标,表达式为:其中,k表示共享核sc邻居的数量;n表示共享槽ss邻居的数量;requests.vcpu
i
表示服务i的实例申请的vcpu的数量;使用多元线性回归训练cpu利用率预测模型,表达式为:cpu
inst
=b0+k1*cpu
sc
+k2*cpu
ss
其中,b0、k1和k2是线性回归模型参数,通过历史数据拟合得到。4.根据权利要求1所述的基于干扰打分的在线容器调度方法,其特征在于,使用滑动窗
口选择vcpu候选集,对每个候选主机,按空闲vcpu编号从小到大,使用一个滑动窗口选择候选vcpu集合,从而生成一组候选集合:candidates={(server
i
,vcpus)}其中,server
i
表示机器的ip;vcpus表示在server
i
上可被当前实例独占的vcpu编号的集合。5.根据权利要求3所述的基于干扰打分的在线容器调度方法,其特征在于,对候选集中的每个(server
i
,vcpus)元组进行干扰评估,其中包括单个实例的干扰打分和多个实例的综合打分:单个实例的干扰打分,以cpu利用率预测模型的一部分作为单个实例的干扰打分,选择由于邻居应用的干扰导致的利用率上涨的部分,表达式为:score
inst
=k1*cpu
sc
+k2*cpu
ss
多个实例的综合打分,即在干扰评估的时候,不仅要考虑到自身的cpu利用率的上涨,还要考虑候选主机上原有实例利用率的上涨,表达式为:其中,requests.vcpu
i
表示实例i申请的vcpu数量;为实例i的干扰打分;cpu_num
socket
为单个socket上vcpu的数量。6.一种基于干扰打分的在线容器调度系统,其特征在于,包括:离线训练模块:监控在线服务的实例运行时的cpu利用率和部署情况,以及根据监控数据进行应用画像、训练cpu利用率预测模型;在线运行模块:基于cpu利用率预测模型进行候选主机过滤、生成候选集合和干扰打分;所述候选主机过滤包括过滤掉集群中不满足资源要求的主机,得到一批候选主机;所述生成候选集合包括使用滑动窗口法在候选主机上进一步生成候选的vcpu集合,从而生成容器调度时的候选主机和vcpus集合二元组的侯选集;所述干扰打分包括对单个实例打分和综合打分,在调度一个在线服务的实例前,评估该实例如果被调度到候选集中每个候选组中指定的主机和vcpu编号上,该实例受到的干扰,以及候选主机上原有实例受到的干扰;聚合各个实例受到的干扰,得到整块cpu上在线实例的综合干扰,选择综合干扰最小的候选组部署被调度实例。7.根据权利要求6所述的基于干扰打分的在线容器调度系统,其特征在于,对于单个实例,需要监控的数据有:(instance_id,node_ip,cpu_list,cpu_util)其中,instance_id,node_ip,cpu_list,cpu_util分别为实例的唯一id、机器的ip、实例绑定的vcpu编号和实例的cpu利用率;(node_ip,cpu_num_total,socket_num)其中,node_ip,cpu_num_total,socket_num分别为机器的ip、机器上总的vcpu的数量和机器上插槽socket的数量。8.根据权利要求6所述的基于干扰打分的在线容器调度系统,其特征在于,以服务的平均利用率cpu
svci
作为实例对其邻居的干扰的量化指标,表达式为:
其中,m表示service i的实例的数量;表示属于service i的每个实例k的cpu利用率;按实例申请的vcpu的数量加权,作为多个实例对其邻居的干扰的量化指标,表达式为:按实例申请的vcpu的数量加权,作为多个实例对其邻居的干扰的量化指标,表达式为:其中,k表示共享核sc邻居的数量;n表示共享槽ss邻居的数量;requests.vcpu
i
表示服务i的实例申请的vcpu的数量;使用多元线性回归训练cpu利用率预测模型,表达式为:cpu
inst
=b0+k1*cpu
sc
+k2*cpu
ss
其中,b0、k1和k2是线性回归模型参数,通过历史数据拟合得到。9.根据权利要求6所述的基于干扰打分的在线容器调度系统,其特征在于,使用滑动窗口选择vcpu候选集,对每个候选主机,按空闲vcpu编号从小到大,使用一个滑动窗口选择候选vcpu集合,从而生成一组候选集合:candidates={(server
i
,vcpus)}其中,server
i
表示机器的ip;vcpus表示在server
i
上可被当前实例独占的vcpu编号的集合。10.根据权利要求8所述的基于干扰打分的在线容器调度系统,其特征在于,对候选集中的每个(server
i
,vcpus)元组进行干扰评估,其中包括单个实例的干扰打分和多个实例的综合打分:单个实例的干扰打分,以cpu利用率预测模型的一部分作为单个实例的干扰打分,选择由于邻居应用的干扰导致的利用率上涨的部分,表达式为:score
inst
=k1*cpu
sc
+k2*cpu
ss
多个实例的综合打分,即在干扰评估的时候,不仅要考虑到自身的cpu利用率的上涨,还要考虑候选主机上原有实例利用率的上涨,表达式为:其中,requests.vcpu
i
表示实例i申请的vcpu数量;为实例i的干扰打分;cpu_num
socket
为单个socket上vcpu的数量。
技术总结
本发明提供了一种基于干扰打分的在线容器调度方法和系统,包括:离线训练步骤:监控在线服务的实例运行时的CPU利用率和部署情况,以及根据监控数据进行应用画像、训练CPU利用率预测模型;在线运行步骤:基于CPU利用率预测模型进行候选主机过滤、生成候选集合和干扰打分;得到整块CPU上在线实例的综合干扰,选择综合干扰最小的候选组部署被调度实例。本发明根据干扰的评估结果指导调度,能够快速的推荐出干扰最低的候选主机及相应的vcpus集合,从而提升在线应用的性能,降低它们的延迟。降低它们的延迟。降低它们的延迟。
技术研发人员:钱诗友 戴杰 曹健
受保护的技术使用者:上海交通大学
技术研发日:2023.06.21
技术公布日:2023/9/22
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
航空商城 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/
上一篇:一种智慧街道局部调温系统 下一篇:交通感知数据处理方法、装置及网络设备与流程