[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RFC][PATCH] make sure disk writes actually hit disk

From: andrzej zaborowski
Subject: Re: [Qemu-devel] [RFC][PATCH] make sure disk writes actually hit disk
Date: Mon, 31 Jul 2006 11:52:45 +0200

On 30/07/06, Jamie Lokier <address@hidden> wrote:
Rik van Riel wrote:
> This may look like hair splitting, but so far I've lost a
> (test) postgresql database to this 3 times already.  Not getting
> the guest application's data to disk when the application calls
> fsync is a recipe for disaster.

Exactly the same thing happens with real IDE disks if IDE write
caching (on the drive itself) is enabled, which it is by default.  It
is rarer, but it happens.

The little difference with QEMU is that there are two caches above it:
the host OS'es software cache and the IDE hardware cache. When a guest
OS flushes its own software cache its precious data goes to the host's
software cache while the guest thinks it's already the IDE cache. This
is ofcourse of less importance because data in both caches (hard- and
software) is lost when the power is cut off.

IMHO what really makes IO unreliable in QEMU is that IO errors on the
host are not reported to the guest by the IDE emulation and there's an
exact place in hw/ide.c where they are arrogantly ignored.

I've seen this with Linux 2.4 kernels writing to ext3 (real, not
virtual).  Filesystem metadata gets corrupted from time to time if
power is removed, because write ordering is not preserved.  Disabling
IDE write caching fixes it, but the performance impact is huge on some

Linux 2.6 kernels will issue IDE cache flush commands, at least with
ext3, to commit data to disk when fsync is called, and to preserve
journal/metadata ordering.

Doesn't qemu fsync the host file corresponding to the emulated disk,
when the guest OS issues an IDE cache flush?

For IDE emulation to be as reliable for data storage as a real disk,
it should:

    - fsync the host file whenever the guest OS issues an IDE cache
      flush command.

    - use O_SYNC (or fsync after each write or aio equivalent, etc.) _only_
      when the guest OS disables the IDE disk cache (not done by default).

-- JAmie

Qemu-devel mailing list

balrog 2oo6

Dear Outlook users: Please remove me from your address books

reply via email to

[Prev in Thread] Current Thread [Next in Thread]