当前位置:首页 > 公众号精选 > Linux阅码场
[导读]作者简介   王柏生  资深技术专家,先后就职于中科院软件所、红旗Linux和百度,现任百度主任架构师。在操作系统、虚拟化技术、分布式系统、云计算、自动驾驶等相关领域耕耘多年,有着丰富的实践经验。著有畅销书《深度探索Linux操作系统》(2013年出版)。谢广军  计算机专业博士...

作者简介


王柏生 资深技术专家,先后就职于中科院软件所、红旗Linux和百度,现任百度主任架构师。在操作系统、虚拟化技术、分布式系统、云计算、自动驾驶等相关领域耕耘多年,有着丰富的实践经验。著有畅销书《深度探索Linux操作系统》(2013年出版)。


谢广军 计算机专业博士,毕业于南开大学计算机系。资深技术专家,年的IT行业工作经验。现担任百度智能云副总经理,负责云计算相关产品的研发。多年来一直从事操作系统、虚拟化技术、分布式系统、大数据、云计算等相关领域的研发工作,实践经验丰富。


本文内容节选自《深度探索Linux虚拟化技术》,已获得机械工业出版社华章公司授权。




x86架构CPU虚拟化



Gerald J. Popek和Robert P. Goldberg在1974年发表的论文“Formal Requirements for Virtualizable[A1] [A2]  Third Generation Architectures”中提出了符合虚拟化的3个条件:


(1)等价性,即VMM需要在宿主机上为虚拟机模拟出一个本质上与物理机一致的环境。虚拟机在这个环境上运行与其在物理机上运行别无二致,除了可能因为资源竞争或者VMM的干预导致在虚拟环境中表现上略有差异,比如虚拟机的I/O、网络等因宿主机的限速或者多个虚拟机共享资源,导致速度可能要比独占物理机的慢一些。


(2)高效性,即虚拟机指令执行的性能与其在物理机上运行相比并无明显损耗。该标准要求虚拟机中的绝大部分指令无须VMM干预而直接运行在物理CPU上,比如我们在x86架构上通过Qemu运行的ARM系统并不是虚拟化,而是仿真(Emulator)。


(3)资源控制,即VMM完全控制系统资源。由VMM控制协调宿主机资源给各个虚拟机,而不能由虚拟机控制了宿主机的资源。



陷入和模拟模型



为了满足GeraldJ. Popek和Robert P. Goldberg提出的满足虚拟化的3个条件,一个典型的解决方案是Trap andEmulate模型


一般来说,处理器可以归结为两种运行模式:系统模式和用户模式。相应的,CPU的指令也分为特权指令和非特权指令。特权指令只能在系统模式运行,如果特权指令运行在用户模式就将触发处理器异常。操作系统将内核运行在系统模式,因为内核需要管理系统资源,需要运行特权指令,而普通的用户程序则运行在用户模式。


在虚拟化场景下,虚拟机的用户程序仍然运行在用户模式,但是虚拟机的内核将运行在用户模式,这种方式称为Ring Compression。在这种方式下,虚拟机中的非特权指令直接运行在处理器上,满足了Popek和Goldberg提出的虚拟化标准中高效的要求,即指令的大部分无须VMM干预直接在处理器上运行。但是,当虚拟机执行特权指令时,因为是在用户模式执行特权指令,将触发处理器异常,从而陷入到VMM中,由VMM代理虚拟机完成系统资源的访问,即所谓的模拟(emulate)。如此,又满足了Popek和Goldberg提出的虚拟化标准中VMM控制系统资源的要求,虚拟机将不会因为可以直接运行特权指令而修改宿主机的资源,从而破坏宿主机的环境。




x86架构虚拟化的障碍



Gerald J. Popek和Robert P. Goldberg指出,修改系统资源的,或者在不同模式下行为有不同表现的,都属于敏感指令。在虚拟化场景下,VMM需要监测到这些敏感指令。一个支持虚拟化的体系架构的敏感指令都属于特权指令,即在非特权级别执行这些敏感指令时,CPU会抛出异常,进入VMM的异常处理函数,从而实现了控制VM访问敏感资源的目的。


但是,x86架构恰恰不能满足Gerald J. Popek和Robert P. Goldberg定义的这个准则,且并不是所有的敏感指令都是特权指令,有些敏感指令在非特权模式下执行时并不会抛出异常,此时VMM就无法拦截或者处理VM的行为。以修改FLAGS寄存器中的IF(interrupt flag)为例,我们首先使用指令pushfd将寄存器FLAGS的内容压到栈中,然后将栈顶的IF清0,最后使用popf指令从栈中恢复FLAGS寄存器。如果将虚拟机内核运行在ring 1,x86的CPU并不会抛出异常,而只是默默地忽略指令popfd,因此虚拟机关闭IF的目的并没有生效。


