这篇博客准备介绍OKL4的研究进展,本文的内容主要根据我个人阅读《OKL4_LongPaper_2010_HW_VM》这篇文章之后的理解,我也根据这篇论文的内容做了一些实验,奈何此论文涉及内容太广,有一些arm硬件我也不太熟,而且由于时间有限,只能做一部分它提到的实验,没做过的实验我会介绍我的分析和理解,如果有问题希望读者批评指正。

这篇论文不会对所涉及的每一个虚拟化名词和技术都展开介绍,读者可以自行Google或者参看ARM文档,我建议读者遇到不懂的部分先通过Google理解大致含义再通过阅读ARM文档深入理解,因为ARM文档对某些内容的叙述实在太不友好,虽然全面但是不能突出重点,内容又多又难理解(其实我想说超级难懂)。

好,闲言少叙,咱们直接进入正题。

总体介绍

这部分主要介绍这篇论文的研究动机(motivation)、相关机构的研究情况(related work)。

首先,这篇文章研究的内容是基于arm最近推出的对硬件虚拟化的支持(2010年),硬件的支持使基于arm平台的虚拟化逐渐向KVM靠拢。以前,没有硬件支持的条件下,由于传统的trap-and-emulate的方式开销过大,人们更倾向于用para-virtualization的方式在arm平台做虚拟化,para-virtualization的方式虽然提高了性能,但是它需要修改guest os的源码,这样做的弊端我在对NOVA的分析中已经介绍过了,读者可以去翻阅一下。有一个事实是,即使有硬件支持的条件下,full-virtualization的性能也不如para-virtualization,如果读者曾经做过虚拟化方面的编码实现,可以思考一下为什么这样。

在讨论arm新增加的virtualization extension之前,我们知道对硬件虚拟化的支持主要有intel的VT-x和AMD的AMD-V,它们两个十分类似,所以这里我们只介绍VT-x,看看它对虚拟化做了怎样的支持(为后面做对比)。

  • 将cpu的模式分为hypervisor(VMX root operation)和guest(VMX non-root operation)。
  • 可以配置一些敏感指令和事件,让它们产生trap。
  • (新增)提供扩展页表(EPT,extended page table),通过这个页表在硬件上完成second-stage of translation,其实就是常说的二级页表翻译。
  • (新增)在TLB上新增加了VM tag去标识每一个虚拟机,这样可以避免每次VM-entry和VM-exit时的TLB flush操作(其实还增加了VPID,去标识VM里虚拟进程的进程id)。
  • (新增)在Intel的 VT-d里增加了对DMA操作的支持,而且是一种安全的DMA(具体怎么实现的安全读者可以自己分析下)。

Inter-VM Communication

不知道读者有没有这样的疑问,为什么不同的guest os需要通信呢?这里引用论文作者的原话“One of the main motivation for communication between guests is to allow a single device to be shared between multiple guests”。作者还举了一个例子,microvisor作为运行在hyp mode的host os,在它的上面运行guest os和一些device driver,然后这些guest os通过hosted device driver与这些外设进行通信,实际上相当于guest os与host os之间的通信。其实这里主要的原因就是有一些外设直接映射给某一个guest os使用了,这个guest os里面有这个设备的驱动,其他guest os想要用这个设备需要和这个guest os进行通信。

guest os运行在non-secure world的kernel mode,其实这个kernel mode是non-secure world的EL1(EL1是processor的特权级,类似于intel下的ring0-ring3)。如何实现guest os之间的通信呢?ARM新增的virtualization hardware feature其中就增加了一条HVC指令,这个HVC指令其实是一个hypercall,它可以使guest os从kernel mode陷入到hyp mode(EL2),两者之间通过寄存器传递参数和返回结果。除了寄存器以外,还可以通过一块在hypervisor里的buffer或者共享页面来通信。其中这里比较关键的是一个VM-ID,可以通过这个VM-ID去标识不同的guest os,这样通信的时候标识通信双方就容易多了。

作者根据以上内容设计了一套通信API,简单来说分为三部分:

  1. 获取VM-ID
  2. 发送信息
  3. 接受信息

接下来作者还加入了一个IRQ唤醒机制,当有消息要发送给某一个guest os时,hypervisor会向这个guest os发一个vIRQ,这样就避免了guest os不断询问hypervisor是否有消息发送给他,而只需要等待接收中断就行了。作者还描述了他设计的一个高效的页面分享算法,其实很简单,一个guest设置一个页面位共享页面,然后通过一个hypercall调用一个共享页面的api,返回一个share id。其他的guest可以通过这个share id把这个共享页面map到自己的地址空间,在这里面他又加入了一些锁机制,保证对共享页面的访问不会出错。

