热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

深入解析KVM虚拟机管理程序

预备知识基于内核的虚拟机(KVM)是针对包含虚拟化扩展(IntelVT或AMD-V)的x86硬件上的Linux的完全原生的虚拟化解决方案。对半虚拟化(paravirtualization)的有限支持也可以通过半虚拟网络驱动程序的形式用于Linux和WindowsGuest系统。KVM目
预备知识

基于内核的虚拟机 (KVM) 是针对包含虚拟化扩展(Intel VT 或 AMD-V)的 x86 硬件上的 Linux 的完全原生的虚拟化解决方案。对半虚拟化(paravirtualization)的有限支持也可以通过半虚拟网络驱动程序的形式用于 Linux 和 Windows Guest 系统。

KVM 目前设计为通过可加载的内核模块连接内核。支持的操作系统版本包括广泛的操作系统,比如 Linux、BSD、Solaris、Windows、Haiku、ReactOS 和 AROS Research Operating System。一个添加了补丁的 KVM 版本 (qemu) 能够在 Mac OS X 上运行。

注意:KVM 本身不执行任何模拟,一个用户空间程序会使用 /dev/kvm 接口设置一个 Guest 虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示映射回宿主的显示屏。

图 1 显示了 KVM 架构。

图 1. KVM 架构
KVM 架构

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

设备模拟由提供了模拟的 BIOS、PCI 总线、USB 总线和一组标准的设备(比如 IDE 和 SCSI 磁盘控制器、网络卡等)的修改的 qemu 版本来模拟。

功能特性

以下功能对于 KVM 至关重要。

安全

因为虚拟机实现为一个 Linux 进程,所以它利用标准的 Linux 安全模型来提供隔离和资源控制。Linux 内核使用 SELinux(安全增强的 Linux)来添加强制访问控制、多级和多类别安全,以及处理策略的执行。SELinux 为在 Linux 内核中运行的进程提供了严格的资源隔离和限制。

SVirt 项目是一项社区工作,尝试集成强制访问控制 (MAC) 安全和基于 Linux 的虚拟化 (KVM)。它构建于 SELinux 之上,提供一个基础架构来使管理员能够定义虚拟机隔离策略。SVirt 可以开箱即用地确保一个虚拟机资源无法供任何其他进程(或虚拟机)访问,这可由 sysadmin 扩展来定义细粒度的权限,例如将虚拟机分组到一起以共享资源。

内存管理

KVM 从 Linux 继承了强大的内存管理功能。一个虚拟机的内存与任何其他 Linux 进程的内存一样进行存储,可以以大页面的形式进行交换以实现更高的性能,也可以磁盘文件的形式进行共享。NUMA 支持(非一致性内存访问,针对多处理器的内存设计)允许虚拟机有效地访问大量内存。

KVM 支持来自 CUP 供应商的最新的内存虚拟化功能,支持 Intel 的扩展页面表 (EPT) 和 AMD 的快速虚拟化索引 (RVI),以实现更低的 CPU 利用率和更高的吞吐量。

内存页面共享通过一项名为内核同页合并 (Kernel Same-page Merging, KSM) 的内核功能来支持。KSM 扫描每个虚拟机的内存,如果虚拟机拥有相同的内存页面,KSM 将这些页面合并到一个在虚拟机之间共享的页面,仅存储一个副本。如果一个 Guest 尝试更改这个共享页面,它将得到自己的专用副本。

存储

KVM 能够使用 Linux 支持的任何存储来存储虚拟机镜像,包括具有 IDE、SCSI 和 SATA 的本地磁盘,网络附加存储 (NAS)(包括 NFS 和 SAMBA/CIFS),或者支持 iSCSI 和光线通道的 SAN。多路径 I/O 可用于改进存储吞吐量和提供冗余。

再一次,由于 KVM 是 Linux 内核的一部分,它可以利用所有领先存储供应商都支持的一种成熟且可靠的存储基础架构;它的存储堆栈在生产部署方面具有良好的记录。

