纯QEMU(无 KVM):通过软件模拟硬件,兼容性强但性能低。 QEMU + KVM:利用 CPU 硬件虚拟化,性能接近物理机,适合生产环境。 命令示例: # 使用 KVM 加速启动虚拟机qemu-system-x86_64 -enable-kvm -m 4096 -hda ubuntu.img 3. QEMU-KVM 架构 用户空间: QEMU 进程负责虚拟机管理、设备模拟和 I/O 处理。 通...
1. 创建KVM 在/vl.c中通过kvm_init()将会创建各种KVM的结构体变量,并且通过IOCTL与已经初始化好的KVM模块进行通讯,创建虚拟机。然后创建VCPU,等等。 2. KVM_RUN 这个IOCTL是使用最频繁的,整个KVM运行就不停在执行这个IOCTL,当KVM需要QEMU处理一些指令和IO等等的时候就会退出通过这个IOCTL退回到QEMU进行处理,不然就...
Qemu 将 KVM 整合进来,通过 ioctl 调用 /dev/kvm 接口,将有关 CPU 指令的部分交由内核模块来做,就是 qemu-kvm (qemu-system-XXX) qemu 和 kvm 整合之后,CPU 的性能问题解决了,另外 Qemu 还会模拟其他的硬件,如 Network, Disk,同样全虚拟化的方式也会影响这些设备的性能。 于是qemu 采取半虚拟化或者类虚拟...
如下图所示,kvm.ko 运行在 Kernel space,并通过 /dev/kvm 文件向 User space 暴露了交互接口,同时也提供了 libkvm 函数库给 QEMU 进行 include。 QEMU 通过 open() / close() 来打开/ 关闭 /dev/kvm 设备接口文件,并通过设备 I/O 接口 ioctl() 来调用 kvm.ko 提供的接口函数,以此来应用 KVM 基于硬件...
kvm_init //创建虚拟机 kvm_ioctl(KVM_CREATE_VM) kvm_arch_init kvm_confidential_guest_init //如果是AMD SEV或Intel TDX则进行额外的初始化 sev_kvm_init tdx_kvm_init tdx_machine_done_notify tdx_finalize_vm //TD guest的内存分配和normal guest一样. 转为private的奥秘在此 ...
而KVM 的管理工具栈有QEMU:qemu-kvm,qemu-img 和libvirt:CLI: virt-install, virsh。 我这里就说到了 QEMU 了, QEMU 主要为 KVM 提供了以下几个部分: 处理器模拟器 仿真IO 设备 关联模拟的设备至真实设备; 调试器 与模拟器交互的用户接口 而就QEMU是怎么样的呢?
KVM 本身不执行任何模拟,需要用户空间成程序通过 dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟 IO,并将它的视频显示映射回宿主的显示屏。目前,这个程序就是Qemu。 KVM 模块是 “KVM 虚拟机” 的核心部分。其主要功能是初始化 CPU 硬件,打开虚拟化模式,然后将虚拟客户机运行在虚拟机模式下,并对...
kvm运行在内核空间,qemu运行在用户空间,两者结合起来,其中kvm实现对cpu和内存的虚拟化,qemu实现对其他硬件的虚拟化(比如网卡, 硬盘)和对虚拟硬件的调用管理,这样用户创建的虚拟机的cpu指令就不用经过qemu转译,可以直接运行,性能得到很大的提升。 Libvirt
Qemu本身并不是KVM的一部分,而是一整套完整的虚拟化解决方案,它是纯软件实现的,包括处理器虚拟化、内存虚拟化以及各种虚拟设备的模拟,但因为是纯软件模拟,所以性能相对比较低。 广义上的KVM包含两部分,一部分是基于LINUX内核支持的KVM内核模块,另一部分就是经过简化和修改Qemu。