本发明涉及虚拟化技术领域,更具体地说,涉及一种基于numa节点的进程访问方法及装置。
背景技术:
虚拟化是一种资源管理技术,是将计算机的各种石头资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。当前虚拟化服务器大部分采用非统一内存访问架构(non-uniformmemoryaccess,简称numa)。
numa是一种为多处理器的电脑设计的内存,内存访问时间取决于内存相对于处理器的位置。在numa下,处理器会有与之绑定的内存(被称为本地内存),两者共同组成一个numa节点(node),一种典型的numa节点结构如图1所示。处理器访问本地内存的速度比访问其他内存的速度要快,即本地访问的速度快于远程访问的速度。
在现有技术中,由于没有充分考虑到numa体系结构对系统性能的影响,各处理器核之间随机调度进程,导致进程远程访问频繁出现,大量的时间耗费在远程访问上,从而导致性能的浪费、系统的运行效率的降低。
因此,如何减少远程访问,提升进程访问资源的效率是本领域技术人员需要解决的问题。
技术实现要素:
本发明的目的在于提供一种基于numa节点的进程访问方法及装置,以减少远程访问,提升进程访问资源的效率。
为实现上述目的,本发明实施例提供了如下技术方案:
一种基于numa节点的进程访问方法,包括:
利用各进程的类型确定进程组,所述进程组内的各个进程与至少一个所述进程组内的其他进程互为相关进程;
将所述进程组中每个进程的资源绑定至同一numa节点,以便所述进程组内的第一进程在本numa节点上,对所述进程组内的其他相关进程的内存进行访问。
其中,所述利用各进程的类型确定进程组,包括:
根据各进程之间的交互访问信息确定进程组。
其中,所述利用各进程的类型确定进程组,包括:
将同一虚拟机运行实例所对应的进程确定为进程组。
其中,将所述进程组中每个进程的资源绑定至同一numa节点,包括:
通过cgroup将所述进程组中的每个进程绑定在一个或一组cpu上运行。
其中,还包括:
接收第一进程发送的显卡资源分配请求;
判断所述第一进程所属numa节点上是否存在显卡资源;
若存在,则向所述第一进程分配负载最小的显卡资源;若不存在,则向所述第一进程分配其他numa节点上的显卡资源。
其中,向所述第一进程分配其他numa节点上的显卡资源,包括:
利用显卡资源队列确定其他numa节点中负载最小的显卡资源;
将其他numa节点中负载最小的显卡资源分配至所述第一进程。
为实现上述目的,本发明实施例还提供了一种基于numa节点的进程访问装置,包括:
确定模块,用于利用各进程的类型确定进程组,所述进程组内的各个进程与至少一个所述进程组内的其他进程互为相关进程;
绑定模块,用于将所述进程组中每个进程的资源绑定至同一numa节点,以便所述进程组内的第一进程在本numa节点上,对所述进程组内的其他相关进程的内存进行访问。
其中,所述确定模块具体为根据各进程之间的交互访问信息确定进程组的模块。
其中,所述确定模块具体为将同一虚拟机运行实例所对应的进程确定为进程组的模块。
其中,所述绑定模块包括:
cpu绑定单元,用于通过cgroup将所述进程组绑定在一个或一组cpu上运行。
其中,还包括:
接收模块,用于接收第一进程发送的显卡资源分配请求;
判断模块,用于判断所述第一进程所属numa节点上是否存在显卡资源;
第一分配模块,用于在所述第一进程所属numa节点上存在显卡资源时,向所述第一进程分配负载最小的显卡资源;
第二分配模块,用于在所述第一进程所属numa节点上不存在显卡资源时,向所述第一进程分配其他numa节点上的显卡资源。
其中,所述第二分配模块包括:
确定单元,用于在所述第一进程所属numa节点上不存在显卡资源时,利用显卡资源队列确定其他numa节点中负载最小的显卡资源;
分配单元,用于将其他numa节点中负载最小的显卡资源分配至所述第一进程。
通过以上方案可知,本发明实施例提供的进程访问方法,包括利用各进程的类型确定进程组,所述进程组内的各个进程与至少一个所述进程组内的其他进程互为相关进程;将所述进程组中每个进程的资源绑定至同一numa节点,以便所述进程组内的第一进程在本numa节点上,对所述进程组内的其他相关进程的内存进行访问。由此可知,本发明实施例提供的进程访问方法通过numa绑定,将同一进程组内的进程和进程所需的资源都绑定在同一个numa节点上,减少了处理器的远程访问,使显卡虚拟化性能得到最大化的利用,提高了系统的运行效率。本发明实施例还提供了一种进程访问装置,同样能达到上述技术效果。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为一种典型的numa节点结构的示意图;
图2为本发明实施例公开的一种进程访问方法的流程图;
图3a为本发明实施例公开的一种进程访问方法的node0节点结构示意图;
图3b为本发明实施例公开的一种进程访问方法的node1节点结构示意图;
图4为本发明实施例公开的另一种进程访问方法的流程图;
图5为本发明实施例公开的又一种进程访问方法的流程图;
图6为本发明实施例公开的一种进程访问装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例公开了一种进程访问方法,以减少远程访问,提升进程访问资源的效率。
参见图2和图3a、图3b,图2为本发明实施例提供的一种进程访问方法的流程图,图3a为本发明实施例公开的一种进程访问方法的node0节点结构示意图;图3b为本发明实施例公开的一种进程访问方法的node1节点结构示意图。如图2所示,包括:
s201:利用各进程的类型确定进程组,所述进程组内的各个进程与至少一个所述进程组内的其他进程互为相关进程;
在具体实施中,可以根据各进程之间的交互信息确定进程组,也可以将同一虚拟机运行实例所对应的进程确定为进程组。以图3a和图3b为例,一台虚拟机对应的一对进程host-renderer进程(3dhr进程)和3d虚拟机进程(3dvm进程)可以确定为一个进程组。
一组进程组内进程的数量可以是两个,也可以是两个以上,进程组内的进程与至少一个所述进程组内的其他进程互为相关进程,相关进程是指存在信息交互的进程。
以图3a为例,进程组g0中存在两个进程3dvm0和3dhr0;进程组g1中,3dvm1和3dhr1之间存在频繁的信息交互,3dhr1和3dg1之间也存在着信息交互,由于3dvm1与3dg1都与3dhr1存在信息交互,即使两者之间没有任何通信存在,也应同属于g1进程组,由此可知,3dvm1、3dhr1和3dg1同属于g1进程组。
s202:将所述进程组中每个进程的资源绑定至同一numa节点,以便所述进程组内的第一进程在本numa节点上,对所述进程组内的其他相关进程的内存进行访问。
实现将进程组中的每个进程的资源绑定在同一numa节点上需要实现进程调度的绑定(即cpu绑定)和内存分配绑定。
通过cgroup将所述进程组中的每个进程绑定在一个或一组cpu上运行,即通过设置cpu的亲和性改变调度器的调度行为。cgroup是linux内核提供的一种可以限制、记录、隔离进程组所使用资源的机制。一组进程组可以绑定在同一个cpu上,多个进程组可以绑定在同一个cpu-subset上。
以图3为例,3dvm0和3dhr0可以看出是一个进程组,使用cgroup将两者绑定在一个cpu上,即g0。g0和g1虽然是两个不同的进程组,也可以绑定在一个cpu-subset上,即subset0。
内存的分配策略采用绑定策略(bind策略),即当第一进程请求访问本numa节点上其他进程的内存时,直接通过本地访问的方式访问,当其他进程的内存不足时,第一进程访问swap内存中对应的内存。
在上述例子中,由于3dvm0和3dhr0属于同一进程组,3dvm0可以通过本地访问的方式直接访问3dhr0的内存,当3dhr0的内存不足时,3dvm0使用swap内存。
在具体实施中,有时存在频繁内存互访的只是两个进程中的两个线程,在实现资源绑定时,可以将上述两个线程进行绑定,但是为了实现高粒度的绑定,也为了提升两个进程中其他线程的执行效率,往往直接将两个进程进行绑定,在此不作具体限定。
例如当前的3d显卡共享方案中,每个虚拟机运行实例中都有前端代理和后端代理,前端代理和后端代理之间传递数据使用的是共享内存构建的通道,两者之间存在频繁的内存访问。前端代理是运行在虚拟机内部的,实际运行它的线程是3dvm进程的vcpu线程,运行后端代理的是3dhr进程中的渲染线程,为了提升3dvm和3dhr进程中其他线程的执行效率,可以直接将两个进程进行numa绑定。
在上述实施例的基础上,作为优选实施方式,还包括:接收第一进程发送的显卡资源分配请求并为其分配显卡资源。
本发明实施例提供的进程访问方法,包括利用各进程的类型确定进程组,所述进程组内的各个进程互为相关进程;将所述进程组中每个进程的资源绑定至同一numa节点,以便所述进程组内的第一进程在本numa节点上,对所述进程组内的其他相关进程的内存进行访问。由此可知,本发明实施例提供的进程访问方法通过numa绑定,将同一进程组内的进程和进程所需的资源都绑定在同一个numa节点上,减少了处理器的远程访问,使显卡虚拟化性能得到最大化的利用,提高了系统的运行效率。
本发明实施例公开了一种进程访问方法,相对于上一实施例,本实施例对技术方案作了进一步的说明和优化。具体的:
参见图4,本发明实施例提供的另一种进程访问方法的流程图。如图4所示,包括:
s401:根据各进程之间的交互访问信息确定进程组,所述进程组内的各个进程与至少一个所述进程组内的其他进程互为相关进程;
在具体实施中,根据各进程之间的交互信息确定进程组,例如,可以将内存交互访问频繁的进程确定为一个进程组。“频繁”的界定,可以是人为根据经验手动设定的,也可以为每个进程设置一个相关进程列表,与该进程单位时间内访问次数超过预设值的进程加入该相关进程列表,在每次完成一个运行实例后,更新该运行实例涉及的进程的相关进程列表,系统自动确定内存交互频繁的进程,自动分配进程的numa节点。
在上述实施例的基础上,作为优选实施方式,将同一虚拟机运行实例所对应的进程确定为进程组。
在一个虚拟机运行实例中,一般包含运行前段代理的3dvm进程和运行后端代理的3dhr进程,前端代理与后端代理之间、多个3dvm进程之间、多个3dhr进程都有可能存在频繁的内存互访,因此,将一个虚拟机运行实例中所有的进程确定为一个进程组是较为合理的做法。
s402:将所述进程组中每个进程的资源绑定至同一numa节点;
s403:所述进程组内的第一进程请求访问本numa节点上的其他相关进程的内存时,通过本地访问的方式进行访问。
在具体实施中,绑定在同一numa节点上的进程,可以利用本地访问实现内存的访问。在上述例子中,3dvm0和3dhr0同时属于g0进程组,两者之间的内存互访可以通过本地访问实现。3dvm0和3dhr1虽然不属于同一进程组,但是由于g0和g1进程组同时绑定在subset0上,因此两者之间的内存互访也可以通过本地访问实现。
本发明实施例公开的进程访问方法,进程组内的第一进程可以访问本numa节点上其他相关进程的内存,也可以使用其他相关进程的显卡资源。具体的:
参见图5,本发明实施例提供的又一种进程访问方法的流程图。如图5所示,包括:
s501:利用各进程的类型确定进程组,所述进程组内的各个进程与至少一个所述进程组内的其他进程互为相关进程;
s502:将所述进程组中每个进程的资源绑定至同一numa节点;
显卡资源的绑定通过逻辑屏幕的方式实现。为每一个显卡核心创建一个逻辑屏幕,当进程请求显卡资源时,通过为进程分配所属numa节点上显卡资源不同的逻辑屏幕使进程使用相应的显卡资源。
s503:接收第一进程发送的显卡资源分配请求;
numa节点上的进程也可以请求使用显卡资源,该显卡资源可以是gpu资源,也可以是vgpu资源。当接收到第一进程请求显卡资源时,需要根据本numa节点上显卡资源的空闲情况进行分配。
s504:判断所述第一进程所属numa节点上是否存在显卡资源;若是,进入s505;若否,进入s506;
s505:向所述第一进程分配负载最小的显卡资源;
s506:向所述第一进程分配其他numa节点上的显卡资源。
在具体实施中,由于本地访问的速度远大于远程访问,所以首先判断本numa上是否存在显卡资源,若存在,则进行本地访问,将本numa节点上负载最小的显卡资源分配给第一进程,这样可以使第一进程使用显卡资源的速度更快,系统负担更小;若不存在,则进行远程访问,在进行远程访问时,也需要为其分配所有空闲显卡资源中负载最小的显卡资源,使得系统的运行效率最高。
以图3a和图3b为例,当前系统中只存在两个numa节点node0和node1。进程3dg1请求访问显卡资源,而此时node0节点上的无空闲的显卡资源,即node0-gpu中无可用资源,则将node1-gpu中负载最小的可用显卡资源分配给进程3dg1。
寻找本numa节点上负载最小的显卡资源可以通过建立本节点显卡资源队列的方式,将numa节点上空闲的显卡资源加入本节点显卡资源队列,并按照负载大小进行排序,负载最小的显卡资源位于队首,当第一进程请求显卡资源时,将本节点显卡资源队列的队首元素,即本节点上负载最小的显卡资源分配给第一进程。
可以理解的是,显卡资源的空闲状态是在不段变化的,因此,在每次分配完成或在进程释放显卡资源时,需要更新显卡资源队列,重新对处于空闲状态的显卡资源进行负载的排序,将负载最小的显卡资源调整到队首,保证负载均衡。
在上述实施例的基础上,作为优选实施方式,向所述第一进程分配其他numa节点上的显卡资源,包括:
s561:利用显卡资源队列确定其他numa节点中负载最小的显卡资源;
s562:将其他numa节点中负载最小的显卡资源分配至所述第一进程。
在具体实施中,首先将所有numa节点上空闲的显卡资源加入显卡资源队列,并按照负载大小进行排序,负载最小的显卡资源位于队首,当第一进程所在的numa节点上不存在显卡资源时,将显卡资源队列的队首元素,即负载最小的显卡资源分配给第一进程。
可以理解的是,上述所有显卡资源的序列同样需要不断的更新,在每次分配完成或在进程释放显卡资源时,将负载最小的显卡资源调整到队首,保证负载均衡。
下面对本发明实施例提供的一种进程访问装置进行介绍,下文描述的一进程访问装置与上文描述的进程访问方法可以相互参照。
参见图6,本发明实施例提供的一种资源限制装置的结构图。如图6所示,包括:
确定模块601,用于利用各进程的类型确定进程组,所述进程组内的各个进程与至少一个所述进程组内的其他进程互为相关进程;
绑定模块602,用于将所述进程组中每个进程的资源绑定至同一numa节点,以便所述进程组内的第一进程在本numa节点上,对所述进程组内的其他相关进程的内存进行访问。
本发明实施例提供的进程访问装置通过numa绑定,将同一进程组内的进程和进程所需的资源都绑定在同一个numa节点上,减少了处理器的远程访问,使显卡虚拟化性能得到最大化的利用,提高了系统的运行效率。
在上述实施例的基础上,作为优选实施方式,所述确定模块具体为根据各进程之间的交互访问信息确定进程组的模块。
在上述实施例的基础上,作为优选实施方式,所述确定模块具体为将同一虚拟机运行实例所对应的进程确定为进程组的模块。
在上述实施例的基础上,作为优选实施方式,所述绑定模块包括:
cpu绑定单元,用于通过cgroup将所述进程组绑定在一个或一组cpu上运行。
在上述实施例的基础上,作为优选实施方式,还包括:
接收模块,用于接收第一进程发送的显卡资源分配请求;
判断模块,用于判断所述第一进程所属numa节点上是否存在显卡资源;
第一分配模块,用于在所述第一进程所属numa节点上存在显卡资源时,向所述第一进程分配负载最小的显卡资源;
第二分配模块,用于在所述第一进程所属numa节点上不存在显卡资源时,向所述第一进程分配其他numa节点上的显卡资源。
在上述实施例的基础上,作为优选实施方式,所述第二分配模块包括:
确定单元,用于在所述第一进程所属numa节点上不存在显卡资源时,利用显卡资源队列确定其他numa节点中负载最小的显卡资源;
分配单元,用于将其他numa节点中负载最小的显卡资源分配至所述第一进程。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。