一种VCPU调度方法、装置及控制设备与流程

文档序号:30983154发布日期:2022-08-03 01:02阅读:69来源:国知局
一种VCPU调度方法、装置及控制设备与流程
一种vcpu调度方法、装置及控制设备
技术领域
1.本技术涉及虚拟化技术领域,具体而言,涉及一种vcpu调度方法、装置及控制设备。


背景技术:

2.虚拟化技术越来越成熟,用户对于云计算的接受度和使用度都在逐步提升,也产生了更多的使用方式,为适应这些使用方式,就需要对vcpu的调度进行改造。
3.kernel(内核)自身的调度程序难以满足这些需求,并且调度程序作为kernel的核心模块,关键数据结构并不对外暴露,导致额外开发调度程序具有一定的技术门槛以及与kernel紧耦合,维护成本高。


技术实现要素:

4.本技术解决的问题是现有的vcpu调度方法的灵活性不高,。
5.为解决上述问题,本技术首先提供一种vcpu调度方法,包括:
6.创建与物理cpu一一绑定的kthread线程,每个所述kthread线程具有独立的调度队列;
7.基于ebpf技术实现不同kthread线程的调度队列之间和/或各个kthread线程的调度队列内的vcpu的调度。
8.在一种实施方式中,基于ebpf技术实现不同kthread线程的调度队列之间和/或各个kthread线程的调度队列内的vcpu的调度之前,所述方法还包括:
9.构建ebpf框架,所述ebpf框架上设置有用于采集数据的观察点位置和用于加载决策逻辑的决策点位置。
10.在一种实施方式中,所述调度队列中的所述vcpu的状态为可运行状态、睡眠等待状态以及正在运行状态中的一个,通过对所述调度队列中的所述vcpu的状态切换来实现对所述调度队列中的该vcpu的调度。
11.在一种实施方式中,所述基于ebpf技术实现不同kthread线程的调度队列之间和/或各个kthread线程的调度队列内的vcpu的调度,包括:
12.创建新的所述vcpu;
13.基于ebpf,将创建的所述vcpu分配给其中一个调度队列,分配后的所述vcpu为睡眠等待状态。
14.在一种实施方式中,所述基于ebpf技术实现不同kthread线程的调度队列之间和/或各个kthread线程的调度队列内的vcpu的调度,包括:
15.处于睡眠等待状态的所述vcpu被唤醒后,检查是否需要销毁,若需要销毁则将所述vcpu从所述调度队列上移除;
16.若不需要销毁,则在首次被唤醒后切换为可运行状态并发送新增信号;在非首次被唤醒后,基于ebpf,选择是否更换调度队列;
17.若需要更换所述调度队列,则将状态切换为可运行状态,从当前的所述调度队列中移除,移入更换的所述调度队列,并发送新增信号;
18.若不需要更换所述调度队列,则将状态切换为可运行状态并发送新增信号。
19.在一种实施方式中,所述基于ebpf技术实现不同kthread线程的调度队列之间和/或各个kthread线程的调度队列内的vcpu的调度,还包括:
20.接收到所述新增信号的所述kthread线程,将所述调度队列中当前的正在运行状态的所述vcpu切换为可运行状态;
21.基于ebpf,从可运行状态的所述vcpu中选取需要执行的vcpu;
22.将需要执行的所述vcpu切换为正在运行状态,并执行所述vcpu。
23.在一种实施方式中,所述基于ebpf技术实现不同kthread线程的调度队列之间和/或各个kthread线程的调度队列内的vcpu的调度,包括:
24.处于正在运行状态的所述vcpu触发睡眠后,转换为睡眠等待状态,并发送结束信号;
25.接收到所述结束信号的所述kthread线程,基于ebpf,从可运行状态的所述vcpu中选取需要执行的vcpu;
26.将需要执行的所述vcpu切换为正在运行状态,并执行所述vcpu。
27.本技术其次一种控制设备,其包括:存储器和处理器;
28.所述存储器,其用于存储程序;
29.所述处理器,耦合至所述存储器,用于执行所述程序,以用于:
30.创建与物理cpu一一绑定的kthread线程,每个所述kthread线程具有独立的调度队列;
31.基于ebpf技术实现不同kthread线程的调度队列之间和/或各个kthread线程的调度队列内的vcpu的调度。
32.在一种实施方式中,处理器还用于:
33.在基于ebpf技术实现不同kthread线程的调度队列之间和/或各个kthread线程的调度队列内的vcpu的调度之前,构建ebpf框架,所述ebpf框架上设置有用于采集数据的观察点位置和用于加载决策逻辑的决策点位置。
34.在一种实施方式中,所述调度队列中的所述vcpu的状态为可运行状态、睡眠等待状态以及正在运行状态中的一个,基于此,处理器303具体用于:
35.通过对所述调度队列中的所述vcpu的状态切换来实现对所述调度队列中的该vcpu的调度。
36.在一种实施方式中,所述处理器具体用于:
37.创建新的所述vcpu;
38.基于ebpf,将创建的所述vcpu分配给其中一个调度队列,分配后的所述vcpu为睡眠等待状态。
39.在一种实施方式中,所述处理器具体用于:
40.处于睡眠等待状态的所述vcpu被唤醒后,检查是否需要销毁,若需要销毁则将所述vcpu从所述调度队列上移除;
41.若不需要销毁,则在首次被唤醒后切换为可运行状态并发送新增信号;在非首次
被唤醒后,基于ebpf,选择是否更换调度队列;
42.若需要更换所述调度队列,则将状态切换为可运行状态,从当前的所述调度队列中移除,移入更换的所述调度队列,并发送新增信号;
43.若不需要更换所述调度队列,则将状态切换为可运行状态并发送新增信号。
44.在一种实施方式中,所述处理器具体用于:
45.接收到所述新增信号的所述kthread线程,将所述调度队列中当前的正在运行状态的所述vcpu切换为可运行状态;
46.基于ebpf,从可运行状态的所述vcpu中选取需要执行的vcpu;
47.将需要执行的所述vcpu切换为正在运行状态,并执行所述vcpu。
48.在一种实施方式中,所述处理器具体用于:
49.处于正在运行状态的所述vcpu触发睡眠后,转换为睡眠等待状态,并发送结束信号;
50.接收到所述结束信号的所述kthread线程,基于ebpf,从可运行状态的所述vcpu中选取需要执行的vcpu;
51.将需要执行的所述vcpu切换为正在运行状态,并执行所述vcpu。
52.本技术再次提供一种vcpu调度装置,其包括:
53.线程创建模块,其用于创建与物理cpu一一绑定的kthread线程,每个所述kthread线程具有独立的调度队列;
54.vcpu调度模块,其用于基于ebpf技术实现不同kthread线程的调度队列之间和/或各个kthread线程的调度队列内的vcpu的调度。
55.在一种实施方式中,所述装置还包括:
56.框架构建模块,其用于构建ebpf框架,所述ebpf框架上设置有用于采集数据的观察点位置和用于加载决策逻辑的决策点位置。
57.本技术中,开发者无需考虑调度逻辑对内核可能产生的影响,也无需考虑内核调度程序的逻辑问题;只需要考虑vcpu调度逻辑即可。这样,将调度的具体方式与kernel解耦,开发灵活且大大降低开发需要的技术门槛。
附图说明
58.图1为根据本技术一个实施例的vcpu调度方法的流程图;
59.图2为根据本技术又一实施例的vcpu调度方法的流程图;
60.图3为根据本技术又一实施例的vcpu调度方法的流程图;
61.图4为根据本技术又一实施例的vcpu调度方法的流程图;
62.图5为根据本技术又一实施例的vcpu调度方法的流程图;
63.图6为根据本技术又一实施例的vcpu调度方法的流程图;
64.图7为根据本技术单独的调度队列中vcpu调度逻辑的具体示例的流程图;
65.图8为根据本技术另一个vcpu调度逻辑的具体示例的流程图;
66.图9为根据本技术一个实施例的vcpu调度装置的结构框图;
67.图10为根据本技术实施例的控制设备的结构框图。
具体实施方式
68.为使本技术的上述目的、特征和优点能够更为明显易懂,下面结合附图对本技术的具体实施例做详细的说明。
69.内核(kernel)自身的调度器(调度程序scheduler)所能实现的运行方式,是有限的,通过这些有限的运行方式来实现越来越多的虚拟化使用方式,需要开发者本身对kernel的调度器(scheduler)有非常深入的了解,这就导致对于虚拟化使用方式的额外开发具有一定的技术门槛。
70.另外,scheduler作为kernel的核心模块,关键数据结构并不对外暴露,这就使得scheduler与kernel紧耦合,在对调度方法进行设置时,要详细考虑具体的调度过程中对kernel的影响,大大限制了开发的灵活性,且维护的成本过高。
71.针对上述问题,本技术提供一种解决方案,结合kthread线程的特性,以及ebpf程序的优势。
72.为了便于理解,在此对下述可能使用的术语进行解释:
73.vcpu:虚拟cpu,本技术中,指虚拟机对应的cpu;对虚拟机来说,不直接感知物理cpu,虚拟机只看到虚拟机监视器呈现给它的虚拟cpu。
74.vcpu调度:hypervisor(虚拟机监视器)侧对宿主机上的vcpu运行时间片进行分配、限制、抢占。
75.ebpf:起源于linux内核,可以在操作系统内核中运行沙盒程序。
76.hypervisor:又称虚拟机监视器(英语:virtual machine monitor,缩写为vmm),是用来建立与执行虚拟机器的软件、固件或硬件。被hypervisor用来执行一个或多个虚拟机器的电脑称为宿主机(host machine),这些虚拟机器则称为客体机器(guest machine)。
77.kthread:内核线程,内核线程是工作在内核空间的线程结构,不属于任何一个进程。
78.cpu亲和性:就是进程要在指定的cpu上尽量长时间地运行而不被迁移到其他处理器,也称为cpu关联性。
79.本技术实施例提供了一种vcpu调度方法,该方法可以由vcpu调度装置来执行,该vcpu调度装置可以集成在电脑、服务器、计算机、服务器集群、数据中心等电子设备中。如图1所示,其为根据本技术一个实施例的vcpu调度方法的流程图;其中,所述vcpu调度方法,包括:
80.s100,创建与物理cpu一一绑定的kthread线程,每个所述kthread线程具有独立的调度队列;
81.本实施例中,创建的所述kthread线程为一个或多个,具体kthread线程的数量可以根据实际需求确定。其中,可以一次创建预定数量的所述kthread线程,也可以在第一时间创建若干kthread线程,在第二时间创建若干kthread线程,通过多次创建来获取预定数量的所述kthread线程;kthread线程的具体创建次数和每次创建的数量,本实施例中对此不做限制。
82.本实施例中,创建的所述kthread线程为有限个。
83.本实施例中,所述kthread线程的创建可以通过kthread_create来完成,也可以通过kthread_run来完成,也可以通过其他api来完成。
84.需要说明的是,cpu具有亲和性(affinity),具体包括软亲和性和硬亲和性:软亲和性就是进程要在指定的cpu上尽量长时间地运行而不被迁移到其他处理器,linux内核进程调度器天生就具有被称为软cpu亲和性的特性,这意味着进程通常不会在处理器之间频繁迁移。硬亲和性,就是利用linux内核提供给用户的api,强行将进程或者线程绑定到某一个指定的cpu核运行。
85.本实施例中,通过cpu的亲和性将kthread线程和物理cpu一一绑定,
86.本实施例中,所述kthread线程与物理cpu的一一绑定,可以通过kthread_bind来完成,也可以通过sched_setaffinity来完成,也可以通过其他api来完成。
87.创建kthread线程后,在每个kthread线程上创建对应的调度队列。其中,所述调度队列为vcpu的队列,用于vcpu的具体调度。其中,vcpu由系统创建后分配给一个调度队列,并在该调度队列中或不同的调度队列之间执行该vcpu的具体调度。需要说明的是,调度队列上一般设置有一个或多个vcpu,基于具体的调度策略,将vcpu在一个调度队列内或者多个调度队列之间进行调度。特殊情况下,当一个kthread线程上的调度队列中的vcpu全部销毁或转移后,该kthread线程和调度队列处于等待状态,等待系统基于调度策略分配新创建的vcpu或从其他的调度队列中转移部分vcpu。
88.s300,基于ebpf技术实现不同kthread线程的调度队列之间和/或各个kthread线程的调度队列内的vcpu的调度。
89.所述vcpu的具体调度,包括vcpu创建、加入调度队列、移出调度队列、选取调度队列、选取vcpu、vcpu销毁、vcpu运行、负载均衡等具体调度方式的至少一种。
90.本实施例中,上述多种具体调度方式,可以是基本的调度单元,如vcpu创建,也可以是由基本调度单元组成的综合调度方式,如负载均衡;上述对具体调度方式的列举,仅是对具体调度方式中的一部分的表述,并非穷举。
91.所述vcpu的具体调度,可以有上述多种具体调度方式的结合得到的,也可以是由上述多种具体调度方式中的一种或多种以及其他调度逻辑综合确定的,也可以是有上述多种具体调度方式中的一种或多种,以及未记载在上述的某个具体调度方式综合确定得到的;其中,vcpu的具体调度的具体获取方式,可以根据实际调度目的进行调整,本实施例对此不再赘述。
92.一方面,创建与物理cpu一一绑定的kthread线程后,kthread线程的调度队列相互独立,互不影响,vcpu在这些kthread线程上调度时,也无需考虑不同kthread线程之间的影响;一方面ebpf本身具备更高的安全检查,可以动态插拔,因此开发者使用ebpf程序来完成vcpu调度逻辑时,无需考虑调度逻辑对内核可能产生的影响,也无需考虑内核调度程序的逻辑问题;因此开发者只需要考虑vcpu调度逻辑即可。这样,将调度的具体方式与kernel解耦,开发灵活且大大降低开发需要的技术门槛。
93.本技术实施例提供了另一种vcpu调度方法,其与前述所述的vcpu调度方法类似,不同之处在于,如图2所示,
94.s300,基于ebpf技术实现不同kthread线程的调度队列之间和/或各个kthread线程的调度队列内的vcpu的调度之前,所述方法还包括:
95.s200,构建ebpf框架,所述ebpf框架上设置有用于采集数据的观察点位置和用于加载决策逻辑的决策点位置。
96.将ebpf程序添加到所述观察点位置,可以采集该位置的关键数据,以便于进行后续决策;将ebpf程序添加到所述决策点位置,可以加载决策逻辑,以根据采集到的关键数据进行决策。
97.可以将ebpf程序trace_point添加到所述观察点位置,以采集该位置的关键数据;也可以将ebpf程序hook point添加到所述观察点位置,以采集该位置的关键数据;也可以将其他类似作用ebpf程序添加到所述观察点位置,以采集该位置的关键数据。
98.在将ebpf程序添加到所述观察点位置后,并不会直接返回采集到的关键数据,而是将关键数据输出到内核的ring buffer(环形缓冲区),缓冲区中的信息通过debugfs对用户呈现。
99.可以将ebpf程序hook point添加到所述决策点位置,以加载决策逻辑;在将ebpf程序添加到所述决策点位置后,会返回一个值,该值对应于为决策逻辑的执行结果。也可以将其他类似作用ebpf程序添加到所述决策点位置,以加载决策逻辑,具体的ebpf程序在此不再赘述。
100.本实施例中,hook(钩子)是一种特殊的消息处理机制,它可以监视系统或者进程中的各种事件消息,截获发往目标窗口的消息并进行处理。在观察点位置插入ebpf程序hook point,不会产生影响;在决策点位置插入ebpf程序hook point,产生预设的影响。
101.ebpf框架,在一种实施方式中,设置有观察点位置和基于该观察点位置可以获取的关键数据以及决策点位置;基于该ebpf框架,在设计调度逻辑时,可以根据实际需要的关键数据来确定需要插入的观察点位置,以及需要插入决策逻辑的决策点位置。
102.ebpf框架,在一种实施方式中,设置有观察点位置和插入对应的观察点位置获取的关键数据以及决策点位置;基于该ebpf框架,在设计调度逻辑时,可以根据实际需要直接选取关键数据,以及需要插入决策逻辑的决策点位置。
103.基于ebpf框架,将调度的关键节点分为了观察点和决策点,通过选取ebpf框架中实际需要的观察点和决策点,即可完成调度逻辑的设计和执行。
104.将ebpf程序添加到所述观察点位置,在一种实施方式中,具体的步骤包括:编写ebpf决策源程序,以实现基于ebpf技术的决策逻辑;将所述ebpf决策源程序编译成bpf字节码;将编译后的bpf字节码加载至对应的观察点位置上。
105.将ebpf程序添加到所述决策点位置,在一种实施方式中,具体的步骤包括:编写ebpf决策源程序,以实现基于ebpf技术的决策逻辑;将所述ebpf决策源程序编译成bpf字节码;将编译后的bpf字节码加载至对应的决策点位置上。
106.在一种实施方式中,所述观察点位置包括:vcpu创建位置、加入队列位置、移出队列位置、开始运行位置、结束运行位置、调度队列位置、vcpu销毁位置等等。
107.在一种实施方式中,所述决策点位置包含:选取队列标准位置、选取vcpu标准位置、负载均衡位置、vcpu单次运行时长位置等等。
108.本技术实施例提供了另一种vcpu调度方法,其与前述所述的vcpu调度方法类似,不同之处在于,本实施例中,对创建vcpu进行具体描述,如图3所示,
109.所述s300,基于ebpf技术实现不同kthread线程的调度队列之间和/或各个kthread线程的调度队列内的vcpu的调度,包括:
110.s301,创建新的所述vcpu;
111.s302,基于ebpf,将创建的所述vcpu分配给其中一个调度队列,分配后的所述vcpu为睡眠等待状态。
112.本实施例中,基于ebpf,将创建的所述vcpu分配给其中一个调度队列,即为在对应的决策点位置插入ebpf程序,将选取调度队列的调度逻辑插入该决策点位置。
113.本实施例中,选取调度队列的调度逻辑进行决策时,所需要的关键数据,可以在vcpu创建位置的观察点位置插入ebpf程序获得;或者结合在其他观察点位置插入ebpf程序获得。
114.在一种实施方式中,将创建的所述vcpu分配给其中一个调度队列,可以选择所有的调度队列中优先级高的,或者停止运行时间最长的调度队列作为分配的调度队列;也可以基于其他数据来确定分配的调度队列。
115.在一种实施方式中,所述调度队列中的所述vcpu的状态为可运行状态、睡眠等待状态以及正在运行状态中的一个,通过对所述调度队列中的所述vcpu的状态切换来实现对所述调度队列中的该vcpu的调度。
116.本实施例中,处于正在运行状态的所述vcpu的数量为一个或零个;处于可运行状态的所述vcpu以及处于睡眠等待状态的所述vcpu的数量不做限制。
117.在一种实施方式中,将所述调度队列划分为可运行子队列和睡眠等待子队列;通过将vcpu分配到可运行子队列或睡眠等待子队列,来实现vcpu的所处状态的切换。
118.在另一种实施方式中,所述调度队列中的所述vcpu的状态在上述三种状态之外还包括销毁状态,在vcpu需要销毁时,将所述vcpu的状态切换为销毁状态,以将所述vcpu从调度队列中移除。
119.本技术实施例提供了另一种vcpu调度方法,其与前述所述的vcpu调度方法类似,不同之处在于,本实施例中,对唤醒vcpu进行具体描述,如图4所示,
120.s300,基于ebpf技术实现不同kthread线程的调度队列之间和/或各个kthread线程的调度队列内的vcpu的调度,包括:
121.s303,处于睡眠等待状态的所述vcpu被唤醒后,检查是否需要销毁,若需要销毁则将所述vcpu从所述调度队列上移除;
122.s304,若不需要销毁,则在首次被唤醒后切换为可运行状态并发送新增信号;在非首次被唤醒后,基于ebpf,选择是否更换调度队列;
123.s305,若需要更换所述调度队列,则将状态切换为可运行状态,从当前的所述调度队列中移除,移入更换的所述调度队列,并发送新增信号;
124.s306,若不需要更换所述调度队列,则将状态切换为可运行状态并发送新增信号。
125.本实施例中,步骤s303-s306与步骤s301-s302之间,不具有前后时序关系,其具体执行的前后顺序可以根据实际需要调整。
126.本实施例中,基于ebpf,选择是否更换调度队列,即为在对应的决策点位置插入ebpf程序,将判断是否更换调度队列的调度逻辑插入该决策点位置。
127.本实施例中,判断是否更换调度队列的调度逻辑进行决策时,所需要的关键数据,可以在相应的一个或多个观察点位置插入ebpf程序获得;判断是否更换调度队列的调度逻辑不同,选取的观察点位置也会对应调整;具体选取的观察点位置在此不再赘述。
128.本实施例中,处于睡眠等待状态的所述vcpu被唤醒的方式有多种,例如:在vcpu切
换到睡眠等待状态之前,预先设置唤醒时间,到达该时间后唤醒处于睡眠等待状态的所述vcpu;有任务需要处于睡眠等待状态的所述vcpu执行,唤醒所述vcpu;需要销毁处于睡眠等待状态的所述vcpu,唤醒所述vcpu。
129.本实施例中,在不需要销毁的情况下,除了首次唤醒,其他唤醒后所述vcpu都有一次更换调度队列的判断。
130.本实施例中,处于睡眠等待状态的所述vcpu不能执行任何动作,需要执行所述vcpu时,需要先唤醒所述vcpu后再执行或销毁所述vcpu。
131.本实施例中,销毁所述vcpu,和更换所述vcpu的调度队列,具有相似性,但不同之处在于,更换所述vcpu的调度队列时,将状态切换为可运行状态,首先当前的所述调度队列中移除,然后移入更换的所述调度队列且所处状态不变;销毁所述vcpu时,将状态切换为销毁状态,并将所述vcpu从所述调度队列上移除。
132.本技术实施例提供了另一种vcpu调度方法,其与前述所述的vcpu调度方法类似,不同之处在于,本实施例中,对执行vcpu进行具体描述,如图5所示,
133.s300,基于ebpf技术实现不同kthread线程的调度队列之间和/或各个kthread线程的调度队列内的vcpu的调度,还包括:
134.s307,接收到所述新增信号的所述kthread线程,将所述调度队列中当前的正在运行状态的所述vcpu切换为可运行状态;
135.s308,基于ebpf,从可运行状态的所述vcpu中选取需要执行的vcpu;
136.s309,将需要执行的所述vcpu切换为正在运行状态,并执行所述vcpu。
137.本实施例中,步骤s307,是在执行步骤s305或步骤s306之后进行的,其与步骤s301-s302之间,不具有前后时序关系,其具体执行的前后顺序可以根据实际需要调整。
138.本实施例中,基于ebpf,从可运行状态的所述vcpu中选取需要执行的vcpu,即为在对应的决策点位置插入ebpf程序,将选取执行vcpu的调度逻辑插入该决策点位置。
139.本实施例中,选取执行vcpu的调度逻辑进行决策时,所需要的关键数据,可以在相应的一个或多个观察点位置插入ebpf程序获得;选取执行vcpu的调度逻辑不同,选取的观察点位置也会对应调整;具体选取的观察点位置在此不再赘述。
140.本技术实施例提供了另一种vcpu调度方法,其与前述所述的vcpu调度方法类似,不同之处在于,本实施例中,对切换执行vcpu进行具体描述,如图6所示,
141.s300,基于ebpf技术实现不同kthread线程的调度队列之间和/或各个kthread线程的调度队列内的vcpu的调度,包括:
142.s310,处于正在运行状态的所述vcpu触发睡眠后,转换为睡眠等待状态,并发送结束信号;
143.s311,接收到所述结束信号的所述kthread线程,基于ebpf,从可运行状态的所述vcpu中选取需要执行的vcpu;
144.s312,将需要执行的所述vcpu切换为正在运行状态,并执行所述vcpu。
145.本实施例中,步骤s310-s312,其与步骤s301-s302之间,与步骤s303-s306之间,均不具有前后时序关系,其具体执行的前后顺序可以根据实际需要调整。
146.本实施例中,基于ebpf,从可运行状态的所述vcpu中选取需要执行的vcpu,即为在对应的决策点位置插入ebpf程序,将选取执行vcpu的调度逻辑插入该决策点位置。
147.本实施例中,选取执行vcpu的调度逻辑进行决策时,所需要的关键数据,可以在相应的一个或多个观察点位置插入ebpf程序获得;选取执行vcpu的调度逻辑不同,选取的观察点位置也会对应调整;具体选取的观察点位置在此不再赘述。
148.本技术实施例提供了另一种vcpu调度方法,其与前述所述的vcpu调度方法类似,不同之处在于,本实施例中,为单独的调度队列中vcpu调度逻辑的具体示例,如图7所示,所述调度方法包括:
149.s401,初始化调度队列;
150.s402,选取下一个可运行vcpu;
151.s403,判断是否触发保活机制;
152.s404,若触发所述保活机制,则基于等待时间选取所述可运行vcpu;
153.s405,若未触发所述保活机制,则基于优先级选取所述可运行vcpu;
154.s406,执行选取的所述可运行vcpu;
155.s407,判断所述调度队列中可运行vcpu是否为空;若所述可运行vcpu不为空,则返回所述步骤s402;
156.s408,若所述可运行vcpu为空,则转换为等待状态;
157.s409,在接收到创建的所述可运行vcpu或者唤醒后的所述可运行vcpu的增加信号后,返回所述步骤s402。
158.基于上述调度方法,对所述调度队列中的可运行vcpu进行调度执行。
159.本示例,是以单个调度队列为单位进行的,多个调度队列可以同时执行本示例中的调度方法,且多个调度队列的执行过程是相互独立的。
160.本示例中,所述可运行vcpu为空,为所述调度队列中不存在可运行vcpu。
161.本示例中,所述可运行vcpu,为处于可运行状态的所述vcpu。
162.本技术实施例提供了另一种vcpu调度方法,其与前述所述的vcpu调度方法类似,不同之处在于,本实施例中,为另一个vcpu调度逻辑的具体示例,如图8所示,所述调度方法包括:
163.s501,获取多个调度队列的忙碌分数;
164.s502,从所述调度队列中确定忙碌分数最大的调度队列和忙碌分数最小的调度队列;
165.s503,平衡忙碌分数最大的所述调度队列和忙碌分数最小的所述调度队列,并将忙碌分数最大的所述调度队列需要更换调度队列的所述vcpu进行打标,打标的所述vcpu移动到忙碌分数最小的所述调度队列中;
166.s504,休眠预设时长后,返回步骤s501。
167.基于上述调度方法,均衡所述调度队列的负载。本示例的调度方法,为主动进行负载均衡的调度方法,与其他被动负载均衡的调度方法结合,从而避免被动负载均衡长期未触发造成的负载不均衡的极端情况。
168.本示例中,在处于睡眠等待状态的vcpu不造成影响的情况下,调度队列的忙碌分数由调度队列中处于可运行状态的vcpu来确定;在处于睡眠等待状态的vcpu也造成影响的情况下,调度队列的忙碌分数由调度队列中处于可运行状态的vcpu和处于睡眠等待状态的vcpu来确定。
169.本示例中,处于可运行状态的vcpu和处于睡眠等待状态的vcpu,无法执行更换调度队列的操作,通过打标进行标记;打标后的所述vcpu切换为正在运行状态后,直接更换调度队列的操作。
170.本技术中的调度方法,基于ebpf本身的安全检查,可以动态插拔等特点,开发者只需要设置vcpu运行的国际,无需涉及内核的逻辑;从而将运行逻辑和性能数据分开,继续按需采集;且可以对具体的调度逻辑进行动态的灵活替换。
171.本技术实施例提供了一种vcpu调度装置,用于执行本技术上述内容所述的vcpu调度方法,以下对所述vcpu调度装置进行详细描述。
172.如图9所示,所述vcpu调度装置,包括:
173.线程创建模块101,其用于创建与物理cpu一一绑定的kthread线程,每个所述kthread线程具有独立的调度队列;
174.vcpu调度模块103,其用于基于ebpf技术实现不同kthread线程的调度队列之间和/或各个kthread线程的调度队列内的vcpu的调度。
175.在一种具体实施方式中,所述vcpu调度装置还包括:
176.框架构建模块102,其用于构建ebpf框架,所述ebpf框架上设置有用于采集数据的观察点位置和用于加载决策逻辑的决策点位置。
177.在一种具体实施方式中,所述调度队列中的所述vcpu的状态为可运行状态、睡眠等待状态以及正在运行状态中的一个,基于此,所述vcpu调度模块103,还用于:
178.通过对所述调度队列中的所述vcpu的状态切换来实现对所述调度队列中的该vcpu的调度。
179.在一种具体实施方式中,所述vcpu调度模块103,还用于:
180.创建新的所述vcpu;
181.基于ebpf,将创建的所述vcpu分配给其中一个调度队列,分配后的所述vcpu为睡眠等待状态。
182.在一种具体实施方式中,所述vcpu调度模块103,还用于:
183.处于睡眠等待状态的所述vcpu被唤醒后,检查是否需要销毁,若需要销毁则将所述vcpu从所述调度队列上移除;
184.若不需要销毁,则在首次被唤醒后切换为可运行状态并发送新增信号;在非首次被唤醒后,基于ebpf,选择是否更换调度队列;
185.若需要更换所述调度队列,则将状态切换为可运行状态,从当前的所述调度队列中移除,移入更换的所述调度队列,并发送新增信号;
186.若不需要更换所述调度队列,则将状态切换为可运行状态并发送新增信号。
187.在一种具体实施方式中,所述vcpu调度模块103,还用于:
188.接收到所述新增信号的所述kthread线程,将所述调度队列中当前的正在运行状态的所述vcpu切换为可运行状态;
189.基于ebpf,从可运行状态的所述vcpu中选取需要执行的vcpu;
190.将需要执行的所述vcpu切换为正在运行状态,并执行所述vcpu。
191.在一种具体实施方式中,所述vcpu调度模块103,还用于:
192.处于正在运行状态的所述vcpu触发睡眠后,转换为睡眠等待状态,并发送结束信
号;
193.接收到所述结束信号的所述kthread线程,基于ebpf,从可运行状态的所述vcpu中选取需要执行的vcpu;
194.将需要执行的所述vcpu切换为正在运行状态,并执行所述vcpu。
195.本技术的上述实施例提供的vcpu调度装置与本技术实施例提供的vcpu调度方法出于相同的发明构思,具有与其存储的应用程序所采用、运行或实现的方法相同的有益效果。
196.以上描述了vcpu调度装置的内部功能和结构,如图10所示,实际中,该vcpu调度装置可实现为控制设备,包括:存储器301以及处理器303。
197.存储器301,可被配置为存储程序。
198.另外,存储器301,还可被配置为存储其它各种数据以支持在控制设备上的操作。这些数据的示例包括用于在控制设备上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。
199.存储器301可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。
200.处理器303,耦合至存储器301,用于执行存储器301中的程序,以用于:
201.创建与物理cpu一一绑定的kthread线程,每个所述kthread线程具有独立的调度队列;
202.基于ebpf技术实现不同kthread线程的调度队列之间和/或各个kthread线程的调度队列内的vcpu的调度。
203.在一种实施方式中,处理器303还用于:
204.在基于ebpf技术实现不同kthread线程的调度队列之间和/或各个kthread线程的调度队列内的vcpu的调度之前,构建ebpf框架,所述ebpf框架上设置有用于采集数据的观察点位置和用于加载决策逻辑的决策点位置。
205.在一种实施方式中,所述调度队列中的所述vcpu的状态为可运行状态、睡眠等待状态以及正在运行状态中的一个,基于此,处理器303具体用于:
206.通过对所述调度队列中的所述vcpu的状态切换来实现对所述调度队列中的该vcpu的调度。
207.在一种实施方式中,所述处理器具体用于:
208.创建新的所述vcpu;
209.基于ebpf,将创建的所述vcpu分配给其中一个调度队列,分配后的所述vcpu为睡眠等待状态。
210.在一种实施方式中,所述处理器具体用于:
211.处于睡眠等待状态的所述vcpu被唤醒后,检查是否需要销毁,若需要销毁则将所述vcpu从所述调度队列上移除;
212.若不需要销毁,则在首次被唤醒后切换为可运行状态并发送新增信号;在非首次被唤醒后,基于ebpf,选择是否更换调度队列;
213.若需要更换所述调度队列,则将状态切换为可运行状态,从当前的所述调度队列中移除,移入更换的所述调度队列,并发送新增信号;
214.若不需要更换所述调度队列,则将状态切换为可运行状态并发送新增信号。
215.在一种实施方式中,所述处理器具体用于:
216.接收到所述新增信号的所述kthread线程,将所述调度队列中当前的正在运行状态的所述vcpu切换为可运行状态;
217.基于ebpf,从可运行状态的所述vcpu中选取需要执行的vcpu;
218.将需要执行的所述vcpu切换为正在运行状态,并执行所述vcpu。
219.在一种实施方式中,所述处理器具体用于:
220.处于正在运行状态的所述vcpu触发睡眠后,转换为睡眠等待状态,并发送结束信号;
221.接收到所述结束信号的所述kthread线程,基于ebpf,从可运行状态的所述vcpu中选取需要执行的vcpu;
222.将需要执行的所述vcpu切换为正在运行状态,并执行所述vcpu。
223.本技术中,图10中仅示意性给出部分组件,并不意味着服务端设备只包括图10所示组件。
224.本实施例提供的控制设备,与本技术实施例提供的vcpu调度方法出于相同的发明构思,具有与其存储的应用程序所采用、运行或实现的方法相同的有益效果。
225.本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
226.本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
227.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
228.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
229.在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
230.内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。内存是计算机可读介质的示例。
231.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
232.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
233.本领域技术人员应明白,本技术的实施例可提供为方法、系统或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
234.以上所述仅为本技术的实施例而已,并不用于限制本技术。对于本领域技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本技术的权利要求范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1