云计算基础知识点
KVM ---------- > 基于Linux内核实现
其中一个内核模块为 kvm.ko ,用于管理虚拟CPU和内存
只关注虚拟机的调度和内存管理
KVM 的CPU虚拟化
KVM 的虚拟化需要 CPU 的硬件支持。一个 KVM 虚拟机在宿主机 (host,一般为物理机) 中是一个 qemu-kvm 进程,与其他的Linux进程一样被调度。
虚拟机中的每一个虚拟的 vCPU 则对应 qemu-kvm 进程中的一个线程。
其中 , 宿主机 有两个物理 CPU ,上一层为两个虚拟机 VM1 和 VM2
VM1 有两个 vCPU 和 两个线程
VM2 有4个 vCPU 和 4 个线程
因此可以看出 ,虚拟机的 vCPU 总数可以超过物理 CPU 的数量,即 CPU 的超配。在使用超配时应需要 对虚拟机的负载情况有所了解,并进行测试。
KVM 的内存虚拟化
KVM 通过 内存虚拟化共享物理系统内存,动态分配给虚拟机。
KVM需要实现 VA (虚拟内存) -> PA(物理内存)-> MA(机器内存)之间的地址转换。
虚拟 OS 控制虚拟地址到客户内存物理地址的映射,但是虚拟机 OS 不能直接访问实际机器的内存 ,因此 KVM 需要负责映射客户物理内存到实际机器内存。
IO的虚拟化,例如存储和网络设备由 Linux内核 和 Qemu 来实现
Libvirt ----------> KVM 的管理工具
包括 : 后台 daemon 程序 libvirtd 、API 库 和 命令行工具virsh
libvirtd 是服务程序,接收和处理API 的请求
API 库使得其他人可以开发基于Libvirt的高级工具
virsh 是经常要使用的KVM命令行工具
qemu-kvm 和 qemu-system 是 KVM 和 QEMU 的核心包,提供 CPU 、 内存 和 IO 虚拟化功能
libvirt-bin 即 libvirt ,用于管理 KVM 等 Hypervisor
virt-manager 是 KVM 图形化管理工具
bridge-utils 和 vlan ,主要是网络虚拟化的需要,KVM 网络虚拟化的实现是基于linux-bridge 和 vlan