首页> 中国专利> 基于硬件计数器虚拟化的多虚拟机性能分析方法

基于硬件计数器虚拟化的多虚拟机性能分析方法

摘要

本发明公开了一种基于硬件计数器虚拟化的多虚拟机性能分析方法。当多个虚拟机同时进行性能分析并需要占用硬件计数器时,若多个虚拟机分析的CPU事件总数超过硬件计数器的数量时,会对硬件计数器进行虚拟化以满足要求,否则不对其进行虚拟化。在Xen虚拟机管理器层次通过一个采样机制来获取采样信息,并将这些信息分发到与各个虚拟机对应的缓冲区,再由虚拟机用户层程序进行分析处理,从而得到相应的分析结果及详细的性能信息。本发明采用后台守护进程监听各个虚拟机启动或停止性能分析的请求,使用Xenstore作为各虚拟机之间的消息传递机制,采用分时复用技术来实现硬件计数器的虚拟化,为虚拟环境下的程序性能分析提供了便利,并且较好地保证了分析的精确度。

著录项

  • 公开/公告号CN102073535A

    专利类型发明专利

  • 公开/公告日2011-05-25

    原文格式PDF

  • 申请/专利权人 华中科技大学;

    申请/专利号CN201110004407.8

  • 发明设计人 金海;袁平鹏;谢夏;蒋海鸥;

    申请日2011-01-11

  • 分类号G06F9/455(20060101);G06F11/36(20060101);

  • 代理机构42201 华中科技大学专利中心;

  • 代理人曹葆青

  • 地址 430074 湖北省武汉市洪山区珞喻路1037号

  • 入库时间 2023-12-18 02:39:01

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2013-09-18

    授权

    授权

  • 2011-07-06

    实质审查的生效 IPC(主分类):G06F9/455 申请日:20110111

    实质审查的生效

  • 2011-05-25

    公开

    公开

说明书

技术领域

本发明属于计算系统虚拟化性能分析领域,具体涉及一个基于硬件计数器虚拟化的多虚拟机性能分析方法,它能够让多个虚拟机独立地进行性能分析。

背景技术

虚拟化技术允许单一物理计算机同时运行多个虚拟机,每一虚拟机上运行自己的操作系统,使得应用程序可以在相互独立的空间内运行而互不影响。因此,虚拟化技术显著提高了软硬件资源的利用率,提高了管理效率,从而节约大量的成本。现在,虚拟化技术得到了许多公司的广泛关注。据权威研究机构预计,2012年全球将有超过一半的工作负载被虚拟化。

虚拟化技术的广泛应用引发了对虚拟化环境下性能分析工具的需求。如不同虚拟机里的用户(如开发人员等)需了解运行在该虚拟机的程序的性能问题,以便优化程序性能及运行环境配置。这都需要对程序运行状态进行采样。一种性能分析方法是基于硬件计数器技术。它需要在程序执行过程中,对相应的CPU事件进行统计来分析程序性能。

但硬件计数器是一种专用的寄存器,每个CPU上的硬件计数器数量有限。因此,对于基于硬件计数器的性能分析工具,一次能同时分析的CPU事件有限,而且现有的性能分析工具不能在不同的虚拟机里同时分析不同的事件。因此,不能满足虚拟化环境下多用户在不同虚拟机同时使用的需要。基于以上问题,本发明提出了一种基于硬件计数器虚拟化技术的多虚拟机性能分析方法,以解决在不同虚拟机里同时分析不同CPU事件的问题。

发明内容

本发明的目的是提供一种基于硬件计数器虚拟化的多虚拟机性能分析方法,该方法为虚拟环境下的程序性能分析提供很大的便利,并且能较好地保证性能分析的精确度。

本发明提供的一种基于硬件计数器虚拟化的多虚拟机性能分析方法,其特征在于,该方法包括下述步骤:

第1步在特权虚拟机和各客户虚拟机里均运行一个后台守护进程,用于监听用户启动、停止性能分析请求;

第2步设置待性能分析的虚拟机要分析的CPU事件信息,包括CPU事件类型、采样频率、单元掩码、是否分析内核层和是否分析用户层;

第3步判断单个待性能分析的虚拟机分析的CPU事件数量是否超过硬件计数器的数量,如果是,则提示用户分析的事件过多,回到第2步;否则进入第4步;

