• 虚拟化x86的三种途径


    虚拟化x86的三种途径

    作者:缪天翔
    链接: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

  • 相关阅读:
    高效DevOps的10项实践
    Qlik Sense Desktop
    CQRS架构
    Scala开发环境搭建与资源推荐
    Scala是一门现代的多范式编程语言
    四种优秀架构
    干净的架构The Clean Architecture
    自动更改IP地址反爬虫封锁,支持多线程(转)
    ActiveMQ源码架构解析第一节(转)
    grails的controller和action那点事---远程调试groovy代码
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/11970443.html
Copyright © 2020-2023  润新知