有人提出半虚拟化的方式,即修改Guest的代码,但是这不符合虚拟化的透明准则。后来,人们提出了二进制翻译的方式,包括静态翻译和动态翻译。静态翻译就是在运行前,扫描整个可执行文件,对敏感指令进行翻译,重新形成一个新的文件。静态翻译是有其局限性的,必须提前处理,而且有些指令只有在运行时才产生的副作用,无法静态处理。于是,动态翻译应运而生,即在运行时以代码块为单元动态地修改二进制代码。动态翻译在很多VMM中得到应用,而且优化的效果非常不错。




VMX扩展



虽然程序员们从软件层面采用了多种方案去解决x86架构在虚拟化方面的问题,但是软件层的解决方案除了额外的开销外,也给VMM的实现带来了巨大的复杂性。于是,Intel尝试从硬件层面解决这个问题。Intel并没有将那些非特权的敏感指令修改为特权指令,因为并不是所有的特权指令都需要Trap and Emulate。我们举个典型的例子,每当操作系统内核切换进程时,都会切换cr3寄存器,使其指向当前运行进程的页表。当使用影子页表进行GVA到HPA的映射时,需要捕获Guest的每一次设置cr3寄存器的操作,VMM模块使其指向影子页表。而当启用了硬件层面的EPT支持后,cr3仍然指向Guest的进程页表,无须捕捉Guest设置cr3寄存器的操作,也就是说,虽然写cr3寄存器是特权指令,但是其不需要陷入VMM。


Intel开发了VT技术支持虚拟化,为CPU增加了Virtual-Machine Extensions,简称为VMX。一旦启动了CPU的VMX支持,CPU将提供2种运行模式:VMX Root Mode和VMX non-Root Mode,每一种模式都支持ring0 ~ ring3。VMM运行在VMX RootMode,除了支持VMX外,VMX Root Mode和普通的模式并无本质区别。VM运行在VMX non-Root Mode,Guest无须再采用Ring Compression方式,Guest kernel可以直接运行在VMX non-Root Mode的ring0,如图1所示。




图1 VMX运行模式



处在VMX RootMode的VMM可以通过执行CPU提供的虚拟化指令VMLaunch切换到VMX non-Root Mode,因为这个过程相当于进入Guest[3] ,所以通常也被称为VM entry。当Guest内部执行了敏感指令,比如某些I/O操作后,将触发CPU发生陷入的动作,从VMX non-Root Mode切换回VMX Root Mode,这个过程相当于退出VM,所以也称为VM exit。然后VMM将对Guest 的操作进行模拟。相比于Ring Compression方式,即将Guest的内核也运行在用户模式(ring 1 ~ ring 3)的方式,支持VMX扩展的CPU[4] :


(1)运行于Guest模式时,Guest用户空间的系统调用直接陷入Guest模式的内核空间,而不是再陷入到Host模式的内核空间。


(2)对于外部中断,因为需要让VMM控制系统的资源,所以处于Guest模式的CPU收到外部中断,则触发CPU从Guest模式退出到Host模式,由Host内核处理外部中断。处理完中断后,再重新切入Guest模式。为了提高I/O效率,Intel支持外设透传模式,在这种模式下,Guest可以不必产生VM exit,“设备虚拟化”一章将讨论这种特殊方式。


(3)不再是所有的特权指令都会导致处于Guest模式的CPU发生VM exit,仅当运行敏感指令时才会导致CPU从Guest模式陷入Host模式,因为有的特权指令并不需要由VMM介入处理。


如同一个CPU可以分时运行多个任务一样,每个任务有自己的上下文,由调度器在调度时切换上下文,从而实现同一个CPU同时运行多个任务。在VMX扩展下,同一个物理CPU“一人分饰多角”,分时运行着Host及Guest,在不同模式间按需切换,因此,不同模式也需要保存自己的上下文。为此,VMX设计了一个保存上下文的数据结构:VMCS。每一个Guest都有一个VMCS实例,当物理CPU加载了不同的VMCS时,将运行不同的Guest,,如图2所示。



图2 多个Guest切换



VMCS中主要保存着两大类数据,一类是状态,包括Host的和Guest的,另外一类是控制Guest运行时的行为。


(1)Guest-state area,保存虚拟机状态的区域。当发生VM exit时,Guest的态保存在这个区域;当VM entry时,这些状态将被装载到CPU中。这些都是硬件层面的自动行为,VMM无须编码干预。


(2)Host-state area,保存宿主机状态的区域。当发生VM exit时,CPU自动从VMCS装载这些状态到物理CPU;当VM entry时,CPU自动将状态保存到这个区域。


