虚拟化--IO虚拟化基本原理

本文话题:
IO虚拟化概述
设备发现 访问截获 设备模拟 设备共享
基于软件的IO虚拟化
基于前端后端的IO虚拟化
基于硬件的IO虚拟化

概述

从处理器的角度看,外设是通过一组I/O资源(端口I/O或者是MMIO)来进行访问的,所以设备的相关虚拟化被称为I/O虚拟化。其思想就是
VMM截获客户操作系统对设备的访问请求,然后通过软件的方式来模拟真实设备的效果。基于设备类型的多样化,I/O虚拟化的方式和特点纷繁复杂。

一个完整的系统虚拟化方案在I/O虚拟化方面需要处理以下几块

虚拟芯片组

虚拟PCI总线布局,主要是通过虚拟化PCI配置空间,为客户机操作系统呈现虚拟的或是直接分配使用的设备。

虚拟系统设备,例如PIC、IO-APIC、PIT和RTC等。

虚拟基本的输入输出设备,例如显卡、网卡和硬盘等。

I/O虚拟化主要包含以下几个方面的虚拟化

I/O端口寄存器

MMIO寄存器

中断

IO虚拟化

下面具体的描述IO虚拟化需要做的工作

设备发现

设备发现就是要让VMM提供一种方式,来让客户机操作系统发现虚拟设备,这样客户机操作系统才能加载相关的驱动程序,这是IO虚拟化的第一步。设备发现取决于被虚拟的设备类型。

模拟一个所处物理总线的设备,这其中包含如下两种类型。

1)模拟一个所处总线类型是不可枚举的物理设备,而且该设备本身所属的资源是硬编码固定下来的。比如ISA设备、PS/2键盘、鼠标、RTC及传统
IDE控制器。对于这类设备,驱动程序会通过设备特定的方式来检测设备是否存在,例如读取特定端口的状态信息。对于这类设备的发现,VMM在给定端口进行
正确的模拟就可以了,即截获客户机对该端口的访问,模拟出结果交给客户机。

2)模拟一个所处总线类型是可枚举的物理设备,而且相关设备资源是软件可配置的,比如PCI设备。由于PCI总线是通过PCI配置空间定义一套完备
的设备发现方式,并且运行系统软件通过PCI配置空间的一些字段对给定PCI设备进行资源的配置,例如允许或禁止I/O端口和MMIO,设置I/O和
MMIO的起始地址等。所以VMM仅模拟自身的逻辑是不够的,必须进一步模拟PCI总线的行为,包括拓扑关系和设备特定的配置空间内容,以便让客户机操作
系统发现这类虚拟设备。

模拟一个完全虚拟的设备

这种情况下,没有一个现实中的规范与之对应,这种虚拟设备所处的总线类型完全由VMM自行决定,VMM可以选择将虚拟设备挂在PCI总线上,也可以完全自定义一套新的虚拟总线协议,这样的话客户机操作系统必须加装新的总线驱动。

访问截获

虚拟设备被客户机操作系统发现后,客户机操作系统中的驱动会按照接口定义访问这个虚拟设备。此时VMM必须截获驱动对虚拟设备的访问,并进行模拟。

非直接分配给客户机操作系统的设备

对于端口I/O,IO指令本身是特权指令,处于低特权的客户机访问端口I/O会抛出异常,从而陷入到VMM中,交给设备模拟器进行模拟。

对于MMIO,VMM把映射到该MMIO的页表设为无效,客户机访问MMIO时会抛出缺页异常,从而陷入到VMM中,交给设备模拟器进行模拟。

对于中断,VMM需要提供一种机制,供设备模拟器在 接收到物理中断并需要触发中断时,可以通知到虚拟中断逻辑,然后由虚拟中断逻辑模拟一个虚拟中断的注入。

直接分配给客户机操作系统的设备

对于端口I/O,可以直接让客户机访问。

对于MMIO,也可以直接让客户机进行映射访问。

对于中断,VMM物理中断处理函数接收到物理中断后,辨认出中断源属于哪个客户机,直接通知该客户机的虚拟中断逻辑。

设备模拟

上一步中我们已经多次提到,下面分类介绍下设备模拟。

