虚拟化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

虚拟化x86的三种途径的更多相关文章

  1. iOS用三种途径实现一方法有多个返回值

    以前觉得这种标题有点偏向于理论,实际开发中怎么会有这种诡异的需求,但是真正遇到了这种硬需求时觉得还是有那么点价值的,理论付诸了实践在此也就做了个整理. 以我私下开发中的一处代码为例,本意是希望有这么一 ...

  2. C#生成XML的三种途径

    C#生成XML的三种途径 为了全面,这里都将XML保存到文件中,有三种生成XML的方式: 1.我认为是最原始,最基本的一种:利用XmlDocument向一个XML文件里写节点,然后再利用XmlDocu ...

  3. ENVI/IDL与ArcGIS集成开发的三种途径

    转载:本文来自ENVI5.0-IDL8.2系列产品白皮书_201303.PDF(Esri中国官网可下载)中P7-P10 ENVI 是一个非常开放的平台,提供一个健全的函数库,几乎涵盖ENVI 平台大部 ...

  4. Java swing: 实现ActionListener监听器的三种途径

    Swing是目前Java中不可缺少的窗口工具组,是用户建立图形化用户界面(GUI)程序的 强大工具.Java Swing组件自动产生各种事件来响应用户行为.如当用户点击按钮或选择菜单项目时,Swing ...

  5. 获取Filter的三种途径

    一.通过CLSID [cpp] view plaincopyprint? IBaseFilter *pF = 0; HRESULT hr = CoCreateInstance(clsid, 0, CL ...

  6. GPS轨迹数据可视化的三种途径

    有一阵子没写过博客了,最近因为自己小队申请了项目有并且要帮研究生做一些数据处理的小任务,接触到可视化.这里介绍最近学到的了三种方法. 第一种是用python. 这里原理是用matplotlib里面的s ...

  7. [转载]WebService服务的三种途径Endpoint Disco WSDL 有什么不同

    Endpoint: http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx   web服务的URI地址,你访问之后,就会出现web服务的相 ...

  8. Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式

    Linux就这个范儿 第15章 七种武器  linux 同步IO: sync.fsync与fdatasync   Linux中的内存大页面huge page/large page  David Cut ...

  9. 云计算的三种服务模式:SaaS/PaaS/IaaS

    转载http://blog.chinaunix.net/uid-22414998-id-3141499.html 定义 云计算主要分为三种服务模式,而且这个三层的分法重要是从用户体验的角度出发的: S ...

随机推荐

  1. flask实战-个人博客-视图函数

    视图函数 在上面我们创建了所有必须的模型类.模板文件和表单类.经过程序规划和设计后,我们可以创建大部分视图函数.这些视图函数暂时没有实现具体功能,仅渲染对应的模板,或是重定向到其他视图.以blog蓝本 ...

  2. 预计阅读时间核心jS代码

    <script type="text/javascript"> jq(document).ready(function() { var read_time=jq(&qu ...

  3. java、python及jmeter操作redis(接口自动化必备)

    redis是nosql数据库之一,其存储结构简单,提供高性能服务,所以在架构中是很常用的. 在做接口自动化测试过程中,有时也会涉及到redis,比如:发送短信验证码,我们做接口自动化测试,如何模拟发送 ...

  4. 进程及Python实现

    进程杂谈 #进程就是正在执行的一个过程,是对正在运行程序的一个抽象 #进程由程序.数据集和进程控制块(最重要的,进程切换 状态如何保存,恢复和记录)组成 """ 进程调度 ...

  5. LeetCode 1146. Snapshot Array

    原题链接在这里:https://leetcode.com/problems/snapshot-array/ 题目: Implement a SnapshotArray that supports th ...

  6. uname 命令简介

    [root@localhost root]# uname --help Usage: uname [OPTION]... Print certain system information. With ...

  7. 我对网络IO的理解

    Unix/Linux系统下IO主要分为磁盘IO,网络IO,我今天主要说一下对网络IO的理解,网络IO主要是socket套接字的读(read).写(write),socket在Linux系统被抽象为流( ...

  8. IOCP另一种实现

    参考 https://docs.microsoft.com/zh-cn/windows/win32/api/winbase/nf-winbase-bindiocompletioncallback ht ...

  9. 20165214 2018-2019-2 《网络对抗技术》Exp8 Web基础 Week11—12

    <网络对抗技术>Exp8 Web基础 Week11-12 一.实验目标与内容 1.实践内容 (1).Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与P ...

  10. 使用MobaXterm配置ssh隧道(port forwarding)

    背景描述:如图所示,本地与远程服务器之间存在防火墙,防火墙只允许SSH端口通过,为访问远程服务器,我们可以借助MobaXterm来与SSH服务器建立隧道,使得防火墙外的用户能够访问远程服务器 具体配置 ...