其他分享
首页 > 其他分享> > KVM入门

KVM入门

作者:互联网

虚拟化简介

CPU虚拟化

在没有VMX(vritualization extesion)之前,通过权限解除(de-privileged),使Guest OS运行在ring1之上,而Guest OS的应用程序运行在ring3,遇到可以trap的敏感指令(即是特权指令的敏感指令)则下陷,不能trap的边界指令,则编译前通过半虚拟化转换为可以trap ring0的系统调用或是运行时通过模拟仿真、二进制编译,强行翻译成别的东西进行系统调用。
在VMX出现之后,通过VT-x、AMD-V或TrustZone(secure world/non-secure world)的硬件虚拟化技术,将VM的Guest OS和应用程序分别运行在non-root的ring0和ring3下(或non-secure world的EL1和EL0下)省去了de-privileged的过程,只有遇到non-root下的异常、IO访问、指令和特定寄存器的访问,才会触发VMExit事件。

这里再总结整理下,根据原理不同,虚拟化技术可以分为三种:

内存虚拟化

Host OS需要通过CPU的MMU,完成VA-MA(PA)的转换,而Guest OS需要两级转换:GVA-GPA-[VMM维护]-MA(HPA)
而没有内存虚拟化支持的情况下,VMM一般需要给Guest OS进程维护一个GVA到HPA的影子页表来完成地址转换

IO虚拟化

VM中所有的IO都会触发异常,然后陷入VMM,VMM则利用host OS上运行的一个应用级进程模拟调用Host OS的系统调用,完成操作
以VM Workstation为例,这个过程通过VMdriver、VMM和VMApp来协同完成:

在这里插入图片描述在这里插入图片描述

KVM介绍

基于内核的虚拟机

没有重新写一个VMM,而是选择了Linux Kernel,通过加载新的模块,将Linux Kernel变成一个VMM

基于虚拟化扩展(Intel VT或AMD-V)的x86硬件的开源的Linux原生全虚拟化解决方案。

KVM中虚拟机被实现成常规的Linux进程,由标准的Linux调度程序进行调度;虚拟机的每个vCPU都被实现为一个常规的Linux线程

在这里插入图片描述

KVM不执行硬件模拟,用户空间程序通过/dev/kvm接口设置一个客户机虚拟服务器的地址空间,向他提供模拟IO

对比VM workstation,KVM内核模块功能实现了VM driver和VMM,QEMU实现了VMApp

流程

KVM被加载时:

IO虚拟化

支持虚拟化的CPU,带有特别优化过的指令集来控制虚拟化过程。当Guest尝试访问物理资源,就会将控制权交给VMM

VMM也可以利用硬件的虚拟化增强机制,将客户机在受限模式下对特定资源的访问完全由硬件重定向到VMM指定的虚拟资源

QEMU-KVM:

QEMU是纯软件实现的虚拟化系统,其中包含整套的虚拟机实现,包括处理器虚拟化、内存虚拟化、以及虚拟设备模拟

KVM对其进行了修改,VM运行时,QEMU会通过KVM提供的系统调用进入内核,由KVM负责将虚拟机置于处理的特殊模式运行

VM进行IO操作时,KVM会从上次系统调用出口处返回QEMU,由QEMU负责解析模拟设备。

QEMU使用了KVM模块的虚拟化功能,为自己的VM提供了硬件虚拟化加速。VM的配置创建、VM运行所依赖的虚拟设备、VM运行时的用户环境和交互、以及一些VM的特定技术:动态迁移,都是QEMU自己实现的

CPU虚拟化

虚拟机创建和运行时QEMU和KVM相互配合的过程,两者通信时通过/dev/kvm的IOCTL调用。创建VM可以理解为KVM为了某个特定的虚拟机创建对应的内核数据接口,KVM返回一个文件句柄来代表所创建的VM,伪代码:

open(“/dev/kvm”) 
ioctl(KVM_CREATE_VM) 
ioctl(KVM_CREATE_VCPU) 
… 
for (;;) { 
exit _reason = ioctl(KVM_RUN) 	//返回意味着VMExit
switch (exit_reason) { 
case KVM_EXIT_IO: /* … */ 
case KVM_EXIT_HLT: /* … */ 
} 
}

内存虚拟化

在虚拟机模式下,MMU 的页表则必须在一次查询的时候完成两次地址转换。因为除了将客户机程序的虚拟地址转换了客户机的物理地址外,还要将客户机物理地址转化成真实物理地址。

实践

//Ubuntu18.04下搭建kvm    
    1  apt-get install qemu-kvm qemu-system libvirt-bin bridge-utils virt-manager
	//直接克隆的ubuntu虚拟机,所以存在lock问题
    2  rm /var/cache/apt/archives/lock 
    3  rm /var/lib/dpkg/lock

	4  apt-get install qemu-kvm qemu-system libvirt-bin bridge-utils virt-manager
    5  wget http://tinycorelinux.net/7.x/x86/release/TinyCore-current.iso
    6  ls
    7  qemu-system-x86_64 -smp 2 -enable-kvm -cdrom ./TinyCore-current.iso 
    8  virsh list --all
   10  virsh destroy test
    4  virt-manager	//打开kvm软件

qemu窗口下,按下ctrl+alt+2,运行info kvm

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

KVM功能列表&工具

功能:

工具集合:

标签:VMM,入门,虚拟化,KVM,VM,kvm,QEMU
来源: https://blog.csdn.net/qq_41667409/article/details/121437748