这篇博客准备介绍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. 引用类型之数组array最全的详解

    Array类型 今天总结一下array类型. js中的数组是有着非常强大的功能.具有很大的灵活性,有两个方面的特点 1.数组的每一项可以保存任何的数据类型:2.数组大小可以动态的调整:看下面的例子: ...

  2. 输入和输出--File类

    输入和输出 写在前面的:Java中的输入和输出还是比较重要的,之前我都没想整理IO和多线程的,但是在研究后面的好多东西时候,经常要读取资源文件,这个时候就不得不回过头来整理IO了.要玩熟Java的输入 ...

  3. Intel DPDK 全面解读

    高性能网络技术 随着云计算产业的异军突起,网络技术的不断创新,越来越多的网络设备基础架构逐步向基于通用处理器平台的架构方向融合,从传统的物理网络到虚拟网络,从扁平化的网络结构到基于 SDN 分层的网络 ...

  4. Spring MVC CORS 跨域

    介绍 跨域CORS,全称是"跨域资源共享"(Cross-origin resource sharing) 当页面发出跨域请求时: 简单请求(先简单理解为正常的get/post吧): ...

  5. ferror,clearerr和EOF含义

    1.我们并不是实时操纵文件,也不是实时生效,它依赖于缓冲区.非缓冲模式编程与常规区别,就是实时与不实时的区别. 2.//fgetc fputc, fgets fputs, fgetwc fputwc, ...

  6. NoSQL在大数据中的应用

    一.序言 NoSQL是Not Only SQL的缩写,而不是Not SQL,指的是非关系型的数据库,它不一定遵循传统数据库的一些基本要求,比如说遵循SQL标准.ACID属性.表结构等等.相比传统数据库 ...

  7. ABP官方文档翻译 9.1 EntityFramework集成

    EntityFramework集成 Nuget包 DbContext 仓储 默认仓储 自定义仓储 应用特定的基础仓储类 自定义仓储示例 仓储最佳实践 事务管理 数据存储 ABP可以使用ORM框架,它内 ...

  8. Laravel 5.4.36 session 没有保存成功问题

    session使用注意点 工作中使用的是session默认的文件缓存  在使用过发现  session()->put("key","values")  发 ...

  9. xBIM 应用与学习 (一)

    目录 xBIM 应用与学习 (一) xBIM 应用与学习 (二) xBIM 基本的模型操作 xBIM 日志操作 XBIM 3D 墙壁案例 xBIM 格式之间转换 xBIM 使用Linq 来优化查询 x ...

  10. 读Ghost博客源码与自定义Ghost博客主题

    我使用的Ghost博客一直使用者默认的Casper主题.我向来没怎么打理过自己博客,一方面认为自己不够专业,很难写出质量比较高的文字:另一方面认为博客太耗时间,很容易影响正常的工作内容.最近公司即将搬 ...