All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru>
To: qemu-devel@nongnu.org
Cc: dovgaluk@ispras.ru
Subject: [Qemu-devel] [RFC PATCH 07/26] replay: added replay log format description
Date: Tue, 31 Oct 2017 14:07:19 +0300	[thread overview]
Message-ID: <20171031110719.5836.25067.stgit@pasha-VirtualBox> (raw)
In-Reply-To: <20171031110641.5836.43266.stgit@pasha-VirtualBox>

From: Pavel Dovgalyuk <pavel.dovgaluk@ispras.ru>

This patch adds description of the replay log file format
into the docs/replay.txt.

Signed-off-by: Pavel Dovgalyuk <pavel.dovgaluk@ispras.ru>

---
 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.

  parent reply	other threads:[~2017-10-31 11:07 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-31 11:06 [Qemu-devel] [RFC PATCH 00/26] replay additions Pavel Dovgalyuk
2017-10-31 11:06 ` [Qemu-devel] [RFC PATCH 01/26] block: implement bdrv_snapshot_goto for blkreplay Pavel Dovgalyuk
2017-10-31 11:06 ` [Qemu-devel] [RFC PATCH 02/26] blkreplay: create temporary overlay for underlaying devices Pavel Dovgalyuk
2017-10-31 11:06 ` [Qemu-devel] [RFC PATCH 03/26] replay: disable default snapshot for record/replay Pavel Dovgalyuk
2017-10-31 11:07 ` [Qemu-devel] [RFC PATCH 04/26] replay: fix processing async events Pavel Dovgalyuk
2017-10-31 11:07 ` [Qemu-devel] [RFC PATCH 05/26] replay: fixed replay_enable_events Pavel Dovgalyuk
2017-10-31 11:07 ` [Qemu-devel] [RFC PATCH 06/26] replay: fix save/load vm for non-empty queue Pavel Dovgalyuk
2017-10-31 11:07 ` Pavel Dovgalyuk [this message]
2017-10-31 11:07 ` [Qemu-devel] [RFC PATCH 08/26] replay: make safe vmstop at record/replay Pavel Dovgalyuk
2017-10-31 11:07 ` [Qemu-devel] [RFC PATCH 09/26] replay: save prior value of the host clock Pavel Dovgalyuk
2017-10-31 11:07 ` [Qemu-devel] [RFC PATCH 10/26] icount: fixed saving/restoring of icount warp timers Pavel Dovgalyuk
2017-10-31 11:07 ` [Qemu-devel] [RFC PATCH 11/26] target/arm/arm-powertctl: drop BQL assertions Pavel Dovgalyuk
2017-10-31 11:07 ` [Qemu-devel] [RFC PATCH 12/26] cpus: push BQL lock to qemu_*_wait_io_event Pavel Dovgalyuk
2017-10-31 11:07 ` [Qemu-devel] [RFC PATCH 13/26] cpus: only take BQL for sleeping threads Pavel Dovgalyuk
2017-10-31 11:07 ` [Qemu-devel] [RFC PATCH 14/26] replay/replay.c: bump REPLAY_VERSION again Pavel Dovgalyuk
2017-10-31 11:08 ` [Qemu-devel] [RFC PATCH 15/26] replay/replay-internal.c: track holding of replay_lock Pavel Dovgalyuk
2017-10-31 11:08 ` [Qemu-devel] [RFC PATCH 16/26] replay: make locking visible outside replay code Pavel Dovgalyuk
2017-10-31 11:08 ` [Qemu-devel] [RFC PATCH 17/26] replay: push replay_mutex_lock up the call tree Pavel Dovgalyuk
2017-10-31 11:08 ` [Qemu-devel] [RFC PATCH 18/26] cpu-exec: don't overwrite exception_index Pavel Dovgalyuk
2017-10-31 11:08 ` [Qemu-devel] [RFC PATCH 19/26] cpu-exec: reset exit flag before calling cpu_exec_nocache Pavel Dovgalyuk
2017-10-31 11:08 ` [Qemu-devel] [RFC PATCH 20/26] replay: don't destroy mutex at exit Pavel Dovgalyuk
2017-10-31 11:08 ` [Qemu-devel] [RFC PATCH 21/26] replay: check return values of fwrite Pavel Dovgalyuk
2017-10-31 11:08 ` [Qemu-devel] [RFC PATCH 22/26] scripts/qemu-gdb: add simple tcg lock status helper Pavel Dovgalyuk
2017-10-31 11:08 ` [Qemu-devel] [RFC PATCH 23/26] util/qemu-thread-*: add qemu_lock, locked and unlock trace events Pavel Dovgalyuk
2017-10-31 11:08 ` [Qemu-devel] [RFC PATCH 24/26] scripts/analyse-locks-simpletrace.py: script to analyse lock times Pavel Dovgalyuk
2017-10-31 11:08 ` [Qemu-devel] [RFC PATCH 25/26] scripts/replay-dump.py: replay log dumper Pavel Dovgalyuk
2017-10-31 11:09 ` [Qemu-devel] [RFC PATCH 26/26] scripts/qemu-gdb/timers.py: new helper to dump timer state Pavel Dovgalyuk
2017-10-31 12:48 ` [Qemu-devel] [RFC PATCH 00/26] replay additions no-reply
2017-10-31 11:24 Pavel Dovgalyuk
2017-10-31 11:25 ` [Qemu-devel] [RFC PATCH 07/26] replay: added replay log format description Pavel Dovgalyuk

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171031110719.5836.25067.stgit@pasha-VirtualBox \
    --to=pavel.dovgaluk@ispras.ru \
    --cc=dovgaluk@ispras.ru \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.