MonitorProtocol

From KVM
Revision as of 16:40, 17 December 2009 by Luizcapitulino (talk | contribs)

QEMU Monitor Protocol

The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU's Monitor.

QMP is JSON-based, its main features are:

  • Lightweight, text-based, easy to parse data format
  • Asynchronous events support

The README file explains how to use it and its full specification can be found here.

General Status

QMP is available in QEMU since version 0.13.

However, it is still under development and not all Monitor commands are currently available. For more information, please, check #Conversion Status.

Examples

In the following examples, 'C' stands for 'Client' and 'S' stands for 'Server'.

Server Greeting

S: {"QMP": {"capabilities": []}}

Query version

C: { "execute": "query-version" }
S: {"return": {"qemu": "0.11.50", "package": ""}}

Eject a device

C: { "execute": "eject", "arguments": { "device": "ide1-cd0" } }
S: {"return": "OK"}

Development

Primary contact is Luiz Capitulino, but most QMP-related discussions happen on the qemu-devel mailing list.

Next features, hot fixes and other patches are stored in the QMP unstable repository:

http://repo.or.cz/w/qemu/qmp-unstable.git

NOTE: all branches in this repository are constantly rebased.

TODO

  • High-level documentation
  • Convert all commands
  • Proper error handling support
  • Asynchronous commands support
  • Better QObjects and QMP debug support
  • Libqmp

Conversion Status

UPDATED: 2009-12-16

Command Info
Handlers 62 36
Converted 19 15
Percentage 30% 41%

The following tables have a per-function status. There is one table for command handlers and another one for info handlers.

Status can be:

  • merged: already merged upstream
  • converted: converted but not merged yet
  • partial: merged, but error handling is incomplete

NOTE: Handlers used by Libvirt are marked with yellow.

Command handlers

Handler name Status Version Comments
do_acl_add()
do_acl_policy()
do_acl_remove()
do_acl_reset()
do_acl_show()
do_balloon() merged 0.13
do_boot_set()
do_change() merged 0.13
do_closefd() merged 0.13
do_commit()
do_cont() merged 0.13
do_cpu_set()
do_delvm()
do_device_add()
do_device_del()
do_eject() merged 0.13
do_gdbserver()
do_getfd() merged 0.13
do_help_cmd()
do_info() merged 0.13 as 'query-' commands
do_inject_mce()
do_inject_nmi()
do_ioport_read()
do_ioport_write()
do_loadvm()
do_log()
do_logfile()
do_memory_dump()
do_memory_save() partial 0.13
do_migrate() partial 0.13
do_migrate_cancel() merged 0.13
do_migrate_set_downtime()
do_migrate_set_speed() merged 0.13
do_mouse_button()
do_mouse_move()
do_mouse_set()
do_pci_device_hot_remove() partial 0.13
do_physical_memory_dump()
do_physical_memory_save() partial 0.13
do_print()
do_quit() merged 0.13
do_savevm()
do_screen_dump()
do_sendkey()
do_set_link()
do_singlestep()
do_stop() merged 0.13
do_stop_capture()
do_sum()
do_system_powerdown() merged 0.13
do_system_reset() merged 0.13
do_usb_add()
do_usb_del()
do_watchdog_action()
do_wav_capture()
drive_hot_add()
net_host_device_add()
net_host_device_remove()
net_slirp_hostfwd_add()
net_slirp_hostfwd_remove()
pci_device_hot_add() partial 0.13

Info handlers

Handler name Status Version Comments
bdrv_info() merged 0.13
bdrv_info_stats() merged 0.13
do_info_balloon() merged 0.13
do_info_capture()
do_info_cpus() merged 0.13
do_info_cpu_stats()
do_info_history()
do_info_hpet() merged 0.13
do_info_jit()
do_info_kvm() merged 0.13
do_info_mice() merged 0.13
do_info_migrate() merged 0.13
do_info_name() merged 0.13
do_info_network()
do_info_numa()
do_info_profile()
do_info_qdm()
do_info_qtree()
do_info_registers()
do_info_roms()
do_info_snapshots()
do_info_status() merged 0.13
do_info_usernet()
do_info_uuid() merged 0.13
do_info_version() merged 0.13
do_info_vnc() merged 0.13
irq_info()
mem_info()
pci_info()
pcmcia_info()
pic_info()
qemu_chr_info() merged 0.13
tlb_info()
usb_host_info()
usb_info()

History

This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links: