天天看点

qemu-kvm设备hot-plug原理分析前序代码分析

前序

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);
    
           

继续阅读