mbox series

[v10,00/24] Fixing record/replay and adding reverse debugging

Message ID 20190117073649.5399.97670.stgit@pasha-VirtualBox
Headers show
Series Fixing record/replay and adding reverse debugging | expand

Message

Pavel Dovgalyuk Jan. 17, 2019, 7:36 a.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

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 (23):
      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

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


 MAINTAINERS               |    1 
 Makefile.objs             |    4 -
 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 ++-
 50 files changed, 1007 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, 6:15 p.m. UTC | #1
Patchew URL: https://patchew.org/QEMU/20190117073649.5399.97670.stgit@pasha-VirtualBox/



Hi,

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

Subject: [Qemu-devel] [PATCH v10 00/24] Fixing record/replay and adding reverse debugging
Type: series
Message-id: 20190117073649.5399.97670.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'
7049f80fc1 replay: rename step-related variables and functions
5eac81343e replay: fix replay shutdown
a747dc45e5 util/qemu-timer: refactor deadline calculation for external timers
5c5205178f replay: document development rules
b65f9e291f replay: init rtc after enabling the replay
a778d9ee8d replay: add BH oneshot event for block layer
d858309da1 replay: describe reverse debugging in docs/replay.txt
991916fcd5 gdbstub: add reverse continue support in replay mode
febeb64b34 gdbstub: add reverse step support in replay mode
bebb4134ef replay: flush rr queue before loading the vmstate
60699046ba replay: refine replay-time module
0972845ea5 replay: implement replay-seek command
34bf0280a3 replay: introduce breakpoint at the specified step
936ac99625 replay: introduce info hmp/qmp command
fb0fb9065e qapi: introduce replay.json for record/replay-related stuff
ceb76bedb5 replay: provide an accessor for rr filename
d6f41bb599 migration: introduce icount field for snapshots
5960b29c24 qcow2: introduce icount field for snapshots
70139c618c replay: finish record/replay before closing the disks
5e12f930b3 replay: don't drain/flush bdrv queue while RR is working
3b0e839a97 replay: update docs for record/replay with block devices
dc9eb62cc0 replay: disable default snapshot for record/replay
d89d015ba0 block: implement bdrv_snapshot_goto for blkreplay
10258d7cd0 replay: add missing fix for internal function

=== OUTPUT BEGIN ===
1/24 Checking commit 10258d7cd080 (replay: add missing fix for internal function)
2/24 Checking commit d89d015ba072 (block: implement bdrv_snapshot_goto for blkreplay)
3/24 Checking commit dc9eb62cc084 (replay: disable default snapshot for record/replay)
4/24 Checking commit 3b0e839a97dd (replay: update docs for record/replay with block devices)
5/24 Checking commit 5e12f930b330 (replay: don't drain/flush bdrv queue while RR is working)
6/24 Checking commit 70139c618c2c (replay: finish record/replay before closing the disks)
7/24 Checking commit 5960b29c24e4 (qcow2: introduce icount field for snapshots)
8/24 Checking commit d6f41bb59907 (migration: introduce icount field for snapshots)
9/24 Checking commit ceb76bedb566 (replay: provide an accessor for rr filename)
10/24 Checking commit fb0fb9065eef (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/24 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
11/24 Checking commit 936ac996257c (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/24 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
12/24 Checking commit 34bf0280a37e (replay: introduce breakpoint at the specified step)
13/24 Checking commit 0972845ea59e (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/24 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

14/24 Checking commit 60699046ba21 (replay: refine replay-time module)
15/24 Checking commit bebb4134ef18 (replay: flush rr queue before loading the vmstate)
16/24 Checking commit febeb64b34b3 (gdbstub: add reverse step support in replay mode)
17/24 Checking commit 991916fcd522 (gdbstub: add reverse continue support in replay mode)
18/24 Checking commit d858309da1bc (replay: describe reverse debugging in docs/replay.txt)
19/24 Checking commit a778d9ee8d3b (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/24 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
20/24 Checking commit b65f9e291f15 (replay: init rtc after enabling the replay)
21/24 Checking commit 5c5205178f60 (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/24 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
22/24 Checking commit a747dc45e5bd (util/qemu-timer: refactor deadline calculation for external timers)
23/24 Checking commit 5eac81343e93 (replay: fix replay shutdown)
24/24 Checking commit 7049f80fc128 (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/24 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
=== OUTPUT END ===

Test command exited with code: 1


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