mbox series

[v11,00/25] Fixing record/replay and adding reverse debugging

Message ID 20190131131520.23264.75724.stgit@pasha-VirtualBox (mailing list archive)
Headers show
Series Fixing record/replay and adding reverse debugging | expand

Message

Pavel Dovgalyuk Jan. 31, 2019, 1:15 p.m. UTC
GDB remote protocol supports reverse debugging of the targets.
It includes 'reverse step' and 'reverse continue' operations.
The first one finds the previous step of the execution,
and the second one is intended to stop at the last breakpoint that
would happen when the program is executed normally.

Reverse debugging is possible in the replay mode, when at least
one snapshot was created at the record or replay phase.
QEMU can use these snapshots for travelling back in time with GDB.

Running the execution in replay mode allows using GDB reverse debugging
commands:
 - reverse-stepi (or rsi): Steps one instruction to the past.
   QEMU loads on of the prior snapshots and proceeds to the desired
   instruction forward. When that step is reaches, execution stops.
 - reverse-continue (or rc): Runs execution "backwards".
   QEMU tries to find breakpoint or watchpoint by loaded prior snapshot
   and replaying the execution. Then QEMU loads snapshots again and
   replays to the latest breakpoint. When there are no breakpoints in
   the examined section of the execution, QEMU finds one more snapshot
   and tries again. After the first snapshot is processed, execution
   stops at this snapshot.

The set of patches include the following modifications:
 - gdbstub update for reverse debugging support
 - functions that automatically perform reverse step and reverse
   continue operations
 - hmp/qmp commands for manipulating the replay process
 - improvement of the snapshotting for saving the execution step
   in the snapshot parameters
 - other record/replay fixes

The patches are available in the repository:
https://github.com/ispras/qemu/tree/rr-190117

v11 changes:
 - added can_do_io resetting before jumping to the next block in the chain
 - rebase to the latest master

v10 changes:
 - added patch for correct deadline calculation with external timers
 - updated icount-related documentation in json files
   (suggested by Markus Armbruster)
 - fixed replay shutdown
 - renamed some functions and variables to make them consistent with
   the documentation and displayed messages
 - minor changes

v9 changes:
 - moved rr qapi stuff to the separate file (suggested by Markus Armbruster)
 - minor coding style fixes

v8 changes:
 - rebased to the new master
 - added missing fix for prior rr patch
 - updated 'since' version number in json-related patches

v7 changes:
 - rebased to the new master with upstreamed patches from the series
 - several improvements in hmp/qmp commands handling (suggested by Markus Armbruster)
 - fixed record/replay with '-rtc base' option enabled
 - added document with virtual hardware requirements

v6 changes:
 - rebased to the new version of master
 - fixed build of linux-user configurations
 - added new clock for slirp and vnc timers

v5 changes:
 - multiple fixes of record/replay bugs appeared after QEMU core update
 - changed reverse debugging to 'since 3.1'

v4 changes:
 - changed 'since 2.13' to 'since 3.0' in json (as suggested by Eric Blake)

v3 changes:
 - Fixed PS/2 bug with save/load vm, which caused failures of the replay.
 - Rebased to the new code base.
 - Minor fixes.

v2 changes:
 - documented reverse debugging
 - fixed start vmstate loading in record mode
 - documented qcow2 changes (as suggested by Eric Blake)
 - made icount SnapshotInfo field optional (as suggested by Eric Blake)
 - renamed qmp commands (as suggested by Eric Blake)
 - minor changes

---

Pavel Dovgalyuk (24):
      block: implement bdrv_snapshot_goto for blkreplay
      replay: disable default snapshot for record/replay
      replay: update docs for record/replay with block devices
      replay: don't drain/flush bdrv queue while RR is working
      replay: finish record/replay before closing the disks
      qcow2: introduce icount field for snapshots
      migration: introduce icount field for snapshots
      replay: provide an accessor for rr filename
      qapi: introduce replay.json for record/replay-related stuff
      replay: introduce info hmp/qmp command
      replay: introduce breakpoint at the specified step
      replay: implement replay-seek command
      replay: refine replay-time module
      replay: flush rr queue before loading the vmstate
      gdbstub: add reverse step support in replay mode
      gdbstub: add reverse continue support in replay mode
      replay: describe reverse debugging in docs/replay.txt
      replay: add BH oneshot event for block layer
      replay: init rtc after enabling the replay
      replay: document development rules
      util/qemu-timer: refactor deadline calculation for external timers
      replay: fix replay shutdown
      replay: rename step-related variables and functions
      icount: clean up cpu_can_io before jumping to the next block

