KVM虚拟平台

2024-07-31

KVM虚拟平台(精选五篇)

KVM虚拟平台 篇1

KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机)。是x86架构且硬件支持虚拟化技术(如in-tel VT或AMD-V)的Linux全虚拟化解决方案。它包含一个为处理器提供底层虚拟化可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)。KVM还需要一个经过修改的QEMU软件 (qemu-kvm),作为虚拟机上层控制和界面。KVM能在不改变linux或windows镜像的情况下同时运行多个虚拟机,(它的意思是多个虚拟机使用同一镜像)并为每一个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器……)。在主流的Linux内核, 如2.6.20以上的内核均已包含了KVM核心。

KVM提供了图像界面的管理接口(Virtual Machine Manag-er)和命令行式的管理接口(virsh)。可以根据使用的场景采用不同的方式,当然也可以使用Libvirt库进行管理虚拟机,并且使用libvirt库进行虚拟机的管理是业界很推崇的做法,这都源于libvirt库良好的移植性和强大的API,并且提供了多种语言接口(如C语言,python语言,JAVA语言,C#语言和PHP语言) 能对Xen,KVM以及QEMU等多类虚拟机进行管理管理。详情可参考其官网:http://libvirt.org/。

现在公司在搭建自己的web服务时,传统往往需要多台服务器,一般至少都需要3台,分别为web服务器、数据库服器、文件服务器。如果我们收入kvm虚拟化技术、至少只需要一台物理服务器即可解决问题,不仅方便了服务器的集中管理和降低了硬件上的成本,也更是节约了服务器的托管与维护费用。

2实验环境

2.1实验条件

llinux物理机(Centos 6.3)

lkvm虚拟机软件包

llinux系列操作系统(本例中采用Centos 6.3)

2.2实验拓扑图

3实验步骤

3.1宿主服务器上为linux系统(Centos 6.3),我们首先需要在宿主服务器上安装kvm虚拟机。安装之前先查看物理机(主要是CPU)是否支持虚拟机技术。可以使用如下的命令进行查看,如果输出的结果不为空,则表示服务器的cpu支持虚拟化技术。

[root@physic_srv ~]# cat /proc/cpuinfo |grep "vmx|svm"

flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc up arch_perfmon pebs bts xtopology tsc_re-liable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq vmx ssse3 cx16 sse4_1 sse4_2 popcnt aes xsave avx hypervisor lahf_lm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi ept vpid

(1)linux系统主要通过查看服务器的cpu信息来查看cpu是否支持虚拟化。其中svm是AMD的虚拟化技术、vmx是IN-TEL的虚拟化技术。

3.2在宿主服务器上安装kvm虚拟机所需的依赖及软件包。

(1)kvm虚拟机的软件包包括如下软件包组

(2)上面我们仅仅是安装了kvm核心软件包组、及客户端、 工具包等,如果要使kvm虚拟机正常工作的话、我们还需要安装如下两个软件包

[root@physic_srv ~]# yum install - y qemu- guest- agent qe-mu-kvm-tools

(3)kvm虚拟机是通过libvirt库进行管理的,在使用kvm虚拟之前,先得将宿主机上的libvirtd服务启动起来。

3.3创建虚拟机,安装Centos 6.3系统,可以先安装一台web服务器,然后db服务器、和文件服务器可以通过克隆web服务器完成

(1)关于web服务器的系统的安装过程这里忽略,和平时安装系统的方法一样。安装完成后,我们可以通过命令查物理机上的kvm虚拟机。

(2)默认情况下,web服务器的磁盘文件位于/var/lib/libvirt/images目录,如我们要克隆web服务器为db服务器和文件服务器。可以使用kvm的克隆命令。

[root@physic_srv ~]# cd /var/lib/libvirt/images

[root@physic_srv images]# virt-clone -o kvm00 -n kvm01 -f kvm01.img

[root@physic_srv images]# virt-clone -o kvm00 -n kvm02 -f kvm02.img

(3)这样我们便快速的安装好了web服务器、db服务器、文件服务器、我们只需要根据企业的需要来使用这三台服务器即可。

4结束语

通过在一台物理服务器上使用kvm虚拟化技术,分别虚拟出企业所需的web、db、file三台物理服务器,不节约了公司的硬件成本,方便地了服务器的集中管理。虚拟机服务器还可以使用私有地址,在宿主机作ip转发、及端口映射、也使得能企业web系统安装、及高性能。使得物理服务器上的资源得到充分的利用。

摘要:该文解释了基于硬件虚拟化技术解决方案Kernel-based Virtual Machine(kvm)的系统架构,分析了kvm虚拟机的配置、创建以及数据统一集中管理,如针对企业数据中心应用数量庞大、环境复杂的情况下,详细给出了通过kvm解决了上述问题的虚拟化设计方案,并通过一个案例具体说明了虚拟化部署过程中的重点及注意事项,该方案不但能满足企业正常进行的需求,成本低廉,而且能提高服务器的稳定性和利用率,降低数据中心的硬件维护成本和复杂度。

关键词:虚拟化,kvm

参考文献

[1]linux系统下kvm虚拟机的安装.http://www.cnblogs.com/5201351/p/4440147.html

桌面虚拟设计平台走向实用 篇2

工程VDI使用基于桌面虚拟技术的先进图形处理功能,允许工程师访问服务器内的虚拟三维CAD工作站,并且在桌面环境上控制这些服务器。通过该技术,日产能够在服务器内储存最新数据,供分布在全球各地的各个团队随时访问,从而提高生产力和可用性,同时提高成本效率和灾难风险管理能力。

该全新平台是一个可全面扩展的下一代汽车设计解决方案,其服务器具备最先进的图形处理功能,并提供高性能存储、软件和网络加速技术,能支持企业在全球范围内采用工程VDI。在初始阶段,日产将在两个开发中心应用此平台,即日产北美技术中心和日产欧洲技术中心。日产希望通过该平台使分布于全球各地的站点获得相同的CAD生产力,并通过整合与改进基础架构管理,来大幅降低与未来系统增强、版本升级和经营成本相关的成本。此外,由于该平台能够灵活地应用于全球汽车开发,日产还计划在未来更广泛地对其进行推广应用。

惠普企业公司(HPE)的创新型端到端工程VDI解决方案,包括硬件、软件、咨询和支持服务。惠普企业公司先后在日本、美国和欧洲组建了项目团队来部署、验证和测试该解决方案,为日产顺利实施并最终建立一个灵活、快速的可靠系统提供了强有力保障。

工程VDI解决方案包含下列惠普企业公司的技术:

HPE ProLiant WS460c Graphics Server Blades:提供工作站级高性能图形,为工程师提供一个集中的虚拟化全保真桌面体验,包括支持要求严苛的三维图形应用。

HPE 3PAR StoreServ 7400 Storage:允许日产在一个单一的、扩展性极高并且功能强大的一级储存平台中储存和管理来自下一代汽车设计解决方案的数据。

HPE Svstems Insight Manager:允许轻松管理日产的IT基础设施,增加全球各个团队的系统正常运行时间。

此外,该解决方案还利用了Citrix XenDesktop桌面虚拟技术。

日产工程VDI解决方案的软件技术基础由Siemens PLMSoftware提供。Siemens PLM Software的NX软件是日产计算机辅助设计(CAD)解决方案的核心,应用于汽车工程和开发的全过程。为了确保高VDI性能,NX已在该系统所必需的全部硬件上通过了认证。此外,Siemens PLMSoftware的Teamcenter软件还是日产VDI解决方案的数字骨干网。作为综合性产品数据管理系统,Teamcenter支持所有相关人员随时随地便捷快速地访问与产品相关的所有信息。

日产的目标是整合全球汽车设计开发,提高生产力和管理效率。日产首席信息官兼全球IS/IT负责人CelsoGuiotoko认为:“随着全球项目的增加,IT的重要性越来越突出。基于我们的全球IS/IT战略,日产将专注于在管理和IT之间建立连接,使IT为日产带来更多业务价值。”

用KVM虚拟化网络服务 篇3

单位的服务器设备大都是2009年左右采购的, 早已进入淘汰期, 受经费的限制, 一直没有得到更新。虽然在管理员的精心维护之下, 这些设备大部分还在正常运行, 但由于单位的门户网站、数据中心、电子邮件等重要服务都安装在这些设备之上, 管理维护的压力越来越大。不久前, 单位终于购进了两台配置较高的服务器 (E5-2620V3×2, 64G, 1T×6) , 除有一台必须安装指定服务外, 还有一台服务器可以自由支配。怎样将单位重要的网络服务安装在一台服务器上面, 同时又要兼顾维护方便呢?笔者不禁打起了服务器虚拟化的主意。

目前, 常见的服务器虚拟化解决方案有基于Linux系统的KVM, 基于Windows系统的Hyper-V, 以及适合任何系统的老牌虚拟化软件VMware。由于单位的门户网站、数据中心和电子邮件都是基于Linux系统, 从兼容性和经济性方面考虑, 笔者准备采用基于Linux系统的KVM解决方案。

安装配置KVM服务器

KVM服务器系统我们准备采用最新的Cent OS7, Cent OS是RHEL (Red Hat Enterprise Linux) 源代码再编译的产物, 而且在RHEL的基础上修正了不少已知的Bug, 相对于其他Linux发行版, 其稳定性值得信赖。

1. 安装Cent OS系统

从Cent OS官方网站下载最新的DVD版本, 刻录DVD光盘或者写入优盘进行系统安装。在安装过程中我们需要注意以下几点:系统默认语言尽量选择英语, 如果选择中文, 将来使用VNC远程管理的时候会出现乱码。软件选择使用“最小虚拟化主机” (如图1) , 其他软件需要的时候再安装。手动配置硬盘分区, 根据自己的需要, 可以为虚拟机划分单独的硬盘空间 (比如划分单独的/data分区) 。

系统安装完毕以后, 首先运行yum update更新一下系统, 将系统升级到最新, 然后运行以下命令, 查看是否已经在BIOS中开启了VT。

#lsmod|grep kvm

如果在命令输出中包含kvm 525409 1 kvm_intel等字样, 说明已经开启了VT, 否则就要重启系统进入BIOS进行设置, 启动VT功能。

2. 配置桥接网络

KVM虚拟机支持多种网络模式, 比较常用的是Bridged (桥接模式) 和NAT (网络地址转换模式) , 我们需要虚拟机具备和独立主机相同的功能, 可以与其他机器互相访问, 所以在这里我们选择Bridged (桥接模式) 。

(1) 复制ifcfg-enp2s0f0 (每台服务器的网卡名称不一样, 以自己的名称为准) 配置文件为ifcfg-br0, 并将ifcfg-br0修改为如下配置:

TYPE=Bridge

#桥接模式

#服务器的IP地址

(2) 原网卡ifcfgenp2s0f0配置文件只需要保留以下内容, 其他全部注释掉:

(3) 重启网络让桥接模式生效

3.安装图形界面

作为网络服务器, 一般不用安装图形界面, 但考虑到使用virt-manager在图形界面下管理虚拟机非常方便, 加之以后可能需要使用VNC远程管理KVM服务器, 所以安装一个最基本的图形界面还是非常有必要的。

(1) 安装virt-manager管理工具

#yum install virtmanager

(2) 安装图形界面

(3) 设置系统默认启动图形界面

如果不想让KVM服务器默认启动图形界面, 这一步可以不做设置, 当需要启用图形界面的时候, 输入startx即可。

(4) 重新启动系统

#reboot

服务器重启之后, 我们就有一个具备图形界面的KVM服务器了。

转化物理机为KVM虚拟机

KVM服务器安装完毕以后, 就可以根据需要建立自己的虚拟机了。如何将正在运行的服务器平滑地迁移到KVM虚拟机, 这是我们面临的一个大问题。所幸, Red Hat已经为我们研发了virt-p2v这个将物理机转化为虚拟机的工具, 它可以通过SSH连接物理机和转化服务器 (转化服务器也可以安装在KVM服务器上面) 对目标服务器进行在线迁移。

1.准备迁移环境

(1) 安装转化服务器

#yum install virtv2v

转化服务器可以单独安装, 也可以和KVM服务器安装在一起, 为方便起见, 我们将转化服务器安装在KVM服务器上面。

(2) 制作virt-p2v迁移工具

从这个网站 (http://oirase.annexia.org/virtp2v/) 下载最新的P2V光盘镜像文件, 然后刻录光盘或者写入优盘待用。

(3) 配置转化服务器sshd服务

修改/etc/ssh/sshd_config配置文件, 并做如下修改:

Allow Tcp Forwarding yes#允许tcp转发

P e r m i t R o o t L o g i n yes#允许root用户登录

启动sshd服务

#systemctl start sshd.service

查看sshd运行状态

#netstat-anput|grep ssh

2. 迁移目标服务器

将P2V工具光盘或者优盘接入目标服务器, 然后设置目标服务器从光盘或者优盘启动, 进入P2V配置界面 (如图2) , 输入转化服务器IP地址、用户名和密码 (在这里我们使用root账号) , 勾选“Use sudo when running virt-v2v”, 然后点击左下角的“Configure network...”为P2V工具设置一个可用的局域网IP地址。最后, 点击“Test connection”检查一下SSH是否可以连接, 如果出现“connected to the conversion server”的提示, 说明P2V工具已经成功连接到转化服务器。

点击“next”进入配置虚拟机界面 (如图3) , 在这里我们可以根据自己的实际情况, 配置虚拟机的名称、CPU数量和内存大小, 勾选需要进行转化的目标服务器上的所有磁盘和网络接口 (如果P2V工具使用优盘启动, 不要勾选转化优盘) 。

需要特别注意的是, 在Virt-v2v输出选项卡中, Output to支持很多类型, 比较常用的是local和libvirt。如果转化服务器和KVM服务器安装在一起, libvirt选项可以直接生成正常运行的虚拟机;如果你想指定存放路径, 手工添加虚拟机, 可以选择local类型, 然后在Output storage里面指定路径。Output format支持raw和qcow2两种虚拟文件格式, P2V工具默认输出raw格式, 不要试图修改输出格式为qcow2, 否则会在转化过程中出错。如果想在虚拟机中使用qcow2格式, 可以在转化完成后再进行设置。这里我们选择输出类型为libvirt, 其他选项保持默认即可, 注意勾选“Enable server-side debugging”选项, 以便出错时我们可以进行调试工作。

虚拟机配置全部完成后, 就可以点击“Start conversion”按钮进行转化了, 根据网络速度和硬件配置的不同, 转化物理机所需的时间也不尽相同, 一般说来, 一块300GB容量的磁盘需要转化8-10个小时的时间。您可以根据自己的实际情况, 安排在晚上或者周末进行服务器的迁移工作, 尽量减少服务器的宕机时间。一旦迁移工作完成, 应该马上关闭目标服务器, 如无必要就不要再重新启动它。

登录KVM服务器, 会发现我们转化物理机生成的虚拟机已经可以正常运行了, 只是它的虚拟文件系统是raw格式, 如果需要快照功能, 那么qcow2格式也许更加适合你, 两种虚拟文件格式的性能差距已经很小, qcow2格式完全可以满足我们的需要。使用如下命令可以将raw格式的虚拟文件转换成qcow2格式:

#Qemu-img convert-f raw-O qcow2 raw文件名qcow2文件名

虚拟文件格式转换完成后, 记着在虚拟机的虚拟硬件列表中将虚拟磁盘的格式由raw更改为qcow2, 然后重新启动虚拟机。

安装配置远程管理工具

到目前为止, 我们已经有了一台正常运行的KVM服务器, 通过virt-manager软件, 可以在图形界面下完成对虚拟机的克隆、安装、调试和开关机等绝大部分操作。不过, 这些操作必须在机房里才可以进行, 安装维护极为不便, 为此我们需要安装VNC远程管理工具。

1.安装配置VNC服务器

(1) 安装VNC服务器

#y u m i n s t a l l tigervnc-server-y

(2) 修改VNC配置

VNC配置文件在/etc/systemd/system目录下, 我们可以将/lib/systemd/sytem/vncserver@.service模板文件复制一份到该目录下并修改名称。

#cp/lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service

然后打开配置文件/etc/systemd/system/vncserver@:1.service替换掉默认用户名, 找到下面这一行:

E x e c S t a r t=/s b i n/runuser-l<USER>-c&quot;/usr/bin/vncserver%i&quot;

P I D F i l e=/h o m e/<U S E R>/.vnc/%H%i.pid

这里需要用root账号登录, 所以替换成:

不建议使用普通账号登录VNC, 因为容易产生各种错误。

(3) 重新加载systemd

#systemctl daemonreload

(4) 设置VNC密码

#vncpasswd

确保输入的密码多于6个字符。

(5) 关闭和禁止防火墙

#systemctl stop firewalld.service

#关闭防火墙

#systemctl disable firewalld.service

#禁止开机启动防火墙

(6) 开启VNC服务

(7) 使用客户端连接VNC

现在, VNC服务器的安装已经完成, 不过要连接到VNC服务器, 我们还需要在本地计算机上安装仅供连接远程计算机使用的VNC客户端。你可以用像Tightvnc viewer和Realvnc viewer此类的客户端来连接到VNC服务器 (如图4) 。

如果需要更多的用户连接VNC服务器, 那就需要创建新的配置文件和端口。请返回到第二步, 添加一个新的用户和端口。你需要创建类似vncserver@:x.service的配置文件, 并替换该文件里的用户名和之后步骤里相应的文件名、端口号, 并确保登录VNC服务器用的是之前配置VNC密码的那个用户名。

2. 其他常用命令

(1) 自动开启虚拟服务

#Systemctl enable libvirtd

(2) 查看虚拟机名称及状态

#virsh list--all

(3) 让虚拟机开机自动启动

#virsh autostart虚拟机名称

设置完成后, 可以在/etc/libvirt/qemu/autostart下看到已设置自动启动的KVM配置文件链接。

经验总结

KVM虚拟平台 篇4

随着虚拟化技术的发展,桌面虚拟化方案已经在X86硬件架构上取得了显著成果,并且逐渐成为当前云计算发展和研究的一个热点方向,在并行计算、大数据存储、虚拟云桌面方面得到了广泛应用[1]。

虚拟化技术针对底层硬件资源实现资源的虚拟、共享和隔离,具有安全性高和对上层用户透明的特性。目前,虚拟化技术在视频显卡访问方面还面临很大挑战,很多研究人员采用基于远程应用编程接口的方法开发出针对视频显卡的虚拟化框架,从而实现虚拟机对于显卡的访问,但是这种方法在应用中需要虚拟机与宿主机之间进行大量的图像数据传输,严重影响了物理显卡使用性能。如何通过改进和优化虚拟化方案提升虚拟机内部访问硬件显卡的性能是本文研究的重点[2]。

本文针对视频显卡在虚拟化环境中的应用需求和存在的问题,从图像数据传输量和传输机制方面入手,提出一种基于KVM虚拟化的显卡直传技术,解决虚拟机共享物理显卡的性能问题。

1 KVM虚拟机技术概述

KVM全称是Kernel Virtual Machine,即基于内核的虚拟机,是一个开源的虚拟化模块。KVM是由以色列的名为Qumran的开源组织提出的基于硬件虚拟化的实现方案。KVM虚拟化方案包括内核模块和处理器模块两个部分。其中,内核模块由kvm.ko文件来提供核心的虚拟化实现;处理器模块由kvm-intel.ko和kvm-amd.ko文件分别提供对Intel处理器和AMD处理器的虚拟化技术支持。Linux内核通过加载KVM模块成为VMM即虚拟机监控器,而KVM模块借助Linux内核完成程序的调度、内存管理等。

1.1 KVM虚拟化实现

KVM虚拟化技术作为VMM的实现方案,有两种模式:Kernel模式和User模式,分别对应VMX模式下的特权级0和特权级3。Kernel模式下运行的是KVM内核模块,User模式下运行的是QEMU模块。而KVM虚拟机运行在VMX的非根模式即Guest模式。KVM虚拟化技术的工作模式如图1所示。

利用硬件虚拟化VT-x技术,KVM为每一台虚拟机分配多个vCPU即虚拟处理器,其中一个vCPU对应QEMU的一个线程,KVM虚拟机的生命周期主要是vCPU的创建、初始化、运行以及推出处理,这些都是在QEMU的上下文环境中完成的,需要KVM的Kernel、User和Guest三种模式配合实现,Kernel模式与User模式之间以系统调用ioctl的方式进行交互和通信,而内核模块与虚拟机内部进程之间通过VM Entry和VM Exit指令操作完成切换[3,4]。

1.2 KVM虚拟化的特点

作为基于Linux内核的全虚拟化解决方案,不同于半虚拟化方案,KVM能够提供基于X86架构的完整硬件平台,包括处理器、硬盘、内存、网络适配器以及外围设备等,同时虚拟机操作系统不需要作任何的修改便可运行X86平台上的应用软件。因此KVM虚拟化技术的主要优势有:1KVM是开源的虚拟化解决方案,虚拟机开发成本低;2KVM模块整合在Linux系统内核中,可以兼容内核中的硬件驱动;3 KVM具有优良的系统性能和稳定性[5,6]。

2 虚拟化中的显卡直传技术

KVM虚拟化实现架构中,虚拟机需要访问QEMU模拟仿真出来的外围设备,而这个处理过程需要通过虚拟化中间层传递和处理,才能将真实数据发送给物理硬件设备来处理。对于低速设备来说,这种实现方案能够满足其数据传输和处理的要求的,但是对于显卡虚拟化来说,对于性能要求极为严格,因此本文采用显卡直传方式将物理显卡地址直接、隔离地分配给每一台虚拟机独占式访问,虚拟机内部操作系统可以直接驱动底层物理显卡,进行内存映射输入输出访问或者直接内存访问操作。图2为显卡直传处理与QEMU模拟仿真显卡实现架构对比,可以看出,直传技术能够满足虚拟机调用物理显卡驱动实现图像显示,最大化发挥显卡性能。

2.1 显卡直传技术原理

KVM虚拟机要实现PCI设备直传,需要考虑以下问题:1如何对PCI设备的配置空间进行映射;2如何映射PCI设备的内存和I/O资源;3如何实现PCI设备中断请求的映射;4如何实现设备的直接内存访问。

KVM虚拟化方案可以通过软件映射机制很好地实现PCI设备的前3个问题,而对于物理显卡的DMA操作,由于DMA本身的技术机制,KVM虚拟化难以用软件实现。

DMA可以实现外设与系统之间的高速数据传输,外设绕过中央处理器对内存进行直接内存读写访问,传输前申请一个能够被DMA访问的地址空间,然后发送传输指令进行DMA操作。DMA的传输机制对于物理机来说是可行的,因为操作系统会为驱动分配一段独立的地址空间,但是在KVM虚拟化环境中,采用影子页表实现虚拟机物理地址到宿主机物理地址的映射,驱动申请获取的地址不是宿主机的物理地址,这样DMA操作必然会引发系统崩溃。

利用硬件辅助虚拟化技术,比如Intel的VT-d和AMD的IOMMU技术来实现DMA操作在KVM虚拟化中的运用,借助北桥中内置的DMA虚拟化和IRQ虚拟化硬件来维护一张DMA重映射表,当外设需要进行DMA操作时,查询DMA重映射表,映射成虚拟机物理地址对应的宿主机真实物理地址,从而实现DMA虚拟化。

2.2 显卡直传技术实现

KVM虚拟机直接访问物理显卡前,需要通过QEMU注册一个pci-assign的特殊qdev虚拟设备。这类虚拟设备专门用来进行PCI设备直接访问,这里将显卡注册为pci-assign虚拟设备,在虚拟机内部所有对此类设备的MMIO访问都会被映射到真实物理设备上,当KVM启动时,将显卡的BDF号作为参数传递给KVM,完成显卡设备到虚拟机的注册。

要实现物理显卡的直传需要将显卡挂接到独立的PCI总线上,而QEMU默认只虚拟一根PCI总线。这根总线上挂接有网卡、硬盘、CD-ROM驱动器等设备。为保证显卡独占式使用PCI总线,修改QEMU源码,在初始化虚拟机系统总线是,注册2个QEMU虚拟PCI桥设备,即总线1和2,然后修改显卡设备的实现,直接将显卡的BDF号注册到总线上,实现虚拟机内部显卡驱动直接访问物理显卡的目的。

实现显卡直传的关键是将宿主机的预留内存和输入输出地址空间映射到虚拟机对应的地址空间中,利用Linux系统中的设备文件/dev/men,在QEMU为虚拟机分配完内存后,将宿主机特殊的预留内存使用mmap方法直接映射到虚拟机的内存空间偏移处,而输入输出端口地址空间的映射,通过注册I/O读写函数,函数向宿主机的I/O端口发送读写操作的指令。

3 结语

本文介绍了虚拟化技术在视频显卡应用方面的现状,当前主要采用远程调用编程接口的方式实现对物理显卡的访问,但是由于需要虚拟化中间层的传递严重影响了图像显示效率。针对此问题,本文从图像数据传输量和传输机制方面入手,基于KVM虚拟化进行了二次开发和优化,提出一种显卡直传技术。首先给出KVM虚拟化的原理和实现,然后提出解决显卡虚拟化需要解决的几个问题,显卡直传技术利用直接地址映射将物理显卡地址空间映射到虚拟机内存空间,虚拟机内部实现驱动直接访问物理显卡的要求,虚拟机运行表明显卡直传提升了视频图像显示的性能。

参考文献

[1]杨培.虚拟桌面管理的研究及应用[D].南京:南京理工大学,2011.

[2]周平,马捷中.基于开源虚拟机的模拟设备的设计与实现[J].电子设计工程,2011,18(19):43-56.

[3]李鹏.MJPEG视频编解码的SOC设计[D].济南:山东大学,2007.

[4]陈婉.云计算环境下虚拟化数据中心融合技术[J].软件导刊,2016,15(4):166-168.

[5]KIVITY A,KAMAY Y,LAOR D,et al.KVM-the linux virtual machine monitor proc of the Linux[J].Symposium,2007(1):225-230.

KVM虚拟平台 篇5

虚拟化把事物从一种形式改变为另一种形式, 计算机的虚拟化使单个计算机看起来像多个计算机或完全不同的计算机, 虚拟化技术也可以使多台计算机看起来像一台计算机., 这叫做服务器聚合 (server aggregation) 或网格计算 (grid computing) 。KVM是以色列开源组织Qumranet开发的一个开源虚拟机监控器, 从Linux-2.6.20开始被包含在Linux内核中。因此KVM可以自然地使用Linux内核提供的内存管理、多处理器支持等功能, 易于实现, 而且还可以随着Linux内核的发展而发展。KVM基于x86硬件虚拟化技术, 它的运行要求Intel VT-x或AMD SVM的支持。Intel VT-x是英特尔虚拟化技术, 本文不考虑KVM中与AMD SVM相关的实现, 有关术语的使用与Intel VT-x保持一致。

2、处理器优化技术

处理器虚拟化的本质是分时共享。实现虚拟化需要两个必要条件, 第一是能够读取和恢复处理器的当前状态, 第二是有某种机制防止虚拟机对系统全局状态进行修改。

第一个必要条件可以有硬件实现, 也可以由软件来实现, 由硬件实现比软件实现更为简单。例如, x86处理器对应用编程接口虚拟化, 提供了硬件的支持, 软件通常只需要执行一条指令, 就可以实现任务切换, 处理器硬件负责保存当前应用编程接口的状态, 并为目标任务恢复应用编程接口的状态。但操作系统并不一定要使用处理器提供的这种虚拟化机制, 完全可以使用软件来完成应用接口状态的切换。例如, Linux就没有使用x86处理器提提供多任务机制, 完全依赖软件实现任务切换。

第二个必要条件一定要由硬件来实现, 通常处理器采用多模式操作 (multi-mode operation) 来确保这一点。在传统x86处理器上, 共有4种模式的操作, 也就是常说的4个特权级。虚拟机 (这里指进程/线程) 通常运行在特权级3上, 而虚拟机监控器 (这里指操作系统) 运行于特权级0上, 进程/线程的所有访问全局的操作, 如访问共享的操作系统所在的地址空间, 访问I/O等等, 均会导致异常的发生, 被操作系统所截获并处理, 使操作系统有机会向进程/线程提供一个虚拟的世界。

2.1 传统处理器优化及问题

传统x86处理器为了保护指令的运行, 提供了指令的4个不同Privilege特权级别, 术语称为Ring, 从Ring 0~Ring 3。Ring 0的优先级最高, Ring 3最低。各个级别对可以运行的指令有所限制, 例如, GDT, IDT, LDT, TSS等这些指令就只能运行于Privilege 0, 也就是Ring 0。要注意Ring Privilege级别和我们通常认知的进程在操作系统中的优先级并不同。

操作系统必须要运行一些Privilege 0的特权指令, 因此Ring 0是被用于运行操作系统内核, Ring 1和Ring 2是用于操作系统服务, Ring 3则是用于应用程序。然而实际上并没有必要用完4个不同的等级, 一般的操作系统实现都仅仅使用了两个等级, 即Ring 0和Ring 3, 如图1所示。

在一个常规的x86操作系统中, 系统内核必须运行于Ring 0, 而VMM软件以及其管理下的Guest OS却不能运行于Ring 0———因为那样就无法对所有虚拟机进行有效的管理, 就像以往的协同式多任务操作系统 (如, Windows 3.1) 无法保证系统的稳健运行一样。现在流行的解决方法是Ring Deprivileging (译为特权等级下降) , 并具有两种选择:客户OS运行于Privilege 1 (0/1/3模型) , 或者Privilege 3 (0/3/3模型) 。

无论是哪一种模型, 客户OS都无法运行于Privilege 0, 这样, 如GDT, IDT, LDT, TSS这些特权指令就必须通过模拟的方式来运行, 这会带来很明显的性能问题。特别是在负荷沉重、这些指令被大量执行的时候。

虽然采用ring deprivileging方法可能实现系统虚拟化, 但具有很多缺陷, 且软件上比较复杂。为此, Intel提出了VT-x技术来解决系统虚拟化问题, 其主要思路是增加一个新的比0还高的特权级, 通常称之为特权级-1, 并在硬件上支持系统编程接口状态的保存和恢复。

2.2 Intel VT-x技术

首先, Intel VT-x提供了一套称作VMX (Virtual Machine e Xtension) 的新的工作模式, 工作在该模式下的处理器又具有两类操作模式:VMX root operation和VMX non-root operation。通常, 虚拟机监控器运行在VMX root operation模式下, 即所谓的特权级-1, 客户操作系统运行在VMX non-root operation模式下。VMX non-root operation模式仍保留4个特权级, 对操作系统来说, VMX non-root operation模式与传统的x86处理器兼容, 最大的差别在于当虚拟机执行一些访问全局资源的指令时将导致虚拟机退出操作 (VM exit) , 从而使虚拟机监控器获得控制权, 以便对访问全局资源的指令进行模拟。以后, 虚拟机监控器可以通过虚拟机进入操作 (VM entry) 使虚拟机重新获得控制权。

其次, VT-x为系统编程接口状态的切换提供硬件支持。VT-x为每个虚拟机维护至少一个VMCS (Virtual Machine Control Structure) 结构, 其中保存了虚拟机和虚拟机监控器的系统编程接口状态。当执行VM exit和VM entry操作时, VT-x自动根据VMCS中的内容完成虚拟机和虚拟机监控器间的系统编程接口状态切换。为系统编程接口状态的切换提供硬件支持是必要的, 因为x86处理器的系统编程接口相比应用编程接口要复杂的多, 且在不停的变化, 如较新的处理器可能增加一些MSR (Model Specific Register) , 这使得单独依靠软件来实现系统编程接口的保存和恢复工作变得十分复杂。另外, VT-x还提供了一组指令, 使得虚拟机监控器通过一条指令就可以完成虚拟机间的切换。

VT-x解决了ring deprivileging方法的一系列问题, 从硬件上堵住了所谓的x86平台的虚拟化漏洞。由于操作系统所在的VMX non-root operation模式仍具有4个特权级, 使得ring aliasing问题不存在了。同时, 由于SYSENTER和SYSEXIT指令所引起的adverse impact on guest transitions问题也不存在了;由于VT-x在VM exit和VM entry时完成系统编程接口的切换, 也就是说虚拟机和虚拟机监控器拥有各自的GDT, 也就拥有了各自的地址空间, 解决了address space compression问题。同时, 虚拟机和虚拟机监控器拥有各自的GDTR/IDTR等寄存器, 在虚拟机中访问这些寄存器无需陷入, 解决了nonfaulting accessing to privileged state问题, 再者, VMCS中保存了虚拟机的段描述符高速缓存, 因此在虚拟机切换时不会出现access to hidden state问题;通过对VMCS进行设置, 可以使处理器在VMX non-root operation模式时的EFLAGS.IF失效, 即该标志位不再对中断屏蔽产生影响, 因此操作系统对EFLAGS.IF的频繁操作不会导致频繁的VM exit, 解决了interrupt virtualization的问题。

VT-x提供了完备的处理器虚拟化机制, 利用VT-x可以在单个硬件平台上虚拟出任意数量的虚拟处理器VCPU。VT-x除了解决了处理器虚拟化的问题之外, 还为内存虚拟化和I/O虚拟化提供了支撑。在内存虚拟化方面, VT-x为影子页表的实现提供了支撑, 并且在较新的处理器中还提供了EPT机制, 进一步提高了内存虚拟化的效率。在I/O虚拟化方面, 通过I/O位图机制可以方便地实现对Programmed I/O的虚拟化, 除此之外, VT-x还提供了中断事件退出机制和中断事件注入机制, 方便对设备中断进行虚拟化。

2.3 KVM实现

作为VMM, KVM分为两部分, 分别是运行于Kernel模式的KVM内核模块和运行于User模式的Qemu模块。这里的Kernel模式和User模式, 实际上指的是VMX根模式下的特权级0和特权级3。另外, KVM将虚拟机所在的运行模式称为Guest模式。所谓Guest模式, 实际上指的是VMX的非根模式。

利用VT-x技术的支持, KVM中的每个虚拟机可具有多个虚拟处理器VCPU, 每个VCPU对应一个Qemu线程, VCPU的创建、初始化、运行以及退出处理都在Qemu线程上下文中进行, 需要Kernel、User和Guest三种模式相互配合, 其工作模型如图2所示。Qemu线程与KVM内核模块间以ioctl的方式进行交互, 而KVM内核模块与客户软件之间通过VM Exit和VM entry操作进行切换。

Qemu线程以ioctl的方式指示KVM内核模块进行VCPU的创建和初始化等操作, 主要指VMM创建VCPU运行所需的各种数据结构并初始化。其中很重要的一个数据结构就是VMCS。

初始化工作完成之后, Qemu线程以ioctl的方式向KVM内核模块发出运行VCPU的指示, 后者执行VM entry操作, 将处理器由kernel模式切换到Guest模式, 中止宿主机软件, 转而运行客户软件。注意, 宿主机软件被中止时, 正处于Qemu线程上下文, 且正在执行ioctl系统调用的kerne模式处理程序。客户软件在运行过程中, 如发生异常或外部中断等事件, 或执行I/O操作, 可能导致VM exit, 将处理器状态由Guest模式切换回Kernel模式。KVM内核模块检查发生VM exit的原因, 如果VM exit由于I/O操作导致, 则执行系统调用返回操作, 将I/O操作交给处于User模式的Qemu线程来处理, Qemu线程在处理完I/O操作后再次执行ioctl, 指示KVM切换处理器到Gues模式, 恢复客户软件的运行;如果VM exit由于其它原因导致, 则由KVM内核模块负责处理, 并在处理后切换处理器到Guest模式, 恢复客户机的运行。

4、结束语

KVM是解决虚拟化问题的一个重要解决方案, 它是第一个进入内核的虚拟化解决方案, 并能用于服务器虚拟化。KVM的另外一个优点是它是内核的一部分, 因此可以利用内核的优化和改进。与其它独立的系统管理程序解决方案相比, 这种方法是一种不会过时的技术。KVM两个最大的缺点是需要较新的能够支持虚拟化得处理器, 以及一个用户空间的QEMU进程来提供I/O虚拟化。不管好与坏, KVM位于内核中, 这对于现有解决方案来说是一个巨大的飞跃。

参考文献

[1]探矽工作室, 深入嵌入式JAVA虚拟机[M]。中国铁道出版社, 2003.

[2]雷昊峰。一种嵌入式JAVA虚拟机的性能优化技术设计与实现[D]。硕士学位论文, 电子科技大学, 2003.

上一篇:市场需求为导向下一篇:三联疗法