首页 > 其他分享 >[os]Intel VT-x硬件虚拟化(vmx和vmcs)(1)

[os]Intel VT-x硬件虚拟化(vmx和vmcs)(1)

时间:2024-03-30 23:44:18浏览次数:16  
标签:Intel 虚拟化 Hypervisor 虚拟机 VM 指令 VT vmx VMCS

Intel VT-x是Intel的虚硬件辅助拟化方案,TV的意思是Visualization Technology. 硬件辅助虚拟化方案是系统虚拟化技术的一种,重要是用来弥补虚拟化漏洞.

虚拟化漏洞

虚拟化系统必须满足三个条件:

  • 资源控制:虚拟机对于物理资源的访问都应该在Hypervisor的监控下进行
  • 等价:上层应用与物理机运行没有区别,特权指令可以自由执行
  • 高效:绝大多数客户机指令可以由主机硬件直接执行

主要是资源控制,另外两个都比较好理解. CPU架构中会触发特权级切换的指令称为特权指令,这些指令只能在最高特权级中运行,而操作敏感物理资源的指令称为敏感指令,例如I/O指令和页表基地址切换指令等. 资源控制要求访问敏感物理资源的指令都需要在Hypervisor的监控下执行,Hypervisor运行在最高特权级,虚拟机执行敏感指令必须trap进入Hypervisor执行. 这种处理方式要求所有的敏感指令都会触发特权级切换. 然而由于早期x86架构对虚拟化支持不足,存在一系列敏感非特权指令. Intel将这些指令称为“虚拟化漏洞”.

硬件辅助虚拟化技术就是解决虚拟化漏洞的软件方案之一,笼统的讲,就是在虚拟机执行敏感指令的时候通过超调用主动陷入Hypervisor. Intel VT-x引入了VMX操作模式,包括根模式和非根模式,Hypervisor运行在根模式而虚拟机运行在非根模式. 非根模式中所有的敏感指令都会触发VM-Exit而陷入Hypervisor,让所有敏感指令都会触发异常.

VMX操作模式

支持VT-x的Intel CPU可以通过VMXON/VMXOFF指令打开或关闭VMX操作模式. Hypervisor运行在VMX根模式,虚拟机运行在非根模式. root和non-root都有Ring0-Ring3特权级,Hypervisor运行在root的Ring0特权级上. VMX下虚拟机执行敏感指令时,从non-root切换到root,称为VM-Exit;从root切换到non-root称为VM-Entry. VMX中敏感非特权指令可以稳定触发VM-Exit,从而陷入Hypervisor进行处理.

Hypervisor处理来自non-root的虚拟机VM-Exit陷入的过程可以简单描述为:

exit_handler () {
	get_exit_reason();
	call_handler();
	return_to_guest();
}

用自然语言描述就是:Hypervisor读取VM-Exit相关信息,判断造成VM-Exit的原因(I/O指令触发或是外部中断)并进行处理(handle),处理完成后Hypervisor调用VMX指令VMLAUNCH或VMRESUME指令从root切换到non-root,恢复虚拟机运行.

VMCS

熟悉操作系统就会发现上述过程有一个问题:特权级切换或者说陷入过程需要上下文切换. 确切的说,是虚拟机的vCPU上下文切换. 陷入Hypervisor时需要保存vCPU状态,从Hypervisor返回需要加载vCPU的寄存器状态. VMCS就是用来保存虚拟机和Hypervisor寄存器状态的机制.

VMCS全程Virtual Machine Control Structure,虚拟机控制结构,是内存中的一块区域,用于在VM-Entry和VM-Exit的时候保存和恢复虚拟机和Hypervisor寄存器状态. VMCS与vCPU一一对应,当vCPU被调度到物理CPU的时候,需要将对应的VMCS与物理CPU绑定,才能实现保存和恢复寄存器状态.

VMCS虽然存在内存当中,但是与架构强相关,部分内容可能存在cache当中,所以只能通过Intel VT-x提供的指令来进行读写:VMPTRLD将VMCS与CPU绑定,VMCLEAR将CPU中缓存的数据写入内存VMCS中,并将VMCS与CPU解绑,VMREAD和VMWRITE可以通过索引读写VMCS的数据域.

VMCS的大小不确定,上限为4KB,可以通过查询MSR寄存器组中的IA32_VMX_BASIC[32:44]得到具体的大小. VMCS组成:

  • 4KB VMCS版本标识符:指明VMCS数据域的格式
  • 4KB VMCS中止指示符:记录VMX中止的原因
  • 不确定大小的VMCS数据域

VMCS数据域包含客户机状态域、宿主机状态域、VMX控制域(控制guest os在non-root时哪些行为可以触发VM-Exit)、VM-Exit控制域、VM-Entry控制域和VM-Exit信息域(触发VM-Exit的基本原因和其他信息).

