《KVM虚拟化技术实战和原理解析》读书笔记(一)

第一章和第二章

第一章 虚拟化和云计算

Saas(软件即服务):将已经部署好的软件作为一种服务来提供,比如:Google Docs, Google Apps
Paas(平台即服务):将开发环境作为一种服务来提供。
Iaas(基础设施即服务):将多台服务器组成的“云端”基础设施作为计量服务提供给客户。

软件虚拟化:

利用纯软件的方法在现有的物理平台上(往往并不支持硬件虚拟化)实现对物理平台访问的截获和模拟。
常见的软件虚拟机如QEMU,它是通过纯软件来仿真x86平台处理器的取指、解码和执行,客户机的指令并不在物理 平台上直接执行。
由于所有指令都是软件模拟的,因此性能往往比较差,但是可以在同一平台上模拟不同架构平台的虚拟机。

VMware的软件虚拟化使用了动态二进制翻译技术。虚拟机监控机(VMM)在可控制的范围内,允许客户机的指令在物理平台上直接运行。但是,客户机指令在运行前会被虚拟机监控机扫描,其中突破虚拟机监控机限制的指令会被动态替换为可以在物理平台上直接运行的安全指令,或者替换为对虚拟机监控机的软件调用。优点是比纯软件模拟性能有大幅提升,缺点是失去了跨平台虚拟化的能力。

硬件虚拟化:

物理平台本身提供对特殊指令的截获和重定向的支持;甚至新的硬件会提供额外的资源来帮助软件实现对关键硬件资源的虚拟化,从而提升性能。

以x86平台的虚拟化为例,支持虚拟技术的x86 CPU 带有特别优化过的指令集来控制虚拟过程,通过这些指令集,VMM很容易将客户机置于一种受限制的模式下运行,一旦客户机试图访问物理资源,硬件会暂停客户机的运行,将控制权交回给VMM处理。VMM可以将客户机在受限模式下对一些特殊资源的访问完全由硬件重定向到VMM指定的虚拟资源。整个过程不需要暂停客户机的运行和VMM软件的参与。

由于虚拟化硬件可提供全新的架构,支持操作系统直接在其上运行,无需进行二进制转码,减少了相关的性能开销,极大简化了VMM的设计,进而使得VMM能够按照通用标准进行编写,性能更加强大。

准虚拟化:

改动客户机操作系统,使它以为自己运行在虚拟环境下,能够同虚拟机监控机协同工作。所以,准虚拟化需要修改客户机的操作系统的源代码来实现主动通知。

Xen是准虚拟化的一个例子,它适用于Linux这样的开源操作系统,而不适合于Windows这样的闭源操作系统。

全虚拟化:

支持运行任何理论上可在真实物理平台上运行的操作系统。不需要对客户机操作系统进行任何修改。

KVM

KVM的开发人员并不是从底层开始新写一个Hypervisor,而是选择了基于Linux Kernel,通过加载新的模块而使Linux Kernel变身成为一个Hypervisor.
KVM目前设计为通过可加载的内核模块,支持广泛的客户机操作系统,包括Windows.

在KVM架构中,虚拟机实现为常规的Linux进程,由标准Linux调度程序进行调度。事实上,每个虚拟CPU实现为一个常规的Linux进程。这使得KVM可以享受Linux内核的所有功能。

KVM本身不执行任何模拟,需要用户空间程序通过/dev/kvm接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的I/O,并将它的视频显示映射回宿主的显示屏。这个应用程序(注:上述的“用户空间程序”)就是大名鼎鼎的QEMU.

REHL6.x系统中的一个KVM客户机可以支持160个虚拟CPU和多达2TB的内存,KVM宿主机支持4096个CPU核心和多达64TB的内存。


第二章 KVM原理简介

操作系统内核设计分为:微内核和单内核。

单内核指的是整个内核从整体上作为一个单独的大过程来实现,并且同时运行在一个单独的地址空间内。所有的内核服务都在这样一个大的内核空间运行,内核之间的通信可以简单地实现为函数调用。

对于微内核来说,内核的功能被划分为多个独立的过程,每一个过程叫做一个服务器。多个服务器都运行在自己的地址空间,只有少量核心的服务器运行在特权模式下,服务器之间的通信采用了进程间通信机制。独立的服务器进程提高系统的健壮性,但是进程间通信由于涉及内核空间和用户空间的上下文切换,其开销比函数调用大得多。

