导语:当虚拟机内部故障[crash,oom等]时,通过信号量通知到qemu,qemu将这一事件发送给libvirtd,libvirtd通过event事件机制响应,根据不同事件类型做出相应处理。文章以讲述libvirtd响应虚拟机故障[crash]事件为例,端到端拉通讲述libvirtd响应虚拟机事件处理机制的核心代码流程,主要包括两部分:1.qemu侧,guest如何通知qemu,qemu如何响应?2.libvirt侧,libvirt与qemu交互,如何获取qemu event事件?
代码版本:
libvirt 3.2.0
qemu 2.6.0
kernel 3.10.0-693
libvirt部分
说明:qemu event指代qemu进程发给libvirtd的事件
libvirtd在qemuMonitorIO函数中响应qemu event事件,创建虚拟机流程中通过virEventAddHandle将该函数关联到libvirtd的event loop中监控流程中,具体添加逻辑见“libvirt Qemu Monitor机制分析”分析流程。
分析qemuMonitorIO中处理qemu event事件逻辑
qemuMonitorIO(int watch, int fd