虚拟化多核环境下基于非一致性I/O访问系统和优化方法与流程

文档序号:12363180阅读:715来源:国知局
虚拟化多核环境下基于非一致性I/O访问系统和优化方法与流程

本发明涉及计算机虚拟化领域,尤其涉及一种虚拟化多核环境下基于非一致性I/O访问的系统及其优化方法。



背景技术:

虚拟化是云计算中的关键技术。虚拟化允许多个计算机系统运行在一个物理计算机上,将物理机的硬件资源(CPU,内存,I/O设备等等)抽象成类似于电力的可按需使用的资源,提供给客户使用。虚拟化技术的使用,极大的减少了小型企业对服务器购买的投入,同时也极大的提高了空闲主机的使用效率,所以虚拟化技术广泛的存在于当今高性能服务器里面,比较有代表性的虚拟化云计算实例有亚马逊的EC2和阿里巴巴的阿里云。

虚拟化技术中一个关键组件就是虚拟机监视器(Virtual Machine Management,VMM)。虚拟机监视器负责将主机硬件资源抽象给虚拟机使用,同时还负责虚拟机的管理和虚拟机之间的通信等等。传统的硬件资源包括CPU资源,内存资源和I/O资源等,在非一致性内存访问(Non-Uniform Memory Access,NUMA)的架构下,虚拟化技术主要关注的是提升这些硬件资源虚拟化过后的性能。然而随着当今高性能网络技术和CPU多核技术的发展,硬件的性能已经不是瓶颈,反而这些高性能硬件之间的高效的协同处理成为了瓶颈,特别是在多核环境下,怎样高效的处理高性能网络I/O请求,因为很小的主机处理延迟都会对虚拟化中的网络应用产生巨大的性能下降。

I/O虚拟化是虚拟化重要组成部分之一,I/O虚拟化主要是针对网卡PCIe功能的虚拟化,在不损失I/O性能的情况下尽可能多的扩展虚拟机的数量。然而随着高性能物理机的核数的不断增加,放置物理核的节点也不断增加,多物理核怎样高效的访问I/O资源变得越来越重要。为此,在基于NUMA架构的基础上又提出了非一致性I/O访问(Non-Uniform I/O Access,NUIOA)如图1所示。每个物理核的节点包上都直接相连这各种设备,这些设备是不对称的,远端的节点要访问某个设备只能通过节点间的内部连接,这样就要比近端的节点访问慢,这种不对称的访问增加了系统的延迟,最终导致了虚拟机性能的下降。如图2就是一个传统的内存的远程访问,但是由于之前的系统没有考虑到高性能网络设备的存在,系统的优化策略忽略了网卡这一要素,特别是在高性能网络环境下,这种忽略带来的性能损失巨大。节点2上的CPU要传输数据到网卡必须要通过节点2和节点1,节点1和节点0之间的内部连接,这样不仅增加了内部连接的带宽占用,还增加了数据的访问延迟。

现在的一般应用基本都部署在云端,呈现出网络化,分布式的特性,所以高性能的可靠的网络传输对这些应用的有效运行起着关键性的作用,因此在当今的多核架构下的亲和性建模一定要考虑到I/O设备的重要性。

现在基本上所有的虚拟机监视器,像Xen,KVM和VMware ESXi基本上都是采用将一个虚拟机的VCPU和所有的内存都调度到一个节点上来保持本地访问,但是这种方法存在很大的缺陷,因为系统的负载均衡技术和其他技术会动态的平衡CPU和内存间的负载,导致原本的放置策略被干扰,最后使策略失效。现有的动态放置的模型都是基于NUMA的,他们建模的关注点是内存的本地性,或者是同时考虑内存本地性和cache命中率,没有考虑到网络I/O设备的重要性。还有他们的建模只考虑了线程与硬件之间的亲和性,没有考虑线程与线程之间的亲和性,导致建模的准确性存在问题。

现有的关于虚拟化多核架构下I/O性能调优方法主要包括线程绑定和内存迁移。其中,线程绑定是指将运行应用程序的虚拟机的VCPU线程绑定到特定的节点上,内存迁移是指将运行应用程序的虚拟机的内存迁移到特定的节点上,如果将VCPU线程和虚拟机内存绑定到同一个节点上,这样可以让CPU和内存之间的亲和度达到最大,从而提升系统的性能。然而,现有的研究主要关注CPU和内存两个维度,忽略了网卡这一要素的存在。要进行新的基于I/O设备的亲和度建模,以达到最优的系统性能。

因此,本发明致力于开发在NUIOA架构下,开发一种虚拟化多核环境下基于非一致性I/O访问系统和优化方法,建立基于虚拟化多核环境下的I/O性能的亲和度优化建模,从而高效的利用多核资源和高性能网络适配器的性能,有效的降低系统的负载,适应于当今高性能网络环境下的应用。



技术实现要素:

有鉴于现有技术的上述缺陷,本发明所要解决的技术问题是如何在虚拟化多核构架下,在CPU和内存两个维度之外,对基于I/O设备进行亲和度建模,为系统提供实时的动态高吞吐量低延迟的优化放置策略,以达到最优的整体系统性能。

