KVM虚拟化学习总结之简介

jopen 9年前

KVM虚拟化学习总结之简介

1、虚拟化分为:全虚拟化和半虚拟化,需要CPU的支持。

 

2、全虚拟化:不需要做任何配置,让用户觉得就是一台真实的服务器

 

3、半虚拟机化:需要用户配置,有点麻烦。

 

4KVM 仅仅是 Linux 内核的一个模块。管理和创建完整的 KVM 虚拟机,需要更多的辅助工具。

 

5、与Xen相比较,KVM就简化的多了。它不需要重新编译内核,也不需要对当前kernel做任何修改,它只是几个可以动态加载的.ko模块。它结构更加精简、代码量更小。所以,出错的可能性更小。并且在某些方面,性能比Xen更胜一筹。

 

6/etc/libvirt/qemu目录,存放虚拟机的配置文件。

 

7kvm的备份:拷贝/etc/libvirt/qemu目录下的xml配置文件,以及xml中设置的img文件。

 

8kvm的还原:进入virsh,执行define 目录下的xml文件路径,且确保镜像文件的存在。

virsh # define /etc/libvirt/qemu/winxp.xml

 

9KVM允许客户机过载使用(over-commit)物理资源,即给客户机分配的CPU和内存数量多于物理上实际存在的资源。

 

10CPU的过载使用,是让一个或多个客户机使用vCPU的总数量超过实际拥有的物理CPU数量,QEMU会启动更多的线程来为客户机提供服务,这些线程也是被Linux内核调度运行在物理CPU硬件上。

 

11、最推荐的做法是对多个CPU的客户机使用over-commit,比如:在拥有4个逻辑CPU的宿主机中,同时运行多于4个(如8个、16个)客户机,其中每个客户机都被分配一个vCPU。这时,如果每个宿主机的负载不很大的情况下,宿主机Linux对每个客户机的调度是非常有效的,这样的过载使用并不会带来客户机中的性能损失。

 

12最不推荐的做法是让某一个客户机的vCPU数量超过物理CPU数量。比如,在拥有4个逻辑CPU的宿主机中,同时运行一个或多个客户机,其中每个客户机的vCPU数量多于4(如16个)。这样的使用方法会带来比较明显的性能下降,其性能反而不如将客户机分配2个(或4个)vCPU,而且如果客户机中负载过重时,可能会让整个系统运行不稳定。不过,在并非100%满负载的情况下,一个(或多个)有4vCPU的客户机运行在拥有4个逻辑CPU的宿主机中并不会带来明显的性能损失。

 

13、总的来说,KVM允许CPU的过载使用,但是并不推荐在实际的生产环境(特别是负载较重的环境)中过载使用CPU。在生产环境中过载使用CPU,有必要在部署前进行严格的性能和稳定性测试。

 

14KVM中内存也是允许过载使用(over-commit)的,KVM能够让分配给客户机的内存总数大于实际可用的物理内存总数。

 

15、一般来说,有如下三种方式来实现内存的过载使用:

 

1)内存交换(swapping):用交换空间(swap space)来弥补内存的不足。

2)气球(ballooning):通过virio_balloon驱动来实现宿主机Hypervisor和客户机之间的协作来完成。

3)页共享(page sharing):通过KSMKernel Samepage Merging)合并多个客户机进程使用的相同内存页。

 

其中,第一种内存交换的方式是最成熟的(Linux中很早就开始应用),但不推荐使用虚拟内存swap

 

16KVM(模块):

     modprobe 命令加载 KVM 模块,如果用 RPM 安装 KVM 软件包,系统会在启动时自动加载模块。加载了模块后,才能进一步通过其他工具创建虚拟机。但仅有 KVM 模块是远远不够的,因为用户无法直接控制内核模块去做事情,还必须有一个用户空间的工具。

 

17QEMU (管理工具):

    QEMU 是一个强大的虚拟化软件,它可以虚拟不同的 CPU 构架。比如说在 x86 CPU 上虚拟一个 Power CPU,并利用它编译出可运行在 Power 上的程序。

 

18QEMU-KVM (管理工具):

KVM 使用了 QEMU 的基于 x86 的部分,并稍加改造,形成可控制 KVM 内核模块的用户空间工具 QEMU-KVM。所以 Linux 发行版中分为 内核部分的 KVM 内核模块和 QEMU-KVM 工具。

 

19Libvirtvirshvirt-manager(管理工具):

    RedHat KVM 开发了更多的辅助工具,比如 libvirtlibguestfs 等。原因是 QEMU 工具效率不高,不易于使用Libvirt 是一套提供了多种语言接口的 API,为各种虚拟化工具提供一套方便、可靠的编程接口,不仅支持 KVM,而且支持 Xen 等其他虚拟机。使用 libvirt,你只需要通过 libvirt 提供的函数连接到 KVM Xen 宿主机,便可以用同样的命令控制不同的虚拟机了。Libvirt 不仅提供了 API,还自带一套基于文本的管理虚拟机的命令virsh,你可以通过使用 virsh 命令来使用 libvirt 的全部功能。但最终用户更渴望的是图形用户界面,这就是 virt-manager。它是一套用 python 编写的虚拟机管理图形界面,用户可以通过它直观地操作不同的虚拟机。Virt-manager 就是利用 libvirt API 实现的。

 

20、在 KVM 模型中,每一个虚拟机都是一个由 Linux 调度程序管理的标准进程,你可以在用户空间启动客户机操作系统。一个普通的 Linux 进程有两种运行模式:内核和用户。 KVM 增加了第三种模式:客户模式(有自己的内核和用户模式)

 

 

21、内核模块导出了一个名为 /dev/kvm 的设备,它可以启用内核的客户模式(除了传统的内核模式和用户模式)。有了 /dev/kvm 设备,VM 使自己的地址空间独立于内核或运行着的任何其他 VM 的地址空间。

来自:http://my.oschina.net/fufangchun/blog/338867