

KVM虚拟化技术实战与原理解析-8-KVM性能测试及参考数据本文主要介绍了KVM虚拟化性能测试的方法、工具及参考数据,旨在为评估和选择虚拟化方案提供依据。 核心内容总结如下: 1. 测试概述:虚拟化性能测试涵盖CPU、内存、网络、磁盘I/O等多个方面,是选择虚拟化方案的关键。测试通常通过对比非虚拟化原生系统与虚拟客户机中运行相同基准程序的结果来进行。 2. CPU性能测试:测试工具:SPEC CPU2006、Linux内核编译、Super PI。 主要发现:在测试环境下,KVM客户机的CPU性能可达原生系统的94%-97%。具体性能因测试工具而异(如SPEC CPU2006约97%,内核编译约94%)。 3. 内存性能测试:测试工具:LMbench。 主要发现:在硬件支持EPT(扩展页表)等内存虚拟化技术的前提下,KVM的内存虚拟化性能良好,带宽和延迟性能可达原生系统的95%以上。 4. 网络性能测试:测试工具:Netperf、SCP。 主要发现:高性能方案:使用virtio(特别是vhost-net后端)、VT-d直接分配、SR-IOV直接分配VF等方式,网络带宽可接近原生系统性能。 CPU占用:VT-d和SR-IOV方式的CPU占用率略低于virtio。 低性能方案:纯软件模拟的rtl8139、e1000网卡性能较差(吞吐量通常低于500 Mb/s)。 5. 磁盘I/O性能测试:测试工具:DD、IOzone、Bonnie++。 主要发现: virtio-blk驱动的磁盘性能优于纯软件模拟的IDE磁盘。当一次读写的数据块较小时,客户机磁盘I/O速度明显慢于原生系统;数据块较大时,性能差距缩小。 6. 重要说明:所有测试数据和结论仅供参考,实际性能受硬件配置、软件版本、测试参数、客户机配置(如缓存模式)等多种因素影响。 实施生产环境虚拟化前,务必在实际应用环境中进行测试验证。 本章测试基于单个客户机场景,多客户机并发时的性能可能有所不同。 总而言之,在适当的硬件支持(如Intel VT-x/EPT)和优化配置(如使用virtio、vhost-net)下,KVM虚拟化在CPU、内存、网络和磁盘I/O方面能够提供接近原生系统的高性能,是可行的虚拟化方案选择。
KVM虚拟化技术实战与原理解析-7-Linux发行版中的KVM本章介绍了在主流Linux发行版中直接使用KVM虚拟化技术的方法,无需从源代码编译。主要内容如下: 1. 本章目的:解答Linux发行版对KVM的支持情况,以及如何直接使用发行版提供的KVM功能。 2. 涉及的主要发行版:RHEL、Fedora 和 CentOS:Red Hat公司是KVM的主要贡献者。RHEL是企业级稳定版本;Fedora是社区版,更新更快;CentOS是基于RHEL源代码重新编译的免费版本。在这些系统中,可通过YUM安装qemu-kvm、libvirt、virt-manager等软件包来使用KVM。 SLES 和 openSUSE:SLES是企业级服务器系统,openSUSE是其对应的社区免费版本。在SLES 11 SP2和openSUSE 12.2中,可通过YaST或包管理器安装KVM相关软件包,并使用类似的工具链进行管理。Ubuntu:Ubuntu 12.04 LTS首选KVM作为虚拟化方案。通过apt-get安装qemu-kvm、libvirt-bin、virt-manager等包后即可使用,并提供kvm-ok命令检查系统支持。 3. 通用方法:在各发行版中,使用KVM通常需要:CPU支持硬件虚拟化(Intel VT或AMD-V)。 内核已包含KVM支持(发行版通常已默认配置)。 安装用户空间的QEMU/KVM工具(如qemu-kvm或qemu-system-x86)。 管理工具(如libvirt、virsh命令行、virt-manager图形界面)的使用方式与前面章节介绍的基本一致。 4. 核心结论:主流Linux发行版均已良好集成KVM,用户可以直接利用发行版的包管理系统安装所需软件,并通过命令行或图形化工具便捷地创建和管理KVM虚拟机。
KVM虚拟化技术实战与原理解析-9-参与KVM开源社区这篇文章是《第9章 参与KVM开源社区》的完整内容,旨在介绍KVM相关的开源社区、代码结构,并指导读者如何参与到社区中贡献代码或提交问题。 核心内容总结如下: 1. 开源社区介绍 * Linux内核社区:KVM作为Linux内核的一个模块,其开发流程遵循内核社区模式。代码通过维护者层级审核,最终由Linus Torvalds合并到主干。 * KVM社区:专注于内核中的KVM模块。代码维护主要由Red Hat的Gleb Natapov和Paolo Bonzini负责,并通过年度KVM Forum会议进行交流。 * QEMU社区:提供设备模拟,是KVM最常用的用户态工具。自QEMU 1.3.0起,所有KVM相关代码已合并到QEMU主干,无需使用专门的qemu-kvm。 * 其他社区:简要列举了Libvirt、OpenStack、Xen、Ubuntu等与虚拟化或开源系统相关的知名社区。 2. 代码结构简介 * KVM代码:位于Linux内核中,分为三部分:架构无关的核心代码(virt/kvm/)。 架构相关代码(如arch/x86/kvm/)。 相关头文件。 * QEMU代码:配合KVM使用时,通过/dev/kvm设备调用KVM内核模块的API(如创建虚拟机、vCPU等)来协同工作。 * 测试代码:介绍了用于底层特性测试的KVM单元测试和功能更强大的KVM Autotest集成测试框架。 3. 向开源社区贡献代码 * 交流方式:核心是通过邮件列表(KVM: kvm@vger.kernel.org;QEMU: qemu-devel@nongnu.org)进行讨论。 * 代码风格:必须严格遵守。KVM内核代码遵循Linux内核代码规范;QEMU代码有其独立的规范(如4空格缩进)。两者在括号使用、命名约定等方面有差异。 * 生成与检查Patch:使用diff或git format-patch命令生成补丁。 提交前必须用项目自带的检查脚本(如checkpatch.pl)检查代码风格,确保无错误。 * 提交Patch:通过邮件列表发送,邮件需使用纯文本格式、英文书写。 补丁内容应直接贴在邮件正文,并包含清晰的描述和Signed-off-by签名。 主题应注明[PATCH],若为系列补丁需标明序号。 4. 提交KVM相关的Bug * 通过邮件列表:描述Bug时需提供详细的测试环境、现象、日志和可重现的步骤,以便他人快速定位问题。 * 使用Bug跟踪系统:KVM使用Bugzilla (bugzilla.kernel.org),QEMU使用Launchpad (bugs.launchpad.net/qemu)。 * 定位Bug:介绍了使用Git的git bisect命令,通过二分法快速定位引入Bug的具体代码提交。 5. 本章小结 本章系统介绍了KVM开源社区生态,旨在引导和鼓励读者参与社区,无论是贡献代码、提交问题还是学习交流,都能从中受益并对开源软件发展产生积极影响。 请注意:文章内容基于2013年的语境,部分信息(如软件版本、维护者名单、网址等)可能已发生变化。
KVM虚拟化技术实战与原理解析-1-虚拟化与云计算根据提供的文章内容,以下是总结: 核心关系:虚拟化技术是构建云计算基础架构不可或缺的关键基石。云计算通过互联网提供动态、可扩展、常为虚拟化的资源服务,而虚拟化则通过抽象物理资源,创建灵活、高效的虚拟资源池,支撑云服务的交付。 云计算概述: 1. 概念:云计算是一种通过互联网按需提供可配置计算资源(如网络、服务器、存储、应用及服务)的模式,具有快速供给、低管理开销等特点。 2. 服务模式:主要分为三种:IaaS(基础设施即服务):提供虚拟化的计算、存储、网络等基础资源,如Amazon EC2、Google Compute Engine。 PaaS(平台即服务):提供应用程序开发、部署和运行的平台环境,如Google App Engine。 SaaS(软件即服务):通过互联网提供软件应用,用户无需本地安装,如Google Docs、Salesforce.com。 3. 关键技术:包括用于大规模数据并行处理的Map/Reduce编程模型,以及用于管理大规模资源池的云平台管理技术(如OpenStack、CloudStack)。 虚拟化技术: 1. 核心思想:在物理硬件与操作系统之间引入虚拟化层(VMM/Hypervisor),抽象物理资源为多个独立的虚拟环境,提高资源利用率和管理灵活性。 2. 实现方式:软件虚拟化 vs. 硬件虚拟化:软件虚拟化通过纯软件模拟或二进制翻译实现;硬件虚拟化则借助CPU硬件特性(如Intel VT、AMD-V)实现更高性能。 准虚拟化 vs. 全虚拟化:准虚拟化需修改客户机操作系统内核以协同工作(如早期Xen);全虚拟化无需修改客户机系统,提供完整的虚拟平台(如KVM、VMware),随着硬件虚拟化发展已成为主流。 3. 主流方案:KVM:基于Linux内核的全虚拟化解决方案,直接受益于内核发展,性能与可扩展性好,是当前开源社区活跃的项目。 Xen:采用微内核架构的虚拟机管理程序,同时支持准虚拟化与全虚拟化,功能成熟但架构相对独立于Linux内核。 商业产品:如VMware(ESX、Workstation)、Oracle VirtualBox、Microsoft Hyper-V等,提供各具特色的虚拟化解决方案。 结论:文章阐明了虚拟化作为云计算技术基础的核心地位,并系统介绍了云计算的概念、服务模式、关键技术,以及虚拟化的原理、分类和主流实现方案(特别是KVM和Xen),为理解云计算体系提供了清晰的知识框架。
KVM虚拟化技术实战与原理解析-5-KVM高级功能详解根据提供的文章,本章详细介绍了KVM虚拟化平台的一系列高级功能,旨在提升性能、灵活性和可管理性。核心内容总结如下: 1. 半虚拟化驱动 (virtio) * 概述与原理:为解决纯软件模拟I/O设备性能低下的问题,引入了基于virtio标准的半虚拟化驱动。它通过在客户机中安装前端驱动(如virtio-net、virtio-blk)与宿主机QEMU中的后端处理程序协同工作,利用虚拟队列和环形缓冲区(virtio-ring)进行批量处理,大幅减少了VM-Exit次数和数据复制,从而显著提升I/O性能,接近原生系统水平。 * 驱动安装:Linux客户机:主流较新发行版内核通常已包含virtio驱动模块,可动态加载。 Windows客户机:需额外安装virtio驱动,可通过发行版提供的virtio-win ISO文件或从指定项目下载安装。 * 关键组件与应用:virtio_balloon:实现内存气球技术,允许在客户机运行时动态调整其占用的宿主机内存,支持内存过载使用。 virtio_net:半虚拟化网卡驱动,可搭配vhost-net内核后端驱动进一步提升网络性能。 virtio_blk:半虚拟化块设备驱动,提供高效的磁盘I/O访问。 kvm_clock:为客户机提供精确的半虚拟化时钟源,避免时间不准问题,并可利用硬件TSC Deadline Timer增强。 2. 设备直接分配 (VT-d) 与 SR-IOV * VT-d (设备直接分配):原理:将宿主机物理PCI/PCIe设备(如网卡、磁盘控制器)直接、独占地分配给客户机。客户机可直接操作设备,无需Hypervisor介入,性能极高。 优缺点:性能接近原生,但一台设备只能分配给一个客户机,且受物理插槽限制,成本较高,并影响动态迁移。 配置与操作:需要硬件平台、BIOS、宿主机内核(启用IOMMU)支持,并通过pcistub驱动隐藏设备,最后使用QEMU命令行或热插拔分配给客户机。 * SR-IOV (单根I/O虚拟化):原理:在支持SR-IOV的物理设备(如特定Intel网卡)上,创建多个轻量级的虚拟功能(VF),每个VF可独立分配给一个客户机。物理功能(PF)负责管理VF。 优缺点:实现了高性能设备的共享,用更少硬件支持更多客户机,但设备支持有限,且同样影响动态迁移。 操作:需加载驱动时指定VF数量(如max_vfs),生成的VF可像普通PCI设备一样进行分配。文中提供了解决VF在客户机中MAC地址为零等常见问题的方法。 3. 热插拔 * 概述:支持在客户机运行时(不关机)动态添加或移除设备,包括PCI设备(网卡、USB控制器、磁盘控制器等)、vCPU和内存(依赖客户机OS支持)。 * PCI设备热插拔:需要客户机BIOS(如SeaBIOS)、OS及驱动支持。在QEMU monitor中使用device_add和device_del命令(USB设备也可用usb_add/usb_del)进行操作。文中以网卡、USB设备、SATA硬盘为例演示了操作过程。 4. 动态迁移 * 概述:将运行中的客户机从一台宿主机迁移到另一台,服务中断时间极短,是实现负载均衡、维护升级和灾难恢复的关键技术。 * 原理与过程:在共享存储的基础上,通过预复制内存页的方式,迭代将客户机内存状态从源主机复制到目标主机,最后短暂暂停客户机,同步剩余内存和状态,在目标主机恢复执行。 * 注意事项:迁移对网络和共享存储有要求。使用VT-d或SR-IOV直接分配设备的客户机,其动态迁移会受限,但可通过热插拔在迁移前移除设备来缓解。 总结 本章深入探讨的KVM高级功能,从提升I/O性能的半虚拟化驱动,到实现极致性能与设备共享的设备直接分配(VT-d)与SR-IOV,再到增强运维灵活性的热插拔与动态迁移,共同构建了一个高性能、高可用、易管理的企业级虚拟化解决方案。这些功能允许管理员根据实际需求在性能、资源利用率、灵活性和成本之间做出最佳权衡。
KVM虚拟化技术实战与原理解析-6-KVM管理工具这篇文章主要介绍了用于简化KVM虚拟化配置和管理的各类工具,它们对原生的 qemu-kvm 命令行进行了封装和功能增强。 核心内容总结如下: 1. libvirt:这是最核心的管理工具和应用程序接口(API)。它是一个开源的中间适配层,支持包括KVM在内的多种虚拟化方案。libvirt 屏蔽了底层不同 Hypervisor 的细节,为上层管理工具提供了一个统一、稳定的接口。其核心组成部分包括:API库:提供稳定的C语言接口及其他语言(如Python)绑定。 守护进程 (libvirtd):运行在宿主机上,负责执行管理指令。 命令行工具 (virsh):默认的管理工具。 libvirt 的管理功能涵盖域(虚拟机)的生命周期、远程节点、存储、网络等,并通过XML文件进行配置。 2. virsh:基于 libvirt API 的命令行管理工具,是系统管理员实现自动化管理的理想选择。它支持交互模式和非交互模式,提供了丰富的命令来管理域、宿主机、网络和存储等。 3. virt-manager:基于 libvirt 的图形化桌面管理工具。它提供了易用的界面,用于创建、编辑、启动、暂停虚拟机,进行动态迁移,以及监控虚拟机和宿主机的性能。 4. 其他辅助工具:virt-viewer:一个轻量级的图形界面查看器,用于连接并显示虚拟机的桌面。 virt-install:用于创建和安装新虚拟机的命令行工具,支持自动化安装。 virt-top:类似于系统 top 命令,用于实时监控虚拟机的资源使用状态。 5. OpenStack:一个开源的云计算平台(IaaS),其计算组件(Nova)可以通过 libvirt API 来管理 KVM 等 Hypervisor,从而在云平台上提供弹性的虚拟服务器。文章简要介绍了其核心组件和如何使用 DevStack 脚本快速搭建开发环境。 总结来说,这些工具构成了一个从底层API到命令行、图形界面,再到云平台的管理体系。libvirt 是基石,virsh 和 virt-manager 是直接面向管理员的操作工具,而 OpenStack 则是在此基础上构建的、面向大规模资源管理的云计算解决方案。它们共同降低了 KVM 的使用和管理难度。
KVM虚拟化技术实战与原理解析-4-KVM核心基础功能根据提供的文章内容,以下是关于KVM核心基础功能的总结: 概述 KVM采用完全虚拟化技术,在硬件虚拟化(如Intel VT-x)的支持下,通过内核KVM模块与QEMU的设备模拟协同工作,为未修改的普通操作系统(客户机)提供一套完整的虚拟计算机系统。核心子系统包括处理器(CPU)、内存、存储、网络和显示。 1. CPU配置 * vCPU概念:客户机中的每个vCPU对应宿主机中QEMU进程的一个线程。vCPU在三种模式下运行:用户模式:由QEMU处理I/O模拟。 内核模式:由KVM处理特权指令引起的退出(VM-Exit)和影子内存管理。 客户模式:执行客户机中的大部分指令。 * SMP支持:通过 -smp 参数为客户机配置对称多处理器,可指定CPU数量、核心数、线程数和插槽数。 * CPU过载使用:允许分配的vCPU总数超过物理CPU数量,但不推荐在生产环境中过度使用,尤其是单个客户机的vCPU数超过物理CPU数。 * CPU模型:QEMU/KVM默认提供qemu64等基本CPU模型,也可通过 -cpu 参数指定特定模型(如SandyBridge),便于在不同硬件平台间实现平滑迁移。 * 处理器亲和性与vCPU绑定:可以使用taskset命令将代表vCPU的QEMU线程绑定到特定的物理CPU上,以提高性能或实现资源隔离。通常结合内核启动参数isolcpus隔离出专用CPU。 2. 内存配置 * 基本设置:通过 -m 参数设置客户机内存大小,单位默认为MB。 * EPT与VPID:Intel的硬件虚拟化扩展,用于优化内存管理单元(MMU)的虚拟化。EPT简化了GVA->GPA->HPA的地址转换,提升性能;VPID优化TLB管理,减少VM切换时的TLB失效。 * 大页(Huge Page):使用大于4KB的内存页(如2MB),可以减少页表数量,降低TLB失效,提升内存访问性能。通过-mem-path参数指定使用hugetlbfs文件系统。 * 内存过载使用:允许分配给客户机的内存总量超过宿主机物理内存。主要通过三种方式实现:内存交换(Swapping):使用交换空间弥补不足。 气球驱动(Ballooning):通过virtio_balloon驱动动态调整客户机内存(文章提及在第5章详述)。 页共享(Page Sharing):通过KSM合并相同内存页(文章提及在第5章详述)。 注意:过度过载使用可能影响性能和稳定性。 3. 存储配置 * 基本配置与启动顺序:QEMU模拟多种块设备(IDE、SCSI、软盘、CD-ROM等)。-boot参数可设置启动顺序(如order=d从光盘启动)。 * qemu-img命令:QEMU的磁盘管理工具,支持创建、转换、快照、扩容等多种操作。常用命令:create:创建镜像文件。 convert:转换镜像格式(如vmdk转qcow2)。 info:查看镜像信息。 snapshot:管理快照。 resize:调整镜像大小。 * 镜像文件格式:raw:原始格式,简单易移植,支持稀疏文件。 qcow2:QEMU推荐格式,支持稀疏文件、加密、压缩、快照、后端镜像等功能。 * 存储后端:镜像文件可存储在本地文件、物理磁盘/分区、LVM、NFS、iSCSI等多种后端上。 4. 网络配置 QEMU/KVM主要支持四种网络模式: 1. 网桥(Bridge)模式:客户机通过TAP设备连接到宿主机网桥,直接接入物理网络,性能好。需要宿主机配置网桥和脚本。 2. NAT模式:客户机通过虚拟网络(默认192.168.122.0/24)经宿主机进行地址转换访问外网。需要配置网桥、iptables NAT规则和DHCP服务器(如dnsmasq)。 3. 用户模式(User Mode):QEMU内部实现的NAT网络,无需root权限,配置简单(-net user),但性能较差,不支持ICMP,且无法从外部直接访问客户机。支持端口转发(hostfwd)。 4. 直接分配网络设备:包括VT-d和SR-IOV(文章提及在第5章详述)。 * 网络设备模拟:通过-net nic,model=参数指定模拟的网卡类型,如默认的rtl8139,或e1000、virtio等。 5. 图形显示 * SDL:QEMU默认的图形显示方式,需要图形界面,会弹出独立窗口。鼠标可通过Ctrl+Alt组合键释放。 * VNC:重要的远程图形管理方式,克服了SDL对图形界面的依赖。通过-vnc参数启动,支持密码验证、访问控制、反向连接等。常用解决VNC鼠标偏移问题的方法是添加-usb -usbdevice tablet参数。 * 非图形模式:通过-nographic参数启动,将客户机串口重定向到控制台,适用于纯命令行管理和内核调试。 * 其他选项:-curses:使用文本模式界面显示VGA输出。 -vga:选择模拟的VGA显卡类型(如cirrus, std, vmware)。 总结 本章详细介绍了在KVM虚拟化环境中配置和管理客户机核心子系统(CPU、内存、存储、网络、图形显示)的基本原理、方法和实践操作。涵盖了从基础参数设置到性能优化(如CPU绑定、大页、EPT/VPID)和多种网络/存储方案的选择,为构建功能完整的虚拟机提供了全面指导。后续章节(第5章)将介绍更多高级特性和性能优化技术。
KVM虚拟化技术实战与原理解析-0-前言序言根据提供的文章内容,本书《KVM虚拟化技术:实战与原理解析》的核心信息总结如下: 1. 书籍概况 * 书名:KVM虚拟化技术:实战与原理解析 (英文名:KVM: Principles and Practices) * 作者:任永杰、单海涛(均来自Intel虚拟化技术部门,是国内KVM领域的先驱者) * 地位:首本专门介绍Linux KVM虚拟化技术的专著,具有权威性。 * 出版:机械工业出版社,2013年10月第1版。 2. 内容定位与特点 * 全面性:系统介绍KVM的功能、特性和使用方法,同时深入剖析其核心技术与工作原理。 * 实战性:包含大量实际操作指南,如环境搭建、配置、性能测试等。 * 时效性:立足于当时云计算兴起、KVM成为开源虚拟化主流技术的背景,介绍了相关硬件(如Intel VT-d)和软件生态。 3. 主要内容结构(共9章) 本书内容由浅入深,涵盖以下方面: * 基础概念:云计算、虚拟化技术概述及KVM简介。 * 原理与架构:KVM基本架构、QEMU作用、Intel硬件虚拟化技术。 * 环境构建:硬件要求、系统安装、KVM和QEMU的编译与安装。 * 核心功能配置:CPU、内存、存储、网络、图形显示等虚拟化资源的配置与原理。 * 高级功能详解:半虚拟化(virtio)、设备直接分配(VT-d)、热插拔、动态迁移、嵌套虚拟化、KSM、安全特性等。 * 管理工具:libvirt、virsh、virt-manager等工具的使用。 * 发行版实践:在RHEL、Fedora、SUSE、Ubuntu等主流Linux发行版中使用KVM。 * 性能测试:提供CPU、内存、网络、磁盘I/O的性能测试方法、工具及参考数据。 * 开源社区:介绍如何参与KVM、QEMU等开源社区,包括代码结构、贡献流程和bug提交。 4. 目标读者 本书面向对Linux虚拟化及云计算底层技术感兴趣的各类人员,包括: * Linux运维工程师 * KVM开发者 * 云平台开发者 * 虚拟化技术决策者 * 普通技术爱好者 总结:本书是一本兼具权威性、系统性和实践性的指南,旨在帮助读者从零开始,全面掌握KVM虚拟化技术的应用与内核原理,并具备参与开源社区和进行性能优化的能力。
KVM虚拟化技术实战与原理解析-3-构建KVM环境根据文章内容,总结构建KVM环境的主要步骤如下: 1. 硬件系统配置 * CPU要求:处理器必须支持硬件虚拟化扩展(Intel VT或AMD-V技术)。 * BIOS设置:需要在BIOS中启用虚拟化支持(如“Intel Virtualization Technology”),如果芯片支持,也建议启用VT-d(用于设备直接分配)。 2. 安装宿主机Linux系统 * 选择并安装一个Linux发行版作为宿主机(Host),例如RHEL/CentOS、Ubuntu等。 * 在安装过程中,建议选择包含开发工具(如gcc、make)的安装类型(例如“Software Development Workstation”),以便后续编译。 3. 编译和安装KVM * 下载源码:可通过git clone下载最新的KVM开发代码仓库(kvm.git),或下载包含KVM的完整Linux内核源码。 * 配置内核:进入源码目录,使用如make menuconfig命令进行配置。在Virtualization选项中,确保选中KVM及对应的处理器支持(如Intel或AMD)。 * 编译与安装:依次执行make、make modules等命令进行编译。 使用make modules_install安装内核模块,使用make install安装内核并更新引导配置。 * 验证:重启系统并选择新编译的内核启动,检查/dev/kvm设备文件是否存在,确认KVM模块已加载。 4. 编译和安装qemu-kvm * 下载源码:通过git clone下载qemu-kvm的用户空间工具代码。 * 配置与编译:运行./configure进行配置(确保KVM和VNC支持为yes),然后执行make进行编译。 * 安装:执行make install,将生成的关键工具(如qemu-system-x86_64、qemu-img)安装到系统。 5. 安装客户机 * 创建镜像:使用dd命令创建一个磁盘镜像文件(如rhel6u3.img),作为客户机的虚拟硬盘。 * 启动安装:使用qemu-system-x86_64命令启动客户机,指定内存、CPU数量、硬盘镜像和操作系统安装ISO文件作为光驱。 * 连接与安装:通过VNC客户端连接到QEMU窗口,像在物理机上一样完成客户机操作系统的安装。 6. 启动KVM客户机 * 安装完成后,使用qemu-system-x86_64命令直接指定镜像文件启动客户机。 * 通过VNC连接即可登录和使用客户机系统。可以在QEMU监视器中执行info kvm命令验证KVM加速已启用。 核心要点:构建KVM环境需要硬件虚拟化支持、一个宿主机Linux系统、编译并运行包含KVM模块的内核,以及编译配套的用户空间模拟器qemu-kvm。之后即可创建虚拟机镜像并安装客户机操作系统。
KVM虚拟化技术实战与原理解析-2-KVM原理简介根据提供的文章内容,总结如下: 本文是《第2章 KVM原理简介》,系统地介绍了KVM虚拟化技术的原理和架构。 1. 基础背景 * Linux操作系统:作为KVM的宿主,Linux是一个自由开源的类UNIX内核,采用单内核但模块化设计,允许动态加载内核模块(如KVM模块)以扩展功能。 2. 虚拟化模型 * 核心是虚拟机监控器,它管理物理硬件并为每个虚拟机提供虚拟的硬件平台。 * 虚拟机分为类型一(监控器直接运行在硬件上,如Xen)和类型二(监控器作为应用程序运行在宿主机OS上,如KVM)。KVM属于类型二,优势在于能充分利用现有OS功能。 3. KVM架构与核心组件 KVM采用类型二架构,其核心由两部分组成: * KVM内核模块:是KVM的核心,以内核模块形式加载。 负责初始化CPU硬件,开启虚拟化模式(如Intel VT-x)。 管理处理器的虚拟化(vCPU)和内存的虚拟化(早期使用影子页表,后利用硬件EPT技术实现二维分页)。 提供 /dev/kvm 接口,与用户空间通过IOCTL调用进行通信。 * QEMU设备模型(用户空间程序):负责虚拟机的创建、配置、用户交互及大部分I/O设备的模拟(如网卡、磁盘)。 利用KVM模块进行硬件加速,当虚拟机执行I/O操作时,由KVM切换回QEMU进行处理。 4. 硬件依赖 * KVM严重依赖处理器的硬件虚拟化扩展(如Intel VT-x)来实现高效虚拟化。 * 此外,还利用芯片组级(如Intel VT-d)和I/O设备级(如SR-IOV)的虚拟化技术来提升性能与功能。 总结:KVM是一个基于Linux内核的开源虚拟化解决方案。它巧妙地将内核模块(KVM)与用户空间设备模拟器(QEMU)相结合,在充分利用Linux操作系统功能和硬件虚拟化支持的基础上,实现了高性能的虚拟机管理。
虚拟化KVM急速入门-6-管理虚拟存储根据文章内容,本章主要讲解了KVM虚拟化环境中的虚拟存储管理,核心内容总结如下: 1. 虚拟存储概述 * 定义:虚拟存储是宿主机物理存储的一部分,通过模拟的块设备分配给虚拟机。 * 管理方式:分为托管存储(由libvirt通过存储池、存储卷管理)和非托管存储(管理员手动管理,适用于测试或小环境)。 2. 核心概念与术语 * 虚拟机存储设备:可通过virsh domblk*系列命令查看和管理。在XML配置中,关键属性包括设备类型(type)、设备(device)、驱动程序(driver)、源(source)和目标(target总线/设备)。 * 宿主机存储资源:主要包括映像文件、LVM逻辑卷、物理设备(如磁盘、分区)和分布式存储系统(如Ceph、Gluster)。 3. 非托管存储 * 特点:配置路径固定,不灵活,主要用于测试。 * 创建映像文件:使用dd或qemu-img命令创建(如raw、qcow2格式)。 * 管理工具:virsh attach-disk / detach-disk:为虚拟机附加或分离磁盘。 virt-manager:图形化添加磁盘(添加后会自动转为托管存储)。 4. qemu-img 命令详解 * 功能:管理虚拟磁盘映像的核心命令行工具。 * 关键操作:创建与格式化:create,支持多种格式(如raw、qcow2),可设置预分配模式。 检查:check 检查映像一致性。 调整大小:resize(qcow2仅支持扩容)。 转换格式:convert 在不同格式间转换。 快照管理:snapshot 创建、列出、应用、删除快照。 派生映像:基于基础映像创建,节省空间。 信息查看:info、map 查看映像详情和布局。 5. 托管存储:存储池与存储卷 * 存储池:存储资源的抽象容器,是libvirt管理存储的“中间层”。类型:包括目录、物理磁盘设备、LVM卷组、网络文件系统(NFS/CIFS)、iSCSI目标等。 管理命令:virsh pool-* 系列命令(如define、build、start、list、destroy)。 * 存储卷:存储池中的具体存储单元(如一个文件、一个LVM逻辑卷)。管理命令:virsh vol-* 系列命令(如create-as、list、info、delete)。 分配给虚拟机:推荐使用virsh attach-device配合XML文件,或通过virt-manager/Cockpit界面操作,以利用存储池的灵活性。 6. 本章小结 本章系统介绍了KVM虚拟存储的管理,从基础术语、非托管存储的简单使用,到功能强大的qemu-img工具,最后深入讲解了代表最佳实践的托管存储模型(存储池与存储卷),为灵活、高效地管理虚拟机存储奠定了基础。
虚拟化KVM急速入门-5-管理虚拟网络这篇文章系统性地介绍了KVM虚拟化环境中虚拟网络的日常管理。主要内容总结如下: 1. 默认网络环境 * 安装KVM虚拟化组件后,会自动创建一个名为 default 的NAT模式虚拟网络。 * 该网络的核心组件包括:网桥 virbr0、虚拟TAP设备 virbr0-nic、由iptables实现的NAT规则以及提供DHCP和DNS服务的dnsmasq进程。 * 虚拟机的网络流量通过宿主机进行地址转换后访问外部网络,但外部网络无法直接访问虚拟机(仅允许由内到外的访问)。 2. TUN/TAP设备与网桥管理 * TUN/TAP设备:是虚拟网络接口,功能类似物理网卡。TUN处理三层IP数据包,TAP处理二层以太网帧。TAP设备可加入网桥。 * 网桥管理:可以使用 iproute 软件包(如 ip 命令)、NetworkManager(如 nmcli 命令)或Web管理工具 Cockpit 来创建和管理网桥。网桥会将其第一个接口的MAC地址作为自己的MAC地址。 3. 虚拟网络类型与配置 文章详细讲解了以下几种主要的虚拟网络类型及其配置方法: * NAT模式:默认模式。虚拟机通过宿主机进行网络地址转换访问外网,配置简单。 * 桥接模式:虚拟机直接连接到物理网络,与宿主机处于同一网段,外部主机可直接访问。需要手动创建网桥并将物理网卡加入。 * 隔离模式:形成一个封闭网络,虚拟机之间及与宿主机之间可通信,但完全与外部网络隔离。 * 路由模式:宿主机充当路由器,虚拟机流量通过宿主机路由到外部网络。需要在外部网络设备上配置返程路由。 * 开放模式:与路由模式类似,但libvirt不自动配置任何防火墙规则,需要管理员手动配置。 * 直接附加模式:使用macvtap驱动,将虚拟机网卡直接附加到宿主机的物理网卡,有VEPA、bridge、private、passthrough等子模式。 * PCI直通与SR-IOV:将物理PCI设备(如网卡)直接分配给虚拟机独占使用(直通),或将单个支持SR-IOV的物理设备虚拟为多个设备分配给多个虚拟机使用,以获得接近物理设备的性能。 4. 虚拟网络创建与管理工具 可以通过多种工具创建和管理上述网络: * 图形工具:virt-manager, Cockpit。 * 命令行工具:virsh 的相关命令(如 net-define, net-start, net-edit 等)。 5. VLAN支持 * 通过在宿主机物理网卡上创建VLAN子接口,并将不同VLAN的子接口绑定到不同的网桥,可以实现让不同虚拟机接入不同的VLAN。 * 需要在连接的物理交换机端口上配置Trunk模式。 6. 网络过滤器 * 网络过滤器是libvirt提供的防火墙子系统,用于在宿主机层面对虚拟机的网络流量进行强制控制,提升安全性。 * 可以定义规则(如允许/阻止特定协议、端口),并绑定到虚拟机的网络接口。 * 系统提供了一些基础过滤器(如防IP/MAC欺骗的 clean-traffic),也支持管理员自定义复杂的过滤规则。 本章小结 本章全面阐述了KVM虚拟网络的管理,涵盖了从基础概念(TUN/TAP、网桥)、各种网络模式(隔离、NAT、桥接等)的原理与配置,到高级功能(VLAN、网络过滤器)的应用,为管理和维护KVM虚拟化环境下的网络提供了系统性的指导。
虚拟化KVM急速入门-4-管理虚拟机这篇文章主要介绍了在RHEL/CentOS 8系统中管理虚拟机的三种主要工具及其核心操作。 核心管理引擎:libvirt * 所有管理工具(Cockpit、virt-manager、virsh)都通过libvirtd守护进程与虚拟化平台交互。 * libvirtd必须保持运行,否则管理操作(如virsh list)将失败。 三种管理工具概述: 1. virt-manager (图形界面):提供直观的GUI,用于创建、配置、监控虚拟机,并通过VNC/SPICE访问控制台。支持本地及远程管理。 2. virsh (命令行):功能最强大的命令行工具,支持对虚拟机生命周期(创建、启动、关机、删除等)和配置进行精细控制。 3. Cockpit (Web界面):提供友好的Web管理界面,易于上手,可执行虚拟机创建、监控、资源配置及存储和网络管理等常见操作。 主要管理功能: * 虚拟机生命周期管理:包括启动、关闭(正常关闭、强制关闭)、重启、暂停、恢复、保存/恢复状态、创建和删除。 * 虚拟硬件管理:可配置CPU、内存、磁盘、网络,以及引导选项、USB设备连接与重定向等。 * 配置管理:通过编辑XML配置文件(建议使用virsh edit)来修改虚拟机设置。
虚拟化KVM急速入门-3-创建虚拟机这篇文章主要讲解了在 RHEL/CentOS 8 系统中创建和管理 KVM 虚拟机的几种方法及相关重要组件。 主要内容总结: 1. 三种创建虚拟机的方法:Cockpit:基于 Web 的图形化管理工具,是未来的发展趋势。 virt-manager:传统的图形化桌面管理工具,功能较为丰富。 virt-install:命令行工具,效率高,适合自动化部署,但使用相对复杂。 2. 性能优化关键组件:半虚拟化驱动 VirtIO:用于替换虚拟机中的普通磁盘、网卡等驱动,可以显著提升 I/O 性能,让虚拟设备接近物理设备性能。Linux 新版本通常已内置,Windows 需手动安装。 QEMU Guest Agent:安装在虚拟机内的守护程序/服务,通过与宿主机上的 VirtIO 串行通道通信,实现更可靠的关机、信息查询(如 IP、文件系统)和设置(如密码)等功能。 3. 显示设备与协议:虚拟显卡:主要为 QXL,它是一种半虚拟化显卡,与 SPICE 协议配合良好。 显示协议:主要有 VNC 和 SPICE。SPICE 通常能提供更好的图形体验(如色彩、音频)。 SPICE Agent:安装在虚拟机内(Linux 的 spice-vdagent 或 Windows 的 spice-guest-agent),用于实现客户端鼠标模式、分辨率动态调整、宿主机与虚拟机间剪贴板共享等功能,提升远程控制体验。 文章通过详细的步骤和示例,演示了如何使用上述工具创建 Linux 和 Windows 虚拟机,并强调了正确配置 VirtIO 驱动、QEMU Guest Agent 和显示相关组件对提升虚拟机性能和管理便利性的重要性。
虚拟化KVM急速入门-2-KVM安装这篇文章详细介绍了在嵌套虚拟化环境中安装和管理KVM的完整流程。核心内容总结如下: 一、 实验环境架构:嵌套虚拟化 文章首先解释了嵌套虚拟化的概念,即在一层虚拟化软件(第一层Hypervisor)创建的虚拟机中,再次启用虚拟化功能并安装第二层虚拟化软件。这是后续实验的基础架构。 文中提到了两种主要形式: 1. VMware嵌套虚拟化:第一层为VMware系列产品,第二层可为KVM、ESXi等。 2. KVM嵌套虚拟化:第一层为KVM,第二层可为KVM、ESXi等。 本实验采用第一种形式,使用 VMware Workstation Player 作为第一层虚拟化软件来创建实验环境。 二、 前期准备 1. 物理机BIOS设置:确保服务器(如Dell PowerEdge R730)的BIOS中已启用虚拟化技术(如Intel VT-x或AMD-V)。 2. 安装第一层虚拟化软件:在Windows宿主机上安装VMware Workstation Player,安装后会新增虚拟网络适配器(VMnet1、VMnet8)和相关系统服务。 三、 安装KVM(在虚拟机中) 这是在VMware创建的虚拟机(Guest)中安装CentOS和KVM组件的过程。 1. 创建虚拟机: 使用CentOS 8 ISO镜像创建一台名为“KVM1”的虚拟机。关键步骤:在虚拟机设置的“处理器”选项中,必须勾选“虚拟化Intel VT-x/EPT或AMD-V/RVI”,这样才能将物理CPU的虚拟化特性传递给此虚拟机,实现嵌套虚拟化。同时建议勾选“虚拟化CPU性能计数器”和“虚拟化IOMMU”。 建议移除不必要的设备(如USB控制器、声卡),并将网络连接模式设置为NAT。 2. 安装CentOS 8并选择KVM组件:启动虚拟机,从ISO引导安装CentOS 8。 在“软件选择”阶段,必须选择“Virtualization Host”(虚拟化主机)环境,并在右侧额外勾选“Remote Management for Linux”和“Virtualization Platform”两个附加组件。这将会安装libvirt、qemu-kvm、virt-manager、cockpit等关键软件包。 配置网络、主机名、root密码等,完成系统安装。 四、 安装后配置与验证 1. 验证虚拟化功能:使用命令 egrep ‘(vmx|svm)’ /proc/cpuinfo 检查CPU是否支持虚拟化。 使用 virt-host-validate 命令进行更全面的验证。若提示IOMMU未启用,则需要通过修改内核启动参数(在/etc/default/grub中添加intel_iommu=on或amd_iommu=on)并更新grub配置来启用它。 2. 安装图形化管理工具(可选):如果需要在CentOS虚拟机本地使用图形界面管理KVM,可以安装virt-manager和virt-viewer,并可能需要安装图形桌面环境。 3. 系统更新:建议执行dnf update进行系统更新。 五、 KVM管理方式 文章介绍了多种管理KVM虚拟化主机的方法: 1. 本地管理:在CentOS的图形桌面中使用virt-manager(虚拟机管理器)。 2. 远程管理:SSH:使用PuTTY等客户端通过命令行远程管理。 VNC:安装配置TigerVNC Server,使用VNC Viewer远程访问完整桌面。 XRDP:安装配置XRDP服务,使用Windows远程桌面客户端访问。 X-Windows over SSH:在Windows上运行Xming作为X服务器,通过SSH隧道远程运行virt-manager等图形程序,并将界面显示在Windows上。 Cockpit网页管理:通过浏览器访问9090端口,使用Cockpit提供的Web界面进行系统和服务(包括虚拟机)的集中管理。这是最直观的远程管理方式之一。 总结 本文提供了一个从零开始、在个人电脑上利用VMware嵌套虚拟化技术搭建KVM学习环境的详细指南。流程涵盖:环境原理理解、底层虚拟化软件安装、CentOS虚拟机创建与关键配置、KVM组件安装选择、功能验证以及最终通过多种方式进行本地或远程管理。重点在于正确配置嵌套虚拟化支持和在安装CentOS时选择正确的虚拟化软件包组。