为实现上述目的,本发明提供了一种虚拟化多核环境下基于非一致性I/O访问系统,包括性能监测模块、线程绑定模块和内存迁移模块,所述性能检测模块被配置为通过修改的性能监测工具实时监控虚拟机和物理主机的硬件信息;所述线程绑定模块被配置为根据所述性能检测模块收集到的硬件信息,判定当前系统处于低负载还是高负载,如果处于高负载情况下,就将负载比较高的节点上的虚拟机线程绑定到另外负载较低的节点上;所述内存迁移模块被配置为如果当前系统的负载较低,就将相关的线程迁移到距离网络适配器最近的节点上。

进一步地,所述硬件信息包括虚拟机里的应用程序访问页的次数和I/O请求次数以及物理主机的实时CPU负载和内存负载。

本发明还提供了一种虚拟化多核环境下基于非一致性I/O访问系统的优化方法,包括以下步骤:

(1)提供性能监测模块、线程绑定模块和内存迁移模块;

(2)通过性能监测模块同时监视虚拟机内部页的访问次数和单位时间内I/O请求的次数;

(3)通过性能监测模块实时监控物理主机的CPU的负载和内存的负载;

(4)当物理主机的某个节点负载高于阈值时,所述节点需要进行线程的迁移,判断条件的公式为:

<mrow> <mfrac> <mrow> <mi>T</mi> <mi>M</mi> <mi>T</mi> <mo>&lsqb;</mo> <mi>T</mi> <mo>&rsqb;</mo> <mo>&lsqb;</mo> <mi>k</mi> <mo>&rsqb;</mo> </mrow> <mrow> <munderover> <mo>&Sigma;</mo> <mrow> <mi>j</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>n</mi> </munderover> <mi>T</mi> <mi>M</mi> <mi>T</mi> <mo>&lsqb;</mo> <mi>T</mi> <mo>&rsqb;</mo> <mo>&lsqb;</mo> <mi>j</mi> <mo>&rsqb;</mo> </mrow> </mfrac> <mi>D</mi> <mi>T</mi> <mo>&lsqb;</mo> <mi>T</mi> <mo>&rsqb;</mo> <mo>&lsqb;</mo> <mi>k</mi> <mo>&rsqb;</mo> <mo>&le;</mo> <mfrac> <mrow> <mi>T</mi> <mi>M</mi> <mi>T</mi> <mo>&lsqb;</mo> <mi>T</mi> <mo>&rsqb;</mo> <mo>&lsqb;</mo> <mi>p</mi> <mo>&rsqb;</mo> </mrow> <mrow> <munderover> <mo>&Sigma;</mo> <mrow> <mi>j</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>n</mi> </munderover> <mi>T</mi> <mi>M</mi> <mi>T</mi> <mo>&lsqb;</mo> <mi>T</mi> <mo>&rsqb;</mo> <mo>&lsqb;</mo> <mi>j</mi> <mo>&rsqb;</mo> </mrow> </mfrac> <mi>D</mi> <mi>T</mi> <mo>&lsqb;</mo> <mi>T</mi> <mo>&rsqb;</mo> <mo>&lsqb;</mo> <mi>p</mi> <mo>&rsqb;</mo> </mrow>

其中,TMT矩阵表示线程的存储分布,DT矩阵表示节点间的访问延迟,将线程T迁移到节点K上而不是迁移到节点P上的标准是到节点K的平均延迟小于到节点P的平均访问延迟;

(5)当物理机的某个节点负载在正常范围内时,则将分布在远程节点上的该线程的访问热页迁移到本地节点上,所述热页的判断公式为:

if NodeAcc[n][i]>2*NodeAcc[n][j]

其中,NodeAcc[n][i]表示节点n访问page i的次数;

(6)将虚拟机里的热页的地址转换为物理机的物理地址之后,调用迁页函数将应用程序的热页迁移到对目标节点上;

(7)热页迁页完成后,继续回到性能检测模块监测系统的性能。

有鉴于现有多核系统的现有缺陷,本发明提供一种在NUIOA架构下基于虚拟化环境的高吞吐量低延迟的实时放置调度策略,从而提高虚拟机里面运行的应用程序的性能,如图3所示,主要构造了三个模块,性能检测模块负责收集虚拟机和物理机里面的一些硬件信息,比如页的访问次数,I/O请求次数和物理机的实时负载情况,线程绑定模块主要负责根据收集的硬件信息进行高负载环境下的线程绑定,内存迁移模块主要负责基于低负载情况下的内存迁移。进一步阐述如下:

性能检测模块通过修改的性能监测工具实时监控虚拟机和物理主机的硬件信息,主要包括虚拟机里的应用程序访问页的次数和I/O请求次数,物理主机里面实时负载情况等等。

线程绑定模块根据性能检测模块收集到的硬件信息,判定当前系统处于低负载还是高负载,如果处于高负载情况下,就需要将负载比较高的节点上的虚拟机线程绑定到另外的节点上,从而降低负载。

