学习半虚拟化

1、专业术语及英文缩写

Xen(Xen hypervisor):虚拟化解决方案 KVM(Keyboard Video Mouse):通过直接连接键盘、视频或鼠标 (KVM) 端口,能够访问和控制计算机

2、简介

百度百科:https://baike.baidu.com/item/Xen/11050512?fr=aladdin

3、Xen

Xen 是一个开放源代码虚拟机监视器,由剑桥大学开发。它打算在单个计算机上运行多达100个满特征的操作系统。操作系统必须进行显式地修改(“移植”)以在Xen上运行(但是提供对用户应用的兼容性)。这使得Xen无需特殊硬件支持,就能达到高性能的虚拟化。

4、工作原理

在Xen使用的方法中,没有指令翻译。这是通过两种方法之一实现的。第一,使用一个能理解和翻译虚拟操作系统发出的未修改指令的CPU(此方法称作完全虚拟化或full virtualization)。另一种,修改操作系统,从而使它发出的指令最优化,便于在虚拟化环境中执行(此方法称作准虚拟化或paravirtualization)。 

在Xen环境中,主要有两个组成部分。一个是虚拟机监控器(VMM),也叫hypervisor。Hypervisor层在硬件与虚拟机之间,是必须最先载入到硬件的第一层。Hypervisor载入后,就可以部署虚拟机了。在Xen中,虚拟机叫做“domain”。在这些虚拟机中,其中一个扮演着很重要的角色,就是domain0,具有很高的特权。通常,在任何虚拟机之前安装的操作系统才有这种特权。

Domain0要负责一些专门的工作。由于hypervisor中不包含任何与硬件对话的驱动,也没有与管理员对话的接口,这些驱动就由domain0来提供了。通过domain0,管理员可以利用一些Xen工具来创建其它虚拟机(Xen术语叫domainU)。这些domainU也叫无特权domain。这是因为在基于i386的CPU架构中,它们绝不会享有最高优先级,只有domain0才可以。

在domain0中,还会载入一个xend进程。这个进程会管理所有其它虚拟机,并提供这些虚拟机控制台的访问。在创建虚拟机时,管理员使用配置程序与domain0直接对话。

5、与其它VMM的比较

Denali使用准虚拟化技术来提高x86电脑上虚拟机的性能。Denali的虚拟机为因特网服务专门支持了最小化的操作系统。系统可以运行上千虚拟机。Xen与Denali不同,因为它试图运行适当数量的完整操作系统,而非大量轻量级操作系统。

VMware为x86提供虚拟机,这些虚拟机可以运行未修改的PC操作系统。所涉及的技术极为复杂,也导致了性能的(有时相当显著)下降。Xen牺牲了完全的二进制兼容,换取相对的简易性和改善的性能。

KVM在全虚拟化情况下性能优于Xen,但Xen在运行修改过的操作系统时效率更高。

6、半虚拟化

Xen通过一种叫做半虚拟化的技术获得高效能的表现(较少的效能损失, 典型的情况下大约损失 2%, 在最糟的情况下会有 8% 的效能耗损; 与其它使用完全的虚拟化却造成最高到 20% 损耗的其他解决方案形成一个明显的对比),甚至在某些与传统虚拟技术极度不友好的架构上(x86),Xen也有极佳的表现。与那些传统通过软件模拟实现硬件的虚拟机不同,在3.0版本及在Intel VT-X支援前的Xen需要让客户操作系统(guest operating systems)与Xen API进行连接。这样连结已经可以运用在NetBSD, GNU/Linux, FreeBSD和贝尔实验室的Plan 9系统上。在Brainshare 2005会议上,Novell展示了NetWare与 Xen的连通。与Windows XP连通的技术曾在Xen开发初期进行,但微软的协议未能允许它发布。Sun微系统公司也正积极研究Solaris与Xen的连结,使其能在Xen平台上运作。

7、KVM

KVM,是Keyboard Video Mouse的缩写,KVM 通过直接连接键盘、视频或鼠标 (KVM) 端口,能够访问和控制计算机。KVM 技术无需目标服务器修改软件。这就意味着可以在BIOS环境下,随时访问目标计算机。KVM 提供真正的主板级别访问,并支持多平台服务器和串行设备。KVM 技术已经从最初的基础SOHO办公型,发展成为企业 IT 基础机房设施管理系统。可以从kvm 客户端管理软件轻松的直接访问位于多个远程位置的服务器和设备。KVM over IP 解决方案具备完善的多地点故障转移功能、符合新服务器管理标准 (IPMI) 的直接界面,以及将本地存储媒体映射至远程位置的功能。

8、KVM和Xen的区别

KVM:KVM是轻量级的虚拟化管理程序模块,该模块主要来自Linux内核;KVM的虚拟化需要硬件支持,如具有VT功能的Intel CPU和具有AMD-V功能的AMD CPU,KVM只能在具有虚拟化支持的CPU上运行。KVM仅支持全局虚拟化。

