#虚拟化#虚拟化从入门到精通(二)——CPU虚拟化

CPU的虚拟化是为每个虚拟机提供一个或多个虚拟CPU(Virtual CPU,VCPU)。多个虚拟CPU分时复用物理CPU,任意时刻一个物理CPU只能被一个虚拟CPU使用。VMM必须为各虚拟CPU合理分配时间片并维护所有虚拟CPU的状态,当一个虚拟CPU的时间片用完需要切换时,要保存当前虚拟CPU的状态,将被调度的虚拟CPU的状态载入物理CPU。因此CPU虚拟化需要解决以下两个问题:

        1)虚拟CPU的正确运行;现有的实现技术包括模拟执行和监控执行。模拟执行是指由VMM模拟所有指令的运行效果,包括解释执行和二进制代码翻译。通常用在物理机器指令集与虚拟机指令集不同的情况下,模拟执行方式效率较低。监控执行是指虚拟机的绝大部分指令都能在物理主机上直接执行,少量可能影响虚拟机运行或影响其他虚拟机状态的指令(称为“敏感指令”),必须由VMM监控并模拟其执行效果,在某些系统中,被VMM监控的指令的可能需要采用解释执行或二进制代码翻译的方式模拟执行。监控执行方式效率较高,在理想状态下,虚拟机甚至可以达到接近物理主机的速度。

        2)虚拟CPU的调度;虚拟CPU的调度是指由VMM决定当前哪一个虚拟CPU实际在物理CPU上运行。虚拟CPU的调度除了保证虚拟机之间的性能隔离性,还应该保证虚拟CPU的性能,保证调度的公平性:要考虑调度算法既能够充分利用物理CPU资源,又能实现精确的CPU资源分配;要根据虚拟机上运行的应用服务的特点以及虚拟机之间的依赖关系合理调度虚拟CPU。

 

一:正确执行(经典的虚拟化逻辑模型)

        “陷入-模拟”的本质是保证可能影响VMM或VM正确运行的指令由VMM监控执行。“特权解除”是指为了实现VMM对虚拟机的控制,降低客户操作系统运行的特权级别,而将VMM运行在最高特权级。解除了客户操作系统的特权之后,客户操作系统的大部分指令仍可以在硬件上直接运行,只有当客户操作系统执行到特权指令时,才会陷入到最高特权级的VMM模拟执行,即实现“陷入-模拟”。

        采用“特权解除”和“陷入-模拟”技术实现的VMM可以划分为三种逻辑模块:调度器(Dispatcher)、分配器(Allocator)和一组解释器(Interpreter),每一个解释器模拟一条特权指令的执行效果。

#虚拟化#虚拟化从入门到精通(二)——CPU虚拟化

采用 “特权解除”和“陷入-模拟”技术四个条件:1. CPU必须支持多个特权级;2. 非特权指令的执行效果不依赖于CPU的特权级;3. 敏感指令包括可能改变CPU状态(如特权级)的指令,或其执行结果依赖于CPU特权级的指令;4. ISA必须支持一种保护机制,例如段保护或页保护,从而保证多个虚拟机之间的隔离。

一:正确执行(X86架构虚拟化实现方法)

x86体系结构符合条件1—x86支持4个特权级ring0~ring3(Intel64除外),一种特权解除的实现方式是将VMM运行在0特权级,客户操作系统降低到1特权级,其上的应用程序仍然运行在3特权级。同时,x86也符合条件3:x86支持分段或分页的保护机制。所以x86不支持“特权解除”和“陷入-模拟”CPU虚拟化技术,早期需要软件虚拟化方法并监控执行,后来CPU厂商拓展x86 ISA指令集(硬件拓展技术的虚拟化方法)。

方法1:二进制代码动态翻译技术

        二进制代码动态翻译在执行时动态地重写虚拟机的执行代码,在需要虚拟机管理器监控和模拟的位置,即敏感指令前,插入陷入指令。该技术的优势在于客户操作系统能够不经修改直接在虚拟机上运行,其缺点是动态翻译带来一定的性能开销。