(3)VM-exit information fields。当虚拟机发生VM exit时,VMM需要知道导致VM exit的原因,然后才能对症下药,进行相应的模拟操作。为此,CPU会自动将Guest退出的原因保存在这个区域,供VMM使用。


(4)VM-execution control fields。这个区域中的各种字段控制着虚拟机运行时的一些行为,比如设置Guest运行时访问cr3时是否触发VM exit;控制VM entry与exit时的行为的VM-entry control fields和VM-exitcontrol fields。我们不再一一列出细节,读者如有需要可以查阅Intel手册。


在创建VCPU时,KVM模块将为每个VCPU申请一个VMCS,每次CPU准备切入Guest模式时,将设置其VMCS指针指向即将切入的Guest对应的VMCS实例:


commit 6aa8b732ca01c3d7a54e93f4d701b8aabbe60fb7


[PATCH] kvm: userspace interface


linux.git/drivers/kvm/vmx.c


static struct kvm_vcpu *vmx_vcpu_load(structkvm_vcpu *vcpu)


{


u64phys_addr = __pa(vcpu->vmcs);


int cpu;



cpu =get_cpu();



if(per_cpu(current_vmcs, cpu) != vcpu->vmcs) {



per_cpu(current_vmcs, cpu) = vcpu->vmcs;


asmvolatile (ASM_VMX_VMPTRLD_RAX "; setna %0"


: "=g"(error) : "a"(
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

苏州2022年10月17日 /美通社/ -- 如今,数字中国的发展浪潮正在向千行百业推进,数字技术与实体经济的融合越来越紧密。为更好地实现数字技术与千行百业的深度融合,近年来,互联网行业创新多种技术手段以促进千...

关键字: 机器人 数字化 虚拟化 仪表盘

济南2022年10月14日 /美通社/ -- 近日,浪潮新基建成功通过CMMI(软件能力成熟度集成模型)三级认证并正式获得资质证书。继2021年组建后,仅一年时间就斩获全球软件领域最权威的认证之一,标志着浪潮新基建在技术...

关键字: 软件 新基建 智慧城市 模型

北京2022年10月13日 /美通社/ -- 近日,中科寒武纪科技股份有限公司(以下简称"寒武纪")的思元370系列智能加速卡与浪潮AIStation智能业务生产创新平台完成兼容性适配认证,...

关键字: STATION 加速卡 AI 模型

苏州2022年10月13日 /美通社/ -- 北京时间2022年10月13日,开拓药业(股票代码:9939.HK),一家专注于潜在同类首创和同类最佳创新药物研发及产业化的生物制药公司,宣布其联合美国德克萨斯大学...

关键字: 模型 LM EMI PD

(全球TMT2022年10月11日讯)近日,昆仑芯(北京)科技有限公司的第二代云端通用人工智能计算处理器昆仑芯2代AI芯片及AI加速卡与飞桨完成III级兼容性测试,兼容性表现良好。 产品兼容性证明 本次...

关键字: 人工智能 加速卡 处理器 模型

来见识下这位95后的手工大神。据媒体报道,山东青岛一女生耗时一个月,使用10斤巧克力,复刻了《武林外传》里的小院,堪称神还原。女孩介绍,大大小小的物件超过200件,每一个小物件都是用巧克力、翻糖和糯米纸做的,模型长度大概...

关键字: 模型

北京2022年9月27日 /美通社/ -- 近期,为助力中小企业创新发展,承接"828 B2B企业节"成就好生意,成为好企业的愿景。软通动力着力打造了"917转型"企动日主题峰会,会上发布了一系列新品和解决方案,面向多个...

关键字: DM 数字化 大数据 模型

济南2022年9月23日 /美通社/ -- 近日,浪潮城市信息模型( CIM)基础平台V1.0正式发布。该产品综合应用数字孪生、物联网、5G、区块链、大数据等技术,实现城市治理各环节全程管控、智能协同,强化城市...

关键字: 模型 智慧城市 指挥调度 BSP

(全球TMT2022年9月23日讯)近日,浪潮城市信息模型(CIM)基础平台V1.0正式发布。该产品综合应用数字孪生、物联网、5G、区块链、大数据等技术,实现城市治理各环节全程管控、智能协同,强化城市全生命周期管理,助...

关键字: 模型 编码 大数据 区块链

深圳2022年9月16日 /美通社/ -- 针对联邦学习全局模型的版权保护问题,微众银行AI团队联合上海交通大学在人工智能学术期刊《IEEE模式分析与机器智能汇刊》(IEEE T-PAMI,IEEE Trans...

关键字: 模型 IP 神经网络 IEEE

Linux阅码场

174 篇文章

关注

发布文章

编辑精选

技术子站

关闭