[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] Live migration broken when under heavy IO
From: |
Glauber Costa |
Subject: |
Re: [Qemu-devel] Live migration broken when under heavy IO |
Date: |
Mon, 15 Jun 2009 17:48:52 -0300 |
User-agent: |
Jack Bauer |
On Mon, Jun 15, 2009 at 03:33:41PM -0500, Anthony Liguori wrote:
> The basic issue is that:
>
> migrate_fd_put_ready(): bdrv_flush_all();
>
> Does:
>
> block.c:
>
> foreach block driver:
> drv->flush(bs);
>
> Which in the case of raw, is just fsync(s->fd).
>
> Any submitted request is not queued or flushed which will lead to the
> request being dropped after the live migration.
you mean any request submitted _after_ that is not queued, right?
>
> Is anyone working on fixing this? Does anyone have a clever idea how to
> fix this without just waiting for all IO requests to complete?
If I understood you correctly, we could do something in the lines of dirty
tracking for I/O devices.
use register_savevm_live() instead of register_savevm() for those, and
keep doing passes until we reach stage 3, for some criteria. We can then
just flush the remaining requests on that device and mark[1] it somewhere.
We can then either stop that device, so that new requests never arrive,
or stop the VM entirely.
[1] By mark, I mean the verb "to mark", not our dear friend Mark McLaughing.
[Qemu-devel] Re: Live migration broken when under heavy IO, Charles Duffy, 2009/06/16