处理器隔离中的KVM虚拟化技术应用探讨

2017-11-15 09:57李慧颖
电脑知识与技术 2017年28期
关键词:隔离处理器

李慧颖

摘要:在计算机硬件不断发展的过程中,人们对于硬件资源需求的最大化使用也越来越迫切。KVM是一种具有Inter VT技术和QEMU技术的虚拟机,其能够为设备提供虚拟化技术。该文的主要目的是对KVM虚拟机的创建和运行进行研究,从控制进程方面对KVM虚拟化技术在处理器隔离中的使用进行研究,从而实现处理器资源的最大化使用。

关键词:处理器;隔离;KVM虚拟化技术

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)28-0256-02

虚拟化指的是在物理机中同时运行多个操作系统的技术,现在被广泛应用到大型主机等平台中。在社会经济不断进步及科学技术不断发展的过程中,PC的价格在不断下降,人们也逐渐忘记虚拟化的重要性。在進入到当代世纪中,数据中心技术在不断发展,虚拟化也逐渐应用到PC领域中,目前在PC平台中广泛使用虚拟化技术已经成为了一种趋势。在大型主机中,虚拟化技术的主要目的为使多个操作系统能够实现同个主机资源的共享,提高资源的使用率。在此背景下,本文就探讨处理器隔离中,KVM虚拟化技术的应用。

1 KVM虚拟机结构及工作原理

KVM虚拟机结构主要包括两部分内容,第一部分为通过模块形式集成的Driver,其主要目的就是实现虚拟硬化资源的管理,并且创建字符设备通过相应的结构,实现用户空间设备的相互通信,还能够实现虚拟机内存分配及寄存器读写、CPU运行等功能。其次就是KQEMU,也就是对于虚拟化的处理器进行修改的QEMU,其主要目的就是实现硬件模拟[1],图1为KVM虚拟机的结构。

首先实现虚拟机的初始化,之后KVM线程通过ioctl的方式对KVM内核模式进行VCPU指示,之后内核模块执行虚拟机的进入操作,使处理器的Kernel模式转变为Guest模式,之后实现客户机的运行。但是这个时候的虚拟机还是为KVM线程上下文中,并且执行ioctl系统的调用模式处理程序。如果客户机在运行过程中出现异常或者外部中断的时候,或者执行I/O操作的时候,就会使虚拟机出现退出操作,从而处理器的状态也会转变为Kernrl模式。虚拟机在进行内核检查过程中出现VM原因,如果是因为I/O操作影响,那么执行系统就会实现返回操作的调用,将其操作交到User模式进行处理,这个时候的KQEMU就会创建全新的线程实现I/O处理,之后实现ioctl的执行,使KVM能够将处理器切换为Guest模式,并且客户机也能够恢复正常的运行。如果VM 是因为其他因素导致,那么就要通过虚拟机内核模块进行处理,并且在处理之后使处理器切换到Guest模式,从而使客户机能够恢复运行。

通过以上分析表示,KVM虚拟机中的物理 CPU能够实现隔离,和线程、应用程序及异步I/O事件具有密切的关系[2]。

2 处理器隔离中KVM 虚拟化技术的实现

2.1 设计隔离方案

KVM虚拟机运行时候和处理器具有密切联系的数据结构在内存中保存,主要包括虚拟CPU中的寄存器内容及控制信息,不同数据结构具有相互对应的虚拟CPU,但是因为数据结构具有一定的迁移性,在使用过程中要和物理CPU相互绑定。比如,数据结构和CPU1进行绑定,并且在某一个时刻将这个绑定关系进行解除,在另外一个时刻对CPU2进行重新的绑定。在不同时刻中,数据结构和物理CPU的绑定关系是一对一的,也就是每个数据结构都只能够绑定一个物理CPU。那么在多核条件中要想能够在同个虚拟单核平台中运行,就要重新考虑KQEMS的线程、应用程序、CPU及异步事件的处理关系。通过CPU的亲和性及设置属性,能够将Guest进程在指定核中进行绑定,以此创建单核虚拟平台。比如在创建虚拟机过程中将Guest进程绑定到CPU核中,使其能够在运行过程中不出现迁移现象,图2为客户操作系统和CPU核绑定的情况。

