本文详解QMP,包含qmp、hmp、qemu-guest-agent的介绍、工作原理、配置方法、范例
小慢哥的原创文章,欢迎转载
目录
▪ QMP介绍
▪ QMP语法
▪ 单独使用qemu,启用QMP
▪ 通过libvirt启动qemu,启用QMP
▪ qemu-guest-agent(qemu-ga)
▪ 官方参考文档
QMP介绍
qemu对外提供了一个socket接口,称为qemu monitor,通过该接口,可以对虚拟机实例的整个生命周期进行管理,主要有如下功能
▷ 状态查看、变更
▷ 设备查看、变更
▷ 性能查看、限制
▷ 在线迁移
▷ 数据备份
▷ 访问内部操作系统
通过该socket接口传递交互的协议是qmp,全称是qemu monitor protocol,这是基于json格式的协议
在继续往下讲之前,需要先了解qemu、kvm、libvirt之间的区别(因为有很多童鞋对这三者的理解是混乱的)
▷ qemu:虚拟机仿真器。通过软件模拟出cpu、内存、磁盘、主板、网卡等设备
▷ kvm:高性能的cpu仿真器。由于软件模拟的cpu性能很差,因此出现了kvm,这是通过硬件与内核的支持实现接近native性能的cpu仿真器,可以理解为虚拟机里的cpu任务直接交给物理机cpu完成。
▷ libvirt:虚拟机管理平台。能纳管qemu、lxc、esx等虚拟化软件,通过编写xml实现对虚拟机、存储、网络等进行配置和管理
上面只描述最核心的功能,另有一些高级功能,以及互相重叠的功能在这里不做描述,否则容易混淆
QMP语法
# 不带参数的指令
{ "execute" : "XXX" }
# 带参数的指令
{ "execute" : "XXX", "arguments" : { ... } }
单独使用qemu,启用QMP
启动qemu虚拟机
# qemu monitor采用tcp方式,监听在127.0.0.1上,端口为4444
/usr/libexec/qemu-kvm -qmp tcp:127.0.0.1:4444,server,nowait
# qemu monitor采用unix socket,socket文件生成于/opt/qmp.socket
/usr/libexec/qemu-kvm -qmp unix:/opt/qmp.socket,server,nowait
连接qemu monitor
# tcp可以通过telnet进行连接,方法如下
> telnet 127.0.0.1