From: Paolo Bonzini <pbonzini@redhat.com>
To: Pavel Dovgaluk <Pavel.Dovgaluk@ispras.ru>, qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org, peter.crosthwaite@xilinx.com,
mark.burton@greensocs.com, real@ispras.ru, batuzovk@ispras.ru,
maria.klimushenkova@ispras.ru, alex.bennee@linaro.org,
afaerber@suse.de, fred.konrad@greensocs.com
Subject: Re: [Qemu-devel] [RFC PATCH v9 00/23] Deterministic replay core
Date: Fri, 27 Feb 2015 14:07:09 +0100 [thread overview]
Message-ID: <54F06BFD.1000002@redhat.com> (raw)
In-Reply-To: <000301d0526f$191ef0d0$4b5cd270$@Dovgaluk@ispras.ru>
On 27/02/2015 10:23, Pavel Dovgaluk wrote:
>> From: Paolo Bonzini [mailto:paolo.bonzini@gmail.com] On Behalf Of Paolo Bonzini
>> On 18/02/2015 12:55, Pavel Dovgalyuk wrote:
>>> This set of patches is related to the reverse execution and deterministic
>>> replay of qemu execution. This implementation of deterministic replay can
>>> be used for deterministic debugging of guest code through gdb remote
>>> interface.
>>>
>>> These patches include only core function of the replay,
>>> excluding the support for replaying serial, audio, network, and USB devices'
>>> operations. Reverse debugging and monitor commands were also excluded to
>>> be submitted later as separate patches.
>>>
>>> Execution recording writes non-deterministic events log, which can be later
>>> used for replaying the execution anywhere and for unlimited number of times.
>>> It also supports checkpointing for faster rewinding during reverse debugging.
>>> Execution replaying reads the log and replays all non-deterministic events
>>> including external input, hardware clocks, and interrupts.
>>>
>>> Deterministic replay has the following features:
>>> * Deterministically replays whole system execution and all contents of the memory,
>>> state of the hadrware devices, clocks, and screen of the VM.
>>> * Writes execution log into the file for latter replaying for multiple times
>>> on different machines.
>>> * Supports i386, x86_64, and ARM hardware platforms.
>>> * Performs deterministic replay of all operations with keyboard and mouse
>>> input devices.
>>> * Supports auto-checkpointing for convenient reverse debugging.
>>>
>>> Usage of the record/replay:
>>> * First, record the execution, by adding the following string to the command line:
>>> '-icount shift=7,rr=record,rrfile=replay.bin -net none'.
>>> Block devices' images are not actually changed in the recording mode,
>>> because all of the changes are written to the temporary overlay file.
>>> * Then you can replay it for the multiple times by using another command
>>> line option: '-icount shift=7,rr=replay,rrfile=replay.bin -net none'
>>> * '-net none' option should also be specified if network replay patches
>>> are not applied.
>>>
>>> Paper with short description of deterministic replay implementation:
>>> http://www.computer.org/csdl/proceedings/csmr/2012/4666/00/4666a553-abs.html
>>>
>>> Modifications of qemu include:
>>> * wrappers for clock and time functions to save their return values in the log
>>> * saving different asynchronous events (e.g. system shutdown) into the log
>>> * synchronization of the bottom halves execution
>>> * synchronization of the threads from thread pool
>>> * recording/replaying user input (mouse and keyboard)
>>> * adding internal events for cpu and io synchronization
>>>
>>> v9 changes:
>>> * Replaced fwrite/fread with putc/getc (as suggested by Paolo Bonzini)
>>> * Stopping virtual machine in case of replay file end (as suggested by Paolo Bonzini)
>>> * Removed one of the replay mutexes (as suggested by Paolo Bonzini)
>>> * Fixed RCU queue for bottom halves (as suggested by Paolo Bonzini)
>>> * Updated command line options' names (as suggested by Paolo Bonzini)
>>> * Added design document for record/replay (as suggested by Paolo Bonzini)
>>> * Simplified checkpoints for the timers
>>> * Added cloning InputEvent objects for replay (as suggested by Paolo Bonzini)
>>> * Added replay blockers instead of checking the command line (as suggested by Paolo
>> Bonzini)
>>> * Some functions renaming and extracting.
>>
>> I haven't yet reviewed patch 23 completely, and I have to think (a lot
>> :)) more about block devices. In the meanwhile I understand the replay
>> code much better so I had some suggestions.
>
> Do you have more comments? I'm ready to submit a new version.
23 is fine. Block devices probably are best left as is for now.
Paolo
>>
>> In general, the handling of replay_has_unread_data / replay_data_kind is
>> a bit messy. It would be nice if you could call
>> replay_fetch_data_kind() only when replay_has_unread_data == 0. Or,
>> even, remove replay_has_unread_data altogether: just call
>> replay_fetch_data_kind() when you'd set it to zero. That would simplify
>> a lot the code for readers.
>
> Fixed.
>
> Pavel Dovgalyuk
>
prev parent reply other threads:[~2015-02-27 13:07 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-18 11:55 [Qemu-devel] [RFC PATCH v9 00/23] Deterministic replay core Pavel Dovgalyuk
2015-02-18 11:55 ` [Qemu-devel] [RFC PATCH v9 01/23] i386: partial revert of interrupt poll fix Pavel Dovgalyuk
2015-02-18 11:55 ` [Qemu-devel] [RFC PATCH v9 02/23] replay: global variables and function stubs Pavel Dovgalyuk
2015-02-18 11:55 ` [Qemu-devel] [RFC PATCH v9 03/23] sysemu: system functions for replay Pavel Dovgalyuk
2015-02-18 11:56 ` [Qemu-devel] [RFC PATCH v9 04/23] replay: internal functions for replay log Pavel Dovgalyuk
2015-02-18 12:43 ` Paolo Bonzini
2015-02-18 11:56 ` [Qemu-devel] [RFC PATCH v9 05/23] replay: introduce mutex to protect the " Pavel Dovgalyuk
2015-02-18 11:56 ` [Qemu-devel] [RFC PATCH v9 06/23] replay: introduce icount event Pavel Dovgalyuk
2015-02-18 13:49 ` Paolo Bonzini
2015-02-18 14:14 ` Paolo Bonzini
2015-02-18 11:56 ` [Qemu-devel] [RFC PATCH v9 07/23] cpu-exec: allow temporary disabling icount Pavel Dovgalyuk
2015-02-18 11:56 ` [Qemu-devel] [RFC PATCH v9 08/23] cpu: replay instructions sequence Pavel Dovgalyuk
2015-02-18 12:50 ` Paolo Bonzini
2015-02-18 13:48 ` Paolo Bonzini
2015-02-18 11:56 ` [Qemu-devel] [RFC PATCH v9 09/23] replay: interrupts and exceptions Pavel Dovgalyuk
2015-02-18 13:54 ` Paolo Bonzini
2015-02-18 14:14 ` Paolo Bonzini
2015-02-18 11:56 ` [Qemu-devel] [RFC PATCH v9 10/23] replay: asynchronous events infrastructure Pavel Dovgalyuk
2015-02-18 11:56 ` [Qemu-devel] [RFC PATCH v9 11/23] replay: recording and replaying clock ticks Pavel Dovgalyuk
2015-02-18 14:13 ` Paolo Bonzini
2015-02-18 11:56 ` [Qemu-devel] [RFC PATCH v9 12/23] timer: replace time() with QEMU_CLOCK_HOST Pavel Dovgalyuk
2015-02-18 13:04 ` Paolo Bonzini
2015-02-18 11:56 ` [Qemu-devel] [RFC PATCH v9 13/23] replay: shutdown event Pavel Dovgalyuk
2015-02-18 11:57 ` [Qemu-devel] [RFC PATCH v9 14/23] replay: checkpoints Pavel Dovgalyuk
2015-02-18 14:14 ` Paolo Bonzini
2015-02-18 11:57 ` [Qemu-devel] [RFC PATCH v9 15/23] aio: replace stack of bottom halves with queue Pavel Dovgalyuk
2015-02-18 13:06 ` Paolo Bonzini
2015-02-18 13:10 ` Paolo Bonzini
2015-02-18 11:57 ` [Qemu-devel] [RFC PATCH v9 16/23] replay: bottom halves Pavel Dovgalyuk
2015-02-18 11:57 ` [Qemu-devel] [RFC PATCH v9 17/23] replay: replay aio requests Pavel Dovgalyuk
2015-02-18 11:57 ` [Qemu-devel] [RFC PATCH v9 18/23] replay: thread pool Pavel Dovgalyuk
2015-02-18 11:57 ` [Qemu-devel] [RFC PATCH v9 19/23] typedef: add typedef for QemuOpts Pavel Dovgalyuk
2015-02-18 13:11 ` Paolo Bonzini
2015-02-18 11:57 ` [Qemu-devel] [RFC PATCH v9 20/23] replay: initialization and deinitialization Pavel Dovgalyuk
2015-02-18 13:14 ` Paolo Bonzini
2015-02-18 11:57 ` [Qemu-devel] [RFC PATCH v9 21/23] replay: replay blockers for devices Pavel Dovgalyuk
2015-02-18 11:57 ` [Qemu-devel] [RFC PATCH v9 22/23] replay: command line options Pavel Dovgalyuk
2015-02-18 13:18 ` Paolo Bonzini
2015-02-20 8:02 ` Pavel Dovgaluk
[not found] ` <23594.561199616$1424419399@news.gmane.org>
2015-02-20 10:28 ` Paolo Bonzini
2015-02-18 11:57 ` [Qemu-devel] [RFC PATCH v9 23/23] replay: recording of the user input Pavel Dovgalyuk
2015-02-18 14:19 ` [Qemu-devel] [RFC PATCH v9 00/23] Deterministic replay core Paolo Bonzini
2015-02-27 9:23 ` Pavel Dovgaluk
2015-02-27 13:07 ` Paolo Bonzini [this message]
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=54F06BFD.1000002@redhat.com \
--to=pbonzini@redhat.com \
--cc=Pavel.Dovgaluk@ispras.ru \
--cc=afaerber@suse.de \
--cc=alex.bennee@linaro.org \
--cc=batuzovk@ispras.ru \
--cc=fred.konrad@greensocs.com \
--cc=maria.klimushenkova@ispras.ru \
--cc=mark.burton@greensocs.com \
--cc=peter.crosthwaite@xilinx.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=real@ispras.ru \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).