虚拟化技术 - CPU虚拟化

天翼云开发者社区
• 阅读 228

本文分享自天翼云开发者社区《虚拟化技术 - CPU虚拟化》 作者:谢****悦

物理机器是由CPU,内存和I/O设备等一组资源构成的实体。虚拟机也一样,由虚拟CPU,虚拟内存和虚拟I/O设备等组成。VMM(VM Monitor)按照与传统OS并发执行用户进程的相似方式,仲裁对所有共享资源的访问。本文将分别讨论CPU虚拟化、内存虚拟化和I/O虚拟化技术的原理和实现。

在虚拟化的平台上,虚拟机(guest VM)所使用的多个虚拟CPU(以下称vCPU)可能是共享同一个物理CPU(以下称pCPU)的。VMM负责vCPU的调度,当一个vCPU被调度到获得pCPU的使用权后,基于该vCPU运行的guest OS又可以调度OS中的各个线程/进程了。也就是说,guest OS中的各个线程/进程分时复用了vCPU,而各个vCPU又分时复用了pCPU。

为了从硬件上提供对vCPU调度和切换的支持,Intel推出了被称为VT-x(Virtualization Technology for x86)的CPU虚拟化扩展技术,用户可通过VMXON/VMXOFF指令打开/关闭这个功能。和Intel亦敌亦友的AMD也推出了被称为AMD-V的对应技术。

在Linux中,从用户空间trap到内核空间可以通过system call或者interrupt/exception。以system call基于x86的实现为例,早期x86提供的trap方法是int 0x80这样的software interrupt机制,而后改成了SYSENTER/SYSEXIT的指令对,现在则已经被速度更快的SYSCALL/SYSRET取代了。

类似地,在VT-x中,从guest VM进入VMM(这个过程被称为VM exit)通常有三种方式: 执行VMCALL指令,这种方式被称为hyper call,跟执行SYSCALL指令实现的system call原理差不多。

发生了硬件中断或软件异常。

guest VM执行了一些敏感指令。有一些敏感指令并不会产生VM exit,比如SYSENTER;有一些敏感指令则可以根据下面将要介绍的VM executation control fields配置来选择是否产生VM exit。

进入VMM就意味着从non-root mode进入了root mode,反之,从VMM返回guest VM(这个过程被称为VM entry)则是重新回到了non-root mode,mode的切换意味着上下文(context)的保存和恢复。

上下文其实是个难以定义的概念,它是从CPU的角度引出的,简单地说,上下文就是程序(进程/中断)运行时所需要的寄存器的最小集合,这些寄存器的后面可能代表着程序运行的一类资源。

上下文切换是指程序从一种状态切换到另一种状态(比如从用户态切换到内核态),或者从一个程序切换到另一个程序(比如进程切换)时,导致上下文相关寄存器的值变化的行为。对于上下文切换时不需要改变的寄存器,也可以说它不是该程序的上下文。

VMCS

在Linux中,一个进程的相关信息保存在task_struct中。虚拟机的上下文比进程的上下文更为复杂,在VT-x中,由VMCS(Virtual-Machine Control data Structures)负责保存vCPU需要的相关状态和上下文信息。

VMCS在使用时需要和pCPU绑定。一个pCPU可以对应多个vCPU,而一个vCPU对应一个VMCS,但在任意给定时刻,一个pCPU上只能运行一个vCPU(就像在多线程调度中,某一时刻,一个CPU上只能运行一个线程一样)。

因此,一个pCPU只能绑定一个VMCS,一个VMCS也只能与一个pCPU绑定,可分别通过VMPTRLD/VMCLEAR指令建立/解除两者的绑定关系。VMCS存放在内存中,一个VMCS占据4KB大小,由6个区域组成:

Guest state area,用于保存CPU在non-root mode下运行时的状态。当发生VM exit的时候,CPU将自己当前的状态保存到guest state area中,当发生VM entry的时候,guest state area保存的状态将被自动加载到CPU中。

