KVM实际是Linux内核提供的虚拟化架构,可将内核直接充当hypervisor
来使用。
KVM包含一个内核模块kvm.ko用来实现核心虚拟化功能,以及一个和处理器强相关的模块如kvm-amd.ko。KVM本身不实现任何模拟,仅仅是暴露了一个/dev/kvm
接口,这个接口可被宿主机用来主要负责vCPU的创建,虚拟内存的地址空间分配,vCPU寄存器的读写以及vCPU的运行。有了KVM以后,guest os的CPU指令不用再经过QEMU来转译便可直接运行,大大提高了运行速度。但KVM的kvm.ko本身只提供了CPU和内存的虚拟化,所以它必须结合QEMU才能构成一个完整的虚拟化技术。
KVM实现了CPU和内存的虚拟化,但KVM并不能模拟其他设备,还必须有个运行在用户空间的工具才行。KVM的开发者选择了比较成熟的开源虚拟化软件QEMU来作为这个工具,QEMU模拟IO设备(网卡,磁盘等),对其进行了修改,最后形成了Qemu-KVM。
在Qemu-KVM中,KVM运行在内核空间,QEMU运行在用户空间
,实际模拟创建、管理各种虚拟硬件,QEMU将KVM整合了进来,通过/ioctl 调用 /dev/kvm,从而将CPU指令的部分交给内核模块来做,KVM实现了CPU和内存的虚拟化,但KVM不能虚拟其他硬件设备,因此QEMU还有模拟IO设备(磁盘,网卡,显卡等)的作用,KVM加上QEMU后就是完整意义上的服务器虚拟化。
实验环境
[root@master ~]# lscpu
Architecture: aarch64
CPU op-mode(s): 64-bit
Byte Order: Little Endian
CPU(s): 64
On-line CPU(s) list: 0-63
Thread(s) per core: 1
Core(s) per socket: 32
Socket(s): 2
NUMA node(s): 2
Vendor ID: HiSilicon
Model: 0
Model name: Kunpeng-920
Stepping: 0x1
CPU max MHz: 2600.0000
CPU min MHz: 200.0000
BogoMIPS: 200.00
L1d cache: 4 MiB
L1i cache: 4 MiB
L2 cache: 32 MiB
L3 cache: 64 MiB
NUMA node0 CPU(s): 0-31
NUMA node1 CPU(s): 32-63
Vulnerability Itlb multihit: Not affected
Vulnerability L1tf: Not affected
Vulnerability Mds: Not affected
Vulnerability Meltdown: Not affected
Vulnerability Mmio stale data: Not affected
Vulnerability Spec store bypass: Not affected
Vulnerability Spectre v1: Mitigation; __user pointer sanitization
Vulnerability Spectre v2: Not affected
Vulnerability Srbds: Not affected
Vulnerability Tsx async abort: Not affected
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma dcpop asimddp asimdfhm
操作系统版本
[root@master ~]# cat /etc/kylin-release
Kylin Linux Advanced Server release V10 (Lance)
[root@master ~]# cat /proc/version
Linux version 4.19.90-52.15.v2207.ky10.aarch64 (KYLINSOFT@localhost.localdomain) (gcc version 7.3.0 (GCC)) #1 SMP Thu Nov 24 15:59:41 CST 2022
简单查看是否支持虚拟化(不显示也没事)
[root@master ~]# dmesg | grep kvm
[ 0.718369] kvm [1]: Hisi ncsnp: enabled
[ 0.718372] kvm [1]: 16-bit VMID
[ 0.718373] kvm [1]: IPA Size Limit: 48bits
[ 0.718377] kvm [1]: GICv4 support disabled
[ 0.718378] kvm [1]: vgic-v2@9b020000
[ 0.718379] kvm [1]: GIC system register CPU interface enabled
[ 0.718394] kvm [1]: vgic interrupt IRQ1
[ 0.718414] kvm