qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: Pavel Dovgalyuk <dovgaluk@ispras.ru>
Cc: 'Pavel Dovgalyuk' <Pavel.Dovgaluk@ispras.ru>,
	qemu-devel@nongnu.org, peter.maydell@linaro.org,
	war2jordan@live.com, mst@redhat.com, jasowang@redhat.com,
	zuban32s@gmail.com, kraxel@redhat.com,
	thomas.dullien@googlemail.com, artem.k.pisarenko@gmail.com,
	quintela@redhat.com, ciro.santilli@gmail.com, armbru@redhat.com,
	dgilbert@redhat.com, boost.lists@gmail.com,
	alex.bennee@linaro.org, rth@twiddle.net,
	crosthwaite.peter@gmail.com, mreitz@redhat.com,
	maria.klimushenkova@ispras.ru, pbonzini@redhat.com
Subject: Re: [Qemu-devel] [PATCH v7 04/19] replay: don't drain/flush bdrv queue while RR is working
Date: Fri, 30 Nov 2018 11:01:57 +0100	[thread overview]
Message-ID: <20181130100157.GB5106@localhost.localdomain> (raw)
In-Reply-To: <002101d48882$0905fb60$1b11f220$@ru>

Am 30.11.2018 um 08:55 hat Pavel Dovgalyuk geschrieben:
> > From: Kevin Wolf [mailto:kwolf@redhat.com]
> > Am 10.10.2018 um 15:33 hat Pavel Dovgalyuk geschrieben:
> > > In record/replay mode bdrv queue is controlled by replay mechanism.
> > > It does not allow saving or loading the snapshots
> > > when bdrv queue is not empty. Stopping the VM is not blocked by nonempty
> > > queue, but flushing the queue is still impossible there,
> > > because it may cause deadlocks in replay mode.
> > > This patch disables bdrv_drain_all and bdrv_flush_all in
> > > record/replay mode.
> > >
> > > Signed-off-by: Pavel Dovgalyuk <pavel.dovgaluk@ispras.ru>
> > 
> > Disabling bdrv_flush_all() shouldn't make a big difference in replay
> > mode, so I agree with that.
> > 
> > But does the bdrv_drain_all() change mean that bdrv_drain_all_begin()
> > can return while there are still requests in flight? This sounds like
> > something that could break some existing code, because the meaning of
> > the function is that if it returns success, no requests are in flight
> > any more.
> > 
> > What would move the request forward in the replay case once it has been
> > created? Does this also involve some user interaction? Or may we process
> > the next event in a drain callback of blkreplay or something?
> 
> You are right - there are some operation that can't be performed at any
> time during the replay, because of unfinished block requests.
> 
> One of these is creating the VM snapshot. I've added a check in another
> patch, which prevents snapshotting while the event queue (which holds
> the block requests) is not empty.
> 
> There could also be other things, that will be fixed when we try to use it.
> 
> Moving replay forward until the queue is empty is not a good idea, because
> step-by-step debugging should be available and work without skipping the instructions.

So if the idea is that in replay mode, bdrv_drain_all_begin() is only
called when there are no requests in flight anyway (because callers
catch this situation earler), can we make this an assertion that the
block device is already quiesced?

Skipping drain without knowing that there are no requests in flight
feels simply wrong, and I'm almost sure it will result in bugs. On the
other hand, if we know that no requests are in flight, there's no real
point in skipping.

So I think I still don't understand the situation where skipping a drain
is the correct solution.