其实也不用一口气将所有寄存器的值都恢复,反正都是保存在VMCS中的,可以等到该寄存器真正被guest使用到时再恢复,这就是Lazy Save/Restore,其基本思想是尽量将寄存器的保存/恢复延迟到最后一刻,减少无用功,提高上下文切换的效率。这种思想在Linux的实现中也比比皆是,比如copy on write, demand paging等,拖延症也不见得是件坏事哈。

Host state area,用于保存CPU在root mode下运行时的状态。需要保存的寄存器和guest state area是差不多的,但是保存/恢复的过程是刚好反过来的。

VM executation control fields,用于控制non-root模式下CPU的行为。出于优化的目的,VMM可以让某些敏感指令不产生VM exit,以减少mode切换带来的上下文开销,而这就是由VM execution control来实现的。

比如读取timestamp的RDTSC指令,在一些延时函数的实现中,该指令会被频繁使用,如果每次guest执行该指令的时候都trap到VMM,那系统开销就太大了,这时VMM可以选择每隔一段时间读取物理CPU真实的 timestamp值,然后填写guest 的timestamp虚拟寄存器,来达到模拟RDTSC指令的效果。

VM exit control fields,用于规定VM exit时CPU的行为,比如是否应答外部中断。

VM exit information fields。VMM除了通过VM exit control fields来控制VM exit的行为,还需要知道VM exit的相关信息(比如trap的具体原因),这些信息就是保存在VM exit information fields中的。

VM entry control fields,用于控制VM entry的过程,比如后续的文章要介绍的中断注入。

VM executation control可理解为what to trap,就是哪些event会引起trap,哪些不会。VM exit control可理解为how to trap,VM exit information则可理解为why to trap。读写VMCS这段内存空间需要使用专门的VMREAD和VMWRITE指令。

小结一下,一个完整的VT-x使用流程是这样的:首先需要通过CPUID指令检查当前CPU是否支持虚拟化扩展。如果支持,则通过VMXON使能VT-x,建立VMCS并通过VMPTRLD绑定物理CPU。