Linux采用实用主义的设计:Linux内核被设计成单内核以满足性能要求;但同时,Linux内核还具有模块化设计和动态装载内核模块的能力。除了诸如进程切换、内存管理等核心内核功能,将大部分内核功能作为单独的内核模块设计并实现。这些内核模块编译好后以单独的二进制文件的形式存在,内核在运行过程中,按照需求,动态地加载并链接进入内核空间运行。不使用的模块还可以在运行过程中动态卸载。这样的设计,既保证了内核的性能,也改进了传统单内核设计的灵活性。
KVM就是以内核模块的形式存在,为Linux内核增加了虚拟化的功能。

从虚拟机的基本架构来区分,分为2种:类型一和类型二。
类型一:
系统上电之后首先加载运行虚拟机监控程序,而传统的操作系统则是运行在其创建的虚拟机中。
类型一的虚拟机监控程序,可以视为一个特别为虚拟机而优化裁剪的操作系统内核。
著名的开源虚拟化软件Xen、商业软件VMware ESX/ESXi 和微软的Hyper-V就是类型一的代表。

类型二:
在系统上电之后仍然运行一般意义的操作系统(也就是俗称的宿主机操作系统),虚拟机监控程序作为特殊的应用程序,可以是为操作系统功能的扩展。
对于类型二虚拟机来说,最大的优势在于可以充分利用现有的操作系统;但也会受到宿主机操作系统的一些限制。
KVM、VMware Workstation、VirtualBox就是属于类型二虚拟机。

KVM模块

P38-39

KVM模块的主要功能是初始化CPU硬件,打开虚拟化模式,然后将虚拟客户机运行在虚拟机模式下,并对虚拟客户机的运行提供一定的支持。
KVM仅支持硬件虚拟化。

以KVM在Intel公司的CPU上运行为例:
1. 在内核被加载的时候,KVM模块会先初始化内部的数据结构;
2. 做好准备之后,KVM模块检测系统当前的CPU,然后打开CPU控制寄存器CR4中的虚拟化模式开关;
3. 通过执行VMXON指令将宿主操作系统(包括KVM模块本身)置于虚拟化模式的根模式;
4. 最后,KVM模块创建特殊设备文件 /dev/kvm 并等待来自用户空间的命令;
5. 接下来,虚拟机的创建和运行将是一个用户空间应用程序(QEMU)和KVM模块相互配合的过程。

KVM模块和用户空间QEMU的通信接口主要是一系列针对特殊设备文件的IOCTL调用。
KVM模块加载之初,只存在 /dev/kvm 文件,而针对该文件的最重要的IOCTL调用就是“创建虚拟机”,其可以被理解为KVM为了某个特定的虚拟客户机(用户空间程序创建并初始化)创建对应的内核数据结构。同时,KVM还会返回一个文件句柄来代表所创建的虚拟机。

针对虚拟处理器最重要的IOCTL调用就是“执行虚拟处理器”。通过它,用户空间准备好的虚拟机在KVM模块的支持下,被置于虚拟化模式的非根模式下,开始执行二进制指令。在非根模式下,所有敏感的二进制指令都会被处理器捕捉到,处理器在保存现场之后,自动切换到根模式,由KVM决定如何进一步处理(要么由KVM模块直接处理,要么返回用户空间交由用户空间程序处理)。

除了处理器的虚拟化,内存虚拟化也是由KVM模块实现的。实际上,这一部分是一个虚拟机实现代码中代码量最大、实现最复杂的部分(至少在硬件支持二维地址翻译之前是这样的)。

处理器对设备的访问主要是通过IO指令和MMIO,其中IO指令会被处理器直接截获,MMIO会通过配置内存虚拟化来捕捉。但是,外设的模拟一般并不由KVM模块负责。一般来说,只有对性能要求比较高的虚拟设备才会由KVM内核模块来直接负责,比如虚拟中断控制器和虚拟时钟。大部分输入输出设备还是会交给用户态程序QEMU负责。

QEMU设备模型

QEMU本身并不是KVM的一部分,其自身就是一个著名的开源虚拟机软件。它是一个纯软件的实现,所以性能低下。

为了简化开发和代码重用,KVM在QEMU的基础上进行了修改。在虚拟机运行期间,QEMU会通过KVM模块提供的系统调用计入内核,由KVM模块负责将虚拟机置于处理器的特殊模式运行。遇到虚拟机进行输入输出操作,KVM模块会从上次的系统调用出口处返回QEMU,有QEMU来负责解析和模拟这些设备。

### 回答1: 《KVM虚拟化技术实战原理解析》是一本介绍KVM虚拟化技术的权威书籍,内容深入浅出,适合初学者和有一定基础的读者。 本书的内容包含多方面,涵盖了KVM虚拟化技术原理实战经验及其应用场景等方面。首先,本书简单介绍了虚拟化技术的演变,让读者对整个虚拟化技术有个初步认识,然后主要介绍了KVM虚拟化技术原理。作者结合自己的实战经验,从仿真模型、虚拟化层次、硬件模拟、虚拟设备等方面详细讲解了KVM虚拟化技术的内部原理,有助于读者深入了解KVM技术的基本运行方式和原理。 此外,本书也介绍了KVM虚拟化技术实战应用。作者基于自己的实际应用经验,介绍了如何通过KVM创建虚拟机、内核配置、网络管理、快照等实战操作,在每一章后都有相关实验,方便读者实际操作。另外,作者也介绍了kvm虚拟化技术云计算环境下的应用,这是不可忽视的一个领域,与云计算的结合是KVM虚拟化技术的一个重要应用场景。 整本书籍内容详实深入,解释清晰,从理论到实际应用一步步讲解,且作者多年的实战经验也为读者提供了许多经验和技巧。同时,对于想要了解kvm虚拟化技术的人来说,这本书是非常好的参考书和学习工具。请有学习kvm虚拟化技术需求的技术人员一定不要错过这本书。 ### 回答2: KVM虚拟化技术是一种在Linux系统下的开源虚拟化技术。这种技术功能强大,效率高,而且开源免费,因此在云计算领域广受欢迎。针对KVM虚拟化技术,有专门的一本书《KVM虚拟化技术实战原理解析》PDF,本书介绍了KVM虚拟化技术的基本原理、架构和实际应用。 本书从KVM的基本原理讲起,介绍了KVM的核心技术,包括虚拟映射、内存管理、断处理等内容。然后,本书详细介绍了KVM虚拟化的架构与实现,讲述了通过KVM构建虚拟化环境的步骤与方法。此外,本书还涵盖了KVM的管理工具、网络虚拟化、存储虚拟化等主题,并提供了大量的实际应用案例以及最佳实践。 本书的主要章节包括:KVM架构与虚拟化原理;基于KVM虚拟化实现;KVM管理工具;网络虚拟化;存储虚拟化KVM虚拟化 安全;实战案例;实践知识与经验总结。读者可以据自己的需求选择不同的章节进行学习与实践。比如,对于想要了解KVM虚拟化的基本原理的读者,可以重点学习第一章;对于想要实现虚拟化环境的读者,可以学习第二章;对于想要管理KVM虚拟化的读者,可以学习第三章等等。 综上所述,本书是一本很好的KVM虚拟化技术入门书籍。通过本书的学习,读者可以了解KVM虚拟化技术的基本原理、架构和实践应用,掌握KVM虚拟化的管理工具与实践技巧,并且能够实际应用KVM虚拟化技术构建高效、弹性的云计算环境。 ### 回答3: KVM(Kernel-based Virtual Machine)是一种开源的虚拟化技术,基于Linux内核实现,可实现将一台物理服务器分割成多个虚拟服务器,并将其运行在不同的操作系统上。 《KVM虚拟化技术实战原理解析》一书详细介绍了KVM虚拟化技术及其实战应用。书首先介绍了虚拟化技术的基本概念、分类和发展历程,并介绍了KVM的基本原理和架构。随后,书详细介绍了如何在CentOS 7平台安装和配置KVM,并讲解了KVM的管理和监控工具,如Virt-Manager、qemu-kvm与Libvirt等。 此外,书还详细介绍了KVM网络与存储配置,包括如何配置虚拟机的网络与存储,并讲解了多个虚拟机的联网与互通。书提到了如何使用桥接、NAT和VLAN等不同技术,实现虚拟机之间的通信。 在实战应用,书介绍了如何在KVM上安装操作系统、如何在虚拟机上部署Web服务、如何迁移虚拟机及备份恢复虚拟机等实用案例。同时,书还介绍了虚拟化的安全问题,提出了如何加强虚拟化环境的安全性,并介绍了如何使用SELinux和AppArmor等机制保护虚拟化环境的安全性。 通过阅读《KVM虚拟化技术实战原理解析》,可以全面深入地了解KVM虚拟化技术,包括其原理、应用和实战配置等,对于想要深入学习KVM虚拟化技术的开发人员和系统管理员来说,是一本不可多得的好书。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值