- 前言
- 一、KVM原理简介
- 1.KVM工作流程
- 2.KVM架构
- 3.KVM模块
- 二、Qemu原理介绍
- 1.Qemu架构
- 2.Qemu模块
- 3.Qemu的三种运行模式
- 4.Qemu的特点
- 三、KVM和Qemu的关系
- 四、kvm工具介绍
- 1.Qemuing
- 2.Qemu-kvm
- 3.Qemu-ga
- 4.Qemu-io
- 5.Qemu-ndb
前言
`
一、KVM原理简介 1.KVM工作流程KVM模块为虚拟机创建虚拟内存,虚拟CPU后执行VmLaunch指令进入客户模式,加载Guest OS并执行,如果Guest OS发生外部中断或者影子页表缺页等情况,则Guest OS的执行会被暂停,并退出客户模式,执行异常处理,之后重新进入客户模式,执行客户代码。 KVM切换器的主要目的是让同一组KVM操作台可以连接多台设备,这可以让操作者从操作台访问及控制许多台计算机或服务器。2.KVM架构
从虚拟机架构上来分析,一般分为两种,分别为类型一和类型二。
类型一虚拟机是在系统上电后先加载运行虚拟机监控程序,而传统的操作系统则是运行在创建的虚拟机中。
类型二虚拟机监控程序在系统上电之后仍然运行一般意义上的操作系统。
KVM模块是KVM虚拟机的核心部分。其主要功能是初始化CPU硬件,打开虚拟化模式,然后将虚拟客户机运行在虚拟机模式下,并对虚拟客户机的运行提供一定的支持。 为了软件的简洁性并保证其性能,KVM仅支持硬件虚拟化。二、Qemu原理介绍 1.Qemu架构 2.Qemu模块
kqemu 这个加速模组是Fabrice Bellard专为 Linux 核心而设计的 闭源 附加程序,目的是为了加速QEMU的子系统运行速度。 在 x86 硬件上模拟 x86 的操作系统可达到主机速度3.Qemu的三种运行模式
(1)第一种模式是通过KQemu模块实现内核态的加速。
(2)第二种模式是在用户态直接运行Qemu,由Qemu对目标机的所有指令进行翻译后执行,相当于全虚拟化。
(3)第三种模式则是KVM官方提供的KVM-Qemu加速模式。
(1) Qemu的两种操作模式
a.完整的系统仿真
b.用户模式仿真
(2)Qemu的特点
a.Qemu可以在没有主机内核·驱动的情况下运行。它使用动态翻译为本地代码提供合理的速度,并支持自修改代码和精确异常。
b.它适用于多种操作系统(GNU/Linux、BSD、Mac OS X、Windows)和体系结构,执行FPU的精确软件仿真。
Qemu是一个独立的虚拟化解决方案,通过intel-VT 或AMD SVM实现全虚拟化,安装qemu的系统,可以直接模拟出另一个完全不同的系统环境。QEMU本身可以不依赖于KVM,但是如果有KVM的存在并且硬件(处理器)支持比如Intel VT功能,那么QEMU在对处理器虚拟化这一块可以利用KVM提供的功能来提升性能。 KVM是集成到Linux内核的Hypervisor,是X86架构且硬件支持虚拟化技术(Intel-VT或AMD-V)的Linux的全虚拟化解决方案。它是Linux的一个很小的模块,利用Linux做大量的事,如任务调度、内存管理与硬件设备交互等。准确来说,KVM是Linux kernel的一个模块。四、kvm工具介绍 1.Qemuing
qemu-img是QEMU的磁盘管理工具,在qemu-kvm源码编译后就会默认编译好qemu-img这个二进制文件。qemu-img也是QEMU/KVM使用过程中一个比较重要的工具。2.Qemu-kvm
此命令用于创建虚拟机,其使用格式为“qemu-kvm [options] [disk_image]”,其选项非常多,大致可分为如下几类:
标准选项;
USB选项;
显示选项;
i386平台专用选项;
网络选项;
字符设备选项;
蓝牙相关选项;
Linux系统引导专用选项;
调试/专家模式选项;
PowerPC专用选项;
Sparc32专用选项。
qemu-kvm的标准选项 该选项主要涉及指定主机类型、CPU模式、NUMA、软驱设备、光驱设备及硬件设备等。 qemu-kvm的显示选项 该选项主要用来配置虚拟机的显示状态 网络属性相关选项: 该选项用来配置虚拟机的网络信息。3.Qemu-ga
qga是一个运行在虚拟机内部的普通应用程序(可执行文件名称默认为qemu-ga,服务名称默认为qemu-guest-agent),其目的是实现一种宿主机和虚拟机进行交互的方式,这种方式不依赖于网络,而是依赖于virtio-serial(默认首选方式)或者isa-serial,而QEMU则提供了串口设备的模拟及数据交换的通道,最终呈现出来的是一个串口设备(虚拟机内部)和一个unix socket文件(宿主机上)。 qga通过读写串口设备与宿主机上的socket通道进行交互,宿主机上可以使用普通的unix socket读写方式对socket文件进行读写,最终实现与qga的交互,交互的协议与qmp(QEMU Monitor Protocol)相同(简单来说就是使用JSON格式进行数据交换),串口设备的速率通常都较低,所以比较适合小数据量的交换。4.Qemu-io
这是一个执行 Qemu I/O 操作的命令行工具,可以对qemu-img创建的镜像进行I/O测试,其帮助文档为,使用格式为qemu-io [-h] [-V] [-rsnm] [-c cmd] ... [file],下面是常用的选项:
(1)-c, --cmd:执行指令;
(2)-r, --read-only:设置出口为只读模式;
(3)-s, --snapshot:使用快照文件进行测试;
(4)-n, --nocache:禁用主机缓存;
(5)-k, --native-aio:使用内核AIO实现(仅在Linux上);
(6)-t, --cache=MODE:对image使用指定的缓存模式。
qemu-nbd在有的系统上叫kvm-nbd,qemu-nbd-xen等。基本上都一样。用qemu-nbd实现mount虚拟硬盘到Host上的功能。 网络块设备: Network Block Device。可以将一个远程主机的磁盘空间,当作一个块设备来使用,就像一块硬盘一样。使用它,可以很方便的将另一台服务器的硬盘空间增加到本地服务器上。 NBD与NFS有所不同,NFS只是提供一个挂载点供客户端使用,客户端无法改变这个挂载点的分区格式。而NBD提供的是一个块设备,客户端可以把这个块设备格式化成各种类型的分区,更便于用户的使用。



