libvirt 是如何与 kvm 通信的?

How does libvirt communicate with kvm?

我试图更好地了解 libvirt 如何与 KVM 通信,以便能够从我正在开发的主机上的单个进程启动 KVM 实例。

它是否像qemu-kvm一样使用ioctl?它是否使用某种远程消息传递,如 dbus 或直接消息传递到本地套接字(我倾向于远离本地套接字)?或者它是否直接绑定到 KVM 的内核 ABI?

是否有可能(在内核之上,而不是在内核中)(而不是最坏的想法)绕过 libvirt 并通过 libvirt 使用的方式直接与 KVM 对话? (这部分只是出于好奇)

从技术上讲,libvirt 本身根本不与 KVM 对话。 KVM 是 QEMU 用来提供 CPU 虚拟化的内核模块。 Libvirt 管理 QEMU 并让 QEMU 处理 KVM。可以编写不同的用户空间应用程序来使用 KVM - kvmtool 是使用 KVM 内核模块的 QEMU 的一种替代方案。在启动初始进程后,Libvirt 通过 QEMU 的监控协议与 QEMU 对话。