分析KVM虚拟机的原理及机制,能够通过以下方面进行绑定操作:

其一,通过内核函数直接对Guest进程属性进行设置,以此实现Guest在指定核中的运行。通过脚本文件的编写,从而自动实现虚拟机的创建及绑定操作;

其二,对KQEMN源代码进行修改和优化,从而实现特定KVM虚拟机的生成。在客户机进行创建的过程中绑定,从而使客户机只能够运行到制定的核中,不能够进行迁移。

通过以上方案能够看出来,第一种方案是通过KQEMU应用程序出发,要想实现此方案就要使用文件读写及绑定脚本,并且还要修改虚拟机管理器的脚本。第二种方案是通过Qemu源代码进行修改,在绑定的时间方面明显比第一种方案要早,并且实现的过程也较为简单。并且通过第一种方案可以看出来,其在理论中对异步IO时候产生的aio线程绑定过程中会出现一定的问题,所以就要选择第二种方案[3]。

2.2 实现处理器隔离

Liunx线程是在核内通过轻进程形式存在,其是在核外实现。其还具有独立进程表项,但是其的创建和删除等其他操作也是在核外中实现。和fork()调用创建进程的方式并不相同,pthread创建线程没有和主线程相同的执行序列,而是使其中的函数能够运行。所以使用fork 创建父子进程具有一定的继承性,实现pthread创建父子进程并没有继承性。所以只是通过KQEMU中的属性并不能够实现KVM虚拟机处理器隔离,要想实现处理器隔离,要分为两个步骤。首先,通过QEMU命令中获得cpuid参数,这就要求能够修改KQEMU源代码,增加-cpuid命令选项,实现参数解析和相应的绑定操作。其次,根据得到的参数实现应用进程、线程及异步I/O事件处理线程的绑定,从而能够实现处理器隔离。图3为KVM虚拟机进程绑定实现的过程。

3 实验的结果

通过以上的实现设计思路可以看出来,对于第二种方案的实现要通过创建客户机和运行进行验证,并且还要实现客户机的异步I/O 事件处理。本文在实验过程中使用的测试平台为处理器内存DDR-800,在计算一次之后进行15毫秒的休眠。通过长时间的实验观察表示,虽然在Guest运行过程中的CPU核2的使用率为94.7%,KVM虚拟机还会在制定核中运行,在核1空闲的情况下也不会出现迁移。能够通过taskset命令对进程值进行查询,从而对其进行进一步的有效验证。通过验证表示,进程的值为1,那么就说明进程和线程在核2中运行[4]。

4 结束语

本文实现绑定KVM虚拟机,从而能够进行KVM虚拟机处理器的隔离,从而使KVM虚拟机能够在指定物理CPU核中进行运行,不会出现核转移的现象,以此能够实现CPU资源使用的最大化目的。在Guest多个共同运行过程中,只要在运行过程中对CPU参数的数量进行制定,那么就能够使不同Guest在指定核中进行运行,以此有效实现计算机硬件资源的充分使用。

参考文献:

[1] 于磊. 基于KVM的虚拟机完整性监控技术研究[D]. 中国科学院大学, 2015.

[2] 黄煜, 罗省贤. KVM虚拟化技术中处理器隔离的实现[J]. 计算机系统应用, 2012, 21(1):179-182.

[3] 王则陆, 孙超, 于丽,等. KVM虚拟化技术在申威平台的应用[J]. 信息技术与信息化, 2014(6):174-176.

[4] 倪平波, 张捷, 杨帆,等. 基于KVM与Infiniband的SR-IOV的应用研究[C]// 2016智能电网发展研讨会论文集, 2016.endprint

猜你喜欢
隔离处理器
Dirac Live加持!让好效果来得更容易 ROTEL Rotel RAP-1580MKⅡ AV功放/RSP-1576MKⅡ环绕声处理器/RMB-1585五声道功放
幼儿隔离中的安全问题
Imagination的ClearCallTM VoIP应用现可支持Cavium的OCTEON® Ⅲ多核处理器
ADI推出新一代SigmaDSP处理器
AItera推出Nios II系列软核处理器