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个满特征的操作系统.操作系 ...
随机推荐
- Linuxc - Makefile完成项目的管理。
Makefile完成项目的管理. root@jiqing-virtual-machine:~/cspace/les2# ls main.c Makefile max.c max.h min.c min ...
- mysql根据汉字首字母排序[转]
select areaName from area order by convert(areaName USING gbk) COLLATE gbk_chinese_ci asc 说明 ...
- JS 中的事件设计
看懂此文,不再困惑于 JS 中的事件设计 原文出处: aitangyong 抽空学习了下javascript和jquery的事件设计,收获颇大,总结此贴,和大家分享. (一)事件绑定的几种方式 ...
- Linux几个小杂碎点(更新中)
1 BIOS时间和系统时间问题 安装完CentOS后,系统时间是CST时间,而BIOS时间是UTC时间,因此系统时间会比BIOS时间快8个小时.如果您设置BIOS自动开机的话,就会总是差个8小时.需要 ...
- linkin大话数据结构--Collection和Iterator
linkin大话数据结构--Collection和Iterator Java 集合就像一种容器,可以把多个对象的引用放入容器中.Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系 ...
- android Fragment的数据传递
Bundle传递参数 Fragment1 fragment1 = new Fragment1();Bundle bundle = new Bundle();bundle.putString(" ...
- Request和Response
1 简介 web服务器收到客户端的http请求,会针对每一个请求,分别创建一个用于代表请求的request对象和代表响应的response对象. request和response对象既然代表请求和响应 ...
- typedef如何显示变量类型名
dsa typedef unsigned long int NUM; typedef unsigned short int Data; //为已经存在的类型起一个别名 //1.定义一个变量 unsig ...
- Android开发之漫漫长途 Fragment番外篇——TabLayout+ViewPager+Fragment
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...
- Jmeter之性能测试插件PerfMon Metrics Collector监听器,实时监听服务器资源(十四)
Servers Performance Monitoring Introduction During a load test, it is important to know the health o ...