第4步待性能分析的虚拟机向特权虚拟机发出一个启动信号,将CPU事件信息写入Xen的一个结构体中;

第5步判断所有待性能分析的虚拟机分析的CPU事件总数是否超过硬件计数器的数量,如果是,通过硬件计数器虚拟化技术来分时复用硬件计数器,进入第6步;否则,不需要对硬件计数器进行虚拟化,转入第7步;

第6步内核层对硬件计数器进行虚拟化,以实现硬件计数器的分时复用;当硬件计数器统计的CPU事件发生次数达到采样频率时,硬件计数器产生一个中断,内核层开始采样,记录当前程序计数器的值,保存到对应的缓冲区,并将程序计数器的值转化为有用信息;

第7步重复第6步,直至接收到停止性能分析的信号;

第8步已启动性能分析的虚拟机停止性能分析,并向特权虚拟机发出一个停止信号,从而将Xen中存储该虚拟机CPU事件信息的结构体内容清除;

第9步各虚拟机接收到缓冲区的数据后,对这些数据进行分析处理,从而为用户提供性能信息;

第10步用户对得到的性能信息进行展现。

目前应用在主流的虚拟化管理软件里的性能分析工具不能让多用户在不同的虚拟机下同时进行分析,而这一想法的实现将为虚拟化环境下的程序性能分析提供很大的便利。同时,分时复用的硬件计数器虚拟化实现方式,能较好地保证分析的精确度。本发明的工作原理是:当多个虚拟机同时进行性能分析并需要占用硬件计数器时,若多个虚拟机分析的CPU事件总数超过硬件计数器的数量时,会对硬件计数器进行虚拟化以满足要求,否则不对其进行虚拟化。在Xen虚拟机管理器层次通过一个采样机制来获取采样信息(当硬件计数器的计数达到CPU事件的采样频率时,记录当前程序计数器的值),并将这些信息分发到与各个虚拟机对应的缓冲区,最后再由虚拟机用户层程序进行分析处理,从而得到相应的分析结果及详细的性能信息。

本发明主要有三个关键问题:一是多个虚拟机之间后台监听和消息传递机制的实现;二是如何实现硬件计数器的虚拟化;三是如何降低其开销对性能分析精度的影响。具体而言,本发明具有以下技术特点:

(1)本发明采用后台守护进程监听各个虚拟机启动或停止性能分析的请求,使用Xenstore作为多个虚拟机之间的消息传递机制;

(2)采用分时复用技术来实现硬件计数器的虚拟化。当一个虚拟CPU(即VCPU,在Xen虚拟化环境下,由于虚拟机不再运行在最高特权级,所以不能够直接对物理CPU进行调度,为此,Xen建立了虚拟CPU结构,为每个虚拟机提供一个或多个这样的虚拟CPU结构,这样,虚拟机就可以对这些虚拟CPU进行调度)被调度出去后,对该虚拟CPU对应虚拟机的各CPU事件所在的硬件计数器的值进行保存;在重新读取另一个虚拟CPU的事件配置信息并设置硬件计数器后再调度执行该虚拟CPU。通过这种分时的方式来实现对硬件计数器的复用(一个虚拟机可能有多个虚拟CPU,但是一个虚拟CPU只能属于一个虚拟机,各虚拟机的调度执行实际上是虚拟CPU的调度执行);

(3)为了降低其开销对性能分析精度的影响,将对硬件计数器的读写操作放入虚拟机管理器的时间片,从而减小硬件计数器的读写对虚拟机性能分析的干扰;

(4)在启动性能分析时,首先会进行判断,当多个虚拟机里的用户同时分析的事件完全相同时,就不对硬件计数器进行虚拟化,否则就对其进行分时复用。当多用户进行性能分析时,都需要在自己所在的虚拟机里首先设置要分析的CPU事件类型及采样频率等配置信息,然后启动性能分析即可。通过硬件计数器的虚拟化,即使在多用户同时进行性能分析的环境下,用户仍感觉自己在独立地占有资源。

附图说明

图1为本发明的体系结构图;

图2为本发明的整体流程图;

图3为本发明实现硬件计数器虚拟化的结构图;

图4为本发明降低开销对性能分析精度影响的结构图。

具体实施方式

下面结合附图和实例对本发明进行详细说明。

本发明的目的在于研究一种基于硬件计数器虚拟化技术的多虚拟机性能分析方法,使它们能同时独立地分析多个不同的事件,本发明的主要步骤包括:

