法律状态公告日
法律状态信息
法律状态
2018-12-07
未缴年费专利权终止 IPC(主分类):G06F9/455 授权公告日:20130227 终止日期:20171220 申请日:20101220
专利权的终止
2013-02-27
授权
授权
2011-07-27
实质审查的生效 IPC(主分类):G06F9/455 申请日:20101220
实质审查的生效
2011-04-13
公开
公开
技术领域
本发明属于计算机操作系统和虚拟化技术领域,具体为一种提高客户虚拟机在多核环境下性能以及可伸缩性的方法。
背景技术
多核技术的出现给操作系统的开发带来了新的机遇和挑战。随着处理器处理核心数目的增多,操作系统的整体性能能否随着硬件计算能力的增强而增强成为当今计算机操作系统发展的一个重要问题,即操作系统的可伸缩性问题。现有操作系统普遍存在着在多核环境下可伸缩性差的现象,即当物理处理核心数目增加到一定数目时,操作系统的整体性能的提升开始放缓,甚至产生下降的现象。现在,双核和四核处理器已经被普遍应用在服务器,桌面乃至嵌入式平台。而在可预见的将来,我们将看到上百个处理器核(CPU core)被封装在一个芯片上。 因而随着多核技术的发展,操作系统在多核环境下的可伸缩性会变得越来越重要。
系统虚拟化是一种将一台物理计算机系统虚拟化为一台或多台虚拟计算机系统(简称虚拟机,Virtual Machine)的技术。作为一种现代操作系统技术,虚拟化技术近年来已经在产业界被广泛运用,例如:服务器整合(server consolidation)、多租户云(multi-tenant cloud)、专署虚拟化设备(virtual appliances)等等。而在系统虚拟环境下,由于系统增加了虚拟化层,客户虚拟机的性能及可伸缩性会受到严重的影响。具体表现为:在虚拟环境下客户虚拟机操作系统的性能及可伸缩性相对于运行在物理机器上的操作系统会产生非常严重的下降。
本发明主要用于解决多核环境下由于虚拟化层导致的客户虚拟机的性能及可伸缩性严重的下降问题。造成客户虚拟机性能及可伸缩性严重下降的主要原因是操作系统的空闲线程(idle thread)和虚拟机监控器的空闲虚拟机(idle Virtual Machine)的协作问题。(空闲线程主要用于当操作系统在某个处理器核心上进入空闲状态时,占用处理器核心并使之进入休眠状态。空闲虚拟机在虚拟机监控器中的角色类同于空闲线程在操作系统中的角色。)造成该协作问题的主要原因是客户虚拟机的空闲线程无法直接使用处理器核心休眠指令(该指令的作用在于使处理器核心进入休眠状态以节约能耗),而必须切换至虚拟机监控器并调度到空闲虚拟机由空闲虚拟机来执行处理器核心休眠指令。此外唤醒一个空闲虚拟机也需要切换至虚拟机监控器。
当客户虚拟机在执行多线程任务时,虚拟机操作系统内部往往会产生对资源的竞争,一些虚拟处理器核心上的线程不得不进入空闲以等待其他虚拟处理器核心上的线程释放其所需的资源。这会导致某些处理器核心进入空闲状态,并诱发操作系统的空闲线程和虚拟机监控器的空闲虚拟机的协作问题。额外的客户虚拟机和虚拟机监控器的切换会增加等待线程的等待时间从而导致执行在客户虚拟机上的多线程任务的执行时间变长,使得客户虚拟机的整体性能及可伸缩性下降。
发明内容
本发明的目的在于提出一种适用于客户虚拟机的轻量级用户态空闲后台进程的设计与使用方式,以提高多核环境下客户虚拟机的性能和伸缩性。
本发明通过使用适用于客户虚拟机的轻量级用户态空闲后台进程,来解决操作系统的空闲线程和虚拟机监控器的空闲虚拟机的协作问题。图1描述了在虚拟处理器核心处于空闲状态时,客户虚拟机的执行行为,即空闲线程和虚拟机监控器的空闲虚拟机的协作的过程。虚线部分表示了在该协作过程中增加的客户虚拟机和虚拟机监控器的切换所导致的额外的处理器资源的开销。通过该发明,虚线部分的开销将被完全消除。
该发明的主要原理为:使用一个轻量级用户态空闲后台进程,在虚拟处理器核心上没有负载时,占用虚拟处理器核心以避免客户虚拟机切换至虚拟机监控器,从而避免由于额外的客户虚拟机和虚拟机监控器的切换而带来的开销。
本发明方法的具体实现过程为:
1) 在客户虚拟机中执行一个低优先级的用户态空闲后台进程,该进程会在每个虚拟处理器核心上部署一个空闲后台子线程。
2) 空闲后台子线程在虚拟处理器核心上有负载时不会得到执行。这样实现使得在虚拟处理器核心上有用户线程负载时,空闲后台子线程不会对用户线程造成任何影响。
3) 在虚拟处理器核心上没有负载时,空闲后台子线程执行占用虚拟处理器核心。这样实现使得在虚拟处理器核心上没有负载时,不会调度到空闲线程,因此不会切换至虚拟机监控器,从而避免了由于额外的客户虚拟机和虚拟机监控器的切换而带来的开销。
图2描述了使用了空闲进程后,虚拟处理器核心处于空闲状态时,客户虚拟机的执行行为:
1) 当客户虚拟机中的一个处理器核心处于空闲状态时,该处理器核心直接从用户线程切换到后台空闲线程;
2)当客户虚拟机的处理器核心有用户线程需要执行时,该处理器核直接从后台空闲线程切换回用户线程。
因此,由额外的客户虚拟机和虚拟机监控器的切换所导致的处理器资源的开销已被完全消除。
此外,本发明的实现还具有一定的灵活性。当用户态负载不会造成客户虚拟机操作系统内部对资源的竞争时,可以不启用该空闲后台进程,从而完全避免该进程可能导致的额外的资源开销。当用户态负载会造成客户虚拟机操作系统内部对资源的竞争时,启用该空闲后台进程,从而避免发生客户虚拟机的虚拟处理器核心在空闲时切换至虚拟机监控器并执行空闲虚拟机的事件,以消除由于额外的客户虚拟机和虚拟机监控器的切换而带来的开销。
本书面说明可使该技术领域具有普通技能的人能够使用含有与权利要求所列要素近似的可替代要素的实施方案。因此,这项发明的范围包括与权利要求的字面意思完全相同的方法,还包括其他与权利要求的字面意思没有实质性区别的方法。虽然在这里只描述和说明了部分特征和实施方案,但相关技术的基本方法可以进行许多修改和变化。所附权利要求将涵盖所有这些修改和变化。
附图说明
图1为虚拟处理器核心处于空闲状态时,客户虚拟机的执行示意图。
图2为使用空闲进程后,虚拟处理器核心处于空闲状态时,客户虚拟机的执行示意图。
图3描述了在虚拟环境下,多个线程竞争同一个旗语(semaphore)的过程以及由此导致操作系统的空闲线程和虚拟机监控器的空闲虚拟机的协作问题的过程。
图4描述了在多核虚拟机上部署轻量级用户态空闲后台进程的方法。
图5描述了使用了用户态空闲后台进程后,虚拟环境下多个线程竞争同一个旗语的过程。
具体实施方式
下面结合实施例对本发明进行进一步说明。
图3描述了在虚拟环境下,多个线程竞争同一个旗语(semaphore)的过程以及由此导致操作系统的空闲线程和虚拟机监控器的空闲虚拟机的协作问题的过程。在操作系统中,当一个线程无法获得其所需要的旗语时(步骤1,2),它会被从当前处理器核心的可执行队列中调度走,并加入到该旗语的等待队列(步骤3)。如果当时该处理器核心的可执行队列为空,空闲进程就会占据该处理器核心,并切换至虚拟机监控器并调度到空闲虚拟机(步骤4)。当旗语的拥有者释放该旗语时,旗语队列中的第一个等待线程会被唤醒并得到执行(步骤5,6,7,8)。 由于虚拟机监控器的缘故,该唤醒过程不得不执行额外的步骤6和7,从而浪费额外的时间。与此同时,在旗语等待队列中的其它等待线程的等待时间也会因为额外的步骤而延长,从而导致整个系统的性能以及可伸缩性下降。
本发明通过使用适用于客户虚拟机的轻量级用户态空闲后台进程,来解决上述问题。图4描述了在多核虚拟机上部署轻量级用户态空闲后台进程的方法: 在客户虚拟机中执行一个低优先级的用户态空闲后台进程,该进程会在每个虚拟处理器核心上部署一个空闲后台子线程。
在引入了轻量级用户态空闲后台进程后,由多个线程竞争同一个旗语而导致的操作系统的空闲线程和虚拟机监控器的空闲虚拟机的协作问题会得以解决。图5描述了使用了用户态空闲后台进程后,虚拟环境下多个线程竞争同一个旗语的过程。由于用户态空闲后台进程的存在,当虚拟处理器核心进入空闲状态时,用户态空闲后台进程会占用虚拟处理器核心,从而减少了图3中额外的执行步骤6和7。因而被唤醒的旗语等待线程不再会浪费时间在虚拟机监控器中。与此同时,旗语等待队列中的其它等待线程也不会增加额外的等待时间。系统的整体性能和可伸缩性得到了提高。
机译: 用于提高虚拟机中的定时和进程计费的准确性的方法和系统
机译: 利用基于流的编程方法来提高应用程序的性能和可伸缩性的方法和系统
机译: 基于循环精细粒度可伸缩性的灵活宏块排序提高视频质量的编码方法