pbonzini@redhat.com (1):
      replay: add missing fix for internal function


 MAINTAINERS               |    1 
 Makefile.objs             |    4 -
 accel/tcg/tcg-runtime.c   |    2 
 accel/tcg/translator.c    |    1 
 block/blkreplay.c         |    8 +
 block/block-backend.c     |    8 +
 block/io.c                |   32 ++++
 block/iscsi.c             |    5 -
 block/nfs.c               |    5 -
 block/null.c              |    4 -
 block/nvme.c              |    6 +
 block/qapi.c              |   18 ++
 block/qcow2-snapshot.c    |    9 +
 block/qcow2.h             |    2 
 block/rbd.c               |    5 -
 block/vxhs.c              |    5 -
 blockdev.c                |   10 +
 cpus.c                    |   30 +++-
 docs/devel/replay.txt     |   46 ++++++
 docs/interop/qcow2.txt    |    4 +
 docs/replay.txt           |   45 ++++++
 exec.c                    |    8 +
 gdbstub.c                 |   52 +++++++
 hmp-commands-info.hx      |   14 ++
 hmp-commands.hx           |   53 +++++++
 hmp.h                     |    4 +
 include/block/snapshot.h  |    1 
 include/qemu/timer.h      |    7 -
 include/sysemu/replay.h   |   30 ++++
 migration/savevm.c        |   11 ++
 qapi/block-core.json      |    8 +
 qapi/block.json           |    3 
 qapi/misc.json            |   18 --
 qapi/qapi-schema.json     |    1 
 qapi/replay.json          |  121 +++++++++++++++++
 qtest.c                   |    2 
 replay/Makefile.objs      |    3 
 replay/replay-debugging.c |  326 +++++++++++++++++++++++++++++++++++++++++++++
 replay/replay-events.c    |   18 ++
 replay/replay-internal.c  |   10 +
 replay/replay-internal.h  |   17 +-
 replay/replay-snapshot.c  |    6 -
 replay/replay-time.c      |   36 ++---
 replay/replay.c           |   56 ++++++--
 stubs/Makefile.objs       |    1 
 stubs/replay-user.c       |    9 +
 stubs/replay.c            |   10 +
 tests/ptimer-test-stubs.c |    2 
 tests/ptimer-test.c       |    4 -
 util/qemu-timer.c         |   41 +++++-
 vl.c                      |   21 ++-
 51 files changed, 1009 insertions(+), 134 deletions(-)
 create mode 100644 docs/devel/replay.txt
 create mode 100644 qapi/replay.json
 create mode 100644 replay/replay-debugging.c
 create mode 100644 stubs/replay-user.c

Comments

no-reply@patchew.org Jan. 31, 2019, 5:54 p.m. UTC | #1
Patchew URL: https://patchew.org/QEMU/20190131131520.23264.75724.stgit@pasha-VirtualBox/



Hi,

This series seems to have some coding style problems. See output below for
more information:

Subject: [Qemu-devel] [PATCH v11 00/25] Fixing record/replay and adding reverse debugging
Type: series
Message-id: 20190131131520.23264.75724.stgit@pasha-VirtualBox

=== TEST SCRIPT BEGIN ===
#!/bin/bash
git config --local diff.renamelimit 0
git config --local diff.renames True
git config --local diff.algorithm histogram
./scripts/checkpatch.pl --mailback base..
=== TEST SCRIPT END ===

Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
Switched to a new branch 'test'
f8b44808ef icount: clean up cpu_can_io before jumping to the next block
2f7d94b010 replay: rename step-related variables and functions
e2b261fd4d replay: fix replay shutdown
0a08430306 util/qemu-timer: refactor deadline calculation for external timers
d0c6fd8ab0 replay: document development rules
21f1709992 replay: init rtc after enabling the replay
38aac65d87 replay: add BH oneshot event for block layer
087fc5561f replay: describe reverse debugging in docs/replay.txt
3faa39c207 gdbstub: add reverse continue support in replay mode
1eca2bd3d1 gdbstub: add reverse step support in replay mode
b6c6ec26cc replay: flush rr queue before loading the vmstate
b8a448d7a7 replay: refine replay-time module
46c7820268 replay: implement replay-seek command
982e0daa35 replay: introduce breakpoint at the specified step
4b895e908d replay: introduce info hmp/qmp command
16ea16ff4b qapi: introduce replay.json for record/replay-related stuff
b068dc8c88 replay: provide an accessor for rr filename
bb8c95481b migration: introduce icount field for snapshots
e81b4b6159 qcow2: introduce icount field for snapshots
99b5866912 replay: finish record/replay before closing the disks
3c8bd51b59 replay: don't drain/flush bdrv queue while RR is working
5add07fb21 replay: update docs for record/replay with block devices
36a8e79ba0 replay: disable default snapshot for record/replay
7d3a545b7f block: implement bdrv_snapshot_goto for blkreplay
e07e052488 replay: add missing fix for internal function

