mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
32c81a4a6e
The following behaviors are possible: 'report': The behavior is the same as in 1.1. An I/O error, respectively during a read or a write, will complete the job immediately with an error code. 'ignore': An I/O error, respectively during a read or a write, will be ignored. For streaming, the job will complete with an error and the backing file will be left in place. For mirroring, the sector will be marked again as dirty and re-examined later. 'stop': The job will be paused and the job iostatus will be set to failed or nospace, while the VM will keep running. This can only be specified if the block device has rerror=stop and werror=stop or enospc. 'enospc': Behaves as 'stop' for ENOSPC errors, 'report' for others. In all cases, even for 'report', the I/O error is reported as a QMP event BLOCK_JOB_ERROR, with the same arguments as BLOCK_IO_ERROR. It is possible that while stopping the VM a BLOCK_IO_ERROR event will be reported and will clobber the event from BLOCK_JOB_ERROR, or vice versa. This is not really avoidable since stopping the VM completes all pending I/O requests. In fact, it is already possible now that a series of BLOCK_IO_ERROR events are reported with rerror=stop, because vm_stop calls bdrv_drain_all and this can generate further errors. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com> |
||
---|---|---|
.. | ||
qmp | ||
qmp-events.txt | ||
qmp-shell | ||
qmp-spec.txt | ||
qmp.py | ||
qom-fuse | ||
qom-get | ||
qom-list | ||
qom-set | ||
README |
QEMU Monitor Protocol ===================== Introduction ------------- The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU's Monitor. QMP is JSON[1] based and currently has the following features: - Lightweight, text-based, easy to parse data format - Asynchronous messages support (ie. events) - Capabilities Negotiation For detailed information on QMP's usage, please, refer to the following files: o qmp-spec.txt QEMU Monitor Protocol current specification o qmp-commands.txt QMP supported commands (auto-generated at build-time) o qmp-events.txt List of available asynchronous events There is also a simple Python script called 'qmp-shell' available. IMPORTANT: It's strongly recommended to read the 'Stability Considerations' section in the qmp-commands.txt file before making any serious use of QMP. [1] http://www.json.org Usage ----- To enable QMP, you need a QEMU monitor instance in "control mode". There are two ways of doing this. The simplest one is using the '-qmp' command-line option. The following example makes QMP available on localhost port 4444: $ qemu [...] -qmp tcp:localhost:4444,server However, in order to have more complex combinations, like multiple monitors, the '-mon' command-line option should be used along with the '-chardev' one. For instance, the following example creates one user monitor on stdio and one QMP monitor on localhost port 4444. $ qemu [...] -chardev stdio,id=mon0 -mon chardev=mon0,mode=readline \ -chardev socket,id=mon1,host=localhost,port=4444,server \ -mon chardev=mon1,mode=control Please, refer to QEMU's manpage for more information. Simple Testing -------------- To manually test QMP one can connect with telnet and issue commands by hand: $ telnet localhost 4444 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. {"QMP": {"version": {"qemu": {"micro": 50, "minor": 13, "major": 0}, "package": ""}, "capabilities": []}} { "execute": "qmp_capabilities" } {"return": {}} { "execute": "query-version" } {"return": {"qemu": {"micro": 50, "minor": 13, "major": 0}, "package": ""}} Development Process ------------------- When changing QMP's interface (by adding new commands, events or modifying existing ones) it's mandatory to update the relevant documentation, which is one (or more) of the files listed in the 'Introduction' section*. Also, it's strongly recommended to send the documentation patch first, before doing any code change. This is so because: 1. Avoids the code dictating the interface 2. Review can improve your interface. Letting that happen before you implement it can save you work. * The qmp-commands.txt file is generated from the qmp-commands.hx one, which is the file that should be edited. Homepage -------- http://wiki.qemu.org/QMP