MonitorProtocol: Difference between revisions

From KVM
No edit summary
No edit summary
Line 33: Line 33:
The long-term plan is to provide a full management API for QEMU.
The long-term plan is to provide a full management API for QEMU.


== Project status (2009-10-20) ==
== Development ==
 
The development takes place in the QMP unstable tree:
 
http://repo.or.cz/w/qemu/qmp-unstable.git
 
'''NOTE''': all branches in this repository are constantly ''rebased''.
 
Important branches:
 
* '''master''': contains a functional QMP implementation for emission only (includes asynchronous messages). Protocol documentation can be found in the [http://repo.or.cz/w/qemu/qmp-unstable.git?a=tree;f=QMP;h=290262119cc6c9e07a6ef7a078384ef12c491e51;hb=HEAD QMP directory ]
* '''conversions-simple''': contains simple handler conversions that do not depend on the JSON decoder
* '''conversions-json-parser''': contains handler conversions which depend on the JSON decoder, therefore the latest version of Anthony's QJSon series is included
 
=== Project status (2009-10-20) ===


Most of the infrastructure has been merged, a JSON decoder should be merged in the next days. The important missing parts are the error framework and the JSON encoder.
Most of the infrastructure has been merged, a JSON decoder should be merged in the next days. The important missing parts are the error framework and the JSON encoder.
Line 39: Line 53:
Additionally, all command handlers need to be converted to use ''QObjects''. This work is in progress, but several handlers depend on the JSON decoder.
Additionally, all command handlers need to be converted to use ''QObjects''. This work is in progress, but several handlers depend on the JSON decoder.


=== Main building blocks ===
==== Main building blocks ====


* QObject Layer ('''merged''')
* QObject Layer ('''merged''')
Line 47: Line 61:
* Error framework ('''under discussion''')
* Error framework ('''under discussion''')


=== Command handlers conversion work ===
==== Command handlers conversion work ====


* Input through QDict ('''merged''')
* Input through QDict ('''merged''')
Line 53: Line 67:
* Error handling ('''not started''')
* Error handling ('''not started''')


== Development ==
=== Handlers conversion detailed status ===
 
The development takes place in the QMP unstable tree:
 
http://repo.or.cz/w/qemu/qmp-unstable.git
 
'''NOTE''': all branches in this repository are constantly rebased.
 
The ''master'' branch contains a functional QMP implementation for emission only (includes asynchronous messages). Protocol documentation can be found in the [http://repo.or.cz/w/qemu/qmp-unstable.git?a=tree;f=QMP;h=290262119cc6c9e07a6ef7a078384ef12c491e51;hb=HEAD QMP directory ] of the same branch.
 
== Handlers conversion status ==


=== Command handlers ===
=== Command handlers ===

Revision as of 14:27, 27 October 2009

Monitor Protocol

The QEMU Monitor Protocol (QMP) project goal is to implement a JSON based protocol for QEMU.

Problem

QEMU does not provide a way for applications to control it at the "machine level", that is, the current existing interface (called Monitor) was designed for human interaction only.

This is very problematic for applications, for the following reasons:

  • It is needed to parse output meant to be read by humans
  • It is not reliable, because it is not always possible to know whether a command has been successfully executed or not
  • It lacks support for asynchronous events

Solution

Improve QEMU's Monitor to support a machine protocol with the following features:

  • Use a lightweight, text-based, easy to parse data format (JSON has been chosen)
  • Protocol stability should be guaranteed
  • Asynchronous events support
  • Parallel execution of commands
  • A standard way to query protocol capabilities

A draft specification already exists and can be found here.

Libqmp

Although this is still under discussion, we are also going to provide a C library with a stable ABI.

The short-term plan is to have a simple API to send commands and receive responses, this way C clients do not need to have their own JSON implementation.

The long-term plan is to provide a full management API for QEMU.

Development

The development takes place in the QMP unstable tree:

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

NOTE: all branches in this repository are constantly rebased.

Important branches:

  • master: contains a functional QMP implementation for emission only (includes asynchronous messages). Protocol documentation can be found in the QMP directory
  • conversions-simple: contains simple handler conversions that do not depend on the JSON decoder
  • conversions-json-parser: contains handler conversions which depend on the JSON decoder, therefore the latest version of Anthony's QJSon series is included

Project status (2009-10-20)

Most of the infrastructure has been merged, a JSON decoder should be merged in the next days. The important missing parts are the error framework and the JSON encoder.

Additionally, all command handlers need to be converted to use QObjects. This work is in progress, but several handlers depend on the JSON decoder.

Main building blocks

  • QObject Layer (merged)
  • QObject Monitor infrastructure (merged)
  • JSON decoder (under review)
  • JSON encoder (not started)
  • Error framework (under discussion)

Command handlers conversion work

  • Input through QDict (merged)
  • Output in QObject style (in progress)
  • Error handling (not started)

Handlers conversion detailed status

Command handlers

Handler name Status Comments
do_acl_add()
do_acl_policy()
do_acl_remove()
do_acl_reset()
do_acl_show()
do_balloon() merged
do_boot_set()
do_change()
do_closefd() converted
do_commit()
do_cont() merged
do_cpu_set()
do_delvm()
do_device_add()
do_device_del()
do_eject() converted
do_gdbserver()
do_getfd() converted
do_help_cmd()
do_info() merged
do_inject_mce()
do_inject_nmi()
do_ioport_read()
do_ioport_write()
do_loadvm()
do_log()
do_logfile()
do_memory_dump()
do_memory_save() converted
do_migrate() converted
do_migrate_cancel() converted
do_migrate_set_downtime()
do_migrate_set_speed() converted
do_mouse_button()
do_mouse_move()
do_mouse_set()
do_pci_device_hot_remove() converted
do_physical_memory_dump()
do_physical_memory_save() converted
do_print()
do_quit() merged
do_savevm()
do_screen_dump()
do_sendkey()
do_set_link()
do_singlestep()
do_stop() merged
do_stop_capture()
do_sum()
do_system_powerdown() merged
do_system_reset() merged
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() converted

Info handlers

Handler name Status Comments
bdrv_info() converted
bdrv_info_stats()
do_info_balloon() merged
do_info_capture()
do_info_cpus() merged
do_info_cpu_stats()
do_info_history()
do_info_hpet()
do_info_jit()
do_info_kvm()
do_info_mice()
do_info_migrate() converted
do_info_name()
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() converted
do_info_usernet()
do_info_uuid()
do_info_version() merged
do_info_vnc()
irq_info()
mem_info()
pci_info()
pcmcia_info()
pic_info()
qemu_chr_info() converted
tlb_info()
usb_host_info()
usb_info()

History

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