[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC PATCH v2 07/26] replay: added replay log format de
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [RFC PATCH v2 07/26] replay: added replay log format description |
Date: |
Tue, 14 Nov 2017 14:34:54 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 |
On 14/11/2017 09:17, Pavel Dovgalyuk wrote:
> From: Pavel Dovgalyuk <address@hidden>
>
> This patch adds description of the replay log file format
> into the docs/replay.txt.
>
> Signed-off-by: Pavel Dovgalyuk <address@hidden>
>
> ---
> docs/replay.txt | 69
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 69 insertions(+)
>
> diff --git a/docs/replay.txt b/docs/replay.txt
> index 486c1e0..c52407f 100644
> --- a/docs/replay.txt
> +++ b/docs/replay.txt
> @@ -232,3 +232,72 @@ Audio devices
> Audio data is recorded and replay automatically. The command line for
> recording
> and replaying must contain identical specifications of audio hardware, e.g.:
> -soundhw ac97
> +
> +Replay log format
> +-----------------
> +
> +Record/replay log consits of the header and the sequence of execution
> +events. The header includes 4-byte replay version id and 8-byte reserved
> +field. Version is updated every time replay log format changes to prevent
> +using replay log created by another build of qemu.
> +
> +The sequence of the events describes virtual machine state changes.
> +It includes all non-deterministic inputs of VM, synchronization marks and
> +instruction counts used to correctly inject inputs at replay.
> +
> +Synchronization marks (checkpoints) are used for synchronizing qemu threads
> +that perform operations with virtual hardware. These operations may change
> +system's state (e.g., change some register or generate interrupt) and
> +therefore should execute synchronously with CPU thread.
> +
> +Every event in the log includes 1-byte event id and optional arguments.
> +When argument is an array, it is stored as 4-byte array length
> +and corresponding number of bytes with data.
> +Here is the list of events that are written into the log:
> +
> + - EVENT_INSTRUCTION. Instructions executed since last event.
> + Argument: 4-byte number of executed instructions.
> + - EVENT_INTERRUPT. Used to synchronize interrupt processing.
> + - EVENT_EXCEPTION. Used to synchronize exception handling.
> + - EVENT_ASYNC. This is a group of events. They are always processed
> + together with checkpoints. When such an event is generated, it is
> + stored in the queue and processed only when checkpoint occurs.
> + Every such event is followed by 1-byte checkpoint id and 1-byte
> + async event id from the following list:
> + - REPLAY_ASYNC_EVENT_BH. Bottom-half callback. This event synchronizes
> + callbacks that affect virtual machine state, but normally called
> + asyncronously.
> + Argument: 8-byte operation id.
> + - REPLAY_ASYNC_EVENT_INPUT. Input device event. Contains
> + parameters of keyboard and mouse input operations
> + (key press/release, mouse pointer movement).
> + Arguments: 9-16 bytes depending of input event.
> + - REPLAY_ASYNC_EVENT_INPUT_SYNC. Internal input synchronization event.
> + - REPLAY_ASYNC_EVENT_CHAR_READ. Character (e.g., serial port) device
> input
> + initiated by the sender.
> + Arguments: 1-byte character device id.
> + Array with bytes were read.
> + - REPLAY_ASYNC_EVENT_BLOCK. Block device operation. Used to synchronize
> + operations with disk and flash drives with CPU.
> + Argument: 8-byte operation id.
> + - REPLAY_ASYNC_EVENT_NET. Incoming network packet.
> + Arguments: 1-byte network adapter id.
> + 4-byte packet flags.
> + Array with packet bytes.
> + - EVENT_SHUTDOWN. Occurs when user sends shutdown event to qemu,
> + e.g., by closing the window.
> + - EVENT_CHAR_WRITE. Used to synchronize character output operations.
> + Arguments: 4-byte output function return value.
> + 4-byte offset in the output array.
> + - EVENT_CHAR_READ_ALL. Used to synchronize character input operations,
> + initiated by qemu.
> + Argument: Array with bytes that were read.
> + - EVENT_CHAR_READ_ALL_ERROR. Unsuccessful character input operation,
> + initiated by qemu.
> + Argument: 4-byte error code.
> + - EVENT_CLOCK + clock_id. Group of events for host clock read operations.
> + Argument: 8-byte clock value.
> + - EVENT_CHECKPOINT + checkpoint_id. Checkpoint for synchronization of
> + CPU, internal threads, and asynchronous input events. May be followed
> + by one or more EVENT_ASYNC events.
> + - EVENT_END. Last event in the log.
>
Acked-by: Paolo Bonzini <address@hidden>
- [Qemu-devel] [RFC PATCH v2 00/26] replay additions, (continued)
- [Qemu-devel] [RFC PATCH v2 00/26] replay additions, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 01/26] block: implement bdrv_snapshot_goto for blkreplay, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 02/26] blkreplay: create temporary overlay for underlaying devices, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 03/26] replay: disable default snapshot for record/replay, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 04/26] replay: fix processing async events, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 05/26] replay: fixed replay_enable_events, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 06/26] replay: fix save/load vm for non-empty queue, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 07/26] replay: added replay log format description, Pavel Dovgalyuk, 2017/11/14
- Re: [Qemu-devel] [RFC PATCH v2 07/26] replay: added replay log format description,
Paolo Bonzini <=
- [Qemu-devel] [RFC PATCH v2 08/26] replay: make safe vmstop at record/replay, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 09/26] replay: save prior value of the host clock, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 10/26] icount: fixed saving/restoring of icount warp timers, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 11/26] target/arm/arm-powertctl: drop BQL assertions, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 12/26] cpus: push BQL lock to qemu_*_wait_io_event, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 13/26] cpus: only take BQL for sleeping threads, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 14/26] replay/replay.c: bump REPLAY_VERSION again, Pavel Dovgalyuk, 2017/11/14