[Qemu-devel] [PATCH for-4.1 00/24] Fix record/replay and add reverse debugging

Pavel Dovgalyuk posted 24 patches 4 years, 10 months ago
Test s390x passed
Test checkpatch failed
Test asan passed
Test docker-mingw@fedora passed
Test docker-clang@ubuntu passed
Test FreeBSD passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/156110523748.25431.9310430853468653085.stgit@pasha-Precision-3630-Tower
Maintainers: Max Reitz <mreitz@redhat.com>, Richard Henderson <rth@twiddle.net>, Eric Blake <eblake@redhat.com>, Pavel Dovgalyuk <pavel.dovgaluk@ispras.ru>, "Philippe Mathieu-Daudé" <philmd@redhat.com>, Thomas Huth <thuth@redhat.com>, Markus Armbruster <armbru@redhat.com>, Josh Durgin <jdurgin@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>, Kevin Wolf <kwolf@redhat.com>, "Dr. David Alan Gilbert" <dgilbert@redhat.com>, Stefan Hajnoczi <stefanha@redhat.com>, Laurent Vivier <lvivier@redhat.com>, Peter Lieven <pl@kamp.de>, Juan Quintela <quintela@redhat.com>, Ronnie Sahlberg <ronniesahlberg@gmail.com>, Michael Roth <mdroth@linux.vnet.ibm.com>, Fam Zheng <fam@euphon.net>, "Alex Bennée" <alex.bennee@linaro.org>
MAINTAINERS               |    1
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                 |   63 ++++++++-
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/Makefile.objs        |    2
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 |  327 +++++++++++++++++++++++++++++++++++++++++++++
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 |    4 -
tests/ptimer-test.c       |    4 -
util/qemu-timer.c         |   41 +++++-
vl.c                      |   11 +-
51 files changed, 1014 insertions(+), 131 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
[Qemu-devel] [PATCH for-4.1 00/24] Fix record/replay and add reverse debugging
Posted by Pavel Dovgalyuk 4 years, 10 months ago
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-190419

v17 changes:
 - updated gdbstub patches according to the latest changes

v16 changes:
 - rebased to 4.0

v15 changes:
 - rebased to the new master
 - removed obsolete rtc patch
 - fixed misprint in the test

v14 changes:
 - rebased to the new master

v13 changes:
 - rebased to make QAPI stuff applicable
 - minor reverse step/reverse continue fix

