虚拟化x86的三种途径
虚拟化x86的三种途径
作者:缪天翔
链接:https://www.zhihu.com/question/20145026/answer/34527331
链接:https://www.zhihu.com/question/20145026/answer/34527331
x86上的全系统虚拟化有三种主要的途径:
- 二进制翻译binary translation(BT),把降权执行会silently fail的指令替换掉,如纯Qemu、Bochs、早期的VMware
- 半虚拟化para virtualization(PV),修改guest操作系统把敏感操作换成hypercall,如早期的Xen
- 硬件虚拟化(HVM),处理器VMX扩展原生支持guest在非根模式运行,如KVM
如果纯粹采用BT方案,理论上可虚拟化的层数是无限的。直白地说,虚拟化可以理解为精确模拟执行guest中的每一条指令,而VMM总可以用若干条指令来模拟guest中的一条指令(大不了就像解释型jvm一样一条一条模拟执行bytecode)。只是guest性能会呈指数级下降。
如果纯粹采用PV,最多只能跑一层。其实PV现在在HVM出来以后就很少使用了,不过PV的思想在SOSP03那时是一大创举,微软为此都向剑桥贡献了XP的代码。
如果纯粹采用HVM,现在KVM已经能做到两层,OSDI10年的Turtles做的就是这个事情,这个也已经被merge到了KVM的mainsteam中。不过Intel和AMD在设计虚拟化扩展的时候并没有将nested virtualization考虑进去,再加上每次VMExit的开销其实非常大,我估计嵌套之后的性能说不定还比不上纯粹的BT方案。但从理论上说,通过复杂的实现,也是可以做到多层嵌套的。(有多复杂?我用L0、L1、L2 、L3来表示各层,L3要做的工作是1,L2要做的就是2^2,L1要做的就是3^2,L0要做的是4^2。。。因为,越是下面的那层要处理所有上层之间的交互,事实上KVM现在两层的实现已经非常复杂了)。
============= End
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2017-12-02 VsCode中使用Emmet神器快速编写HTML代码
2017-12-02 字符串匹配---KMP算法
2017-12-02 字符串子串的查找
2017-12-02 C++:cin、cin.getline()、getline()的用法
2017-12-02 将字符串逆序
2017-12-02 VS2017常用快快捷键
2017-12-02 Windows系统Unity3D中的快捷键