(1)在各个虚拟机里运行后台守护进程来监听启动或停止性能分析的请求,使用Xenstore作为多个虚拟机之间的消息传递机制;

(2)在Xen中用一个结构体来保存虚拟机的CPU事件信息,从而能让多个虚拟机同时启动性能分析;

(3)通过对硬件计数器虚拟化来实现各个虚拟机对硬件计数器的分时复用,从而能让它们同时独立地分析不同的事件;

(4)为了降低开销对性能分析精度的影响,将对硬件计数器的读写操作放入虚拟机管理器的时间片,从而减小硬件计数器的读写对虚拟机性能分析的干扰。

该发明的体系结构如图1所示,主要由内核层(包括Xen内核和Linux内核)和用户层两部分构成。核心处理主要集中在内核层,包括设置硬件计数器、硬件计数器虚拟化、采样等处理,而用户层程序则运行在各个虚拟机的用户空间,主要用来对来自缓冲区的采样数据进行分析和处理,并将其对应到相应的函数和程序段,从而将最终的性能分析信息清晰地展现在用户面前。

本发明的流程如图2所示,具体步骤如下所示:

(1)在特权虚拟机和各客户虚拟机里都运行一个后台守护进程来监听用户启动、停止性能分析等请求。

用户启动、停止性能分析的请求采用Xenstore来传送,特权虚拟机和客户虚拟机的具体过程不同。如果用户在特权虚拟机,进入步骤(1.1),否则进入步骤(1.2):

(1.1)特权虚拟机启动、停止性能分析

当特权虚拟机里的用户发出启动性能分析的请求后,会通过Xenstore传送给特权虚拟机运行的后台守护进程,通知后台守护进程启动性能分析,成功后会启动相应的用户线程;当特权虚拟机里的用户发出停止性能分析的请求后,会通过Xenstore传送给特权虚拟机运行的后台守护进程,通知后台守护进程停止性能分析,并停止相应的用户线程;

(1.2)客户虚拟机启动、停止性能分析

当客户虚拟机里的用户发出启动性能分析的请求后,会通过Xenstore传送给特权虚拟机运行的后台守护进程,通知后台守护进程启动性能分析,成功后特权虚拟机会通过Xenstore通知客户虚拟机启动相应的用户线程;当特权虚拟机里的用户发出停止性能分析的请求后,会通过Xenstore传送给特权虚拟机运行的后台守护进程,通知后台守护进程停止性能分析,并通过Xenstore通知客户虚拟机停止相应的用户线程。

(2)设置要分析的CPU事件信息。

CPU事件信息包括CPU事件类型、采样频率、单元掩码、是否分析内核层、是否分析用户层,该步骤主要是设置这些CPU事件信息。如设置为CPU_CLK_UNHALTED:8000:0:1:1,则表示CPU事件类型为CPU_CLK_UNHALTED,采样频率为8000(即事件发生8000次采一次样;为减小性能误差,每个CPU事件的采样频率有个最小值,在不同的CPU类型上该最小值可能不同,具体的采样频率可根据要分析的程序中该CPU事件的发生次数决定),单元掩码为0(一个CPU事件的单元掩码用于设置要计数的子事件,一般用十六进制表示,0就是十六进制中的0x00,在该CPU事件中,0x00表示未停止的CPU核心的周期,0x01表示未停止的总线周期),第1个1分别表示对该CPU事件在内核空间的发生次数进行统计(该值可选0或1),第2个1分别表示对该CPU事件在用户空间的发生次数进行统计(该值可选0或1)。

(3)判断该虚拟机分析的CPU事件数量是否超过硬件计数器的数量,如果是,则提示用户分析的事件过多,让其重新设置要分析的CPU事件,回到步骤(2);否则进入步骤(4)。

(4)启动性能分析:向特权虚拟机发出一个启动信号,从而将CPU事件信息写入Xen中。

启动性能分析的具体过程为:

在Xen中用一个结构体来保存各虚拟机要分析的CPU事件。当虚拟机的用户输入要分析的CPU事件信息并启动性能分析后,会通过一个系统调用和一个超级调用将CPU事件信息写到Xen的这个结构体中,并将该结构体的内容赋给与该虚拟机对应的虚拟CPU。这样,以后每次虚拟CPU调度就通过读取该结构体的内容来获取与该虚拟机对应的CPU事件信息。

