On 21/09/2015 09:12, Pavel Dovgaluk wrote: > Hi! > > Paolo, have you reviewed these patches?
Yes, I'll reply to a couple of them but there's no need to send v19. Paolo > Pavel Dovgalyuk > >> -----Original Message----- >> From: Pavel Dovgalyuk [mailto:pavel.dovga...@ispras.ru] >> Sent: Thursday, September 17, 2015 7:23 PM >> To: qemu-devel@nongnu.org >> Cc: edgar.igles...@xilinx.com; peter.mayd...@linaro.org; >> igor.rubi...@gmail.com; >> ebl...@redhat.com; mark.bur...@greensocs.com; r...@ispras.ru; >> batuz...@ispras.ru; >> maria.klimushenk...@ispras.ru; pavel.dovga...@ispras.ru; >> pbonz...@redhat.com; hi...@cert.org; >> alex.ben...@linaro.org; fred.kon...@greensocs.com >> Subject: [PATCH v18 00/21] Deterministic replay core >> >> 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. >> >> Core set of patches does not include support for reverse debugging commands >> of gdb, block devices' operations, USB replay support. >> >> 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. >> >> Full version of 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, ARM, PowerPC, and MIPS 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 core: >> * 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. >> * Do not add any disk images to VM, because they are not supported by >> the core patches. >> >> Papers with description of deterministic replay implementation: >> http://www.computer.org/csdl/proceedings/csmr/2012/4666/00/4666a553-abs.html >> http://dl.acm.org/citation.cfm?id=2786805.2803179 >> >> Public repository with current version of the patches: >> https://github.com/Dovgalyuk/qemu/tree/rr-17 >> >> 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 threads from thread pool >> * recording/replaying user input (mouse and keyboard) >> * adding internal events for cpu and io synchronization >> >> v18 changes: >> * Patches were updated to match upstream version >> * Added missed replay-user.c file >> >> v17 changes: >> * Removed useless stub functions (as suggested by Paolo Bonzini) >> * Refined checkpoint-related code (as suggested by Paolo Bonzini) >> * Improved icount processing (as suggested by Paolo Bonzini) >> * Added checkpoint for suspend event (as suggested by Paolo Bonzini) >> * Fixed linux-user configurations build >> * Minor fixes >> >> v16 changes: >> * Several warnings were fixed >> >> v15 changes: >> * Tested record/replay with MIPS and PowerPC guests >> * Published the patches on github >> * Fixed replay mutex operation in icount mode >> * Fixed timers processing in record/replay mode >> >> v14 changes: >> * Minor fixes >> >> v13 changes: >> * Introduced "ptimer trigger" event (as suggested by Paolo Bonzini) >> >> v12 changes: >> * Removed block patches from the core patches set. >> >> v11 changes: >> * Fixed instructions event processing. >> * Added some mutex protection calls for replay. >> * Fixed replaying read operations for qcow2. >> * Fixed rtc reads on initializations stage. >> * Eliminated some warnings in replay module. >> * Fixed misprints in documentation for replay (as suggested by Eric Blake) >> >> v10 changes: >> * Fixed queue processing for bottom halves (as suggested by Paolo Bonzini) >> * Rewritten several replay functions (as suggested by Paolo Bonzini) >> * Some minor fixes. >> >> 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. >> >> v8 changes: >> * Simplified processing of the shutdown event (as suggested by Paolo >> Bonzini) >> * Replaced stack of bottom halves in AIO context with QSIMPLEQ (as >> suggested by Paolo >> Bonzini) >> * Moved replay_submode out of the series (as suggested by Paolo Bonzini) >> * Moved suffix option out of the series >> * Converted some of the defines into enums (as suggested by Paolo Bonzini) >> * Encapsulated save_tm/read_tm calls into the single function (as suggested >> by Paolo Bonzini) >> * Moved record/replay options to icount group (as suggested by Paolo >> Bonzini) >> * Updated mutex protection for the events queue (as suggested by Paolo >> Bonzini) >> * Added mutex to protect replay log file (as suggested by Paolo Bonzini) >> * Minor cleanups >> >> v7 changes: >> * Removed patches that were applied to upstream. >> >> v6 changes: >> * Fixed replay stub return value (as suggested by Eric Blake) >> * Fixed icount warping. >> * Virtual rt clock now uses cpu_get_clock() (as suggested by Paolo Bonzini) >> * Replated get_clock_realtime and get_clock calls with qemu clock requests >> (as suggested by >> Paolo Bonzini) >> * Modified can_do_io logic to allow requesting icount from cpu_exec >> function (as suggested by >> Paolo Bonzini) >> * Removed applied patches. >> >> v5 changes: >> * Minor changes. >> * Used fixed-width integer types for read/write functions (as suggested by >> Alex Bennee) >> * Moved savevm-related code out of the core. >> * Added new traced clock for deterministic virtual clock warping (as >> suggested by Paolo >> Bonzini) >> * Fixed exception_index reset for user mode (as suggested by Paolo Bonzini) >> * Adopted Paolo's icount patches >> * Fixed hardware interrupts replaying >> >> v4 changes: >> * Updated block drivers to support new bdrv_open interface. >> * Moved migration patches into separate series (as suggested by Paolo >> Bonzini) >> * Fixed a bug in replay_break operation. >> * Fixed rtl8139 migration for replay. >> * Fixed 'period' parameter processing for record mode. >> * Fixed bug in 'reverse-stepi' implementation. >> * Fixed replay without making any snapshots (even the starting one). >> * Moved core replay patches into the separate series. >> * Fixed reverse step and reverse continue support. >> * Fixed several bugs in icount subsystem. >> * Reusing native qemu icount for replay instructions counting. >> * Separated core patches into their own series. >> >> v3 changes: >> * Fixed bug with replay of the aio write operations. >> * Added virtual clock based on replay icount. >> * Removed duplicated saving of interrupt_request CPU field. >> * Fixed some coding style issues. >> * Renamed QMP commands for controlling reverse execution (as suggested by >> Eric Blake) >> * Replay mode and submode implemented as QAPI enumerations (as suggested by >> Eric Blake) >> * Added description and example for replay-info command (as suggested by >> Eric Blake) >> * Added information about the current breakpoint to the output of >> replay-info (as suggested >> by Eric Blake) >> * Updated version id for HPET vmstate (as suggested by Paolo Bonzini) >> * Removed static fields from parallel vmstate (as suggested by Paolo >> Bonzini) >> * New vmstate fields for mc146818rtc, pckbd, kvmapic, serial, fdc, rtl8139 >> moved to >> subsection (as suggested by Paolo Bonzini) >> * Disabled textmode cursor blinking, when virtual machine is stopped (as >> suggested by Paolo >> Bonzini) >> * Extracted saving of exception_index to separate patch (as suggested by >> Paolo Bonzini) >> >> v2 changes: >> * Patches are split to be reviewable and bisectable (as suggested by Kirill >> Batuzov) >> * Added QMP versions of replay commands (as suggested by Eric Blake) >> * Removed some optional features of replay to make patches cleaner >> * Minor changes and code cleanup were made >> >> --- >> >> Pavel Dovgalyuk (21): >> i386: partial revert of interrupt poll fix >> replay: global variables and function stubs >> replay: internal functions for replay log >> replay: introduce mutex to protect the replay log >> replay: introduce icount event >> cpu-exec: allow temporary disabling icount >> cpu: replay instructions sequence >> i386: interrupt poll processing >> replay: interrupts and exceptions >> replay: asynchronous events infrastructure >> replay: recording and replaying clock ticks >> replay: shutdown event >> icount: improve counting for record/replay >> replay: checkpoints >> bottom halves: introduce bh call function >> replay: ptimer >> typedef: add typedef for QemuOpts >> replay: initialization and deinitialization >> replay: replay blockers for devices >> replay: command line options >> replay: recording of the user input >> >> >> Makefile.target | 1 >> async.c | 7 + >> cpu-exec.c | 62 +++++++- >> cpus.c | 57 +++++--- >> docs/replay.txt | 168 ++++++++++++++++++++++ >> exec.c | 2 >> hw/bt/hci.c | 7 + >> hw/core/ptimer.c | 7 + >> include/block/aio.h | 5 + >> include/exec/exec-all.h | 1 >> include/qapi/qmp/qerror.h | 3 >> include/qemu/option.h | 5 - >> include/qemu/typedefs.h | 3 >> include/ui/input.h | 2 >> main-loop.c | 3 >> qapi-schema.json | 18 ++ >> qapi/common.json | 6 + >> qemu-options.hx | 8 + >> qemu-timer.c | 48 +++++- >> replay/Makefile.objs | 6 + >> replay/replay-events.c | 274 ++++++++++++++++++++++++++++++++++++ >> replay/replay-input.c | 160 +++++++++++++++++++++ >> replay/replay-internal.c | 206 +++++++++++++++++++++++++++ >> replay/replay-internal.h | 140 ++++++++++++++++++ >> replay/replay-time.c | 64 ++++++++ >> replay/replay-user.c | 36 +++++ >> replay/replay.c | 342 >> +++++++++++++++++++++++++++++++++++++++++++++ >> replay/replay.h | 120 ++++++++++++++++ >> stubs/Makefile.objs | 1 >> stubs/replay.c | 32 ++++ >> target-i386/cpu.c | 10 - >> target-i386/seg_helper.c | 3 >> translate-all.c | 2 >> ui/input.c | 27 +++- >> vl.c | 53 ++++++- >> 35 files changed, 1820 insertions(+), 69 deletions(-) >> create mode 100755 docs/replay.txt >> create mode 100755 replay/Makefile.objs >> create mode 100755 replay/replay-events.c >> create mode 100755 replay/replay-input.c >> create mode 100755 replay/replay-internal.c >> create mode 100755 replay/replay-internal.h >> create mode 100755 replay/replay-time.c >> create mode 100755 replay/replay-user.c >> create mode 100755 replay/replay.c >> create mode 100755 replay/replay.h >> create mode 100755 stubs/replay.c >> >> -- >> Pavel Dovgalyuk >