Linux kernel 为什么在kvm中一段时间后MTF位复位?
我一直在玩VMX和KVM,有一些更一般和更精确的问题Linux kernel 为什么在kvm中一段时间后MTF位复位?,linux-kernel,virtual-machine,x86-64,qemu,kvm,Linux Kernel,Virtual Machine,X86 64,Qemu,Kvm,我一直在玩VMX和KVM,有一些更一般和更精确的问题 我用virtual manager创建了一个VM,因为我认为(从我在网上读到的内容来看)这是让来宾运行Ubuntu 18.04(在我的例子中)或整个操作系统的最简单方法。这是否添加/更改了KVM/qemu实现中的任何内容,或者只是一个接口 据我在KVM中的理解(当插入内核模块(KVM和KVM_intel)时),内核确实扮演了虚拟机监控程序的角色。这是正确的吗?在这个假设下,我假设一个新的内核模块将成为hypervisor的一部分。在一个基本内
- 经过很短的一段时间后,它就停止了(位再次为0)。有什么东西复位了吗?这是怎么发生的?qemu是否也参与其中
- 例如,在打印Rip时,在来宾中执行循环时,正在打印的Rip每一步都会增加,并且不会返回。vm正在执行什么?我是否退出了正确的VM,或者在KVM或qemu中是否存在我不知道的其他结构
在第二季度,如果您在主机和客户机中运行相同的操作系统,那么它们在这些方面可能具有相同的值也就不足为奇了。在第三季度,我的虚拟机监控程序在非常特定的情况下启用MTF,并且总是在下一个VM条目上禁用MTF,除非导致启用MTF的条件仍然存在。我不知道qemu的情况,但可能类似。我希望qemu不希望另一个模块操纵执行控制。每个CPU总是有一个单独的VMC。因为您有guest RIP值,所以如果它是内核地址,应该很容易在guest内核的链接映射中查找它。如果是用户地址,那就更难了。谢谢@prl!是的,当然是0x8000000。我不确定昨天写问题时我在想什么。在我的代码中,我设置了正确的位,否则,我认为不会调用handle\u monitor\u trap。问题2。这是有道理的!非常感谢。那么翻译发生在哪里呢?或者他们共用同一IDT?但是,当向IDT添加新向量并尝试从来宾调用它时,它找不到自定义处理程序,而我的主机却找到了。
__asm__ __volatile__ ("vmwrite %[value], %[encoding]; setna %[ret]"
: [ret]"=rm"(ret)
: [value]"rm"(value), [encoding]"r"(encoding) : "cc", "memory");