KVM 还支持全局文件系统 (GFS2) 等共享文件系统上的虚拟机镜像,以允许虚拟机镜像在多个宿主之间共享或使用逻辑卷共享。磁盘镜像支持瘦配置,支持通过仅在虚拟机需要时分配存储空间,而不是提前分配整个存储空间,提高存储利用率。KVM 的原生磁盘格式为 QCOW2,它支持快照,允许多级快照、压缩和加密。

实时迁移

KVM 支持实时迁移,这提供了在物理宿主之间转移正在运行的虚拟机而不中断服务的能力。实时迁移对用户是透明的,虚拟机保持打开,网络连接保持活动,用户应用程序也持续运行,但虚拟机转移到了一个新的物理宿主上。

除了实时迁移,KVM 支持将虚拟机的当前状态保存到磁盘,以允许存储并在以后恢复它。

设备驱动程序

KVM 支持混合虚拟化,其中半虚拟化的驱动程序安装在 Guest 操作系统中,允许虚拟机使用优化的 I/O 接口而不使用模拟的设备,以为网络和块设备提供高性能的 I/O。

KVM 虚拟机管理程序为半虚拟化的驱动程序使用 IBM 和 Red Hat 联合 Linux 社区开发的 VirtIO 标准;它是一个与虚拟机管理程序独立的、构建设备驱动程序的接口,允许为多个虚拟机管理程序使用一组相同的设备驱动程序,能够实现更出色的 Guest 互操作性。

VirtIO 驱动程序包含在现代 Linux 内核中(2.6.25 以后的版本),包含在 Red Hat Enterprise Linux 4.8+ 和 5.3+ 中,可用于 Red Hat Enterprise Linux 3。Red Hat 为 Microsoft Windows Guest 系统开发了 VirtIO 驱动程序,以实现经过 Microsoft 的 Windows 硬件质量实验室认证计划 (WHQL) 认证的优化网络和磁盘 I/O。

性能和可伸缩性

KVM 也继承了 Linux 的性能和可伸缩性,支持拥有最多 16 个虚拟 CPU 和 256GB RAM 的虚拟机,以及拥有 256 个 CPU 核心和超过 1TB RAM 的宿主系统。它可提供

对于 SAP、Oracle、LAMP 和 Microsoft Exchange 等真实企业工作负载,相对于裸机 95 到 135% 的性能。

在运行标准服务器的虚拟机中每秒超过 100 万条消息的速度和低于 200 毫秒的延迟。

最高的整合率,将超过 600 个运行企业工作负载的虚拟机整合到单个服务器上。

这意味着 KVM 允许虚拟化任何要求苛刻的应用程序工作负载。

部署虚拟化

部署 KVM 比较复杂,涉及大量配置考虑因素,关于更多信息,请参阅 参考资料。

管理您的虚拟机

有多个虚拟机管理器可用,包括:

Univention Virtual Manager。

qemu/KVM:您可以在 KVM 机器中直接从命令行运行。

Virsh:管理 VM 的最简单的 shell。

Virtual Machine Manager:也称为 virt-manager,一个管理 VM 的桌面用户接口。

选择 KVM

优点:

尽管 KVM 是一个相对较新的虚拟机管理程序,但这个随主流 Linux 内核发布的轻量型模块提供了简单的实现和对 Linux 重要任务的持续支持。

KVM 是灵活的,因为 Guest 操作系统与集成到 Linux 内核中的虚拟机管理程序通信,所以它们始终可以直接寻址硬件,无需修改虚拟化的操作系统。这使 KVM 成为了更快的虚拟机解决方案。

KVM 的补丁与 Linux 内核兼容。KVM 在 Linux 内核本身内实现,这进而简化了对虚拟化进程的控制。

缺点:

没有成熟的工具可用于管理 KVM 服务器和 VM。

KVM 仍然需要改进虚拟网络支持、虚拟存储支持、增强的安全、高可用性、容错、电源管理、HPC/实时支持、虚拟 CPU 可伸缩性、跨供应商兼容性、VM 可移植性,并构建于一个既有的云服务生态系统之上。


推荐阅读
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
author-avatar
百变精灵621126
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有