这篇博客准备介绍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到自己的地址空间,在这里面他又加入了一些锁机制,保证对共享页面的访问不会出错。

转载于:https://www.cnblogs.com/miachel-zheng/p/6826736.html

OKL4虚拟化技术跟踪相关推荐

  1. Xen和虚拟化技术学习指南

    1. 引言 现代计算机具有足够强大的能力来利用技术支持多个虚拟机(VM: virtual machines),并且在每个虚拟机上各自运行单独的操作系统实例.这直接导致了虚拟机技术发展的又一个春天.在本 ...

  2. ARM 虚拟化技术简介

    一. 虚拟化技术 二. 虚拟化技术的比较         2.1 全虚拟化和二进制重写(Pure virtualization and binary rewriting)         2.2 半虚 ...

  3. 云边协同关3篇政策与技术跟踪专题文章摘录

    云边协同关3篇政策与技术跟踪专题文章摘录) 云边协同的内涵 一.云边协同的必要性 云计算技术以廉价且大量的计算服务器提供了强大的计算能力,可以为用户和应用提供按需访问的丰富计算资源和存储资源.但云计算 ...

  4. 【重识云原生】计算第2.4节——主流虚拟化技术之KVM

    <重识云原生系列>专题索引: 第一章--不谋全局不足以谋一域 第二章计算第1节--计算虚拟化技术总述 第二章计算第2节--主流虚拟化技术之VMare ESXi 第二章计算第3节--主流虚拟 ...

  5. 从虚拟机到容器,详谈各种服务虚拟化技术及其应用场景

    前言 近几年容器(Container).Kubernetes等技术在数据中心.云计算.各互联网公司的业务服务中得到广泛应用,和20世纪60年代就兴起的虚拟机(Virtual Machine,VM)技术 ...

  6. GPU虚拟化技术详解

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

  7. 虚拟化技术 hyper-v

    在业界,微软Microsoft是当之无愧的软件霸主,不仅仅在操作系统上占据巨大的市场份额,更在数据库.迁入式移动计算.搜索引擎等各个方面都具有很强的影响力,在各个领域都不容忽视.由于低估微软在产品创新 ...

  8. lxc和android的双系统,基于LXC的Android系统虚拟化技术

    近年来云计算[1]的快速发展,虚拟化技术[2]被广泛应用于高性能服务器,以提高系统资源的利用率.同时,随着智能手机等移动终端的普及[3],智能终端扮演着越来越重要的角色,用户对视频.微信.新闻浏览等功 ...

  9. 解析VMware服务器虚拟化技术

    解析VMware服务器虚拟化技术 服务器虚拟化已成为现在的热门话题之一,目前服务器虚拟化市场的领头羊是VMware,另外还有微软和Citrix的实力也不容小视.企业用户在选择服务器虚拟化解决方案之前, ...

最新文章

  1. m2eclipse插件
  2. 主存地址位数怎么算_两位数乘一位数也能口算?对!你没看错,不是特殊情况也行...
  3. lua运行外部程序_一起聊聊redis(5)——c#的lua脚本应用实例之高并发抢口罩
  4. android波纹效果弹窗,Android自定义View实现波纹效果
  5. OpenCV--cvThreshold() 阈值化【转载】
  6. 如何使用SQL Server Microsoft Mobile Publisher创建移动仪表盘?
  7. Delphi2010
  8. 8.《创业邦》:十大创业困境
  9. Jena TDB的使用简介
  10. 笑哭!程序员的23个段子,搞笑又实用!
  11. TypeScript——Web前端开发的救赎
  12. 误把电脑desktop文件删了怎么处理
  13. 华东师范2018研究生复试上机题题解
  14. 如何使用BM25算法检索出最相关的序列
  15. vue+echarts封装日历图
  16. Android内存优化总结实践
  17. 软件工程师薪酬最高的25家公司!!!
  18. Bias/variance tradeoff
  19. 电梯屏只有新潮的一半了!阿里的150亿,能否让分众扛住挑战?
  20. 2022应届生进来,简历模板免费领取

热门文章

  1. Centos 安装sl 命令
  2. 2020年第11届蓝桥杯省赛Python组(真题+解析+代码):数字三角形
  3. 计算机二级C语言中isdigit,C使用带字符串的标准算法,带有isdigit的count_if,函数转换...
  4. 牛逼!Unix之父密码耗时4天终于破解了
  5. 个人比较喜欢的flash小游戏
  6. HBASE RegionServer异常退出 Failed to close inode
  7. C++小工进阶之路 XV(list总结以及deque介绍)
  8. 织梦dedecms调用得到文章所属的副栏目id及副栏目名称网址链接等
  9. Win11如何更改默认下载路径?Win11更改默认下载路径的方法
  10. 西门子工业软件+Mendix,低代码让普通员工秒变技术员,你会被取代吗?