基于软件的全虚拟化

虚拟设备与现实设备具有完全一样的接口定义。这种情况下,VMM的设备模拟器需要仔细研究现实设备的接口定义和内部设计规范,然后以软件的方式模拟
真实逻辑电路来满足每个接口的定义和效果。现实设备具有哪些资源,设备模拟器就需要呈现出同样的资源。这种情况下,客户机操作系统原有的驱动程序无需修改
就能驱动虚拟设备。设备访问过程中,VMM通过截获驱动程序对设备的访问进行模拟。

举例:qemu    VMware Workstation

半虚拟化

给客户机操作系统提供一个特定的驱动程序(称为前端),VMM中的模拟程序称为后端,前端将请求通过VMM提供的通信机制直接发送给后端,后端处理
完请求后再发回通知给前者。与传统设备驱动程序流程(前一种方式)比较,传统设备程序为了完成一次操作要涉及到多个寄存器的操作,使得VMM要截获每个寄
存器访问并进行相应的模拟,就会导致多次上下文切换。这种方式能很大程度的减少上下文切换的频率,提供更大的优化空间。

举例:xen   virtio (virtio接下来我会继续研究,主要包括virtio框架、virtio前端驱动、后端实现方式及原理、前端后端共享内存的方式)

 基于硬件的直接分配(实际上已经不是设备模拟了)

直接将物理设备分配给客户机操作系统,由客户机操作系统直接访问目标设备。这种情况下实际上不存在设备模拟,客户机直接通过原有的驱动操作真实硬件。这种方式从性能上说是最优的,但这种方式需要比较多的硬件资源。

基于硬件的直接分配还有一种方式,硬件本身支持虚拟化,本身可以向不同的虚拟机提供独立的硬件支持,设备本身支持多个虚拟机同时访问。比如SR-IOV。(这种方式接下来我会继续研究)

举例:intel vt-d      SR-IOV

一个VMM中,常常是多种虚拟化方式并存。

不同的IO虚拟化方式对比

设备共享

设备虚拟化中,有些设备可以被软件模拟器完全用软件的方式模拟而不用接触实际物理设备,比如CMOS,而有些设备需要设备模拟进一步请求物理硬件的帮助。一般输入输出类设备,如鼠标、键盘、显卡、硬盘、网卡。这些设备都涉及到从真实设备上获取输入或者输出到真实设备上。

对于多个客户机,每个客户机拥有自己的设备模拟器,多个设备模拟器需要共享同一个物理设备,这种情况下,VMM中的真实设备的驱动程序需要同时接收并处理多个客户或进程的请求,达到物理资源的复用。

点击下面的链接可以进入我自己搭建的博客,查看更多关于虚拟化的文章。

原文链接:http://itblogs.ga/blog/20150111003133/  转载请注明出处
时间: 2024-10-03 06:53:59

虚拟化--IO虚拟化基本原理的相关文章

虚拟化的理论-内存和IO虚拟化

这部分只要介绍下虚拟化技术中的内存虚拟化和IO虚拟化两个部分 内存虚拟化: 上图中的做伴部分是正常情况下内存的使用情况,线性地址到物理地址的一个转换,通常应用程序使用的内存地址是线性地址,需要通过MMU地址转换的一个硬件来实现线性地址到物理地址的一个转换.上图的有半部分是虚拟化情况下内存是如何实现线性地址到物理地址的转换,虚拟机中的OS获得是有Host OS分配的线性地址,Guest OS中的应用程序获取的是相对于Guest os来说的线性地址,那么对于这个线性地址来说最终只能转换成线性地址,无

Virtualization-Cpu/Memory/IO虚拟化详解

一.定义 虚拟化是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机.在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率. 虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程.CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率. 二.虚拟化的类别 虚拟化的类别有很多,定义也很宽泛:无

四种主要网络IO虚拟化模型

本文主要为大家简要介绍VMware.Redhat.Citrix.Microsoft主要虚拟化厂商使用的4种主要的虚拟化IO模型 (emulation.para-virtualization.pass-through.SR-IOV).主要为大家穿针引线,信息量比较大,组织排 版有限,看官们将就点看着. 网络I/O不但是物理服务器最容易出现的瓶颈,也是现在虚拟化技术最大的硬伤.随着硬件虚拟化对网络I/O的支持,虚拟化的网络I/O模型也不断的 进化,虚拟化的I/O性能也不断提升.今天给大家分享VMwa