内存迁移模块,如果当前系统处于比较低的负载的情况下,就可以将相关的线程迁移到距离网络适配器最近的节点上,从而避免过多的远程访问,降低节点间的内连的带宽占用,提升系统的吞吐量。

本发明所述的访问系统和优化方法和现有的基于NUMA架构的建模方法相比具有以下几点优点:

(1)考虑了网络适配器的和处理器节点的亲和性,在传统的建模方法上添加了一个维度,系统更加能够反映出当今高性能网络环境下的网络设备的重要性;

(2)同时考虑了虚拟机多VCPU线程之间的亲和性,将亲和度比较高的线程放置到相同节点上来减小跨节点间的数据通信;

(3)采用了更加细粒度的建模矩阵,建立了访问延迟矩阵和线程内存映射矩阵来进行最后的放置调度决策,细粒度能够更加全面的体现出建模的准确性。

以下将结合附图对本发明的构思、具体结构及产生的技术效果作进一步说明,以充分地了解本发明的目的、特征和效果。

附图说明

图1是传统的非一致性I/O访问架构示意图;

图2是传统的没有考虑网卡要素的远程访问示意图;

图3是本发明的一个较佳实施例的系统架构图;

图4是本发明的一个较佳实施例的优化方法流程图。

具体实施方式

下面结合附图对本发明的实施例作详细说明,本实施例在以本发明技术方案为前提下进行实施,以下给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。

如图4所示,本发明所述的基于虚拟化多核环境下非一致性I/O访问的系统优化方法包括以下步骤:

步骤1、通过性能监测模块同时监视虚拟机内部页的访问次数和单位时间内I/O请求的次数。通过一个数组来记录每个节点访问的页的次数,单位时间类的I/O请求次数可以直接获得。同时也实时监控物理主机里面的负载,主要是CPU的负载和内存的负载。

步骤2、当物理机的某个节点负载高于某个阈值时(该阈值与系统的配置相关),表明该节点需要进行线程的迁移,具体的迁移方法通过一个公式来表示:

<mrow> <mfrac> <mrow> <mi>T</mi> <mi>M</mi> <mi>T</mi> <mo>&lsqb;</mo> <mi>T</mi> <mo>&rsqb;</mo> <mo>&lsqb;</mo> <mi>k</mi> <mo>&rsqb;</mo> </mrow> <mrow> <munderover> <mo>&Sigma;</mo> <mrow> <mi>j</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>n</mi> </munderover> <mi>T</mi> <mi>M</mi> <mi>T</mi> <mo>&lsqb;</mo> <mi>T</mi> <mo>&rsqb;</mo> <mo>&lsqb;</mo> <mi>j</mi> <mo>&rsqb;</mo> </mrow> </mfrac> <mi>D</mi> <mi>T</mi> <mo>&lsqb;</mo> <mi>T</mi> <mo>&rsqb;</mo> <mo>&lsqb;</mo> <mi>k</mi> <mo>&rsqb;</mo> <mo>&le;</mo> <mfrac> <mrow> <mi>T</mi> <mi>M</mi> <mi>T</mi> <mo>&lsqb;</mo> <mi>T</mi> <mo>&rsqb;</mo> <mo>&lsqb;</mo> <mi>p</mi> <mo>&rsqb;</mo> </mrow> <mrow> <munderover> <mo>&Sigma;</mo> <mrow> <mi>j</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>n</mi> </munderover> <mi>T</mi> <mi>M</mi> <mi>T</mi> <mo>&lsqb;</mo> <mi>T</mi> <mo>&rsqb;</mo> <mo>&lsqb;</mo> <mi>j</mi> <mo>&rsqb;</mo> </mrow> </mfrac> <mi>D</mi> <mi>T</mi> <mo>&lsqb;</mo> <mi>T</mi> <mo>&rsqb;</mo> <mo>&lsqb;</mo> <mi>p</mi> <mo>&rsqb;</mo> </mrow>

TMT矩阵表示线程的存储分布,DT矩阵表示节点间的访问延迟,将线程T迁移到节点K上而不是迁移到节点P上的标准是到节点K的平均延迟小于到节点P的平均访问延迟。

步骤3、当物理机的某个节点负载在正常范围内时(该阈值与系统的配置相关),就要尽可能的将分布在远程节点上的该线程的访问热页迁移到本地节点上,可以利用numactl API进行迁页,热页的判定采用以下公式:

if NodeAcc[n][i]>2*NodeAcc[n][j]

NodeAcc[n][i]表示节点n访问page i的次数,公式表明最大的节点页访问次数大于第二大的两倍就认为之前的页都是热页。然后将虚拟机里的热页的地址转换为物理机的物理地址之后,的迁页模块调用函数move_pages,将应用程序的热页迁移到对目标节点上。热页迁页完成后,继续回到性能检测模块监测系统的性能。

以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术无需创造性劳动就可以根据本发明的构思作出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1