基于虚拟机的多核处理器的资源监控方法及系统的制作方法

文档序号:6471247阅读:165来源:国知局
专利名称:基于虚拟机的多核处理器的资源监控方法及系统的制作方法
技术领域
本发明涉及计算机科学中的多核处理器以及虚拟机领域,特别是基于虚拟机的多核处理 器资源监控方法及系统。
技术背景系统资源监控器是通过收集操作系统资源的使用信息并加以处理,将系统的当前资源使 用状态以图形化方式展示给用户。从而让用户根据当前系统的资源使用情况进行后续的系统 操作。根据用户需求的不同,不同的系统监控器关注的系统资源不同。目前主要流行的系统 监控器有(1) windows任务管理器运行在windows平台上的主流系统监控器,能够图形化显示CPU的使用记录和页面文 件使用记录,能够査看应用程序状态,能够査看当前运行进程名称、进程所属用户、 进程内存占用情况以及CPU占用率,可以实时监控网络负载等。(2) CPU-Z一款家喻户晓的CPU检测软件,它能够鉴定处理器的类别及名称,探测CPU的核心频 率以及倍频指数,探测处理器的核心电压,超频可能性探测(指出CPU是否被超过频, 不过并一定完全正确),探测处理器所支持的指令集,探测处理器一、二级缓存信息, 包括缓存位置、大小、速度等。探测主板部分信息,包括BI0S种类、芯片组类型、内 存容量、AGP接口信息等。(3) Gnome system monitor运行在Linux平台上的主流系统监控器,它能够图形化显示多核处理器系统中每个核 的使用记录、内存使用和交换记录以及网络使用记录,还能监控系统当前所有进程信 息,包括进程名称、进程所属用户、进程状态、CPU使用率、CPU时间、进程NICE值、 进程I/O以及进程内存使用等。这些系统监控器能够很好的监控系统资源的使用情况,能够满足普通用户的多数需求。 但由于缺乏对多核处理器资源的监控(虽然gnome system monitor支持对多核处理器的监控, 但是也仅限于对多核处理器的每个核的使用率进行监控),尤其缺乏的是基于虚拟机的多核处 理器资源的监控。虚拟机可以虚拟多个CPU供客户操作系统使用,对于虚拟机将虚拟CPU 和多核处理器的核进行映射,这个过程对宿主机而言是透明的。因此,本发明针对目前缺乏对基于虚拟机的多核处理器资源监控的支持,发明了一种基于虚拟机的多核处理器资源监控方法和系统。发明内容本发明涵盖一般监控器的功能外,重点以监控基于虚拟机的多核处理器系统中多核处理 器资源为目标,设计并实现了基于虚拟机的多核处理器资源监控方法和系统。1. 为了越过用户态进程无法访问内核数据结构的限制,本发明在Linux内核中加入宿主 机处理器资源采集模块,通过该模块读取操作系统为多核处理器每个内核维护的可执行进程 队列runqueue,将该队列上每个进程的进程描述符PID存入自定义的CPU—CORE结构中, 然后通过Linux特有的netlink socket机制将CPU—CORE结构传递给处于用户态的监控程序。 用户态的监控程序可以根据CPU—CORE中的PID在操作系统中的/proc目录下査询相应的进 程信息描述文件,以此还原出多核处理器的每个CPU内核上正在执行和等待执行的进程信 息。本发明同时还将以PROC伪文件系统为桥梁,获取系统其他资源利用信息如多核处理器的 每个CPU核的使用记录、内存使用情况等信息。资源监控主模块在获取了系统(宿主系统) 的全面资源使用信息后,对获取的信息进行加工处理,并以图形化方式展现给用户。2. 通过虚拟机进程跟踪模块将Hypervisor和资源监控主模块进行通信,从而能在宿主机 上监视和控制虚拟机上的客户操作系统上的进程。为了能在宿主机上监视虚拟机上的客户操 作系统上的进程,可以从VMM (Virtual Machine Monitor)中根据截获的硬件访问信息和客 户操作系统的进程管理信息,在系统运行时自动识别在客户操作系统中运行的进程,不需要 对客户操作系统做任何修改或者安装任何软件,从而将VMM的监控粒度从系统级别提高到 进程级别。为了可以在宿主机上对虚拟机上客户操作系统中的进程进行控制,从VMM中模 拟客户操作系统发送信号给目标进程,目标进程接收到该信号既可以进行对应的操作。在一 般的过程中,每个信号的执行过程中信号执行分两个阶段,产生信号和传递信号。在产生信 号阶段,用户或者程序利用系统调用sys—signal在目标进程的描述结构task—struct中设置涉及 到信号的域,以表示信号已到。在传递信号阶段,内核会通过检查目标进程的描述结构中涉 及信号的域得知其是否有未处理信号,如果存在这样的未处理信号,则执行对应的信号处理 程序。为了达到在VMM中控制客户操作系统中用户进程的目的,可以用VMM代替用户或 者程序向目标进程产生信号。本发明提供了一种基于虚拟机的多核处理器的资源监控系统,该系统设置在宿主机上, 用于监控宿主机上的多核处理器的资源使用状态并将其提供给用户,每台安装有多核处理器 的宿主机上可以同时运行多个虚拟机,每个虚拟机内独立运行一个客户操作系统,其特征在于,该系统包括资源监控主模块、虚拟机进程跟踪模块、宿主机处理器资源采集模块,其中资源监控主模块创建一个守护进程,周期性的访问宿主机处理器资源釆集模块和虚拟机 进程跟踪模块,获取宿主机的多核处理器运行状态和虚拟机上的客户操作系统的进程信息, 并将这些信息进行汇总和分析,客户操作系统上执行进程的CPU是虚拟机提供的VCPU (虚拟CPU),上述的获取宿主机的多核处理器运行状态和虚拟机上的客户操作系统的进程信息,并 将这些信息进行汇总和分析包括根据宿主机上多核处理器的每个内核的进程运行队列中VCPU的信息和客户操作系统上的进程的执行状态,得出客户操作系统的进程在宿主机上的实际执 行位置及状态,进而分析得到宿主机上的多核处理器为每个虚拟机中的客户操作系统提供的计算资源和虚拟机对多核处理器的资源利用率,并将分析的结果显示给用户;当虚拟机和客户操作系统启动时,虚拟机进程跟踪模块通过从虚拟机管理器中截获的硬 件访问信息和客户操作系统的进程管理信息,自动识别在客户操作系统中运行的进程,进而 得到客户操作系统进程的运行信息,虚拟机进程跟踪模块周期性的采集客户操作系统中的进程信息并将结果保存到一个文本文件中,供资源监控主模块读取;宿主机处理器资源采集模块是Linux内核模块,该模块工作在内核态,将宿主机处理器资 源采集模块加载到宿主机操作系统内核中,该模块根据资源监控主模块发送的指令对宿主机 的多核处理器资源信息进行采集,并将这些信息传递给资源监控主模块。本发明也提供了一种基于虚拟机的多核处理器的资源监控方法,该方法用于监控宿主机 上的多核处理器的资源使用状态并将其提供给用户,每台安装有多核处理器的宿主机上可以 同时运行多个虚拟机,每个虚拟机内独立运行一个客户操作系统,其特征在于该方法包括以 下步骤在宿主机工作之前,将宿主机处理器资源采集模块加载到宿主机操作系统内核中,宿主 机处理器资源采集模块是Linux内核模块,该模块运行在宿主机上且工作在内核态,在宿主 机开始工作时,宿主机处理器资源采集模块根据资源监控主模块发送的指令对宿主机的多核 处理器资源信息进行采集,并将这些信息传递给资源监控主模块;当虚拟机和客户操作系统启动时,虚拟机进程跟踪模块开始工作,虚拟机进程跟踪模块 设置在宿主机上,该模块通过从虚拟机管理器中截获的硬件访问信息和客户操作系统的进程 管理信息,自动识别在客户操作系统中运行的进程,进而得到客户操作系统进程的运行信息, 虚拟机进程跟踪模块周期性的采集客户操作系统中的进程信息并将结果保存到一个文本文件 中,供资源监控主模块读取;启动资源监控主模块,资源监控主模块运行在宿主机操作系统上,其创建一个守护进程,周期性的访问宿主机处理器资源采集模块和虚拟机进程跟踪模块,获取宿主机的多核处理器 运行状态和虚拟机上的客户操作系统的进程信息,并将这些信息进行汇总和分析;客户操作 系统上执行进程的CPU是虚拟机提供的VCPU (虚拟CPU),上述的获取宿主机的多核处理器运 行状态和虚拟机上的客户操作系统的进程信息,并将这些信息进行汇总和分析包括根据宿主 机上多核处理器的每个内核的进程运行队列中VCPU的信息和客户操作系统上的进程的执行 状态,得出客户操作系统的进程在宿主机上实际由哪个CPU内核执行及该进程的执行状态, 进而分析得到宿主机上的多核处理器为每个虚拟机中的客户操作系统提供的计算资源和虚拟 机对多核处理器的资源利用率,并将分析的结果显示给用户。与现有技术相比较,本发明的创新之处在于能对多核处理器系统中的多核处理器资源 进行全面的监控,能对基于虚拟机的多核处理器系统中的客户操作系统资源进行监控。具体 体现在1. 本发明中,通过在Linux内核中添加宿主机处理器资源采集模块,收集多核处理器的 使用情况,具体包括多核处理器的每个核上的运行进程的具体信息、以及每个核的使用记录。2. 本发明中,可以对基于虚拟机的多核处理器系统上的客户操作系统资源进行监控,具 体表现为可以监视虚拟机中虚拟CPU的个数,监视虚拟机上客户操作系统中的进程信息,以 及控制虚拟机上客户操作系统中的进程。


