首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >qemu-kvm如何在内部创建VM线程?

问qemu-kvm如何在内部创建VM线程?
EN

Stack Overflow用户
提问于 2012-06-07 05:19:08
回答 2查看 6K关注 0票数 3

现在我正在做一个关于qemu-kvm和linux任务调度器的项目,我知道每个VCPU都是由qemu为linux操作系统创建的一个普通任务。然后,我尝试执行qemu命令来查看任务是如何创建的。我使用strace来跟踪所有的系统调用。我没见过像"fork“或”pthreadcreate“这样的.But:

代码语言:javascript
复制
open("/dev/kvm", O_RDWR|O_LARGEFILE)    = 3
ioctl(3, KVM_GET_API_VERSION, 0)        = 12
ioctl(3, KVM_CHECK_EXTENSION, 0x19)     = 0
ioctl(3, KVM_CREATE_VM, 0)              = 4
ioctl(3, KVM_CHECK_EXTENSION, 0x4)      = 1
ioctl(3, KVM_CHECK_EXTENSION, 0x4)      = 1
ioctl(4, KVM_SET_TSS_ADDR, 0xfffbd000)  = 0
ioctl(3, KVM_CHECK_EXTENSION, 0x25)     = 0
ioctl(3, KVM_CHECK_EXTENSION, 0xb)      = 1
ioctl(4, KVM_CREATE_PIT, 0xb)           = 0
ioctl(3, KVM_CHECK_EXTENSION, 0xf)      = 2
ioctl(3, KVM_CHECK_EXTENSION, 0x3)      = 1
ioctl(3, KVM_CHECK_EXTENSION, 0)        = 1
ioctl(4, KVM_CREATE_IRQCHIP, 0)         = 0
ioctl(3, KVM_CHECK_EXTENSION, 0x1a)     = 0

所以看起来它打开了设备/dev/kvm并执行了一些ioctl syscall。我相信这是实际创建VM线程的地方。对吗?我是操作系统的新手,如果有人能给我一些clue:>,我将不胜感激

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-03 23:05:29

VCPU既不是操作系统线程,也不是进程。要了解VCPU是如何工作的,我们首先应该弄清楚来宾操作系统是如何在Intel VT-x架构上运行的。

Intel VT-x提出了两种模式:VMX root mode和VMX non-root mode,分别用于运行主机虚拟机模型和来宾虚拟机。Intel VT-x还包含一个新的结构:VMCS,它保存了主机和来宾所需的所有信息。VMCS为每位客人提供一份。

KVM是一个硬件辅助的虚拟机管理程序,它利用Intel VT-x。主机Linux KVM在VMX root mode中运行。当KVM决定切换CPU模式来运行客户机时,KVM会将所有当前上下文转储到VMCS,并执行"VMLAUNCH“指令。"VMLAUNCH“将CPU从VMX root mode转移到VMX non-root mode,并从VMCS加载来宾上下文,然后开始或继续执行来宾代码。

总之,来宾代码直接在VMX non-root mode中的CPU上运行。不需要VCPU的软件模拟层。这就是为什么KVM具有更好的性能,并且没有特定的来宾线程。

/dev/kvm是由kvm.ko创建的,它只是QEMU的一个KVM接口。您的strace输出显示了QEMU如何与KVM交互并控制底层客户机。在KVM中永远找不到fork或clone系统调用。

有关KVM的更多细节,特别是VCPU,您可以阅读arch/x86/kvm/vmx.c中的KVM代码,了解更多基于Intel VT-x的VCPU实现细节。

票数 4
EN

Stack Overflow用户

发布于 2014-01-29 01:04:55

尽管VCPU是不同于线程或进程的操作系统对象,并且VCPU对象是使用QEMU创建的,但KVM_CREATE_VCPU确实为每个VCPU创建了一个线程。当QEMU从该线程执行KVM_RUN时,来宾操作系统运行(物理CPU进入VMX非根模式)。KVM_CREATE_VCPU返回一个新的文件描述符,这就是您将在KVM_RUN ioctl中看到的fd。

您的strace中可能缺少vCPU线程,因为您未使用-ff选项。-ff要求strace还跟踪除初始线程之外的其他线程。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10922475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档