OKL4虚拟化技术跟踪的更多相关文章

  1. 基于SDN的IP RAN网络虚拟化技术

    http://www.zte.com.cn/cndata/magazine/zte_technologies/2014/2014_4/magazine/201404/t20140421_422858. ...

  2. GPU虚拟化技术详解

    GPU虚拟化技术详解 GPU英文名称为Graphic Processing Unit,GPU中文全称为计算机图形处理器,1999年由NVIDIA公司提出. 一.GPU概述 GPU这一概念也是相对于计算 ...

  3. 联想笔记本如何开启笔记本的VT-x虚拟化技术功能

    虚拟化技术支持,需几个方面的条件支持:芯片组自身支持.BIOS提供支持.处理器自身支持.操作系统支持. 操作系统方面,主流操作系统均支持VMM管理,因此无需考虑. 而芯片组方面,从Intel 945( ...

  4. KVM虚拟化技术(七)虚拟机配置文件

    KVM虚拟机的配置文件在/etc/libvirt/qemu/下,为xml文件 整体结构如下: <domain type='kvm'> 虚拟机整体信息 系统信息 硬件资源特性 突发事件处理 ...

  5. Win10下E3-1231 V3开启Intel虚拟化技术(vt-x)安装HAXM

    硬件配置: 技嘉G1 Sniper B6主板,Intel Xeon E3-1231 V3 CPU.主板和U都支持Intel的虚拟化技术,也在主板的设置界面打开了虚拟化支持,如下图: 使用CPU-V检测 ...

  6. 解决在VMware中安装64位系统时“此主机具有虚拟化支持能力的,但虚拟化技术被禁用”的方法

    您已经配置此虚拟机使用64位客户操作系统.然而,64位操作系统不可用.此主机具有虚拟化支持能力的,但虚拟化技术被禁用.这通常是因为虚拟化技术已经在BIOS /固件设置或禁用或主机没有权限改变此设置. ...

  7. 虚拟化技术比较 PV HVM

    很多人看到同样配置的VPS价格相差很大,甚是不理解,其实VPS使用的虚拟技术种类有很多,如OpenVZ.Xen.KVM.Xen和HVM与PV.在XEN中pv是半虚拟化,hvm是全虚拟化,pv只能用于L ...

  8. CPU虚拟化技术(留坑)

    留坑~~~ 不知道这个是这么实现的 CPU虚拟化技术就是单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率.虚 ...

  9. VPS的虚拟化技术—-XEN,KVM,OPENVZ

    市场上的VPS商家主要有 Xen ,KVM 和 OpenVZ 三种开源的虚拟化技术 Xen 是一个开放源代码虚拟机监视器,由剑桥大学开发.它打算在单个计算机上运行多达 100个满特征的操作系统.操作系 ...

随机推荐

  1. 苹果内购服务器验证之receipt返回多组in_app思考

    最近有部分用户反映,苹果内购充值失败,经过测试总结有几个关键点出现问题 1.app购买成功苹果没有返回票据,属于票据遗漏(取决于苹果服务器的响应状况),只能客户端进行监听刷新等处理 2.app连续购买 ...

  2. Spring MVC中使用POI导出Word

    内容绝大部分来源于网络 准备工作 准备[XwpfTUtil]工具类(来源于网络) 准备word模版 下载[XwpfTUtil]工具类 import org.apache.poi.xwpf.usermo ...

  3. linux_DNS

    linux其配置文件 : /etc/resolv.conf nameserver 223.5.5.5 nameserver 223.6.6.6 # 这两个解析地址为阿里云解析地址,格式也是这样 什么是 ...

  4. 创建一个离线优先,数据驱动的渐进式 Web 应用程序

    原文地址:Build an offline-first, data-driven PWA 译文出自:我的个人博客 概述 在本文中,您将学习如何使用 Workbox 和 IndexedDB 创建离线优先 ...

  5. BSA Network Shell系列-runcmd/runscript命令

    runcmd和runscript ## 1 功能概述 runcmd/runscript:runcmd在一台或多台机器执行Network Shell命令(单个命令),而runscript执行的是脚本,二 ...

  6. Tomcat对Struts中的Action进行授权利

    .应用的意义 在某些应用下,如果Action类执行的功能比较重要,可以对该Action类进行授权利以实现只有特定角色的用户能够访问,此时可以在struts-config.xml文件中进行配置   2. ...

  7. java 中的instanceof

    java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. 用法:resu ...

  8. 在vue中优雅地实现简单页面逆传值

    [需求] 要实现的需求很简单,页面从A -> B,用户在B触发操作,将一些数据带回到A页面,在网上找了好久也只看到有人问,但总找不到很好答案.要实现的效果图如下: [联想] 在 ios 开发中, ...

  9. python并发编程之多进程(实现)

    一.multipricessing模块的介绍 python中的多线程无法利用多核优势,如果想要充分的使用多核CPU资源,在python中大部分情况下需要用多线程,python提供了multiproce ...

  10. [UWP]实现Picker控件

    1. 前言 在WPF中,很多打开下拉框(Popup或Flyout)选择一个结果值的控件,除了ComboBox等少数例外,这种控件都以-Picker做名称后缀.因为要打开关闭下拉框和计算下拉框的弹出位置 ...