Xen:Xen是Linux下的虚拟化解决方案,Xen的实现是基于支持Xen功能的kernel,在Xen控制下的kernel,称之为Domain0,使用kernel启动的机器可以使用qemu软件,虚拟出多个系统。

KVM已经被Linux核心组织写入Linux内核。而Xen是一个外部的Hypervisor程序(虚拟机管理程序),它能够控制虚拟机和给多个客户机分配资源,在KVM被写入Linux内核后,估计Xen很难再被写入内核。而KVM是Linux的一部分, 可使用通常的Linux调度器和内存管理,KVM更小更易使用。

更新版本方面,Xen需要重新编译整个内核,稍有不慎,可能导致系统无法启动;KVM不需要重新编译内核,也不需要对kernel做任何修改(它只是几个可以动态加载的.ko模块)。 KVM和Xen对比来看,KVM结构更加精简、代码量更小,出错率更小;在某些方面,KVM性能要比Xen好一些。 以阿里云为例,阿里云虚拟化技术包括Xen和KVM,新的机器都是KVM,老一代是Xen。

Xen同时支持全虚拟化和准虚拟化,KVM目前不支持准虚拟化。

9、半虚拟化技术

四种虚拟化技术:硬件分区技术、虚拟机技术、准虚拟机技术、操作系统虚拟化技术

准虚拟机技术以Xen为代表。

半虚拟化技术又称为准虚拟化技术,是在全虚拟化的基础上,对客户机操作系统进行修改,增加一个专门的API将客户机操作系统发出的指令进行最优化,即不需要Hypervisor耗费一定的资源进行翻译操作,因此Hypervisor的工作负担变得非常小,而且整体的性能也有很大的提升。

9-1、hypervisor

Hypervisor,又称虚拟机监视器(英语:virtual machine monitor,缩写为 VMM),是用来建立与执行虚拟机器的软件、固件或硬件。 被Hypervisor用来执行一个或多个虚拟机器的电脑称为主体机器(host machine),这些虚拟机器则称为客体机器(guest machine)。hypervisor提供虚拟的作业平台来执行客体操作系统(guest operating systems),负责管理其他客体操作系统的执行阶段;这些客体操作系统,共同分享虚拟化后的硬件资源。

10、Virtio

Virtio 是半虚拟化 hypervisor 中位于设备之上的抽象层。

11、 USB系统结构

USB虚拟化和虚拟桌面USB重定向

一般的USB系统架构可以分为以下三部分:USB主控制器/根集线器、USB集线器和USB设备。

  • USB主机控制器/根集线器(hostcontroller/root hub)
  • USB集线器(USB hubs)
  • USB设备(USB device)

每个USB Hub 最多接5 个USB 设备或者子USB Hub。另外,由于USB Host 对挂载的所有USB 设备采用分时共享机制,受响应时间的限制,整个USB 系统最多只能支持7 层。以USB 主控为第一层,包括最底层的USB 设备为第7 层。一部计算机可以同时连接127个USB设备。

简要说明的是,以前我们的CPU/IO桥是典型的南北桥架构,南桥上面放置的是低速USB的主控制器,在北桥上面放置的是高速的USB主控制器。随着技术的发展,现在我们的CPU/IO桥发生了演变,即CPU和内存之间采用的是NUMA互联技术,同时CPU和IO设备之间,IO设备的控制器全部接入到北桥上面,将南桥上面的所以控制器迁移到北桥上面,同时北桥距离CPU和内存更近,访问速度更快。

12、USB传输流程

当USB设备连接到USB总线之后,USB设备便可以和USB主机进行通信。在通信的过程中,自上而下要涉及4个部分,分别为:

  • 主机软件(应用程序)
  • USB总线驱动程序(Bus Driver)
  • USB主控制器驱动程序(Host Driver)
  • USB功能设备(Device Driver)

1、主机软件将数据保存在发送数据缓冲区中,向USB总线驱动程序发送数据传输请求,即I/O请求包(IRP)。 2、USB总线驱动程序对主机软件的I/O请求包(IRP)进行响应。将其中的数据转化为USB协议中规定的事务处理格式,并将其向下传递给USB主控制器驱动程序。 3、USB主控制器驱动程序将每个事务处理转化为一系列帧/小帧为单位的事务处理队列。这样处理是为了满足USB传输协议的要求,并保证传输不超过USB的带宽。 4、在USB主控制器中,读取事务处理列表,将其中的事务处理以信息包的形式发送到USB总线上。可以使用块传输、中断传输、同步传输和控制传输4种传输方式,同时也可以选择低速、全速和高速3种传输率进行传输。这些传输方式和传输速率我并不准备进行详细解释。 5、USB功能设备的驱动程序接收信息。USB的SIE引擎自动解码信息包,并将数据保存在指定的端点缓冲区中,供USB进行处理。