方法2:半虚拟化技术

        半虚拟化技术通过修改客户操作系统的源代码,将待监控的操作替换为对虚拟机管理器的超级调用(Hypercall)。该技术的优势在于虚拟机能够在硬件上直接运行,使客户操作系统能获得接近直接在裸机上运行的性能;其缺点则是需要修改客户操作系统的源代码,使虚拟机上使用的操作系统类型受到限制。

        以Xen的半虚拟化为例,Guest OS源码中的一个特权操作被替换成一个Hypercall,类似于操作系统中的系统调用。通过调用Hypercall,Guest OS能够把控制权转移到VMM。例如,一个更新页表的操作,被替换为一个Hypercall,运行时,通过Hypercall陷入到VMM中,由Xen确认并完成,再把控制权返回给产生本次调用的虚拟机。由VMM到虚拟机的通信是由一个异步时间机制提供的,这个机制取代了设备中断方式,虚拟机中可以设置事件屏蔽位,能实现对事件的屏蔽,效果类似于中断屏蔽。

方法3:预虚拟化技术

        预虚拟化技术[J.LeVasseur et al.,2005]通过修改编译器,将操作系统中需要虚拟机管理器监控和模拟的指令在编译时替换为对虚拟机管理器接口的调用。其优势在于无需修改客户操作系统就能获得半虚拟化的性能。

方法4:硬件辅助虚拟化技术

        为了弥补处理器的虚拟化缺陷,x86处理器的两大生产Intel推出了针对指令集虚拟化的Intel VT-x和Intel VT-i虚拟化技术(Vanderpool)[增加了在虚拟状态下的两种处理器工作模式,虚拟机管理器运行在Root操作模式下,客户操作系统运行在Non-root操作模式下],AMD也推出了相似的硬件辅助虚拟化技术AMD SVM(Pacifica)。其基本思想是引入新的指令和处理器运行模式,使得虚拟机管理器和客户操作系统运行在不同的模式下。客户操作系统只能在受控的模式下运行,当需要由虚拟机管理器进行监控和模拟时,由硬件支持模式切换。硬件虚拟化支持使得客户操作系统能够直接运行在物理硬件上,提高了虚拟化性能,也极大的方便了虚拟机管理器的设计和开发。Root操作模式和Non-root操作模式。

硬件辅助虚拟化技术有助于简化VMM的设计,提高虚拟化性能。并出现了基于硬件辅助虚拟化技术实现CPU虚拟化的虚拟机管理器KVM。但是,以现有的基于硬件辅助虚拟化的实现技术性能优势并未体现出来,其主要原因在于:1)配置了较严格的虚拟机运行环境,造成了大量的环境切换;2)目前虚拟机的CPU状态,包括大量的寄存器信息都保存在内存中,每次切换都发生大量的内存读写操作。

方法5:多核CPU的虚拟化

        带有硬件虚拟化支持的多核CPU的虚拟化实现,一是要实现多核的划分,二是要实现单核的共享。

        多核的划分指将一个或多个核指派给一个虚拟机使用,多个虚拟机可以真正的同时运行。对每一个核,可以利用其硬件虚拟化支持实现虚拟机管理器对虚拟机的监控。单核的共享指多个虚拟机分时复用同一个核心,其方法和技术与单核CPU的虚拟化相同。

二:虚拟CPU的调度

        虚拟CPU(Virtual CPU,VCPU)的调度是指由VMM决定当前由哪一个虚拟CPU实际在物理CPU上运行。虚拟CPU的调度影响虚拟机的性能,必须保证虚拟机之间的性能隔离,保证调度的公平性。

目标:

(1)充分利用CPU资源,通常采用work-conserving型调度算法。

(2)支持精确的CPU分配。

(3)性能隔离.

(4)考虑虚拟机之间的不对等。

(5)考虑虚拟机之间的依赖。

(6)保证全系统的负载平衡,对CPU时VCPU迁移(尽量本地化)。

 

常见调度算法:

(1)BVT(Borrowed Virtual Time),希望在为实时应用和交互应用提供低延时的同时,根据所有应用的权重来分配CPU资源。也就是说VCPU可以向将来自己的CPU份额借用virtual time。

(2)简单最小时限调度sEDF(simple Earliest Deadline First),用于实时操作系统中。它将所有任务放在优先级队列中,当发生调度事件时(如任务结束、新任务加入等),从队列中找出时限最短的任务并调度运行。

(3)基于额度的调度(Credit based),Xen允许为每个虚拟机设置两个参数:weight表示虚拟机调度的相对重要性和cap是虚拟机可用CPU资源的绝对上限。

本文转自:http://blog.sina.com.cn/s/blog_6de3aa8a0102x4mj.html

VPS评审,版权所有丨如未注明,均为原创丨本网站采用BY-NC-SA协议进行授权.
转载请注明转自:https://vpsps.com/1558.html
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论