VMCS独立于Hypervisor,在内存中存在,涉及硬件辅助虚拟化的方方面面,但是主要作用可以概括为:存储和恢复寄存器以及存储VMX控制信息.

小结

第一篇只是对Intel VT-x的简单认识,后面会读Intel的手册,主要看看VMX指令. 然后看一下 https://github.com/equation314/RVM-Tutorial 这个.

参考文献

深入浅出系统虚拟化原理与实践. 戚正伟, 管海兵. 清华大学出版社.

标签:Intel,虚拟化,Hypervisor,虚拟机,VM,指令,VT,vmx,VMCS
From: https://www.cnblogs.com/torisutes/p/18105908

相关文章

  • 【期刊】人工智能评论 Artificial Intelligence Review
    Overview 概述ArtificialIntelligenceReviewisafullyopenaccessjournalpublishingstate-of-the-artresearchinartificialintelligenceandcognitivescience.《人工智能评论》是一本完全开放获取的期刊,发表人工智能和认知科学领域的最新研究。Publishes......
  • MATLAB用GARCH-EVT-Copula模型VaR预测分析股票投资组合
    全文链接:http://tecdat.cn/?p=30426原文出处:拓端数据部落公众号对VaR计算方法的改进,以更好的度量开放式基金的风险。本文把基金所持股票看成是一个投资组合,引入Copula来描述多只股票间的非线性相关性,构建多元GARCH-EVT-Copula模型来度量开放式基金的风险,并与其他VaR估计方法的预......
  • 各种 IntelliJ IDEA 酷炫插件推荐
    (2)BackgroundImagePlusidea背景修改插件,让你的idea与众不同,可以设置自己喜欢的图片作为code背景。安装成功之后重启,菜单栏的VIew标签>点击SetBackgroundImage(没安装插件是没有这个标签的),在弹框中路由选择到本地图片,点击OK即可。(3)Grepconsole自定义日志颜色,idea控......
  • 使用 IntelliJ IDEA 和 Maven 构建 Java 项目
    使用IntelliJIDEA和Maven构建Java项目在Java开发中,使用Maven是一种广泛采用的构建工具,而IntelliJIDEA则是一款功能强大的集成开发环境(IDE)。结合Maven和IntelliJIDEA,可以更加高效地管理和构建Java项目。本文将介绍如何在IntelliJIDEA中使用Maven构......
  • 解决IntelliJ IDEA中控制台中文乱码问题
       1.Server乱码ideafile-----setting----选择点击Editor—>选择点击General---->选择点击console ideafile-----setting----选择点击Editor----FileEncodings编码均改为UTF-8 改完别忘记点击OKTomcatCatalinaLog/TomcatLocalhostLog乱码在你的idea安装......
  • 【VTKExamples::Points】第十期 NormalEstimation
    很高兴在雪易的CSDN遇见你 VTK技术爱好者QQ:870202403   公众号:VTK忠粉前言本文分享VTK样例NormalEstimation,并解析接口vtkPCANormalEstimation,希望对各位小伙伴有所帮助!感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步!你的点赞就是我的动力(^U^)ノ~YO1.Norm......
  • MATLAB用GARCH-EVT-Copula模型VaR预测分析股票投资组合
    全文链接:http://tecdat.cn/?p=30426原文出处:拓端数据部落公众号对VaR计算方法的改进,以更好的度量开放式基金的风险。本文把基金所持股票看成是一个投资组合,引入Copula来描述多只股票间的非线性相关性,构建多元GARCH-EVT-Copula模型来度量开放式基金的风险,并与其他VaR估计方法的预......
  • 重新配置intelliJ-IDEA记录
    完善的intelliJ-IDEA辅导https://cdk8s.gitbook.io/github/about-this-tutorial 0224重新申请免费版本-等待-完成 需重启,记录当前参考网页首次运行向导main参考https://cdk8s.gitbook.io/github/first-run-wizard原位置https://github.com/judasn/IntelliJ-IDEA-Tutorial/......
  • 字幕文件vtt转srt
    importrecontent=[]srt=[]withopen('input.vtt','r')asopen_file: forlinesinopen_file: lines=lines.replace('WEBVTT','')#删除WEBVTT#vtt文件中时间可以是00:00.000#srt文件中时间必须是00:00:00,000 ......
  • 汽车电子零部件(9):智能座舱intelligent cockpit system
    前言:随着问界M9的火爆,智能座舱为代表的新能源汽车替代传统汽车的优势之一的威力逐渐开始兑现。假如一个更安全、零着火的电池还有手机一样的操控体验、从未感受过的自动驾驶,前交流异步电机后永磁同步电机的双电机,这样的一辆新能源汽车还是达成了很多人对未来电车的一个期望......