kvm_emualte_instruction(struct kvm_vcpu *vcpu, int emulation_type)
根据当前vcpu的状态和指定的emulation_type来进行当前vcpu所执行的指令进行模拟。
qemu-system-x86_64命令创建虚拟机的详细过程
当使用qemu-system-*arch*启动虚拟机的时候,不用是使用的哪种arch的qemu程序,其函数入口都为vl.c中的main函数。
本文具体分析使用qemu-system-x86_64创建虚拟机的详细过程。
Intel CPU中memroy type的设置
本文介绍Intel CPU如何设置一个内存地址的memory type,也就是cache type.
KVM向userspace提供查询CPUID相关的2个IOCTL
本文介绍KVM的两个IOCTL,其都为VM level的ioctl:KVM_GET_SUPPORTED_CPUID和KVM_GET_EMULATED_CPUID.
userspace的VMM程序,可以调用KVM_GET_SUPPORTED_CPUD来查询host kvm可以向guest支持哪些CPUID;可以调用KVM_GET_SUPPORTED_CPUID来查询kvm对guest支持的哪些CPUID是模拟的。
kernel对CPUID所能枚举的features的处理
本文介绍Linux kernel是如何读取CPU支持哪些cpu features,并是如何将CPUID指令查询的cpu features保存到boot_cpu_data.x86_capabilities结构中的。
qemu对CPUID的处理
本文介绍当使用-cpu参数指令cpu model后(不论是-cpu host或者-cpu IceLake等),QEMU是如何根据不同的cpu model来设置CPUID features的。
关于-cpu参数的工作原理,可以参考qemu中cpu model(cpu type)的设置
qemu中cpu model(cpu type)的设置
KVM需要配合QEMU使用,当我们使用QEMU起虚拟机的时候,会使用qemu-system-x86_64程序。具体地我们会使用参数-cpu model来指定guest使用的cpu model。本文分析-cpu参数是如何工作的。
QEMU对MSR的处理(二)
在QEMU对MSR的处理(一)中,我们介绍了qemu中有kvm_get_supported_msrs()函数。该函数会调用kvm_ioctl(KVM_GET_MSR_INDEX_LIST),kvm会向qemu返回其定义的msr_to_save[]和emulated_msrs[]数组。
之后qemu就可以调用vcpu_ioctl(KVM_GET_MSRS)和vcpu_ioctl(KVM_SET_MSRS)来get/set之前获取到的suppoted_msrs[]。