qemu-kvm设备hot-plug原理分析

本文深入剖析QEMU-KVM的设备热插拔机制,从HMP和QMP协议交互开始,详细解释了设备添加的代码流程,涉及QDict、QemuOpts、QOM模型和ACPI hotplug机制。通过分析KVM内核代码,展示了设备中断事件如何从主机到客户机的传递,最后介绍了设备中断的注入过程。
摘要由CSDN通过智能技术生成

前序

qemu向外暴露的vm设备热拔插cmd是device_add,上层应用程序【libvirt】通过HMP(Human Monitor Protocol)和QMP(Qemu Monitor Protocol)协议与qemu进行交互。HMP是在QMP之上做了一层封装,供上层应用程序更友好直接通过cmd与qemu交互,而QMP是上层应用程序与qemu之间通过API交互的协议。

代码分析

以kvm3.0代码为例
device_add代码入口,hmp.c

void hmp_device_add(Monitor *mon, const QDict *qdict)
{
    Error *err = NULL;
    qmp_device_add((QDict *)qdict, NULL, &err);
    hmp_handle_error(mon, &err);
}

hot-plug device的信息都保存在QDict结构体里,进入到qdev-monitor.c

void qmp_device_add(QDict *qdict, QObject **ret_data, Error **errp)
{
    Error *local_err = NULL;
    QemuOpts *opts;
    DeviceState *dev;

    opts = qemu_opts_from_qdict(qemu_find_opts("device"), qdict, &local_err);
    if (local_err) {
        error_propagate(errp, local_err);
        return;
    }
    ...
    dev = qdev_device_add(opts, &local_err);
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李天琦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值