OKL4虚拟化技术跟踪
这篇博客准备介绍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,简单来说分为三部分:
- 获取VM-ID
- 发送信息
- 接受信息
接下来作者还加入了一个IRQ唤醒机制,当有消息要发送给某一个guest os时,hypervisor会向这个guest os发一个vIRQ,这样就避免了guest os不断询问hypervisor是否有消息发送给他,而只需要等待接收中断就行了。作者还描述了他设计的一个高效的页面分享算法,其实很简单,一个guest设置一个页面位共享页面,然后通过一个hypercall调用一个共享页面的api,返回一个share id。其他的guest可以通过这个share id把这个共享页面map到自己的地址空间,在这里面他又加入了一些锁机制,保证对共享页面的访问不会出错。
OKL4虚拟化技术跟踪的更多相关文章
- 基于SDN的IP RAN网络虚拟化技术
http://www.zte.com.cn/cndata/magazine/zte_technologies/2014/2014_4/magazine/201404/t20140421_422858. ...
- GPU虚拟化技术详解
GPU虚拟化技术详解 GPU英文名称为Graphic Processing Unit,GPU中文全称为计算机图形处理器,1999年由NVIDIA公司提出. 一.GPU概述 GPU这一概念也是相对于计算 ...
- 联想笔记本如何开启笔记本的VT-x虚拟化技术功能
虚拟化技术支持,需几个方面的条件支持:芯片组自身支持.BIOS提供支持.处理器自身支持.操作系统支持. 操作系统方面,主流操作系统均支持VMM管理,因此无需考虑. 而芯片组方面,从Intel 945( ...
- KVM虚拟化技术(七)虚拟机配置文件
KVM虚拟机的配置文件在/etc/libvirt/qemu/下,为xml文件 整体结构如下: <domain type='kvm'> 虚拟机整体信息 系统信息 硬件资源特性 突发事件处理 ...
- Win10下E3-1231 V3开启Intel虚拟化技术(vt-x)安装HAXM
硬件配置: 技嘉G1 Sniper B6主板,Intel Xeon E3-1231 V3 CPU.主板和U都支持Intel的虚拟化技术,也在主板的设置界面打开了虚拟化支持,如下图: 使用CPU-V检测 ...
- 解决在VMware中安装64位系统时“此主机具有虚拟化支持能力的,但虚拟化技术被禁用”的方法
您已经配置此虚拟机使用64位客户操作系统.然而,64位操作系统不可用.此主机具有虚拟化支持能力的,但虚拟化技术被禁用.这通常是因为虚拟化技术已经在BIOS /固件设置或禁用或主机没有权限改变此设置. ...
- 虚拟化技术比较 PV HVM
很多人看到同样配置的VPS价格相差很大,甚是不理解,其实VPS使用的虚拟技术种类有很多,如OpenVZ.Xen.KVM.Xen和HVM与PV.在XEN中pv是半虚拟化,hvm是全虚拟化,pv只能用于L ...
- CPU虚拟化技术(留坑)
留坑~~~ 不知道这个是这么实现的 CPU虚拟化技术就是单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率.虚 ...
- VPS的虚拟化技术—-XEN,KVM,OPENVZ
市场上的VPS商家主要有 Xen ,KVM 和 OpenVZ 三种开源的虚拟化技术 Xen 是一个开放源代码虚拟机监视器,由剑桥大学开发.它打算在单个计算机上运行多达 100个满特征的操作系统.操作系 ...
随机推荐
- Django_上传图片和模版获取图片
需求: 在Django中,上传图片,存入数据库中的文件的路径,而不是图片本身,也就是说,图片等数据静态文件都可以放到第三方服务器上,我想在把图片保存到Django本地项目中,并可以通过Django自带 ...
- JS的for循环小例子
1.输出1-100的和 var sum = 0; for(var i=1;i<=100;i++){ sum = sum + i; } document.write(sum); 2.输出1-100 ...
- java利用poi生成/读取excel表格
1.引入jar包依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi< ...
- Request和Response
1 简介 web服务器收到客户端的http请求,会针对每一个请求,分别创建一个用于代表请求的request对象和代表响应的response对象. request和response对象既然代表请求和响应 ...
- 【转】shell字符串截取
shell字符串的截取的问题: 一.Linux shell 截取字符变量的前8位,有方法如下: 1.expr substr “$a” 1 8 2.echo $a|awk ‘{print substr( ...
- word文字覆盖问题
我们在编写word文档时,偶尔会遇到这个问题: 在一个段落中的某个位置修改文字时,直接就把后面的字体给覆盖了,导致后面的句子也不完整了. 解决经过: 之前遇到这种情况,非常恼火,直接新建一个word文 ...
- zookeeper 实现分布式锁
主要是依赖临时节点的特性.数据存储到内存中效率高:例如有web1 web2 两台应用服务器 db1 db2两台db服务器 db互为主备,web1 web2 分别去修改db1 .有限db2库里张三的年 ...
- 使用hexo搭建个人博客
安装前提 node.js git 如果缺少以上条件,则前往相应的官网下载安装即可.. 安装hexo $ npm install hexo-cli -g 待安装完成后,执行相关命令查看hexo的信息. ...
- c# 类属性和方法
属性 public 类字段 就相当于c#里面暴露给外面的属性 类似nodejs的 module.exports 但是属性又不同于普通的字段,属性只是外部包装字段 没有自己的任何含量 类似退换后的方法. ...
- python3中time模块的用法及说明
python中,导入time模块使用的命令是 import time 可以使用以下命令查看time模块内置的能够使用的方法: dir(time) 可以使用以下命令查看time模块中每个内置方法的说明: ...