[虚拟化] CPU虚拟化技术 - Introduction

虚拟化技术的分类主要有服务器虚拟化.存储虚拟化.网络虚拟化.应用虚拟化. 服务器虚拟化技术按照虚拟对象来分,可分为:CPU虚拟化.内存虚拟化.I/O虚拟化: 按照虚拟化程度可分为:全虚拟化.半虚拟化.硬件辅助虚拟化. 将不同的虚拟化对象和程度组合,可得出 9种 不同的服务器虚拟化技术. 首先详细介绍下服务器虚拟化之CPU虚拟化,后续讲解中再详细介绍内存虚拟化及I/O虚拟化. 二.CPU虚拟化 ·CPU全虚拟化技术 主要采用优先级压缩技术(Ring Compression)和 二进制代码翻译技术(

什么是服务器虚拟化,虚拟化的优势!

所谓服务器虚拟化是指将一台物理的计算机软件环境分割为多个独立分区,每个分区均可以按照需求模拟出一台完整计算机的技术.由此,打破实体结构间的不可切割的障碍,使用户可以比原本的配置更好的方式来应用这些电脑硬件资源.这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理配置所限制.为什么要服务器虚拟化,服务器虚拟化的优势是什么?首先降低运营成本,服务器虚拟化降低了IT基础设施的运营成本,是IT运维人员摆脱了繁重的物理服务器.OS.中间件及兼容性的管理工作,减少人工干预频率,使管理更集中更便捷.其次提

KVM上如何让虚拟机支持虚拟化(kvm虚拟化的嵌套)

http://blog.csdn.net/swimming_in_it_/article/details/53320141http://blog.csdn.net/wickedglory/article/details/53264559 首先检查 KVM host(宿主机/母机)上的kvm_intel模块是否打开了嵌套虚拟机功能(默认是开启的):    [email protected]:~# modinfo kvm_intel | grep nested    parm: nested:boo

网络IO的虚拟化模型小结

网络IO的虚拟化模型随着技术发展,出现了多种方式,例如emulation.para-virtualization.pass-through和SR-IOV等,本文试图对其做一个简单的总结. Emulation(仿真): 全虚拟化是最早出现的IO虚拟化方式,效率也最低.以接收网络报文为例,其处理步骤可以简单描述如下: 数据包到达主机物理网卡,向host CPU发出中断.QEMU创建的网桥(br0)它会分析报文目的地.如果目的地是host,调用host的中断处理函数:如果目的地是虚拟机的话将报文转发至

Qemu模拟IO和半虚拟化Virtio的区别以及I/O半虚拟化驱动介绍

QEMU的基本原理和优缺点 基本原理: 使用QEMU模拟I/O的情况下,当客户机中的设备驱动程序(device driver)发起I/O操作请求之时,KVM模块中的I/O操作捕获代码会拦截这次I/O请求,然后经过处理后将本次I/O请求的信息存放到I/O共享页,并通知用户控件的QEMU程序.QEMU模拟程序获得I/O操作的具体信息之后,交由硬件模拟代码来模拟出本次的I/O操作,完成之后,将结果放回到I/O共享页,并通知KVM模块中的I/O操作捕获代码.最后,由KVM模块中的捕获代码读取I/O共享页

虚拟化技术原理(CPU、内存、IO)

本文来自:http://www.ywnds.com/?p=5856 虚拟化 云计算现在已经非常成熟了,而虚拟化是构建云计算基础架构不可或缺的关键技术之一. 云计算的云端系统, 其实质上就是一个大型的分布式系统. 虚拟化通过在一个物理平台上虚拟出更多的虚拟平台, 而其中的每一个虚拟平台则可以作为独立的终端加入云端的分布式系统. 比起直接使用物理平台, 虚拟化在资源的有效利用. 动态调配和高可靠性方面有着巨大的优势. 利用虚拟化, 企业不必抛弃现有的基础架构即可构建全新的信息基础架构,从而更加充分地