KVM 架构概述

简介: 【8月更文挑战第25天】KVM是基于硬件辅助虚拟化技术的虚拟机监控器,核心依赖于CPU的虚拟化支持如Intel VT和AMD-V。

KVM 就是在硬件辅助虚拟化技术之上构建起来的虚拟机监控器。当然,并非要所有这些硬件虚拟化都支持才能运行 KVM 虚拟化,KVM 对硬件最低的依赖是 CPU 的硬件虚拟化支持,比如:Intel 的 VT 技术和 AMD 的 AMD-V 技术,而其他的内存和 I/O 的硬件虚拟化支持,会让整个 KVM 虚拟化下的性能得到更多的提升。

KVM 虚拟化的核心主要由以下两个模块组成:

  • KVM 内核模块

它属于标准 Linux 内核的一部分,是一个专门提供虚拟化功能的模块,主要负责 CPU 和内存的虚拟化,包括:客户机的创建、虚拟内存的分配、CPU 执行模式的切换、vCPU 寄存器的访问、vCPU 的执行。

KVM 模块是 KVM 虚拟化的核心模块,它在内核中由两部分组成:一个是处理器架构无关的部分,用 lsmod 命令中可以看到,叫作 kvm 模块;另一个是处理器架构相关的部分,在 Intel 平台上就是 kvm_intel 这个内核模块。KVM 的主要功能是初始化 CPU 硬件,打开虚拟化模式,然后将虚拟客户机运行在虚拟机模式下,并对虚拟客户机的运行提供一定的支持。

  • QEMU 用户态工具

它是一个普通的 Linux 进程,为客户机提供设备模拟的功能,包括模拟 BIOS、PCI/PCIE 总线、磁盘、网卡、显卡、声卡、键盘、鼠标等。同时它通过 ioctl 系统调用与内核态的 KVM 模块进行交互。

QEMU 支持在 Linux、Windows、FreeBSD、Solaris、MacOS 等多种操作系统上运行,能支持在 QEMU 本身编译运行的平台上就实现虚拟机的功能,甚至可以支持客户机与宿主机并不是同一个架构(比如在 x86 平台上运行 ARM 客户机)。作为一个存在已久的虚拟机监控器软件,QEMU 的代码中有完整的虚拟机实现,包括处理器虚拟化、内存虚拟化,以及 KVM 也会用到的虚拟设备模拟(比如网卡、显卡、存储控制器和硬盘等)。

QEMU 除了提供完全模拟的设备(如:e1000 网卡、IDE 磁盘等)以外,还支持 virtio 协议的设备模拟。virtio 是一个沟通客户机前端设备与宿主机上设备后端模拟的比较高性能的协议,在前端客户机中需要安装相应的 virtio-blk、virtio-scsi、virtio-net 等驱动,而 QEMU 就实现了 virtio 的虚拟化后端。

KVM 是在硬件虚拟化支持下的完全虚拟化技术,所以它能支持在相应硬件上能运行的几乎所有的操作系统,如:Linux、Windows、FreeBSD、MacOS 等。在 KVM 虚拟化架构下,每个客户机就是一个 QEMU 进程,在一个宿主机上有多少个虚拟机就会有多少个 QEMU 进程;客户机中的每一个虚拟 CPU 对应 QEMU 进程中的一个执行线程;一个宿主机中只有一个 KVM 内核模块,所有客户机都与这个内核模块进行交互。

在实际的云计算的虚拟化场景中,为了更高的性能或者管理的方便性,还有很多的软件可以作为 KVM 虚拟化实施中的组件:

vhost-net是 Linux 内核中的一个模块,它用于替代 QEMU 中的 virtio-net 用户态的 virtio 网络的后端实现。使用 vhost-net 时,还支持网卡的多队列,整体来说会让网络性能得到较大提高。在 6.1.6 节中对 vhost-net 有更多的介绍。

Open vSwitch 是一个高质量的、多层虚拟交换机,使用开源 Apache2.0 许可协议,主要用可移植性强的 C 语言编写的。它的目的是让大规模网络自动化可以通过编程扩展,同时仍然支持标准的管理接口和协议(例如 NetFlow、sFlow、SPAN、RSPAN、CLI、LACP、802.1ag)。同时也提供了对 OpenFlow 协议的支持,用户可以使用任何支持 OpenFlow 协议的控制器对 OVS 进行远程管理控制。

DPDK 全称是 Data Plane Development Kit,最初是由 Intel 公司维护的数据平面开发工具集,为 Intel x86 处理器架构下用户空间高效的数据包处理提供库函数和驱动的支持,现在也是一个完全独立的开源项目,它还支持 POWER 和 ARM 处理器架构。不同于 Linux 系统以通用性设计为目的,它专注于网络应用中数据包的高性能处理。

Ceph 是 Linux 上一个著名的分布式存储系统,能够在维护 POSIX 兼容性的同时加入复制和容错功能。Ceph 由储存管理器(Object storage cluster 对象存储集群,即 OSD 守护进程)、集群监视器(Ceph Monitor)和元数据服务器(Metadataserver cluster,MDS)构成。

libguestfs 是用于访问和修改虚拟机的磁盘镜像的一组工具集合。libguestfs 提供了访问和编辑客户机中的文件、脚本化修改客户机中的信息、监控磁盘使用和空闲的统计信息、P2V、V2V、创建客户机、克隆客户机、备份磁盘内容、格式化磁盘、调整磁盘大小等非常丰富的功能。

相关文章
|
5月前
|
存储 SQL 关系型数据库
ClickHouse(02)ClickHouse架构设计介绍概述与ClickHouse数据分片设计
ClickHouse的核心架构包括执行过程和数据存储两部分。执行过程涉及Parser与Interpreter解析SQL,通过Column、DataType、Block、Functions和Storage模块处理数据。Column是内存中列的表示,Field处理单个值,DataType负责序列化和反序列化,Block是内存中表的子集,Block Streams处理数据流。Storage代表表,使用不同的引擎如StorageMergeTree。数据存储基于分片和副本,1个分片由多个副本组成,每个节点只能拥有1个分片。
349 0
ClickHouse(02)ClickHouse架构设计介绍概述与ClickHouse数据分片设计
|
5月前
|
存储 SQL Java
数据库TiDB-01.数据库架构概述
TiDB兼容MySQL 5.7协议,支持水平扩容或者缩容的金融级高可用的云原生分布式数据库。
467 2
数据库TiDB-01.数据库架构概述
|
5月前
|
存储 安全 Java
SpringCloud整体架构概述
SpringCloud整体架构概述
125 0
|
机器学习/深度学习 Kubernetes Cloud Native
SAP 云平台 (Cloud Platform) 架构概述
SAP 云平台 (Cloud Platform) 架构概述
|
5月前
|
存储 运维 关系型数据库
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
|
5月前
|
缓存 自然语言处理 前端开发
第一章 引言-HTTP协议基础概念和前后端分离架构请求交互概述
第一章 引言-HTTP协议基础概念和前后端分离架构请求交互概述
129 0
|
2月前
|
存储 JavaScript 前端开发
Redux:概述和架构
【8月更文挑战第24天】
35 0
|
4月前
|
存储 监控 Linux
Docker技术架构概述
【6月更文挑战第29天】Docker采用CS架构,Client与Daemon交互,Compose管理多容器应用。
|
5月前
|
安全 Java 大数据
Spring概述、系统架构及核心概念
Spring概述、系统架构及核心概念
197 0
|
5月前
|
传感器 Java Android开发
Android HAL深入探索(1): 架构概述
Android HAL深入探索(1): 架构概述
518 1