点赞
收藏
评论区
推荐文章
十月飞翔 十月飞翔
1年前
CPU虚拟化技术介绍
虚拟化的三个条件:等价性,高效性和资源控制。这三条是针对VMM(VirtualMachineManager)说的。陷入和模拟模型处理器分为两种运行模式:系统模式和用户模式。CPU指令对应分为特权指令和非特权指令。陷入和模拟模型下,虚拟机用户程序仍然运行在用户模式下,虚拟机的内核也运行在用户模式,成为特权级压缩(RingCompression)。这种模式
Stella981 Stella981
2年前
KVM 虚拟化原理探究(5)— 网络IO虚拟化
IO虚拟化简介前面的文章介绍了KVM的启动过程,CPU虚拟化,内存虚拟化原理。作为一个完整的风诺依曼计算机系统,必然有输入计算输出这个步骤。传统的IO包括了网络设备IO,块设备IO,字符设备IO等等,在KVM虚拟化原理探究里面,我们最主要介绍网络设备IO和块设备IO,其实他们的原理都很像,但是在虚拟化层又分化开了,这也是为什么网络设备
Stella981 Stella981
2年前
KVM 虚拟机在物理主机之间迁移的实现
虚拟机的迁移使资源配置更加灵活,尤其是在线迁移技术,提高了虚拟服务器的可用性和可靠性。本文是虚拟机迁移技术漫谈系列的第二部分,详细介绍KVM虚拟机在物理主机之间的静态迁移和在线迁移特性,而且包括基于数据块的在线迁移实现。前言虚拟机的迁移技术为服务器的虚拟化提供简便的方法。目前流行的虚拟化产品VMware,Xen,HyperV,
Stella981 Stella981
2年前
Docker 运行时资源限制
Docker运行时资源限制Docker基于Linux内核提供的cgroups功能,可以限制容器在运行时使用到的资源,比如内存、CPU、块I/O、网络等。内存限制概述Docker提供的内存限制功能有以下几点:容器能使用的内存和交换分区大小。容器的核心内存大小。容器虚拟内存的交换行为。容器内存的软性限制
Stella981 Stella981
2年前
Docker——入门实战
I.Docker简介Docker是一种新兴的虚拟化技术,能够一定程度上的代替传统虚拟机。不过,Docker跟传统的虚拟化方式相比具有众多的优势。我也将Docker类比于Python虚拟环境,可以有效的配置各个版本的开发环境,比如深度学习与Java环境。其他的Docker简介也不需要过多介绍,可以参考很流行的《Docker—从入
Stella981 Stella981
2年前
Linux 虚拟内存和物理内存的区别?
概念:物理内存:真实的内存条,CPU可以直接寻址的内存空间。虚拟内存:利用磁盘空间虚拟出一块逻辑内存。区别:Linux会在物理内存不足时,使用虚拟内存,内核会把暂时不用的内存块信息写到虚拟内存,这样物理内存就得到了释放,这块儿内存就可以用于其他目的,而需要用到这些内容的时候,这些信息就会被重新从虚拟内存读入物理内存。
云服务器虚拟化超分与虚机性能关系分析
虚拟化技术是云计算商业模式的基础,它也是推动云计算经济的核心技术。虚拟化是指使用虚拟化软件在计算机硬件上创建抽象层,将单个计算机的硬件元素(包括处理器、内存、存储器等)分成多个虚拟计算机(VM),每个VM都运行自己的操作系统(OS),类似于独立的计算机。这样虚拟化技术能让一台服务器变成几台甚至上百台互相隔离的虚拟服务器,不再受限于物理上的界限,而是让CPU、内存、存储、I/O等硬件变成可以动态管理的“资源池”,从而提高资源的利用率,简化系统管理,实现服务器整合池化,让IT对业务的变化更具适应力。虚拟化能够提高企业资源运营效率,节约能耗,降低经济成本和空间浪费。
云服务器虚拟化超分与虚机性能关系分析
虚拟化技术是云计算商业模式的基础,它也是推动云计算经济的核心技术。虚拟化是指使用虚拟化软件在计算机硬件上创建抽象层,将单个计算机的硬件元素(包括处理器、内存、存储器等)分成多个虚拟计算机(VM),每个VM都运行自己的操作系统(OS),类似于独立的计算机。这样虚拟化技术能让一台服务器变成几台甚至上百台互相隔离的虚拟服务器,不再受限于物理上的界限,而是让CPU、内存、存储、I/O等硬件变成可以动态管理的“资源池”,从而提高资源的利用率,简化系统管理,实现服务器整合池化,让IT对业务的变化更具适应力。虚拟化能够提高企业资源运营效率,节约能耗,降低经济成本和空间浪费。
云电脑运行原理分析
虚拟化技术是云电脑运行的核心技术之一。它可以将物理服务器虚拟化成多个虚拟机,每个虚拟机都拥有独立的操作系统和应用程序运行环境。虚拟机之间相互隔离,互不影响。虚拟化技术可以显著提高服务器的利用率,减少能源消耗,同时还可以提高系统的可靠性和安全性。
云电脑:IO虚拟化实现的技术分析
IO虚拟化技术是一种将硬件资源虚拟化的技术,它可以在虚拟机中模拟真实的网络和存储设备,使得虚拟机可以像真实的计算机一样进行网络访问和数据存储。IO虚拟化技术的实现原理主要包括以下几个方面:
天翼云开发者社区
天翼云开发者社区
Lv1
天翼云是中国电信倾力打造的云服务品牌,致力于成为领先的云计算服务提供商。提供云主机、CDN、云电脑、大数据及AI等全线产品和场景化解决方案。
文章
494
粉丝
8
获赞
37