Kevin

  reply	other threads:[~2018-11-30 10:02 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-10 13:33 [Qemu-devel] [PATCH v7 00/19] Fixing record/replay and adding reverse debugging Pavel Dovgalyuk
2018-10-10 13:33 ` [Qemu-devel] [PATCH v7 01/19] block: implement bdrv_snapshot_goto for blkreplay Pavel Dovgalyuk
2018-10-10 13:33 ` [Qemu-devel] [PATCH v7 02/19] replay: disable default snapshot for record/replay Pavel Dovgalyuk
2018-10-10 13:33 ` [Qemu-devel] [PATCH v7 03/19] replay: update docs for record/replay with block devices Pavel Dovgalyuk
2018-10-10 13:33 ` [Qemu-devel] [PATCH v7 04/19] replay: don't drain/flush bdrv queue while RR is working Pavel Dovgalyuk
2018-11-28 15:45   ` Kevin Wolf
2018-11-30  7:55     ` Pavel Dovgalyuk
2018-11-30 10:01       ` Kevin Wolf [this message]
2018-11-30 10:51         ` Pavel Dovgalyuk
2018-10-10 13:34 ` [Qemu-devel] [PATCH v7 05/19] replay: finish record/replay before closing the disks Pavel Dovgalyuk
2018-10-10 13:34 ` [Qemu-devel] [PATCH v7 06/19] qcow2: introduce icount field for snapshots Pavel Dovgalyuk
2018-11-28 14:33   ` Kevin Wolf
2018-10-10 13:34 ` [Qemu-devel] [PATCH v7 07/19] migration: " Pavel Dovgalyuk
2018-11-28 15:53   ` Kevin Wolf
2018-10-10 13:34 ` [Qemu-devel] [PATCH v7 08/19] replay: provide and accessor for rr filename Pavel Dovgalyuk
2018-10-10 13:34 ` [Qemu-devel] [PATCH v7 09/19] replay: introduce info hmp/qmp command Pavel Dovgalyuk
2018-10-10 13:34 ` [Qemu-devel] [PATCH v7 10/19] replay: introduce breakpoint at the specified step Pavel Dovgalyuk
2018-10-10 13:34 ` [Qemu-devel] [PATCH v7 11/19] replay: implement replay-seek command to proceed to the desired step Pavel Dovgalyuk
2018-10-10 13:34 ` [Qemu-devel] [PATCH v7 12/19] replay: refine replay-time module Pavel Dovgalyuk
2018-10-10 13:34 ` [Qemu-devel] [PATCH v7 13/19] replay: flush rr queue before loading the vmstate Pavel Dovgalyuk
2018-10-10 13:34 ` [Qemu-devel] [PATCH v7 14/19] gdbstub: add reverse step support in replay mode Pavel Dovgalyuk
2018-10-10 13:34 ` [Qemu-devel] [PATCH v7 15/19] gdbstub: add reverse continue " Pavel Dovgalyuk
2018-10-10 13:35 ` [Qemu-devel] [PATCH v7 16/19] replay: describe reverse debugging in docs/replay.txt Pavel Dovgalyuk
2018-10-10 13:35 ` [Qemu-devel] [PATCH v7 17/19] replay: add BH oneshot event for block layer Pavel Dovgalyuk
2018-11-28 16:01   ` Kevin Wolf
2018-11-30  8:21     ` Pavel Dovgalyuk
2018-11-30 11:18       ` Kevin Wolf
2018-11-30 11:26         ` Pavel Dovgalyuk
2018-10-10 13:35 ` [Qemu-devel] [PATCH v7 18/19] replay: init rtc after enabling the replay Pavel Dovgalyuk
2018-10-11 13:48   ` Artem Pisarenko
2018-10-10 13:35 ` [Qemu-devel] [PATCH v7 19/19] replay: document development rules Pavel Dovgalyuk
2018-10-11 15:08   ` Artem Pisarenko
2018-10-10 15:58 ` [Qemu-devel] [PATCH v7 00/19] Fixing record/replay and adding reverse debugging Aleksandr Bezzubikov
2018-10-15  8:46 ` Pavel Dovgalyuk

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=20181130100157.GB5106@localhost.localdomain \
    --to=kwolf@redhat.com \
    --cc=Pavel.Dovgaluk@ispras.ru \
    --cc=alex.bennee@linaro.org \
    --cc=armbru@redhat.com \
    --cc=artem.k.pisarenko@gmail.com \
    --cc=boost.lists@gmail.com \
    --cc=ciro.santilli@gmail.com \
    --cc=crosthwaite.peter@gmail.com \
    --cc=dgilbert@redhat.com \
    --cc=dovgaluk@ispras.ru \
    --cc=jasowang@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=maria.klimushenkova@ispras.ru \
    --cc=mreitz@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    --cc=rth@twiddle.net \
    --cc=thomas.dullien@googlemail.com \
    --cc=war2jordan@live.com \
    --cc=zuban32s@gmail.com \
    /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).