Closed vieyahn2017 closed 4 years ago
原文:http://blog.csdn.net/sdulibh/article/details/52703687
KVM 介绍(1):简介及安装 http://www.cnblogs.com/sammyliu/p/4543110.html
学习 KVM 的系列文章:
(1)介绍和安装 http://www.cnblogs.com/sammyliu/p/4543110.html
(2)CPU 和 内存虚拟化 https://www.cnblogs.com/sammyliu/p/4543597.html
(3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) https://www.cnblogs.com/sammyliu/p/4543657.html
(4)I/O PCI/PCIe设备直接分配和 SR-IOV (5)libvirt 介绍 (6)Nova 通过 libvirt 管理 QEMU/KVM 虚机 (7)快照 (snapshot) (8)迁移 (migration)
KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),它是一个 Linux 的一个内核模块,该内核模块使得 linux 变成了一个 Hypervisor:
它由 Quramnet 开发,该公司于 2008年被 Red Hat 收购。 它支持 x86 (32 and 64 位), s390, Powerpc 等 CPU。 它从 Linux 2.6.20 起就作为一模块被包含在 Linux 内核中。 它需要支持虚拟化扩展的 CPU。 它是完全开源的。官网。
KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得 KMV 能够使用 Linux 内核的已有功能。
但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是 QEMU。
KVM 是实现拦截虚机的 I/O 请求的原理:
现代 CPU 本身了对特殊指令的截获和重定向的硬件支持,甚至新的硬件会提供额外的资源来帮助软件实现对关键硬件资源的虚拟化从而提高性能。以 X86 平台为例,支持虚拟化技术的 CPU 带有特别优化过的指令集来控制虚拟化过程。通过这些指令集,VMM 很容易将客户机置于一种受限制的模式下运行,一旦客户机视图访问物理资源,硬件会暂停客户机的运行,将控制权交回给 VMM 处理。VMM 还可以利用硬件的虚级化增强机制,将客户机在受限模式下对一些特定资源的访问,完全由硬件重定向到 VMM 指定的虚拟资源,整个过程不需要暂停客户机的运行和 VMM 的参与。由于虚拟化硬件提供全新的架构,支持操作系统直接在上面运行,无需进行二进制转换,减少了相关的性能开销,极大简化了VMM的设计,使得VMM性能更加强大。从 2005 年开始,Intel 在其处理器产品线中推广 Intel Virtualization Technology 即 IntelVT 技术。 QEMU-KVM:
其实 QEMU 原本不是 KVM 的一部分,它自己就是一个纯软件实现的虚拟化系统,所以其性能低下。但是,QEMU 代码中包含整套的虚拟机实现,包括处理器虚拟化,内存虚拟化,以及 KVM需要使用到的虚拟设备模拟(网卡、显卡、存储控制器和硬盘等)。 为了简化代码,KVM 在 QEMU 的基础上做了修改。VM 运行期间,QEMU 会通过 KVM 模块提供的系统调用进入内核,由 KVM 负责将虚拟机置于处理的特殊模式运行。遇到虚机进行 I/O 操作,KVM 会从上次的系统调用出口处返回 QEMU,由 QEMU 来负责解析和模拟这些设备。 从 QEMU 的角度看,也可以说是 QEMU 使用了 KVM 模块的虚拟化功能,为自己的虚机提供了硬件虚拟化加速。除此以外,虚机的配置和创建、虚机运行说依赖的虚拟设备、虚机运行时的用户环境和交互,以及一些虚机的特定技术比如动态迁移,都是 QEMU 自己实现的。
KVM 所支持的功能包括:
支持CPU 和 memory 超分(Overcommit) 支持半虚拟化I/O (virtio) 支持热插拔 (cpu,块设备、网络设备等) 支持对称多处理(Symmetric Multi-Processing,缩写为 SMP ) 支持实时迁移(Live Migration) 支持 PCI 设备直接分配和 单根I/O 虚拟化 (SR-IOV) 支持 内核同页合并 (KSM ) 支持 NUMA (Non-Uniform Memory Access,非一致存储访问结构 )
libvirt:操作和管理KVM虚机的虚拟化 API,使用 C 语言编写,可以由 Python,Ruby, Perl, PHP, Java 等语言调用。可以操作包括 KVM,vmware,XEN,Hyper-v, LXC 等 Hypervisor。 Virsh:基于 libvirt 的 命令行工具 (CLI) Virt-Manager:基于 libvirt 的 GUI 工具 virt-v2v:虚机格式迁移工具 virt-* 工具:包括 Virt-install (创建KVM虚机的命令行工具), Virt-viewer (连接到虚机屏幕的工具),Virt-clone(虚机克隆工具),virt-top 等 sVirt:安全工具
KVM虚拟化知识大汇总
基础入门
UVP KVM虚拟化基础介绍
KVM基本框架原理培训视频 KVM虚拟化介绍专家讲课视频 KVM虚拟化介绍 KVM虚拟化基础培训材料V1.0 UVP KVM虚拟化介绍(无xen基础版) 从硬件看虚拟化原理 KVM RAW格式虚拟机镜像制作实录 Qemu Libvirt & KVM教程大全 Libvirt之美 虚拟化下的内存复用技术介绍
Qemu
Qemu介绍 QEMU 简介 Qemu Coroutine协程原理分析
Qemu MainLoop原理分析 Qemu Object Model应用与原理 QEMU框架(KVM) 文档 qemu命令简介
Qemu设备模拟管理 KVM虚拟机磁盘镜像文件管理命令qemu-img介绍及简单使用 博客
网络虚拟化基础介绍
网络基础知识 OVS介绍 VxLAN介绍 文档 SRIOV原理分析和基本配置
存储虚拟化基础介绍
存储基础知识大扫盲 KVM存储虚拟化原理及业务场景介绍 KVM_存储IO路径 通用多路径 - multipath 学习资料 KVM整机迁移相关学习资料 qcow2相关学习资料 虚拟磁盘格式解惑
其他
FusionSphere OpenStack相关命令 浅谈grub2
进阶成长
网络专题类
ovs openflow原理及实现 dpdk原理及实现 虚拟化网络性能优化 EVS\OVS\SRIOV对比介绍 OVS VXLAN 原理及实现 用户态EVS端口抓包方法 用户态EVS原理及使用场景介绍 自适应多核绑定策略
问题定位类
Qemu原理及虚拟机生命周期常见问题定位 虚拟化存储使用场景及常见问题定位方法介绍 用户态EVS简介与常见问题定位 HostOS原理及常见问题定位方式 虚拟机生命周期watchdog常见问题定位方法
故障处理
UVP 运维文档(NFV领域).chm
UVP_虚拟机故障处理(NFV)
Linux磁盘空间满定位步步通 NFV现网升级VMTools常见问题
参考
案例(内部参考)
【服务器虚拟化/NFV领域】Windows虚拟机经典案例集 【服务器虚拟化/NFV领域】Linux虚拟机经典案例集 【NFV领域】主机经典案例合集 wiki 【虚拟化存储】如何定位IO性能、IO错误、存储断链、存储多路径异常等问题 【虚拟化存储】如何定位FSP-cinder组件扫盘失败问题