KVM虚拟化学习总结之简介

KVM虚拟化学习总结之简介

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

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

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

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

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

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

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

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

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

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

10、CPU的过载使用,是让一个或多个客户机使用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%满负载的情况下,一个(或多个)有4个vCPU的客户机运行在拥有4个逻辑CPU的宿主机中并不会带来明显的性能损失。

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

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

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

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

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

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

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

16、KVM(模块):

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

17、QEMU (管理工具):

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

18、QEMU-KVM (管理工具):

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

19、Libvirt、virsh、virt-manager(管理工具):

RedHat 为 KVM 开发了更多的辅助工具,比如 libvirt、libguestfs 等。原因是 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 的地址空间。

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2014-11-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏jeremy的技术点滴

试用docker功能

43570
来自专栏每周一脱topic

一篇文章了解如何使用Docker

本文先简单介绍Docker,并利用一个例子演示如何使用,然后介绍几种分享Docker的方式。

89590
来自专栏IT笔记

Docker学习之搭建JavaWeb环境

自上次从北京参加阿里云社区开发者进阶大会回来,就萌发了学习Docker的种子,尽管公司现在的业务并没有什么需求,但学习先进的东西总没有坏处。

57770
来自专栏Tencentcloud

Docker,请做好自己的清理工作

最近,我们开始对一些应用程序进行docker化,不得不说,我简直爱上了Docker!这是一个非常棒的工程,在AWS EC2的软件运用的基础上,它让我们的生活变得...

82270
来自专栏友弟技术工作室

docker微服务初体验

在介绍微服务时,首先得先理解什么是微服务,顾名思义,微服务得从两个方面去理解,什么是"微"、什么是"服务", 微 狭义来讲就是体积小、单个服务的设计。 而所谓服...

59680
来自专栏磐创AI技术团队的专栏

5分钟配置好你的AI开发环境

无论是第一次设置TensorFlow的新手数据科学爱好者,还是使用TB级数据的经验丰富的AI工程师,安装库、软件包或者框架总是一个困难又繁琐的过程。但是像Doc...

18360
来自专栏友弟技术工作室

docker微服务初体验配置文件composedocker compose使用

1.1K50
来自专栏Java后端技术

Docker三十分钟快速入门(下)

  上篇文章我们进行了Docker的快速入门,基本命令的讲解,以及简单的实战,那么本篇我们就来实战一个真实的项目,看看怎么在产线上来通过容器技术来运行我们的项...

10820
来自专栏同步博客

Docker之进入容器(三)

  经过前面两篇博客的扫盲,大家多多少少对docker有了一个基本的了解,也接触了docker的常用命令。在这篇博客中,我将介绍进入docker容器的几种方式。

24530
来自专栏人工智能

在MacOs上用Docker开发

这是在开发者和运营团队之间的对话中经常听到的借口。即使使用复杂的工具,云中几乎没有限制的计算能力以及先进的持续集成工作流程,本地开发应用程序与在生产环境中运行应...

86300

扫码关注云+社区

领取腾讯云代金券