图1基于虚拟机的多核处理器资源监控体系结构图2宿主机处理器资源采集模块工作原理图3 /proc伪文件系统结构4进程描述符定位示意图 图5 VMM信号传递示意图具体实施方式
参考说明书附图1,本发明主要监控两部分内容基于PROC伪文件系统以及在内核中加入宿主机处理器资源采集模块监控宿主机系统资源、通过在VMM中加入进程跟踪模块监 控运行在虚拟机上的客户操作系统中的进程信息。 监控宿主机系统资源如图2所示,编写宿主机处理器资源采集模块包括对多核处理器每个内核信息的读取函 数,如读取CPU内核的运行队列。读取每个CPU内核的运行队列可以通过宏tWs一rqO和宏 cpu—rq(n)来实现,宏this一rq()用来返回当前处理器的可执行队列的地址,宏cpu—rq(n)用来返回给定编号的处理器可执行队列的指针。由于/proc中已经保存了操作系统中各个进程的状态 信息,为了减少信息传递量,在获取每个CPU内核的运行队列时只保存了运行队列上每个进 程的PID,当监控程序需要某个进程的具体信息时可以根据PID到/proc下査询。如图2所示,为了实现宿主机处理器资源采集模块与用户态监控程序的通信,本发明使 用了软中断的方式实现宿主机处理器资源采集模块与用户态进程的通信。当宿主机处理器资 源采集模块接收用户空间传递的数据时并没有使用常见的内核守护线程,而是通过一个软中 断来调用一个指定的接收函数kernel—receive()来接收用户态的监控程序发送的查询命令,由 该接收函数负责接收资源监控主模块发送的查询指令和资源监控主模块的进程描述符,宿主 机处理器资源采集模块读取宿主机操作系统内核中每个CPU内核的本地运行队列,记录下运 行队列上包括虚拟机VCPU在内的所有可执行进程的进程描述符,然后把这些信息传递给资源 监控主模块。这样不仅可以保证数据的实时性接收,还避免了内核守护线程和其他的用户态 进程竞争CPU资源,提高了效率。数据传输使用了 Linux特有的netlink套接字,在通讯过程 中,以双方进程的PID为通信依据,当通信的一端处于中断过程时,设其PID为0。对于用 户进程,可使用标准的socket APIs,如socket(), bind(), sendmsg(), recvmsg()和close()方等法 建立用户态进程与系统内核之间的全双工通讯通道;而对于宿主机处理器资源采集模块,则 需要使用一些特殊的API创建并使用netlink socket。在通过宿主机处理器资源采集模块收集多核处理器信息的同时,本发明还基于Linux下 的/proc伪文件系统进行系统的其他资源信息的收集。如图3所示,可以通过查询proc下包含 的loadavg、 meminfo、 stat、 uptime、 version文件,以及针对每个进程有以进程PID为名的文 件夹获取宿主系统的其他系统信息,通过loadavg可以得到通过计算过去1分钟,5分钟,15 分钟里运行队列中的平均任务数以及正在运行的任务数和总任务数;通过meminfo获取系统 中空闲内存,己用物理内存和交换内存的总量以及内核使用的共享内存和缓冲区总量信息; 通过stat获取CPU利用率,磁盘,内存页,内存对换,全部中断,接触开关及上次自举时间; 通过uptime得到自从上次系统自举以来的秒数,及其中有多少秒处于空闲,这两个数字能够 从宏观上得出CPU周期浪费的比例;通过version 了解正在运行的内核版本信息;通过PID 文件下的stat文件可以了解每个进程的相关信息如进程状态、进程名称等。所有收集到的资 源信息都将传输给资源监控主模块,资源监控主模块将基于这些信息进行数据加工,形成友 好的具体的数据展现给用户。监控VMM上运行的客户操作系统中的资源编写虚拟机进程跟踪模块,使其和宿主机上的虚拟机管理器协同工作,该模块根据从 VMM( Virtual Machine Monitor)中根据截获的硬件访问信息和客户操作系统的进程管理信息,可以在系统运行时自动识别在客户操作系统中运行的进程,不需要对客户操作系统做任何修 改或者安装任何软件,可以将VMM的监控粒度从系统级别提高到进程级别。这里提到的 VMM可以是诸如KVM, Xen,或Lguest等现有技术中所熟知的虚拟机管理器。当把hit指令配置成陷入条件后,VMM就会利用客户操作系统执行idle进程时循环调用 hlt指令的时间来估计客户操作系统的负载。当客户操作系统作进程切换时,进程调度器将访 问特权寄存器CR3载入新进程的页表基地址,这样的动作会在支持Intel-VT技术的多核处理 器环境下造成一个由非根环境到根环境的切换,即vmexit。 VMM会利用这个切换时的陷入 时机和所带硬件信息建立并维护一个客户操作系统进程踪迹表。这是一个名为GPTR的多维 向量,其中包含两个信息,客户操作系统的进程页目录地址PPDA,和客户操作系统进程的 名字或标识符PID。 PPDA的值可以从多核处理器的特权寄存器CR3中获取,进程的PID可 以从客户操作系统的进程描述结构task—struct中获得。有了GPTR向量,就可以在运行时识别客户操作系统的运行进程。用被VMM捕获的客 户操作系统当前进程的PPDA作为键值,在GPTR的PPDA记录向量里进行匹配査询,从返 回的结果即可以识别客户操作系统中具体在实际运行的进程。值得注意的是,寻找客户操作 系统进程描述结构的方法需要根据实际使用的操作系统而定。在Linux操作系统中,根据内 核堆栈的编译选项,当前进程描述符号的索引和内核堆栈连续存放于2页或1页内,由于内 核堆栈指针ESP在访问CR3产生的陷入也会被VMM获得,所以通过分析内核堆栈指针就可 以定位进程描述结构在内存中的位置,从而解析出该进程描述结构中存储的相关信息,进而 获得虚拟机上的客户操作系统的进程运行状态。虚拟机进程跟踪模块周期性的采集客户操作 系统中的进程信息并将结果存到一个文本文件中,供资源监控主模块读取,优选的该文件是 只有root用户才可访问的文本文件。具体过程见图4所示。当客户操作系统为Linux且宿主机运行在支持Intel-VT的多核处理器上时,釆用以下步 骤完成客户操作系统进程的识别①VMM捕获客户操作系统在做进程切换时,Intel-VT产生 的由非根环境到根环境的切换,即vmexit;②VMM读取客户操作系统的内核堆栈指针ESP; ③将ESP指向的地址和0xfflfe000做与操作,得到当前进程描述结构的首地址;(D分析当前 进程描述结构,得到进程描述符PID;⑤将上一次读取的保存在特权寄存器CR3中的待运行 进程的页表基地址和本次获得的当前进程的PID作为键值对,保存到GPTR多维向量中。在控制客户操作系统中的进程时,虚拟机进程监控模块从VMM中模拟客户操作系统发 送信号给目标进程,目标进程接收到该信号即可以进行对应的操作。在一般的过程中,每个 信号的执行过程中信号执行分两个阶段,产生信号和传递信号。在产生信号阶段,用户或者 程序利用系统调用sys—signal在目标进程的描述结构task—struct中设置涉及到信号的域,以表示信号己到。在传递信号阶段,内核会通过检査目标进程的描述符中涉及信号的域得知其是 否有未处理信号,如果存在这样的未处理信号,则执行对应的信号处理程序。为了达到在VMM 中控制客户操作系统中用户进程的目的,可以用VMM代替用户或者程序向目标进程产生信号。具体实现如下>在VMM中执行第一步产生信号的过程,为客户操作系统的目标进程的描述符中和信 号相关联的pending域中的SIGNAL标识置位,按照相应的信号的序号SIG—ID,通 过以下语句完成置位-set.sig[OS/G—- 1) / 32] |= 1UL /D - 1) % 32)同时设置目标进程描述符中thread—info域中的TIF一SIGPENDING标识,内核会在恢 复进程执行前检査该标志是否被设置,当其被设置时,内核会去处理该信号。 >由客户操作系统内核按原先方式执行第二步传递信号的过程,VMM不需要干预。只 要客户操作系统的某个目标进程被调度到,内核通过检查该进程的描述符的上述域和标识的值来确定是否需要进行对应操作。其执行效果近似于用户或者程序在客户操作 系统的shell下发送某个命令来对进程进行操作,只要该进程被调度到,对应的操作 立即执行。(如图5所示)但是,从VMM中对客户操作系统中目标进程操作的前提 是目标进程被调度。所以如果目标进程不被调度,比如在阻塞状态,那么该操作就不 能立即被执行。这与客户操作系统中的shell命令有所不同的是直接键入shell命令能 主动唤醒目标进程,而在VMM中有时可能无法立即唤醒客户操作系统的进程。
权利要求
1、一种基于虚拟机的多核处理器的资源监控系统,该系统设置在宿主机上,用于监控宿主机上的多核处理器的资源使用状态并将其提供给用户,每台安装有多核处理器的宿主机上可以同时运行多个虚拟机,每个虚拟机内独立运行一个客户操作系统,其特征在于,该系统包括资源监控主模块、虚拟机进程跟踪模块、宿主机处理器资源采集模块,其中资源监控主模块创建一个守护进程,周期性的访问宿主机处理器资源采集模块和虚拟机进程跟踪模块,获取宿主机的多核处理器运行状态和虚拟机上的客户操作系统的进程信息,并将这些信息进行汇总和分析,客户操作系统上执行进程的CPU是虚拟机提供的VCPU(虚拟CPU),上述的获取宿主机的多核处理器运行状态和虚拟机上的客户操作系统的进程信息,并将这些信息进行汇总和分析包括根据宿主机上多核处理器的每个内核的进程运行队列中VCPU的信息和客户操作系统上的进程的执行状态,得出客户操作系统的进程在宿主机上的实际执行位置及状态,进而分析得到宿主机上的多核处理器为每个虚拟机中的客户操作系统提供的计算资源和虚拟机对多核处理器的资源利用率,并将分析的结果显示给用户;当虚拟机和客户操作系统启动时,虚拟机进程跟踪模块通过从虚拟机管理器中截获的硬件访问信息和客户操作系统的进程管理信息,自动识别在客户操作系统中运行的进程,进而得到客户操作系统进程的运行信息,虚拟机进程跟踪模块周期性的采集客户操作系统中的进程信息并将结果保存到一个文本文件中,供资源监控主模块读取;宿主机处理器资源采集模块是内核模块,该模块工作在内核态,将宿主机处理器资源采集模块加载到宿主机操作系统内核中,该模块根据资源监控主模块发送的指令对宿主机的多核处理器资源信息进行采集,并将这些信息传递给资源监控主模块。
2、 如权利要求l所述的系统,其特征在于,客户操作系统是Lirmx。
3、 如权利要求1和2所述的系统,其特征在于当客户操作系统做进程切换时,通过访问特 权寄存器载入新进程的页表基地址,这会导致在支持Intel-VT技术的多核处理器环境下造成 一个陷入,虚拟机进程跟踪模块利用这个切换时的陷入时机和所带硬件信息建立并维护一个 虚拟机上客户操作系统的进程踪迹记录。
4、 如权利要求3所述的系统,其特征在于虚拟机管理器为KVM, Xen, Lguest中之一。
5、 如权利要求1所述的系统,其特征在于,所述客户操作系统进程的运行信息包括在哪个虚 拟CPU上执行,执行的时间和进程优先级。
6、 如权利要求l所述的系统,其特征在于当资源监控主模块发送查询数据后,宿主机处理器 资源采集模块通过一个软中断调用一个指定的数据接收函数,由该数据接收函数负责接收资 源监控主模块发送的査询指令和资源监控主模块的进程描述符,宿主机处理器资源采集模块读取宿主机操作系统内核中每个CPU内核的本地运行队列,记录下运行队列上包括虚拟机 VCPU在内的所有可执行进程的进程描述符,然后把这些信息传递给资源监控主模块。
7、 一种基于虛拟机的多核处理器的资源监控方法,该方法用于监控宿主机上的多核处理器的 资源使用状态并将其提供给用户,每台安装有多核处理器的宿主机上运行多个虚拟机,每个 虚拟机内独立运行一个客户操作系统,其特征在于该方法包括以下步骤在宿主机工作之前,将宿主机处理器资源采集模块加载到宿主机操作系统内核中,宿主 机处理器资源采集模块是内核模块,该模块运行在宿主机上且工作在内核态,在宿主机开始 工作时,宿主机处理器资源采集模块根据资源监控主模块发送的指令对宿主机的多核处理器 资源信息进行采集,并将这些信息传递给资源监控主模块;当虚拟机和客户操作系统启动时,虚拟机进程跟踪模块开始工作,虚拟机进程跟踪模块 设置在宿主机上,该模块通过从虚拟机管理器中截获的硬件访问信息和客户操作系统的进程 管理信息,自动识别在客户操作系统中运行的进程,进而得到客户操作系统进程的运行信息, 虚拟机进程跟踪模块周期性的采集客户操作系统中的进程信息并将结果保存到一个文本文件 中,供资源监控主模块读取启动资源监控主模块,资源监控主模块运行在宿主机操作系统上,其创建一个守护进程, 周期性的访问宿主机处理器资源采集模块和虚拟机进程跟踪模块,获取宿主机的多核处理器 运行状态和虚拟机上的客户操作系统的进程信息,并将这些信息进行汇总和分析;客户操作 系统上执行进程的CPU是虚拟机提供的VCPU (虚拟CPU),上述的获取宿主机的多核处理器运 行状态和虚拟机上的客户操作系统的进程信息,并将这些信息进行汇总和分析包括根据宿主 机上多核处理器的每个内核的进程运行队列中VCPU的信息和客户操作系统上的进程的执行 状态,得出客户操作系统的进程在宿主机上实际由哪个CPU内核执行及该进程的执行状态, 进而分析得到宿主机上的多核处理器为每个虚拟机中的客户操作系统提供的计算资源和虚拟 机对多核处理器的资源利用率,并将分析的结果显示给用户。
8、如权利要求7所述的方法,其特征在于资源监控主模块获取宿主机的多核处理器运行 状态进一步包括以下步骤当资源监控主模块发送查询数据后,宿主机处理器资源采集模块 通过一个软中断调用一个指定的数据接收函数,由该数据接收函数负责接收资源监控主模块 发送的査询指令和资源监控主模块的进程描述符,宿主机处理器资源采集模块读取宿主机操 作系统内核中每个CPU内核的本地运行队列,记录下运行队列上包括虚拟机VCPU在内的所有 可执行进程的进程描述符,然后把这些信息传递给资源监控主模块。
全文摘要
一种基于虚拟机的多核处理器资源监控系统和方法,以Linux下的/proc伪文件系统为桥梁,采用在Linux内核添加宿主机处理器资源采集模块的方法,通过与Linux内核进行通信,从而获取当前宿主系统资源使用信息,通过虚拟机进程跟踪模块建立资源监控主模块的守护进程与Hypervisor通信,获取运行于虚拟机上客户操作系统的资源信息,资源监控主模块对信息加以处理,以图形化的方式显示,从而达到对宿主系统以及虚拟机上的客户系统的软硬件资源进行监控的目的。
文档编号G06F9/46GK101403983SQ200810227239
公开日2009年4月8日 申请日期2008年11月25日 优先权日2008年11月25日
发明者良 张, 白跃彬, 成 罗, 聪 许 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1