v12 changes:
 - style fixes

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 (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: 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 
 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                 |   63 ++++++++-
 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/Makefile.objs        |    2 
 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 |  327 +++++++++++++++++++++++++++++++++++++++++++++
 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 |    4 -
 tests/ptimer-test.c       |    4 -
 util/qemu-timer.c         |   41 +++++-
 vl.c                      |   11 +-
 51 files changed, 1014 insertions(+), 131 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

-- 
Pavel Dovgalyuk

Re: [Qemu-devel] [PATCH for-4.1 00/24] Fix record/replay and add reverse debugging
Posted by no-reply@patchew.org 4 years, 10 months ago
Patchew URL: https://patchew.org/QEMU/156110523748.25431.9310430853468653085.stgit@pasha-Precision-3630-Tower/



Hi,

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

Subject: [Qemu-devel] [PATCH for-4.1 00/24] Fix record/replay and add reverse debugging
Type: series
Message-id: 156110523748.25431.9310430853468653085.stgit@pasha-Precision-3630-Tower

=== TEST SCRIPT BEGIN ===
#!/bin/bash
git rev-parse base > /dev/null || exit 0
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 ===

From https://github.com/patchew-project/qemu
 * [new tag]               patchew/156110523748.25431.9310430853468653085.stgit@pasha-Precision-3630-Tower -> patchew/156110523748.25431.9310430853468653085.stgit@pasha-Precision-3630-Tower
Switched to a new branch 'test'
adb83324f9 icount: clean up cpu_can_io before jumping to the next block
b707ea6a2b replay: rename step-related variables and functions
1d080b473c replay: fix replay shutdown
59212a6234 util/qemu-timer: refactor deadline calculation for external timers
eaccfbb566 replay: document development rules
0be10699ff replay: add BH oneshot event for block layer
d025976b68 replay: describe reverse debugging in docs/replay.txt
a261132db8 gdbstub: add reverse continue support in replay mode
b31ce9d399 gdbstub: add reverse step support in replay mode
f2b3c4a828 replay: flush rr queue before loading the vmstate
f2d2d121b3 replay: refine replay-time module
0b02e3b0cc replay: implement replay-seek command
84e592947f replay: introduce breakpoint at the specified step
cdc1e61eb2 replay: introduce info hmp/qmp command
d7f6b22099 qapi: introduce replay.json for record/replay-related stuff
52c7b50aa8 replay: provide an accessor for rr filename
b7407e35d5 migration: introduce icount field for snapshots
f8bce7c87f qcow2: introduce icount field for snapshots
65eb56e3d8 replay: finish record/replay before closing the disks
edd54d2741 replay: don't drain/flush bdrv queue while RR is working
9095208014 replay: update docs for record/replay with block devices
c0ebe8273d replay: disable default snapshot for record/replay
3b0235d499 block: implement bdrv_snapshot_goto for blkreplay
3582d31d0d replay: add missing fix for internal function

=== OUTPUT BEGIN ===
1/24 Checking commit 3582d31d0d97 (replay: add missing fix for internal function)
2/24 Checking commit 3b0235d499e6 (block: implement bdrv_snapshot_goto for blkreplay)
3/24 Checking commit c0ebe8273d27 (replay: disable default snapshot for record/replay)
4/24 Checking commit 9095208014bf (replay: update docs for record/replay with block devices)
5/24 Checking commit edd54d274191 (replay: don't drain/flush bdrv queue while RR is working)
6/24 Checking commit 65eb56e3d888 (replay: finish record/replay before closing the disks)
7/24 Checking commit f8bce7c87f5e (qcow2: introduce icount field for snapshots)
8/24 Checking commit b7407e35d5b0 (migration: introduce icount field for snapshots)
9/24 Checking commit 52c7b50aa8f2 (replay: provide an accessor for rr filename)
10/24 Checking commit d7f6b220997f (qapi: introduce replay.json for record/replay-related stuff)
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
#101: 
new file mode 100644

total: 0 errors, 1 warnings, 80 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 cdc1e61eb21c (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 84e592947ff8 (replay: introduce breakpoint at the specified step)
13/24 Checking commit 0b02e3b0ccd0 (replay: implement replay-seek command)
14/24 Checking commit f2d2d121b365 (replay: refine replay-time module)
15/24 Checking commit f2b3c4a82866 (replay: flush rr queue before loading the vmstate)
16/24 Checking commit b31ce9d3992b (gdbstub: add reverse step support in replay mode)
17/24 Checking commit a261132db89f (gdbstub: add reverse continue support in replay mode)
ERROR: line over 90 characters
#71: FILE: gdbstub.c:2131:
+        pstrcat(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), ";ReverseStep+;ReverseContinue+");

total: 1 errors, 0 warnings, 146 lines checked

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

18/24 Checking commit d025976b680a (replay: describe reverse debugging in docs/replay.txt)
19/24 Checking commit 0be10699ffd9 (replay: add BH oneshot event for block layer)
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
#317: 
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 eaccfbb5661f (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 20/24 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
21/24 Checking commit 59212a623425 (util/qemu-timer: refactor deadline calculation for external timers)
22/24 Checking commit 1d080b473cb2 (replay: fix replay shutdown)
23/24 Checking commit b707ea6a2b99 (replay: rename step-related variables and functions)
24/24 Checking commit adb83324f96a (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/156110523748.25431.9310430853468653085.stgit@pasha-Precision-3630-Tower/testing.checkpatch/?type=message.
---
Email generated automatically by Patchew [https://patchew.org/].
Please send your feedback to patchew-devel@redhat.com
Re: [Qemu-devel] [PATCH for-4.1 00/24] Fix record/replay and add reverse debugging
Posted by dovgaluk 4 years, 10 months ago
Paolo,

what about merging reviewed and acked patches before the soft freeze?



Pavel Dovgalyuk

Pavel Dovgalyuk писал 2019-06-21 11:20:
> 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-190419
> 
> v17 changes:
>  - updated gdbstub patches according to the latest changes
> 
> v16 changes:
>  - rebased to 4.0
> 
> v15 changes:
>  - rebased to the new master
>  - removed obsolete rtc patch
>  - fixed misprint in the test
> 
> v14 changes:
>  - rebased to the new master
> 
> v13 changes:
>  - rebased to make QAPI stuff applicable
>  - minor reverse step/reverse continue fix
> 
> v12 changes:
>  - style fixes
> 
> 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 (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: 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
>  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                 |   63 ++++++++-
>  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/Makefile.objs        |    2
>  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 |  327 
> +++++++++++++++++++++++++++++++++++++++++++++
>  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 |    4 -
>  tests/ptimer-test.c       |    4 -
>  util/qemu-timer.c         |   41 +++++-
>  vl.c                      |   11 +-
>  51 files changed, 1014 insertions(+), 131 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


Re: [Qemu-devel] [PATCH for-4.1 00/24] Fix record/replay and add reverse debugging
Posted by Pavel Dovgalyuk 4 years, 10 months ago
Ping.


Pavel Dovgalyuk

> -----Original Message-----
> From: dovgaluk [mailto:dovgaluk@ispras.ru]
> Sent: Thursday, June 27, 2019 8:49 PM
> To: pbonzini@redhat.com
> Cc: qemu-devel@nongnu.org; kwolf@redhat.com; peter.maydell@linaro.org;
> crosthwaite.peter@gmail.com; boost.lists@gmail.com; artem.k.pisarenko@gmail.com;
> quintela@redhat.com; ciro.santilli@gmail.com; jasowang@redhat.com; mst@redhat.com;
> armbru@redhat.com; mreitz@redhat.com; maria.klimushenkova@ispras.ru; kraxel@redhat.com;
> pavel.dovgaluk@ispras.ru; thomas.dullien@googlemail.com; pbonzini@redhat.com;
> alex.bennee@linaro.org; dgilbert@redhat.com; rth@twiddle.net
> Subject: Re: [PATCH for-4.1 00/24] Fix record/replay and add reverse debugging
> 
> Paolo,
> 
> what about merging reviewed and acked patches before the soft freeze?
> 
> 
> 
> Pavel Dovgalyuk
> 
> Pavel Dovgalyuk писал 2019-06-21 11:20:
> > 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-190419
> >
> > v17 changes:
> >  - updated gdbstub patches according to the latest changes
> >
> > v16 changes:
> >  - rebased to 4.0
> >
> > v15 changes:
> >  - rebased to the new master
> >  - removed obsolete rtc patch
> >  - fixed misprint in the test
> >
> > v14 changes:
> >  - rebased to the new master
> >
> > v13 changes:
> >  - rebased to make QAPI stuff applicable
> >  - minor reverse step/reverse continue fix
> >
> > v12 changes:
> >  - style fixes
> >
> > 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 (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: 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
> >  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                 |   63 ++++++++-
> >  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/Makefile.objs        |    2
> >  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 |  327
> > +++++++++++++++++++++++++++++++++++++++++++++
> >  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 |    4 -
> >  tests/ptimer-test.c       |    4 -
> >  util/qemu-timer.c         |   41 +++++-
> >  vl.c                      |   11 +-
> >  51 files changed, 1014 insertions(+), 131 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