=== OUTPUT BEGIN ===
1/25 Checking commit e07e052488e5 (replay: add missing fix for internal function)
2/25 Checking commit 7d3a545b7f20 (block: implement bdrv_snapshot_goto for blkreplay)
3/25 Checking commit 36a8e79ba016 (replay: disable default snapshot for record/replay)
4/25 Checking commit 5add07fb219c (replay: update docs for record/replay with block devices)
5/25 Checking commit 3c8bd51b5959 (replay: don't drain/flush bdrv queue while RR is working)
6/25 Checking commit 99b5866912b2 (replay: finish record/replay before closing the disks)
7/25 Checking commit e81b4b615955 (qcow2: introduce icount field for snapshots)
8/25 Checking commit bb8c95481bee (migration: introduce icount field for snapshots)
9/25 Checking commit b068dc8c88a2 (replay: provide an accessor for rr filename)
10/25 Checking commit 16ea16ff4b6f (qapi: introduce replay.json for record/replay-related stuff)
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
#97: 
new file mode 100644

total: 0 errors, 1 warnings, 78 lines checked

Patch 10/25 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
11/25 Checking commit 4b895e908ded (replay: introduce info hmp/qmp command)
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
#142: 
new file mode 100644

total: 0 errors, 1 warnings, 127 lines checked

Patch 11/25 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
12/25 Checking commit 982e0daa3522 (replay: introduce breakpoint at the specified step)
13/25 Checking commit 46c7820268e5 (replay: implement replay-seek command)
ERROR: "foo* bar" should be "foo *bar"
#118: FILE: replay/replay-debugging.c:134:
+                                          int64_t* snapshot_icount)

total: 1 errors, 0 warnings, 155 lines checked

Patch 13/25 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

14/25 Checking commit b8a448d7a70f (replay: refine replay-time module)
15/25 Checking commit b6c6ec26cca5 (replay: flush rr queue before loading the vmstate)
16/25 Checking commit 1eca2bd3d1e3 (gdbstub: add reverse step support in replay mode)
17/25 Checking commit 3faa39c2076b (gdbstub: add reverse continue support in replay mode)
18/25 Checking commit 087fc5561f86 (replay: describe reverse debugging in docs/replay.txt)
19/25 Checking commit 38aac65d879d (replay: add BH oneshot event for block layer)
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
#316: 
new file mode 100644

total: 0 errors, 1 warnings, 224 lines checked

Patch 19/25 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
20/25 Checking commit 21f1709992d5 (replay: init rtc after enabling the replay)
21/25 Checking commit d0c6fd8ab088 (replay: document development rules)
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
#18: 
new file mode 100644

total: 0 errors, 1 warnings, 46 lines checked

Patch 21/25 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
22/25 Checking commit 0a0843030670 (util/qemu-timer: refactor deadline calculation for external timers)
23/25 Checking commit e2b261fd4da3 (replay: fix replay shutdown)
24/25 Checking commit 2f7d94b010c1 (replay: rename step-related variables and functions)
WARNING: line over 80 characters
#117: FILE: replay/replay-debugging.c:246:
+        replay_seek(replay_get_current_icount() - 1, replay_stop_vm_debug, &err);

total: 0 errors, 1 warnings, 282 lines checked

Patch 24/25 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
25/25 Checking commit f8b44808eff1 (icount: clean up cpu_can_io before jumping to the next block)
=== OUTPUT END ===

Test command exited with code: 1


The full log is available at
http://patchew.org/logs/20190131131520.23264.75724.stgit@pasha-VirtualBox/testing.checkpatch/?type=message.
---
Email generated automatically by Patchew [http://patchew.org/].
Please send your feedback to patchew-devel@redhat.com