(5)如果各虚拟机分析的CPU事件总数超过硬件计数器的数量,则通过硬件计数器虚拟化技术来分时复用硬件计数器,进入步骤(6);如果各虚拟机分析的CPU事件总数并未超过硬件计数器的数量,则不需要对硬件计数器进行虚拟化,转入步骤(7)。

(6)对硬件计数器进行虚拟化来实现硬件计数器的分时复用,在每次虚拟CPU调度时做相应的处理;当硬件计数器统计的CPU事件发生次数达到采样频率时,内核层开始采样工作,并把采样数据转化为有用数据。

每次虚拟CPU调度时都做如下处理,如图3所示:

(6.1)当一个虚拟机的虚拟CPU执行完被调度出去、另一个虚拟CPU被调度进来即将执行时,判断两个虚拟CPU是否属于同一个虚拟机,如果是,则本次虚拟CPU调度不对硬件计数器进行读写操作,如果否,就进入(6.2)步骤。

(6.2)读取前一个虚拟CPU对应虚拟机的各CPU事件所对应的硬件计数器的当前统计次数,并保存起来;

(6.3)读取后一个虚拟CPU对应的CPU事件信息,同时读取后一个虚拟CPU对应虚拟机上次执行完时保存的各CPU事件的统计次数,并对相应的硬件计数器进行重新设置。在安腾2处理器中,硬件计数器由性能监控控制(PMC)寄存器和性能监控数据(PMD)寄存器两部分组成,性能监控控制寄存器用来选择要分析的CPU事件,而性能监控数据寄存器用来决定CPU事件的采样频率。所以,安腾2处理器中硬件计数器的设置包括两部分,即性能监控控制寄存器的设置和性能监控数据寄存器的设置。

内核层的采样过程为:

当硬件计数器统计的CPU事件发生次数达到采样频率时,会产生一个中断,记录当前程序计数器的值,并保存到对应的缓冲区(每个虚拟CPU有一个缓冲区对应)中,同时重置对该CPU事件的计数,最后会把事件缓冲区的数据交给相应虚拟机的用户层程序进行处理。

将程序计数器的值转化成有用信息的过程如下所示:

用一个目录缓存来保存目录标识和二进制镜像文件名的映射,使用目录标识作为内核空间和用户空间数据的传递。当一个样本(程序计数器的值)进入虚拟CPU的缓冲区后,查找该进程的映射列表,当找到包含该程序计数器值的映射后,在目录缓存中查找映射文件的目录项,从而得到一个能唯一标识该映射文件的目录标识,把目录标识存入事件缓冲区。这样就把程序计数器值转化成了一个静态的偏移值,以方便后面被用户线程处理。

(7)重复第6步,直至接收到停止性能分析的信号。

(8)虚拟机的用户停止性能分析,并向特权虚拟机发出一个停止信号,从而将Xen中存储该虚拟机CPU事件信息的结构体内容清除。

(9)各虚拟机接收到缓冲区的数据后,对这些数据进行分析处理,从而为用户提供性能信息(主要包括各种函数标识、对应的统计次数以及经过进一步计算得到的百分比等详细信息)。

用户层的处理过程如下所示:

每当事件缓冲区的剩余空间小于一个定值(把这个定值定义为一个宏,可以根据自己的需要修改这个宏,该值的大小在0和缓冲区大小之间)时,相应的后台守护进程读取事件缓冲区的数据,并写入磁盘的样本文件。样本文件通过mmap()函数映射到用户层的地址空间,用户层首先处理二进制映像(从二进制映像中提取出各种标识和符号),然后处理样本文件(解析之前生成的样本文件,提取出分类数据并进行计算,用一个特定的数据结构来保存所有的处理结果),最后以前两步的结果为基础,生成相应的性能信息。

(10)用户对得到的性能信息进行展现,如显示所有函数的CPU事件发生次数、显示CPU事件发生次数最多的函数详细信息等。

在实现对硬件计数器的分时复用时,为了降低其开销对性能分析精度的影响,将对硬件计数器的读写操作放入虚拟机管理器的时间片,从而减小硬件计数器的读写对虚拟机性能分析的干扰,过程如图4所示。

以上所述,仅为本发明最佳的具体实现方式,本发明的实现方法并不局限于此,任何在本发明领域内不脱离本发明精神下的改变,都应涵盖在本发明范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号