13、前后端驱动实现USB虚拟化

Xen 在4.0 版本中引入了PVUSB(para-virtual USB driver)技术,PVUSB 技术就是采用Xen 虚拟化平台的前后端驱动模型,支持多个半虚拟化虚拟机同时使用USB 设备,支持设备热插拔等功能,使得虚拟化平台中USB 设备使用的性能和灵活性都得到了很大的提高。

在Linux 内核中,USB 设备驱动包括USB 设备功能驱动,USB 核心驱动和主机控制器驱动。

PVUSB 前端驱动(usbfrontdriver)位于非特权级虚拟域中,是虚拟主机控制器驱动。 PVUSB前端驱动作为PVUSB后端驱动的代理,它会从URB队列(备注:URB 是USB 传输的基本单元)中取出URB,并向后端驱动发送URB。在半虚拟化内核中,USB 功能驱动和USB 核心驱动都没有修改。PVUSB 前端驱动实际上是一个虚拟的驱动程序,它负责和后端驱动通信,并且在虚拟机操作系统中建立一个虚拟的USB 设备树,包括USB 集线器。PVUSB后端驱动(usbback driver)是一种类型的USB 设备驱动,属于USB 驱动架构中的功能驱动,它位于特权域中,负责操作物理主机控制器和设备,并将物理设备分配到客户虚拟机的虚拟USB 设备树中,后端驱动重新创建URB 并将URB 传输给物理设备。客户虚拟机透明地操纵虚拟控制器,与操纵实际的主机控制器一样。用户可以用热插拔的方式将设备连接到虚拟机。在管理域中,管理员可以管理设备与虚拟域的连接。在客户虚拟机中用户可以使用任何设备而不用考虑它们的物理设备总线。

PVUSB 前端驱动作为客户虚拟机USB 主机控制器驱动,属于Linux 系统驱动架构中的USB 主机控制器驱动。它会将URB 队列映射到共享I/O 环,并向后端驱动发出请求。当接收到后端驱动的回应之后,前端驱动更改URB 中的状态标记,然后将URB 返回给USB 核心驱动。PVUSB 后端驱动作为USB 功能驱动,属于Linux 系统驱动架构中的功能驱动程序,在接收到前端驱动的I/O 请求后,会重构URB 请求并将URB 提交给特定的设备。当URB 执行完成之后,后端驱动会将URB 的执行的状态通过共享I/O 环返回给前端驱动。

14、虚拟桌面下的USB重定向技术

USB总线驱动程序(Bus Driver)使用与USB集线器上,是用来识别USB设备的;USB主控制器驱动程序(Host Driver)用于主机和设备间的数据传输。USB功能设备驱动(Device Driver)主要是提供用来控制USB设备,控制USB设备按照命令进行工作。

14-1、USB端口重定向

Bus Driver的是用来识别U盘的,它主要工作在我们的笔记本那个和我们直接插入USB设备的接口处,我们的计算机直接和USB设备进行物理接触的那个USB接口,是一个类似于集线器的USB接口,在接口后面附带有一个内置的芯片,里面安装了Bus Driver。这个我们无法进行虚拟化,也无法写入虚拟的Bus Driver来代替,因此在这三层驱动中,能够被代替的USB驱动层就是Host Driver和Device Driver,而Device Driver一般都是设备厂商提供的外设驱动,是去操控他们自己的USB设备的。

优缺点:USB端口重定向具有良好的设备兼容性。但同时,也正是因为这个原因,USB端口重定向也有一定的局限性,由于没有经过本地设备驱动层的压缩和预处理,对于某些扫描仪和摄像头等图像类应用,可能会导致带宽过大,网络时延敏感等问题。在这种情况下,需要使用到设备重定向技术。

15、paravirtualization

PV驱动程序

16、在KVM上的Windows中安装Virtio驱动程序

参考:https://blog.csdn.net/weixin_42892543/article/details/122854919

Virtio驱动程序是KVM虚拟机的半虚拟化设备驱动程序。 半虚拟化驱动程序可提高机器性能,减少I / O延迟并将吞吐量提高到接近裸机水平。 对于完全虚拟化的计算机,建议使用半虚拟化驱动程序。 大多数Linux发行版都包含virtio驱动程序作为标准配置。本指南说明了如何在Windows中安装它们。 本指南是为Zetastack用户编写的,但适用于在KVM主机上运行的任何Windows guest虚拟机。 其中包括Nutanix,红帽虚拟化(RHEV),Proxmox VE,oVirt和OpenStack。

下载ISO: https://dl.fedoraproject.org/pub/alt/virtio-win/ https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso

https://zhuanlan.zhihu.com/p/544929021

results matching ""

    No results matching ""